Skip to main content

The definitive Model Context Protocol bridge for Ableton Live

Project description

LiveMCP

MCP server that exposes Ableton Live's internal Python API to AI assistants. 200 tools across 7 categories: session, clips, tracks, devices, mixer, arrangement, grooves.

Tools Python License

Quick Start

1. Install the Remote Script

uvx livemcp --install

That's it. Works on macOS, Windows, and WSL. Auto-detects your Ableton installation and copies the remote script into the right place.

For local development on macOS, use a symlinked install instead:

uv run livemcp --install --symlink-install
# or: bash scripts/dev_install.sh

2. Enable in Ableton

  1. Open Ableton Live 12
  2. Go to Preferences > Link, Tempo & MIDI
  3. Under Control Surface, select LiveMCP
  4. Status bar shows: LiveMCP: Server started on port 9877

3. Add to Your AI Assistant

Claude Code (~/.mcp.json) or Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "LiveMCP": {
      "command": "uvx",
      "args": ["livemcp"]
    }
  }
}

Ableton Lifecycle Helpers (macOS)

Use the packaged helper when Live gets stuck on save, crash-recovery, or restore prompts:

uv run livemcp --restart-ableton
uv run livemcp --launch-ableton
uv run livemcp --quit-ableton

--restart-ableton clears remote_script/__pycache__, removes Ableton crash-recovery markers from ~/Library/Preferences/Ableton/Live */, quits Live, relaunches the detected Ableton app, accepts common crash/restore dialogs when macOS Accessibility is available, and waits for the LiveMCP socket on port 9877.

Config file locations:

OS Path
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
Windows %APPDATA%\Claude\claude_desktop_config.json
Linux ~/.config/Claude/claude_desktop_config.json

Tool Reference

Category Count
Session 73
Clips 40
Tracks 32
Devices 27
Mixer 14
Arrangement 9
Grooves 5
Total 200
Session Tools (73)
Tool Description
get_session_info Tempo, time signature, track count, transport state
get_song_time / set_song_time Current playhead position
get_song_smpte_time SMPTE timecode (hours, minutes, seconds, frames)
set_tempo Set BPM
start_playback / stop_playback / continue_playing Transport controls
stop_all_clips Stop all playing clips
trigger_record Toggle session recording
get_record_mode / set_record_mode Arrangement recording on/off
get_link_state / set_ableton_link_enabled / set_ableton_link_start_stop_sync_enabled Ableton Link and Start/Stop Sync
set_tempo_follower_enabled Tempo Follower on/off
get_count_in_state Count-in duration and active count-in state
get_session_record_status / set_session_record Session Record state and status
set_time_signature Numerator and denominator
set_loop_region Loop on/off, start, length
undo / redo Undo/redo
tap_tempo Tap tempo
set_metronome Metronome on/off
set_midi_recording_quantization Quantization during recording
capture_midi Capture recently played MIDI
capture_and_insert_scene Capture playing clips into a new scene
get_cue_points List all locators/cue points
create_locator / delete_locator Locator CRUD
jump_to_cue / jump_to_next_cue / jump_to_prev_cue Navigate cue points
get_selected_track / set_selected_track Track selection
get_selected_scene / set_selected_scene Scene selection
get_scene_properties Scene tempo and time signature
get_scene_info Scene name, color, is_empty, clip count
get_scene_clips All clips in a scene across all tracks
set_scene_tempo / set_scene_time_signature Per-scene tempo and time sig
set_scene_name / set_scene_color Scene appearance
fire_scene / duplicate_scene / delete_scene / create_scene Scene management
set_groove_amount / set_scale Global groove and scale
get_application_info Live version (major, minor, bugfix)
get_livemcp_info Remote-script transport protocol version and capability flags
get_application_dialog / press_current_dialog_button Inspect and control Ableton dialog boxes
get_application_cpu_usage Average and peak Live CPU usage
get_available_main_views / is_view_visible Discover valid view names and visibility
show_view / hide_view / focus_view Control Ableton UI views
toggle_browse Toggle browser hot-swap mode
get_session_metadata Song time, length, CPU load
get_view_state Current view, follow song, draw mode, visible views
get_selected_device / select_device Read and change selected device
get_selected_parameter Inspect the selected parameter
get_selected_chain Inspect the selected rack chain
set_follow_song / set_draw_mode Toggle view options
select_clip_in_detail Open clip in Detail View
get_punch_state / set_punch_in / set_punch_out Punch in/out
re_enable_automation Re-enable overridden automation
get_session_automation_record / set_session_automation_record Automation arm
show_message Display text in Ableton's status bar
Clip Tools (40)
Tool Description
create_clip / create_session_audio_clip / delete_clip / duplicate_clip Clip CRUD
fire_clip / stop_clip Launch and stop clips
get_clip_properties Full clip info (type, length, loop, markers)
set_clip_properties Batch set name, color, mute, gain, pitch, loop points
set_clip_name / set_clip_color / set_clip_muted Individual properties
set_clip_loop Loop on/off, start, end
set_clip_gain / set_clip_pitch Audio gain and pitch shift
set_clip_launch_mode / set_clip_trigger_quantization Launch behavior
set_clip_warp_mode / set_clip_warping Warping control
set_clip_ram_mode / set_clip_velocity_amount RAM mode and velocity sensitivity
get_clip_playing_position Current playhead within clip
get_clip_fades / set_clip_fades Audio clip fade in/out lengths
duplicate_clip_loop / crop_clip Loop duplication and cropping
quantize_clip Quantize clip contents
add_notes_to_clip / get_notes_from_clip / remove_notes_from_clip / clear_clip_notes Basic MIDI note editing
get_notes_extended Notes with probability, velocity deviation, release velocity
add_notes_extended Add notes with full MidiNoteSpecification params
modify_notes Modify existing notes in place
replace_all_notes Atomic note replacement (clear + add in one call)
remove_notes_extended Remove notes by pitch/time range
get_clip_envelope / insert_clip_envelope_step / clear_clip_envelope / clear_all_clip_envelopes Automation envelopes
Track Tools (32)
Tool Description
get_track_info / get_all_tracks_info Track details
create_midi_track / create_audio_track / create_return_track Create tracks
delete_track / delete_return_track / duplicate_track Track management
set_track_name / set_track_color Appearance
set_track_properties Batch set name, volume, pan, mute, solo, arm, color
get_track_routing / set_track_input_routing / set_track_output_routing I/O routing
set_track_monitoring Monitor modes (auto, in, off)
get_group_info Group track children
fold_track Fold/unfold group tracks
get_return_tracks / get_return_track_sends / set_return_track_send Return tracks
get_track_freeze_status Check if track is frozen
get_track_output_meter Real-time output level
get_clip_slot_status Playing, recording, triggered state
set_clip_slot_color Clip slot color
get_take_lanes / create_take_lane Take-lane inspection and creation
create_take_lane_midi_clip / create_take_lane_audio_clip Create clips inside take lanes
Device Tools (27)
Tool Description
get_browser_tree / get_browser_items_at_path Browse Ableton's content library
load_instrument_or_effect Load any instrument or effect by URI, path, or name
load_drum_kit Load drum rack presets
load_device_on_master / load_device_on_return Load to master/return tracks
get_device_parameters / set_device_parameter Raw parameter values (0.0–1.0)
get_device_display_values Human-readable values ("2500 Hz", "-12 dB", "On")
get_master_device_parameters / set_master_device_parameter Master track devices
get_return_device_parameters / set_return_device_parameter Return track devices
get_master_track_devices / get_return_track_devices List devices
get_rack_chains / set_chain_mixer_value Rack chain contents, activator, pan, volume, sends
get_drum_chains / set_drum_chain_property Drum-chain note routing and choke settings
get_drum_pads / set_drum_pad_mute / set_drum_pad_solo Drum rack pads
delete_device / delete_master_device / delete_return_device Remove devices
move_device / enable_device Reorder and enable/disable
Mixer Tools (14)
Tool Description
get_mixer_state All tracks: volume, pan, mute, solo, arm, sends
set_track_volume / set_track_pan Level and panning
set_track_mute / set_track_solo / set_track_arm Mute, solo, arm
set_track_send Send levels
get_master_mixer_state / set_master_volume / set_master_pan Master track
set_crossfade_assign Crossfader assignment (A/B/none)
get_track_output_meter Per-track output metering
get_master_output_meter Master output level (L/R)
get_return_track_output_meter Return track metering
get_all_track_meters All meters in one call
Arrangement Tools (9)
Tool Description
get_arrangement_clips All clips on a track's timeline
get_arrangement_length Total arrangement length
create_arrangement_midi_clip Create MIDI clip at position
create_arrangement_audio_clip Place audio file on timeline
duplicate_to_arrangement Copy session clip to arrangement
delete_arrangement_clip Remove arrangement clip
get_arrangement_overdub / set_arrangement_overdub Overdub toggle
trigger_back_to_arrangement Return to arrangement playback
Groove Tools (5)
Tool Description
get_groove_pool List all grooves in the pool
get_groove_properties Timing, random, velocity amounts
set_groove_property Modify groove parameters
set_clip_groove Assign groove to clip
remove_clip_groove Clear groove assignment

Architecture

┌─────────────────────────────────────────────────────────┐
│                     AI Assistant                         │
│              (Claude, or any MCP client)                 │
└────────────────────────┬────────────────────────────────┘
                         │ MCP Protocol (stdio)
┌────────────────────────▼────────────────────────────────┐
│                   MCP Server                             │
│            src/livemcp/ (FastMCP)                        │
│                                                          │
│   200 tool functions with type hints + docstrings        │
│   7 modules: session, tracks, clips, devices,            │
│              mixer, arrangement, grooves                 │
└────────────────────────┬────────────────────────────────┘
                         │ TCP Socket (localhost:9877)
┌────────────────────────▼────────────────────────────────┐
│              Ableton Remote Script                       │
│         remote_script/LiveMCP/ (Python 3.11)            │
│                                                          │
│   Handler registry: READ (socket thread)                 │
│                      WRITE (main thread via Queue)       │
│   3-strategy browser: URI → path → recursive search      │
└────────────────────────┬────────────────────────────────┘
                         │ Live Object Model
┌────────────────────────▼────────────────────────────────┐
│                  Ableton Live 12                         │
└─────────────────────────────────────────────────────────┘

Key design decisions:

  • Thread safety — Read operations run on the socket thread. Write operations are scheduled on Ableton's main thread via schedule_message() + Queue to prevent crashes.
  • Handler registryREAD_HANDLERS and WRITE_HANDLERS dicts replace if/elif chains. Adding a tool = one handler function + one dict entry.
  • 3-strategy browser — Finds devices by URI match, path navigation, or recursive name search. Handles spaces, special characters, and nested folders automatically.

Development

# Clone and set up
git clone https://github.com/alaarab/livemcp.git
cd livemcp

# Install remote script into Ableton
uv run livemcp --install
# or: bash scripts/install.sh

# Run the MCP server locally
uv run livemcp

# Restart Ableton and wait for LiveMCP to come back
uv run livemcp --restart-ableton

# Build, test, and publish the current version
bash scripts/publish.sh --dry-run

# Verify tool count
uv run python -c "from livemcp.server import mcp; print(len(mcp._tool_manager._tools), 'tools')"

Project Structure

livemcp/
├── src/livemcp/              # MCP server (pip/uvx installable)
│   ├── server.py             # FastMCP app, registers all tool modules
│   ├── connection.py         # TCP client to remote script
│   └── tools/                # 7 tool modules
│       ├── session.py        # 73 session tools
│       ├── clips.py          # 40 clip tools
│       ├── tracks.py         # 32 track tools
│       ├── devices.py        # 27 device tools
│       ├── mixer.py          # 14 mixer tools
│       ├── arrangement.py    # 9 arrangement tools
│       └── grooves.py        # 5 groove tools
├── remote_script/LiveMCP/    # Ableton MIDI Remote Script
│   ├── __init__.py           # create_instance() entry point
│   ├── server.py             # TCP server + handler dispatch
│   ├── browser.py            # 3-strategy device loading
│   └── handlers/             # 7 handler modules (matching tools/)
└── scripts/
    ├── install.sh            # Wrapper for `uv run livemcp --install`
    ├── dev_install.sh        # Wrapper for `uv run livemcp --install --symlink-install`
    ├── publish.sh            # Test/build/publish helper
    ├── uninstall.sh          # Wrapper for `uv run livemcp --uninstall`
    └── restart_ableton.sh    # Wrapper for `uv run livemcp --restart-ableton`

Known Limitations

These are Ableton Live API limitations, not LiveMCP bugs:

Feature Status Notes
Follow Actions Not in API Confirmed by Cycling '74
Stem Separation Not in API UI-only feature (Live 12.3+)
Track Freeze/Flatten Read-only Can check is_frozen, cannot trigger freeze
Warp Markers Read-only Cannot add/move/delete warp markers
Automation Envelopes Limited Can sample/insert values, cannot create from scratch
Group Tracks Cannot create Can read group info, cannot create groups
Groove Removal API bug clip.groove = None crashes; raises informative error

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

livemcp-1.2.3.tar.gz (108.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

livemcp-1.2.3-py3-none-any.whl (69.5 kB view details)

Uploaded Python 3

File details

Details for the file livemcp-1.2.3.tar.gz.

File metadata

  • Download URL: livemcp-1.2.3.tar.gz
  • Upload date:
  • Size: 108.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for livemcp-1.2.3.tar.gz
Algorithm Hash digest
SHA256 463891430820f8edeb021d85f7a5fe4fd7f1d74b03779ae9cdd0fdc2befd73ec
MD5 67f0cd38c83e85aac46de646aaac5bad
BLAKE2b-256 f303f58c41a3614463f10f7bb20082a83c413b00e738d79dbedd762271cec869

See more details on using hashes here.

File details

Details for the file livemcp-1.2.3-py3-none-any.whl.

File metadata

  • Download URL: livemcp-1.2.3-py3-none-any.whl
  • Upload date:
  • Size: 69.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for livemcp-1.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b5d50f46a67184091c3dbaf11ab13dca292a2a3070e95a19fbcd44201f1e7912
MD5 7d4441a918b5718fbb2f39a1c29de2a8
BLAKE2b-256 914f5d98240fce57e72f123c311f46645728c3eec93ca3ad898016709960d6cb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page