An MCP server that lets AI agents read and write an Ableton Live Set as a graph.
Ableton Live の Live Set を、AI エージェントがグラフとして読み書きできるようにする MCP サーバーです。
If live-connector helps you, a star keeps us going.
Important
live-connector is early-stage software built on Ableton Extensions SDK 1.0.0-beta.1, and it requires a Live Beta build with Extensions support. If you are upgrading from v2.x, note that v3.0.0 consolidated the MCP surface into four tools and removed every v2.x tool name.
- Get the
.ablx. Downloadlive-connector-3.2.2.ablxfrom Releases, or runpnpm packagein the repository; it writes the file toapps/extension/dist/. - In Live, open Preferences → Extensions and choose the
.ablx, or drop it onto the page. - Turn Developer Mode OFF and restart Live.
- Check that it is running, and register it with Claude Code.
curl http://127.0.0.1:7799/health
claude mcp add --transport http live-connector http://127.0.0.1:7799/api/v1/mcp --scope projectCaution
The MCP server has no authentication. Do not forward port 7799 to other hosts, and keep AbletonOSC off your LAN.
If /health returns {"status":"pass","version":"3.2.2",...}, the server is up.
Tip
You only need to register the MCP server once. Reinstalling the .ablx keeps the same URL.
Restart Claude Code, open a Live Set, and try asking:
- "List the tracks and devices in this Live Set."
- "Create a MIDI track called Bass and add Wavetable to it."
- "Mute the Drums track. Actually, undo that."
- "What is the current value and range of Operator's Cutoff?"
The Live Set is a graph
Tracks, devices, parameters and clips are exposed as nodes and relationships, and agents read and write them with the same Cypher.
MATCH (:Track {name:"Drums"})-[:HAS_DEVICE]->(:Device {name:"Operator"})-[:HAS_PARAM]->(p:Parameter {name:"Cutoff"})
RETURN p.value, p.min, p.maxMATCH (t:MidiTrack {name:"Bass"}) CREATE (t)-[:HAS_DEVICE]->(d:Device {name:"Wavetable"})| Live | Graph |
|---|---|
| Track | Track node, with MidiTrack and AudioTrack as subtypes |
| Device on a track | (:Track)-[:HAS_DEVICE]->(:Device) |
| Device parameter | (:Device)-[:HAS_PARAM]->(:Parameter) |
| Mixer volume, pan and sends | (:Track)-[:HAS_MIXER]->(:Mixer)-[:HAS_VOLUME|HAS_PAN|HAS_SEND]->(:Parameter) |
| Rack chain | (:Device)-[:HAS_CHAIN]->(:Chain) |
| Playback state | virtual label Transport |
| Write history | virtual label WriteEvent |
| Capture job | virtual label RenderJob |
meta returns the complete list of labels and the grammar at runtime.
It runs inside Live
live-connector is a Live Extension, so there is no Remote Script or separate process to set up. The MCP server starts with Live and serves Streamable HTTP on a loopback address.
Every write can be undone
The SDK has no undo API, so live-connector records the operations that reverse each do write under a writeId. undo applies them newest first, or for a specific writeId. Each write is marked full, partial or none depending on how completely it can be restored; partial and none require confirmation. Query the history with MATCH (e:WriteEvent) RETURN e.
The log is kept as JSONL in the Extension's storage directory, up to 200 entries. When the SDK gains an undo API, this mechanism will be replaced.
SDK and OSC, each for what it does best
Set editing goes through the SDK. Transport control and Main output capture go through AbletonOSC, because the SDK has no API for them. OSC writes are read back to confirm they took effect, and a failed write is never retried automatically on the other backend.
Main output capture records the finished signal, including MIDI instruments and the devices on Main, by recording the Resampling input in real time. Pass source:"main" to render and go through two steps.
{"source":"main","startTime":0,"endTime":64,"preview":true}{"source":"main","startTime":0,"endTime":64,"background":true,"confirm":true,"planId":"plan-...","requestId":"capture-001"}startTime and endTime are zero-based quarter-note beats. During capture a temporary track is created and loop, punch and record mode are changed, then everything is restored. Other writes, undo, and another render are rejected until it finishes. Check progress with MATCH (j:RenderJob {id:"..."}) RETURN j.phase, j.progressFraction.
MCP tools
| Tool | Purpose |
|---|---|
meta |
Service info, LOM schema, Cypher grammar, allowed CALL procedures, examples, and a Live Set overview |
do |
Cypher reads and writes, and CALL for transport |
render |
Pre-FX rendering of an AudioTrack, or real-time capture of the Main output |
undo |
Reverts do writes |
The recommended flow is meta, then do reads, do writes, render, and undo when needed.
Cypher
| Kind | Supported |
|---|---|
| Read | MATCH … RETURN with projection, aggregation, ORDER BY, SKIP and LIMIT. Results are truncated at 500 rows without LIMIT |
| Write | SET, CREATE, DELETE, COPY |
| Pattern | Directed relationships, variable-length hops, basic comparison operators |
| Procedure | CALL transport.play(), transport.seek(), render.cancel() and others listed by meta |
Endpoints and settings
| Item | Value |
|---|---|
| MCP endpoint | http://127.0.0.1:7799/api/v1/mcp, Streamable HTTP |
| Health check | http://127.0.0.1:7799/health |
| Enable AbletonOSC | LIVE_CONNECTOR_OSC_ENABLED=true. Off by default; everything else works without it |
live-connector が役に立ったら、スターを付けてもらえると励みになります。
Important
live-connector は Ableton Extensions SDK 1.0.0-beta.1 の上で動く早期段階のソフトウェアで、Extensions に対応した Live の Beta ビルドが必要です。v2.x から更新する場合は注意してください。v3.0.0 で MCP ツールを 4 つに統合し、v2.x のツール名はすべて廃止しました。
.ablxを用意します。Releases からlive-connector-3.2.2.ablxをダウンロードするか、リポジトリでpnpm packageを実行するとapps/extension/dist/に生成されます。- Live の Preferences → Extensions で
.ablxを選ぶか、ページにドロップします。 - Developer Mode を OFF にして Live を再起動します。
- 起動を確認し、Claude Code に登録します。
curl http://127.0.0.1:7799/health
claude mcp add --transport http live-connector http://127.0.0.1:7799/api/v1/mcp --scope projectCaution
MCP サーバーに認証はありません。7799 番ポートを他のホストへ転送せず、AbletonOSC も LAN に公開しないでください。
/health が {"status":"pass","version":"3.2.2",...} を返せば起動しています。
Tip
MCP の登録は初回だけで済みます。.ablx を入れ直しても URL は変わらないので、再登録は要りません。
Claude Code を再起動し、Live Set を開いた状態で次のように頼んでみてください。
- 「今の Live Set のトラックとデバイスを一覧にして」
- 「Bass という MIDI トラックを作って Wavetable を挿して」
- 「Drums トラックをミュートして。やっぱり戻して」
- 「Operator の Cutoff の現在値と範囲を教えて」
Live Set をグラフとして扱います
トラック、デバイス、パラメータ、クリップをノードと関係として公開し、エージェントは読み取りも書き込みも同じ Cypher で行います。
MATCH (:Track {name:"Drums"})-[:HAS_DEVICE]->(:Device {name:"Operator"})-[:HAS_PARAM]->(p:Parameter {name:"Cutoff"})
RETURN p.value, p.min, p.maxMATCH (t:MidiTrack {name:"Bass"}) CREATE (t)-[:HAS_DEVICE]->(d:Device {name:"Wavetable"})| Live | グラフ |
|---|---|
| トラック | Track ノード。MidiTrack と AudioTrack はそのサブタイプです |
| トラック上のデバイス | (:Track)-[:HAS_DEVICE]->(:Device) |
| デバイスのパラメータ | (:Device)-[:HAS_PARAM]->(:Parameter) |
| ミキサーの音量、パン、センド | (:Track)-[:HAS_MIXER]->(:Mixer)-[:HAS_VOLUME|HAS_PAN|HAS_SEND]->(:Parameter) |
| Rack のチェーン | (:Device)-[:HAS_CHAIN]->(:Chain) |
| 再生状態 | 仮想ラベル Transport |
| 書き込み履歴 | 仮想ラベル WriteEvent |
| 録音ジョブ | 仮想ラベル RenderJob |
ラベルの完全な一覧と文法は、実行時に meta が返します。
Live の中で動きます
live-connector は Live の Extension なので、Remote Script や別プロセスを用意する必要はありません。MCP サーバーは Live と一緒に起動し、loopback アドレスで Streamable HTTP の接続を受け付けます。
すべての書き込みを取り消せます
SDK には undo の API がないため、do の書き込みごとに、それを打ち消す操作を writeId と一緒に記録します。undo は記録を新しいものから順に、または writeId を指定して適用します。書き込みは、元に戻せる度合いに応じて full、partial、none のどれかに分類され、partial と none の取り消しには確認が必要です。履歴は MATCH (e:WriteEvent) RETURN e で確認できます。
記録は Extension の保存領域に JSONL で最大 200 件まで残ります。SDK に undo の API が追加されたら、この仕組みを置き換える予定です。
SDK と OSC を得意分野で使い分けます
Set の編集は SDK で行います。再生の操作と Main 出力の録音は、SDK に API がないため AbletonOSC で行います。OSC での書き込みは読み戻して反映を確かめ、失敗した書き込みをもう一方の経路で自動的にやり直すことはしません。
Main 出力の録音では、MIDI 楽器の実音や、Main 上のデバイスを通した完成形の音を、Resampling 入力の実時間録音で取得します。render に source:"main" を渡し、計画の取得と実行の 2 段階で進めます。
{"source":"main","startTime":0,"endTime":64,"preview":true}{"source":"main","startTime":0,"endTime":64,"background":true,"confirm":true,"planId":"plan-...","requestId":"capture-001"}startTime と endTime は 0 始まりの四分音符の拍数です。録音中は一時トラックを作り、loop、punch、record mode を一時的に変更し、終了後に元へ戻します。録音が終わるまで、ほかの書き込み、undo、別の render は受け付けません。進捗は MATCH (j:RenderJob {id:"..."}) RETURN j.phase, j.progressFraction で確認します。
MCP ツール
| ツール | 役割 |
|---|---|
meta |
サービス情報、LOM スキーマ、Cypher の文法、使える CALL 手続き、例文、Live Set の概要を返します |
do |
Cypher で読み書きし、再生操作の CALL を実行します |
render |
AudioTrack を Pre-FX でレンダリングするか、Main 出力を実時間で録音します |
undo |
do の書き込みを取り消します |
推奨する順序は、meta、do での読み取り、do での書き込み、render です。必要なら最後に undo で戻します。
Cypher
| 種類 | 対応範囲 |
|---|---|
| 読み取り | MATCH … RETURN。射影、集計、ORDER BY、SKIP、LIMIT に対応します。LIMIT を省くと 500 行で打ち切ります |
| 書き込み | SET、CREATE、DELETE、COPY |
| パターン | 向きのある関係、可変長の hop、基本的な比較演算 |
| 手続き | CALL transport.play()、transport.seek()、render.cancel() など。一覧は meta が返します |
エンドポイントと設定
| 項目 | 値 |
|---|---|
| MCP エンドポイント | http://127.0.0.1:7799/api/v1/mcp。Streamable HTTP で接続します |
| ヘルスチェック | http://127.0.0.1:7799/health |
| AbletonOSC の有効化 | LIVE_CONNECTOR_OSC_ENABLED=true。既定では無効で、使わなくてもほかの機能は動きます |
