MCP server for Claude to Ableton Live 12 control via AbletonOSC
paranoid-ableton provides 20 well-structured tools for Ableton Live control via AbletonOSC. All tools have descriptions (avg 120 chars) and explicit JSON Schema input definitions with typed parameters. Naming follows verb_noun convention (arrangement_*, clip_*). However, descriptions are functional but lack LLM-optimization guidance (e.g., no 'when to use' context, no dependency hints). Output schemas are not documented, LLMs cannot predict return structure. Parameter descriptions are present but often minimal (e.g., 'Track index (0-based) or name' lacks guidance on which to prefer). No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Error handling is implicit (tool implementation) rather than explicit in definitions. Composition is sound, tools are single-responsibility and chainable.
Add a cue point (locator) at the given arrangement time. Briefly moves the playhead there and back. If a cue point already exists at that exact time, this removes it instead (Live's own toggle behavior). Requires the custom AbletonOSC extension.
Create a new empty MIDI clip directly in a track's arrangement timeline. Requires the custom AbletonOSC extension.
Delete a clip from a track's arrangement timeline by index (from arrangement_list_clips). Requires the custom AbletonOSC extension.
Delete a cue point (locator) by index. Requires the custom AbletonOSC extension.
Duplicate an existing session clip into a track's arrangement timeline at the given time. Source and destination track may be the same or different. Requires the custom AbletonOSC extension.
Move the arrangement playhead to a cue point by index. Requires the custom AbletonOSC extension.
Output schemas not documented. LLMs cannot predict return structure (e.g., what fields does arrangement_list_cue_points return? Is it {cue_points: [{time, name}]} or {points: [...]}?). This forces agents to guess and risks parsing failures.
Tool annotations missing. Risk levels are documented in the rubric (READ_ONLY, WRITE, DESTRUCTIVE) but not exposed as readOnlyHint/destructiveHint in tool definitions. LLMs cannot distinguish safe reads from destructive writes without explicit hints.
Parameter descriptions lack LLM-optimization guidance. E.g., 'Track index (0-based) or name' does not explain when to use index vs name, or which is preferred. Descriptions should include 'when to use' context and dependency hints (e.g., 'If you only have a track name, pass the name; the tool will resolve it to an index').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
List clips placed in a track's arrangement timeline (as opposed to session clip slots), with start_time, end_time, length, name, and whether each is a MIDI clip. Requires the custom AbletonOSC extension.
List all cue points (locators) in the arrangement, with their time (in beats) and name. Requires the custom AbletonOSC extension.
Rename a clip in a track's arrangement timeline by index. Requires the custom AbletonOSC extension.
Rename a cue point (locator) by index. Requires the custom AbletonOSC extension.
Write automation envelope points for a device parameter into a clip. Points are step values; each holds until the next point (the last holds to clip end). Requires the AbletonOSC automation extension.
Add MIDI notes to an existing clip. Each note needs pitch (0-127, 60=C4 middle C), start_time (beats from clip start), duration (beats), velocity (1-127, default 100), and mute (default false). Notes are added to existing content -- they do not replace.
Clear the automation envelope for a device parameter in a clip. Requires the AbletonOSC automation extension.
Create a new empty MIDI clip in a clip slot. Length is in beats (e.g., 4.0 = one bar at 4/4). Can only create on MIDI tracks in empty slots.
Delete a clip from a clip slot.
Get clip properties including name, length, loop points, whether it is a MIDI clip, and note count.
Read MIDI notes from a clip. Returns structured note objects with pitch, start_time, duration, velocity, mute. Optionally filter by pitch range and time range.
Remove MIDI notes from a clip by pitch and/or time range. WARNING: Omitting all filter parameters removes ALL notes from the clip.
Set clip loop properties. All time values in beats. Loop start must be less than loop end. When changing both, the order of operations is handled automatically to avoid constraint violations.
Set the name of a clip.
No error recovery guidance in tool descriptions. E.g., clip_add_notes does not document what happens if the track or scene does not exist, or how the LLM should recover. Descriptions should include 'If track not found, try list_tracks() first' or similar.
clip_remove_notes has a dangerous default: 'Omitting all filter parameters removes ALL notes from the clip.' This is a data-loss risk. The tool should require at least one filter parameter or support a dry-run/confirmation step.