@mthines/reaper-mcp 0.19.0 → 0.70.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -570
- package/bridge-ui/mcp_bridge.html +129 -0
- package/bridge-ui/mcp_bridge.webmanifest +16 -0
- package/bridge-ui/mcp_bridge_icon_192.png +0 -0
- package/bridge-ui/mcp_bridge_icon_512.png +0 -0
- package/bridge-ui/mcp_bridge_sw.js +35 -0
- package/claude/agents/plugin-researcher.md +188 -0
- package/claude/knowledge/reference/aesthetics-scoring.md +48 -0
- package/{knowledge → claude/knowledge}/reference/common-mistakes.md +1 -1
- package/claude/knowledge/reference/lorekit-setup.md +36 -0
- package/claude/knowledge/reference/memory-protocol.md +377 -0
- package/{knowledge → claude/knowledge}/reference/metering.md +5 -5
- package/claude/knowledge/reference/perceived-loudness.md +182 -0
- package/{knowledge → claude/knowledge}/workflows/editing.md +4 -0
- package/{knowledge → claude/knowledge}/workflows/gain-staging.md +21 -23
- package/{knowledge → claude/knowledge}/workflows/learn-plugin.md +15 -48
- package/{knowledge → claude/knowledge}/workflows/master-bus.md +13 -1
- package/claude/knowledge/workflows/section-levels.md +138 -0
- package/{knowledge → claude/knowledge}/workflows/session-prep.md +4 -0
- package/claude/knowledge/workflows/transient-lighting.md +52 -0
- package/claude/skills/critique/SKILL.md +131 -0
- package/claude/skills/editing/SKILL.md +281 -0
- package/claude/skills/learn-plugin/SKILL.md +210 -0
- package/claude/skills/mastering/SKILL.md +151 -0
- package/claude/skills/mix-memory/SKILL.md +140 -0
- package/claude/skills/mixer/SKILL.md +253 -0
- package/claude/skills/new-extension/SKILL.md +324 -0
- package/main.js +7843 -1940
- package/package.json +17 -15
- package/reaper/CLAUDE.md +22 -4
- package/reaper/mcp_actions_lib.lua +375 -0
- package/reaper/mcp_analyzer.jsfx +27 -12
- package/reaper/mcp_arrange_lib.lua +949 -0
- package/reaper/mcp_bridge.lua +2321 -758
- package/reaper/mcp_edit_views_lib.lua +1378 -0
- package/reaper/mcp_envelopes_lib.lua +748 -0
- package/reaper/mcp_extensions_lib.lua +55 -0
- package/reaper/mcp_fxstate_lib.lua +144 -0
- package/reaper/mcp_gain_trace.jsfx +126 -0
- package/reaper/mcp_items_lib.lua +877 -0
- package/reaper/mcp_lufs_meter.jsfx +16 -13
- package/reaper/mcp_midi_lib.lua +555 -0
- package/reaper/mcp_mixing_lib.lua +1021 -0
- package/reaper/mcp_plan_lib.lua +801 -0
- package/reaper/mcp_prefs_lib.lua +127 -0
- package/reaper/mcp_project_lib.lua +1088 -0
- package/reaper/mcp_recording_lib.lua +595 -0
- package/reaper/mcp_render_lib.lua +492 -0
- package/reaper/mcp_snapshot_lib.lua +547 -120
- package/reaper/mcp_snapshot_next.lua +10 -4
- package/reaper/mcp_snapshot_prev.lua +11 -4
- package/reaper/mcp_snapshot_quick_save.lua +7 -32
- package/reaper/mcp_snapshots_ui_lib.lua +258 -0
- package/reaper/mcp_tracks_lib.lua +409 -0
- package/sidecar/analysis.py +661 -0
- package/sidecar/chords.py +96 -0
- package/sidecar/mixcheck.py +295 -0
- package/sidecar/requirements-chords.txt +6 -0
- package/sidecar/requirements-separation.txt +3 -0
- package/sidecar/requirements.txt +17 -0
- package/sidecar/separation.py +142 -0
- package/sidecar/server.py +622 -0
- package/sidecar/tests/test_analysis.py +249 -0
- package/sidecar/tests/test_chords.py +117 -0
- package/sidecar/tests/test_mixcheck.py +163 -0
- package/sidecar/tests/test_separation.py +73 -0
- package/sidecar/tests/test_server.py +464 -0
- package/sidecar/tests/test_verify.py +243 -0
- package/sidecar/tests/test_voice_render.py +268 -0
- package/sidecar/tests/test_voice_sketch.py +140 -0
- package/sidecar/verify.py +224 -0
- package/sidecar/voice_render.py +295 -0
- package/sidecar/voice_sketch.py +280 -0
- package/claude-agents/critique.md +0 -147
- package/claude-agents/editor.md +0 -184
- package/claude-agents/levels.md +0 -107
- package/claude-agents/mastering.md +0 -129
- package/claude-agents/mixer.md +0 -248
- package/claude-agents/preflight.md +0 -149
- package/claude-agents/producer.md +0 -159
- package/claude-agents/setup.md +0 -150
- package/claude-agents/stems.md +0 -135
- package/claude-rules/architecture.md +0 -39
- package/claude-rules/development.md +0 -54
- package/claude-rules/lua-bridge.md +0 -50
- package/claude-rules/testing.md +0 -42
- package/claude-skills/learn-plugin.md +0 -123
- package/knowledge/CLAUDE.md +0 -71
- package/knowledge/plugins/_template.md +0 -82
- package/knowledge/plugins/fabfilter/pro-c-2.md +0 -117
- package/knowledge/plugins/fabfilter/pro-l-2.md +0 -95
- package/knowledge/plugins/fabfilter/pro-q-3.md +0 -112
- package/knowledge/plugins/neural-dsp/helix-native.md +0 -104
- package/knowledge/plugins/stock-reaper/js-1175-compressor.md +0 -94
- package/knowledge/plugins/stock-reaper/rea-comp.md +0 -100
- package/knowledge/plugins/stock-reaper/rea-delay.md +0 -95
- package/knowledge/plugins/stock-reaper/rea-eq.md +0 -103
- package/knowledge/plugins/stock-reaper/rea-gate.md +0 -99
- package/knowledge/plugins/stock-reaper/rea-limit.md +0 -75
- package/knowledge/plugins/stock-reaper/rea-verb.md +0 -76
- package/knowledge/reference/perceived-loudness.md +0 -122
- package/reaper/mcp_snapshot_manager.lua +0 -1001
- /package/{knowledge → claude/knowledge}/genres/_template.md +0 -0
- /package/{knowledge → claude/knowledge}/genres/electronic.md +0 -0
- /package/{knowledge → claude/knowledge}/genres/hip-hop.md +0 -0
- /package/{knowledge → claude/knowledge}/genres/metal.md +0 -0
- /package/{knowledge → claude/knowledge}/genres/orchestral.md +0 -0
- /package/{knowledge → claude/knowledge}/genres/pop.md +0 -0
- /package/{knowledge → claude/knowledge}/genres/rock.md +0 -0
- /package/{knowledge → claude/knowledge}/reference/compression.md +0 -0
- /package/{knowledge → claude/knowledge}/reference/frequencies.md +0 -0
- /package/{knowledge → claude/knowledge}/workflows/delivery.md +0 -0
- /package/{knowledge → claude/knowledge}/workflows/drum-bus.md +0 -0
- /package/{knowledge → claude/knowledge}/workflows/low-end.md +0 -0
- /package/{knowledge → claude/knowledge}/workflows/stem-prep.md +0 -0
- /package/{knowledge → claude/knowledge}/workflows/vocal-chain.md +0 -0
package/README.md
CHANGED
|
@@ -1,593 +1,42 @@
|
|
|
1
1
|
# reaper-mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Type what you hear. An AI mix engineer inside your REAPER session measures it, decides and makes the change live.**
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
"Please gain stage my tracks"
|
|
7
|
-
"The chorus needs more energy — make the vocals cut through"
|
|
8
|
-
"I hear some low-end rumble, can you fix that?"
|
|
9
|
-
"Roast my mix — what could be improved?"
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Quick Start
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
# Interactive guided setup (recommended)
|
|
16
|
-
npx @mthines/reaper-mcp init
|
|
17
|
-
|
|
18
|
-
# Or non-interactive — install everything with defaults
|
|
19
|
-
npx @mthines/reaper-mcp init --yes
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
The `init` wizard walks you through:
|
|
23
|
-
1. Installing the REAPER bridge (Lua + JSFX analyzers)
|
|
24
|
-
2. Installing AI mix knowledge and agents
|
|
25
|
-
3. Configuring Claude Code settings (auto-allows all 80 REAPER tools)
|
|
26
|
-
4. Optionally creating a project-local `.mcp.json`
|
|
27
|
-
|
|
28
|
-
Then load `mcp_bridge.lua` in REAPER and open Claude Code — you're ready to mix.
|
|
29
|
-
|
|
30
|
-
## What it does
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
Claude Code
|
|
34
|
-
├── MCP Tools (80) ──→ controls REAPER in real-time
|
|
35
|
-
│ ├── Track management (list, get/set properties, arm, phase, input)
|
|
36
|
-
│ ├── FX management (add/remove, get/set parameters, enable/offline, presets)
|
|
37
|
-
│ ├── Transport (play, stop, record, cursor position)
|
|
38
|
-
│ ├── Metering (peak/RMS, FFT spectrum, LUFS, correlation, crest factor)
|
|
39
|
-
│ ├── Selection (selected tracks, time selection)
|
|
40
|
-
│ ├── Markers & regions (list, add, delete)
|
|
41
|
-
│ ├── Tempo map (all tempo/time sig changes)
|
|
42
|
-
│ ├── Envelopes (list, read/write automation points)
|
|
43
|
-
│ ├── MIDI editing (14 tools: notes, CC, items, analysis, batch ops)
|
|
44
|
-
│ ├── Media items (11 tools: properties, split, move, trim, stretch)
|
|
45
|
-
│ ├── Plugin discovery (list installed FX, search, presets)
|
|
46
|
-
│ ├── Snapshots (save/restore/delete mixer state for A/B comparison)
|
|
47
|
-
│ └── Routing (sends, receives, bus structure)
|
|
48
|
-
│
|
|
49
|
-
└── Mix Engineer Knowledge ──→ knows HOW to use those tools
|
|
50
|
-
├── Plugin knowledge (ReaEQ, Pro-Q 3, Helix Native, etc.)
|
|
51
|
-
├── Genre rules (rock, pop, hip-hop, electronic, orchestral, metal)
|
|
52
|
-
├── Workflows (gain staging, vocal chain, drum bus, mastering)
|
|
53
|
-
└── Reference (frequencies, compression, LUFS targets, perceived loudness, common mistakes)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Architecture
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
Claude Code ←stdio→ MCP Server (TypeScript) ←JSON files→ Lua Bridge (REAPER)
|
|
60
|
-
│
|
|
61
|
-
ReaScript API ←─┘
|
|
62
|
-
gmem[] shared memory ←── JSFX Analyzers
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
REAPER's scripting environment is sandboxed — no sockets, no HTTP. The Lua bridge runs inside REAPER via `reaper.defer()` at ~30ms intervals, polling a shared directory for JSON command/response files. Round-trip latency: ~50-150ms.
|
|
66
|
-
|
|
67
|
-
## Installation
|
|
68
|
-
|
|
69
|
-
### Prerequisites
|
|
70
|
-
|
|
71
|
-
- [REAPER](https://www.reaper.fm/) v6.0+ (v7.0+ recommended)
|
|
72
|
-
- [Node.js](https://nodejs.org/) 20+
|
|
73
|
-
- [SWS Extensions](https://www.sws-extension.org/) (recommended — enables plugin discovery and enhanced features)
|
|
74
|
-
|
|
75
|
-
### Option A: Interactive Setup (recommended)
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npx @mthines/reaper-mcp init
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
The wizard guides you through selecting which components to install:
|
|
82
|
-
- **REAPER Bridge** — Lua bridge + JSFX analyzers (copied to your REAPER resource folder)
|
|
83
|
-
- **AI Skills & Agents** — knowledge base, mix agents, rules, skills (global or project-local)
|
|
84
|
-
- **Claude Code Settings** — auto-allows all 80 REAPER tools (no permission prompts)
|
|
85
|
-
- **Project Config** — `.mcp.json` for the current directory (opt-in)
|
|
86
|
-
|
|
87
|
-
For CI/automation, use `--yes` to skip prompts and install everything with defaults:
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
npx @mthines/reaper-mcp init --yes # bridge + global skills + settings
|
|
91
|
-
npx @mthines/reaper-mcp init --yes --project # also creates .mcp.json in current directory
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Option B: Manual Steps
|
|
95
|
-
|
|
96
|
-
If you prefer to run each step individually:
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
# 1. Install REAPER components (Lua bridge + JSFX analyzers)
|
|
100
|
-
npx @mthines/reaper-mcp setup
|
|
101
|
-
|
|
102
|
-
# 2. Install AI mix knowledge (globally by default, or --project for local)
|
|
103
|
-
npx @mthines/reaper-mcp install-skills
|
|
104
|
-
npx @mthines/reaper-mcp install-skills --project # project-local alternative
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
**What gets installed:**
|
|
108
|
-
|
|
109
|
-
The `setup` command copies into your REAPER resource folder:
|
|
110
|
-
- `mcp_bridge.lua` — persistent Lua bridge script
|
|
111
|
-
- `mcp_snapshot_manager.lua` — snapshot manager GUI (save/restore/delete from REAPER)
|
|
112
|
-
- `mcp_analyzer.jsfx` — FFT spectrum analyzer
|
|
113
|
-
- `mcp_lufs_meter.jsfx` — ITU-R BS.1770 LUFS meter
|
|
114
|
-
- `mcp_correlation_meter.jsfx` — stereo correlation analyzer
|
|
115
|
-
- `mcp_crest_factor.jsfx` — dynamics/crest factor meter
|
|
116
|
-
|
|
117
|
-
The `install-skills` command installs to `~/.claude/` (global, default) or `.claude/` (project):
|
|
118
|
-
- `agents/` — mix engineer subagents (`@mix-engineer`, `@gain-stage`, `@mix-analyzer`, `@master`)
|
|
119
|
-
- `rules/` — architecture and development rules
|
|
120
|
-
- `skills/` — skills like `/learn-plugin`
|
|
121
|
-
- `knowledge/` — plugin knowledge, genre rules, workflows, reference data
|
|
122
|
-
|
|
123
|
-
### Start the Lua Bridge in REAPER
|
|
124
|
-
|
|
125
|
-
After setup (either option), load the bridge in REAPER:
|
|
126
|
-
|
|
127
|
-
1. Open REAPER
|
|
128
|
-
2. **Actions > Show action list > Load ReaScript**
|
|
129
|
-
3. Select `mcp_bridge.lua` from your REAPER Scripts folder
|
|
130
|
-
4. Click **Run** — the bridge runs persistently in the background
|
|
131
|
-
|
|
132
|
-
You should see in REAPER's console: `MCP Bridge: Started`
|
|
133
|
-
|
|
134
|
-
### Verify
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
npx @mthines/reaper-mcp doctor
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
Checks that the bridge is connected, knowledge is installed, and MCP config exists.
|
|
141
|
-
|
|
142
|
-
## MCP Tools (80)
|
|
143
|
-
|
|
144
|
-
### Project & Tracks
|
|
145
|
-
|
|
146
|
-
| Tool | Description |
|
|
147
|
-
|------|-------------|
|
|
148
|
-
| `get_project_info` | Project name, tempo, time sig, sample rate, transport state |
|
|
149
|
-
| `list_tracks` | All tracks with volume, pan, mute/solo, arm, phase, FX count, routing |
|
|
150
|
-
| `get_track_properties` | Detailed track info + full FX chain list |
|
|
151
|
-
| `set_track_property` | Set volume (dB), pan, mute, solo, recordArm, phase, input |
|
|
152
|
-
|
|
153
|
-
### FX Management
|
|
154
|
-
|
|
155
|
-
| Tool | Description |
|
|
156
|
-
|------|-------------|
|
|
157
|
-
| `add_fx` | Add FX by name (partial match: "ReaEQ", "Pro-Q 3") |
|
|
158
|
-
| `remove_fx` | Remove FX from chain by index |
|
|
159
|
-
| `get_fx_parameters` | List all FX params with values and ranges |
|
|
160
|
-
| `set_fx_parameter` | Set FX parameter (normalized 0.0-1.0) |
|
|
161
|
-
| `set_fx_enabled` | Enable or disable (bypass) an FX plugin |
|
|
162
|
-
| `set_fx_offline` | Set FX online/offline (offline = no CPU, preserves settings) |
|
|
163
|
-
| `list_available_fx` | Discover all installed plugins (VST, VST3, JS, CLAP, AU) |
|
|
164
|
-
| `search_fx` | Fuzzy search installed plugins by name |
|
|
165
|
-
| `get_fx_preset_list` | List available presets for an FX |
|
|
166
|
-
| `set_fx_preset` | Load a preset by name |
|
|
167
|
-
|
|
168
|
-
### Transport
|
|
169
|
-
|
|
170
|
-
| Tool | Description |
|
|
171
|
-
|------|-------------|
|
|
172
|
-
| `play` | Start playback |
|
|
173
|
-
| `stop` | Stop playback/recording |
|
|
174
|
-
| `record` | Start recording |
|
|
175
|
-
| `get_transport_state` | Play/record/pause, cursor positions, tempo, time sig |
|
|
176
|
-
| `set_cursor_position` | Move edit cursor to position (seconds) |
|
|
177
|
-
|
|
178
|
-
### Selection & Navigation
|
|
179
|
-
|
|
180
|
-
| Tool | Description |
|
|
181
|
-
|------|-------------|
|
|
182
|
-
| `get_selected_tracks` | Currently selected tracks with indices and names |
|
|
183
|
-
| `get_time_selection` | Time/loop selection start, end, length |
|
|
184
|
-
| `set_time_selection` | Set the time selection range |
|
|
185
|
-
|
|
186
|
-
### Markers & Regions
|
|
187
|
-
|
|
188
|
-
| Tool | Description |
|
|
189
|
-
|------|-------------|
|
|
190
|
-
| `list_markers` | All project markers (index, name, position, color) |
|
|
191
|
-
| `list_regions` | All regions (index, name, start/end, color) |
|
|
192
|
-
| `add_marker` | Add marker at position with optional name/color |
|
|
193
|
-
| `add_region` | Add region with start/end, optional name/color |
|
|
194
|
-
| `delete_marker` | Delete a marker by index |
|
|
195
|
-
| `delete_region` | Delete a region by index |
|
|
196
|
-
|
|
197
|
-
### Tempo Map
|
|
198
|
-
|
|
199
|
-
| Tool | Description |
|
|
200
|
-
|------|-------------|
|
|
201
|
-
| `get_tempo_map` | All tempo/time sig changes (position, BPM, time sig, linear) |
|
|
202
|
-
|
|
203
|
-
### Envelopes / Automation
|
|
204
|
-
|
|
205
|
-
| Tool | Description |
|
|
206
|
-
|------|-------------|
|
|
207
|
-
| `get_track_envelopes` | List envelopes on a track (name, point count, active/visible/armed) |
|
|
208
|
-
| `get_envelope_points` | Get automation points with pagination |
|
|
209
|
-
| `insert_envelope_point` | Insert automation point (time, value, shape, tension) |
|
|
210
|
-
| `delete_envelope_point` | Delete an automation point by index |
|
|
211
|
-
|
|
212
|
-
### Metering & Analysis
|
|
213
|
-
|
|
214
|
-
| Tool | Description |
|
|
215
|
-
|------|-------------|
|
|
216
|
-
| `read_track_meters` | Peak/RMS L/R in dB |
|
|
217
|
-
| `read_track_spectrum` | FFT frequency bins (auto-inserts analyzer) |
|
|
218
|
-
| `read_track_lufs` | Integrated/short-term/momentary LUFS + true peak |
|
|
219
|
-
| `read_track_correlation` | Stereo correlation, width, mid/side levels |
|
|
220
|
-
| `read_track_crest` | Crest factor (peak-to-RMS ratio) |
|
|
221
|
-
|
|
222
|
-
### MIDI Editing (14 tools)
|
|
223
|
-
|
|
224
|
-
| Tool | Description |
|
|
225
|
-
|------|-------------|
|
|
226
|
-
| `create_midi_item` | Create empty MIDI item on a track |
|
|
227
|
-
| `list_midi_items` | List MIDI items with position, length, note/CC counts |
|
|
228
|
-
| `get_midi_notes` | Get notes with pagination (offset/limit) |
|
|
229
|
-
| `analyze_midi` | Per-pitch velocity stats, histogram, machine gun detection |
|
|
230
|
-
| `insert_midi_note` / `insert_midi_notes` | Insert single or batch notes |
|
|
231
|
-
| `edit_midi_note` / `edit_midi_notes` | Edit single or batch notes |
|
|
232
|
-
| `delete_midi_note` | Delete a note by index |
|
|
233
|
-
| `get_midi_cc` / `insert_midi_cc` / `delete_midi_cc` | CC event management |
|
|
234
|
-
| `get_midi_item_properties` / `set_midi_item_properties` | MIDI item props |
|
|
235
|
-
|
|
236
|
-
### Media Item Editing (11 tools)
|
|
237
|
-
|
|
238
|
-
| Tool | Description |
|
|
239
|
-
|------|-------------|
|
|
240
|
-
| `list_media_items` | List items on a track (position, length, name, volume, type) |
|
|
241
|
-
| `get_media_item_properties` | Detailed properties (fades, play rate, pitch, source) |
|
|
242
|
-
| `set_media_item_properties` / `set_media_items_properties` | Set single or batch |
|
|
243
|
-
| `split_media_item` | Split at position, returns left/right info |
|
|
244
|
-
| `delete_media_item` / `move_media_item` / `trim_media_item` | Edit operations |
|
|
245
|
-
| `add_stretch_marker` / `get_stretch_markers` / `delete_stretch_marker` | Time-stretching |
|
|
246
|
-
|
|
247
|
-
### Snapshots (A/B Testing)
|
|
248
|
-
|
|
249
|
-
Snapshots capture your full mixer state: track volumes, pans, mute/solo, FX chains (all parameter values, enabled/offline states, presets), and send levels. Use them to A/B compare mix decisions or revert to a known-good state.
|
|
250
|
-
|
|
251
|
-
| Tool | Description |
|
|
252
|
-
|------|-------------|
|
|
253
|
-
| `snapshot_save` | Save current mixer state (volumes, pans, FX params, sends, mutes) |
|
|
254
|
-
| `snapshot_restore` | Restore a saved snapshot (smart FX matching — only restores params if plugin names match) |
|
|
255
|
-
| `snapshot_list` | List all saved snapshots with metadata |
|
|
256
|
-
| `snapshot_delete` | Delete a saved snapshot by name |
|
|
5
|
+
reaper-mcp connects Claude Code to a running REAPER session: tracks, FX, metering, MIDI, automation, rendering and more, plus mix skills (`/mixer`, `/critique`, `/mastering`, `/editing`, `/learn-plugin`) that know your plugins and genres.
|
|
257
6
|
|
|
258
|
-
|
|
7
|
+
## Install
|
|
259
8
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
| Script | Purpose | Suggested Key |
|
|
263
|
-
|--------|---------|---------------|
|
|
264
|
-
| `mcp_snapshot_quick_save.lua` | Save snapshot instantly (auto-named) | `Ctrl+Shift+S` |
|
|
265
|
-
| `mcp_snapshot_next.lua` | Restore next snapshot (wraps around) | `Ctrl+Right` |
|
|
266
|
-
| `mcp_snapshot_prev.lua` | Restore previous snapshot (wraps around) | `Ctrl+Left` |
|
|
267
|
-
|
|
268
|
-
### Routing
|
|
269
|
-
|
|
270
|
-
| Tool | Description |
|
|
271
|
-
|------|-------------|
|
|
272
|
-
| `get_track_routing` | Sends, receives, parent/folder info for a track |
|
|
273
|
-
|
|
274
|
-
## Using the Mix Agents
|
|
275
|
-
|
|
276
|
-
Once you've run `init` (or `setup` + `install-skills`), open Claude Code. Four specialized mix agents are available:
|
|
277
|
-
|
|
278
|
-
### Available Agents
|
|
279
|
-
|
|
280
|
-
| Agent | Invocation | What it does |
|
|
281
|
-
| ---------------- | --------------- | ------------------------------------------------------------------------- |
|
|
282
|
-
| **Mix Engineer** | `@mix-engineer` | General-purpose mix agent — analyzes, suggests, and executes any mix task |
|
|
283
|
-
| **Gain Stage** | `@gain-stage` | Perceived-loudness-aware gain staging with proper headroom |
|
|
284
|
-
| **Mix Analyzer** | `@mix-analyzer` | "Roast my mix" — analysis only, no changes, produces detailed report |
|
|
285
|
-
| **Master** | `@master` | Mastering chain targeting specific LUFS/platform standards |
|
|
286
|
-
|
|
287
|
-
### How to use them
|
|
288
|
-
|
|
289
|
-
Just mention the agent by name in Claude Code:
|
|
290
|
-
|
|
291
|
-
```
|
|
292
|
-
@mix-engineer Please gain stage all my tracks
|
|
293
|
-
@mix-engineer Build a vocal chain on track 3
|
|
294
|
-
@mix-engineer The low end is muddy — can you fix it?
|
|
295
|
-
@mix-analyzer Roast my mix — what could be improved?
|
|
296
|
-
@master Master this for Spotify
|
|
297
|
-
@gain-stage Set proper levels on everything
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
Or start a full session as the mix engineer:
|
|
301
|
-
|
|
302
|
-
```bash
|
|
303
|
-
claude --agent mix-engineer
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
### What happens under the hood
|
|
307
|
-
|
|
308
|
-
Each agent has:
|
|
309
|
-
|
|
310
|
-
- **Its own system prompt** — thinks like a mix engineer, not a general assistant
|
|
311
|
-
- **Pre-approved REAPER tools** — no permission prompts for every MCP call
|
|
312
|
-
- **Scoped MCP access** — only the `reaper` MCP server is loaded
|
|
313
|
-
- **Embedded reference data** — frequency bands, LUFS targets, compression settings
|
|
314
|
-
|
|
315
|
-
The workflow is always:
|
|
316
|
-
|
|
317
|
-
1. **Save a snapshot** (so you can always A/B or undo)
|
|
318
|
-
2. **Analyze** — read meters, spectrum, LUFS, correlation, crest factor
|
|
319
|
-
3. **Reason** — apply genre rules, frequency knowledge, and plugin expertise
|
|
320
|
-
4. **Act** — add FX, set parameters, adjust levels using the best available plugins
|
|
321
|
-
5. **Verify** — re-read meters to confirm the change had the intended effect
|
|
322
|
-
6. **Report** — explain what it did and why in audio engineering terms
|
|
323
|
-
|
|
324
|
-
### A/B Comparison
|
|
325
|
-
|
|
326
|
-
Every change is bracketed by snapshots:
|
|
327
|
-
|
|
328
|
-
1. Agent saves a "Before" snapshot automatically
|
|
329
|
-
2. Makes all changes
|
|
330
|
-
3. Saves an "After" snapshot
|
|
331
|
-
4. You can restore either with `snapshot_restore` to A/B compare, or use the Snapshot Manager GUI in REAPER
|
|
332
|
-
|
|
333
|
-
### Genre Awareness
|
|
334
|
-
|
|
335
|
-
Tell the agent the genre and it adjusts its approach:
|
|
336
|
-
|
|
337
|
-
```
|
|
338
|
-
@mix-engineer This is a hip-hop track — please gain stage and check the 808
|
|
339
|
-
@mix-engineer Mix this rock song — make sure the guitars are wide and the drums punch
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
The agent reads `knowledge/genres/{genre}.md` for genre-specific conventions.
|
|
343
|
-
|
|
344
|
-
## AI Mix Engineer Knowledge
|
|
345
|
-
|
|
346
|
-
The knowledge base is what makes this more than just a remote control — it's a mix engineer's brain.
|
|
347
|
-
|
|
348
|
-
### Plugin Knowledge
|
|
349
|
-
|
|
350
|
-
Ships with knowledge for stock REAPER plugins and popular third-party suites:
|
|
351
|
-
|
|
352
|
-
| Plugin | Category | Preference |
|
|
353
|
-
| ---------------------------------------------------- | ----------------------- | ---------- |
|
|
354
|
-
| ReaEQ, ReaComp, ReaDelay, ReaVerb, ReaGate, ReaLimit | Stock | 30-50 |
|
|
355
|
-
| FabFilter Pro-Q 3, Pro-C 2, Pro-L 2 | Premium EQ/Comp/Limiter | 85-92 |
|
|
356
|
-
| Line 6 Helix Native | Amp Sim | 82 |
|
|
357
|
-
| JS: 1175 Compressor | Character Comp | 50 |
|
|
358
|
-
|
|
359
|
-
The agent automatically discovers your installed plugins and uses the best available option for each task. If you have Pro-Q 3, it uses that. If not, it falls back to ReaEQ.
|
|
360
|
-
|
|
361
|
-
### Adding Your Own Plugins
|
|
362
|
-
|
|
363
|
-
Use the `/learn-plugin` skill in Claude Code:
|
|
364
|
-
|
|
365
|
-
```
|
|
366
|
-
You: /learn-plugin
|
|
367
|
-
Claude: What plugin would you like me to learn about?
|
|
368
|
-
You: JST Gain Reduction Deluxe — it's a VCA compressor from Joey Sturgis Tones
|
|
369
|
-
Claude: [asks about parameters, presets, usage]
|
|
370
|
-
Claude: Created knowledge/plugins/jst/gain-reduction-deluxe.md
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
Or manually add a markdown file to `knowledge/plugins/`. See `knowledge/plugins/_template.md` for the format.
|
|
374
|
-
|
|
375
|
-
### Genre Rules
|
|
376
|
-
|
|
377
|
-
Processing decisions adapt to the genre:
|
|
378
|
-
|
|
379
|
-
| Genre | LUFS Target | Key Characteristics |
|
|
380
|
-
| ---------- | ----------- | ----------------------------------------------- |
|
|
381
|
-
| Rock | -11 to -9 | Parallel drum compression, hard-panned guitars |
|
|
382
|
-
| Pop | -14 to -10 | Vocal-forward, two-stage compression, bus glue |
|
|
383
|
-
| Hip-Hop | -10 to -7 | 808 saturation, aggressive vocal comp, mono sub |
|
|
384
|
-
| Electronic | -10 to -6 | Sidechain pump, sub mono, stereo width |
|
|
385
|
-
| Orchestral | -23 to -16 | Preserve dynamics, hall reverb staging |
|
|
386
|
-
| Metal | -11 to -8 | V-scoop guitars, tight drums, 4-guitar wall |
|
|
387
|
-
|
|
388
|
-
## Autonomous Mode (Allow All Tools)
|
|
389
|
-
|
|
390
|
-
By default Claude Code asks permission for each MCP tool call. The `init` command (and `install-skills`) automatically configures `settings.json` to allow all 80 REAPER tools. If you need to set this up manually, add to your project's `.claude/settings.json` (or `~/.claude/settings.json` for global):
|
|
391
|
-
|
|
392
|
-
```json
|
|
393
|
-
{
|
|
394
|
-
"permissions": {
|
|
395
|
-
"allow": [
|
|
396
|
-
"mcp__reaper__get_project_info",
|
|
397
|
-
"mcp__reaper__list_tracks",
|
|
398
|
-
"mcp__reaper__get_track_properties",
|
|
399
|
-
"mcp__reaper__set_track_property",
|
|
400
|
-
"mcp__reaper__add_fx",
|
|
401
|
-
"mcp__reaper__remove_fx",
|
|
402
|
-
"mcp__reaper__get_fx_parameters",
|
|
403
|
-
"mcp__reaper__set_fx_parameter",
|
|
404
|
-
"mcp__reaper__list_available_fx",
|
|
405
|
-
"mcp__reaper__search_fx",
|
|
406
|
-
"mcp__reaper__get_fx_preset_list",
|
|
407
|
-
"mcp__reaper__set_fx_preset",
|
|
408
|
-
"mcp__reaper__play",
|
|
409
|
-
"mcp__reaper__stop",
|
|
410
|
-
"mcp__reaper__record",
|
|
411
|
-
"mcp__reaper__get_transport_state",
|
|
412
|
-
"mcp__reaper__set_cursor_position",
|
|
413
|
-
"mcp__reaper__read_track_meters",
|
|
414
|
-
"mcp__reaper__read_track_spectrum",
|
|
415
|
-
"mcp__reaper__read_track_lufs",
|
|
416
|
-
"mcp__reaper__read_track_correlation",
|
|
417
|
-
"mcp__reaper__read_track_crest",
|
|
418
|
-
"mcp__reaper__snapshot_save",
|
|
419
|
-
"mcp__reaper__snapshot_restore",
|
|
420
|
-
"mcp__reaper__snapshot_list",
|
|
421
|
-
"mcp__reaper__snapshot_delete",
|
|
422
|
-
"mcp__reaper__get_track_routing",
|
|
423
|
-
"mcp__reaper__set_fx_enabled",
|
|
424
|
-
"mcp__reaper__set_fx_offline",
|
|
425
|
-
"mcp__reaper__get_selected_tracks",
|
|
426
|
-
"mcp__reaper__get_time_selection",
|
|
427
|
-
"mcp__reaper__set_time_selection",
|
|
428
|
-
"mcp__reaper__list_markers",
|
|
429
|
-
"mcp__reaper__list_regions",
|
|
430
|
-
"mcp__reaper__add_marker",
|
|
431
|
-
"mcp__reaper__add_region",
|
|
432
|
-
"mcp__reaper__delete_marker",
|
|
433
|
-
"mcp__reaper__delete_region",
|
|
434
|
-
"mcp__reaper__get_tempo_map",
|
|
435
|
-
"mcp__reaper__get_track_envelopes",
|
|
436
|
-
"mcp__reaper__get_envelope_points",
|
|
437
|
-
"mcp__reaper__insert_envelope_point",
|
|
438
|
-
"mcp__reaper__delete_envelope_point",
|
|
439
|
-
"mcp__reaper__create_midi_item",
|
|
440
|
-
"mcp__reaper__list_midi_items",
|
|
441
|
-
"mcp__reaper__get_midi_notes",
|
|
442
|
-
"mcp__reaper__analyze_midi",
|
|
443
|
-
"mcp__reaper__insert_midi_note",
|
|
444
|
-
"mcp__reaper__insert_midi_notes",
|
|
445
|
-
"mcp__reaper__edit_midi_note",
|
|
446
|
-
"mcp__reaper__edit_midi_notes",
|
|
447
|
-
"mcp__reaper__delete_midi_note",
|
|
448
|
-
"mcp__reaper__get_midi_cc",
|
|
449
|
-
"mcp__reaper__insert_midi_cc",
|
|
450
|
-
"mcp__reaper__delete_midi_cc",
|
|
451
|
-
"mcp__reaper__get_midi_item_properties",
|
|
452
|
-
"mcp__reaper__set_midi_item_properties",
|
|
453
|
-
"mcp__reaper__list_media_items",
|
|
454
|
-
"mcp__reaper__get_media_item_properties",
|
|
455
|
-
"mcp__reaper__set_media_item_properties",
|
|
456
|
-
"mcp__reaper__set_media_items_properties",
|
|
457
|
-
"mcp__reaper__split_media_item",
|
|
458
|
-
"mcp__reaper__delete_media_item",
|
|
459
|
-
"mcp__reaper__move_media_item",
|
|
460
|
-
"mcp__reaper__trim_media_item",
|
|
461
|
-
"mcp__reaper__add_stretch_marker",
|
|
462
|
-
"mcp__reaper__get_stretch_markers",
|
|
463
|
-
"mcp__reaper__delete_stretch_marker"
|
|
464
|
-
]
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
The format is `mcp__reaper__{tool_name}`. Once added, Claude Code will run these tools without prompting.
|
|
470
|
-
|
|
471
|
-
## CLI Commands
|
|
472
|
-
|
|
473
|
-
| Command | Description |
|
|
474
|
-
|---------|-------------|
|
|
475
|
-
| `npx @mthines/reaper-mcp init` | Interactive guided setup (recommended for new users) |
|
|
476
|
-
| `npx @mthines/reaper-mcp init --yes` | Non-interactive setup — install everything with defaults |
|
|
477
|
-
| `npx @mthines/reaper-mcp init --yes --project` | Non-interactive setup + create `.mcp.json` in current directory |
|
|
478
|
-
| `npx @mthines/reaper-mcp serve` | Start MCP server in stdio mode (default when no command given) |
|
|
479
|
-
| `npx @mthines/reaper-mcp setup` | Install Lua bridge + JSFX into REAPER |
|
|
480
|
-
| `npx @mthines/reaper-mcp install-skills` | Install AI knowledge + agents globally |
|
|
481
|
-
| `npx @mthines/reaper-mcp install-skills --project` | Install into current project directory |
|
|
482
|
-
| `npx @mthines/reaper-mcp doctor` | Verify everything is configured correctly |
|
|
483
|
-
| `npx @mthines/reaper-mcp status` | Check bridge connection |
|
|
484
|
-
|
|
485
|
-
Or install globally for shorter commands:
|
|
9
|
+
You need [REAPER](https://www.reaper.fm/) (v6+), [Claude Code](https://claude.com/claude-code) and [Node.js 20+](https://nodejs.org/). In a terminal:
|
|
486
10
|
|
|
487
11
|
```bash
|
|
488
12
|
npm install -g @mthines/reaper-mcp
|
|
489
|
-
reaper-mcp
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
## Claude Code Integration
|
|
493
|
-
|
|
494
|
-
After `install-skills --project`, your project has a `.mcp.json`:
|
|
495
|
-
|
|
496
|
-
```json
|
|
497
|
-
{
|
|
498
|
-
"mcpServers": {
|
|
499
|
-
"reaper": {
|
|
500
|
-
"command": "npx",
|
|
501
|
-
"args": ["@mthines/reaper-mcp", "serve"]
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
}
|
|
13
|
+
reaper-mcp setup # installs the bridge and status page into REAPER
|
|
14
|
+
reaper-mcp init # connects Claude Code and adds the mix skills
|
|
505
15
|
```
|
|
506
16
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
### Running from source (development)
|
|
510
|
-
|
|
511
|
-
If you're developing reaper-mcp and want changes reflected immediately without rebuilding, point your `.mcp.json` at the TypeScript source using `npx tsx`:
|
|
512
|
-
|
|
513
|
-
```json
|
|
514
|
-
{
|
|
515
|
-
"mcpServers": {
|
|
516
|
-
"reaper": {
|
|
517
|
-
"command": "npx",
|
|
518
|
-
"args": ["tsx", "/path/to/reaper-mcp/apps/reaper-mcp-server/src/main.ts", "serve"]
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
```
|
|
523
|
-
|
|
524
|
-
See [DEVELOPMENT.md](DEVELOPMENT.md) for the full dev workflow.
|
|
525
|
-
|
|
526
|
-
## Environment Variables
|
|
17
|
+
Then, in REAPER: **Actions → Show action list → Load ReaScript…**, pick `mcp_bridge.lua` and click **Run**.
|
|
527
18
|
|
|
528
|
-
|
|
529
|
-
| ---------------------- | ---------------------------------- | -------------------- |
|
|
530
|
-
| `REAPER_RESOURCE_PATH` | Override REAPER resource directory | Auto-detected per OS |
|
|
531
|
-
|
|
532
|
-
Platform defaults:
|
|
533
|
-
|
|
534
|
-
- **macOS**: `~/Library/Application Support/REAPER`
|
|
535
|
-
- **Windows**: `%APPDATA%/REAPER`
|
|
536
|
-
- **Linux**: `~/.config/REAPER`
|
|
537
|
-
|
|
538
|
-
## Project Structure
|
|
19
|
+
Open Claude Code in any folder and try:
|
|
539
20
|
|
|
540
21
|
```
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
│ ├── reaper-mcp-server/ # MCP server (80 tools, esbuild bundle)
|
|
544
|
-
│ └── reaper-mix-agent/ # AI mix agent (knowledge loader, plugin resolver)
|
|
545
|
-
├── libs/protocol/ # Shared TypeScript types
|
|
546
|
-
├── knowledge/ # AI mix engineer knowledge base
|
|
547
|
-
│ ├── plugins/ # Plugin-specific knowledge (extensible)
|
|
548
|
-
│ ├── genres/ # Genre mixing conventions
|
|
549
|
-
│ ├── workflows/ # Step-by-step mixing workflows
|
|
550
|
-
│ └── reference/ # Frequency, compression, metering, perceived loudness cheat sheets
|
|
551
|
-
├── reaper/ # Files installed into REAPER
|
|
552
|
-
│ ├── mcp_bridge.lua # Persistent Lua bridge
|
|
553
|
-
│ ├── mcp_snapshot_manager.lua # Snapshot manager GUI (save/restore/delete)
|
|
554
|
-
│ ├── mcp_snapshot_*.lua # Snapshot action scripts (next/prev/quick-save + shared lib)
|
|
555
|
-
│ ├── mcp_analyzer.jsfx # FFT spectrum analyzer
|
|
556
|
-
│ ├── mcp_lufs_meter.jsfx # LUFS meter (BS.1770)
|
|
557
|
-
│ ├── mcp_correlation_meter.jsfx # Stereo correlation meter
|
|
558
|
-
│ └── mcp_crest_factor.jsfx # Crest factor meter
|
|
559
|
-
├── docs/TESTING.md # End-to-end testing guide
|
|
560
|
-
└── nx.json # Nx workspace config
|
|
22
|
+
/mixer Please gain stage my tracks
|
|
23
|
+
/critique Roast my mix
|
|
561
24
|
```
|
|
562
25
|
|
|
563
|
-
##
|
|
564
|
-
|
|
565
|
-
The MCP server (TypeScript) and the Lua bridge (REAPER) are two separate components. After updating to a new version — or after adding new tools during development — you need to reinstall the bridge files and reload the script in REAPER:
|
|
26
|
+
## Something off?
|
|
566
27
|
|
|
567
28
|
```bash
|
|
568
|
-
#
|
|
569
|
-
|
|
29
|
+
reaper-mcp doctor # checks every part and says how to fix it
|
|
30
|
+
reaper-mcp status # is the bridge running in REAPER?
|
|
570
31
|
```
|
|
571
32
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
1. **Stop** the running bridge: Actions > Running Scripts > stop `mcp_bridge.lua`
|
|
575
|
-
2. **Reload** the updated script: Actions > Load ReaScript > select `mcp_bridge.lua` > Run
|
|
33
|
+
## Optional extras
|
|
576
34
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
## Development
|
|
580
|
-
|
|
581
|
-
```bash
|
|
582
|
-
pnpm install
|
|
583
|
-
pnpm nx run-many --target=build # Build all
|
|
584
|
-
pnpm nx run-many --target=lint # Lint all
|
|
585
|
-
pnpm nx run-many --target=test # Test all (200+ tests)
|
|
586
|
-
pnpm nx run-many --target=build,lint,test # Everything
|
|
587
|
-
```
|
|
35
|
+
- **Memory that learns your plugins and corrections:** connect the free [LoreKit](https://lorekit.io). `/learn-plugin` walks you through it.
|
|
36
|
+
- **Audio analysis (loudness, masking, stems):** `reaper-mcp setup-sidecar` (needs Python 3.10+).
|
|
588
37
|
|
|
589
|
-
|
|
38
|
+
## More
|
|
590
39
|
|
|
591
|
-
|
|
40
|
+
The full tour, screenshots, what it can control and how it keeps your session safe are in the [project README](https://github.com/mthines/reaper-mcp#readme). Developers can also install from a clone: see [For developers](https://github.com/mthines/reaper-mcp#%EF%B8%8F-for-developers).
|
|
592
41
|
|
|
593
|
-
MIT
|
|
42
|
+
MIT licensed. Usage telemetry is pseudonymous and can be turned off with `reaper-mcp telemetry off`; details in [TELEMETRY.md](https://github.com/mthines/reaper-mcp/blob/main/TELEMETRY.md).
|