MCP server for AI-assisted electronic music production in Ableton Live
Mixed quality across 25 tools. Naming is generally clear with verb prefixes (adj-read-*, adj-create-*, adj-update-, adj-delete, adj-automate). Descriptions are present and moderately detailed (typically 40-80 chars), meeting the minimum bar. However, parameter schemas are only partially visible in the provided source code. The automate tool shows rich schema definition (action enum, clipId, slot, devicePath, paramName, points, shape, recipe, clear params), but most other tools lack visible input/output schemas in the excerpt. Tool annotations (destructiveHint, readOnlyHint) are declared in the risk metadata but not verified in the actual tool registration code. No pagination, structured output documentation, or per-tool error recovery guidance is evident. The server demonstrates solid naming discipline and basic description coverage, but lacks comprehensive schema visibility and LLM-optimized descriptions.
Read, write, or clear automation envelopes on devices and mixer parameters
Browse and query Live Set structure, devices, and presets
Workflow entry point and context initialization
Get current context information
Create a new clip in a track slot
Create and add a device to a track
Create a new scene in the Live Set
Create a new track in the Live Set
Input schemas not visible in source code for 24 of 25 tools. Only adj-automate shows explicit parameter definitions with types and descriptions (action enum, clipId string, slot string, devicePath string, paramName string, points string, shape string, recipe string, clear boolean). All other tools have schema scores of 0 due to lack of visible schema evidence.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Delete clips, tracks, scenes, or devices
Duplicate clips, tracks, scenes, or devices
Generate music with AI assistance (generative patterns, melodies, etc)
Mute notes in specific time ranges within a clip
Control playback (play, stop, continue) and positioning
Direct access to Ableton Live API (dev-only, gated by ENABLE_RAW_LIVE_API=true)
Read clip properties and notes
Read device properties and parameters
Read Live Set properties and structure
Read scene properties and structure
Read track properties and structure
Select clips, tracks, devices, or scenes in the Live UI
Update clip properties and notes
Update device properties and parameters
Update Live Set properties
Update scene properties
Update track properties
Output schemas not documented. No evidence of response structure definitions in provided source. LLMs cannot predict what fields to expect or how to chain results to downstream tools.
Destructive/irreversible tools (adj-delete with DESTRUCTIVE risk, adj-raw-live-api with IRREVERSIBLE risk) lack confirmation or dry-run patterns. No evidence of pre-execution gates or undo capabilities.
Tool descriptions are brief (40-80 chars typically) and lack WHEN/HOW context. E.g., 'Update Live Set properties' does not explain when to use adj-update-live-set vs adj-update-track, or what 'properties' means. Descriptions should answer: What does it do, when should I call it, what does it return?
No error handling guidance visible. Tools do not document what errors they can raise, how to recover, or what the LLM should do next. E.g., adj-delete does not clarify if it will fail if the item is in use, or if deletion is async/sync.
Tool annotations (destructiveHint, readOnlyHint, idempotentHint) are declared in the risk metadata but not verified in actual tool registration code. If they exist, they should be visible in the MCP tool definition alongside name, description, and inputSchema.
Parameter naming inconsistency: adj-automate uses generic 'clipId' and 'slot' (with semantic load in description); other tools not visible. Baseline best practice is suffixing with type (_id, _name, _email) to avoid LLM ambiguity about which identifier format to pass.
Pagination not documented or visible. For tools like adj-browse and adj-read-live-set that likely return lists, there is no evidence of limit, offset, or cursor parameters.
adj-raw-live-api is gated by ENABLE_RAW_LIVE_API=true but no evidence of permission checks in the provided code. Security best practice would verify the calling agent has explicit authorization before exposing a direct API gateway.