@mthines/reaper-mcp 0.19.0 → 0.70.3-beta.86.1

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 +448 -490
  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,551 @@
1
- # reaper-mcp
1
+ <div align="center">
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
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/logo-dark.svg">
5
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/logo.svg" alt="reaper-mcp" width="360">
6
+ </picture>
4
7
 
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
- ```
8
+ <br><br>
11
9
 
12
- ## Quick Start
10
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/hero.svg" alt="reaper-mcp — Mix by asking. Type what you hear and an AI mix engineer inside your REAPER session does it." width="100%">
13
11
 
14
- ```bash
15
- # Interactive guided setup (recommended)
16
- npx @mthines/reaper-mcp init
12
+ <br>
17
13
 
18
- # Or non-interactive — install everything with defaults
19
- npx @mthines/reaper-mcp init --yes
20
- ```
14
+ **Type what you hear. It measures, decides and makes the change live in your REAPER session.**
15
+ <br>
16
+ You chat in plain English in Claude Code, by keyboard (or dictation, if you like). No menus to learn, no exporting, no code.
21
17
 
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`
18
+ <br>
27
19
 
28
- Then load `mcp_bridge.lua` in REAPER and open Claude Code — you're ready to mix.
20
+ [![REAPER 6+](https://img.shields.io/badge/REAPER-6%2B-22d3a6?style=for-the-badge)](https://www.reaper.fm/)
21
+ [![Claude Code](https://img.shields.io/badge/Claude_Code-ready-a78bfa?style=for-the-badge)](https://claude.com/claude-code)
22
+ [![LoreKit](https://img.shields.io/badge/Memory-LoreKit-7c3aed?style=for-the-badge)](https://lorekit.io)
23
+ [![macOS · Windows · Linux](https://img.shields.io/badge/macOS_·_Windows_·_Linux-1a1240?style=for-the-badge)](#-install-in-3-steps)
24
+ [![MIT](https://img.shields.io/badge/license-MIT-ff7a45?style=for-the-badge)](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/LICENSE)
29
25
 
30
- ## What it does
26
+ [**Install in 3 steps**](#-install-in-3-steps) · [See it work](#-just-type-what-you-hear) · [What you get](#-why-producers-use-it) · [Watch it work](#-see-what-your-agent-is-doing) · [Extensions](#-extensions-teach-it-your-plugin) · [FAQ](#-faq)
31
27
 
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
- ```
28
+ </div>
55
29
 
56
- ## Architecture
30
+ ---
57
31
 
58
- ```
59
- Claude Code ←stdio→ MCP Server (TypeScript) ←JSON files→ Lua Bridge (REAPER)
60
- │
61
- ReaScript API ←─┘
62
- gmem[] shared memory ←── JSFX Analyzers
63
- ```
32
+ ## 💬 Just type what you hear
64
33
 
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.
34
+ You know what's wrong with your mix. You just don't want to spend an hour in
35
+ plugin windows fixing it. Type it into Claude Code the way you'd say it to an
36
+ engineer. It's a text chat, so no microphone or voice setup is needed (dictate
37
+ with your OS if you prefer, it's the same thing to the agent):
66
38
 
67
- ## Installation
39
+ > 🎧 *"Please gain stage my tracks."*
40
+ >
41
+ > 🎸 *"The chorus needs more energy. Make the vocals cut through."*
42
+ >
43
+ > 🔊 *"I hear some low-end rumble. Can you fix that?"*
44
+ >
45
+ > 🔥 *"Roast my mix. What could be better?"*
46
+ >
47
+ > 💿 *"Master this for Spotify."*
68
48
 
69
- ### Prerequisites
49
+ Here's what happens next:
70
50
 
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)
51
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/session-demo.svg" alt="Illustrative session: the mixer saves a snapshot, measures, cuts the guitars where they mask the vocal, compresses the vocal, re-measures and saves an after snapshot." width="100%">
74
52
 
75
- ### Option A: Interactive Setup (recommended)
53
+ It isn't a preset and it isn't a guess. Before it touches anything it **measures your
54
+ actual tracks** (loudness, spectrum, stereo width, dynamics). It makes the change with
55
+ **the plugins you own**, then **measures again** to check it worked.
76
56
 
77
- ```bash
78
- npx @mthines/reaper-mcp init
79
- ```
57
+ ---
58
+
59
+ ## ✨ Why producers use it
60
+
61
+ <table>
62
+ <tr>
63
+ <td width="33%" valign="top">
64
+
65
+ ### 👂 It measures, then mixes
66
+ It reads LUFS, true peak, the frequency spectrum, stereo correlation and crest factor
67
+ on every track before it decides anything, and again after. You get numbers, not vibes.
68
+
69
+ </td>
70
+ <td width="33%" valign="top">
71
+
72
+ ### 🎛️ It uses *your* plugins
73
+ It finds your installed FX and reaches for the best one you have: **FabFilter Pro-Q 3**
74
+ if it's there, **ReaEQ** if not. Anything it doesn't know yet, it learns.
75
+
76
+ </td>
77
+ <td width="33%" valign="top">
78
+
79
+ ### 🛟 You can't lose your mix
80
+ It saves a snapshot **before and after** every change, so you can A/B them with one
81
+ click. Each edit is a single REAPER undo step.
82
+
83
+ </td>
84
+ </tr>
85
+ <tr>
86
+ <td valign="top">
87
+
88
+ ### 🎸 It knows the genre
89
+ Rock, pop, hip-hop, electronic, metal, orchestral. It adjusts loudness targets, low-end
90
+ handling and dynamics to the style. Just tell it what you're making.
91
+
92
+ </td>
93
+ <td valign="top">
94
+
95
+ ### 🧠 It remembers
96
+ With **[LoreKit](#-lorekit-the-knowledge-core)** as its memory, it keeps what it learns
97
+ about your plugins and your taste, so a correction sticks. It also draws on a shared
98
+ plugin library that grows every time someone
99
+ **[contributes](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/knowledge/contributions/README.md)**, you included.
100
+
101
+ </td>
102
+ <td valign="top">
103
+
104
+ ### ⚡ It works live, in real time
105
+ It talks straight to your open session, about 50–150 ms per action. You don't bounce
106
+ or upload anything, and you hear each change as it happens.
80
107
 
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)
108
+ </td>
109
+ </tr>
110
+ </table>
86
111
 
87
- For CI/automation, use `--yes` to skip prompts and install everything with defaults:
112
+ ---
113
+
114
+ ## 🔍 How it works
115
+
116
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/how-it-works.svg" alt="You describe what you hear, Claude measures and decides, REAPER changes live. Every change: snapshot, measure, decide, change, re-measure." width="100%">
117
+
118
+ **You stay in charge.** Ask it to explain before it acts, undo anything, or use
119
+ `/critique` for advice without a single change to your project.
120
+
121
+ ---
122
+
123
+ ## 🧠 LoreKit: the knowledge core
124
+
125
+ A mix engineer's value is what they've learned. reaper-mcp keeps all of that in
126
+ **[LoreKit](https://lorekit.io)**, a free, open-source memory store for AI agents. It's
127
+ what turns a remote control into an engineer that gets better every session.
128
+
129
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/knowledge-core.svg" alt="LoreKit at the center: the mix skills read plugin records and lessons before acting and write back what they learned." width="100%">
130
+
131
+ - 🎛️ **One record per plugin.** What it is, what each knob does, the settings that
132
+ worked and the gotchas. Ask for a plugin it has never seen and it **researches it,
133
+ inspects it live and writes the record first**, then uses it. You can also teach it
134
+ one with `/learn-plugin`.
135
+ - 📝 **Lessons from your corrections.** Revert a change, or have a re-measure come back
136
+ worse, and it saves a lesson right then. A lesson that keeps coming up becomes one of
137
+ the mixer's permanent rules, so it stops making that mistake.
138
+ - 🧩 **Built-in knowledge plus your own.** It ships with a curated, read-only set of
139
+ plugin records and lessons, and everything it learns from *you* goes into your own
140
+ layer on top. When the two disagree, yours wins, so your taste never gets
141
+ overwritten. The built-in set comes with the server, read-only, and needs no
142
+ LoreKit account. Connect your own LoreKit to start your layer.
143
+ - 📚 **A built-in plugin library.** FabFilter, Soundtoys, Valhalla, iZotope, Melodyne, the
144
+ REAPER stock plugins and more: see the **[built-in plugin list](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/PLUGINS.md)**, and how
145
+ to add yours.
146
+ - 🤝 **Share what you taught it.** Press **Contribute** in the bridge page's Plugins tab
147
+ and your plugin records become a pull request. Once the maintainer approves it, they're
148
+ built in for every reaper-mcp user and added to the
149
+ [plugin list](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/PLUGINS.md) ([how it works](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/knowledge/contributions/README.md)).
150
+ Regular contributors can publish straight to built-in, no pull request: ask on
151
+ [Discord](https://discord.gg/Eg8tznuXp4).
152
+ - 🌍 **It follows you.** The memory isn't tied to one project folder. Whatever song
153
+ you open, it brings what it knows.
154
+ - 🔒 **Audio knowledge only.** It never stores client names, song titles or license keys.
155
+
156
+ > **No LoreKit? It still mixes.** Everything works without it. It just starts from
157
+ > scratch every session instead of getting smarter. Genre rules, step-by-step workflows
158
+ > and reference sheets (frequencies, compression, loudness) ship with the repo either way.
159
+
160
+ ---
161
+
162
+ ## 🚀 Install in 3 steps
163
+
164
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/install-steps.svg" alt="1. Get REAPER, Claude Code and Node.js. 2. Paste one command. 3. Click Run on mcp_bridge.lua in REAPER." width="100%">
165
+
166
+ ### 1 · Get the apps
167
+
168
+ | | | |
169
+ |---|---|---|
170
+ | 🎚️ **REAPER** | your DAW (v6+, v7 recommended) | [reaper.fm](https://www.reaper.fm/) |
171
+ | 🤖 **Claude Code** | the AI you talk to | [claude.com/claude-code](https://claude.com/claude-code) |
172
+ | 🟢 **Node.js 20+** | runs the connector behind the scenes | [nodejs.org](https://nodejs.org/) |
173
+ | 🧠 **LoreKit** *(recommended)* | the memory, so it learns | [lorekit.io](https://lorekit.io) |
174
+ | ➕ **SWS Extensions** *(optional)* | extra REAPER powers | [sws-extension.org](https://www.sws-extension.org/) |
175
+
176
+ ### 2 · Paste these commands
177
+
178
+ Open a terminal, then run:
88
179
 
89
180
  ```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
181
+ npm install -g @mthines/reaper-mcp
182
+ reaper-mcp setup # installs the bridge and status page into REAPER
183
+ reaper-mcp init # connects Claude Code and adds the mix skills
92
184
  ```
93
185
 
94
- ### Option B: Manual Steps
186
+ That's it. No clone, no build. To update later, run `npm install -g @mthines/reaper-mcp` again,
187
+ then `reaper-mcp setup`. The bridge window in REAPER also shows an **Update** notice.
95
188
 
96
- If you prefer to run each step individually:
189
+ ### 3 · Click Run in REAPER
97
190
 
98
- ```bash
99
- # 1. Install REAPER components (Lua bridge + JSFX analyzers)
100
- npx @mthines/reaper-mcp setup
191
+ In REAPER: **Actions → Show action list → Load ReaScript…**, pick **`mcp_bridge.lua`**
192
+ and click **Run**. A small status window opens, showing the bridge is live. 🟢
193
+ Running it again stops the bridge.
194
+
195
+ **Now open Claude Code in any folder (your song folder is perfect) and start mixing:**
101
196
 
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
197
+ ```
198
+ /mixer Please gain stage my tracks
105
199
  ```
106
200
 
107
- **What gets installed:**
201
+ <details>
202
+ <summary><b>Something not working?</b></summary>
108
203
 
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
204
+ <br>
116
205
 
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
206
+ - **Run `reaper-mcp doctor`.** It checks the bridge, the skills and the Claude Code config, and says how to fix what's off.
207
+ - **Is the bridge running?** The status window shows 🟢 when it is. If not, run `mcp_bridge.lua` again from REAPER's action list.
208
+ - **Claude Code doesn't see REAPER?** Install Claude Code first, then run `reaper-mcp init` again.
209
+ - **Missing skills?** `reaper-mcp install-skills` copies them into `~/.claude` (it never overwrites files you edited).
210
+ - **Audio analysis (loudness, masking, stems)?** `reaper-mcp setup-sidecar` (needs Python 3.10+).
122
211
 
123
- ### Start the Lua Bridge in REAPER
212
+ </details>
124
213
 
125
- After setup (either option), load the bridge in REAPER:
214
+ ---
126
215
 
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
216
+ ## 🎚️ Meet your engineers
131
217
 
132
- You should see in REAPER's console: `MCP Bridge: Started`
218
+ Seven skills, each tuned for a job. Type the slash command, or just describe what you
219
+ want and the right one starts.
133
220
 
134
- ### Verify
221
+ | | Skill | What it does | Try |
222
+ |---|---|---|---|
223
+ | 🎚️ | **`/mixer`** | Does the mixing: gain staging, vocal chains, drum bus, low end, stereo image | `/mixer Build a vocal chain on track 3` |
224
+ | 🔥 | **`/critique`** | "Roast my mix." A measured report of what to fix. **Changes nothing.** | `/critique What's holding this mix back?` |
225
+ | ✂️ | **`/editing`** | Edits notes, arrangement and timing, and compares two versions of a part in lanes | `/editing Make the chorus half-time` |
226
+ | 💿 | **`/mastering`** | A mastering chain on the mix bus, aimed at a platform's loudness | `/mastering Master this for Spotify` |
227
+ | 🎓 | **`/learn-plugin`** | Researches a plugin you own, tests it live and saves it to LoreKit, asking you only what it can't work out | `/learn-plugin JST Gain Reduction Deluxe` |
228
+ | 🧩 | **`/new-extension`** | Builds or updates an [extension](#-extensions-teach-it-your-plugin) that edits a plugin's internals (wavetables, mod matrix, patch state) and proves it live on a scratch track | `/new-extension Serum` |
229
+ | 🗂️ | **`/mix-memory`** | Shows what it remembers, and tidies it up | `/mix-memory What do you know about Pro-C 2?` |
135
230
 
136
- ```bash
137
- npx @mthines/reaper-mcp doctor
138
- ```
231
+ ---
139
232
 
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 |
257
-
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.
259
-
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` |
233
+ ## 🧰 What it can control
267
234
 
268
- ### Routing
235
+ Almost everything in your session. That's **130+ tools**, so it can do the job
236
+ instead of just giving advice:
269
237
 
270
- | Tool | Description |
271
- |------|-------------|
272
- | `get_track_routing` | Sends, receives, parent/folder info for a track |
238
+ | | | |
239
+ |---|---|---|
240
+ | 🎚️ **Tracks & mixer**: volume, pan, mute/solo, folders, colors, groups & VCAs | 🎛️ **FX & plugins**: add, tweak, bypass, presets, FX chains, track templates | 📈 **Metering**: LUFS, true peak, spectrum, stereo correlation, crest factor |
241
+ | 🔀 **Routing**: sends, buses, sidechains, hardware outputs | 🎹 **MIDI**: write, edit and analyze notes & CC, live MIDI out | ✂️ **Editing**: split, trim, move, fades, takes, stretch markers |
242
+ | 📍 **Arrangement**: markers, regions, tempo map | 〰️ **Automation**: envelopes, points and pooled automation items | 💾 **Project**: save, render, undo/redo, snapshots, REAPER actions |
273
243
 
274
- ## Using the Mix Agents
244
+ 👉 The main tools by area: **[docs/TOOLS.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/TOOLS.md)**
275
245
 
276
- Once you've run `init` (or `setup` + `install-skills`), open Claude Code. Four specialized mix agents are available:
246
+ ### 🎸 Genre-aware out of the box
277
247
 
278
- ### Available Agents
248
+ | Genre | Loudness target | What it leans into |
249
+ |---|---|---|
250
+ | 🎸 Rock | −11 to −9 LUFS | Parallel drum compression, hard-panned guitars |
251
+ | 🎤 Pop | −14 to −10 LUFS | Vocal-forward, two-stage compression, bus glue |
252
+ | 🎧 Hip-Hop | −10 to −7 LUFS | 808 saturation, aggressive vocal comp, mono sub |
253
+ | 🎛️ Electronic | −10 to −6 LUFS | Sidechain pump, mono sub, stereo width |
254
+ | 🎻 Orchestral | −23 to −16 LUFS | Preserved dynamics, hall reverb staging |
255
+ | 🤘 Metal | −11 to −8 LUFS | Scooped guitars, tight drums, four-guitar wall |
279
256
 
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 |
257
+ ---
286
258
 
287
- ### How to use them
259
+ ## 🧩 Extensions: teach it your plugin
288
260
 
289
- Just mention the agent by name in Claude Code:
261
+ Out of the box it controls any plugin through its knobs. But some of what makes a sound
262
+ isn't a knob: a synth's **wavetables**, its **modulation matrix**, a guitar rig's **preset
263
+ file**. **Extensions** reach that. They're small add-ons you switch on, and you can have
264
+ Claude build one for the plugin *you* use.
290
265
 
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
- ```
266
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/extensions.svg" alt="Extensions plug into reaper-mcp through a small versioned API: the core on the left, and the Vital, Helix and your-own extensions on the right." width="100%">
267
+
268
+ > 🎹 *"On the Vital on track 2, route LFO 2 to the filter cutoff at 40% and make it a slow triangle."*
269
+ >
270
+ > 🎸 *"Build me a djent rhythm tone in Helix with a clean, a crunch and a lead snapshot."*
271
+ >
272
+ > 🌊 *"Give this synth a wavetable that morphs from a sine to a bright saw over 64 frames."*
299
273
 
300
- Or start a full session as the mix engineer:
274
+ | | Extension | What Claude can do with it |
275
+ |---|---|---|
276
+ | 🎹 | **`vital`** | Read a Vital patch and edit its settings, **mod matrix** and **LFO shapes**; build **wavetables** (1-256 frames) from classic shapes or harmonic recipes |
277
+ | 🎸 | **`helix`** | Build and edit Line 6 **Helix presets** with up to 8 snapshots, check them against real models, and load them into Helix Native, **backed up and rolled back** if anything else changed |
278
+ | 🧩 | **yours** | `/new-extension Serum`: Claude researches the plugin's format, probes it on a scratch track, writes the tools **with tests** and proves they change the sound |
279
+
280
+ **Switch one on**, then restart Claude Code:
301
281
 
302
282
  ```bash
303
- claude --agent mix-engineer
283
+ reaper-mcp extension add vital # or: helix
284
+ reaper-mcp extension list # what's installed, and why one can't load
304
285
  ```
305
286
 
306
- ### What happens under the hood
287
+ - 🔌 **Opt-in.** Nothing loads unless you add it. `reaper-mcp extension remove vital` takes it out.
288
+ - 🛟 **Same safety as the rest.** Every edit is one undo step, and write tools can preview with a dry run.
289
+ - 🛡️ **A broken extension is skipped**, never a crash, and `reaper-mcp doctor` tells you why.
290
+ - 🧪 **Proven live.** `/new-extension` doesn't finish until the edit shows up in the plugin *and* in the audio.
307
291
 
308
- Each agent has:
292
+ 📖 Full guide (the API, Lua handlers, testing, sharing, troubleshooting): **[docs/EXTENSIONS.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/EXTENSIONS.md)**
309
293
 
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
294
+ ---
314
295
 
315
- The workflow is always:
296
+ ## 🛟 Safe by design
316
297
 
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
298
+ - 📸 **Snapshots around every mix task.** The mix skills save one before and after; A/B them in the
299
+ bridge window, or bind `mcp_snapshot_next` / `_prev` / `_quick_save` to keys (setup adds them to the Action List).
300
+ - ↩️ **One change, one undo.** Each edit is labelled `MCP: …` in REAPER's undo history.
301
+ - 🚫 **No surprise pop-ups.** It won't run anything that opens a dialog unless you allow
302
+ it, and it never closes your project or quits REAPER.
303
+ - 👀 **Advice-only mode.** `/critique` never changes your project. The bridge window
304
+ also has a read-only switch and a pause button.
305
+ - 📊 **Bridge status window.** See every action as it happens, with timing and errors,
306
+ in a small window next to REAPER ([see what it shows](#-see-what-your-agent-is-doing)).
323
307
 
324
- ### A/B Comparison
308
+ 📖 What it can and can't do to a session, and what isn't covered: **[docs/SAFETY.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/SAFETY.md)**.
325
309
 
326
- Every change is bracketed by snapshots:
310
+ ---
327
311
 
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
312
+ ## 🔭 See what your agent is doing
332
313
 
333
- ### Genre Awareness
314
+ You shouldn't have to take its word for it. The **bridge window** opens next to REAPER and
315
+ logs every move the agent makes, as it happens: what it did, how long it took and anything
316
+ that went wrong. With several Claude sessions connected, you can see which one did what.
334
317
 
335
- Tell the agent the genre and it adjusts its approach:
318
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/bridge-status.png" alt="The MCP Bridge status window: uptime, command count, errors, latency, a commands-per-minute timeline, and a live log of tool calls such as read_track_spectrum, set_track_property and snapshot_save, tagged by session." width="100%">
336
319
 
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
- ```
320
+ <sub>Demo data. Add <code>?demo</code> to the window's address to explore it without REAPER.</sub>
341
321
 
342
- The agent reads `knowledge/genres/{genre}.md` for genre-specific conventions.
322
+ ### Click any call to see what it did
343
323
 
344
- ## AI Mix Engineer Knowledge
324
+ Every call opens a drawer in plain words (*"midnight-drive wrote new points into the Volume
325
+ automation on track 5"*) with a picture of the change: **before → after** for edits, a
326
+ readout against your target for measurements.
345
327
 
346
- The knowledge base is what makes this more than just a remote control — it's a mix engineer's brain.
328
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/bridge-drawer.png" alt="The bridge window with a call open in the drawer: Write automation, with a volume envelope drawn before and after, and the params the agent sent." width="100%">
347
329
 
348
- ### Plugin Knowledge
330
+ ### 📈 What it measured
349
331
 
350
- Ships with knowledge for stock REAPER plugins and popular third-party suites:
332
+ <table>
333
+ <tr>
334
+ <td width="50%" valign="top">
351
335
 
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 |
336
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/spectrum.png" alt="The spectrum view: third-octave bands from 25 Hz to 16 kHz as bars, hot bands in amber." width="100%">
358
337
 
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.
338
+ **Spectrum**<br><sub>Where the energy sits, band by band, judged by perceived loudness. Hot bands turn amber.</sub>
360
339
 
361
- ### Adding Your Own Plugins
340
+ </td>
341
+ <td width="50%" valign="top">
362
342
 
363
- Use the `/learn-plugin` skill in Claude Code:
343
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/loudness.png" alt="The loudness view: integrated LUFS against a target range on a scale, with short-term, momentary and true peak readouts and the change since the previous call." width="100%">
364
344
 
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
- ```
345
+ **Loudness**<br><sub>LUFS against your target, true peak, and how it moved since the last measurement.</sub>
372
346
 
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
- ```
347
+ </td>
348
+ </tr>
349
+ <tr>
350
+ <td width="50%" valign="top">
468
351
 
469
- The format is `mcp__reaper__{tool_name}`. Once added, Claude Code will run these tools without prompting.
352
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/loudness-curve.png" alt="The loudness curve view: short-term loudness over the length of a song against a target line, with the spans over target shaded." width="100%">
470
353
 
471
- ## CLI Commands
354
+ **Loudness over time**<br><sub>The whole song's loudness, with the stretches that run over target shaded.</sub>
472
355
 
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 |
356
+ </td>
357
+ <td width="50%" valign="top">
484
358
 
485
- Or install globally for shorter commands:
359
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/masking.png" alt="The masking view: a heat map of track pairs against frequency bands, with the worst conflicts and which track to cut." width="100%">
486
360
 
487
- ```bash
488
- npm install -g @mthines/reaper-mcp
489
- reaper-mcp init
490
- ```
361
+ **Masking**<br><sub>Which tracks fight, at which frequency, and which one should give way.</sub>
491
362
 
492
- ## Claude Code Integration
363
+ </td>
364
+ </tr>
365
+ <tr>
366
+ <td width="50%" valign="top">
493
367
 
494
- After `install-skills --project`, your project has a `.mcp.json`:
368
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/stereo-bands.png" alt="The stereo view: correlation per frequency band on a minus one to plus one scale." width="100%">
495
369
 
496
- ```json
497
- {
498
- "mcpServers": {
499
- "reaper": {
500
- "command": "npx",
501
- "args": ["@mthines/reaper-mcp", "serve"]
502
- }
503
- }
504
- }
505
- ```
370
+ **Stereo, per band**<br><sub>Phase correlation per band. Catches a wide or out-of-phase low end before it hurts.</sub>
506
371
 
507
- Claude Code reads this automatically. Open Claude Code in your project and the REAPER tools are available.
372
+ </td>
373
+ <td width="50%" valign="top">
508
374
 
509
- ### Running from source (development)
375
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/waveform.png" alt="The waveform view: a rendered track drawn on a decibel scale with its peak, RMS and clipped sample count." width="100%">
510
376
 
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`:
377
+ **Waveform**<br><sub>What a rendered track really looks like, with clipping counted.</sub>
512
378
 
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
- ```
379
+ </td>
380
+ </tr>
381
+ </table>
523
382
 
524
- See [DEVELOPMENT.md](DEVELOPMENT.md) for the full dev workflow.
383
+ ### 🎛️ What it changed
525
384
 
526
- ## Environment Variables
385
+ Every edit is drawn **before → after**: new in blue, old dashed or ghosted, removed struck through.
527
386
 
528
- | Variable | Description | Default |
529
- | ---------------------- | ---------------------------------- | -------------------- |
530
- | `REAPER_RESOURCE_PATH` | Override REAPER resource directory | Auto-detected per OS |
387
+ <table>
388
+ <tr>
389
+ <td width="50%" valign="top">
531
390
 
532
- Platform defaults:
391
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/mixer.png" alt="The mixer view: every track as a fader with its level in dB, pan, and mute, solo and arm badges, grouped by folder." width="100%">
533
392
 
534
- - **macOS**: `~/Library/Application Support/REAPER`
535
- - **Windows**: `%APPDATA%/REAPER`
536
- - **Linux**: `~/.config/REAPER`
393
+ **Mixer**<br><sub>The session as a mixer: folders, levels, pans, mute, solo and arm.</sub>
537
394
 
538
- ## Project Structure
395
+ </td>
396
+ <td width="50%" valign="top">
539
397
 
540
- ```
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
561
- ```
398
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/routing.png" alt="The routing view: a signal-flow diagram of a track's sends, receives and hardware outputs, with added, changed and removed routes marked." width="100%">
562
399
 
563
- ## Updating the Lua Bridge
400
+ **Routing**<br><sub>Sends, receives and outputs as signal flow. Thicker wire means louder.</sub>
564
401
 
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:
402
+ </td>
403
+ </tr>
404
+ <tr>
405
+ <td width="50%" valign="top">
566
406
 
567
- ```bash
568
- # Reinstall bridge files into REAPER
569
- npx @mthines/reaper-mcp setup
570
- ```
407
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/automation.png" alt="The automation view: a volume envelope with pooled automation items drawn as blocks tinted by pool." width="100%">
571
408
 
572
- Then in REAPER:
409
+ **Automation**<br><sub>Envelope points and pooled automation items, before and after.</sub>
573
410
 
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
411
+ </td>
412
+ <td width="50%" valign="top">
576
413
 
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.
414
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/piano-roll.png" alt="The piano roll view: added notes in blue, unchanged notes in grey, removed notes dashed, and a velocity lane." width="100%">
578
415
 
579
- ## Development
416
+ **Piano roll**<br><sub>MIDI edits as a piano roll: added, kept and removed notes, with velocity.</sub>
580
417
 
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
418
+ </td>
419
+ </tr>
420
+ <tr>
421
+ <td width="50%" valign="top">
422
+
423
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/pins.png" alt="The plugin pins view: track channels wired into a compressor's input pins, with a newly connected sidechain highlighted." width="100%">
424
+
425
+ **Plugin pins**<br><sub>Which track channels feed which plugin pins. Here, a sidechain just got wired in.</sub>
426
+
427
+ </td>
428
+ <td width="50%" valign="top">
429
+
430
+ <img src="https://raw.githubusercontent.com/mthines/reaper-mcp/v0.70.3-beta.86.1/docs/assets/views/render.png" alt="The render view: three rendered versions of a song with a waveform, LUFS, peak and length for each, against a loudness target." width="100%">
431
+
432
+ **Renders**<br><sub>Every rendered file with its LUFS, peak and length against your target.</sub>
433
+
434
+ </td>
435
+ </tr>
436
+ </table>
437
+
438
+ <sub>Illustrative data, drawn by the same components the bridge window uses. There's a view for nearly every tool
439
+ that reads or writes your session.</sub>
440
+
441
+ ---
442
+
443
+ ## 🔒 Privacy & telemetry
444
+
445
+ Hi 👋 reaper-mcp isn't a company — it's just me. I'm a developer who loves making music,
446
+ and I build this in my spare time because it's the tool I wanted for my own sessions 🎛️
447
+
448
+ The catch: I can only test it on my own setup. To make sure it also works on yours —
449
+ other REAPER versions, other plugins, other OSes — reaper-mcp sends **pseudonymous usage
450
+ data** by default: which tools run, whether they fail, and how long they take. A random
451
+ install id groups one machine's calls together. It isn't tied to your name, account or
452
+ computer.
453
+
454
+ **Never sent:** your projects, track or plugin names, settings, file paths, error
455
+ messages, audio or MIDI. I respect your privacy 🙏
456
+
457
+ You're in control: setup asks before anything is sent, and `reaper-mcp telemetry off`
458
+ turns it off for good — no hard feelings. Everything that's collected, and where it
459
+ goes, is in [TELEMETRY.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/TELEMETRY.md).
460
+
461
+ ---
462
+
463
+ ## ❓ FAQ
464
+
465
+ <details>
466
+ <summary><b>Do I need to know how to code?</b></summary>
467
+ <br>
468
+ No. You paste one command to install. After that you type in plain words, the way you
469
+ would say it to an engineer.
470
+ </details>
471
+
472
+ <details>
473
+ <summary><b>Is this voice control?</b></summary>
474
+ <br>
475
+ No. You type to it in Claude Code, like any chat. "Talking" means plain language, not
476
+ a microphone. Nothing listens to you. If you'd rather speak, use your OS dictation or a
477
+ voice-to-text tool; the agent just sees the text.
478
+ </details>
479
+
480
+ <details>
481
+ <summary><b>Will it replace me?</b></summary>
482
+ <br>
483
+ No. It handles the tedious, measurable parts: gain staging, cleaning up clashing
484
+ frequencies, hitting loudness targets. Taste and the final call stay with you, and it
485
+ explains its reasoning so you can push back.
486
+ </details>
487
+
488
+ <details>
489
+ <summary><b>Can it wreck my project?</b></summary>
490
+ <br>
491
+ Every edit is a single undo step, and the mix skills snapshot before and after a task. Use
492
+ <code>/critique</code> or read-only mode if you only want advice. Saving a copy of your project
493
+ before a big session never hurts. <a href="https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/SAFETY.md">What is and isn't guarded</a>.
494
+ </details>
495
+
496
+ <details>
497
+ <summary><b>Which plugins does it work with?</b></summary>
498
+ <br>
499
+ Any plugin REAPER can load (VST, VST3, AU, CLAP, JS). It finds what you have installed
500
+ and reaches for the best tool for each job. The ones it already knows are in the
501
+ <a href="https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/PLUGINS.md">built-in plugin list</a>. When it meets a plugin it doesn't know, it
502
+ researches it, inspects its controls live and saves what it learns to LoreKit. You can
503
+ also teach it one up front with <code>/learn-plugin</code>.
504
+ </details>
505
+
506
+ <details>
507
+ <summary><b>It doesn't support my plugin's patches, wavetables or presets. Now what?</b></summary>
508
+ <br>
509
+ Host parameters already work for any plugin. For anything deeper, build an
510
+ <a href="#-extensions-teach-it-your-plugin">extension</a>: run <code>/new-extension YourPlugin</code> and
511
+ Claude researches the format, writes the tools and tests, and proves them on a scratch track. Today there are
512
+ extensions for Vital and Line 6 Helix.
513
+ </details>
514
+
515
+ <details>
516
+ <summary><b>What does it cost?</b></summary>
517
+ <br>
518
+ reaper-mcp is free and open source (MIT), and so is LoreKit. You need REAPER and a
519
+ Claude plan that includes Claude Code.
520
+ </details>
521
+
522
+ <details>
523
+ <summary><b>Do my audio files get uploaded?</b></summary>
524
+ <br>
525
+ No. It reads meter values and settings from your running session, not your audio files.
526
+ </details>
527
+
528
+ ---
529
+
530
+ ## 🛠️ For developers
531
+
532
+ - 📖 **[docs/REFERENCE.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/REFERENCE.md)**: architecture, install internals, CLI,
533
+ environment variables, telemetry, project structure
534
+ - 🧰 **[docs/TOOLS.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/TOOLS.md)**: the main tools by area
535
+ - 🧩 **[docs/EXTENSIONS.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/EXTENSIONS.md)**: write, test and share an extension (the API, Lua handlers, Vital and Helix)
536
+ - 🧑‍💻 **[DEVELOPMENT.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/DEVELOPMENT.md)**: build, test, run from source, MCP Inspector
537
+ - 🧪 **[docs/TESTING.md](https://github.com/mthines/reaper-mcp/blob/v0.70.3-beta.86.1/docs/TESTING.md)**: end-to-end testing guide
538
+
539
+ ```
540
+ Claude Code ⇄ MCP server (TypeScript) ⇄ file IPC ⇄ Lua bridge in REAPER ⇄ ReaScript API + JSFX meters
587
541
  ```
588
542
 
589
- See [DEVELOPMENT.md](DEVELOPMENT.md) for the full dev workflow including running from source, MCP Inspector, and bridge update details.
543
+ <div align="center">
544
+
545
+ <br>
546
+
547
+ **Made for people who'd rather be making music.** 🎶
590
548
 
591
- ## License
549
+ MIT License
592
550
 
593
- MIT
551
+ </div>