able-mcp
v0.1.0This is the official Ableton Extension API 1.0 bridge for ABLE-MCP. It runs inside Live's Extension Host (Node 22) and exposes a WebSocket JSON-RPC 2.0 server that the Python MCP server connects to.
ABLE-MCP Ableton Extension (.ablx)
This is the official Ableton Extension API 1.0 bridge for ABLE-MCP. It runs inside Live's Extension Host (Node 22) and exposes a WebSocket JSON-RPC 2.0 server that the Python MCP server connects to.
It is the recommended bridge for Live 12 with the Extensions feature enabled. The legacy Max for Live bridge remains available for older setups and for transport-control workflows.
Wire protocol
- Endpoint:
ws://127.0.0.1:9831(override withABLE_MCP_BRIDGE_HOST/ABLE_MCP_BRIDGE_PORTenv vars in Live). - On connect the server sends a notification:
{"jsonrpc":"2.0","method":"bridge.hello","params":{"protocol":"able-mcp/0.2-ext","version":"0.1.0"}} - Identical method names to the M4L bridge so the Python
BridgeClientis unchanged.
Methods
Stable across both bridges:
pingsong.getTempo,song.setTemposong.getState(transport fields arenullin the extension; see below)song.listTrackstrack.create(the M4Lindexarg is rejected — extension always appends)track.delete,track.renameclip.createMidi(session slot only;indexarg rejected)clip.setNotes(replaces all notes — server normalizes input)clip.delete
Extension-only (not in the M4L bridge):
audio.import— import a WAV/AIFF into the project, place in session slot or arrangementaudio.renderTrack— render pre-FX audio of an arrangement track to WAVarrangement.createMidiClip— create empty MIDI clip in arrangementscene.createenv.info— storage/temp dirs, Live UI language
Not supported by the SDK 1.0 beta (the methods exist but return JSON-RPC error
-32000):
- Transport:
transport.isPlaying,transport.play,transport.stop,transport.continue - View selection:
view.getSelection song.undo,song.redo(the SDK auto-undoes mutations and groups them viawithinTransaction)
Use the M4L bridge for those workflows until the API exposes them.
Build
Requires Node 22+ and npm. The Ableton SDK and CLI tarballs in
../extensions-sdk-1.0.0-beta.0/ are loaded via file: deps; no SDK access
to npm registry is needed.
cd extension
npm install
npm run build # dev bundle with sourcemaps -> dist/extension.cjs
npm run build:prod # minified bundle
npm run package # production build + ../dist/AbleMCP.ablx
npm audit should report 0 vulnerabilities. We pin ws ≥ 8.21.0 and
tsx ≥ 4.22.4 to clear known CVEs.
Smoke test (no Live required)
tests/smoke.js boots the same RpcServer on port 9842 with stub methods
and round-trips: bridge.hello, ping, error mapping, method-not-found, and
a fake song.getTempo.
npm run smoke
Install in Live
- Copy
dist/AbleMCP.ablxto Live's Extensions directory (see Live's "Extensions" preference page for the platform-specific path). - Restart Live. The extension activates automatically.
- Live's Extension log should show
bridge listening on ws://127.0.0.1:9831. - From the Python side, run the
live_check_bridgeMCP tool — you should seeprotocol: "able-mcp/0.2-ext".
Environment variables (read at activation)
ABLE_MCP_BRIDGE_HOST(default127.0.0.1)ABLE_MCP_BRIDGE_PORT(default9831)
Bind to localhost only. The bridge has no authentication; do not expose it on a network interface.
Layout
extension/
manifest.json # Ableton extension manifest
package.json
tsconfig.json
build.ts # esbuild bundler (CJS, node22, all deps inlined)
src/
extension.ts # activate() entry point
rpc.ts # WebSocket JSON-RPC 2.0 server
methods.ts # SDK-typed method implementations
tests/
smoke.js # offline wire-protocol smoke test
Rate this extension
One rating per account; you can change it any time.
Comments
No comments yet.