@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.
Files changed (116) hide show
  1. package/README.md +19 -570
  2. package/bridge-ui/mcp_bridge.html +129 -0
  3. package/bridge-ui/mcp_bridge.webmanifest +16 -0
  4. package/bridge-ui/mcp_bridge_icon_192.png +0 -0
  5. package/bridge-ui/mcp_bridge_icon_512.png +0 -0
  6. package/bridge-ui/mcp_bridge_sw.js +35 -0
  7. package/claude/agents/plugin-researcher.md +188 -0
  8. package/claude/knowledge/reference/aesthetics-scoring.md +48 -0
  9. package/{knowledge → claude/knowledge}/reference/common-mistakes.md +1 -1
  10. package/claude/knowledge/reference/lorekit-setup.md +36 -0
  11. package/claude/knowledge/reference/memory-protocol.md +377 -0
  12. package/{knowledge → claude/knowledge}/reference/metering.md +5 -5
  13. package/claude/knowledge/reference/perceived-loudness.md +182 -0
  14. package/{knowledge → claude/knowledge}/workflows/editing.md +4 -0
  15. package/{knowledge → claude/knowledge}/workflows/gain-staging.md +21 -23
  16. package/{knowledge → claude/knowledge}/workflows/learn-plugin.md +15 -48
  17. package/{knowledge → claude/knowledge}/workflows/master-bus.md +13 -1
  18. package/claude/knowledge/workflows/section-levels.md +138 -0
  19. package/{knowledge → claude/knowledge}/workflows/session-prep.md +4 -0
  20. package/claude/knowledge/workflows/transient-lighting.md +52 -0
  21. package/claude/skills/critique/SKILL.md +131 -0
  22. package/claude/skills/editing/SKILL.md +281 -0
  23. package/claude/skills/learn-plugin/SKILL.md +210 -0
  24. package/claude/skills/mastering/SKILL.md +151 -0
  25. package/claude/skills/mix-memory/SKILL.md +140 -0
  26. package/claude/skills/mixer/SKILL.md +253 -0
  27. package/claude/skills/new-extension/SKILL.md +324 -0
  28. package/main.js +7843 -1940
  29. package/package.json +17 -15
  30. package/reaper/CLAUDE.md +22 -4
  31. package/reaper/mcp_actions_lib.lua +375 -0
  32. package/reaper/mcp_analyzer.jsfx +27 -12
  33. package/reaper/mcp_arrange_lib.lua +949 -0
  34. package/reaper/mcp_bridge.lua +2321 -758
  35. package/reaper/mcp_edit_views_lib.lua +1378 -0
  36. package/reaper/mcp_envelopes_lib.lua +748 -0
  37. package/reaper/mcp_extensions_lib.lua +55 -0
  38. package/reaper/mcp_fxstate_lib.lua +144 -0
  39. package/reaper/mcp_gain_trace.jsfx +126 -0
  40. package/reaper/mcp_items_lib.lua +877 -0
  41. package/reaper/mcp_lufs_meter.jsfx +16 -13
  42. package/reaper/mcp_midi_lib.lua +555 -0
  43. package/reaper/mcp_mixing_lib.lua +1021 -0
  44. package/reaper/mcp_plan_lib.lua +801 -0
  45. package/reaper/mcp_prefs_lib.lua +127 -0
  46. package/reaper/mcp_project_lib.lua +1088 -0
  47. package/reaper/mcp_recording_lib.lua +595 -0
  48. package/reaper/mcp_render_lib.lua +492 -0
  49. package/reaper/mcp_snapshot_lib.lua +547 -120
  50. package/reaper/mcp_snapshot_next.lua +10 -4
  51. package/reaper/mcp_snapshot_prev.lua +11 -4
  52. package/reaper/mcp_snapshot_quick_save.lua +7 -32
  53. package/reaper/mcp_snapshots_ui_lib.lua +258 -0
  54. package/reaper/mcp_tracks_lib.lua +409 -0
  55. package/sidecar/analysis.py +661 -0
  56. package/sidecar/chords.py +96 -0
  57. package/sidecar/mixcheck.py +295 -0
  58. package/sidecar/requirements-chords.txt +6 -0
  59. package/sidecar/requirements-separation.txt +3 -0
  60. package/sidecar/requirements.txt +17 -0
  61. package/sidecar/separation.py +142 -0
  62. package/sidecar/server.py +622 -0
  63. package/sidecar/tests/test_analysis.py +249 -0
  64. package/sidecar/tests/test_chords.py +117 -0
  65. package/sidecar/tests/test_mixcheck.py +163 -0
  66. package/sidecar/tests/test_separation.py +73 -0
  67. package/sidecar/tests/test_server.py +464 -0
  68. package/sidecar/tests/test_verify.py +243 -0
  69. package/sidecar/tests/test_voice_render.py +268 -0
  70. package/sidecar/tests/test_voice_sketch.py +140 -0
  71. package/sidecar/verify.py +224 -0
  72. package/sidecar/voice_render.py +295 -0
  73. package/sidecar/voice_sketch.py +280 -0
  74. package/claude-agents/critique.md +0 -147
  75. package/claude-agents/editor.md +0 -184
  76. package/claude-agents/levels.md +0 -107
  77. package/claude-agents/mastering.md +0 -129
  78. package/claude-agents/mixer.md +0 -248
  79. package/claude-agents/preflight.md +0 -149
  80. package/claude-agents/producer.md +0 -159
  81. package/claude-agents/setup.md +0 -150
  82. package/claude-agents/stems.md +0 -135
  83. package/claude-rules/architecture.md +0 -39
  84. package/claude-rules/development.md +0 -54
  85. package/claude-rules/lua-bridge.md +0 -50
  86. package/claude-rules/testing.md +0 -42
  87. package/claude-skills/learn-plugin.md +0 -123
  88. package/knowledge/CLAUDE.md +0 -71
  89. package/knowledge/plugins/_template.md +0 -82
  90. package/knowledge/plugins/fabfilter/pro-c-2.md +0 -117
  91. package/knowledge/plugins/fabfilter/pro-l-2.md +0 -95
  92. package/knowledge/plugins/fabfilter/pro-q-3.md +0 -112
  93. package/knowledge/plugins/neural-dsp/helix-native.md +0 -104
  94. package/knowledge/plugins/stock-reaper/js-1175-compressor.md +0 -94
  95. package/knowledge/plugins/stock-reaper/rea-comp.md +0 -100
  96. package/knowledge/plugins/stock-reaper/rea-delay.md +0 -95
  97. package/knowledge/plugins/stock-reaper/rea-eq.md +0 -103
  98. package/knowledge/plugins/stock-reaper/rea-gate.md +0 -99
  99. package/knowledge/plugins/stock-reaper/rea-limit.md +0 -75
  100. package/knowledge/plugins/stock-reaper/rea-verb.md +0 -76
  101. package/knowledge/reference/perceived-loudness.md +0 -122
  102. package/reaper/mcp_snapshot_manager.lua +0 -1001
  103. /package/{knowledge → claude/knowledge}/genres/_template.md +0 -0
  104. /package/{knowledge → claude/knowledge}/genres/electronic.md +0 -0
  105. /package/{knowledge → claude/knowledge}/genres/hip-hop.md +0 -0
  106. /package/{knowledge → claude/knowledge}/genres/metal.md +0 -0
  107. /package/{knowledge → claude/knowledge}/genres/orchestral.md +0 -0
  108. /package/{knowledge → claude/knowledge}/genres/pop.md +0 -0
  109. /package/{knowledge → claude/knowledge}/genres/rock.md +0 -0
  110. /package/{knowledge → claude/knowledge}/reference/compression.md +0 -0
  111. /package/{knowledge → claude/knowledge}/reference/frequencies.md +0 -0
  112. /package/{knowledge → claude/knowledge}/workflows/delivery.md +0 -0
  113. /package/{knowledge → claude/knowledge}/workflows/drum-bus.md +0 -0
  114. /package/{knowledge → claude/knowledge}/workflows/low-end.md +0 -0
  115. /package/{knowledge → claude/knowledge}/workflows/stem-prep.md +0 -0
  116. /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
- AI-powered mixing for REAPER DAW. An MCP server that gives AI agents (Claude Code, etc.) full control over REAPER — real-time metering, FX management, transport control, frequency analysis, and an AI mix engineer knowledge base.
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
- You can also manage snapshots directly in REAPER using the **Snapshot Manager** GUI (`mcp_snapshot_manager.lua`) — load it as a ReaScript action for a visual list with save/restore/delete buttons.
7
+ ## Install
259
8
 
260
- For quick A/B testing, bind these action scripts to keyboard shortcuts in REAPER:
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 init
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
- Claude Code reads this automatically. Open Claude Code in your project and the REAPER tools are available.
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
- | Variable | Description | Default |
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
- reaper-mcp/
542
- ├── apps/
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
- ## Updating the Lua Bridge
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
- # Reinstall bridge files into REAPER
569
- npx @mthines/reaper-mcp setup
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
- Then in REAPER:
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
- If existing tools (like `get_project_info`) work but new tools fail or timeout, this is almost always because the Lua bridge needs to be updated and reloaded.
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
- See [DEVELOPMENT.md](DEVELOPMENT.md) for the full dev workflow including running from source, MCP Inspector, and bridge update details.
38
+ ## More
590
39
 
591
- ## License
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).