The ceiling was state access
The upstream Ableton MCP exposed 22 tools. The fork exposed 52 implemented tools out of 55 defined commands, including reads for notes, arrangement clips, devices, parameters, automation, groove, mixer state, and probability, plus undo, redo, and track and device management.
Claude could write MIDI. It could not read enough of the set back to know what the kick was doing before proposing a hat pattern, or see the velocity it was about to adjust. More prompting did not solve that. The model was not under-specified. It was under-informed.
State access set the ceiling.
Randomness is not groove
The first attempt at making the drums feel alive used random velocity and random note probability. Both changes were technically valid. Both were bland. Variation that has no relationship to the events around it is noise with a respectable label.
I rejected the output and kept the lesson. Groove is a relationship between events. It requires knowing what came before and what the next hit is preparing.
Named rules beat dice.
Timing became grammar
The replacement was explicit. Anchor hits stayed on the grid. Ghost hits used a quintuplet offset at beat +0.600 followed by a septuplet offset at beat +0.571. The second ghost pulled slightly ahead of the expectation established by the first. Fills used sextuplet timing, which marked departure without reading as an arbitrary error.
A generator check on the call-and-response snare grammar produced 28 notes across 8 bars. The snare was rebuilt as two voices across 23 arrangement clips. The kit kept its groove template (129) while the snare remained deliberately ungrooved, so its written timing did not fight a second template.
The grammar was inspectable.
Phrase structure became visible
A pad used 12-bar cycles against 8-bar material. Those phrase lengths realign every 24 bars, producing slow movement without an obvious reset. Eight phased 12-bar pad cycles covered bars 57 through 152.
Read access did more than prevent mistakes. It changed the kind of musical idea Claude could extend because the model could reason about arrangement form instead of isolated bars.
Context changed the available ideas.
The system became versioned
The MCP fork, production-context skill, timing grammars, provenance patterns, deploy script, and documentation were versioned together. Pattern files preserved examples from outside sources. Grammars encoded reusable production rules. The distinction matters because evidence and instruction are not the same artifact.
A deployment check passed for both Ableton remote-script targets, the local MCP server, and the Claude Code skill. The project can be reconstructed instead of remembered approximately in the next session.
The method now survives the session.
What remains unresolved
A page that only shows wins is a sales document.
- The bass octave may be wrong and still needs a real listening decision.
- Session and Arrangement drums diverged; the correct source is unresolved.
- Pad presence in the drops and at the peak needs listening.
- One arrangement automation read path reported false despite an envelope being present.
This run had no audio-return path. I remained the ears; Claude had structural eyes and hands. The structural changes above are verified. Claims about how the final arrangement sounds are pending.
What this changes
Better music did not come from a larger prompt or more random variation. It came from better state access, explicit musical grammar, and a human willing to reject technically valid blandness.
I will keep building the read side before adding more write operations. I will keep recording musical rules as testable grammars instead of hoping for emergent taste. The open question is whether an audio-return path lets Claude connect those structural decisions to what is actually coming out of the speakers.
That is the next honest test.