ableton-mcp
by mrinalghosh
README.md
# ableton-mcp
An MCP server that lets Claude observe and compose in Ableton Live 12 via [AbletonOSC](https://github.com/ideoforms/AbletonOSC).
Designed for musicians who want a pair-programming-style collaborator: Claude can read your Live set, explain what's there, and write musical ideas directly into clips — then narrate the choices so you learn as you go.
## Status
**v0.8** — high-level composition tools and a simpler write API. `create_chord_progression` (roman numerals or chord names + key) and `create_drum_pattern` (step strings like `x...x...x...x...`) let Claude express harmonic and rhythmic ideas in a few tokens instead of emitting raw note lists. The duplicate/delete/rename trio per object collapses into one `edit_track` / `edit_clip` / `edit_scene` tool each, cutting the surface area Claude has to reason about. Browser listing in the forked AbletonOSC now caches per-folder results, so the first hit pays the disk walk and subsequent `list_browser` calls return instantly (previously they tripped the 2.0s OSC timeout on large libraries). v0.7 added analyze tools (`detect_clip_key`, `detect_track_key`, `detect_session_key`) using Krumhansl-Schmuckler key profiles. Builds on v0.6 scenes + color, v0.5 revise-and-respond (undo, capture MIDI), v0.4 automation, and v0.3 browser/loading.
## How it works
```
Claude ←→ MCP (this repo, stdio) ←→ python-osc ←→ AbletonOSC remote script ←→ Ableton Live 12
```
## Tool surface (v0.8)
**Read** — `get_session_overview`, `get_track_detail`, `get_clip_notes`, `get_transport_state`, `get_selected`, `get_device_parameters`, `list_browser`, `sample_clip_automation`
**Analyze** — `detect_clip_key`, `detect_track_key`, `detect_session_key`
**Revise** — `undo`
**Write** — `create_midi_clip`, `modify_clip_notes`, `create_chord_progression`, `create_drum_pattern`, `set_tempo`, `set_time_signature`, `create_track`, `load_device`, `set_device_parameter`, `set_clip_automation` / `clear_clip_automation`, `set_track_volume` / `set_track_panning` / `set_track_mute` / `set_track_solo` / `set_track_arm`, `edit_track` / `edit_clip` / `edit_scene` (duplicate, delete, rename), `create_scene`, `set_clip_color` / `set_scene_color`, `capture_midi`, `fire_clip` / `fire_scene` / `stop_clip` (gated — Claude must ask the user)
## Setup
### 1. Install AbletonOSC in Live
This repo bundles a [forked AbletonOSC](https://github.com/mrinalghosh/AbletonOSC) as a submodule with a `BrowserHandler` added for `list_browser` / `load_device`. Clone with submodules and symlink into Live's MIDI Remote Scripts folder:
```bash
git clone --recurse-submodules https://github.com/mrinalghosh/ableton-mcp.git
cd ableton-mcp
# macOS
ln -s "$PWD/AbletonOSC" "$HOME/Music/Ableton/User Library/Remote Scripts/AbletonOSC"
```
- macOS: `~/Music/Ableton/User Library/Remote Scripts/`
- Windows: `Documents\Ableton\User Library\Remote Scripts\`
Then in Live → Settings → Link, Tempo & MIDI, add `AbletonOSC` as a Control Surface.
### 2. Install this MCP server
```bash
git clone https://github.com/mrinalghosh/ableton-mcp.git
cd ableton-mcp
pip install -e .
```
### 3. Register with Claude
Add to your Claude Code / Claude Desktop MCP config:
```json
{
"mcpServers": {
"ableton": {
"command": "ableton-mcp"
}
}
}
```
## Pedagogy
The system prompt asks Claude to **write first, then explain**: when you ask for a musical idea, Claude generates the MIDI directly into Live, then narrates the choices (key, rhythm, voice leading). When you ask "what is this?", Claude grounds itself with `get_selected` before answering.
## Known quirks
- **Track/clip names come back with hyphens instead of spaces.** AbletonOSC normalizes whitespace in string responses, so a track displayed in Live as `1 MIDI` is reported as `1-MIDI`. We pass this through unchanged — reversing it would corrupt names the user actually wrote with hyphens.
- **`undo` is per-Live-action, not per-MCP-tool.** A single MCP write may correspond to several Live undo steps (e.g. `create_track` + `load_device` + `create_midi_clip` is three undos), or to one (a `modify_clip_notes` with 16 notes is one). To fully reverse a multi-step change, call `undo` repeatedly — the reply's `can_undo_more` flag indicates whether more history remains. AbletonOSC doesn't expose undo grouping, so we can't fix this in the wrapper.
## Roadmap
- ~~v0.1: end-to-end smoke test against real Live instance; name tracks after creation~~
- ~~v0.2: device parameter control (`get_device_parameters`, `set_device_parameter`); per-track mixer (volume, pan, mute, solo)~~
- ~~v0.3: browse Live's Library and load instruments/effects onto tracks (forked AbletonOSC adds `BrowserHandler`)~~
- ~~v0.4: clip automation lanes — read/write parameter envelopes inside a clip (forked AbletonOSC adds `AutomationHandler`)~~
- ~~v0.5: revise-and-respond — `undo`; `duplicate_clip` / `delete_clip` / `delete_track` / `rename_track` / `rename_clip`; capture MIDI (record-arm + Capture) so Claude can riff on what you just played~~
- ~~v0.6: scene management (`create_scene`, `fire_scene`, `delete_scene`, `rename_scene`); clip color so Claude can visually group variants~~
- ~~v0.7: scale/key inference — `detect_clip_key` / `detect_track_key` / `detect_session_key` using Krumhansl-Schmuckler key profiles, plus pitch utility helpers~~
- ~~v0.8: high-level composition tools (`create_chord_progression`, `create_drum_pattern`) so Claude can express musical ideas in a few tokens; collapse per-object dup/delete/rename into single `edit_track` / `edit_clip` / `edit_scene` tools; cache browser folder listings in AbletonOSC fork to fix `list_browser` timeouts on large libraries~~
- v0.9: quantize captured MIDI — close the capture loop with `quantize_clip`
## License
MIT — see [LICENSE](LICENSE).
TDQS
B3.4/5.0
Scored across 13 tools
Disambiguation5/5
Each tool targets a distinct action or resource: clip creation/modification, transport controls, track management, session overview, and shortcut lookup. No two tools have overlapping purposes.
Naming Consistency5/5
All tools follow a consistent snake_case verb_noun pattern (e.g., create_midi_clip, get_clip_notes, set_tempo), making them predictable and easy to distinguish.
Tool Count5/5
13 tools cover the essential operations for an Ableton Live assistant without being overwhelming. The scope is well-balanced for core music production tasks.
Completeness4/5
Covers clip, track, transport, and session management. Missing operations like delete_track or record_arm are minor gaps that agents can work around, but core workflows are solid.
Maintenance
ActivityInactive
ResponsivenessNo issues