mcp-strudel
by alienmind
README.md
# mcp-strudel - Strudel ↔ MIDI MCP server
An [MCP](https://modelcontextprotocol.io) server that exposes the Strudel
mini-notation engine (shared with the `m4l-strudel` device) as tools Claude can
call. Combine it with **ableton-mcp** so you can say things like *"lay down a
`bd(3,8)` kick and a `c5 [e5 g5]*2` bassline"* and have Claude convert the
patterns and write them into Ableton clips.
## Tools
| Tool | Input | Output |
|---|---|---|
| `strudel_to_midi` | `pattern`, `bars`, `cycles`, `conv`, `octaveOffset`, `velocity` | JSON note events (`pitch`, `start`, `duration` in beats) + `lengthBeats` |
| `midi_to_strudel` | `notes[]`, `bars`, `grid`, `conv`, `octaveOffset` | mini-notation text |
| `strudel_validate` | `pattern` | parse errors or "OK" |
`conv` = `strudel` (c5=60, default) or `scientific` (c4=60).
## Run
```
pnpm install
pnpm test # engine contract tests (vitest)
pnpm start # launches the stdio MCP server (tsx src/server.ts)
```
## Wire it into Claude
Add to the MCP config you pass to the Claude Code CLI (e.g. the `mcp-config.json`
that the `m4l-claude` device generates), alongside AbletonMCP:
```json
{
"mcpServers": {
"AbletonMCP": { "command": "uvx", "args": ["ableton-mcp"] },
"strudel": {
"command": "npx",
"args": ["-y", "tsx", "C:/Users/jaime/src/livecam-m4l/tmp/mcp-strudel/src/server.ts"]
}
}
}
```
With both servers available, Claude can call `strudel_to_midi` to turn a pattern
into notes, then use AbletonMCP's clip/note tools to create the clip - the
`m4l-strudel → mcp-strudel → ableton-mcp` path, orchestrated in natural language.
## Engine
`src/lib/mini/` is the same parser/scheduler/unparser as the `m4l-strudel`
device (recursive-descent parser, Bjorklund euclidean rhythms, cycle scheduler,
grid quantizer). Keeping one engine means the device and the server always agree
on how a pattern sounds.
TDQS
A4/5.0
Scored across 3 tools
Disambiguation5/5
Each tool has a distinct and non-overlapping purpose: MIDI-to-Strudel conversion, Strudel-to-MIDI conversion, and Strudel validation. No ambiguity.
Naming Consistency5/5
All tools follow a consistent verb_noun pattern in snake_case: midi_to_strudel, strudel_to_midi, strudel_validate. Perfectly predictable naming.
Tool Count5/5
Three tools is ideal for a focused conversion/validation server. No bloat or deficiency given the domain.
Completeness4/5
Covers the essential bidirectional conversion and validation. A minor gap is the lack of a tool for partial conversions or advanced transformations, but the core workflow is complete.
Maintenance
ActivityStale
ResponsivenessNo issues