Observed since 20 Oct, 17:29 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
ableton-mcp-full
Full-coverage Ableton Live integration through the Model Context Protocol (mixer, automation, devices, scenes, arrangement, and more)
AbletonMCP connects Ableton Live to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Ableton Live. This integration enables prompt-assisted music production, track creation, and Live session manipulation.
Give feedback, get inspired, and build on top of the MCP: Discord. Made by Siddharth
The system consists of two main components, each organized by domain rather than as one large file:
AbletonMCP_Remote_Script/): A MIDI Remote Script for Ableton Live that opens a JSON/TCP socket server and dispatches commands to handler modules that call the Live Object Model (LOM).
socket_server.py - generic threaded JSON-over-TCP server (no Live API dependency)dispatcher.py - command registry and dispatch, with a LiveContext indirection layerlive_api_utils.py - pure helpers for looking up and serializing Live objectshandlers/ - one module per domain: session, transport, tracks, mixer, clips, scenes, devices, automation, browser, application__init__.py - thin ControlSurface subclass that wires the socket server to the dispatcherMCP_Server/): A Python server that implements the Model Context Protocol and connects to the Ableton Remote Script.
connection.py - the TCP/JSON client (AbletonConnection)mcp_instance.py - the shared FastMCP instance and lifespantools/ - one module per domain, mirroring the Remote Script's handler modules 1:1server.py - thin entry point that registers all tools and runs the serverEverything except the ControlSurface subclass itself (which needs Live's _Framework) is plain, dependency-free Python, importable and unit-testable outside of Ableton Live.
If you're on Mac, please install uv as:
brew install uv
Otherwise, install from [uv's official website][https://docs.astral.sh/uv/getting-started/installation/]
⚠️ Do not proceed before installing UV
Follow along with the setup instructions video
{
"mcpServers": {
"AbletonMCP": {
"command": "uvx",
"args": [
"ableton-mcp-full"
]
}
}
}
Run ableton-mcp-full without installing it permanently through uvx. Go to Cursor Settings > MCP and paste this as a command:
uvx ableton-mcp-full
⚠️ Only run one instance of the MCP server (either on Cursor or Claude Desktop), not both
Follow along with the setup instructions video (note: the video shows the older single-file version; the install location is the same, but you now copy a folder of files instead of a single __init__.py)
Download this repo, or at minimum the whole AbletonMCP_Remote_Script/ directory (it now contains several files and a handlers/ subfolder, not just __init__.py)
Find Ableton's MIDI Remote Scripts directory. Different OS and versions have different locations. One of these should work, you might have to look:
For macOS:
Contents/App-Resources/MIDI Remote Scripts//Users/[Username]/Library/Preferences/Ableton/Live XX/User Remote ScriptsFor Windows:
C:\ProgramData\Ableton\Live XX\Resources\MIDI Remote Scripts\C:\Program Files\Ableton\Live XX\Resources\MIDI Remote Scripts\
Note: Replace XX with your Ableton version number (e.g., 10, 11, 12)Create a folder called AbletonMCP in the Remote Scripts directory and copy the entire contents of this repo's AbletonMCP_Remote_Script/ directory into it (__init__.py, dispatcher.py, socket_server.py, live_api_utils.py, and the handlers/ subfolder) -- so you end up with .../AbletonMCP/__init__.py, .../AbletonMCP/handlers/tracks.py, etc.
Launch (or restart) Ableton Live
Go to Settings/Preferences → Link, Tempo & MIDI
In the Control Surface dropdown, select "AbletonMCP"
Set Input and Output to "None"
Once the config file has been set on Claude, and the remote script is running in Ableton, you will see a hammer icon with tools for the Ableton MCP.
Every tool below is available both to Claude (as an MCP tool) and as a Remote Script command; the two are always kept in exact 1:1 correspondence (enforced by a test, see Testing).
Session & transport - tempo, time signature, metronome, clip trigger quantization, undo/redo, play/stop/continue, song position, loop region, punch in/out, overdub, session record, cue points
Tracks & mixer - create/delete/duplicate MIDI, audio, and return tracks; rename, color, mute/solo/arm, monitoring state, input/output routing, group track fold state; volume, panning, sends, crossfader assign, master volume/crossfader
Clips - create/delete/duplicate session clips; fire/stop clips and stop-all; rename, color, loop region, quantize; add/get/remove MIDI notes; duplicate a session clip into the arrangement and list/delete arrangement clips
Scenes - create/delete/duplicate/fire scenes; rename, color, and tempo-lock
Devices - list devices on a track; load instruments/effects/samples from the browser; delete/activate devices; list/get/set device parameters; inspect rack chains and drum pads
Automation - clear and insert clip envelope points for any device parameter
Browser - browse the full category tree, look up items by path or URI, load items onto tracks, and preview items before loading
Here are some examples of what you can ask Claude to do:
AbletonMCP_Remote_Script/ directory (see Installation) and restart LiveThe system uses a simple JSON-based protocol over TCP sockets:
type and optional paramsstatus and result or messageThe whole command surface is unit tested without needing a running Ableton Live instance, using lightweight fakes for the Live Object Model (tests/fakes/live_objects.py):
uv pip install -e ".[dev]"
pytest
This runs:
tests/remote_script/ - every handler, the dispatcher's error handling, and the socket server, all against fakestests/mcp_server/ - the socket client (AbletonConnection) against a real loopback socket, plus every @mcp.tool against a fake connection, including a cross-check that every tool sends a command the Remote Script dispatcher actually knows abouttests/integration/ contains opt-in, read-only tests against a real Ableton Live instance (they never create/delete anything, to avoid mutating whatever project happens to be open). They're excluded by default and only run with:
pytest -m integration tests/integration
They're automatically skipped if nothing is listening on localhost:9877.
Some things Ableton Live's UI can do aren't exposed through the scriptable Live Object Model at all, so they're out of scope here too:
Automation envelope support (clear_clip_envelope/insert_envelope_point(s)) relies on Clip.automation_envelope, which has historically had version-to-version quirks in Live's own API; treat it as best-effort and verify results in the Live UI, especially on older Live versions.
Contributions are welcome! Please feel free to submit a Pull Request.
This is a third-party integration and not made by Ableton.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
mcpEnvironment{
"extras": "cli",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | mcp[cli]>=1.3.0 | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=8.0.0; extra == "dev" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-cov>=5.0.0; extra == "dev" | runtime |
bdist_wheel · 23.99 KB · Python py3
sdist · 18.2 KB · Python source
Observed since 20 Oct, 17:29 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:fa85bcb30bb99e5de0728b42f752b7a0137624a22e01e5acd9d8086611f716f3