Skip to main content
Glama
Ableton MCP Extended

Ableton MCP Extended

by zabolotniydj

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.

License: MIT Python 3.10+ Ableton Live 11+


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

  1. 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/

  2. Create folder: AbletonMCP

  3. Copy AbletonMCP_Remote_Script/__init__.py into this folder

3. Configure Ableton

  1. Open Ableton Live

  2. Go to Preferences → Link, Tempo & MIDI

  3. Set Control Surface to "AbletonMCP"

  4. 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 --> C
  1. You issue a command in plain English to your AI assistant (e.g., "Create a new MIDI track and name it 'Bass'").

  2. The AI Assistant understands the intent and calls the appropriate tool from the MCP server.

  3. The MCP Server (server.py) receives the tool call and constructs a specific JSON command.

  4. The Ableton Remote Script (init.py), running inside Live, receives the JSON command via a socket connection.

  5. 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.py

This 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


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:

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 tools
add_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

    B3.4/5.0

    Scored across 71 tools

    Disambiguation3/5

    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.

    Naming Consistency5/5

    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.

    Tool Count2/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      B
      quality
      D
      maintenance
      MCP 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
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      An 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.
      1
      MIT