Ableton MCP Extended
Provides text-to-speech generation, custom voice creation, and direct import of generated audio into Ableton sessions.
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 ExtendedCreate a MIDI clip with a four-chord piano progression on the current track"
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.
Ableton MCP Extended
Control Ableton Live using natural language via AI assistants like Claude or Cursor. This project provides a robust Model Context Protocol (MCP) server that translates natural language commands into precise actions within your Ableton Live session.
Форк с доработками. Добавлено 22 команды Remote Script и 25 инструментов MCP: чтение MIDI-нот, сцены, свойства session-клипов, микшер (mute/solo/arm, посылы), матрица модуляции Wavetable, undo/redo. Подробности и установка — в FORK-NOTES.md.
Video demonstration: https://www.youtube.com/watch?v=7ZKPIrJuuKk
This tool is designed for producers, developers, and AI enthusiasts who want to streamline their music production workflow, experiment with generative music, and build custom integrations with Ableton Live.
You can transform this conversation:
👤 "Create a brief minimalist/neo-classical composition in a style similar to Ólafur Arnalds'. (Ableton MCP) / I've loaded four MIDI tracks called "Noire" and "Noire (2) ["Emotional Felt" presets], "Noire (2) ["Reversed Felt" preset, for ambient background], and "Noire (3) ["Ethereal Felt" preset, also for ambient background]. All loaded with nice piano instruments. You have also a MIDI track called "Strings" with a nice string ensemble instrument loaded. Feel free to add new instruments and effects, if pertinent."
🤖 "Creating MIDI clips... Adding effects... Done!"
👤 "Then, use ElevenLabs MCP to create a spoken-word audio clip (default voice and settings) with a relevant poem in the style of “Jim Morrison” to accompany the composition."
🤖 "Generating poem... Transforming it into speech... Importing it into your session... Done!"Into this music production session:
https://github.com/user-attachments/assets/d6ef2de5-bdeb-4097-acc0-67d70f7f85b3
Key Features
This project provides comprehensive, programmatic control over the Ableton Live environment.
Session and Transport Control:
Start and stop playback.
Get session info, including tempo, time signature, and track count.
Manage scenes: create, delete, rename, and fire.
Track Management:
Create, rename, and get detailed information for MIDI and audio tracks.
Control track properties: volume, panning, mute, solo, and arm.
Manage track grouping and folding states.
MIDI Clip and Note Manipulation:
Create and name MIDI clips with specified lengths.
Add, delete, transpose, and quantize notes within clips.
Perform batch edits on multiple notes in a single operation.
Adjust clip loop parameters and follow actions.
Device and Parameter Control:
Load instruments and effects from Ableton's browser by URI.
Get a full list of parameters for any device on a track.
Set and batch-set device parameters using normalized values (0.0 to 1.0).
Automation and Envelopes:
Add and clear automation points for any device parameter within a clip. [This feature isn't working perfectly yet.]
Get information about existing clip envelopes.
Browser Integration:
Navigate and list items from Ableton's browser.
Load instruments, effects, and samples directly from a browser path or URI.
Import audio files directly into audio tracks or clip slots.
Voice & Audio Generation
Text-to-Speech Integration: Generate narration, vocal samples, or spoken elements through ElevenLabs MCP [included].
Custom Voice Creation: Clone voices for unique character in your tracks
Sound Effects: Create custom SFX with AI
Direct Import: Generated audio appears instantly in your Ableton session
Extensible Framework for Custom Tools
Example: XY Mouse Controller: Demonstrates creating custom Ableton controllers with the MCP framework
Ultra-Low Latency: High-performance UDP protocol enables responsive real-time control
Unlimited Possibilities: Build your own custom tools and controllers for Ableton Live
Related MCP server: io.github.peterkolbe/ableton-for-ai
Quick Start (5 Minutes)
Prerequisites
Ableton Live 11+ (any edition)
Python 3.10 or higher
Claude Desktop or Cursor IDE
1. Get the Code
git clone https://github.com/uisato/ableton-mcp-extended.git
cd ableton-mcp-extended
pip install -e .2. Install Ableton Script
Find your Ableton User Library Remote Scripts folder:
Windows:
C:\Users\[You]\Documents\Ableton\User Library\Remote Scripts\Mac:
~/Music/Ableton/User Library/Remote Scripts/
Create folder:
AbletonMCPCopy
AbletonMCP_Remote_Script/__init__.pyinto this folder
3. Configure Ableton
Open Ableton Live
Go to Preferences → Link, Tempo & MIDI
Set Control Surface to "AbletonMCP"
Set Input/Output to "None"
4. Connect AI Assistant
For Claude Desktop:
{
"mcpServers": {
"AbletonMCP": {
"command": "python",
"args": ["C:/path/to/ableton-mcp-extended/MCP_Server/server.py"]
}
}
}For Cursor: Add MCP server in Settings → MCP with the same path.
5. Start Creating!
Open your AI assistant and try:
"Create a new MIDI track with a piano"
"Add a simple drum beat"
"What tracks do I currently have?"
How It Works
graph TB
A[You: Natural Language] --> B[AI Assistant]
B --> C[MCP Server]
C --> D[Ableton Remote Script]
D --> E[Ableton Live API]
E --> F[🎵 Your Music]
G[ElevenLabs AI] --> H[Generated Audio]
H --> CYou issue a command in plain English to your AI assistant (e.g., "Create a new MIDI track and name it 'Bass'").
The AI Assistant understands the intent and calls the appropriate tool from the MCP server.
The MCP Server (server.py) receives the tool call and constructs a specific JSON command.
The Ableton Remote Script (init.py), running inside Live, receives the JSON command via a socket connection.
The Remote Script executes the command using the official Ableton Live API, making the change in your session instantly.
Advanced Features
For real-time parameter control with ultra-low latency:
# Install the hybrid server
cp -r Ableton-MCP_hybrid-server/AbletonMCP_UDP/ ~/Remote\ Scripts/AbletonMCP_UDP/
# Try the XY Mouse Controller example
cd experimental_tools/xy_mouse_controller
python mouse_parameter_controller_udp.pyThis demonstrates how to build:
Custom real-time controllers for Ableton
Expressive performance tools
Interactive music applications
This repository can be integrated with other MCP servers, such as one for ElevenLabs, to generate and import audio directly into your project.
Set up the ElevenLabs MCP server according to its instructions.
Update your AI assistant's config to include both servers.
Example mcp-config.json:
{
"mcpServers": {
"AbletonMCP": {
"command": "python",
"args": ["/path/to/ableton-mcp-extended/server.py"]
},
"ElevenLabs": {
"command": "python",
"args": ["/path/to/elevenlabs_mcp/server.py"],
"env": {
"ELEVENLABS_API_KEY": "your-api-key-here"
}
}
}
}Components Overview
This project includes several specialized components:
Core MCP Server
Standard TCP communication for reliable AI control
Extensive Ableton Live API integration
Compatible with Claude Desktop, Cursor, and Gemini CLI.
Hybrid TCP/UDP Server
High-performance real-time parameter control
Ultra-low latency for live performance
Perfect for controllers and interactive tools
ElevenLabs Integration
Professional text-to-speech generation
Custom voice creation and cloning
Direct import into Ableton sessions
Real-time SFX generation
Experimental Tools & Examples
XY Mouse Controller: Example demonstrating how to build custom Ableton controllers
Extensible Framework: Foundation for creating your own control interfaces
Proof of Concept: Shows the power and flexibility of the MCP approach
Documentation
Installation Guide - Detailed setup instructions
User Guide - What, which, and how
Community & Support
GitHub Issues: Bug reports and feature requests
Discussions: Share your creations and get help
Share Your Creations
Tag me with your AI-generated experiments! I love seeing what the community creates:
YouTube | Instagram | Patreon | Website
What's Next
Fixing Automation Point Placement Bugs
VST Plugin Support- Control third-party plugins [Though it can be achieved throught the "Configure" parameter function]→ Done!Arrangement View - Full timeline control
Hardware Integration - Bridge MIDI controllers through AI
Advanced AI - Smarter and better music understanding and generation
License & Credits
This project is licensed under the MIT License - see LICENSE for details.
Built with:
Model Context Protocol - AI integration framework
ElevenLabs API - Professional voice generation
Ableton Live - Digital audio workstation
Inspired by: The original ableton-mcp project
Made with ❤️ for the music production community
If this project helps your creativity, consider giving it a ⭐ star!
Available Tools
71 toolsadd_notes_to_clipB
Add MIDI notes to a clip.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
notes: List of note dictionaries, each with pitch, start_time, duration, velocity, and mute.
Inputs: notes (required), clip_index (required), track_index (required). Returns: result
add_wavetable_mod_targetB
Make a parameter a modulation target in Wavetable's matrix.
Reports which device parameters appeared as a result, which shows whether the matrix amounts become ordinary automatable parameters.
Parameters:
track_index: Track number (1-based).
parameter_name: Target parameter name (or use parameter_index).
parameter_index: Target parameter number (1-based).
device_index: Device number on the track (1-based).
chain_index: Chain number inside a rack (1-based, 0 = not in a rack).
Inputs: track_index (required), chain_index, device_index, parameter_name, +1 more. Returns: result
clear_notes_from_clipA
Remove every MIDI note from a Session clip, leaving the clip in place.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
Inputs: clip_index (required), track_index (required). Returns: result
control_arrangement_viewA
Control the arrangement view.
Parameters:
action: One of: zoom_in, zoom_out, scroll_left, scroll_right, follow_on, follow_off, collapse_track, expand_track.
track_index: Track number (1-based, for collapse/expand).
Inputs: action (required), track_index. Returns: result
create_arrangement_audio_clipA
Place an audio file as a clip in the arrangement.
Parameters:
track_index: Track number (1-based).
file_path: Path to the audio file.
start_bar: Start bar (1-based).
start_beat: Start position in beats.
Inputs: file_path (required), track_index (required), start_bar, start_beat. Returns: result
create_arrangement_midi_clipB
Create an empty MIDI clip in the arrangement.
Parameters:
track_index: Track number (1-based).
start_bar: Start bar (1-based). Takes precedence over start_beat.
end_bar: End bar (1-based). Used with start_bar to compute length.
start_beat: Start position in beats.
length_beats: Clip length in beats.
name: Optional clip name.
Inputs: track_index (required), name, end_bar, start_bar, +2 more. Returns: result
create_audio_trackB
Create a new audio track.
Parameters:
index: Insert position (-1 = end of list).
Inputs: index. Returns: result
create_clipB
Create a new MIDI clip in the specified track and clip slot.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
length: The length of the clip in beats (default: 4.0).
Inputs: clip_index (required), track_index (required), length. Returns: result
create_cue_pointA
Create a cue point at a position.
Parameters:
bar: Bar number (1-based).
beat: Beat position (0-based).
name: Name for the cue point.
Inputs: bar, beat, name. 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)
Inputs: index. Returns: result
create_sceneA
Insert a new scene.
Parameters:
index: Position (1-based), or -1 to append at the end.
Inputs: index. Returns: result
delete_arrangement_clipC
Delete an arrangement clip.
Parameters:
track_index: Track number (1-based).
clip_index: Clip position in arrangement (1-based).
clip_name: Clip name (alternative to clip_index).
Inputs: track_index (required), clip_name, clip_index. Returns: result
delete_clipA
Delete the clip in a Session slot, freeing the slot.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
Inputs: clip_index (required), track_index (required). Returns: result
delete_cue_pointA
Delete a cue point at a position.
Parameters:
bar: Bar number (1-based).
beat: Beat position (0-based).
Inputs: bar, beat. Returns: result
delete_deviceB
Delete a device from a track.
Parameters:
track_index: Track number (1-based).
device_index: Device number (1-based).
device_name: Device name (alternative to device_index).
Inputs: track_index (required), device_name, device_index. Returns: result
delete_sceneB
Delete a scene and everything in that row.
Parameters:
scene_index: Scene number (1-based).
Inputs: scene_index (required). Returns: result
delete_trackA
Delete a track from the Ableton session.
Parameters:
track_index: Track number (1-based). Use 0 to resolve by name instead.
track_name: Track name (alternative to track_index). If both are given, track_index takes priority.
Inputs: track_name, track_index. Returns: result
describe_device_apiA
Report what a device object actually exposes in the running build of Live.
Device-specific classes (WavetableDevice, SimplerDevice, ...) carry members that never appear in the parameter list. Use this to find them.
Parameters:
track_index: Track number (1-based).
device_index: Device number on the track (1-based).
chain_index: Chain number inside a rack (1-based, 0 = not in a rack).
Inputs: track_index (required), chain_index, device_index. Returns: result
disable_deviceA
Disable (bypass) a device on a track.
Parameters:
track_index: Track number (1-based).
device_index: Device number (1-based). Use 0 if using device_name.
device_name: Device name (alternative to device_index).
chain_index: Chain number inside a rack (1-based, 0 = no chain).
Inputs: track_index (required), chain_index, device_name, device_index. Returns: result
duplicate_clip_to_arrangementC
Copy a session clip to the arrangement.
Parameters:
track_index: Track number (1-based).
clip_index: Session clip slot (1-based).
destination_bar: Destination bar (1-based).
destination_beat: Destination beat.
Inputs: clip_index (required), track_index (required), destination_bar, destination_beat. Returns: result
duplicate_sceneA
Duplicate a scene, inserting the copy directly below it.
Parameters:
scene_index: Scene number (1-based).
Inputs: scene_index (required). Returns: result
enable_deviceA
Enable (activate) a device on a track.
Parameters:
track_index: Track number (1-based).
device_index: Device number (1-based). Use 0 if using device_name.
device_name: Device name (alternative to device_index).
chain_index: Chain number inside a rack (1-based, 0 = no chain).
Inputs: track_index (required), chain_index, device_name, device_index. Returns: result
fire_clipB
Start playing a clip.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
Inputs: clip_index (required), track_index (required). Returns: result
fire_sceneA
Launch a scene: every clip in that row starts, and tracks whose slot in the row is empty are stopped.
Parameters:
scene_index: Scene number (1-based).
Inputs: scene_index (required). Returns: result
get_arrangement_infoA
Get arrangement clips and transport state.
Parameters:
track_index: Track number (1-based). 0 = all tracks.
Inputs: track_index. 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
Inputs: path (required). 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')
Inputs: category_type. Returns: result
get_chain_infoA
List chains in a rack device, or devices within a specific chain.
Parameters:
track_index: Track number (1-based).
device_index: Device number (1-based, default 1).
chain_index: Chain number (1-based) to drill into. 0 = list all chains.
Inputs: track_index (required), chain_index, device_index. Returns: result
get_clip_notesA
Read the MIDI notes of a Session clip.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
Inputs: clip_index (required), track_index (required). Returns: result
get_clip_propertiesA
Read a Session clip's Clip-panel properties.
Covers Transpose, Clip Gain, Loop Position/Length, Start/End, warping and whether the clip is deactivated. Audio-only properties are omitted for MIDI clips rather than failing.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
Inputs: clip_index (required), track_index (required). Returns: result
get_cue_pointsA
List all cue points (locators) with bar positions.
Inputs: no named parameters. Returns: result
get_device_parametersA
List parameters for a device on a track.
Parameters:
track_index: Track number (1-based).
device_index: Device number on the track (1-based, default 1).
chain_index: Chain number inside a rack (1-based, 0 = no chain).
category: Filter by category name (returns detail for that category).
show_all: If True, return all parameters in detail mode.
Default mode returns a summary grouped by category with counts. Specify category or show_all=True for full parameter details.
Inputs: track_index (required), category, show_all, chain_index, +1 more. Returns: result
get_drum_pad_infoA
List filled drum pads in a Drum Rack.
Parameters:
track_index: Track number (1-based).
device_index: Device number (1-based, default 1).
Inputs: track_index (required), device_index. Returns: result
get_scenesA
List every scene with its name, state and which clips it holds.
A scene is a row of the Session grid. Use this to see which clips would launch together.
Inputs: no named parameters. Returns: result
get_session_infoA
Get detailed information about the current Ableton session
Inputs: no named parameters. Returns: result
get_session_snapshotA
Dump the whole project state in one call: tracks, clips, devices, scenes, returns, master and cue points.
Parameters:
include_notes: Include MIDI notes of every clip (large output).
include_params: Include every device parameter (very large output).
Inputs: include_notes, include_params. Returns: result
get_track_deletion_statusA
Check whether session tracks can be deleted right now.
Returns a quick safety summary so agents can avoid attempting deletes when Ableton's minimum-track constraint would block them.
Inputs: no named parameters. Returns: result
get_track_infoC
Get detailed information about a specific track in Ableton.
Parameters:
track_index: Track number (1-based).
Inputs: track_index (required). Returns: result
get_track_volumeA
Get the current fader volume and panning for a track.
Returns the raw normalized value, its min/max range, and the panning. Volume 0.85 = 0 dB unity gain. Use this before set_track_volume to understand the current state.
Parameters:
track_index: Track number (1-based). Return tracks come after session tracks.
Inputs: track_index (required). Returns: result
get_wavetable_stateA
Read a Wavetable's modulation matrix, wavetable selection and voicing.
None of this appears in get_device_parameters - it lives on the WavetableDevice object itself.
Parameters:
track_index: Track number (1-based).
device_index: Device number on the track (1-based).
chain_index: Chain number inside a rack (1-based, 0 = not in a rack).
Inputs: track_index (required), chain_index, device_index. Returns: result
jump_to_cue_pointC
Jump to a cue point.
Parameters:
direction: "next" or "prev"
name: Cue point name to jump to.
Inputs: name, direction. Returns: result
list_external_pluginsA
List discovered external plugins (VST/AU), optionally filtered by name query.
Parameters:
query: Optional case-insensitive search string.
max_results: Maximum number of plugins to display.
refresh_cache: If True, force a rescan instead of using cached results.
Inputs: query, max_results, refresh_cache. Returns: result
load_drum_kitA
Load a drum rack and then load a specific drum kit into it.
Parameters:
track_index: Track number (1-based).
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').
Inputs: kit_path (required), rack_uri (required), track_index (required). Returns: result
load_external_pluginA
Load an external plugin onto a track by plugin name (no URI required).
Parameters:
track_index: Track number (1-based).
plugin_name: Plugin name to match (e.g., "FabFilter Pro-Q 3").
exact_match: If True, require exact normalized name match.
refresh_cache: If True, force a rescan before matching.
Inputs: plugin_name (required), track_index (required), exact_match, refresh_cache. Returns: result
load_instrument_or_effectA
Load an instrument or effect onto a track using its URI.
Parameters:
track_index: Track number (1-based).
uri: The URI of the instrument or effect to load (e.g., 'query:Synths#Instrument%20Rack:Bass:FileId_5116').
Inputs: uri (required), track_index (required). Returns: result
manage_clip_automationB
Create or clear automation envelopes on arrangement clips.
Parameters:
track_index: Track number (1-based).
clip_index: Clip position (1-based).
clip_name: Clip name (alternative to clip_index).
action: "create", "clear", or "clear_all".
parameter_name: Parameter to automate (e.g., "volume", "panning").
Inputs: track_index (required), action, clip_name, clip_index, +1 more. Returns: result
redoA
Redo the last undone action in Live.
Inputs: no named parameters. Returns: result
replace_notes_in_clipA
Replace a clip's contents: clear every existing note, then write these.
add_notes_to_clip only appends. This clears first, so the clip ends up with exactly the notes given.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
notes: Note dicts with pitch, start_time, duration, velocity, mute.
Inputs: notes (required), clip_index (required), track_index (required). Returns: result
set_ableton_viewA
Switch Ableton's main view.
Parameters:
view: View name. Options: Arranger, Session, Detail, Detail/Clip, Detail/DeviceChain, Browser.
Inputs: view. Returns: result
set_arrangement_clip_propertyA
Set properties on an arrangement clip.
Parameters:
track_index: Track number (1-based).
clip_index: Clip position (1-based).
clip_name: Clip name (alternative to clip_index).
name: New clip name.
muted: Mute state.
color: Color (0x00RRGGBB).
looping: Loop on/off.
loop_start: Loop start in beats.
loop_end: Loop end in beats.
gain: Audio gain (0.0-1.0).
pitch_coarse: Semitone pitch shift (-48 to 48).
pitch_fine: Fine pitch shift (-50 to 49 cents).
warping: Warp on/off.
warp_mode: Warp mode (0-6).
Inputs: track_index (required), gain, name, color, +10 more. Returns: result
set_arrangement_loopA
Enable/disable arrangement loop and set region.
Parameters:
enabled: Whether loop is on.
start_bar: Loop start (1-based). Takes precedence over start_beat.
end_bar: Loop end (1-based). Used with start_bar to compute length.
start_beat: Loop start in beats.
length_beats: Loop length in beats.
Inputs: enabled, end_bar, start_bar, start_beat, +1 more. Returns: result
set_clip_nameB
Set the name of a clip.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
name: The new name for the clip.
Inputs: name (required), clip_index (required), track_index (required). Returns: result
set_clip_propertyA
Set one property on a Session clip.
Writable names: name - clip name muted - True deactivates the clip (the "0" key in Live) color - clip colour as an integer pitch_coarse - Transpose in semitones pitch_fine - fine tune in cents looping - loop on/off loop_start / loop_end - Loop Position and end, in beats start_marker / end_marker - clip Start/End, in beats gain - Clip Gain (audio clips) warping - warp on/off (audio clips) warp_mode - warp algorithm (audio clips) velocity_amount - velocity-to-volume amount (MIDI clips)
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
property_name: One of the names above.
value: New value; type depends on the property.
Inputs: value (required), clip_index (required), track_index (required), property_name (required). Returns: result
set_device_parameterB
Set a device parameter value.
Parameters:
track_index: Track number (1-based).
device_index: Device number (1-based, default 1).
chain_index: Chain number inside a rack (1-based, 0 = no chain).
parameter_name: Parameter name, friendly alias, or partial match.
parameter_index: Parameter number (1-based, alternative to name).
value: Normalized value 0.0-1.0.
Inputs: track_index (required), value, chain_index, device_index, +2 more. Returns: result
set_scene_propertyA
Set a scene's name, colour, tempo or time signature.
Writable names: name, color, tempo, time_signature_numerator, time_signature_denominator.
Writing tempo or a time signature from the API also switches that scene control on, so no separate enable step is needed.
Parameters:
scene_index: Scene number (1-based).
property_name: One of the names above.
value: New value.
Inputs: value (required), scene_index (required), property_name (required). Returns: result
set_send_levelA
Set one send level from a track to a return track.
Parameters:
track_index: Track number (1-based).
send_index: Send slot (1-based; send 1 feeds return A, 2 feeds B, ...).
value: Normalized 0.0 (off) to 1.0 (max).
Inputs: value (required), send_index (required), track_index (required). Returns: result
set_song_timeA
Jump playback to a position.
Parameters:
bar: Bar number (1-based). Takes precedence over beat.
beat: Beat position (0-based).
Inputs: bar, beat. Returns: result
set_tempoA
Set the tempo of the Ableton session.
Parameters:
tempo: The new tempo in BPM
Inputs: tempo (required). Returns: result
set_track_armA
Arm or disarm a track for recording. Group and return tracks cannot be armed.
Parameters:
track_index: Track number (1-based).
arm: True to arm, False to disarm.
Inputs: arm (required), track_index (required). Returns: result
set_track_muteB
Mute or unmute a track.
Parameters:
track_index: Track number (1-based). Return tracks come after session tracks.
mute: True to mute, False to unmute.
Inputs: mute (required), track_index (required). Returns: result
set_track_nameC
Set the name of a track.
Parameters:
track_index: Track number (1-based).
name: The new name for the track.
Inputs: name (required), track_index (required). Returns: result
set_track_panningA
Set the mixer panning for a track.
Parameters:
track_index: Track number (1-based).
panning: -1.0 = full left, 0.0 = center, +1.0 = full right.
Inputs: panning (required), track_index (required). Returns: result
set_track_soloA
Solo or unsolo a track.
Parameters:
track_index: Track number (1-based).
solo: True to solo, False to clear.
Inputs: solo (required), track_index (required). Returns: result
set_track_volumeA
Set the mixer fader volume for a track directly.
This controls the actual track fader, not any device parameter.
Volume scale (normalized): 0.0 = silence 0.85 = 0 dB (unity gain, Ableton's default fader position) 1.0 = maximum (~+6 dB)
Parameters:
track_index: Track number (1-based). Return tracks come after session tracks.
volume: Normalized volume 0.0–1.0. Use 0.85 for unity (0 dB).
Inputs: volume (required), track_index (required). Returns: result
set_wavetable_modulationA
Set one cell of Wavetable's modulation matrix.
Sources: amp_envelope, envelope_2, envelope_3, lfo_1, lfo_2, midi_note, midi_velocity, midi_mod_wheel, midi_pitch_bend, midi_channel_pressure, midi_random.
Live 11's API documented no setter for this; if this build has none the call reports that rather than failing silently.
Parameters:
track_index: Track number (1-based).
target_index: Matrix target index from get_wavetable_state.
source: Modulation source name.
value: Modulation amount.
device_index: Device number on the track (1-based).
chain_index: Chain number inside a rack (1-based, 0 = not in a rack).
Inputs: value (required), source (required), track_index (required), target_index (required), +2 more. Returns: result
set_wavetable_propertyA
Set a Wavetable property that is not a device parameter.
Writable names: oscillator_1_wavetable_category / oscillator_1_wavetable_index oscillator_2_wavetable_category / oscillator_2_wavetable_index oscillator_1_effect_mode / oscillator_2_effect_mode (0=None 1=FM 2=Classic 3=Modern) filter_routing (0=Serial 1=Parallel 2=Split) mono_poly (0=Mono 1=Poly) poly_voices, unison_mode, unison_voice_count
Parameters:
track_index: Track number (1-based).
name: Property name from the list above.
value: Integer value.
device_index: Device number on the track (1-based).
chain_index: Chain number inside a rack (1-based, 0 = not in a rack).
Inputs: name (required), value (required), track_index (required), chain_index, +1 more. Returns: result
start_playbackB
Start playing the Ableton session.
Inputs: no named parameters. Returns: result
stop_clipA
Stop playing a clip.
Parameters:
track_index: Track number (1-based).
clip_index: Clip slot number (1-based).
Inputs: clip_index (required), track_index (required). Returns: result
stop_playbackB
Stop playing the Ableton session.
Inputs: no named parameters. Returns: result
undoA
Undo the last action in Live.
Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
TDQS
Scored across 71 tools
Most tools target a distinct resource and action, but a few pairs blur together: set_clip_name overlaps with set_clip_property, and get_session_info, get_session_snapshot, and get_arrangement_info all promise broad state dumps. The detailed descriptions help, but an agent could easily misselect between these similar-sounding entry points.
The entire toolset follows a consistent verb_noun snake_case pattern: create_midi_track, set_track_volume, delete_scene, get_clip_notes. Even less standard verbs like manage, control, navigate, and describe fit naturally within the same convention.
At 71 tools, this is far beyond the comfortable MCP server range and will create a large, unwieldy selection surface for agents. While Ableton is a broad DAW, the count feels bloated and includes redundant tools such as set_clip_name alongside set_clip_property.
The tool surface covers most core DAW workflows: track creation and mixing, session and arrangement clips, MIDI editing, scenes, cue points, devices, browser loading, and undo/redo. Minor gaps remain, such as creating session audio clips and explicit recording/export control, but agents can accomplish common tasks without 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.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for Ableton Live that exposes the Live Object Model to LLMs, enabling natural language control of music production.3680 npm10MIT
- AlicenseAqualityCmaintenanceMCP server that bridges Ableton Live with AI models, enabling real-time project inspection and control such as track overview, device parameters, and audio analysis.1235 PyPI1MIT
- 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-
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes Ableton Live control (session state, transport, tracks, devices, clips, MIDI note editing) as tools for LLM agents, enabling natural language manipulation of a Live session.1MIT