AbletonMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| switch_to_arrangement_viewA | Switch Ableton's main window to the Arrangement view. Parameters: |
| set_arrangement_timeA | Move the arrangement playhead to a specific position. Parameters:
|
| get_arrangement_clipsA | List all clips placed in the Arrangement timeline for a track. Returns each clip's name, start_time, end_time, length, and type. Parameters:
|
| duplicate_to_arrangementA | 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:
Parameters:
|
| delete_arrangement_clipA | 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. |
| write_automationA | Write clip automation for a device parameter. points = [{"time": beats, "value": v}, ...]. Replaces any existing envelope for that parameter on the clip. |
| clear_automationB | Clear the clip automation envelope for a device parameter. |
| get_browser_treeA | List the browser's top-level categories and their immediate entries. NOTE: returns a shallow listing (no deep hierarchy) - drill down with get_browser_items_at_path("instruments"), ...("sounds/Piano & Keys"), etc., or skip straight to search_browser when you know a name. category_type: "all", "instruments", "sounds", "drums", "audio_effects", "midi_effects". |
| get_browser_items_at_pathA | Get browser items at a specific path in Ableton's browser. Parameters:
|
| load_drum_kitB | Load a drum rack and then load a specific drum kit into it. Parameters:
|
| search_browserA | Search the Ableton browser by display name (case-insensitive substring). Returns loadable items with their URIs for load_instrument_or_effect / load_device_to_master / load_device_to_return. category: optionally limit to one of "instruments", "sounds", "drums", "audio_effects", "midi_effects", "packs" (default: search all of them). Prefer this over walking get_browser_items_at_path when you know a name. |
| create_clipA | 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. |
| create_audio_clipA | 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:
|
| add_notes_to_clipA | REPLACES the clip's ENTIRE note content with the given notes (kept name for upstream compatibility). Use edit_notes to add/remove a subset. 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). |
| set_clip_nameC | Set the name of a clip. Parameters:
|
| fire_clipC | Start playing a clip. Parameters:
|
| stop_clipA | Stop playing a clip. Parameters:
|
| delete_clipB | Delete a Session-view clip from a clip slot. |
| get_clip_notesB | Read back all MIDI notes in a Session clip. |
| get_groovesA | List grooves in the Groove Pool (index + name) and the global groove amount. |
| set_clip_grooveA | Attach a Groove Pool groove to a clip by index (swing/timing feel). Pass no groove_index to clear. |
| quantize_clipA | Quantize a MIDI clip. grid: quarter/eighth/eighth_triplet/sixteenth/sixteenth_triplet/thirtysecond. amount 0.0-1.0 (use <1.0 to humanize toward the grid without full snap). |
| set_clip_audioA | Set audio-clip properties. gain 0-1, pitch_coarse semitones (-48..48), pitch_fine cents, warping on/off, warp_mode 0=Beats 1=Tones 2=Texture 3=Re-Pitch 4=Complex 6=Complex Pro. |
| set_clip_loopC | Set a clip's loop braces (start/end beats), start marker, and looping on/off. |
| edit_notesA | 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). |
| set_clip_colorB | Set a clip's color by index (0-69 in Live's palette). |
| get_clip_infoA | Full clip state: loop points, markers, playing position, per-clip time signature; for audio clips also file path, gain display, and warp markers. |
| duplicate_clip_toA | Copy a Session clip to any other track/scene slot (overwrites the destination slot). The cross-track way to build variations. |
| clip_operationA | 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). |
| set_clip_signatureA | Set a clip's own time signature (polymeter / odd-bar loops). |
| load_instrument_or_effectA | Load an instrument or effect onto a track using its URI. Parameters:
|
| get_device_parametersA | List all parameters of a device on a track: names, values, ranges, display strings. |
| set_device_parameterA | Set a device parameter by name or index. Value is clamped to the parameter's min/max. |
| set_device_enabledC | Enable or bypass a device on a track. |
| load_device_to_returnB | Load a device/effect from the browser onto a return track. |
| load_device_to_masterA | Load a device/effect from the browser onto the Master/Main track (e.g. a limiter for mastering). |
| get_master_device_parametersA | List parameters of a device on the Master track. |
| set_master_device_parameterC | Set a parameter on a Master-track device by name or index. |
| set_return_device_parameterB | Set a parameter on a Return-track device by name or index. |
| get_return_device_parametersA | List parameters of a device on a Return track: names, values, min/max, display strings. Call before set_return_device_parameter. |
| get_rack_chainsA | List an Instrument/Effect Rack's chains and the devices inside each - previously unreachable nested devices. Use set_chain_device_parameter to control them. |
| set_chain_device_parameterA | Set a parameter on a device INSIDE a rack chain (indices from get_rack_chains). Values clamp to the parameter's native range. |
| get_drum_padsA | List a Drum Rack's occupied pads (MIDI note, name, mute, solo). |
| set_drum_padA | Mute/solo/rename a single Drum Rack pad by its MIDI note (e.g. 36=kick). Per-pad muting = instant beat variations without touching the notes. |
| rack_variationA | Rack macro snapshots. action: "store" (save current macros as a
variation), "recall" (restore variation |
| generate_drum_patternA | Write a genre drum pattern into a Session clip on a Drum Rack track. REPLACES the clip's notes if the clip exists. style: lofi | boom_bap | house | techno | trap | dnb | ambient. swing: beats to delay 8th-note offbeats (0.0-0.1; 0.06 ≈ MPC-ish). humanize: max random velocity deviation (0 = machine-perfect). Uses the standard Live drum map (36 kick, 38 snare, 42/46 hats...). |
| generate_chord_progressionB | Write a chord progression into a Session clip. REPLACES existing notes. progression: dash- or comma-separated symbols, e.g. "Am9-Fmaj7-Cmaj9-G13" or "Dm7, G7, Cmaj7". Qualities: maj7/m7/m9/9/13/7#9/sus4/dim/add9 etc. rhythm: "held" (one chord per slot), "stabs" (hit on 1 and the and-of-3), "quarters" (four hits per bar, velocity-tapered). strum: seconds-ish stagger between chord tones (0 = block chord). |
| generate_basslineA | 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). |
| write_drum_gridA | Write drums from an ASCII grid (16th-note steps). REPLACES existing notes. grid: one line per instrument: "name: pattern" where pattern chars are 'X' (accent, vel 105), 'x' (normal, 85), 'o' (soft, 55), '.' or '-' (rest). Line length = number of 16th steps (16 = one 4/4 bar; 32 = two bars...). Instruments: kick snare rim clap chat phat ohat ltom mtom htom crash ride perc shaker, or a raw MIDI number ("36: x..."). Example (one bar of lofi): kick: X..x......X..... snare: ....x.......x... chat: x.o.x.o.x.o.x.o. |
| setup_sessionA | Bootstrap a session in one call: set tempo and create named MIDI tracks, optionally loading an instrument found by name for each. tracks: [{"name": "Drums", "instrument": "drum kit"}, {"name": "Bass", "instrument": "upright bass"}, ...]. "instrument" is a search_browser query (best match is loaded); omit it to create an empty track. Returns a per-track report with the loaded item names. |
| get_session_infoB | Get detailed information about the current Ableton session Parameters: |
| set_tempoA | Set the tempo of the Ableton session. Parameters:
|
| start_playbackA | Start Arrangement playback from the current song time. NOTE: the response reports the PRE-command state (may say playing=false right after starting) - confirm with get_session_info. |
| stop_playbackA | Stop playback. NOTE: the response reports the PRE-command state - confirm with get_session_info. |
| create_sceneA | Create a new scene (row of clip slots). index -1 appends at the end. |
| create_locatorB | Create an arrangement locator (marker) at a beat time, optionally named. |
| fire_sceneB | Launch a scene (fires every clip in that row). |
| set_scene_nameC | Rename a scene. |
| set_time_signatureC | Set the song time signature (e.g. 4/4, 3/4, 6/8). |
| set_loopB | Set the arrangement loop region (in beats) and enable/disable looping. |
| undoB | Undo the last action in Live. |
| redoA | Redo the last undone action in Live. |
| batch_commandsA | 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": "", "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}}]. Prefer this for multi-step edits: fewer round-trips, one undo reverts all. |
| capture_midiA | Grab recently played MIDI into a new clip (Live's Capture MIDI). Requires that MIDI was recently played into an armed/monitored track. |
| set_song_scaleA | Set the song's key context. root_note 0-11 (0=C, 2=D...), scale_name e.g. "Major", "Minor", "Dorian". Read current values via get_session_info. |
| set_metronomeA | Turn Live's metronome click on/off. |
| stop_all_clipsA | Stop every playing Session clip (does not stop the transport). |
| back_to_arrangerA | Return playback control to the Arrangement (after Session clips have overridden arrangement content - the orange 'Back to Arrangement' state). |
| set_record_modeB | Toggle Arrangement record. With record_mode on, start_playback records armed tracks into the Arrangement. |
| set_session_recordA | Toggle Session record (records into armed tracks' selected Session slots; also enables MIDI overdub into playing clips). |
| continue_playingA | Resume playback from the current position (start_playback restarts from the playhead's last start point instead). |
| set_clip_trigger_quantizationA | Global launch quantization for firing clips/scenes. 0=None (instant, good for auditioning), 4=1 bar (default), 7=1/4 note, 13=1/32. |
| delete_sceneA | Delete a scene (row). Later scene indices shift down by one. |
| duplicate_sceneB | Duplicate a scene with all its clips - instant section variation. |
| capture_and_insert_sceneA | Snapshot the currently playing Session clips into a new scene - the 'keep that combination' workflow. |
| get_locatorsA | List arrangement locators (index, name, beat time) for structure-aware navigation. Jump with jump_to_locator. |
| jump_to_locatorA | Move the playhead to a locator (index from get_locators). |
| re_enable_automationA | Restore automation that was overridden by manual parameter changes. IMPORTANT: setting a device parameter that has an envelope overrides the envelope until this is called. |
| set_arrangement_overdubA | Toggle arrangement overdub: recording layers MIDI onto existing arrangement clips instead of replacing them. |
| set_session_automation_recordA | Toggle recording of parameter changes into Session clip envelopes - an alternative to write_automation for captured knob rides. |
| trigger_session_recordA | Start Session recording into armed tracks; record_length in beats records a fixed-length loop (e.g. 16.0 = 4 bars) then auto-switches to playback. |
| get_track_infoB | Get detailed information about a specific track in Ableton. Parameters:
|
| create_midi_trackA | Create a new MIDI track in the Ableton session. Parameters:
|
| set_track_nameA | Set the name of a track. Parameters:
|
| delete_trackA | Delete a track. NOTE: indices of all later tracks shift down by one. |
| set_track_volumeA | Set track volume. Range 0.0-1.0 where 0.85 = 0 dB (unity gain). |
| set_track_panC | Set track panning, -1.0 (left) to 1.0 (right). |
| set_track_muteC | Mute or unmute a track. |
| set_track_soloC | Solo or unsolo a track. |
| set_master_volumeA | Set the Main/Master track volume. Range 0.0-1.0 where 0.85 = 0 dB. |
| set_sendA | Set a track's send level (send_index 0 = Return A, 1 = Return B, ...). Range 0.0-1.0. |
| create_return_trackA | Create a new return track (a send bus, e.g. for shared reverb or delay). |
| create_audio_trackB | Create a new audio track. index -1 appends at the end. |
| get_return_tracksA | List return tracks (index + name). |
| set_track_colorA | Set a track's color by index (0-69 in Live's palette). |
| duplicate_trackB | Duplicate a track along with its devices and clips. |
| set_track_armA | Arm or disarm a track for recording (fails on tracks that can't be armed, e.g. group/return tracks). |
| get_track_metersA | Read a track's output level meters (post-fader): left/right 0.0-1.0ish (0.85 ≈ 0 dB, like faders). Poll during playback to judge balance/clipping - this is how you 'listen' without exporting. |
| get_master_metersA | Read the Master track's output meters - values pinned near 1.0 during playback mean the master is clipping; pull set_master_volume down. |
| get_track_routingA | Read a track's input/output routing (current + all available options) and monitoring state (0=In, 1=Auto, 2=Off). Routing options are identified by display_name - use those strings with set_track_routing. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| make_a_beat | Guided workflow: compose a beat from scratch in the current Live set. |
| mix_and_master | Guided workflow: balance, bus processing, and in-Live mastering. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wstierhout/ableton-live-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server