Skip to main content
Glama
ju5tinz

ableton-agent-mcp

by ju5tinz

ableton-agent

Drive Ableton Live from an LLM agent. An MCP server exposes a running Live session — its tracks, devices, browser, clips, Arrangement and MIDI notes — as 51 tools an agent can call, plus the typed TypeScript library those tools are built on.

Everything runs locally over OSC, against your own open Live session.

What an agent can do with it

Area

Tools

Project & transport

get_project_state, set_tempo, set_time_signature, set_key, play, stop, set_playhead_position, fire_scene, create_scene, stop_all_clips

Tracks & mixer

create_track, delete_track, delete_unused_tracks, rename_track, set_track_color, set_track_volume, set_track_pan, mute_track, solo_track, arm_track, set_track_send

Browser & devices

list_instruments, list_browser_category, browse, load_from_browser, load_into_drum_pad, load_preset_onto_device, delete_device, get_device_parameters, set_device_parameter, set_device_parameter_by_name, get_device_property, set_device_property, randomize_device_macros

Session clips

create_clip, delete_clip, duplicate_clip, fire_clip, stop_track_clips, set_clip_name, set_clip_loop, import_audio_file

Arrangement

add_clip_to_arrangement, delete_arrangement_clip, play_arrangement, set_arrangement_loop

MIDI notes

write_midi_notes, get_midi_notes, clear_midi_notes, transpose_notes, quantize_notes

get_project_state is the one an agent should reach for first — it returns tempo, signature, key, transport state, and every track with its mixer values, devices and clips in a single call.

Related MCP server: io.github.peterkolbe/ableton-for-ai

Requirements

  • Ableton Live 11 — developed and verified against Live 11. Any edition; Max for Live is not required.

  • Bun 1.3+

  • macOS — what this is developed and tested on. Nothing here is macOS-specific in principle, but Windows is untested; the equivalent Remote Scripts folder there is Documents\Ableton\User Library\Remote Scripts.

Setup

Install dependencies:

bun install

Install the AbletonAgent remote script — this is the transport, so nothing works without it. Symlink or copy packages/ableton-agent/remote-script/AbletonAgent into Live's User Library:

bun run --filter ableton-agent install-remote-script

Pass --target-dir <path> if your Live User Library lives somewhere else.

Then enable AbletonAgent as a Control Surface in Live's Preferences → Link/Tempo/MIDI. Once enabled it's active for every project you open. Live only loads remote scripts at startup, so restart Live after installing or editing it.

Sanity-check that Live is reachable:

bun run --filter ableton-agent check-agent

Wiring it into an MCP client

The server speaks MCP over stdio, so it's launched by the client rather than left running in a terminal.

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "ableton-agent": {
      "command": "bun",
      "args": ["run", "/absolute/path/to/ableton-agent/packages/ableton-agent-mcp/index.ts"]
    }
  }
}

Claude Code:

claude mcp add ableton-agent -- bun run /absolute/path/to/ableton-agent/packages/ableton-agent-mcp/index.ts

To run it directly while debugging: bun run --filter ableton-agent-mcp start.

Configuration

Ports are fixed on both sides by default; override with env vars if you've changed either end.

Env var

Default

Transport

ABLETON_AGENT_ADDRESS

127.0.0.1

AbletonAgent

ABLETON_AGENT_LOCAL_PORT

9011

AbletonAgent

ABLETON_AGENT_REMOTE_PORT

9010

AbletonAgent

ABLETON_AGENT_TIMEOUT_MS

8000

AbletonAgent

ABLETON_MAX_ADDRESS

127.0.0.1

Max bridge

ABLETON_MAX_LOCAL_PORT

9001

Max bridge

ABLETON_MAX_REMOTE_PORT

9000

Max bridge

ABLETON_MAX_TIMEOUT_MS

8000

Max bridge

If you change the AbletonAgent ports, change them in remote-script/AbletonAgent/__init__.py too — OSC_LISTEN_PORT must match ABLETON_AGENT_REMOTE_PORT, and OSC_REPLY_PORT must match ABLETON_AGENT_LOCAL_PORT.

Optional: the Max for Live bridge

packages/ableton-agent/max/ableton-agent.amxd is an auxiliary second transport (ports 9000/9001) offering generic get/set/call access to the Live Object Model. It's useful for raw poking and diagnostics, and it can run side by side with the remote script — but nothing in the library or MCP server needs it. Load it onto any track in your set if you want it.

Using the library directly

packages/ableton-agent is usable on its own, without MCP — a typed façade (Live/Song/Track/Clip/Device) over the OSC transports. Every method returns a promise that resolves once Live has actually executed the change, so a resolved call means it happened, and a bad path rejects with Live's own error.

import { Live } from "ableton-agent";

const live = new Live({
  max: { address: "127.0.0.1", localPort: 9001, remotePort: 9000 },
  remote: { address: "127.0.0.1", localPort: 9011, remotePort: 9010 },
});
await live.connect();

console.log(await live.getProjectState());

const track = live.track(0);
await track.setVolume(0.85);
await track.clip(0).addNotes([{ pitch: 60, start: 0, duration: 1, velocity: 100 }]);

live.song.onIsPlayingChange((playing) => console.log(playing ? "playing" : "stopped"));
await live.song.play();

Repo layout

A Bun workspace with two packages:

Run a package script from the root with --filter:

bun run --filter ableton-agent check-agent
bun run --filter ableton-agent-mcp start

Testing

There are two kinds of tests, and the difference matters:

# Hermetic — no Ableton needed, safe to run anywhere.
bun test packages/ableton-agent/live.test.ts \
         packages/ableton-agent/liveBridge.test.ts \
         packages/ableton-agent-mcp/index.test.ts

These exercise the library and every MCP tool against an in-memory stand-in for Ableton (testSupport/fakeAbleton.ts) that speaks the real OSC wire protocol over real sockets.

# Everything, including the real-session integration suite.
bun test

Plain bun test also picks up index.real.test.ts, which drives a real, running Ableton Live session. There's no opt-in flag and no skipping: every test always attempts its real call and reports a genuine pass or fail, so bun test requires Ableton to be open and will start real, audible playback. If Live isn't reachable, those tests fail with a message explaining what's missing — use check-agent to debug connectivity.

All its mutations are confined to a scratch MIDI track it creates and deletes; the global properties it touches (tempo, time signature, key, playhead) are saved and restored.

License

MIT — see LICENSE.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for Producer/Riffusion AI music generation

  • MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.

  • MCP server exposing the Backtest360 engine API as tools for AI agents.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ju5tinz/ableton-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server