ableton12-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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