Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
REAPER_MCP_HOSTNoWhere the MCP server looks for the bridge127.0.0.1
REAPER_MCP_PORTNoBridge TCP port (set on both sides if you change it)8765

Capabilities

Features and capabilities supported by this server

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

Tools

Functions exposed to the LLM to take actions

NameDescription
reaper_pingA

Check that the Reaper bridge is alive and report Reaper's version.

Call this first when anything fails — a clean response confirms both the MCP server and the in-Reaper bridge script are running and reachable.

Returns: {pong: bool, reaper_version: str}.

reaper_get_project_infoA

Return the current project's name, length, tempo, cursor position, transport state, and track count.

Returns a dict: {name, length_sec, tempo_bpm, cursor_sec, playing, paused, recording, track_count}.

reaper_list_installed_fxA

List every FX plugin Reaper has scanned (VST2/VST3/CLAP/JS).

Reads Reaper's own scan-cache files directly (no bridge round-trip). Use this to find the exact fx_name string to pass to reaper_add_fx_to_track.

Each item: name (pass this to add_fx, e.g. "VST3i: Serum (Xfer Records)"), kind (VST/VSTi/VST3/VST3i/CLAP/CLAPi/JS), is_instrument (bool), filename.

Result is paginated. The response wraps the page in {total, count, offset, has_more, next_offset, items}.

reaper_list_tracksA

List all tracks with index, name, volume (dB), pan, mute/solo/arm state, and FX count.

Track index is 0-based and is the value every other track tool expects.

reaper_get_track_stateA

Return name, volume (dB), pan, mute/solo/arm, and FX count for a single track.

reaper_create_trackA

Insert a new track. Returns the new track's state including its assigned index.

reaper_delete_trackA

Delete the track at the given index. This is destructive and shifts later indices down by one.

reaper_rename_trackA

Rename a track. Returns the updated track state.

reaper_set_track_volume_dbA

Set a track's volume fader in dB. Returns the updated track state.

reaper_set_track_panA

Set a track's pan. Returns the updated track state.

reaper_set_track_muteA

Mute or unmute a track. Returns the updated track state.

reaper_set_track_soloA

Solo or un-solo a track. Returns the updated track state.

reaper_get_master_trackA

Return the master track's volume (dB), pan, mute state, and FX count.

reaper_set_master_volume_dbA

Set the master track's volume fader in dB.

reaper_list_track_fxA

List FX on a track with each FX's index, name, current preset, enabled state, and param count.

FX index is 0-based within the track's chain and is what the other FX tools expect.

reaper_add_fx_to_trackA

Add an FX to the end of a track's chain.

Returns {track_index, fx_index, name}. If the plugin can't be found the call fails — re-check the exact string via reaper_list_installed_fx.

reaper_remove_fxA

Remove an FX from a track's chain. Indices of later FX shift down by one.

reaper_set_fx_enabledA

Enable or bypass an FX (enabled=False bypasses it without removing it).

reaper_list_fx_presetsA

List every preset available for an FX instance, plus the current selection.

Returns {count, current_index, presets:[{index, name}]}.

reaper_set_fx_presetA

Switch an FX to a preset by name or by index.

Provide exactly one of preset_name or preset_index. Use reaper_list_fx_presets to discover valid values.

reaper_list_fx_paramsA

List an FX's parameters with current value, min, and max.

Returns a list of {index, name, value, min, max}. Parameter values are plugin-native (often normalised 0..1) — read min/max before setting.

reaper_set_fx_paramA

Set an FX parameter by index or name. Returns {param_index, value, min, max}.

reaper_add_envelope_pointA

Insert one automation point on a track volume/pan or FX-parameter envelope.

Tip: if the envelope can't be obtained, set the track to read mode first via reaper_set_track_automation_mode(track_index, 'read').

reaper_clear_envelopeA

Delete every point on an envelope. Same target semantics as reaper_add_envelope_point.

reaper_set_track_automation_modeA

Set a track's automation mode (trim/read/touch/write/latch/latch_preview).

Set to 'read' for written envelopes to play back.

reaper_set_track_record_armA

Arm or disarm a track for recording. Returns the updated track state.

reaper_set_track_record_inputA

Set a track's record input (audio channel or encoded MIDI input).

reaper_transport_playA

Start playback from the edit cursor.

reaper_transport_stopA

Stop the transport.

If Reaper is recording, the call is refused unless force=true — this avoids ending a take without the user's go-ahead. Ask the user first, then retry with force=true.

reaper_transport_recordA

Start recording on all armed tracks.

reaper_transport_pauseA

Pause the transport, keeping the cursor where it is.

reaper_set_cursorA

Move the edit cursor to a time in seconds. Returns the resulting cursor position.

reaper_set_tempoA

Set the project tempo in BPM. Returns the resulting tempo.

reaper_set_time_selectionA

Set the project time selection (the loop/render range) to [start, end] seconds.

reaper_clear_time_selectionA

Clear the project time selection.

reaper_set_loop_enabledA

Enable or disable looped playback (repeat over the time selection).

reaper_list_markersA

List all project markers and regions.

Each entry: {index, is_region, position_sec, region_end_sec, name, id}. id is the marker/region's displayed number — pass it to delete/goto tools.

Known limitation: name may come back empty even when a marker has a name. REAPER's Python ReaScript build does not marshal the name out-parameter of EnumProjectMarkers, so names set via reaper_add_marker/reaper_add_region show in Reaper's UI but can't be read back here. Identify markers by position/id.

reaper_add_markerA

Add a project marker at a time. Returns {id, is_region, position_sec}.

reaper_add_regionA

Add a project region spanning [start, end] seconds. Returns {id, is_region, position_sec}.

reaper_delete_markerA

Delete a project marker or region by its id.

reaper_goto_markerA

Move the edit cursor to a marker by its id.

reaper_list_sendsA

List the sends originating from a track.

Each entry: {send_index, dest_track_index, dest_track_name, volume_db, pan, muted}.

reaper_add_sendA

Create a send from one track to another. Returns the new send's index.

reaper_set_send_volume_dbA

Set the level of a track send in dB.

reaper_remove_sendA

Remove a send from a track. Later send indices shift down by one.

reaper_list_itemsA

List the media/MIDI items on a track.

Each entry: {index, position_sec, length_sec, muted, take_name}. Item index is 0-based within the track and is what the item tools expect.

reaper_insert_midi_itemA

Create an empty MIDI item on a track spanning [start, end] seconds.

Returns {item_index, position_sec, length_sec}. Add notes with reaper_add_midi_note.

reaper_add_midi_noteB

Insert a single MIDI note into an existing MIDI item on a track.

reaper_delete_itemA

Delete a media/MIDI item from a track. Later item indices shift down by one.

reaper_render_projectA

Render the project to disk using Reaper's most recent render settings.

This reuses whatever output path, bounds, and format were last configured in Reaper's Render dialog — set those up once manually first. Writes a file but does not modify the project.

reaper_analyze_mixA

Analyze a rendered mix: local DSP measurements + AI listening feedback.

Two layers. Local DSP (numpy/pyloudnorm) measures the trustworthy numbers — integrated LUFS, loudness range, sample peak, crest factor, clipped samples, per-band frequency balance, and stereo correlation/width/balance. Then (unless include_ai=false) Gemini is given BOTH the audio file and those measurements and returns grounded mix/master feedback with concrete REAPER fixes.

Requires the optional deps: pip install -e .[analyze], and GEMINI_API_KEY in the environment for the AI layer. Pass a reference_path to compare against a pro track.

This reads files and calls an external API; it never modifies the Reaper project.

reaper_analyze_projectA

One-call mix check: quick-export the master mix, then analyze it.

This is the convenient path — no need to pre-configure the render dialog or pass a file. It tells Reaper to render the master mix to a temp file (reusing your project's render codec, e.g. WAV), measures it with local DSP (LUFS, peak, crest, per-band balance, stereo width), then — unless include_ai=false — uploads a small compressed proxy plus those measurements to Gemini for grounded feedback.

Requires the optional deps (pip install -e .[analyze]) and GEMINI_API_KEY for the AI layer. For best results set the project's render source to 'Master mix' and format to a single audio file. Writes a temp render but does not modify the project.

reaper_run_actionA

Trigger any Reaper action by numeric command ID (Main_OnCommand).

The escape hatch for actions not yet wrapped as dedicated tools. Look up IDs in Reaper's Actions list (right-click an action → Copy selected action command ID). Marked destructive because arbitrary actions can do anything.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/T-Rzeznik/reaper-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server