ableton-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server drives the user's open Ableton Live Set in Session View. Assume the user is a beginner.
Before changing anything, call
live_status, thenget_set_overview. Callget_set_overviewagain before you use track, slot or scene indices from an older answer.After each change, say in one or two plain sentences what changed and what the user will hear. Explain each music word (beat, bar, scale, chord, root...) the first time you use it. Never paste tool JSON to the user.
Name tracks, clips and scenes by their role (Drums, Bass, Chords, Verse), and colour them with
set_label.Live Lite allows 8 tracks and 16 scenes (see limits in
live_status): reuse empty ones before you create more.Each change is one undo step. When the user dislikes a result, offer
undo_last.Prefer the one-call tools when they fit:
create_drum_pattern,create_bassline,create_chord_progression,load_instrument,set_scale. Usewrite_notesfor anything they cannot do.Live cannot be saved from here. When you finish a task that changed the Set, end with one short reminder to press Cmd+S (Ctrl+S on Windows). Do not remind after each tool call, and do not remind when nothing changed.
Guided lessons, in order (MCP prompts the user starts from the / menu): lesson-first-beat, lesson-notes-and-scales, lesson-chords, lesson-bassline, lesson-melody, lesson-song-structure. explain-my-set describes the Set without changing it.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| live_statusA | Check that Live is reachable. Returns the Live version, edition ("Lite", "Standard", "Suite") and supported features. Call this first. limits gives the edition's caps: audio_midi_tracks and scenes (null = no cap). |
| get_set_overviewA | Describe the open Set: tempo, time signature, playing state, and every track with its index, type, devices and clip slots. Indices are 0-based. drum_pads lists {note, name} for each used pad of the track's Drum Rack (null when the track has none): use those notes as pitches in write_notes. Each track's mix is {volume_db, pan, mute, solo, sends}: dB values with null = -inf, pan -50..50 (50L..50R), sends keyed by return letter ("A", "B"...). scenes lists {index, name}; return_tracks lists {send, name, devices}. |
| create_midi_trackA | Add a new MIDI track. index -1 puts it at the end. Live Lite allows only 8 audio+MIDI tracks, so reuse an existing empty track when you can. |
| create_midi_clipB | Create an empty MIDI clip in an empty clip slot of a MIDI track. Length is in beats (4 beats = 1 bar in 4/4). |
| delete_trackA | Delete a track with its clips and devices. One undo_last restores it. Use it to free a track under Live Lite's 8-track limit. Group tracks are refused. Later tracks' indices shift down by one, so call get_set_overview again before the next delete. |
| delete_clipA | Delete the clip in this clip slot. One undo_last restores it. |
| create_sceneA | Add a scene (a row of clip slots across all tracks). index -1 or none puts it at the end. copy_of copies that scene with all its clips and puts the copy directly below it; later scenes shift down by one. Give index or copy_of, not both. Live Lite allows only 16 scenes, so name and reuse empty scenes when you can. |
| copy_clipA | Copy the clip in track/slot to the empty slot to_track/to_slot, e.g. to reuse a loop in another scene. An occupied target is refused: delete_clip it first. A MIDI clip needs a MIDI target track. |
| write_notesA | Replace ALL notes in the clip with these notes. To edit existing notes, read_notes first and send the full changed list. Times and durations are in beats (1.0 = one quarter note). For a Drum Rack, take pitches from drum_pads in get_set_overview. The result's notes_outside_clip counts notes that start at or after the clip length; they never play (assumes the loop starts at beat 0). |
| read_notesA | Return the clip's length and its notes, in the same shape write_notes takes, sorted by start_time then pitch. Mute and probability are not returned, so a read_notes + write_notes round trip resets them. |
| set_scaleA | Set the Set's key, e.g. root "A", scale "Minor", and turn on Scale Mode so Live's MIDI editor highlights the scale's notes. create_bassline and create_chord_progression use this key when you leave root and scale out. |
| create_drum_patternA | Write a drum beat in a style, repeated over bars. The track must hold a Drum Rack kit; hits go to the pads that match each voice (kick, snare, hats...), and voices the kit lacks are listed in missing_voices. layers add Euclidean rhythms, e.g. {voice: "perc", pulses: 3, steps: 8}; a layer replaces the style's part for that voice. style null with layers gives layers only. The result's about explains the style for a beginner. Destination: track + slot writes a clip into Live and replaces any clip in that slot (one undo_last restores it); file_name instead writes a 120 BPM .mid file to ~/Music/ableton-mcp/midi/ and works with Live closed. Never creates tracks. 4/4 only. |
| create_basslineA | Write a bassline in a key. degrees are scale degrees, one per bar, cycled (default [1]; e.g. [1, 6, 4, 5]). bars defaults to len(degrees). root and scale default to the Set's scale (see set_scale); without Live, give both. octave 1 puts A at MIDI 45. The track needs an instrument (e.g. a bass synth), or the clip plays silent. Destination: track + slot writes a clip into Live and replaces any clip in that slot (one undo_last restores it); file_name instead writes a 120 BPM .mid file to ~/Music/ableton-mcp/midi/ and works with Live closed. Never creates tracks. 4/4 only. |
| create_chord_progressionA | Write held root-position chords built from scale degrees, e.g. [1, 6, 4, 5] in C Major gives C Am F G. The result's chords names each chord. Needs a 7-note scale (not the pentatonics or Minor Blues). root and scale default to the Set's scale (see set_scale); without Live, give both. The track needs an instrument. Destination: track + slot writes a clip into Live and replaces any clip in that slot (one undo_last restores it); file_name instead writes a 120 BPM .mid file to ~/Music/ableton-mcp/midi/ and works with Live closed. Never creates tracks. 4/4 only. |
| browse_libraryA | List one level of Live's browser. root is one of: instruments, drums, audio_effects, midi_effects, sounds, samples, clips, packs, user_library, plugins, max_for_live, current_project. path is the folder names to open, e.g. []. Navigate one level at a time: add one folder name per call. |
| load_from_libraryA | Load a browser item onto a track, e.g. a drum kit from root "drums". path must end at an item that browse_library marked is_loadable. Returns the names of the devices that were added and device_index, the position of the first one (use [device_index] as device_path in read_device). Loading an instrument replaces the track's current instrument; undo_last restores it. For instruments and their presets, load_instrument does this in one call. |
| load_instrumentA | Put an instrument on a MIDI track, replacing its current instrument; undo_last restores it. Without preset you get the bare device. preset is a preset name from the kind's browser folders, e.g. drift "Deep Bass" or drum_rack "808 Core Kit" (a kit); case and the .adv/.adg ending are ignored. Live Lite has drift, simpler, impulse, drum_rack, drum_sampler and instrument_rack only; other kinds are refused there. Returns the added devices, device_index (for read_device) and the browser root and path that were loaded. |
| read_deviceA | Read one device's parameters: {index, name, value, min, max, display, quantized, enabled}; switches (quantized) also list their choices in items. display is Live's own text for the value, e.g. "1.20 kHz". device_path defaults to [0], the track's first device (get_set_overview lists the devices). Add [chain, device] to go into a rack: [0, 0, 1] is device 1 in chain 0 of rack 0. chains lists a rack's chains and their devices (null when the device is not a rack). enabled false means a macro or lock controls the parameter: change the macro instead. |
| set_device_parametersA | Change parameters of one device (device_path as in read_device), all in one undo step. values maps a parameter name from read_device (case ignored) to a raw value between its min and max, or, for a switch, one of its items, e.g. {"Filter Freq": 0.6, "Osc 1 Shape": "Saw"}. Raw values are not units: check display in the result and set again if it is off. If any entry is invalid, nothing changes. undo_last restores all of them. |
| set_track_mixA | Set a track's mixer; give only what you want to change. volume_db in dB (0 is Live's default, max +6). pan -50..50 (-50 = 50L, 50 = 50R). sends maps a return letter to dB, e.g. {"A": -12}. To silence a track use mute. solo is not exclusive: Live does not unsolo other tracks, so unsolo them yourself. Returns the track's resulting mix. |
| set_labelA | Rename and/or colour a track (track alone), a clip (track + slot) or a scene (scene alone). Live snaps the colour to the nearest one in its chooser. Colour by role, e.g. drums red, bass blue, chords green, and scenes by song section (intro, verse, chorus). |
| set_tempoA | Set the song tempo in BPM (20-999). |
| play_clipB | Start playing the clip in this slot. Live starts the transport if it is stopped. |
| fire_sceneA | Launch every clip in this scene (one song section). Live starts the transport if it is stopped. Not an undo step. |
| stopB | Stop playback. |
| undo_lastA | Undo the last change in Live. Each tool call that changes the Set is one undo step. |
| write_midi_fileA | Save notes as a .mid file in ~/Music/ableton-mcp/midi/ without using Live (works even when Live is closed). The user can drag the file into Live. The file holds notes only, so tell the user to drop it on a track that has an instrument (e.g. a Drum Rack kit) or it plays silent. Times are in beats. name: letters, digits, space, '_' or '-'. An existing file with that name is never overwritten: pick a new name. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| lesson-first-beat | Build a one-bar drum loop step by step: kick, snare, hi-hats and tempo. |
| lesson-notes-and-scales | Hear what a scale is, compare major and minor, and pick a key for the song. |
| lesson-chords | Build a four-chord progression in the song's key. |
| lesson-bassline | Write a bassline that follows the chords and locks with the drums. |
| lesson-melody | Write a short melody in the key that fits over the chords. |
| lesson-song-structure | Turn the loops into song sections (scenes) and play them in order. |
| explain-my-set | Describe the open Set in plain words (tempo, key, each track's role) without changing it. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| capabilities | Same as the live_status tool: Live version, edition, features and limits. |
| set-overview | Same as the get_set_overview tool: tempo, key, tracks, devices, clips, scenes and mix. |
TDQS
Scored across 27 tools
Most tools target a distinct resource+action (clips, tracks, scenes, devices, mix, transport), and the detailed descriptions draw lines carefully. The main fuzziness is the MIDI-content cluster: create_midi_clip + write_notes, write_midi_file, and the three generators (create_drum_pattern, create_bassline, create_chord_progression) all produce notes across overlapping destinations, and load_from_library overlaps load_instrument (the description even says 'load_instrument does this in one call').
The set overwhelmingly follows verb_noun snake_case: create_/delete_/copy_/read_/write_/set_/get_/load_/browse_/play_. Deviations are minor and domain-justified: bare 'stop', 'undo_last', and 'fire_scene' alongside 'play_clip', plus the state-style 'live_status'.
27 tools exceeds the comfortable band; the surface is genuinely broad (tracks, clips, notes, scenes, devices, mixer, browser, offline MIDI export), so each tool is defensible, but it is heavy for an agent to route through. Some consolidation is plausible, e.g. folding the three generators and write_midi_file into fewer entry points.
Strong session-view lifecycle coverage: create/delete tracks and clips, scene creation, note read/write, device read/write, mixer, transport, browser loading, undo, plus offline file output. Gaps remain: no scene deletion or clip move/duplicate (only copy to empty slot), no device removal, no per-clip stop or arrangement-view operations, so a few workflows dead-end.