reaper-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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 | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| fx_addA | Add an FX/plugin (VST/VST3/AU/JS by name, e.g. 'ReaEQ' or 'VST3: Pro-Q 3 (FabFilter)') to the end of a track's FX chain. Returns the new fx_index. |
| fx_removeB | Remove the FX at fx_index from a track's FX chain. |
| fx_set_enabledC | Bypass (False) or enable (True) an FX on a track. |
| fx_listB | List all FX on a track's FX chain with their index, name, and enabled state. |
| fx_set_paramC | Set a normalized (0.0-1.0) parameter value on a track's FX. |
| fx_get_paramC | Get a normalized (0.0-1.0) parameter value from a track's FX. |
| item_splitC | Split the media item on a track that starts at item_start_sec, at split_at_sec. |
| item_moveB | Move the media item on a track that starts at item_start_sec to new_start_sec. |
| item_glue_selectedA | Glue all currently selected media items into one item each (per track). |
| item_render_in_place_selectedB | Render selected items in place (applies FX/pitch/rate destructively to new item). |
| marker_addB | Add a project marker at the given position in seconds. |
| region_addC | Add a project region spanning start_sec to end_sec. |
| midi_add_itemA | Create an empty MIDI item on a track spanning start_sec to end_sec. Returns nothing useful yet to reference the item by -- use midi_add_note with the same track/time range, which locates the item itself. |
| midi_add_noteB | Add a MIDI note to the MIDI item on a track that starts at item_start_sec. note_start_sec/note_end_sec are absolute project time in seconds. pitch is 0-127 (60 = middle C), velocity is 1-127. |
| project_saveB | Save the current project. |
| project_undoA | Undo the last action in REAPER. |
| reaper_infoA | Get REAPER version, resource path, current project path, track count, and play state. |
| run_reascriptA | Execute arbitrary Lua code inside REAPER's ReaScript environment (full access to the reaper.* API) and return its result as a string. Use this for anything not covered by a dedicated tool -- e.g. advanced routing, item editing, or calling ReaScript functions with no wrapper yet. Be precise: this runs with the same permissions as any ReaScript. |
| render_projectA | Render the project using its current render settings. If output_path is given, it overrides the configured render output file path first. |
| reaper_statusA | Report REAPER installs found, running REAPER processes (with PIDs), and whether the reaper_bridge.lua socket bridge is reachable. Call this first when diagnosing connection issues. |
| install_bridgeA | Copy reaper_bridge.lua into the detected REAPER Scripts folder(s). This does not start it -- REAPER must load it once via its Actions list (or you can set it to run on startup). |
| track_addA | Insert a new track, optionally at a specific 0-based index (default: end of track list) and with a given name. |
| track_removeC | Delete the track at the given 0-based index. |
| track_renameB | Rename the track at the given 0-based index. |
| track_set_volume_dbB | Set a track's volume fader in dB (0 = unity gain). |
| track_set_panB | Set a track's pan, from -1.0 (full left) to 1.0 (full right). |
| track_set_muteC | Mute or unmute a track. |
| track_set_soloB | Solo or unsolo a track. |
| track_set_colorA | Set a track's color using 0-255 RGB components. |
| track_listA | List all tracks in the current project with name, mute/solo state, volume (dB), and pan. |
| transport_playA | Start playback from the current edit cursor position. |
| transport_stopB | Stop playback/recording. |
| transport_pauseB | Pause playback. |
| transport_recordA | Arm and start recording. |
| transport_seekC | Move the edit cursor to an absolute position in seconds. |
| transport_set_tempoC | Set the project tempo in beats per minute. |
| transport_get_stateA | Get current play state, cursor position (seconds), and tempo. |
| view_zoom_to_selectionA | Zoom the arrange view horizontally to fit the currently selected item(s). |
| view_scroll_toA | Scroll the arrange view so the given position (seconds) is visible. |
| view_set_arrange_zoomB | Set the arrange view's horizontal zoom level, in pixels per second. |
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 40 tools
Each tool targets a distinct action on a specific resource (e.g., transport_play vs transport_pause, fx_add vs fx_list). Even the two info tools (reaper_info, reaper_status) serve different diagnostic purposes. No ambiguity or overlap exists.
All tools follow a consistent verb_noun or domain_verb_noun pattern with underscores (e.g., track_add, fx_set_param, transport_stop). The only outlier is install_bridge, but it still follows the verb_noun convention. No mixing of styles.
With 40 tools, this server is well beyond the typical 3-15 range for a well-scoped server. While REAPER is a complex DAW, the granularity could be reduced (e.g., combining transport tools into a single tool with actions). The high count makes it heavy for an MCP server.
Core operations for tracks, FX, transport, and items are covered, but notable gaps exist (e.g., deleting markers/regions, editing MIDI notes beyond adding, managing sends/receives). The run_reascript tool partially mitigates this by allowing arbitrary code, but the dedicated tool surface is incomplete.