ableton-agent-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ableton-agent-mcpChange the tempo to 120 BPM and start playback."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ableton-agent
Drive Ableton Live from an LLM agent. An MCP server exposes a running Live session — its tracks, devices, browser, clips, Arrangement and MIDI notes — as 51 tools an agent can call, plus the typed TypeScript library those tools are built on.
Everything runs locally over OSC, against your own open Live session.
What an agent can do with it
Area | Tools |
Project & transport |
|
Tracks & mixer |
|
Browser & devices |
|
Session clips |
|
Arrangement |
|
MIDI notes |
|
get_project_state is the one an agent should reach for first — it returns tempo, signature, key, transport state, and every track with its mixer values, devices and clips in a single call.
Related MCP server: io.github.peterkolbe/ableton-for-ai
Requirements
Ableton Live 11 — developed and verified against Live 11. Any edition; Max for Live is not required.
Bun 1.3+
macOS — what this is developed and tested on. Nothing here is macOS-specific in principle, but Windows is untested; the equivalent Remote Scripts folder there is
Documents\Ableton\User Library\Remote Scripts.
Setup
Install dependencies:
bun installInstall the AbletonAgent remote script — this is the transport, so nothing works without it. Symlink or copy packages/ableton-agent/remote-script/AbletonAgent into Live's User Library:
bun run --filter ableton-agent install-remote-scriptPass --target-dir <path> if your Live User Library lives somewhere else.
Then enable AbletonAgent as a Control Surface in Live's Preferences → Link/Tempo/MIDI. Once enabled it's active for every project you open. Live only loads remote scripts at startup, so restart Live after installing or editing it.
Sanity-check that Live is reachable:
bun run --filter ableton-agent check-agentWiring it into an MCP client
The server speaks MCP over stdio, so it's launched by the client rather than left running in a terminal.
Claude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"ableton-agent": {
"command": "bun",
"args": ["run", "/absolute/path/to/ableton-agent/packages/ableton-agent-mcp/index.ts"]
}
}
}Claude Code:
claude mcp add ableton-agent -- bun run /absolute/path/to/ableton-agent/packages/ableton-agent-mcp/index.tsTo run it directly while debugging: bun run --filter ableton-agent-mcp start.
Configuration
Ports are fixed on both sides by default; override with env vars if you've changed either end.
Env var | Default | Transport |
|
| AbletonAgent |
|
| AbletonAgent |
|
| AbletonAgent |
|
| AbletonAgent |
|
| Max bridge |
|
| Max bridge |
|
| Max bridge |
|
| Max bridge |
If you change the AbletonAgent ports, change them in remote-script/AbletonAgent/__init__.py too — OSC_LISTEN_PORT must match ABLETON_AGENT_REMOTE_PORT, and OSC_REPLY_PORT must match ABLETON_AGENT_LOCAL_PORT.
Optional: the Max for Live bridge
packages/ableton-agent/max/ableton-agent.amxd is an auxiliary second transport (ports 9000/9001) offering generic get/set/call access to the Live Object Model. It's useful for raw poking and diagnostics, and it can run side by side with the remote script — but nothing in the library or MCP server needs it. Load it onto any track in your set if you want it.
Using the library directly
packages/ableton-agent is usable on its own, without MCP — a typed façade (Live/Song/Track/Clip/Device) over the OSC transports. Every method returns a promise that resolves once Live has actually executed the change, so a resolved call means it happened, and a bad path rejects with Live's own error.
import { Live } from "ableton-agent";
const live = new Live({
max: { address: "127.0.0.1", localPort: 9001, remotePort: 9000 },
remote: { address: "127.0.0.1", localPort: 9011, remotePort: 9010 },
});
await live.connect();
console.log(await live.getProjectState());
const track = live.track(0);
await track.setVolume(0.85);
await track.clip(0).addNotes([{ pitch: 60, start: 0, duration: 1, velocity: 100 }]);
live.song.onIsPlayingChange((playing) => console.log(playing ? "playing" : "stopped"));
await live.song.play();Repo layout
A Bun workspace with two packages:
packages/ableton-agent— the TypeScript library plus the two OSC transports: the PythonAbletonAgentremote script (primary — everything goes through it) and the Max for Livebridge.jsdevice (auxiliary, generic get/set/call only).packages/ableton-agent-mcp— the MCP server, following the DAW tool spec in.claude/references/daw_mcp_tool_specs.mdwherever the Live Object Model supports it.
Run a package script from the root with --filter:
bun run --filter ableton-agent check-agent
bun run --filter ableton-agent-mcp startTesting
There are two kinds of tests, and the difference matters:
# Hermetic — no Ableton needed, safe to run anywhere.
bun test packages/ableton-agent/live.test.ts \
packages/ableton-agent/liveBridge.test.ts \
packages/ableton-agent-mcp/index.test.tsThese exercise the library and every MCP tool against an in-memory stand-in for Ableton (testSupport/fakeAbleton.ts) that speaks the real OSC wire protocol over real sockets.
# Everything, including the real-session integration suite.
bun testPlain bun test also picks up index.real.test.ts, which drives a real, running Ableton Live session. There's no opt-in flag and no skipping: every test always attempts its real call and reports a genuine pass or fail, so bun test requires Ableton to be open and will start real, audible playback. If Live isn't reachable, those tests fail with a message explaining what's missing — use check-agent to debug connectivity.
All its mutations are confined to a scratch MIDI track it creates and deletes; the global properties it touches (tempo, time signature, key, playhead) are saved and restored.
License
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Ableton Live that exposes the Live Object Model to LLMs, enabling natural language control of music production.36714MIT
- AlicenseAqualityCmaintenanceMCP server that bridges Ableton Live with AI models, enabling real-time project inspection and control such as track overview, device parameters, and audio analysis.12MIT
- FlicenseBqualityDmaintenanceMCP server for controlling Ableton Live, enabling AI assistants to interact with Live sessions through tools for track/clip/scene management, playback control, and device parameter adjustments.48
- AlicenseBqualityBmaintenanceLocal MCP server for inspecting and controlling Ableton Live through a local HTTP bridge. Enables LLMs to perform production workflows like MIDI import, track editing, mixing, mastering, and export.59168MIT
Related MCP Connectors
MCP server for Producer/Riffusion AI music generation
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ju5tinz/ableton-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server