ableton-mcp-extended

ableton-mcp-extended

MCP server that connects Ableton Live to Claude, enabling prompt-assisted music production with full mixer control including volume, panning, and sends.

Category
Visit Server

README

<div align="center">

Ableton MCP Extended

Connect Ableton Live to Claude AI

Prompt-assisted music production, end-to-end track creation, and Live session and arrangement manipulation — driven by AI. This fork adds mixer control.

License: MIT Discord

Setup Video · Discord · Issues

</div>


Quickstart

Three steps: install uv, point your MCP client at the server, install the Ableton Remote Script.

1. Install uv

# macOS
brew install uv

Otherwise, install from uv's official website.

Warning: Do not proceed before installing uv.

2. Add the MCP server to your client

<details open> <summary><b>Claude Desktop</b> — Settings → Developer → Edit Config</summary>

{
    "mcpServers": {
        "AbletonMCP": {
            "command": "uvx",
            "args": [
                "ableton-mcp"
            ]
        }
    }
}

</details>

<details> <summary><b>Cursor</b> — Settings → MCP</summary>

Paste this as a command:

uvx ableton-mcp

</details>

Warning: Only run one instance of the MCP server (either on Cursor or Claude Desktop), not both.

3. Install the Ableton Remote Script

uvx --from ableton-mcp ableton-mcp-install-script
uvx --from ableton-mcp ableton-mcp-install-script --list-targets   # preview target folders first

4. Connect

  1. Launch Ableton Live
  2. Go to Settings/Preferences → Link, Tempo & MIDI
  3. In the Control Surface dropdown, select AbletonMCP
  4. Set Input and Output to None

That's it — ask Claude to build something.


Table of Contents


About this fork

A fork of ahujasid/ableton-mcp by Siddharth Ahuja, MIT licensed, tracking upstream 1.3.8 and adding mixer control — see Mixer control.

Why: you can ask the upstream MCP to build an arrangement, but not to balance it. Mixer levels are readable but not writable — get_track_info returns mixer_device.volume.value, yet nothing can set it, because set_device_parameter resolves through track.devices[...] and the mixer is not a device. Panning and sends are in the same position. This fork adds get_mixer, set_track_volume, set_track_panning and set_send, addressing levels in real decibels rather than raw fader position.

The mixer work is upstreamed as ahujasid/ableton-mcp#122; if it lands, this fork has no reason to exist. Everything else here — including the telemetry and dataset consent flow — is upstream's, unchanged. Set DISABLE_TELEMETRY=true in the server's env to opt out.


Features

Two-way communication Connect Claude AI to Ableton Live through a socket-based server
Track manipulation Create, modify, and manipulate MIDI and audio tracks
Instrument and effect selection Claude can access and load the right instruments, effects and sounds from Ableton's library
Clip creation Create and edit MIDI clips with notes
Arrangement view composition Build full songs autonomously in Arrangement View, including sections like intro, buildup, drop, breakdown, and outro
Session control Start and stop playback, fire clips, and control transport across Session View and Arrangement View
Anonymous telemetry Usage tracking to help improve the tool (can be disabled)

Components

The system consists of two main components:

  1. Ableton Remote Script (Ableton_Remote_Script/__init__.py) — a MIDI Remote Script for Ableton Live that creates a socket server to receive and execute commands
  2. MCP Server (server.py) — a Python server that implements the Model Context Protocol and connects to the Ableton Remote Script

Installation

Prerequisites

  • Ableton Live 10 or newer
  • Python 3.8 or newer
  • uv package manager

If you're on Mac, please install uv as:

brew install uv

Otherwise, install from uv's official website

Warning: 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": {
        "AbletonMCP": {
            "command": "uvx",
            "args": [
                "ableton-mcp"
            ]
        }
    }
}

Cursor Integration

Run ableton-mcp without installing it permanently through uvx. Go to Cursor Settings → MCP and paste this as a command:

uvx ableton-mcp

Warning: Only run one instance of the MCP server (either on Cursor or Claude Desktop), not both.

Claude Code Integration

In the terminal, run:

claude mcp add AbletonMCP uvx ableton-mcp

Installing the Ableton Remote Script

Follow along with the setup instructions video

Install the Remote Script with:

uvx --from ableton-mcp ableton-mcp-install-script
uvx --from ableton-mcp ableton-mcp-install-script --list-targets   # preview target folders first

If you installed the package with pip or pipx, the command is on your PATH directly — just run ableton-mcp-install-script.

This copies the matching Remote Script into Ableton's User Remote Scripts folder. If a different version of the script is already there, the existing file is backed up to __init__.py.bak before being replaced.

Then restart Ableton (or re-select the AbletonMCP control surface) so Live loads it. Re-run the command after upgrading the package — the server logs a warning when the loaded script version doesn't match what it expects.

Note: The server does not install the script on startup. Writing into Ableton's preferences directory is an explicit action, not a side effect of launching a server.

First-time Ableton setup:

  1. Run uvx --from ableton-mcp ableton-mcp-install-script
  2. Launch Ableton Live
  3. Go to Settings/Preferences → Link, Tempo & MIDI
  4. In the Control Surface dropdown, select AbletonMCP
  5. Set Input and Output to None

<details> <summary><b>Manual fallback locations (User Remote Scripts)</b></summary>

  • macOS: /Users/[Username]/Library/Preferences/Ableton/Live XX/User Remote Scripts/AbletonMCP/
  • Windows: C:\Users\[Username]\AppData\Roaming\Ableton\Live x.x.x\Preferences\User Remote Scripts\AbletonMCP\ </details>

The MCP server and Remote Script share a version handshake (get_remote_script_info). If they diverge, newer tools degrade gracefully until Live is restarted.


Usage

Starting the Connection

  1. Ensure the Ableton Remote Script is loaded in Ableton Live
  2. Make sure the MCP server is configured in Claude Desktop or Cursor
  3. 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 and track information
  • Create and modify MIDI and audio tracks
  • Create full song arrangements from start to finish in Arrangement View
  • Create, edit, and trigger clips
  • Control playback
  • Load instruments and effects from Ableton's browser
  • Add notes to MIDI clips
  • Change tempo and other session parameters
  • Read and set mixer levels — volume, panning and sends
  • Mute, solo and arm tracks
  • Measure levels and gain-stage per track or group to a master target

Mixer control

get_mixer, set_track_volume, set_track_panning and set_send work on regular tracks, return tracks and the master (track_type is "track", "return" or "master").

Levels are set in decibels:

set_track_volume(track_index=0, db=-4)
set_send(track_index=0, send_index=0, db=-12)

Prefer db over the raw value. Live's fader position is not proportional to level — 0.85 is 0 dB and 1.0 is +6 dB — and the taper has no published closed form, so approximating it drifts away from unity gain. Passing db resolves the exact fader position by bisecting against DeviceParameter.str_for_value(), i.e. asking Live what a position actually reads as. Accuracy is bounded by Live's own 0.01 dB display resolution. Targets beyond the fader range clamp to its ends.

get_mixer reports each parameter three ways — the raw value, the dB, and the string Live displays:

{
  "name": "1-Drums",
  "volume": { "value": 0.85, "db": 0.0, "display": "0.0 dB" },
  "panning": { "value": 0.0, "db": null, "display": "C" },
  "sends": [ { "index": 0, "name": "A Reverb", "db": -12.0, "display": "-12.0 dB" } ]
}

Headroom and push

Three tools turn measured levels into gain moves, so you can ask for a mix that hits a target instead of nudging faders by hand.

measure_mix(start_beats=0, length_beats=16)
set_master_headroom(target_db=-6)
push_track(track_index=2, db=3)

measure_mix plays a stretch of the Arrangement, samples every track, group, return and the master, then restores the playhead and play state. Omit start_beats to measure whatever is already playing, which is how to read Session-view clips — the transport has to be running in that case.

set_master_headroom gain-stages the whole mix to a master peak target. scope="tracks" (the default) moves every top-level track and group by the same amount, so the balance of the mix is untouched and the master fader stays where it is; scope="master" moves only the master fader instead. Group children are deliberately left alone — their group fader already carries them, so trimming both would apply the change twice.

It only turns things down. Sampling meters at ~10 Hz can miss a peak but never invent one, so a measured level is a floor on the real one: trimming to a target lands at or below it, while boosting to a target can clip on the transients the sampling never saw. A mix already under the target is reported and left alone. allow_boost=True overrides that — expect to want a limiter.

push_track brings one track or group forward: db for a relative move, or to_peak_db to land its own measured peak on a level. Pointed at a group it moves the whole group together. With keep_headroom it re-measures afterwards and trims the master back to the ceiling, which keeps every relative balance including the push you just made.

Each tool measures, moves, and then measures again, reporting what actually landed rather than what it predicted. Five things are worth knowing about the numbers, all of them measured on Live 12.4.3 rather than assumed:

  • Peak, not loudness. Live's API exposes meters, not LUFS, so every target is peak dBFS. There is no loudness reading to aim at.
  • ~10 Hz sampling. Meters can only be read on Live's main thread, so transients shorter than a tick can be missed. Each result reports its sample count. This is gain staging, not true-peak compliance — keep a limiter for that.
  • The meter scale is linear in decibels, spanning ~74 dB across its 0..1 range with 1.0 at 0 dBFS. That was established by moving a fader in exact steps — Live states the dB itself — and fitting the meter's response over a 40 dB sweep; it recovers known moves to within about 1 dB. It is not the volume fader's taper, and it is not linear amplitude; assuming either gets the level wrong by roughly a factor of two.
  • Peak readings repeat to about 2 dB. Five reads of an unchanged mix spanned 2.04 dB (0.72 dB stdev), which is why the default tolerance is 2 dB: the tools stop once the master is inside the noise floor of its own measurement instead of moving faders to chase a reading. Measure over more beats if you want a steadier peak. set_master_headroom also learns from each pass — if a fader move of X dB doesn't shift the master by X, the next correction is scaled by the response actually observed.
  • Silence is refused, rather than treated as a level to push up, and a track whose output is MIDI is reported as having no meter rather than as a silent audio track.

Example Commands

Here are some examples of what you can ask Claude to do:

Prompt Demo
"Create an 80s synthwave track" Watch
"Create a Metro Boomin style hip-hop beat"
"Create a full arrangement with an intro, buildup, drop, breakdown, and outro"
"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"
"Set every track to -4 dB"
"Pan the hats 30% left and send them to the reverb at -12 dB"
"Measure bars 1-8 and tell me what's eating the headroom"
"Gain-stage the mix so the master peaks at -6 dB"
"Push the drum group 3 dB without breaking the ceiling"

Troubleshooting

Problem Fix
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 type and optional params
  • Responses are JSON objects with a status and result or message

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

Telemetry

AbletonMCP collects usage data to help improve the tool. This includes:

  • Anonymous tool usage statistics (which features are used)
  • Anonymous session start information (for daily/monthly active user counts)
  • Anonymous rates and performance metrics
  • Prompts, MIDI notes, track and clip names, and device settings

Telemetry is on by default. To see exactly what data is collected, see the Terms & Data Use.

Opting Out

To disable telemetry, set one of these environment variables before starting the MCP server:

export ABLETON_MCP_DISABLE_TELEMETRY=true

Or use any of these alternatives:

  • DISABLE_TELEMETRY=true
  • MCP_DISABLE_TELEMETRY=true

For Claude Desktop, add the environment variable to your config:

{
    "mcpServers": {
        "AbletonMCP": {
            "command": "uvx",
            "args": ["ableton-mcp"],
            "env": {
                "ABLETON_MCP_DISABLE_TELEMETRY": "true"
            }
        }
    }
}

Join the Community

Give feedback, get inspired, and build on top of the MCP: Discord

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Disclaimer

This is a third-party integration and not made by Ableton. Made by Siddharth.


<div align="center">

If Ableton MCP is useful to you, consider starring the repo

</div>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured