ableton12-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_session_infoA | Get detailed information about the current Ableton session (tempo, time signature, track/return/scene counts, master mixer). |
| get_track_infoA | Get detailed info about a track: name, mute/solo/arm, volume/pan, clip slots, and the ordered list of devices (with their indices). |
| create_midi_trackA | Create a new MIDI track. index=-1 appends at the end. Re-read get_session_info afterwards to learn the real new index. |
| set_track_nameC | Set the name of a track. |
| create_clipA | Create a new empty MIDI clip. length is in BEATS (not bars). |
| add_notes_to_clipA | Add MIDI notes to a clip (additive — call repeatedly to build large clips). |
| set_clip_nameB | Set the name of a clip. |
| set_tempoB | Set the session tempo in BPM. |
| load_instrument_or_effectA | Load an instrument or effect device onto a track by its browser URI. |
| load_drum_kitB | Load a Drum Rack, then load the first loadable kit found at kit_path. |
| fire_clipB | Start playing a clip (launches the clip slot). |
| stop_clipA | Stop a playing clip slot. |
| start_playbackA | Start the session transport. |
| stop_playbackA | Stop the session transport. |
| get_browser_treeA | Get the top-level browser categories ('all', 'instruments', 'sounds', 'drums', 'audio_effects', 'midi_effects'). Use get_browser_items_at_path to drill in and find loadable URIs. |
| get_browser_items_at_pathA | List browser items at a path like 'instruments/Operator' or 'drums'. Each item reports name, is_folder, is_loadable and uri. |
| get_device_parametersA | List every automatable parameter of a device on a track. |
| set_device_parameterA | Set one device parameter — this is how you change a sound's tone. |
| set_device_enabledA | Turn a device on or off (its bypass / 'Device On' switch). track='master'/'return:N' targets those tracks. |
| delete_deviceB | Delete a device from a track. track='master'/'return:N' targets those tracks. |
| get_macrosA | List the macro controls of a Rack device (Instrument/Audio/MIDI/Drum Rack). Returns JSON like get_device_parameters but limited to the rack's macros. Set them with set_macro (or set_device_parameter). |
| set_macroA | Set a Rack macro by index (0-based) or name. Same value/value_normalized semantics as set_device_parameter. |
| set_track_volumeA | Set a track's volume fader (0.0-1.0). NOTE: this is the fader position, not dB — ~0.85 ≈ 0 dB (unity), 1.0 ≈ +6 dB. value and value_normalized are equivalent here (the fader range is already 0..1). Reply reports the dB. track='master' sets the master fader. |
| set_track_panA | Set a track's pan, -1.0 (hard left) .. 0.0 (center) .. +1.0 (hard right). track='master'/'return:N' targets those tracks. |
| set_track_sendC | Set a track's send level (0.0-1.0) to return track send_index (0-based). |
| set_track_muteA | Mute (on=True) or unmute (on=False) a track. |
| set_track_soloA | Solo (on=True) or unsolo (on=False) a track. |
| set_track_armA | Arm (on=True) or disarm (on=False) a track for recording. |
| set_track_colorA | Set a track's color as a packed RGB integer (0xRRGGBB, e.g. 16711680 = red). |
| create_audio_trackB | Create a new audio track. index=-1 appends at the end. |
| create_return_trackA | Create a new return track (appended after existing returns). |
| delete_trackA | Delete a track. All higher track indices shift down — re-read get_session_info afterwards. |
| duplicate_trackA | Duplicate a track (with its devices and clips). Re-read get_session_info afterwards to learn indices. |
| get_clip_notesA | Read all MIDI notes from a clip. Returns JSON with a list of notes (pitch, start_time, duration, velocity, mute, and note_id when available). |
| remove_notes_from_clipA | Remove MIDI notes from a clip within a time/pitch region. Defaults clear the whole clip (from_time=0, full length, all pitches). time_span=None means 'to the end of the clip'. |
| set_clip_loopA | Set a clip's loop attributes (only the ones you pass are changed): looping on/off, loop_start/loop_end (beats), start_marker/end_marker. |
| duplicate_clipB | Duplicate a clip into the next clip slot on the same track. |
| delete_clipB | Delete the clip in a clip slot. |
| set_clip_colorA | Set a clip's color as a packed RGB integer (0xRRGGBB). |
| create_sceneA | Create a new scene. index=-1 appends at the end. |
| fire_sceneA | Launch a scene (fires every track's clip in that scene row). |
| set_scene_nameC | Set a scene's name. |
| delete_sceneA | Delete a scene. Higher scene indices shift down. |
| set_time_signatureA | Set the song time signature, e.g. numerator=3, denominator=4 for 3/4. |
| set_metronomeA | Turn the metronome on or off. |
| set_song_positionA | Move the transport playhead to a position in beats from song start. |
| get_transportA | Report transport/record state: is_playing, record_mode (Arrangement Record ● armed?), session_record, current_song_time (beats), back_to_arranger, clip_trigger_quantization, tempo and time signature. Use it to verify a capture is running and to watch the playhead advance. |
| set_arrangement_recordA | Arm/disarm Arrangement (global) Record — the transport's ● button. With it ON, launching Session clips/scenes records them into the Arrangement timeline. This is the capability that lets a Session-view loop be captured for export (Live's exporter only renders the Arrangement). For the full automated capture use capture_session_to_arrangement instead. |
| set_clip_trigger_quantizationA | Set the global clip-launch quantization by index (0 = None, which launches clips immediately). capture_session_to_arrangement sets this to None for a tight start and restores it afterwards; exposed here for manual control. |
| capture_session_to_arrangementA | Record a Session scene into the Arrangement so the song can be exported. |
| healthA | Diagnostic: confirm the connection and report the Remote Script version that is actually loaded in Ableton (useful after reinstalling the script). |
| get_track_meterA | Read a track's output meter (0..1) for left/right and overall level. track can be an int index, 'master', or 'return:N'. Meters only move while audio plays — fire a clip/scene first, then sample (call a few times). |
| get_master_meterA | Read the master bus output meter (0..1). Sample while a scene is playing to gauge overall level / spot clipping (level near 1.0 = too hot). |
| launch_abletonA | Launch (or focus) Ableton Live 12, optionally opening a .als, then wait for the AbletonMCP control-surface bridge to come up on :9877. Use this to start Ableton before composing, or to reopen a saved project. |
| new_live_setA | File ▸ New Live Set (Cmd-N) for a clean slate. The control surface is a global preference, so the :9877 bridge survives. Requires Accessibility. |
| save_setA | File ▸ Save (Cmd-S) — for a Set already saved to disk. Requires Accessibility. |
| save_set_asA | File ▸ Save As to a specific path, e.g. '.../projects// Project/.als'. Drives the macOS save sheet via AppleScript (best-effort) and returns expected_path — verify the file exists afterwards. Requires Accessibility. |
| open_export_dialogA | Open Export Audio/Video (Cmd-Shift-R) and copy target_path to the clipboard for pasting into the save sheet. Returns the remaining steps; does NOT press Render (you confirm the export). Requires Accessibility. |
| analyze_audioA | Analyze a rendered/captured audio file — the objective 'listening' step. |
| compare_audioA | Diff two audio files (b relative to a) into human-readable deltas — loudness, per-band level, brightness (centroid), punch (low-band crest), width and dynamics, plus a one-line headline. Sub-perceptual changes are suppressed. This is the closed loop's progress meter: capture before/after a parameter move and compare to confirm the change helped. |
| record_audioA | Capture Live's audio output to a WAV via a loopback device (BlackHole) —
the per-track 'ears'. Give a duration as |
| record_and_analyzeA | Capture |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/verove-jordan/ableton12-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server