Observed since 20 Oct, 17:29 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Ableton Live MCP integration — fork of ahujasid/ableton-mcp adding a 33-personality style system, ~35 extra MCP tools, batch commands, and arrangement-view BETA
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.
Give feedback, get inspired, and build on top of the MCP: Discord. Made by Siddharth
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.
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?) — Fuses create_clip + add_notes_to_clip + set_clip_name.create_clips_with_notes(clips=[…]) — Bulk form of create_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's duplicate_clip_to only works within a single track.)set_time_signature(numerator, denominator)set_clip_loop, set_clip_lengthset_track_arm, set_track_mute, set_track_solo, set_master_volumedelete_trackset_device_parameter (raw Live values, clamped to the parameter's min/max)create_scene, set_scene_name, set_scene_temposearch_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 calling set_device_parameter.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.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.
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 for add_personality restricted to solo personalities.Solo (9) — melodic / lead lines
| Key | Player | Sweet spot | Surface style |
|---|---|---|---|
coltrane | John Coltrane | 200 BPM | Sheets of sound, modal scalar runs with chromatic approach |
kenny_g | Kenny G | 95 BPM | Sparse high-register sustained chord tones, lots of space |
oscar_peterson | Oscar Peterson | 160 BPM | Swung bebop with octave doublings, blues turns, dramatic dynamics |
miles_davis | Miles Davis | 120 BPM | Cool / modal — half the bar is silence, target chord tones |
charlie_parker | Charlie Parker | 230 BPM | Bebop dense — chromatic approach into every chord tone |
wayne_shorter | Wayne Shorter | 140 BPM | Modern angular — wide intervallic leaps, modal/altered |
pat_metheny | Pat Metheny | 130 BPM | Lyrical guitar — long phrases over lydian/dorian, mostly straight |
stan_getz | Stan Getz | 100 BPM | Cool / bossa — smooth long melodic phrases, mostly chord tones |
dizzy_gillespie | 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 | Bill Evans | 110 BPM | Sustained rootless 3-7 voicings, half-note pulses, soft romantic |
mccoy_tyner | McCoy Tyner | 180 BPM | Quartal stacks (chords in 4ths) with 16th-note percussive stabs |
herbie_hancock | Herbie Hancock | 140 BPM | Rootless voicings on every offbeat — Miles 60s polyrhythmic |
red_garland | Red Garland | 130 BPM | Locked-hands block chords in 4/4 quarters — hard bop |
chick_corea | Chick Corea | 150 BPM | Modern fusion — dense 5-voice rootless polychords, syncopated |
wynton_kelly | Wynton Kelly | 140 BPM | Hard bop bluesy shell voicings with anticipated comping |
Bass (6) — bass lines
| Key | Player | Sweet spot | Surface style |
|---|---|---|---|
james_jamerson | James Jamerson | 105 BPM | Motown busy syncopated 8ths, ghost notes, mid P-bass register |
jaco_pastorius | Jaco Pastorius | 120 BPM | Melodic fretless in upper register — chord tones, big leaps, slides |
pino_palladino | Pino Palladino | 90 BPM | Smooth R&B — root and 5th in the lowest register, soft pocket |
marcus_miller | Marcus Miller | 100 BPM | Slap funk — hugely percussive 16ths with massive thumb/pop dynamics |
ray_brown | Ray Brown | 140 BPM | Straight quarter-note jazz walking, low register, locked-in |
charles_mingus | Charles Mingus | 130 BPM | Expressive upright walking — dramatic dynamics, chromatic, slides |
Drums (12) — drum kit patterns
Acoustic / live drummers
| Key | Player | Sweet spot | Surface style |
|---|---|---|---|
questlove | Questlove | 88 BPM | Deep behind-the-beat pocket, ghost notes between backbeats |
tony_williams | Tony Williams | 220 BPM | Canonical jazz ride pattern, feathered kick, hard swing, ahead |
vinnie_colaiuta | Vinnie Colaiuta | 130 BPM | Polyrhythmic 16th hats, syncopated kicks, ghost-note carpet, fills |
j_dilla | J Dilla | 85 BPM | Drunk hip-hop — way behind the beat, irregular kicks, sloppy on purpose |
elvin_jones | Elvin Jones | 220 BPM | Triplet-feel polyrhythmic ride pattern, dense triplet ghosts, ahead |
stewart_copeland | 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 | Timbaland | 96 BPM | Off-grid syncopated kicks, stuttering 16th hats, vocal-percussion ghosts |
dr_dre | Dr. Dre | 94 BPM | G-funk tight live-feel pocket, sparse kicks on 1 and 'and-of-3', hard-hitting |
dj_premier | DJ Premier | 92 BPM | Classic boom bap — hard kicks on 1 and 3, hard snares on 2 and 4, no fills |
pete_rock | Pete Rock | 88 BPM | Jazzy boom bap with ghost-snare rolls and slight behind-the-beat feel |
metro_boomin | Metro Boomin | 75 BPM | Modern half-time trap — kick on 1 + and-of-3, snare on 3 only, dense hat rolls |
madlib | Madlib | 92 BPM | Dusty MPC off-kilter — irregular kicks, behind the beat, lo-fi looseness |
"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"
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 expose Track.duplicate_clip_to_arrangement. Verified working on Live 12.2.7.arrange_clips(placements=[…], loop_start?, loop_end?, loop_on?) — Bulk form of add_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. ⚠ KNOWN ISSUE — partially working: the rename path (when a cue already exists at the target time) is reliable, but creating a brand-new cue at an arbitrary timeline position is flaky due to a Live API quirk where Song.current_song_time = X writes don't always commit before Song.set_or_delete_cue() reads the play head, even with chained schedule_message callbacks. Workaround: use ⌘L in Ableton to add locators manually at the play head position (Live's native shortcut bypasses the API).clear_all_arrangement_locators — Tries to delete every cue point. Same caveat as add_arrangement_locator — works for cues that the play head actually lands on, doesn't reliably delete every cue.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. Requires can_duplicate_to_arrangement: true in get_arrangement_info.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 subsequent undo reverts the entire sequence. Stops on the first failure and returns partial results. Server-side composite tools such as create_clip_with_notes and generate_personality_clip are not valid inside batch_commands; use their bulk forms instead.send_command retries once on BrokenPipeError / ConnectionResetError so a brief Ableton restart no longer breaks the session.add_notes_to_clip now extends the clip's end_marker if any of the supplied notes would otherwise be truncated. This is a behavior change vs upstream, which silently dropped notes past the clip end.get_session_info — Now also reports scene_count, scene_names, is_playing, current_song_time, and arrangement_length.get_clip_notes runs via direct execution.load_browser_item is correctly recognized as a modifying command.setup_session creates a whole project (tempo, time sig, tracks, instruments, mix) in a single round-tripcreate_clips_with_notes, generate_personality_clip, and arrange_clips reduce multi-track song-building to a few callsbatch_commandsThe system consists of two main components:
Ableton_Remote_Script/__init__.py): A MIDI Remote Script for Ableton Live that creates a socket server to receive and execute commandsserver.py): A Python server that implements the Model Context Protocol and connects to the Ableton Remote ScriptNote: 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.
If you're on Mac, please install uv as:
brew install uv
Otherwise, install from [uv's official website][https://docs.astral.sh/uv/getting-started/installation/]
⚠️ Do not proceed before installing UV
Follow along with the setup instructions video
{
"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"].
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-lofifren
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
Follow along with the setup instructions video
Download the AbletonMCP_Remote_Script/__init__.py file from this repo
Copy 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:
Contents/App-Resources/MIDI Remote Scripts//Users/[Username]/Library/Preferences/Ableton/Live XX/User Remote ScriptsFor Windows:
C:\ProgramData\Ableton\Live XX\Resources\MIDI Remote Scripts\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"
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.
setup_session)Here are some examples of what you can ask Claude to do:
setup_session)load_instrument_by_name)add_chord_progression)add_drum_pattern)quantize_clip)transpose_clip)get_track_devices)set_device_parameter)bounce_session_to_arrangement, BETA)add_arrangement_locator)add_personality)add_personality)add_personality)add_personality)add_blended_personality_solo)list_personalities)The system uses a simple JSON-based protocol over TCP sockets:
type and optional paramsstatus and result or messageContributions are welcome! Please feel free to submit a Pull Request.
This is a third-party integration and not made by Ableton.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.2.0 | 25 Aug 2026 | 1 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 17:29 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:ee335b04d68a7562141fbe90e5fb2966f54a1c71baf097940c29b102a0f5a407