Skip to main content

Control Ableton Live with AI through the Model Context Protocol

Project description

Ableton Live MCP

PyPI Python Tests License: MIT

MCP Server for Ableton Live, to let AI agents control or inspect Ableton.

Quick Start

  1. Install uv if you don't have it
  2. Install Remote Script: Copy the ableton/ folder into Ableton's MIDI Remote Scripts directory as AbletonLiveMCP/ (see detailed instructions below)
  3. Enable in Ableton: Settings > Link, Tempo & MIDI > Control Surface > AbletonLiveMCP
  4. Connect Claude: pick one method from Setup below
  5. Go: Ask Claude to do something in Ableton

How It Works

Claude  →  MCP Server  →  TCP :16619  →  Remote Script (inside Ableton)
                                              ↓
                                        exec(python_code)
                                              ↓
                                     Live Object Model
                                   (song, tracks, clips, devices, browser...)

The Remote Script runs inside Ableton's embedded Python interpreter. Claude sends Python code as a string, the Remote Script exec()s it with the full Live API in scope, and returns the serialized result. There are no predefined commands — anything the Live API supports is available immediately.

What Claude Can Do

# Read session state
song.tempo                                        # → 120.0
[(i, t.name) for i, t in enumerate(song.tracks)]  # → [(0, "Bass"), (1, "Drums"), ...]

# Modify session
song.tempo = 140
song.tracks[0].name = "Lead Synth"

# Create tracks and clips
song.create_midi_track(-1)
song.tracks[-1].clip_slots[0].create_clip(4.0)

# Write MIDI notes (MidiNoteSpecification is in scope, no import needed)
clip = song.tracks[0].clip_slots[0].clip
clip.add_new_notes(tuple([
    MidiNoteSpecification(pitch=60, start_time=0.0, duration=0.5, velocity=100),
    MidiNoteSpecification(pitch=64, start_time=1.0, duration=0.5, velocity=90),
]))

# Find and load instruments (find_item, find_items, find_track, load_to are in scope)
load_to(song.tracks[0], browser.instruments, "Grand Piano")
load_to(find_track("Drums"), browser.drums, "808")

# Control transport
song.start_playing()
song.stop_playing()
song.tracks[0].clip_slots[0].fire()

# Mix
find_track("Bass").mixer_device.volume.value = 0.7
song.tracks[0].mixer_device.panning.value = -0.3

Prerequisites

  • Ableton Live 11+ (uses the extended MIDI note API)
  • uv — handles Python and dependencies automatically

Install uv

macOS/Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

You do not need to install Python separately — uv manages that for you.

Setup

1. Install the Remote Script

The Remote Script runs inside Ableton. It needs to be in Ableton's MIDI Remote Scripts directory.

Option A — Download just the Remote Script (if you're using uvx and don't need the full repo):

Download ableton/__init__.py from this repo and place it in a folder called AbletonLiveMCP inside:

  • Windows: C:\ProgramData\Ableton\Live XX\Resources\MIDI Remote Scripts\
  • macOS: Right-click Ableton Live > Show Package Contents > Contents/App-Resources/MIDI Remote Scripts/

Option B — Clone the repo and symlink (recommended for development):

git clone https://github.com/opendining/ableton-mcp-server.git
# Windows (PowerShell, run once)
New-Item -ItemType Junction `
  -Path "C:\ProgramData\Ableton\Live 12 Intro\Resources\MIDI Remote Scripts\AbletonLiveMCP" `
  -Target "C:\path\to\abletonmcp\ableton"

Then enable in Ableton: Settings > Link, Tempo & MIDI > Control Surface > AbletonLiveMCP (Input/Output: None).

2. Connect Claude

Pick one method. Using multiple at once will start duplicate servers.

Claude Desktop (no clone needed)

Edit your config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
    "mcpServers": {
        "AbletonLiveMCP": {
            "command": "uvx",
            "args": ["ableton-live-mcp"]
        }
    }
}

Claude Code (no clone needed)

claude mcp add --scope user AbletonLiveMCP -- uvx ableton-live-mcp

Claude Code plugin (clone required)

Auto-starts the MCP server and loads the agent guide skill:

claude --plugin-dir /path/to/abletonmcp

From a cloned repo

If you cloned the repo and want to run from source instead of PyPI:

# Claude Code
claude mcp add --scope user AbletonLiveMCP -- uv run --directory /path/to/abletonmcp ableton-live-mcp
// Claude Desktop
{
    "mcpServers": {
        "AbletonLiveMCP": {
            "command": "uv",
            "args": ["run", "--directory", "/path/to/abletonmcp", "ableton-live-mcp"]
        }
    }
}

3. Verify

  1. Make sure Ableton is running with AbletonLiveMCP control surface active
  2. Start/restart your Claude client
  3. The MCP server connects to Ableton automatically on first use

Troubleshooting: Check Ableton's Log.txt for Remote Script errors:

  • Windows: %APPDATA%\Ableton\Live x.x.x\Preferences\Log.txt
  • macOS: ~/Library/Preferences/Ableton/Live x.x.x/Log.txt

MCP Tools

The server exposes three tools:

Tool Purpose
execute(code) Send Python code to run inside Ableton. The main tool.
api(class_name?) Browse the Live API reference by class (Song, Track, Clip, Device, etc.).
search_api(query) Search the API reference by keyword across all classes.

api and search_api read from a structured API reference. Claude can execute anything the Live API supports, not just what's in the reference.

Execution Scope

Every execute call gets a fresh namespace with:

Variable What It Is
song The Live Set — tempo, tracks, scenes, transport
app The Live Application — browser, version info
tracks Shortcut for song.tracks (stale after create/delete — use song.tracks or find_track)
returns song.return_tracks
master song.master_track
browser app.browser — instruments, effects, drums, sounds
Live The Live module — Live.Clip, Live.Device, etc.
MidiNoteSpecification Live.Clip.MidiNoteSpecification — no import needed
find_item(parent, query) Search browser tree for best match. Returns BrowserItem or None
find_items(parent, query) Search browser tree, return ranked list of matches
find_track(name) Look up a track by name. Returns Track or None
load_to(track, parent, query) Find a browser item and load it onto a track
log Write to Ableton's Log.txt
json The json module
time The time module

Architecture

See DEVELOPMENT.md for the full technical guide.

Acknowledgments

This project was inspired by ahujasid/ableton-mcp, which pioneered the idea of connecting Ableton Live to AI agents via MCP. That project uses a fixed set of tool-per-action commands (create track, add notes, set tempo, etc.).

This fork takes a different approach inspired by Cloudflare's Code Mode: instead of predefined commands, the agent writes and executes Python directly against Ableton's runtime. A streamlined execution scope with built-in helpers (find_item, find_track, load_to, etc.) and a searchable API reference give the model everything it needs to use the full Live API without being limited to a curated command set.

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

ableton_live_mcp-0.1.1.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

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

ableton_live_mcp-0.1.1-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file ableton_live_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: ableton_live_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ableton_live_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6fc6a6e640803b2a11b79272ece2a5fc0b293295cdc57f4c20b2fc5386c29afe
MD5 f0551f32a988b760ce1f09584cd16eb2
BLAKE2b-256 629ac55136567686b10f9965267cb4ff27b45f5c1579d498324e633359f01316

See more details on using hashes here.

Provenance

The following attestation bundles were made for ableton_live_mcp-0.1.1.tar.gz:

Publisher: publish.yml on opendining/ableton-mcp-server

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ableton_live_mcp-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for ableton_live_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3c4b6ab0f73acb0d469929aaf5dffa92eaac25b19a78cdca595b1003554863e3
MD5 1baf40743ed6eff1ab468b78c323cc55
BLAKE2b-256 9bf59448eac1a3735503d7c37be3bcd5a9dda26740ff17a8e0e02a288dea0aa9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ableton_live_mcp-0.1.1-py3-none-any.whl:

Publisher: publish.yml on opendining/ableton-mcp-server

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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