reaper-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REAPER_MCP_DEBUG | No | Set to 1 to enable Lua request log | |
| REAPER_MCP_IPC_DIR | No | Mailbox override (must match on both sides) | |
| REAPER_MCP_TIMEOUT | No | Default 10s | 10s |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| statusA | Check the Lua bridge and return project tempo, play state, tracks, any_solo, master_mute and dirty (unsaved changes). Call first; clear a lingering solo before rendering. detail=true adds arrangement facts (time signature, length in beats, markers, MIDI vs audio per track) without guessing chords. |
| transportC | Playback control. action: play, stop, pause, record, toggle_repeat, goto_start. |
| trackB | Track operations. action: list | add | delete | update | bus. update uses name, volume_db, pan (-1..1), mute, solo. bus creates a submix named |
| midiB | MIDI on a track item. Times are absolute project beats. action: create_item | add | get | replace | update | delete | cc. replace rewrites the whole take in one undo step; add only appends. cc inserts CC ( |
| fxB | Track FX. action: list | add | params | set | delete | bypass | move | preset. track_index -1 is the master. set takes value 0..1 (REAPER normalized) or formatted: the value as the plugin displays it (number in its unit, e.g. -18 for dB, 4 for 4:1, 120 for ms; or a label like "3.2k"), resolved by searching the display text. set returns the formatted value actually set. |
| sendB | Track sends. action: list | add | delete | update. track_index is the source (-1 master). dest_index is the destination track. add/update take volume_db, pan, mute, mode (post_fader | pre_fader | pre_fx) and channel routing: src_channel / dst_channel = first channel of the stereo pair, 0-based (dst_channel 2 = channels 3/4, a compressor's sidechain input; the destination's channel count is raised to fit). |
| itemB | Media items on a track. action: list | update | import. fade_in / fade_out are seconds (REAPER native). position/length are beats. import uses a path already on the REAPER host; as_new_track=true makes new tracks. |
| envelopeB | Track envelopes. action: list | get | set. name is REAPER envelope name (Volume, Pan, Mute, ...). set replaces all points. value is the envelope's value; Volume is linear gain (1.0 = 0 dB, 0.5 = -6 dB), also on fader-scaled envelopes. unit=db reads/writes volume-type envelopes (Volume, Trim Volume, send Volume) in dB. set re-activates an envelope left inactive (ACT 0). |
| projectB | Project-level edits. action: tempo | time_signature | time_selection | marker | save. save with path creates missing folders and writes a copy (no dialog); an untitled project adopts that path. save without path needs an already-named project. |
| renderA | Render. No undo. Long timeout. bounds: project | time_selection | custom | items. Default: the master mix. stems=true renders the selected tracks as stems instead (pass track_indices to select them). path is the output folder; the file name comes from pattern. Sets all media online (action 40101) first unless media_online=false. Refuses when a target file already exists (REAPER's overwrite prompt would hang the bridge) and when tracks are soloed (pass allow_solo=true, or solo_indices / mute_indices to solo/mute tracks for this render only; they are restored afterwards). Returns files [{path, bytes, length_sec, peak_db, lufs_i}] and warnings (near-silent, missing file, master muted); measure=false skips the loudness scan. |
| actionB | Run a REAPER Main_OnCommand by numeric command id. |
| reaper_callB | Call any ReaScript function by name. Pointers come back as {"__handle":"hN"} and can be passed back in. Example: func=CountTracks args=[0]. |
| run_luaA | Run a Lua snippet inside REAPER ( |
| batchA | Many operations in one IPC hop. Each call is {func, args} or {func, code} or {func, arguments} for a grouped tool name (track/midi/fx/...). Each slot is the inner result, or {error}. One failure does not abort the rest. Handles from earlier calls work later. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Most tools are grouped by clear resource domains, but several advanced tools overlap conceptually: run_lua, reaper_call, action, and batch all provide ways to execute commands or snippets. There is also mild overlap between item/midi creation and track.bus/send routing, though the descriptions generally clarify the intended use.
Tool names consistently use lower_snake_case and mostly follow a resource-oriented pattern with an action parameter. The exceptions (run_lua, reaper_call, status, batch, action, transport) are readable but prevent a perfect verb_noun-style consistency score.
Fourteen tools is well-scoped for a DAW control server. The grouped action-based tools keep the surface compact while covering tracks, items, MIDI, FX, sends, envelopes, project settings, rendering, and transport.
The surface covers the major project lifecycle operations, including status inspection, track and item editing, MIDI, FX, routing, automation, rendering, saving, and transport. The presence of run_lua, reaper_call, action, and batch provides escape hatches for operations not exposed directly, avoiding dead ends.