Skip to main content
Glama
Echo722

reaper-mcp-bridge

by Echo722

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
REAPER_MCP_BRIDGE_DIRNoThe bridge data directory (where the Lua bridge script and Python server exchange <id>.req.json / <id>.res.json files). By default it lives at <REAPER resource path>/Scripts/reaper_mcp_bridge_data. To relocate it, set REAPER_MCP_BRIDGE_DIR in both the environment REAPER starts from and the env block of your MCP client config. Resolution order: env REAPER_MCP_BRIDGE_DIR > locator file > platform default.

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
pingA

Health check: confirm the REAPER bridge is running. Returns {pong: true, time: } on success.

reaper_evalA

Execute arbitrary Lua inside REAPER. The reaper global is available; values you return are sent back as JSON. Use this for anything not covered by a typed tool. Example: return reaper.GetNumTracks(). If you pass args, it is exposed in the chunk as the variable args.

bridge_statusA

Print the bridge directory the Python side is using. Useful when diagnosing setup issues (it must match the Lua side).

get_project_infoA

Get an overview of the current REAPER project: file path, sample rate, length in seconds, play state, track count, region count, marker count, time selection. Call this first to orient yourself.

list_tracksA

List all tracks with index, name, volume (dB), pan (-1..1), mute, solo, record arm, color (RGB or 0 if none), item count, FX names.

list_regionsB

List all regions in the project: {index, name, start_sec, end_sec, color_rgb}.

list_markersA

List all markers (not regions): {enum_index, index, name, time_sec, color_rgb}.

save_project_asB

Save the current project to a specific path (.rpp). Creates parent dirs if needed.

new_projectA

Create a brand-new empty project in a new tab and switch to it. Does NOT save the previous project.

add_trackA

Add a new track. name is optional. position is the 0-based index where to insert; -1 (default) appends at the end. Returns {index, name}.

delete_trackC

Delete a track by 0-based index.

rename_trackC

Rename a track.

set_track_volume_dbB

Set track volume in dB. Use -150 for -inf (silent). 0 = unity. Typical mix range: -60..+12.

set_track_panC

Set track pan. -1.0 = full left, 0 = center, 1.0 = full right.

set_track_muteC

Mute or unmute a track.

set_track_soloC

Solo or unsolo a track.

set_track_record_armC

Arm or disarm a track for recording.

set_track_colorA

Set track color. r/g/b each 0..255. Use r=g=b=0 to clear (revert to default).

set_track_folder_depthA

Set folder structure depth for a track. 1 = this track starts a folder, 0 = normal (default), -1 = end of one folder, -2 = end of two folders, etc. Use this to group tracks: e.g. set depth=1 on a 'Drums' track and depth=-1 on the last child.

select_tracksA

Select tracks by index list (replacing any previous selection). Pass [] to clear selection.

playA

Start playback from the edit cursor.

stopB

Stop playback or recording.

recordB

Start recording on all armed tracks.

set_cursorC

Move the edit cursor to time_sec.

set_time_selectionC

Set the time selection (loop range) in seconds.

clear_time_selectionC

Clear the time selection.

split_items_at_timeA

Split every item that crosses time_sec at that time. If selected_only is true, only split currently-selected items. Returns count of items created.

move_selected_itemsB

Shift the position of all currently selected items by delta_sec seconds.

set_selected_item_fadesA

Set fade-in and fade-out (seconds) on every selected media item. Pass -1 for either to leave it unchanged.

glue_selected_itemsA

Glue (consolidate) currently selected items. Each contiguous group on a track becomes one item. Useful after a lot of editing.

set_record_inputB

Set the record input for a track. input is REAPER's input index: 0..N-1 for mono inputs, or use 1024+ch for stereo pair starting at ch. Pass -1 to set to MIDI all-channels-all-devices.

select_items_on_trackA

Select items on a track by index range. Pass start=-1, end=-1 to select all items on the track. replace = clear other selections first.

insert_midi_itemB

Insert an empty MIDI item on a track, spanning [start_sec, end_sec]. Returns the item index on the track.

insert_midi_notesA

Insert MIDI notes into an existing MIDI item. Each note: {pitch: 0..127, start_qn: float, length_qn: float, velocity?: 1..127 (default 96), channel?: 0..15 (default 0)}. Positions are quarter-notes relative to the item start.

create_chord_progressionA

Convenience: build a chord progression on a track from scratch. Creates a MIDI item and writes one chord per entry. chords: [{root: 0..11 (C=0), type: 'maj'|'min'|'7'|'maj7'|'min7'|'dim'|'aug', duration_qn: float, octave?: int (default 4)}]. Notes are placed back-to-back starting at item start (start_sec).

quantize_midi_itemA

Quantize note positions in the active MIDI take of the item at (track_index, item_index) to grid_qn quarter notes. Pass 0.25 for 16th-note grid, 0.5 for 8ths, 1.0 for quarters.

add_fxA

Add an FX plugin to a track. fx_name is matched the way REAPER's FX browser matches: e.g. 'ReaEQ', 'VST:Pro-Q 3', 'ReaComp'. Returns the new FX index on that track, or -1 if not found.

remove_fxB

Remove an FX from a track by FX index.

list_fxA

List FX on a track with their parameters. Each entry: {index, name, enabled, num_params, params: [{index, name, value, value_normalized, min, max}]}. Set include_params=false to skip parameter details (faster).

set_fx_paramB

Set an FX parameter. normalized=true (default) means value is in 0..1. Set normalized=false to use the plugin's native units.

set_fx_enabledC

Bypass / enable an FX on a track.

set_master_volume_dbB

Set master track volume in dB. 0 = unity.

render_with_current_settingsA

Trigger a render using REAPER's current render-dialog settings (non-interactive — no UI popup). Useful if the user has already configured the render dialog.

renderA

Render to a directory with the given bounds and file pattern. bounds ∈ {'entire_project','time_selection','all_regions','selected_items','selected_regions'}. file_name_pattern uses REAPER's wildcards: e.g. '$project', '$region', '$track', '$item'. Extension comes from current render format (configure via REAPER once, or call render_with_current_settings).

get_render_settingsA

Get the current render settings: bounds flag, output file/dir, pattern, sample rate, channels.

batch_rename_itemsA

Rename items on a track in order. pattern supports tokens: $num (1-based, zero-padded to pad_width), $idx (1-based, no padding), $name (original active-take name), $track (track name). If track_index = -1, applies across ALL tracks in track-then-position order. Returns the list of renames applied.

batch_rename_regionsB

Rename ALL regions in the project in time order. Pattern tokens: $num (1-based, zero-padded to pad_width), $idx, $name (original name).

batch_export_regionsB

Render every region in the project to its own file. Uses the project's currently-configured render FORMAT (configure it once in REAPER's Render dialog, then this just changes bounds + output dir + pattern). file_name_pattern supports REAPER wildcards: default '$region' = filename equals region name.

normalize_loudnessA

Normalize the perceived loudness of items by adjusting each item's volume (D_VOL). Doesn't modify audio data. target_db: e.g. -14 for streaming, -23 for broadcast EBU R128. kind: 'LUFS-I' (default), 'RMS-I', 'peak', 'true_peak', 'LUFS-M_max', 'LUFS-S_max'. selected_only: true = only currently selected items; false = every item in the project. Requires REAPER 6.40+.

apply_templateA

Build a track layout from a template. tracks is a list, processed in order. Each entry may contain: {name, color:[r,g,b]?, volume_db?, pan?, folder_start?:bool, folder_end?:int (1=close one, 2=close two, ...), record_armed?:bool, record_input?:int, fx?:[name,name,...]}. Appends to the current project; does not clear existing tracks. Returns the indices and names of the new tracks.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 50 tools

Disambiguation4/5

Most tools target distinct resources or actions, with clear separation between track, item, MIDI, FX, and render operations. However, the render family (render, render_with_current_settings, batch_export_regions) and the reaper_eval catch-all slightly overlap with typed tools, and ping/bridge_status both serve diagnostic purposes.

Naming Consistency4/5

Nearly all tools use consistent snake_case with predictable verb_noun patterns (set_track_volume_db, list_tracks, add_fx). A few bare verbs (play, stop, record, render, ping) and new_project deviate slightly, but the overall convention is coherent and readable.

Tool Count1/5

50 tools is an extreme mismatch for a single MCP server; many granular setters (set_track_mute, set_track_solo, set_track_pan, etc.) could be merged into a unified update_track operation. The rubric explicitly flags 50+ tools as requiring a score of 1.

Completeness4/5

The surface covers core lifecycle operations for projects, tracks, regions, MIDI, FX, rendering, and batch processing, with reaper_eval providing an escape hatch for anything missing. Typed gaps remain for item-level CRUD (delete/copy/trim items), automation envelopes, sends, and tempo/meter, which will force agents to use eval for common tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues