Skip to main content

Ableton Live MCP

PyPI Python Tests License: MIT

MCP Server for Ableton Live, to let AI agents control or inspect Ableton.

Quick Start

  1. Install uv if you don't have it
  2. Install Remote Script: Copy the ableton/ folder into Ableton's MIDI Remote Scripts directory as AbletonLiveMCP/ (see detailed instructions below)
  3. Enable in Ableton: Settings > Link, Tempo & MIDI > Control Surface > AbletonLiveMCP
  4. Connect Claude: pick one method from Setup below
  5. Go: Ask Claude to do something in Ableton

How It Works

Claude  →  MCP Server  →  TCP :16619  →  Remote Script (inside Ableton)
                                              ↓
                                        exec(python_code)
                                              ↓
                                     Live Object Model
                                   (song, tracks, clips, devices, browser...)

The Remote Script runs inside Ableton's embedded Python interpreter. Claude sends Python code as a string, the Remote Script exec()s it with the full Live API in scope, and returns the serialized result. There are no predefined commands — anything the Live API supports is available immediately.

What Claude Can Do

# Read session state
song.tempo                                        # → 120.0
[(i, t.name) for i, t in enumerate(song.tracks)]  # → [(0, "Bass"), (1, "Drums"), ...]

# Modify session
song.tempo = 140
song.tracks[0].name = "Lead Synth"

# Create tracks and clips
song.create_midi_track(-1)
song.tracks[-1].clip_slots[0].create_clip(4.0)

# Write MIDI notes (MidiNoteSpecification is in scope, no import needed)
clip = song.tracks[0].clip_slots[0].clip
clip.add_new_notes(tuple([
    MidiNoteSpecification(pitch=60, start_time=0.0, duration=0.5, velocity=100),
    MidiNoteSpecification(pitch=64, start_time=1.0, duration=0.5, velocity=90),
]))

# Find and load instruments (find_item, find_items, find_track, load_to are in scope)
load_to(song.tracks[0], browser.instruments, "Grand Piano")
load_to(find_track("Drums"), browser.drums, "808")

# Control transport
song.start_playing()
song.stop_playing()
song.tracks[0].clip_slots[0].fire()

# Mix
find_track("Bass").mixer_device.volume.value = 0.7
song.tracks[0].mixer_device.panning.value = -0.3

Prerequisites

  • Ableton Live 11+ (uses the extended MIDI note API)
  • uv — handles Python and dependencies automatically

Install uv

macOS/Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

You do not need to install Python separately — uv manages that for you.

Setup

1. Install the Remote Script

The Remote Script runs inside Ableton. It needs to be in Ableton's MIDI Remote Scripts directory.

Option A — Download just the Remote Script (if you're using uvx and don't need the full repo):

Download ableton/__init__.py from this repo and place it in a folder called AbletonLiveMCP inside:

  • Windows: C:\ProgramData\Ableton\Live XX\Resources\MIDI Remote Scripts\
  • macOS: Right-click Ableton Live > Show Package Contents > Contents/App-Resources/MIDI Remote Scripts/

Option B — Clone the repo and symlink (recommended for development):

git clone https://github.com/opendining/ableton-mcp-server.git
# Windows (PowerShell, run once)
New-Item -ItemType Junction `
  -Path "C:\ProgramData\Ableton\Live 12 Intro\Resources\MIDI Remote Scripts\AbletonLiveMCP" `
  -Target "C:\path\to\abletonmcp\ableton"

Then enable in Ableton: Settings > Link, Tempo & MIDI > Control Surface > AbletonLiveMCP (Input/Output: None).

2. Connect Claude

Pick one method. Using multiple at once will start duplicate servers.

Claude Desktop (no clone needed)

Edit your config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
    "mcpServers": {
        "AbletonLiveMCP": {
            "command": "uvx",
            "args": ["ableton-live-mcp"]
        }
    }
}

Claude Code (no clone needed)

claude mcp add --scope user AbletonLiveMCP -- uvx ableton-live-mcp

Claude Code plugin (clone required)

Auto-starts the MCP server and loads the agent guide skill:

claude --plugin-dir /path/to/abletonmcp

From a cloned repo

If you cloned the repo and want to run from source instead of PyPI:

# Claude Code
claude mcp add --scope user AbletonLiveMCP -- uv run --directory /path/to/abletonmcp ableton-live-mcp
// Claude Desktop
{
    "mcpServers": {
        "AbletonLiveMCP": {
            "command": "uv",
            "args": ["run", "--directory", "/path/to/abletonmcp", "ableton-live-mcp"]
        }
    }
}

3. Verify

  1. Make sure Ableton is running with AbletonLiveMCP control surface active
  2. Start/restart your Claude client
  3. The MCP server connects to Ableton automatically on first use

Troubleshooting: Check Ableton's Log.txt for Remote Script errors:

  • Windows: %APPDATA%\Ableton\Live x.x.x\Preferences\Log.txt
  • macOS: ~/Library/Preferences/Ableton/Live x.x.x/Log.txt

MCP Tools

The server exposes three tools:

Tool Purpose
execute(code) Send Python code to run inside Ableton. The main tool.
api(class_name?) Browse the Live API reference by class (Song, Track, Clip, Device, etc.).
search_api(query) Search the API reference by keyword across all classes.

api and search_api read from a structured API reference. Claude can execute anything the Live API supports, not just what's in the reference.

Execution Scope

Every execute call gets a fresh namespace with:

Variable What It Is
song The Live Set — tempo, tracks, scenes, transport
app The Live Application — browser, version info
tracks Shortcut for song.tracks (stale after create/delete — use song.tracks or find_track)
returns song.return_tracks
master song.master_track
browser app.browser — instruments, effects, drums, sounds
Live The Live module — Live.Clip, Live.Device, etc.
MidiNoteSpecification Live.Clip.MidiNoteSpecification — no import needed
find_item(parent, query) Search browser tree for best match. Returns BrowserItem or None
find_items(parent, query) Search browser tree, return ranked list of matches
find_track(name) Look up a track by name. Returns Track or None
load_to(track, parent, query) Find a browser item and load it onto a track
log Write to Ableton's Log.txt
json The json module
time The time module

Architecture

See DEVELOPMENT.md for the full technical guide.

Acknowledgments

This project was inspired by ahujasid/ableton-mcp, which pioneered the idea of connecting Ableton Live to AI agents via MCP. That project uses a fixed set of tool-per-action commands (create track, add notes, set tempo, etc.).

This fork takes a different approach inspired by Cloudflare's Code Mode: instead of predefined commands, the agent writes and executes Python directly against Ableton's runtime. A streamlined execution scope with built-in helpers (find_item, find_track, load_to, etc.) and a searchable API reference give the model everything it needs to use the full Live API without being limited to a curated command set.

License

MIT

Metadata

Release files for ableton-live-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ableton-live-mcp 0.1.1
File Size Uploaded
ableton_live_mcp-0.1.1.tar.gz 21.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ableton-live-mcp 0.1.1
File Interpreter ABI Platform
ableton_live_mcp-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 39.6 kB

Release files / ableton_live_mcp-0.1.1.tar.gz

Download URL ableton_live_mcp-0.1.1.tar.gz
Size 21.3 kB
Tags Source
SHA-256 checksum
How to use checksums
6fc6a6e640803b2a11b79272ece2a5fc0b293295cdc57f4c20b2fc5386c29afe
BLAKE2b-256 checksum
How to use checksums
629ac55136567686b10f9965267cb4ff27b45f5c1579d498324e633359f01316
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 2, 2026.

Transparency log

Release files / ableton_live_mcp-0.1.1-py3-none-any.whl

Download URL ableton_live_mcp-0.1.1-py3-none-any.whl
Size 18.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3c4b6ab0f73acb0d469929aaf5dffa92eaac25b19a78cdca595b1003554863e3
BLAKE2b-256 checksum
How to use checksums
9bf59448eac1a3735503d7c37be3bcd5a9dda26740ff17a8e0e02a288dea0aa9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 2, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page