ableton-mcp-lofifren
Summary: A Model Context Protocol server that connects Claude to Ableton Live for prompt-driven music production and Live session control.
Inspect sessions, tracks, clips, devices, scenes, and arrangement state.
Bootstrap sessions and manage tracks: tempo, time signature, MIDI/audio tracks, names, arm/mute/solo, delete, volume/pan/sends/master.
Create and edit MIDI clips: create clips, add/remove/read notes, rename, duplicate (same/cross-track), loop/resize, delete, quantize, transpose.
Load and control instruments/effects: browse/search Ableton browser, load by URI/name/role/personality, inspect device parameters, set raw parameter values.
Generate musical material: chord progressions, scale runs, preset drum patterns, and named personality parts (solo/comp/bass/drums) with tempo-awareness and blended solos.
Control playback and scenes: start/stop, fire/stop clips, fire/create/name scenes, set scene tempo.
Batch multiple commands atomically and undo the last action.
Use BETA arrangement tools: add session clips to timeline, set arrangement loop, add locators, and bounce a scene order to arrangement.
Generates and edits MIDI note data — chords, scale runs, drum patterns, personality-based parts — and writes notes into Ableton clips, though the integration target is Ableton Live rather than MIDI.org itself.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ableton-mcp-lofifren Create a lofi hip-hop beat using J Dilla style"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AbletonMCP - Ableton Live Model Context Protocol Integration
Fork notice: This is a fork of
ahujasid/ableton-mcpextending it with a 33-personality style system and ~35 additional MCP tools. The original project is by Siddharth Ahuja and remains MIT-licensed. This fork is published to PyPI asableton-mcp-lofifren.
AbletonMCP connects Ableton Live to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Ableton Live. This integration enables prompt-assisted music production, track creation, and Live session manipulation.
Join the Community
Give feedback, get inspired, and build on top of the MCP: Discord. Made by Siddharth
What's New in This Fork
This fork extends the upstream ahujasid/ableton-mcp with significantly more capability — the goal is a full song in one prompt. The original PR #84 changes (clip editing, mixer controls, scene firing, audio-track creation, undo) are still present and proposed upstream as ahujasid/ableton-mcp#84. On top of that, this fork now adds ~35 additional MCP tools across six tiers, plus a 33-personality rule-based style system spanning jazz, fusion, R&B, hip-hop, and modern trap — from Coltrane and Bill Evans to Timbaland and Metro Boomin.
Tier 1 — Composite "song scaffold" tools (one call, many steps)
setup_session(tempo, time_signature, tracks=[…])— Bootstrap an entire session in a single round-trip: tempo, time signature, plus N tracks each with optional name, instrument, volume, and pan.create_clip_with_notes(track, clip, length, notes, name?)— Fusescreate_clip+add_notes_to_clip+set_clip_name.create_clips_with_notes(clips=[…])— Bulk form ofcreate_clip_with_notes, creating and naming multiple MIDI clips in one remote batch for multi-part song sketches.generate_personality_clip(track, clip, personality, chord_progression, ...)— One-shot personality workflow: create the clip, generate the part, write notes, and optionally name the clip.create_track(type, name?, instrument_uri?, volume?, pan?, index?)— Single-call replacement for the create → name → load chain.duplicate_clip(src_track, src_slot, dst_track, dst_slot)— Cross-track clip duplication. (Upstream'sduplicate_clip_toonly works within a single track.)
Tier 2 — Missing primitives
Time signature —
set_time_signature(numerator, denominator)Clip editing —
set_clip_loop,set_clip_lengthMixer state —
set_track_arm,set_track_mute,set_track_solo,set_master_volumeTrack lifecycle —
delete_trackDevices —
set_device_parameter(raw Live values, clamped to the parameter's min/max)Scenes —
create_scene,set_scene_name,set_scene_tempo
Tier 3 — Browser improvements
search_browser(query, category?)— Walk Ableton's browser tree by name (case-insensitive). Returns up to 50 matches with URIs ready to load.load_instrument_by_name(track_index, name, category?)— Server-side composite: search + load in one call. No more URI hunting.get_track_devices(track_index)— List the devices on a track plus every device's parameters with their value, min, and max — needed before callingset_device_parameter.get_parameter_display_value(track, device, parameter)/get_device_displayed_parameters(track, device)— Read parameters as Live displays them (dB, Hz, ms, ratio) alongside the raw value.set_parameter_by_display_value(track, device, parameter, target)— Set a parameter from a display string such as"-9 dB","120 Hz"or"4:1". Uses Live'sstr_to_valuewhen available, otherwise a bounded binary search onstr_for_value.set_track_volume_db(track, db_value)— Set a track fader in dB instead of a raw 0–1 float.
Tier 4 — Musical helpers (pure server-side, no remote round-trips for note math)
add_chord_progression(track, clip, chords, rhythm?, octave?)— Write a progression like["Cm","Fm","G7","Cm"]straight into a clip. Supports triads, 7ths, sus, dim, aug, 9ths, 11ths, 13ths.add_scale_run(track, clip, scale, start_beat, end_beat, direction?)— Generate scalar runs in any of major / minor / harmonic_minor / dorian / phrygian / lydian / mixolydian / locrian / pentatonic / blues / chromatic.add_drum_pattern(track, clip, pattern, length, kit_map?)— Preset patterns:four_on_floor,trap,breakbeat,boom_bap. Defaults to GM drum mapping.quantize_clip(track, clip, grid?)— Snap notes to 1/4, 1/8, 1/16, or 1/32.transpose_clip(track, clip, semitones)— Shift every note by a fixed interval.
Tier 4 Plus — Personality system (27 named players, 4 roles, BPM-aware)
A personality is a rule-based profile capturing the surface stylistic features of a real-world player: note density, swing, register, scale pool, chromatic usage, dynamics, articulation. Generators combine those rules with a chord progression to produce a coherent MIDI part that reads as "in the style of" that player. Not ML — deterministic, rule-based, fast, extensible (a new personality is one dict entry).
Each personality declares a tempo_sweet_spot and a comfortable tempo_min/tempo_max range. Generators auto-pull the current session tempo and scale density / swing to compensate when the song tempo is outside the personality's range — and emit a warning so you know.
Tools
add_personality(track, clip, personality, chord_progression, bars_per_chord?, tempo?, octave_offset?, seed?)— Generate a part in the named personality's style and write it into an existing MIDI clip. Auto-dispatches by role (solo / comp / bass / drums). Tempo defaults to the live session tempo.add_blended_personality_solo(track, clip, personality_a, personality_b, ratio, chord_progression, ...)— Generate a solo from a profile that's interpolated between two personalities (e.g. 70% Coltrane + 30% Kenny G). Numeric fields are linearly blended; categorical pools take from A when ratio<0.5, from B otherwise.list_personalities()— Returns every personality grouped by role with name, sweet-spot tempo, and one-line description.add_personality_solo(...)— Legacy alias foradd_personalityrestricted tosolopersonalities.
Personality reference (33 total)
Solo (9) — melodic / lead lines
Key | Player | Sweet spot | Surface style |
| John Coltrane | 200 BPM | Sheets of sound, modal scalar runs with chromatic approach |
| Kenny G | 95 BPM | Sparse high-register sustained chord tones, lots of space |
| Oscar Peterson | 160 BPM | Swung bebop with octave doublings, blues turns, dramatic dynamics |
| Miles Davis | 120 BPM | Cool / modal — half the bar is silence, target chord tones |
| Charlie Parker | 230 BPM | Bebop dense — chromatic approach into every chord tone |
| Wayne Shorter | 140 BPM | Modern angular — wide intervallic leaps, modal/altered |
| Pat Metheny | 130 BPM | Lyrical guitar — long phrases over lydian/dorian, mostly straight |
| Stan Getz | 100 BPM | Cool / bossa — smooth long melodic phrases, mostly chord tones |
| Dizzy Gillespie | 240 BPM | Bebop trumpet — fast chromatic runs in the screaming register |
Comp (6) — chord voicings / comping
Key | Player | Sweet spot | Surface style |
| Bill Evans | 110 BPM | Sustained rootless 3-7 voicings, half-note pulses, soft romantic |
| McCoy Tyner | 180 BPM | Quartal stacks (chords in 4ths) with 16th-note percussive stabs |
| Herbie Hancock | 140 BPM | Rootless voicings on every offbeat — Miles 60s polyrhythmic |
| Red Garland | 130 BPM | Locked-hands block chords in 4/4 quarters — hard bop |
| Chick Corea | 150 BPM | Modern fusion — dense 5-voice rootless polychords, syncopated |
| Wynton Kelly | 140 BPM | Hard bop bluesy shell voicings with anticipated comping |
Bass (6) — bass lines
Key | Player | Sweet spot | Surface style |
| James Jamerson | 105 BPM | Motown busy syncopated 8ths, ghost notes, mid P-bass register |
| Jaco Pastorius | 120 BPM | Melodic fretless in upper register — chord tones, big leaps, slides |
| Pino Palladino | 90 BPM | Smooth R&B — root and 5th in the lowest register, soft pocket |
| Marcus Miller | 100 BPM | Slap funk — hugely percussive 16ths with massive thumb/pop dynamics |
| Ray Brown | 140 BPM | Straight quarter-note jazz walking, low register, locked-in |
| Charles Mingus | 130 BPM | Expressive upright walking — dramatic dynamics, chromatic, slides |
| House (genre profile) | 124 BPM | Off-beat root-dominant synth bass on the "and" of every beat, low register, monophonic |
Drums (12) — drum kit patterns
Acoustic / live drummers
Key | Player | Sweet spot | Surface style |
| Questlove | 88 BPM | Deep behind-the-beat pocket, ghost notes between backbeats |
| Tony Williams | 220 BPM | Canonical jazz ride pattern, feathered kick, hard swing, ahead |
| Vinnie Colaiuta | 130 BPM | Polyrhythmic 16th hats, syncopated kicks, ghost-note carpet, fills |
| J Dilla | 85 BPM | Drunk hip-hop — way behind the beat, irregular kicks, sloppy on purpose |
| Elvin Jones | 220 BPM | Triplet-feel polyrhythmic ride pattern, dense triplet ghosts, ahead |
| Stewart Copeland | 130 BPM | Reggae-rock — sparse kicks, busy 16th hats with frequent open hat |
Hip-hop producer kits (MPC / sampler)
Key | Player | Sweet spot | Surface style |
| Timbaland | 96 BPM | Off-grid syncopated kicks, stuttering 16th hats, vocal-percussion ghosts |
| Dr. Dre | 94 BPM | G-funk tight live-feel pocket, sparse kicks on 1 and 'and-of-3', hard-hitting |
| DJ Premier | 92 BPM | Classic boom bap — hard kicks on 1 and 3, hard snares on 2 and 4, no fills |
| Pete Rock | 88 BPM | Jazzy boom bap with ghost-snare rolls and slight behind-the-beat feel |
| Metro Boomin | 75 BPM | Modern half-time trap — kick on 1 + and-of-3, snare on 3 only, dense hat rolls |
| Madlib | 92 BPM | Dusty MPC off-kilter — irregular kicks, behind the beat, lo-fi looseness |
Examples
"Replace the lead in clip 0 of track 7 with a Coltrane solo over Cm Ab Eb Bb"
"Write a Bill Evans rootless comp into the chord track for the chorus"
"Generate a Jaco-style bassline for Cm Fm G7 Cm"
"Add a Questlove drum pattern to track 4, scene 3"
"Blend Coltrane and Kenny G 70/30 into a lead solo over the bridge"
"Write a Charles Mingus walking bass at the current session tempo"Tier 5 — Arrangement view (BETA)
get_arrangement_info— Reports capability detection, song length, loop region, locators, and per-track arrangement clips.add_clip_to_arrangement(track, slot, time)— BETA. Drops a session clip onto the arrangement timeline. Capability-probed: returns a structured "unsupported" error on Live versions that don't exposeTrack.duplicate_clip_to_arrangement. Verified working on Live 12.2.7.arrange_clips(placements=[…], loop_start?, loop_end?, loop_on?)— Bulk form ofadd_clip_to_arrangement, with optional arrangement-loop setup for placing a whole section map in one remote batch.set_arrangement_loop(start, end, on)— Stable across Live 11+.add_arrangement_locator(time, name)— Verse / chorus / bridge markers. Drives the play head totimewith a commit-and-retry guard (waits real control-surface ticks and re-asserts the position write until Live commits it), then toggles the cue. Verified on Live 12.2.7: consecutive calls land exactly where asked on the first try.delete_arrangement_locator(time, tolerance=0.05)— Deletes the nearest locator withintolerancebeats oftime; errors if none is in range.clear_all_arrangement_locators— Deletes every cue point one at a time and reports the count actually removed.bounce_session_to_arrangement(scene_order, bar_length?)— BETA. Renders a sequence of scenes onto the arrangement timeline as a one-call session-sketch → arrangement workflow. Requirescan_duplicate_to_arrangement: trueinget_arrangement_info.render_arrangement_to_wav(track_index, start_beat, end_beat, out_path?, tail_seconds?)— Headless bounce-to-disk: renders an Arrangement region straight to a.wavwith no manual Export Audio/Video step. Live's LOM has no export-to-file call, so this arms an audio track on the built-in Resampling input (master bus, post-fader, no feedback loop) and records a real-time Arrangement pass, then reads the resulting clip's file path and restores the track's prior input/arm state. Blocks server-side for roughly the real-time duration of the region plustail_seconds.
Tier 6 — Infrastructure & quality of life
batch_commands(commands)— Send N remote primitive commands in one socket round-trip. The whole batch executes inside a single main-thread closure on Live's side, so it's atomic from Live's perspective and a single subsequentundoreverts the entire sequence. Stops on the first failure and returns partial results. Server-side composite tools such ascreate_clip_with_notesandgenerate_personality_clipare not valid insidebatch_commands; use their bulk forms instead.Warm-path auto-reconnect —
send_commandretries once onBrokenPipeError/ConnectionResetErrorso a brief Ableton restart no longer breaks the session.Auto-extending clips —
add_notes_to_clipnow extends the clip'send_markerif any of the supplied notes would otherwise be truncated. This is a behavior change vs upstream, which silently dropped notes past the clip end.Extended
get_session_info— Now also reportsscene_count,scene_names,is_playing,current_song_time, andarrangement_length.Internal dispatch refactor — The remote script's command if/elif chain has been replaced with two dispatch dicts, making future tool additions a one-line change instead of a 30-line edit. Also dropped three dead-code branches that referenced non-existent methods.
Stability fixes (still included from PR #84)
Fixed a timeout race that could affect destructive commands;
get_clip_notesruns via direct execution.load_browser_itemis correctly recognized as a modifying command.load_browser_itemcorrectly resolves plugin URIs by walking plugins / Max for Live / user library / packs / samples in_find_browser_item_by_uri, so URIs returned byget_browser_items_at_pathactually load.The browser URI cache now stores a soft 5-minute TTL per entry and validates the cached item before returning it, so a stale reference after a browser rescan is evicted instead of silently breaking
load_item.
Related MCP server: AbletonMCP
Features
Two-way communication: Connect Claude AI to Ableton Live through a socket-based server
One-call session bootstrap:
setup_sessioncreates a whole project (tempo, time sig, tracks, instruments, mix) in a single round-tripBulk song sketching:
create_clips_with_notes,generate_personality_clip, andarrange_clipsreduce multi-track song-building to a few callsBatched commands: send N commands at once with atomic undo via
batch_commands33 personalities, 4 roles: solo / comp / bass / drums in the style of Coltrane, Bill Evans, Jaco, Questlove, Timbaland, Dr. Dre, Metro Boomin, etc. — BPM-aware, blendable
Track manipulation: Create, name, mute, solo, arm, delete, and mix MIDI/audio tracks
Devices: Read every device's parameter list with min/max values; set parameters by raw Live value
Instrument and effect selection: Search the browser by name, or load with a single composite call
Clip creation and editing: Create, edit, read, duplicate (cross-track), resize, loop, and delete MIDI clips and notes (with auto-extending clip length)
Music theory primitives: Chord progressions, scale runs, drum patterns, quantize, transpose
Mixer control: Track and master volume, pan, and return-track sends
Session control: Start/stop playback, fire individual clips or whole scenes, create scenes
Arrangement view (BETA): Capability-probed support for dropping clips onto the timeline, setting the arrangement loop, adding locators, and bouncing a scene order to a full arrangement
Headless bounce-to-disk: Render an Arrangement region straight to a
.wavfile with no manual Export Audio/Video stepUndo support: Revert the last action — including a whole batch as one step
Components
The system consists of two main components:
Ableton Remote Script (
Ableton_Remote_Script/__init__.py): A MIDI Remote Script for Ableton Live that creates a socket server to receive and execute commandsMCP Server (
server.py): A Python server that implements the Model Context Protocol and connects to the Ableton Remote Script
Installation
Note: the upstream
ableton-mcpPyPI package and@ahujasid/ableton-mcpSmithery listing install the original project — they will not include the personality system or the ~35 additional tools in this fork. To get this fork, installableton-mcp-lofifrenfrom PyPI as shown below.
Prerequisites
Ableton Live 10 or newer
Python 3.8 or newer
If you're on Mac, please install uv as:
brew install uvOtherwise, install from [uv's official website][https://docs.astral.sh/uv/getting-started/installation/]
⚠️ Do not proceed before installing UV
Claude for Desktop Integration
Follow along with the setup instructions video
Go to Claude > Settings > Developer > Edit Config > claude_desktop_config.json to include the following:
{
"mcpServers": {
"ableton-mcp-lofifren": {
"command": "uvx",
"args": ["ableton-mcp-lofifren"]
}
}
}uvx will fetch ableton-mcp-lofifren from PyPI on first launch and cache it. To install from a development branch instead, replace the args with ["--from", "git+https://github.com/LofiFren/ableton-mcp-lofifren.git", "ableton-mcp-lofifren"].
Cursor Integration
One-click: use the Add MCP server to Cursor badge at the top of this README — it pre-fills the config and opens Cursor.
Manual: go to Cursor Settings → MCP and paste this as a command:
uvx ableton-mcp-lofifrenVS Code Integration
One-click: use the Install in VS Code badge at the top of this README. Requires the MCP extension for VS Code.
Manual: open the command palette → MCP: Add Server → Stdio → command uvx, args ableton-mcp-lofifren.
⚠️ Only run one instance of the MCP server (either on Cursor or Claude Desktop), not both
Installing the Ableton Remote Script
Follow along with the setup instructions video
Download the
AbletonMCP_Remote_Script/__init__.pyfile from this repoCopy the folder to Ableton's MIDI Remote Scripts directory. Different OS and versions have different locations. One of these should work, you might have to look:
For macOS:
Method 1: Go to Applications > Right-click on Ableton Live app → Show Package Contents → Navigate to:
Contents/App-Resources/MIDI Remote Scripts/Method 2: If it's not there in the first method, use the direct path (replace XX with your version number):
/Users/[Username]/Library/Preferences/Ableton/Live XX/User Remote Scripts
For Windows:
Method 1: C:\Users[Username]\AppData\Roaming\Ableton\Live x.x.x\Preferences\User Remote Scripts
Method 2:
C:\ProgramData\Ableton\Live XX\Resources\MIDI Remote Scripts\Method 3:
C:\Program Files\Ableton\Live XX\Resources\MIDI Remote Scripts\Note: Replace XX with your Ableton version number (e.g., 10, 11, 12)
Create a folder called 'AbletonMCP' in the Remote Scripts directory and paste the downloaded '__init__.py' file
Launch Ableton Live
Go to Settings/Preferences → Link, Tempo & MIDI
In the Control Surface dropdown, select "AbletonMCP"
Set Input and Output to "None"
Usage
Starting the Connection
Ensure the Ableton Remote Script is loaded in Ableton Live
Make sure the MCP server is configured in Claude Desktop or Cursor
The connection should be established automatically when you interact with Claude
Using with Claude
Once the config file has been set on Claude, and the remote script is running in Ableton, you will see a hammer icon with tools for the Ableton MCP.
Capabilities
Get session, track, and arrangement information
Bootstrap a whole session in one call (
setup_session)Batch any sequence of commands as a single atomic, single-undo operation
Create / name / arm / mute / solo / delete MIDI and audio tracks
Create, edit, read, duplicate (cross-track), resize, and loop clips
Add, remove, transpose, and quantize MIDI notes
Auto-extending clips when notes overflow the current length
Read every device's parameters (with min/max) and set them by raw Live value
Search the Ableton browser by name and load by URI or by name
Set track volume / pan / return-track sends and master volume
Control tempo, time signature, playback, individual clips, and entire scenes
Create scenes and set per-scene name / tempo
Generate chord progressions, scale runs, and preset drum patterns
Generate parts in the style of named players — 9 solo personalities (Coltrane, Kenny G, Oscar Peterson, Miles, Parker, Wayne Shorter, Metheny, Getz, Dizzy), 6 comp (Bill Evans, McCoy Tyner, Hancock, Red Garland, Chick Corea, Wynton Kelly), 6 bass (Jamerson, Jaco, Pino, Marcus Miller, Ray Brown, Mingus), 12 drums (Questlove, Tony Williams, Vinnie, J Dilla, Elvin Jones, Stewart Copeland, Timbaland, Dr. Dre, DJ Premier, Pete Rock, Metro Boomin, Madlib) — all BPM-aware
Blend two solo personalities (e.g. 70% Coltrane + 30% Kenny G) into a synthetic profile
Drop session clips onto the arrangement timeline (BETA), set the arrangement loop, and bounce a scene order to a full arrangement (BETA)
Undo the last action — including a whole batch as one step
Example Commands
Here are some examples of what you can ask Claude to do:
"Create an 80s synthwave track" Demo
"Create a Metro Boomin style hip-hop beat"
"Create a new MIDI track with a synth bass instrument"
"Add reverb to my drums"
"Create a 4-bar MIDI clip with a simple melody"
"Get information about the current Ableton session"
"Load a 808 drum rack into the selected track"
"Add a jazz chord progression to the clip in track 1"
"Set the tempo to 120 BPM"
"Play the clip in track 2"
"Read the notes in clip 1 of track 3 and harmonize them a third up"
"Clear all the notes from the bass clip and write a new pattern"
"Duplicate the drum clip in slot 1 to slot 2"
"Add an audio track and set its volume to -6 dB"
"Pan the hi-hats slightly to the right"
"Send 30% of the lead vocal to Return A"
"Fire scene 2"
"Undo that"
"Set up a session at 90 BPM in 6/8 with four MIDI tracks: Drums, Bass, Lead, Pad" (
setup_session)"Search the browser for Operator and load it on track 0" (
load_instrument_by_name)"Write a Cm-Fm-G7-Cm progression into clip 0 of the chord track" (
add_chord_progression)"Add a four-on-the-floor beat to track 0" (
add_drum_pattern)"Quantize the lead clip to 1/16" (
quantize_clip)"Transpose the bass clip up by 7 semitones" (
transpose_clip)"Mute track 1 and arm track 2 for recording"
"Show me the parameters of the device on track 3" (
get_track_devices)"Set parameter 4 of the first device on track 3 to 8000" (
set_device_parameter)"Set the time signature to 3/4"
"Create a new scene named 'Bridge'"
"Bounce scenes [0, 0, 1, 2, 1, 3] onto the arrangement" (
bounce_session_to_arrangement, BETA)"Add a locator at beat 32 named 'Drop'" (
add_arrangement_locator)"Replace the lead with a Coltrane solo over Cm Ab Eb Bb" (
add_personality)"Write a Bill Evans rootless comp for the chorus chords" (
add_personality)"Make the bass play like James Jamerson" (
add_personality)"Use a Questlove drum pattern for the verse" (
add_personality)"Blend Coltrane and Kenny G 70/30 into the lead" (
add_blended_personality_solo)"Show me which personalities I can use" (
list_personalities)
Troubleshooting
Connection issues: Make sure the Ableton Remote Script is loaded, and the MCP server is configured on Claude
Timeout errors: Try simplifying your requests or breaking them into smaller steps
Have you tried turning it off and on again?: If you're still having connection errors, try restarting both Claude and Ableton Live
Technical Details
Communication Protocol
The system uses a simple JSON-based protocol over TCP sockets:
Commands are sent as JSON objects with a
typeand optionalparamsResponses are JSON objects with a
statusandresultormessage
Limitations & Security Considerations
Creating complex musical arrangements might need to be broken down into smaller steps
The tool is designed to work with Ableton's default devices and browser items
Always save your work before extensive experimentation
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Disclaimer
This is a third-party integration and not made by Ableton.
Available Tools
62 toolsadd_arrangement_locatorA
Add a named locator (cue point) at the given arrangement time. Useful for marking verse / chorus / bridge boundaries.
If a locator already exists at that exact time, this only renames it.
Inputs: time (required), name.
add_blended_personality_soloA
Generate a solo from a blended personality — interpolated between two real personalities. Currently solo-only.
Parameters:
personality_a, personality_b: keys of two
solopersonalitiesratio: 0.0 = all A, 1.0 = all B, 0.5 = perfectly mixed
all other arguments: same as
add_personality
Numeric profile fields (density, swing, range bounds, velocity range, chord-tone emphasis, etc.) are linearly interpolated. Categorical pools (scale modes, phrase arc) take from A when ratio < 0.5 and B otherwise.
Inputs: track_index (required), clip_index (required), personality_a (required), personality_b (required), +6 more.
add_chord_progressionA
Write a chord progression into an existing MIDI clip in one call.
Parameters:
track_index, clip_index: target clip (must already exist; use
create_clip_with_notesto create the clip in the same call)chords: list of chord symbols, e.g. ["Cm", "Fm", "G7", "Cm"] or ["Fmaj7", "Em7", "Dm7", "Cmaj7"]
rhythm: how long each chord lasts — "whole" (4 beats), "half", "quarter", "eighth", "sixteenth"
octave: middle octave for the chord roots (4 = middle C area)
velocity: 0-127 MIDI velocity for every note
Inputs: track_index (required), clip_index (required), chords (required), rhythm, +2 more.
add_clip_to_arrangementA
BETA: Copy a session clip onto the arrangement timeline at the given
time (in beats). Requires a Live version that exposes
Track.duplicate_clip_to_arrangement. Use get_arrangement_info
first to confirm support.
Inputs: track_index (required), clip_slot_index (required), arrangement_time (required).
add_drum_patternA
Write a preset drum pattern into an existing clip. Patterns are defined
in 1-bar (4 beats) building blocks and tile to fill length.
Parameters:
pattern: "four_on_floor" | "trap" | "breakbeat" | "boom_bap"
length: clip length in beats (pattern tiles to fill this)
kit_map: optional override mapping drum names ("kick", "snare", "hat", "open_hat", "clap", "tom") to MIDI pitches. Defaults to General MIDI drum mapping (kick=36, snare=38, hat=42, open_hat=46).
velocity: 0-127
Inputs: track_index (required), clip_index (required), pattern, length, +2 more.
add_notes_to_clipB
Add MIDI notes to a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
notes: List of note dictionaries, each with pitch, start_time, duration, velocity, and mute
Inputs: track_index (required), clip_index (required), notes (required).
add_personalityA
Generate a part in the style of a named personality and write it into an
existing MIDI clip. The personality's role (solo / comp / bass / drums)
determines what kind of part is generated — see list_personalities.
Parameters:
track_index, clip_index: target clip (must already exist)
personality: one of the keys returned by
list_personalitieschord_progression: list of chord symbols, e.g. ["Cm","Ab","Eb","Bb"]. Drum personalities ignore chord content but still use the length.
bars_per_chord: how many 4/4 bars each chord lasts (default 1)
tempo: BPM for tempo-aware generation. If omitted, the current session tempo is queried via
get_session_info. The personality's profile will warn (but still produce output) if this is outside its comfortable range, and generators will scale density / swing to compensate.octave_offset: shift the personality's natural register up/down N octaves
seed: optional RNG seed for reproducible output. Default
None= a different solo every call.
Inputs: track_index (required), clip_index (required), personality (required), chord_progression (required), +4 more.
add_personality_soloA
Legacy alias for add_personality restricted to solo personalities.
Prefer add_personality (which auto-dispatches by role). Kept so older
callers don't break.
Inputs: track_index (required), clip_index (required), personality (required), chord_progression (required), +4 more.
add_scale_runA
Write a scalar run (sequence of notes from a scale) into an existing clip.
Parameters:
scale: e.g. "C minor", "F# dorian", "Eb major pentatonic"
start_beat, end_beat: time range in the clip
direction: "up", "down", or "updown"
note_duration: length of each note in beats (default 1/16)
octave: starting octave (4 = middle C)
velocity: 0-127
Generates ascending/descending notes from the chosen scale, packed into
the [start_beat, end_beat) range with note_duration per note.
Inputs: track_index (required), clip_index (required), scale (required), start_beat, +5 more.
batch_commandsA
Execute a list of commands in a single round-trip to Ableton.
The whole batch runs atomically inside one main-thread closure, so a
single subsequent undo reverts the entire sequence. Execution stops
at the first failure and partial results are returned.
Parameters:
commands: list of {"type": str, "params": dict}. Allowed types are any modifying or read-only command (e.g.
create_midi_track,add_notes_to_clip,set_track_volume). Nestedbatch_commandsis not allowed.
Returns a JSON object with:
results: list of per-command {"status", "result" or "message"}executed: how many ran (including the failing one if any)total: how many were submittedfailed_at: index of the failure or nullerror: failure message or null
Inputs: commands (required).
bounce_session_to_arrangementA
BETA: Render a sequence of scenes onto the arrangement timeline. For
each scene in scene_order (in order), every clip in that scene's
row is dropped onto the arrangement at the running time cursor. The
cursor advances by bar_length beats after each scene.
This is the closest thing to a one-call "session sketch → arrangement"
flow. Requires a Live version that supports
Track.duplicate_clip_to_arrangement.
Parameters:
scene_order: list of scene indices in playback order, e.g. [0, 0, 1, 2, 1, 3]
bar_length: how many beats each scene occupies on the timeline (default 4)
Inputs: scene_order (required), bar_length.
browse_for_roleA
Walk Ableton's browser for instruments suited to a specific role and return quality-ranked candidates.
Roles:
drums — searches drum racks and drum kits
bass — bass instruments (electric, fretless, upright, slap)
lead — synth leads
keys — pianos / Rhodes / Wurlis / organs / electric pianos
pad — pads / atmospheres
brass — trumpet / sax / horn
guitar — clean guitar / jazz guitar
Each item is scored — Instrument Racks (.adg) > Device Presets (.adv) >
bare devices > raw samples (.wav). One-shot junk and FX-only items are
filtered out. Results are sorted best-first so results[0] is the
smartest pick.
Use this when you don't know what's in the user's library and want a quick menu of options for a given track role.
Inputs: role (required), max_results.
create_audio_trackA
Create a new audio track in the Ableton session.
Parameters:
index: The index to insert the track at (-1 = end of list)
Inputs: index.
create_clipA
Create a new MIDI clip in the specified track and clip slot.
Parameters:
track_index: The index of the track to create the clip in
clip_index: The index of the clip slot to create the clip in
length: The length of the clip in beats (default: 4.0)
Inputs: track_index (required), clip_index (required), length.
create_clip_with_notesA
Create a MIDI clip and populate it with notes in a single batched call.
Parameters:
track_index, clip_index: where to put the clip
length: clip length in beats
notes: list of note dicts {pitch, start_time, duration, velocity?, mute?}
name: optional clip name
Inputs: track_index (required), clip_index (required), length (required), notes (required), +1 more.
create_midi_trackB
Create a new MIDI track in the Ableton session.
Parameters:
index: The index to insert the track at (-1 = end of list)
Inputs: index.
create_sceneB
Create a new scene at the given index (-1 = end of list).
Inputs: index.
create_trackB
Create a track with optional name, instrument, volume, and pan in a single round-trip.
Parameters:
type: "midi" or "audio"
name: optional track name
instrument_uri: optional browser URI to load (use
search_browserfirst)volume: optional 0.0-1.0 mixer volume
pan: optional -1.0 to 1.0 panning
index: insert position (-1 = end)
Inputs: type, name, instrument_uri, volume, +2 more.
delete_clipB
Delete a clip from a clip slot, leaving the slot empty.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot to clear
Inputs: track_index (required), clip_index (required).
delete_trackA
Delete a track. NOTE: deleting a track shifts the indices of every track after it down by one. When deleting multiple tracks in a batch, delete in descending index order to avoid index drift.
Inputs: track_index (required).
duplicate_clipA
Duplicate a MIDI clip to any other track + slot. Unlike the upstream
duplicate_clip_to, this works across tracks. Both tracks must be
MIDI tracks; the destination slot must be empty.
Inputs: src_track (required), src_slot (required), dst_track (required), dst_slot (required).
duplicate_clip_toA
Duplicate a clip to another clip slot on the same track.
Parameters:
track_index: The index of the track containing the clip
clip_index: The source clip slot index
target_clip_index: The destination clip slot index (must be empty)
Inputs: track_index (required), clip_index (required), target_clip_index (required).
fire_clipA
Start playing a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
Inputs: track_index (required), clip_index (required).
fire_sceneB
Fire (launch) a scene, triggering all clips in that row across all tracks.
Parameters:
scene_index: The index of the scene to fire (0-based)
Inputs: scene_index (required).
get_arrangement_infoA
BETA: Report arrangement-view state — capabilities, song length, loop region, locators (cue points), and per-track arrangement clips.
The capabilities field tells you which BETA operations this Live
version supports. can_duplicate_to_arrangement is the most important
one — it gates add_clip_to_arrangement and
bounce_session_to_arrangement.
Inputs: no named parameters.
get_browser_items_at_pathA
Get browser items at a specific path in Ableton's browser.
Parameters:
path: Path in the format "category/folder/subfolder" where category is one of the available browser categories in Ableton
Inputs: path (required).
get_browser_treeA
Get a hierarchical tree of browser categories from Ableton.
Parameters:
category_type: Type of categories to get ('all', 'instruments', 'sounds', 'drums', 'audio_effects', 'midi_effects')
Inputs: category_type.
get_clip_notesB
Get all MIDI notes from a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
Returns note data including pitch, start_time, duration, velocity, and mute for each note.
Inputs: track_index (required), clip_index (required).
get_session_infoB
Get detailed information about the current Ableton session
Inputs: no named parameters.
get_track_devicesA
List the devices loaded on a track, including each device's parameters
with their current value, min, and max. Use this to discover parameter
indices and ranges before calling set_device_parameter.
Inputs: track_index (required).
get_track_infoC
Get detailed information about a specific track in Ableton.
Parameters:
track_index: The index of the track to get information about
Inputs: track_index (required).
list_personalitiesA
List every available 'personality' style profile, grouped by role.
Roles:
solo — melodic / lead lines (Coltrane, Kenny G, Oscar Peterson, Miles Davis, Charlie Parker, Wayne Shorter)
comp — chord voicings / comping (Bill Evans rootless, McCoy Tyner quartal, Herbie Hancock)
bass — bass lines (James Jamerson, Jaco Pastorius, Pino Palladino)
drums — drum patterns (Questlove pocket, Tony Williams swing, Vinnie Colaiuta polyrhythms)
Each personality declares a tempo_sweet_spot and a comfortable
tempo_range; outside that range the generators emit a warning and
automatically scale density / swing to compensate.
Use the key field as the personality argument to
add_personality (the unified tool) or add_personality_solo (legacy).
Inputs: no named parameters.
load_drum_kitB
Load a drum rack and then load a specific drum kit into it.
Parameters:
track_index: The index of the track to load on
rack_uri: The URI of the drum rack to load (e.g., 'Drums/Drum Rack')
kit_path: Path to the drum kit inside the browser (e.g., 'drums/acoustic/kit1')
Inputs: track_index (required), rack_uri (required), kit_path (required).
load_instrument_by_nameA
Convenience composite: search the browser by name and load the first
loadable match onto the given track. Equivalent to calling
search_browser then load_browser_item yourself.
Parameters:
track_index: where to load the instrument
name: substring of the instrument name (e.g. "Operator", "808 Core")
category: which browser category to search; defaults to "instruments"
Inputs: track_index (required), name (required), category.
load_instrument_for_personalityA
Load the best Ableton instrument for the named personality onto a track.
Each personality has a BROWSER_HINTS list (e.g. Coltrane → ['tenor sax',
'saxophone', 'sax', 'brass']). This tool walks those hints in order, runs
a quality-scored search_browser for each, and loads the highest-scored
Instrument Rack / Device Preset across all hints onto the given track.
The Live API REPLACES the existing instrument when you load another one, so this is also a clean way to swap out a placeholder Operator for the "right" instrument for a personality.
Parameters:
track_index: target track
personality: any key from
list_personalitiesprefer_preset: rank Instrument Racks above raw samples (default True)
Returns the loaded item's name, path, score, and which hint matched.
Inputs: track_index (required), personality (required), prefer_preset.
load_instrument_or_effectC
Load an instrument or effect onto a track using its URI.
Parameters:
track_index: The index of the track to load the instrument on
uri: The URI of the instrument or effect to load (e.g., 'query:Synths#Instrument%20Rack:Bass:FileId_5116')
Inputs: track_index (required), uri (required).
quantize_clipA
Quantize all notes in a clip to a grid by snapping each note's
start_time to the nearest grid line.
Parameters:
grid: "1/4" | "1/8" | "1/16" | "1/32"
Implementation: read existing notes, round start times, then in one batch remove the old notes and write the new ones. The whole edit is atomic from Live's perspective.
Inputs: track_index (required), clip_index (required), grid.
remove_notes_from_clipA
Remove MIDI notes from a clip within a specified range. By default removes ALL notes. Use parameters to target specific ranges.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
from_time: Start time in beats (default: 0.0 = beginning)
from_pitch: Lowest MIDI pitch to remove (default: 0)
time_span: Duration in beats to clear (default: 99999.0 = all)
pitch_span: Number of pitches above from_pitch to clear (default: 128 = all)
Inputs: track_index (required), clip_index (required), from_time, from_pitch, +2 more.
search_browserA
Search the Ableton browser by name. Walks the browser tree depth-first and returns up to 50 matches whose names contain the query (case-insensitive).
Parameters:
query: substring to match (e.g. "808", "Operator", "Reverb")
category: "all" | "instruments" | "sounds" | "drums" | "audio_effects" | "midi_effects"
Returns a list of matches with name, uri, path, and is_loadable.
Pass the uri to load_browser_item to load the result onto a track.
Inputs: query (required), category.
set_arrangement_loopA
Set the arrangement loop region (in beats) and whether the loop is enabled. Stable across Live 11+.
Inputs: start (required), end (required), loop_on.
set_clip_lengthA
Resize a clip by moving its end_marker. Length is measured in beats from the clip's start_marker.
Inputs: track_index (required), clip_index (required), length (required).
set_clip_loopA
Set a clip's loop region (in beats) and whether the clip loops.
Parameters:
track_index, clip_index: which clip
loop_start: loop start in beats
loop_end: loop end in beats (must be > loop_start)
loop_on: enable looping
Inputs: track_index (required), clip_index (required), loop_start (required), loop_end (required), +1 more.
set_clip_nameB
Set the name of a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
name: The new name for the clip
Inputs: track_index (required), clip_index (required), name (required).
set_device_parameterA
Set a device parameter on a track using a RAW Live value (not normalized).
The value is clamped to the parameter's min/max. Use get_track_devices
to discover the parameter's index, name, and value range.
Parameters:
track_index: which track the device is on
device_index: position of the device in the track's device chain (0-based)
parameter_index: position of the parameter in the device (0-based; index 0 is usually the on/off toggle)
value: raw Live value, e.g. 1000.0 for a filter cutoff in Hz
Inputs: track_index (required), device_index (required), parameter_index (required), value (required).
set_master_volumeA
Set the master track volume.
Parameters:
volume: 0.0 (silent) to 1.0 (max). Default unity is ~0.85.
Inputs: volume (required).
set_scene_nameB
Set a scene's name.
Inputs: scene_index (required), name (required).
set_scene_tempoB
Set a per-scene tempo. Firing this scene will set the song tempo to this value.
Inputs: scene_index (required), tempo (required).
set_tempoA
Set the tempo of the Ableton session.
Parameters:
tempo: The new tempo in BPM
Inputs: tempo (required).
set_time_signatureA
Set the song's time signature.
Parameters:
numerator: top number (1-99)
denominator: bottom number, must be a power of 2 (1, 2, 4, 8, 16)
Inputs: numerator (required), denominator (required).
set_track_armC
Arm or disarm a track for recording.
Inputs: track_index (required), arm (required).
set_track_muteC
Mute or unmute a track.
Inputs: track_index (required), mute (required).
set_track_nameC
Set the name of a track.
Parameters:
track_index: The index of the track to rename
name: The new name for the track
Inputs: track_index (required), name (required).
set_track_panA
Set the panning of a track.
Parameters:
track_index: The index of the track
pan: Panning from -1.0 (full left) to 1.0 (full right). 0.0 is center.
Inputs: track_index (required), pan (required).
set_track_sendA
Set a send amount on a track (for routing to return tracks).
Parameters:
track_index: The index of the track
send_index: The index of the send (0 = Send A, 1 = Send B, etc.)
value: Send amount from 0.0 (none) to 1.0 (full)
Inputs: track_index (required), send_index (required), value (required).
set_track_soloC
Solo or unsolo a track.
Inputs: track_index (required), solo (required).
set_track_volumeB
Set the volume of a track.
Parameters:
track_index: The index of the track
volume: Volume level from 0.0 (silent) to 1.0 (max). Default is ~0.85.
Inputs: track_index (required), volume (required).
setup_sessionA
Bootstrap an Ableton session in (effectively) one round-trip: set tempo, set time signature, and create a list of tracks with optional names, instruments, volume, and pan.
Parameters:
tempo: BPM (e.g. 120.0)
time_signature: [numerator, denominator], e.g. [4, 4] or [6, 8]
tracks: list of dicts. Each entry may contain:
type: "midi" or "audio" (default "midi")
name: optional track name
instrument_uri: optional browser URI (load via
search_browserfirst)volume: optional 0.0-1.0
pan: optional -1.0 to 1.0
Tracks are created in order at the END of the existing track list. Returns a JSON summary of every step.
Inputs: tempo, time_signature, tracks.
start_playbackA
Start playing the Ableton session.
Inputs: no named parameters.
stop_clipB
Stop playing a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
Inputs: track_index (required), clip_index (required).
stop_playbackA
Stop playing the Ableton session.
Inputs: no named parameters.
transpose_clipA
Transpose every note in a clip by semitones (positive = up, negative
= down). Notes that would land outside the MIDI range [0, 127] are
clamped.
Implementation: read notes, mutate pitches, batch(remove + add).
Inputs: track_index (required), clip_index (required), semitones (required).
undoA
Undo the last action in Ableton.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 62 tools
Most tools have clearly distinct purposes, but there is some overlap with legacy aliases like 'add_personality_solo' and similar operations like 'create_clip' vs 'create_clip_with_notes'. Overall, an agent can distinguish between tools with reasonable accuracy.
Tool names predominantly follow a verb_noun pattern in snake_case (e.g., 'add_arrangement_locator', 'set_track_volume'). A few names like 'bounce_session_to_arrangement' or 'get_browser_items_at_path' are longer but still consistent with the overall convention.
With 62 tools, the set is excessively large for an MCP server. This likely overwhelms agents, making selection difficult. Many tools could be consolidated (e.g., 'add_personality' subsumes 'add_personality_solo').
The tool set covers a broad range of Ableton Live operations including session setup, track/clip management, browser search, personality-based generation, and arrangement features. Minor gaps exist (e.g., scene deletion, automation), but core workflows are well-supported.
Maintenance
Related MCP Connectors
Compose, mix, master and export in Logic Pro, REAPER or Ableton Live by talking to an AI engineer.
Direct AI video, image, music and storyboard production from any MCP client.
MCP server for Producer/Riffusion AI music generation
AI image, video, voice and music generation over MCP, routed to Veo 3.1, Seedance 2.5 and more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects Ableton Live to AI assistants through Model Context Protocol (MCP), enabling natural language control of music production tasks like track creation, MIDI editing, instrument loading, and playback control.15MIT
- AlicenseCqualityDmaintenanceConnects Claude AI to Ableton Live through the Model Context Protocol, enabling prompt-assisted music production with track creation, instrument loading, clip editing, and session control. Allows users to create complete musical arrangements by describing what they want in natural language.373MIT
- AlicenseBqualityDmaintenanceConnects Ableton Live to Claude AI through the Model Context Protocol, enabling AI-assisted music production and Live session manipulation via over 200 tools.10060MIT
- AlicenseBqualityDmaintenanceEnables AI agents to control Ableton Live 12 for music production, including generating grooves, basslines, and percussion, and executing live set operations through MCP.32MIT