Model Context Protocol server for Ableton Live DAW control via ableton-js library. Enables AI assistants to manipulate tracks, clips, devices, MIDI notes, and manage recording/arrangement operations in Ableton Live.
This Ableton Live MCP server has 35 tools with generally solid naming conventions (all verb_noun style: get_, list_, create_, delete_, modify_) and mostly complete parameter schemas via Zod validation. However, there are significant gaps in parameter descriptions, output schema documentation, and error handling guidance. Most tools lack descriptions for their input parameters, the schema shows structure but parameter intent is often undocumented. Output schemas are not documented in the tool definitions, forcing LLMs to reason about response structure. Error handling is basic and does not guide recovery. The server demonstrates decent engineering (batch operations, history tracking, performance monitoring) but falls short of production-grade tool definition quality. Average tool definition score across 35 tools is ~58, placing it solidly in the 'Fair' range (C grade).
Add notes to clip by clip id
Batch version of create_midi_clip - creates multiple empty MIDI clips across one or more tracks in one call. Each entry is isolated - one failure doesn't fail the rest of the batch.
Creates an empty MIDI clip on the track and returns the created clip information
create track and return raw track
delete clip by id
delete device by index, start from 0
delete track by index
Missing parameter descriptions in most tools. Schema shows structure (e.g. 'properties':{'type':'object','description':'Object with boolean flags...'}) but does not document what individual properties mean or which are required/optional.
No documented output schemas. Tool definitions describe what tools do but do not declare the structure of return values. LLMs must infer response format from execution, increasing hallucination risk.
Error handling does not guide LLM recovery. The error-handler (error-handler.ts) is referenced but not visible. Without actionable error messages (e.g. 'Ableton not running; start Ableton and retry'), LLMs cannot self-correct.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 55 | - | v1 |
duplicate clip to track and return the duplicated clip information
duplicate midi or audio track by index
Get Ableton Live application information. To get specific properties, set the corresponding property name to true in the properties parameter. If no properties are specified, returns all available information.
Get clip notes by clip id. Returns NoteExtended array for Live 11+ and Note array for Live 10 and below. Field abbreviations in returned data: - id: note_id - p: pitch (MIDI note 0-127, 60=C3) - t: start_time (beats) - d: duration (beats) - v: velocity (0-127) - m: mute (boolean) - pr: probability (0-1, Live 11+) - rv: release_velocity (Live 11+) - vd: velocity_deviation (Live 11+)
Get clip properties by clip id. To get specific properties, set the corresponding property name to true in the properties parameter.
get device properties. To get specific properties, set the corresponding property name to true in the properties parameter
get mcp tools operation histories by page
get snapshot by history id
get song properties. To get specific properties, set the corresponding property name to true in the properties parameter.
get song view properties. To get specific properties, set the corresponding property name to true in the properties parameter.
One-call summary of what's actually on one or more tracks: name, type (midi/audio), mute/solo, loaded device names, and every arrangement clip's id/name/start_time/end_time/length/note_count - sorted by start time. Omit track_ids for every track in the song. Use this first when picking up a session, instead of chaining get_all_tracks + get_track_properties + get_clip_notes just to see what's already built.
get track properties. To get specific properties, set the corresponding property name to true in the properties parameter
Get a track's send levels to each return track. Returns one entry per return track (index 0 = Return A, 1 = Return B, ...), with the send's device parameter properties (including 'value', the raw 0-1 float - see set_track_send's description for how that maps to dB).
Initialize ableton-js and copy its MIDI scripts to Ableton Live's MIDI Remote Scripts folder. If ableton-js is already installed, it will update the content.
List Ableton live Browser resources of specified type
Load a resource which is loadable (audio effect/instrument/plugin/drums/midi effect/sounds) into a track. If track_id is not provided, will load to currently selected track. If no track is selected, instruments will be loaded to the last MIDI track, and audio effects will be loaded to the last MIDI or audio track.
Modify clip notes by clip id
set device parameter value, only support built-in Live devices
Batch-read all notes from multiple clips in one call instead of looping get_clip_notes. Always reads the whole clip (no from_pitch/from_time/time_span/pitch_span filtering). Each entry is isolated - one bad clip_id doesn't fail the rest of the batch.
Opens Ableton's audio record button and starts playback from start_time to end_time. Before recording, please: ENSURE: 1. Set the recording track to record mode 2. Set the recording track's input routing to Resample or a specific audio track/input routing(get from get_track_available_input_routings tool) 3. After recording, disable the track's record mode
Remove clip notes by clip id
Remove notes by clip id and note ids
Replace all notes in the clip with new notes
rollback to the state before the operation corresponding to the history_id was executed, currently supports Note operations
set song basic properties
set song view properties
batch set tracks property
Batch-write notes to multiple clips in one call instead of one add_notes_to_clip/replace_clip_notes round-trip per clip. mode: 'add' (default) mirrors add_notes_to_clip; mode: 'replace' mirrors replace_clip_notes. Each entry is isolated - one bad clip_id or write failure doesn't fail the rest of the batch. Note: unlike the single-clip tools, batch writes don't create an undo snapshot per clip.
Batch operation tools (write_notes_to_clips, read_notes_from_clips, create_clips_batch) lack detailed documentation on per-item failure handling and partial result behavior.
Destructive operations (remove_clip_notes, remove_notes_by_ids, delete_track, delete_clip, delete_device, replace_clip_notes) lack confirmation or dry-run capability. Agents can delete irreversibly without review.
Several tools accept generic object parameters ('properties' object with boolean flags) but do not enumerate valid keys. LLMs must guess which properties are readable/writable.
No documented prerequisites or dependencies. Tools like load_device, record_by_time_range, set_tracks_property have implicit setup steps (track must exist, be selected, have input routing) that are not stated in descriptions.