ableton-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ableton-mcp Create a MIDI track named Bass and add a four-bar C minor bassline."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ablenton-mcp
简体中文 | English
通过支持 MCP 的 AI 助手控制 Ableton Live:编写 MIDI、加载乐器和效果器、 调整设备参数,以及在 Arrangement View 中构建编曲。
本项目基于 Siddharth Ahuja 创建的 ahujasid/ableton-mcp,是保留 MIT 许可证的独立衍生版本。新增本机连接限制、修复命令超时,并提供源码安装指南。 本项目与 Ableton 官方无隶属关系。
验证状态: 连接层回归测试已通过;尚未在运行中的 Ableton Live 中完成端到端验证。 本项目没有独立发布到 PyPI,请从本仓库源码安装。
安装详解(英文) · 排错指南(英文) · 变更记录(英文) · 贡献指南(英文) · MIT 许可证
功能
领域 | 支持的操作 |
工程读取 | 查看轨道、片段、设备以及工程快照 |
轨道 | 创建 MIDI / 音频轨道,修改轨道名称 |
MIDI | 创建片段,读取、清空、添加音符 |
音频 | 将已有的本地音频文件导入 Session 片段槽位 |
音色与效果 | 浏览并加载乐器和效果器,读取和修改设备参数 |
播放控制 | 设置速度,开始/停止播放,触发/停止片段 |
编曲 | 查看编曲片段,将 Session 片段复制到时间线,重命名片段,添加定位标记 |
目前没有提供音频渲染导出或音频听辨工具。可用音色取决于你的 Live 版本和已安装音色包。
Related MCP server: ableton-mcp
工作原理
MCP 客户端(Codex / Claude / Cursor)
│ 标准输入/输出(stdio)
▼
本机 Python MCP 服务
│ TCP · 127.0.0.1:9877
▼
Live 内运行的 AbletonMCP Remote Script
│ Live API
▼
当前 Live 工程客户端、MCP 服务与 Live 应运行在同一台电脑上。TCP 协议没有身份验证,因此本版本 只监听本机回环地址;同一电脑上的其他进程仍然可以连接。仓库继承的 Docker / Smithery 文件不是推荐安装方式,因为容器的回环地址与宿主机相互独立。
本版本修复了什么
限制网络访问: 两份 Remote Script 均由
0.0.0.0改为监听127.0.0.1。修复超时覆盖: 音频导入保留 65 秒超时;已列出的修改命令使用 15 秒,其余命令使用 10 秒。 这些是单次套接字操作的超时,不是整个请求的总时限。
增加回归测试: 检查分块响应的超时设置、本机地址绑定,以及两份脚本的一致性。
完善文档: 明确 Python 3.10+ 要求、Live 11/12 编曲功能要求,并提供关闭数据收集的配置。
快速安装
1. 安装依赖与本项目
需要 Git、uv、 Python 3.10+;建议使用 Ableton Live 11 或 12。 Live 10.1.13 起支持 User Library 下的控制脚本,但编曲复制调用 Live 11/12 API;旧版本未经验证。
通过本仓库 GitHub 页面的 Code → HTTPS 地址克隆,进入克隆后的目录。
macOS:
uv venv --python 3.12
uv pip install --python .venv/bin/python -e .Windows PowerShell:
uv venv --python 3.12
uv pip install --python .venv/Scripts/python.exe -e .显式选择 Python 3.12,避免继承的 .python-version 文件自动选择 3.13。
不要直接运行 uvx ableton-mcp 来安装本版本:该命令获取的是上游 PyPI 包,不包含这里的修复。
仓库名 ablenton-mcp 与继承的 Python 包名、命令名 ableton-mcp 不同,这是有意保留的兼容设置。
2. 安装 Live 控制脚本
macOS:
.venv/bin/ableton-mcp-install-script --list-targets
.venv/bin/ableton-mcp-install-scriptWindows 使用 .venv/Scripts/ableton-mcp-install-script.exe 运行同样的参数。
安装器会将本仓库附带的脚本复制到检测出的 User Library;已有且内容不同的脚本会备份为
__init__.py.bak。如果音色库在自定义位置,可指定 Remote Scripts 父目录:
.venv/bin/ableton-mcp-install-script --target "/path/to/User Library/Remote Scripts"在 Ableton Live 中启用脚本
安装脚本后,先保存当前工作,完全退出 Ableton Live(macOS 按 ⌘Q),然后重新打开。 Live 需要重启才能识别新安装的控制脚本。
打开 Settings/Preferences → Link, Tempo & MIDI(Live 12.4 中名称为 Tempo & MIDI)。
在 Control Surface 中选择 AbletonMCP,将 Input 和 Output 均设为 None。
打开一个空白 Set。完成下方的 MCP 客户端配置后,向助手回复 “ready”, 让助手检查连接并开始创作音乐。
如果菜单中没有 AbletonMCP,请确认脚本位于
User Library/Remote Scripts/AbletonMCP/__init__.py,然后完全退出并重新打开 Live。
仅关闭设置窗口或关闭 Set 不等于重启 Live。
3. 配置客户端
始终使用虚拟环境可执行文件的绝对路径,并替换以下示例路径。一次只运行一个 MCP 服务实例。
Codex
将以下条目合并到 Codex MCP 配置(例如 ~/.codex/config.toml),保留已有配置:
[mcp_servers.ableton_local]
command = "/absolute/path/to/ablenton-mcp/.venv/bin/ableton-mcp"
args = []
[mcp_servers.ableton_local.env]
ABLETON_HOST = "127.0.0.1"
ABLETON_MCP_DISABLE_TELEMETRY = "true"
ABLETON_MCP_DISABLE_DATASET = "true"Claude Desktop / Cursor
在支持 mcpServers 的客户端配置中添加:
{
"mcpServers": {
"AbletonMCPLocal": {
"command": "/absolute/path/to/ablenton-mcp/.venv/bin/ableton-mcp",
"args": [],
"env": {
"ABLETON_HOST": "127.0.0.1",
"ABLETON_MCP_DISABLE_TELEMETRY": "true",
"ABLETON_MCP_DISABLE_DATASET": "true"
}
}
}
}Claude Desktop 可在 Settings → Developer → Edit Config 中编辑配置;Cursor
使用其 MCP 设置。Windows 路径应指向 .venv/Scripts/ableton-mcp.exe,JSON 中可使用正斜杠。
修改后重启或重新加载客户端;图形界面应用未必继承终端环境变量,因此请将变量保留在客户端配置里。
4. 首次验证
先保存当前工程,在空白测试工程中尝试:
读取当前 Session 信息,并报告 Remote Script 的版本和能力列表。
然后:
创建名为 Bass 的 MIDI 轨道,速度设为 110 BPM,在第一个 Session 槽位创建四小节 C 小调贝斯片段。浏览已安装的音色,加载一个可用贝斯乐器,并播放片段。
工具索引从 0 开始;长度和编曲位置以拍为单位。4/4 拍的四小节为 16 拍。
Remote Script 版本仍为 1.7.0、Python 包版本为 1.4.0;版本一致不代表已安装修复,
请务必用本仓库的安装器重新安装脚本并重启 Live。
macOS 可检查监听地址:
lsof -nP -iTCP:9877 -sTCP:LISTEN应看到 127.0.0.1:9877,而不是 *:9877。Windows 可运行
Get-NetTCPConnection -LocalPort 9877 -State Listen 查看 LocalAddress。
隐私与数据收集
上游遥测及数据集代码仍然保留。本仓库没有 MCP_Server/config.py 或 Supabase 凭据,
缺少配置时收集会被禁用;这里的客户端示例另外显式关闭遥测和数据集记录。
这些变量只控制本服务,不会改变 AI 客户端自身的数据政策。
如果有人另外配置了数据收集,上游继承的逻辑会将未回答的同意提示视为允许记录。 内容可能包括提示词、MIDI、工程结构、名称和设备参数;该记录代码不会上传音频。 TERMS.md 保留了原维护者的数据使用条款作为来源说明;本衍生版本没有引入新的收集服务。 本地日志仍可能含有路径和工具参数,公开问题报告前请做脱敏。
常见问题
现象 | 排查方法 |
客户端找不到程序 | 使用 |
Control Surface 中没有 AbletonMCP | 检查实际 User Library 位置、 |
连接被拒绝 | 启动 Live 并选择控制脚本;服务与 Live 必须在同一台电脑 |
端口被占用 | 检查重复的 Live 实例或 AbletonMCP 控制脚本条目 |
更新后仍监听所有网络接口 | 可能仍加载旧脚本;检查安装后的 |
MIDI 有音符但没有声音 | 检查乐器加载、静音、路由、音频输出和播放状态 |
编曲功能不可用 | 使用 Live 11/12,并确认源 Session 片段存在 |
导入超时 | 很慢的导入仍可能超过 65 秒;重试前先查看目标槽位,避免重复导入 |
更多排查见 Troubleshooting。超时不一定表示操作未执行; Live 可能稍后完成操作,重试前请检查结果。
测试与开发
不需要第三方依赖的回归测试:
python3 -m unittest discover -s tests -p test_connection_safety.py -v已安装虚拟环境后,可在 macOS 执行完整测试:
uv pip install --python .venv/bin/python pytest
ABLETON_MCP_DISABLE_TELEMETRY=true ABLETON_MCP_DISABLE_DATASET=true .venv/bin/python -m pytest -qWindows 请使用对应可执行文件路径,并通过 PowerShell 的 $env: 语法设置两个环境变量。
目前仅已验证上述无依赖回归测试;完整 pytest 套件尚未在本环境运行。
上游片段测试使用模拟连接,不能替代 Live 实机测试。
修改时请保持以下两份脚本一致:
AbletonMCP_Remote_Script/__init__.pyMCP_Server/bundled_ableton_remote_script/AbletonMCP_init.py
更新时拉取本仓库、按需重装依赖、重新运行控制脚本安装器,再重启 Live 和客户端。 卸载时先禁用客户端 MCP 条目、将 Control Surface 设为 None 并关闭 Live,然后仅移除 Remote Scripts 下的 AbletonMCP 文件夹;如需恢复旧脚本,使用相应备份。无需删除工程或音色库。
致谢与许可证
基于上游提交 8731a47(2026-08-30,包版本 1.4.0),保留原作者的
MIT 许可证和版权声明。原始 README 存档于
docs/UPSTREAM_README.md,其中的安装命令指向上游版本。
Available Tools
37 toolsadd_notes_to_clipB
Add MIDI notes to a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
notes: List of note dictionaries, each with pitch, start_time, duration, velocity, and mute
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: notes (required), clip_index (required), track_index (required), user_prompt. Returns: result
clear_notes_from_clipA
Remove all MIDI notes from a Session clip.
Writes are additive (add_notes_to_clip only appends), so to truly modify a clip you clear it first, then add the new notes. Use this with get_clip_notes and add_notes_to_clip for a real read -> modify -> write loop: read the notes, edit the list, clear_notes_from_clip, then add_notes_to_clip the edited notes.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: clip_index (required), track_index (required), user_prompt. Returns: result
create_audio_clipA
Create a new audio clip in an audio track's clip slot by importing a file.
Requires Ableton Live 12.0.5 or newer — the underlying ClipSlot.create_audio_clip Live API was introduced in 12.0.5 and is not available in earlier 12.0.x releases.
Parameters:
track_index: The index of the audio track to create the clip in
clip_index: The index of the clip slot to create the clip in
path: Absolute path to a supported audio file (e.g. a .wav). The target track must be an audio track and the clip slot must be empty.
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: path (required), clip_index (required), track_index (required), user_prompt. Returns: result
create_audio_trackA
Create a new audio track in the Ableton session.
Use this for recorded or imported audio (samples, stems, vocals). For MIDI instruments use create_midi_track instead.
Parameters:
index: The index to insert the track at (-1 = end of list)
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: index, user_prompt. Returns: result
create_clipB
Create a new MIDI clip in the specified track and clip slot.
Parameters:
track_index: The index of the track to create the clip in
clip_index: The index of the clip slot to create the clip in
length: The length of the clip in beats (default: 4.0)
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: clip_index (required), track_index (required), length, user_prompt. Returns: result
create_locatorA
Create a named locator (cue point) in the Arrangement at a beat position.
If a locator already exists at that beat (within ~1e-3 tolerance) it is renamed instead of toggled off. Time is in beats from the start of the arrangement (e.g. 0.0 = start, 16.0 = bar 5 in 4/4).
Parameters:
name: The locator label (e.g. "Chorus", "Verse 1", "Drop")
time: Beat position where the locator should sit
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: name (required), time (required), user_prompt. Returns: result
create_midi_trackA
Create a new MIDI track in the Ableton session.
Parameters:
index: The index to insert the track at (-1 = end of list)
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: index, user_prompt. Returns: result
delete_clipA
Delete the clip in the given clip slot, freeing it for reuse.
Use this before create_clip when you want to overwrite an existing clip (create_clip itself refuses to write into an occupied slot).
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot to clear
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: clip_index (required), track_index (required), user_prompt. Returns: result
duplicate_to_arrangementA
Copy a Session-view clip into the Arrangement timeline.
Uses Live's track.duplicate_clip_to_arrangement() API (Live 11 / 12). The clip is placed at destination_time beats from the start of the arrangement on the same track it lives in.
Typical workflow:
create_clip / add_notes_to_clip to build a Session clip
Call duplicate_to_arrangement once per bar/section you need
Call switch_to_arrangement_view to confirm the result in Live
Parameters:
track_index: Index of the track that owns the Session clip
clip_index: Index of the clip slot in that track (Session view)
destination_time: Beat position in the arrangement to place the clip (e.g. 0.0 = start, 8.0 = bar 3 in 4/4)
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: clip_index (required), track_index (required), destination_time (required), user_prompt. Returns: result
fire_clipB
Start playing a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: clip_index (required), track_index (required), user_prompt. Returns: result
get_arrangement_clipsA
List all clips placed in the Arrangement timeline for a track.
Returns each clip's name, start_time, end_time, length, and type.
Parameters:
track_index: The index of the track to inspect
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: track_index (required), user_prompt. Returns: result
get_browser_items_at_pathA
Get browser items at a specific path in Ableton's browser.
Parameters:
path: Path in the format "category/folder/subfolder" where category is one of the available browser categories in Ableton
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: path (required), user_prompt. Returns: result
get_browser_treeC
Get a hierarchical tree of browser categories from Ableton.
Parameters:
category_type: Type of categories to get ('all', 'instruments', 'sounds', 'drums', 'audio_effects', 'midi_effects')
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: user_prompt, category_type. Returns: result
get_clip_notesA
Read all MIDI notes from a Session-view clip.
Returns pitch, start_time, duration, velocity, mute (and extended fields when available).
Parameters:
track_index: Track that owns the clip
clip_index: Session clip slot index
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: clip_index (required), track_index (required), user_prompt. Returns: result
get_device_parametersB
Read all parameters for a device on a track (name, value, min, max).
Parameters:
track_index: Track that owns the device
device_index: Index into the track's device chain
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: track_index (required), device_index (required), user_prompt. Returns: result
get_remote_script_infoA
Report Ableton Remote Script version and capabilities (handshake).
Use this to verify the Live-side bridge matches this MCP server package.
Inputs: user_prompt. Returns: result
get_session_infoB
Get detailed information about the current Ableton session
Parameters:
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: user_prompt. Returns: result
get_session_snapshotA
Capture a full project state snapshot for trajectory recording.
Includes session metadata, every track (mixer, devices, session clips, arrangement clips), optional MIDI notes, and optional device parameters. Used to version musical state S_t → S_{t+1}.
Parameters:
include_notes: Include MIDI note arrays in clips (default True)
include_params: Include device parameter values (default True)
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: user_prompt, include_notes, include_params. Returns: result
get_track_infoC
Get detailed information about a specific track in Ableton.
Parameters:
track_index: The index of the track to get information about
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: track_index (required), user_prompt. Returns: result
load_drum_kitB
Load a drum rack and then load a specific drum kit into it.
Parameters:
track_index: The index of the track to load on
rack_uri: The URI of the drum rack to load (e.g., 'Drums/Drum Rack')
kit_path: Path to the drum kit inside the browser (e.g., 'drums/acoustic/kit1')
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: kit_path (required), rack_uri (required), track_index (required), user_prompt. Returns: result
load_instrument_or_effectB
Load an instrument or effect onto a track using its URI.
Parameters:
track_index: The index of the track to load the instrument on
uri: The URI of the instrument or effect to load (e.g., 'query:Synths#Instrument%20Rack:Bass:FileId_5116')
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: uri (required), track_index (required), user_prompt. Returns: result
prefer_candidateA
Record a pairwise preference between two candidate actions or auditions.
winner should be 'a', 'b', or an explicit candidate id matching A or B.
Requires telemetry consent.
Parameters:
candidate_a: Id / URI / label for option A
candidate_b: Id / URI / label for option B
winner: 'a', 'b', or the winning id
reason: Optional reason ("C has the right attack")
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: winner (required), candidate_a (required), candidate_b (required), reason, +1 more. Returns: result
rate_last_actionA
Rate the most recent recorded action (or the track after an edit).
Ratings: better | same | worse | keep | reject | thumbs_up | thumbs_down Optional tags (comma-separated): groove, harmony, melody, sound, arrangement, energy, mix, emotion
Requires telemetry consent.
Parameters:
rating: Preference label
tags: Comma-separated aspect tags
note: Optional free-text reason
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: rating (required), note, tags, user_prompt. Returns: result
record_auditionA
Log a browser/preset/sample audition (keep or reject) for preference learning.
Call once per candidate auditioned. Does not load the device — use load_instrument_or_effect when kept=True and you want to commit.
Requires telemetry consent.
Parameters:
uri: Browser item URI (or stable preset/sample id)
kept: Whether this candidate was kept
search_query: Optional search text that led here (e.g. "analog bass")
dwell_ms: Optional time spent auditioning
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: uri (required), kept, dwell_ms, user_prompt, +1 more. Returns: result
reject_last_actionA
Mark the last action as rejected (exploration / preference boundary).
Use when the human undoes or discards an agent edit. Requires telemetry consent.
Parameters:
reason: Optional why it was rejected
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: reason, user_prompt. Returns: result
set_arrangement_clip_nameA
Set the name of a clip placed in the Arrangement timeline.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip within track.arrangement_clips, in the same order returned by get_arrangement_clips (i.e. ordered by start_time)
name: The new name for the clip
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: name (required), clip_index (required), track_index (required), user_prompt. Returns: result
set_arrangement_timeA
Move the arrangement playhead to a specific position.
Parameters:
time: Position in beats from the start of the arrangement (e.g. 8.0 = bar 3 in 4/4)
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: time (required), user_prompt. Returns: result
set_clip_nameC
Set the name of a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
name: The new name for the clip
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: name (required), clip_index (required), track_index (required), user_prompt. Returns: result
set_dataset_consentA
Record the user's answer to the dataset consent question.
Call this ONLY after the user has answered in their own words. Never infer the answer, never call it on their behalf, and never call it because contributing seems helpful — consent the user did not give is not consent. If they have not been asked yet, ask first and wait for their reply.
Parameters:
consent: True if the user agreed to contribute, False if they declined
user_said: The user's reply, quoted as closely as possible
Inputs: consent (required), user_said. Returns: result
set_device_parameterA
Set a device parameter to a specific value.
Use get_device_parameters first to discover parameter indices and ranges.
Parameters:
track_index: Track that owns the device
device_index: Index into the track's device chain
parameter_index: Index into device.parameters
value: New parameter value (Live parameter units)
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: value (required), track_index (required), device_index (required), parameter_index (required), +1 more. Returns: result
set_tempoB
Set the tempo of the Ableton session.
Parameters:
tempo: The new tempo in BPM
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: tempo (required), user_prompt. Returns: result
set_track_nameA
Set the name of a track.
Parameters:
track_index: The index of the track to rename
name: The new name for the track
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: name (required), track_index (required), user_prompt. Returns: result
start_playbackB
Start playing the Ableton session.
Parameters:
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: user_prompt. Returns: result
stop_clipA
Stop playing a clip.
Parameters:
track_index: The index of the track containing the clip
clip_index: The index of the clip slot containing the clip
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: clip_index (required), track_index (required), user_prompt. Returns: result
stop_playbackB
Stop playing the Ableton session.
Parameters:
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: user_prompt. Returns: result
submit_intentA
Record the human's creative intent for subsequent actions in this session.
Call this before a sequence of edits so trajectory steps are conditioned on intent. Levels: 1=atomic, 2=musical op, 3=section, 4=song, 5=creative goal.
Requires telemetry consent. Data is stored in Supabase (same project as telemetry).
Parameters:
text: Natural-language intent (e.g. "make the chorus feel bigger")
level: Hierarchical intent level 1–5 (default 5)
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: text (required), level, user_prompt. Returns: result
switch_to_arrangement_viewC
Switch Ableton's main window to the Arrangement view.
Parameters:
user_prompt: The original user prompt that led to this tool call (for telemetry)
Inputs: user_prompt. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 37 tools
Most DAW tools have clear targets, but several clusters are close: get_session_info vs get_session_snapshot, create_clip vs create_audio_clip, load_instrument_or_effect vs load_drum_kit, and the preference/trajectory tools (reject_last_action, rate_last_action, prefer_candidate, record_audition) overlap in purpose. Descriptions clarify the differences, but an agent could easily misselect without reading them carefully.
Tool names overwhelmingly follow a clear verb_noun snake_case pattern: get_*, create_*, set_*, start_*, stop_*, fire_*, delete_*, load_*. Minor deviations exist, like create_clip lacking 'midi' while create_audio_clip explicitly says audio, and a few telemetry tools (prefer_candidate, record_audition, submit_intent) using varied verbs, but the overall pattern is coherent.
At 37 tools, this is a large surface. A sizable subset consists of telemetry, consent, snapshot, intent, and preference-logging tools that are not core Ableton operations, making the set feel bloated and harder to navigate than necessary.
The core workflow is fairly well covered: clips can be created, populated, cleared, read, named, fired, stopped, deleted, and duplicated to arrangement; devices and browser browsing are covered. However, notable gaps remain, including no delete track, no mixer/solo/mute/volume/pan control beyond device parameters, no arrangement clip deletion/moving, and no locator deletion or listing, so some likely workflows end in dead ends.
Maintenance
Related MCP Connectors
MCP server for Producer/Riffusion AI music generation
Remote MCP server for audio stem separation, denoise, reverb, and MIDI export.
Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.
Direct AI video, image, music and storyboard production from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects Ableton Live to AI assistants through Model Context Protocol (MCP), enabling natural language control of music production tasks like track creation, MIDI editing, instrument loading, and playback control.15MIT
- FlicenseBqualityDmaintenanceMCP server for controlling Ableton Live, enabling AI assistants to interact with Live sessions through tools for track/clip/scene management, playback control, and device parameter adjustments.48-
- AlicenseAqualityBmaintenanceAn MCP server that enables AI assistants to control Ableton Live, providing 104 tools for music production including track, clip, device, and mixer control.156867 PyPI73MIT
- AlicenseBqualityDmaintenanceEnables AI agents to control Ableton Live 12 for music production, including generating grooves, basslines, and percussion, and executing live set operations through MCP.32MIT