Ableton Live MCP Server
PYPI · MCP-SERVER-ABLETON-LIVE · SCANNED SEP 20
Control Ableton Live with 156 typed tools for music production and offline .als analysis.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 0 of 34 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency35
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 2 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability87
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 14608 tokens (~93/item across 156 items; 156 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage77
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 20% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 157 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Ableton Live MCP Server server?
Ableton Live MCP Server runs locally as a PyPI package, launched with uvx mcp-server-ableton-live. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · mcp-server-ableton-live
claude mcp add wstierhout-ableton-live-mcp -- uvx mcp-server-ableton-live
{
"mcpServers": {
"wstierhout-ableton-live-mcp": {
"command": "uvx",
"args": [
"mcp-server-ableton-live"
]
}
}
} {
"servers": {
"wstierhout-ableton-live-mcp": {
"command": "uvx",
"args": [
"mcp-server-ableton-live"
]
}
}
} codex mcp add wstierhout-ableton-live-mcp -- uvx mcp-server-ableton-live
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"wstierhout-ableton-live-mcp": {
"type": "local",
"command": [
"uvx",
"mcp-server-ableton-live"
],
"enabled": true
}
}
} openclaw mcp add wstierhout-ableton-live-mcp --command uvx --arg mcp-server-ableton-live
mcp_servers:
wstierhout-ableton-live-mcp:
command: "uvx"
args: ["mcp-server-ableton-live"] {
"McpServers": {
"wstierhout-ableton-live-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"mcp-server-ableton-live"
]
}
}
} assistant mcp add wstierhout-ableton-live-mcp -t stdio -c uvx -a mcp-server-ableton-live
{
"mcpServers": {
"wstierhout-ableton-live-mcp": {
"command": "uvx",
"args": [
"mcp-server-ableton-live"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 19 Sept 26 −3
- Stability: pass → 0.80 functional
- 18 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- Stability: 0.97 → pass security
- 17 Sept 26 0
- Malware scan: pass → unverified ▼ security
- Package version: 1.8.0 → 1.8.1 functional
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 14 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- 12 Sept 26 +12
- Malware scan: unverified → pass ▲ security
- Stability: pass → 0.80 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/mcp-server-ableton-live@1.8.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | setuptools.build_meta |
Background: Why install scripts are a supply-chain risk →
Dependencies 34 packages
| Packages resolved | 34 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_notes_to_clip ~125
REPLACES the clip's entire note content with the given notes. Use edit_notes to add or remove a subset without touching the rest. notes: list of {"pitch": 0-127 (60 = C3 in Live's naming), "start_time": beats from clip start (float), "duration": beats, "velocity": 1-127, "mute": bool}. Precondition: the clip must exist (create_clip first).
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | – |
| notes | array | yes | – |
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
adg_analyze ~111
Full offline analysis of a .adg rack or .adv preset: named macros (name/value), the chain + device tree (recursive, incl. racks-inside-racks with each device's kind/name/on-state and any sample), legacy macro-> parameter mappings, every referenced sample (name + relative path), the required Live edition, and — for drum racks — the pad map (pad -> MIDI note, label, and sample). No Live required.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
adg_edition ~125
Classify the Live edition a saved .adg/.adv needs, offline: 'suite' if any Suite-only device is present (Operator, Wavetable, Echo, Drift, Meld, Sampler, Collision, ...), else 'standard' if any Standard-only device is present (EQ Eight, Compressor, Simpler, Impulse, Drum Rack, ...), else 'intro'. Returns the verdict plus which devices drove it, so an agent can tell whether a preset will load on the user's edition before loading it.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
adg_summary ~118
Summarize a saved .adg rack or .adv device preset WITHOUT Live running: name, rack type, total device count, top-level chain count, named-macro count, required Live edition (intro/standard/suite), and whether it is a drum kit (`is_drum_rack` is true when the preset is or wraps a Drum Rack — factory kits ship wrapped in an Instrument Rack). `path` is a filesystem path to a .adg or .adv file.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
als_details ~68
Read mixing and arrangement detail from a saved .als, offline: the set's locators (name + beat time) and each track's fader volume, pan, and number of automation lanes. Complements als_summary for reviewing a mix without Live.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
als_detect_key ~111
Detect the key/scale of a saved .als file WITHOUT Live running (Krumhansl-Kessler). Pools notes from every MIDI clip in the set, or only one track when `track_index` is given. `weight` selects the histogram weighting ("duration", "velocity", "product", "count"). `path` is a filesystem path to a .als file.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| track_index | – | – | – |
| weight | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
als_diff ~90
Diff two saved .als files (e.g. song_v4.als vs song_v5.als) offline: tempo/time-signature changes, tracks added/removed by name, and per-track deltas in device chain, clip count, note count, and mute state. Great for logging what changed between versions.
| Name | Type | Req | Description |
|---|---|---|---|
| path_a | string | yes | – |
| path_b | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
als_extract_midi ~75
Extract MIDI notes from a track in a saved .als file, as {pitch,start,duration,velocity} dicts per clip. `track_index` is the track's position in the set (see als_summary). No Live required.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
als_find_unfinished ~75
Lint a saved .als for likely-unfinished work, offline: no master limiter/compressor, MIDI track with no instrument, MIDI clip with no notes, empty audio track, or muted tracks. Returns machine-readable issues so an agent can decide what to fix before rendering.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
als_list_tracks ~50
List every track in a saved .als file with its clips (name, MIDI/audio, start, length, looping, sample path, note count). No Live required.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
als_summary ~72
Summarize a saved .als file WITHOUT Live running: version/creator, tempo, time signature, and each track's kind, name, mute/solo, device names, clip count, and note count. `path` is a filesystem path to a .als file.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
analyze_audio_file ~142
Measure local WAV (integer/float), AIFF/AIFF-C, FLAC, Ogg Vorbis, MP3, AAC or M4A/MP4 (AAC/ALAC) without Live: per-channel sample peak/RMS dBFS, DC offset, crest factor and full-scale samples. Analyzes the first max_seconds (default 30, maximum 120); marks partial results. Not LUFS or true peak. No upload. Compressed files are measured after decoding; this does not recover lost audio. Files are read locally without modification, normalization or upload.
| Name | Type | Req | Description |
|---|---|---|---|
| max_seconds | number | – | – |
| path | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
analyze_mix ~87
Heuristic session-state checks, NOT audio, peak, LUFS or headroom measurements. Scan the current live set for inspection leads: several high faders, a muted or empty Session track, or a MIDI track without devices. External routing and Arrangement audio may explain these states. Returns machine-readable findings so you can decide what to fix. Reads the session; changes nothing.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
apply_recipe ~120
Scaffold a genre starter in one call: set the tempo, add Drums, Bass, and Chords MIDI tracks, try to load fitting instruments, and write generated parts. `name` is one from list_recipes (e.g. "lofi_beat", "house_groove"). tempo/key/scale/bars override the recipe defaults. Adds new tracks; it does not overwrite existing ones.
| Name | Type | Req | Description |
|---|---|---|---|
| bars | – | – | – |
| key | – | – | – |
| name | string | yes | – |
| scale | – | – | – |
| tempo | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
back_to_arranger ~36
Return playback control to the Arrangement (after Session clips have overridden arrangement content - the orange 'Back to Arrangement' state).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
batch_commands ~175
Run several commands in ONE round-trip and ONE undo step (atomic-ish: stops at the first error; completed steps are a single undo away). commands = [{"type": "<command>", "params": {...}}, ...]. Command names match the MCP tool names (the few that differ are auto-translated), e.g. [{"type": "set_tempo", "params": {"tempo": 80}}, {"type": "create_midi_track", "params": {"index": -1}}]. Composite tools (record_section, load_drum_kit, apply_recipe, save_set, the generate_* tools) are NOT batchable - they orchestrate multiple commands server-side. Prefer this for multi-step edits: fewer round-trips, one undo reverts all.
| Name | Type | Req | Description |
|---|---|---|---|
| commands | array | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
capture_and_insert_scene ~30
Snapshot the currently playing Session clips into a new scene - the 'keep that combination' workflow.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
capture_midi ~38
Grab recently played MIDI into a new clip (Live's Capture MIDI). Requires that MIDI was recently played into an armed/monitored track.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
clear_automation ~154
Delete one device parameter's entire automation envelope from a clip. Resolve the device and parameter with get_device_parameters first. This removes every automation point for that parameter, not a time range; manual parameter state remains. Use write_automation to replace the envelope with new points, or undo immediately to recover an accidental clear.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | Zero-based Session-view clip-slot index on the track. |
| device_index | integer | yes | Zero-based device position in the target track's device chain. |
| parameter | – | yes | Parameter name or zero-based parameter index returned by the matching get_*_device_parameters tool. |
| track_index | integer | yes | Zero-based index of a regular track in the Live set. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
clip_operation ~140
Structural clip edits. op: "duplicate_loop" (double the loop, duplicating notes - extend 2 bars to 4 before adding variation), "crop" (discard material outside the loop), "duplicate_region" (copy notes from region_start/region_length to destination_time, optionally transposing by transposition_amount semitones; pitch=-1 means all pitches).
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | – |
| destination_time | – | – | – |
| op | string | yes | – |
| pitch | – | – | – |
| region_length | – | – | – |
| region_start | – | – | – |
| track_index | integer | yes | – |
| transposition_amount | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
continue_playing ~32
Resume playback from the current position (start_playback restarts from the playhead's last start point instead).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_audio_clip ~166
Create a new audio clip in an audio track's clip slot by importing a file. Requires Ableton Live 12.0.5 or newer - the underlying ClipSlot.create_audio_clip Live API was introduced in 12.0.5 and is not available in earlier 12.0.x releases. Parameters: - track_index: The index of the audio track to create the clip in - clip_index: The index of the clip slot to create the clip in - path: Absolute path to a supported audio file (e.g. a .wav). The target track must be an audio track and the clip slot must be empty.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | – |
| path | string | yes | – |
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_audio_track ~91
Insert an empty audio track at a chosen position, or append with `-1`. Non-negative indices insert before the current track at that position and shift it and later track indices up. Use create_midi_track for instruments and MIDI clips, or create_return_track for a shared send-effect bus.
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | – | Insertion position among regular tracks; -1 appends at the end. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_clip ~106
Create an empty MIDI clip in a Session slot. Fails if the slot already has a clip (pick another clip_index or delete_clip first) or the track is an audio track. length is in beats (4.0 = one 4/4 bar). Typical chain: create_clip -> add_notes_to_clip -> fire_clip or duplicate_to_arrangement.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | – |
| length | number | – | – |
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_locator ~119
Create or rename an Arrangement locator at an absolute beat position. SIDE EFFECT: first moves the Arrangement playhead to `time`, because Live creates cues at the playhead. If a locator already exists there, it is reused and renamed when `name` is provided. Use set_arrangement_time when only the playhead should move, and get_locators to inspect existing markers.
| Name | Type | Req | Description |
|---|---|---|---|
| name | – | – | Optional display name; omit it to keep Live's generated name. |
| time | number | yes | Position in beats from the start of the Arrangement. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_midi_track ~48
Create a new MIDI track in the Ableton session. Parameters: - index: The index to insert the track at (-1 = end of list)
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_return_track ~29
Create a new return track (a send bus, e.g. for shared reverb or delay).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_scene ~34
Create a new scene (row of clip slots). index -1 appends at the end.
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_take_lane ~44
Add a take lane to a track (for comping multiple recorded takes on one track). Returns the new take-lane count.
| Name | Type | Req | Description |
|---|---|---|---|
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_arrangement_clip ~78
Delete a clip from the Arrangement timeline by its position in get_arrangement_clips' list. NOTE: indices of later clips on the same track shift down by one after each delete - re-read get_arrangement_clips between deletes.
| Name | Type | Req | Description |
|---|---|---|---|
| arrangement_clip_index | integer | yes | – |
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_clip ~101
Delete the existing Session-view clip in a slot, including its content. This leaves the slot empty and does not shift other slot indices. It fails for an empty slot. Use stop_clip if the intent is only to stop playback; use undo immediately if the deletion was accidental.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | Zero-based Session-view clip-slot index on the track. |
| track_index | integer | yes | Zero-based index of a regular track in the Live set. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_device ~55
Delete a device from a track's chain by its position (0-based). Shifts the indices of later devices, so re-read the chain afterwards.
| Name | Type | Req | Description |
|---|---|---|---|
| device_index | integer | yes | – |
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_return_track ~34
Delete a return track by index (0 = Return A). Later returns shift down.
| Name | Type | Req | Description |
|---|---|---|---|
| return_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_scene ~30
Delete a scene (row). Later scene indices shift down by one.
| Name | Type | Req | Description |
|---|---|---|---|
| scene_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_track ~32
Delete a track. NOTE: indices of all later tracks shift down by one.
| Name | Type | Req | Description |
|---|---|---|---|
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
describe_capabilities ~72
A high-level map of this server: the tool groups and what each covers, plus the conventions to follow, so you can orient before your first call. Set ABLETON_TOOLSETS to load only some groups. For the current live state, call get_session_snapshot; for mix problems, analyze_mix.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
describe_device ~113
Return curated guidance for a common Ableton native device: which parameters matter, their units (note `curve` = perceptual, not proportional), sensible values, and mixing tips. `device_name` is case-insensitive (e.g. "EQ Eight", "Compressor", "Glue Compressor", "Reverb", "Auto Filter", "Saturator", "Utility", "Limiter", "Delay"). Pair with get_device_parameters for the live indices and ranges.
| Name | Type | Req | Description |
|---|---|---|---|
| device_name | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
detect_clip_key ~121
Detect the key/scale of one Session MIDI clip (Krumhansl-Kessler). Reads the clip's notes and returns the best-fit key with a confidence (-1..1), margin over the runner-up, and the runner-up key. `weight` is how notes are weighted into the pitch-class histogram: "duration" (default), "velocity", "product", or "count". Reads only; changes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | – |
| track_index | integer | yes | – |
| weight | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
detect_session_key ~84
Detect the overall key/scale of the whole set by pooling the notes of every MIDI track's Session clips (Krumhansl-Kessler). Gives the harmonic center of the arrangement as a whole. `weight` selects the histogram weighting ("duration", "velocity", "product", "count"). Reads only.
| Name | Type | Req | Description |
|---|---|---|---|
| weight | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
detect_track_key ~91
Detect the key/scale of a whole track by pooling the notes of every Session clip it holds (Krumhansl-Kessler). Useful when a part is spread across several clips. `weight` selects the histogram weighting ("duration", "velocity", "product", "count"). Reads only; changes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| track_index | integer | yes | – |
| weight | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
duplicate_clip_to ~68
Copy a Session clip to any other track/scene slot (overwrites the destination slot). The cross-track way to build variations.
| Name | Type | Req | Description |
|---|---|---|---|
| dst_scene | integer | yes | – |
| dst_track | integer | yes | – |
| src_scene | integer | yes | – |
| src_track | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
duplicate_scene ~85
Insert a copy of one Session scene, including every clip in its row. This creates new content and increases the scene count; later scene indices shift to make room. Use duplicate_track for a whole track or duplicate_clip_to for one clip. Use the new scene as an editable section variation.
| Name | Type | Req | Description |
|---|---|---|---|
| scene_index | integer | yes | Zero-based Session-view scene (row) index. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
duplicate_to_arrangement ~250
Copy a Session-view clip into the Arrangement timeline. OVERWRITES whatever already occupies the destination range on that track (like recording over tape) - this is also the supported way to REPLACE a section. Uses Live's track.duplicate_clip_to_arrangement() API (Live 11/12). The clip is placed at destination_time beats from the start of the arrangement on the same track it lives in. Typical workflow: 1. create_clip / add_notes_to_clip to build a Session clip 2. Call duplicate_to_arrangement once per bar/section you need 3. Call switch_to_arrangement_view to confirm the result in Live Parameters: - track_index: Index of the track that owns the Session clip - clip_index: Index of the clip slot in that track (Session view) - destination_time: Beat position in the arrangement to place the clip (e.g. 0.0 = start, 8.0 = bar 3 in 4/4)
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | – |
| destination_time | number | yes | – |
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
duplicate_track ~86
Insert a copy of one regular track, including its devices and clips. This creates new content and increases the track count; later track indices shift to make room. Use duplicate_scene for a Session row or duplicate_clip_to for one clip. Rename or edit the copy to create a variation.
| Name | Type | Req | Description |
|---|---|---|---|
| track_index | integer | yes | Zero-based index of a regular track in the Live set. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
edit_notes ~76
Edit a subset of notes in a MIDI clip without rewriting all of them. add = [{pitch,start_time,duration,velocity,mute}], remove = [{pitch,start_time}] (matched by pitch+start).
| Name | Type | Req | Description |
|---|---|---|---|
| add | – | – | – |
| clip_index | integer | yes | – |
| remove | – | – | – |
| track_index | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
fire_clip ~120
Launch one existing Session-view clip using Live's launch quantization. The slot must contain a clip. Launching it takes Session control of that track and replaces any other playing Session clip on the same track; firing an already-playing clip may retrigger it according to its launch settings. Use fire_scene to launch a whole row, or continue_playing for transport only.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | Zero-based Session-view clip-slot index on the track. |
| track_index | integer | yes | Zero-based index of a regular track in the Live set. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
fire_scene ~92
Launch a Session-view scene using Live's launch quantization. This fires the row's clips together and can replace or stop clips currently playing on the affected tracks according to each slot's launch behavior. Use fire_clip to launch only one track's clip, or start_playback when the intent is Arrangement transport rather than Session launching.
| Name | Type | Req | Description |
|---|---|---|---|
| scene_index | integer | yes | Zero-based Session-view scene (row) index. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
generate_additive ~224
Write a Philip-Glass additive process into a Session clip. REPLACES the clip's notes if it already exists. Builds a short one-voice motif (each pitch a ``note_length``-beat note, back to back) from ``pitches`` -- a space-/comma-separated list of MIDI numbers. Then plays the first 1 note, then the first 2, then the first 3 ... concatenated end to end, so the phrase audibly grows one note per stage. ``steps`` is how many stages to build (0 = use every note; capped at the number of pitches). If ``source_clip_index`` is given, the motif is read from that clip on the same track instead of built from ``pitches``. Returns a short summary.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | integer | yes | – |
| note_length | number | – | – |
| pitches | string | – | – |
| source_clip_index | – | – | – |
| steps | integer | – | – |
| track_index | integer | yes | – |
| velocity | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
generate_bassline ~162
Write a bassline following a chord progression. REPLACES existing notes. progression: same syntax as generate_chord_progression. style: "roots" (long root notes), "root_fifth" (root + fifth bounce), "walking" (root, approach tones), "eighth_pump" (driving 8ths on the root). octave: 1 = very low (C1=24), 2 = typical bass (C2=36).
| Name | Type | Req | Description |
|---|---|---|---|
| beats_per_chord | number | – | – |
| clip_index | integer | yes | – |
| octave | integer | – | – |
| progression | string | yes | – |
| style | string | – | – |
| track_index | integer | yes | – |
| velocity | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
generate_chord_progression ~286
Generate voiced chords and write them into one Session-view MIDI clip. DESTRUCTIVE: creates a clip when the slot is empty; otherwise resizes its loop and replaces every existing note. The track must accept MIDI. Progressions accept dash/comma/space-separated symbols such as `Am9-Fmaj7-Cmaj9-G13`; supported qualities include maj7, m7, m9, 9, 13, 7#9, sus4, dim, and add9. Use add_notes_to_clip for exact notes or edit_notes to preserve existing ones.
| Name | Type | Req | Description |
|---|---|---|---|
| beats_per_chord | number | – | Positive number of beats allocated to each chord. |
| center_pitch | integer | – | MIDI pitch around which chord voicings are centered. |
| clip_index | integer | yes | Zero-based Session-view clip-slot index on the track. |
| progression | string | yes | Dash-, comma-, or space-separated chord symbols, e.g. "Dm7-G7-Cmaj7". |
| rhythm | string | – | Chord rhythm: held, two stabs per slot, or quarter-note hits. |
| strum | number | – | Beat offset between chord tones; 0 produces block chords. |
| track_index | integer | yes | Zero-based index of a regular track in the Live set. |
| velocity | integer | – | Base MIDI note velocity (1-127). |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
What is the Ableton Live MCP Server server?
Ableton Live MCP Server is listed in the public MCP registry as io.github.wstierhout/ableton-live-mcp. Control Ableton Live with 156 typed tools for music production and offline .als analysis. This page covers its PyPI package (mcp-server-ableton-live).
Is the Ableton Live MCP Server server safe to use?
Ableton Live MCP Server scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Ableton Live MCP Server server expose?
Ableton Live MCP Server exposes 156 tools: get_session_info, set_tempo, start_playback, stop_playback, create_scene, and 151 more. Their descriptions and schemas cost roughly 14,156 tokens of context every time the server is loaded.
Is the Ableton Live MCP Server server still maintained?
Ableton Live MCP Server is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.