Skip to main content
Glama
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