Skip to main content
Glama
README.md
<p align="center">
  <img src="docs/assets/readme-header.png" alt="Reaper Daemon. Nothing is listening." width="100%">
</p>

# Reaper Daemon

[![Reaper Daemon MCP server – quality and maintenance score on Glama](https://glama.ai/mcp/servers/wretcher207/reaper-daemon/badges/score.svg)](https://glama.ai/mcp/servers/wretcher207/reaper-daemon)

Reaper Daemon is a REAPER MCP server and file bridge for driving REAPER from
an AI agent, including mixing your session with Claude or any other agent.
No network socket, no port, no extensions.

The agent drops a JSON command file in a folder. A Lua script inside REAPER
runs it and writes a JSON result back. That's the whole protocol. It works
with Claude Code, Codex, Cursor, or anything else that can read and write
files, and an optional stdio MCP server, `reaper_mcp.py`, exposes the same
bridge as tools for Claude Desktop and any other MCP client.

macOS, Windows, Linux. Pure Lua inside REAPER, plain Python 3 outside, no
pip packages for the core bridge and MCP server.
[Audio-to-drum MIDI transcription](docs/transcription.md) uses a separate optional
model environment. Every change runs inside a REAPER undo block, so Ctrl+Z
reverts anything an agent does.

## Install

Reaper Daemon has two halves, a Lua bridge that runs inside REAPER and the
tools that talk to it. Both come from a clone of this repository on the
computer REAPER runs on, so install here first, even if you found it through
the Claude plugin directory.

```bash
git clone https://github.com/wretcher207/reaper-daemon.git
cd reaper-daemon
python3 setup/install.py
```

Restart REAPER, then check the bridge is alive:

```bash
python3 reaperd.py status
```

Rendering and audio capture are off until you allow them, and every
measurement needs them, including `verify_change`. To do that, run:

```bash
python3 setup/install.py --allow-audio-writes
```

Saving the project, changing REAPER preferences and running Lua scripts have
their own switches; see [docs/install.md](docs/install.md).

Prefer ReaPack, or want to load the bridge by hand? See [docs/install.md](docs/install.md).

### Claude plugin

The repository is also a Claude plugin. It bundles the MCP server with five
skills: setup, drum programming, drum humanizing, guitar and bass parts, and
MIDI for an existing arrangement. The plugin drives the install above, so if
you added it before installing, ask Claude to set up Reaper Daemon. The setup
skill finds what's missing, runs the clone and installer with you, asks which
disk writes to allow, and checks that REAPER answers.

When you add the plugin, Claude asks for two settings:

- **Reaper Daemon folder**: where you cloned it. Default `~/reaper-daemon`.
- **Python command**: default `python3`. On Windows, use `python` or `py` if
  `python3` isn't on your PATH.

Cowork doesn't ask, so it uses those defaults. To try the plugin in Claude
Code straight from your clone:

```bash
claude --plugin-dir /path/to/reaper-daemon
```

The MCP server runs on your computer, next to REAPER. It works in Claude
Code and in Cowork sessions on your machine. Chat on claude.ai loads the
skills but can't reach REAPER.

## Mix with an AI agent

Point Claude, or any agent talking to Reaper Daemon, at your open REAPER
session and ask it to work on the mix. It reads every plugin and parameter
with `scan_fx`, sets FX values in real units like `"-2.5 dB"`, and writes
automation. `verify_change` captures the track before and after a move and
reports what changed in the audio, so you are not taking its word for it.
Every move sits inside a REAPER undo block, and your ears make the call.

Example prompts:

- "The bass is muddy around 300 Hz, pull it down."
- "Bring the vocal down so it sits with the mix instead of on top."
- "Tune the bass until its LUFS is down 3 dB."
- "What plugins are on the drum bus, and what are they set to?"

See [MCP server](docs/mcp.md) for setup and [Verify](docs/verify.md) for
what the measurements do and do not prove.

## What it does

| Area | Commands |
| --- | --- |
| Project | transport, tempo and the tempo map, cursor, time selection, render, save |
| Tracks | add, delete, rename, select, volume, pan, mute, solo, arm, color |
| Routing | read sends and receives, create sends, toggle master feed |
| FX | add, remove, bypass, reorder, set parameters, write automation, save chains |
| Markers, regions, media items | full read and write |
| MIDI | insert MIDI files, plus a drum DSL with humanization |
| Transcription | turn an audio item into drum MIDI with an optional local analysis runtime |
| Guitar and bass | `shred` renders a humanized riff, `band` cuts a whole rhythm section |
| Discovery | `scan_fx` dumps every plugin and parameter; `discover_drum_map` reads any kit's note map |
| Verify | measure loudness, spectrum and dynamics before and after a mix move |
| Actions and scripts | search and run anything in REAPER's action list; run Lua by source or path, behind its own switch |

The bridge knows nothing about any specific plugin or drum library. Agents
discover what a project contains and act on it by name.

## Three ways to talk to it

**CLI.** One Python entry point for everything an agent does.

```bash
python3 reaperd.py send commands/examples/get_context.json --wait
python3 reaperd.py shred --track argent-l --bars-file riff.txt --seed 101
```

**MCP server.** `reaper_mcp.py` wraps the bridge as tools over stdio.
Ask Claude Desktop to "measure the drums" and it does.

[![Reaper Daemon MCP server – quality and maintenance score on Glama](https://glama.ai/mcp/servers/wretcher207/reaper-daemon/badges/card.svg)](https://glama.ai/mcp/servers/wretcher207/reaper-daemon)

**Daemon Console.** A chat panel docked inside REAPER, backed by a headless
Claude Code session that always knows which track you have selected.

## Docs

| | |
| --- | --- |
| [Install](docs/install.md) | one-line installer, ReaPack, manual load |
| [CLI](docs/cli.md) | `reaperd.py` reference |
| [MCP server](docs/mcp.md) | setup for Claude Desktop and other clients |
| [Daemon Console](docs/CONSOLE.md) | the in-REAPER chat panel |
| [Drums](docs/drums.md) | kit discovery, stem profiling, humanize |
| [Composing workflow](docs/composing-workflow.md) | writing full songs with sampled instruments: measure, articulate, vary cymbals, verify |
| [Drum workshop](docs/drum-workshop.md) | separate composition briefs, MIDI comparisons, scoped audition feedback |
| [Drum transcription](docs/transcription.md) | audio to MIDI, background jobs, kit mapping |
| [Guitar and bass](docs/guitar-bass.md) | `shred` and `band` |
| [Mix recipes](docs/mix-recipes.md) | capture, compare and rebuild a mix setup |
| [Verify](docs/verify.md) | closed-loop mix moves with measured proof |
| [Protocol](docs/protocol.md) | the file wire format |
| [Troubleshooting](docs/troubleshooting.md) | silent captures, stale heartbeats |
| [Watchdog](docs/watchdog.md) | unattended runs: relaunch REAPER, dialogs, stale queue files |
| [Song planner](docs/song-planner.md) | instrument library, song sheets, approved drafts |
| [Security](docs/security.md) | trust model and the optional token |
| [Develop](docs/develop.md) | tests, CI, repo layout |

Agents should read [AGENTS.md](AGENTS.md), [CLAUDE.md](CLAUDE.md), and
[bridge/command_schema.md](bridge/command_schema.md). Two bundled skills,
[arrangement-midi](skills/arrangement-midi/SKILL.md) and
[drum-humanize](skills/drum-humanize/SKILL.md), cover MIDI composition and
drum humanization. [song-planner](skills/song-planner/SKILL.md) plans and
drafts whole songs from a brief, a riff or a reference.

## Security

Any process that can write to `inbox/` can drive REAPER. Keep the bridge
folder local and off shared drives. Details in [docs/security.md](docs/security.md).

## What it runs and sends

Everything runs on your machine. The MCP server and CLI are plain Python
with no network calls. The bridge is a Lua script inside REAPER. It trades
JSON files with the server through the Reaper Daemon folder, which also
holds logs and the MIDI files it generates. Renders and captures write
audio files only if you turn on audio writes, which are off by default.
Nothing leaves your computer.

Three optional pieces do more, and only if you install them:

- Drum transcription downloads its Python packages and model weights during
  setup, and Demucs downloads its weights on the first separation job.
  Audio stays local.
- `analyze_track` and `compare_tracks` run
  [Post Mortem](https://github.com/wretcher207/post-mortem) from your PATH.
- The Daemon Console starts a Claude Code session on your machine, which
  talks to Anthropic like any Claude Code session.

## License

MIT. See [LICENSE](LICENSE).

Keyboard performance setup, MIDI/controller tests and template saving are documented in [the performance workflow](docs/keyboard-performance.md).

TDQS

B3.2/5.0

Scored across 49 tools

Disambiguation3/5

The descriptions are unusually explicit and cross-reference each other (e.g. insert_midi_events vs insert_midi_file vs insert_groove vs insert_riff), which rescues a lot. But with 49 tools there are still real boundary clusters: five audio-measurement tools (capture_track_audio, analyze_track, compare_tracks, verify_change, tune_param), four drum/MIDI-generation paths (riff_grid, profile_track, insert_groove, drum_workshop, transcribe_drums/insert_drum_transcription), and three automation writers (write_automation, apply_automation_transaction, batch) that an agent must reason carefully to pick between.

Naming Consistency3/5

Everything is snake_case, so casing is consistent, but the verb convention is not: many tools are verb_noun (get_status, set_fx_param, insert_groove, capture_track_audio) while others are bare domain nouns that dispatch on an action argument (track, transport, markers, fx, batch, instruments, song_plan). Readable, but an agent cannot infer from a name alone whether the operation is a noun-with-action or a fixed verb.

Tool Count2/5

49 tools is well past the 25-tool threshold and the surface includes long-tail capabilities (verify_change, tune_param, complete_postmortem_onboarding, insert_performance_audition, drum_workshop) that most sessions will never touch. Each is individually defensible for a full DAW bridge, but the set as a whole is heavy enough that selection accuracy and prompt budget suffer.

Completeness4/5

Coverage of the DAW domain is broad: transport/tempo map, tracks and routing, FX chain and parameters, automation, MIDI generation across several engines, markers/regions, save/templates, actions/scripts, and measured audio analysis. Gaps are real but mostly second-order — there is no media-item listing/inspection or item editing (split, trim, move, fades), no master-volume/mix write tool, and no undo/redo management, all of which some workflows will hit as dead ends.

Maintenance

ActivityActive
ResponsivenessSlow