Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
REAPER_MCP_PROFILENoDefines the tool profile: full (default), composition, mixing, analysis, or minimal.full

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
demo_edm_projectA

Scaffold a minimal EDM test project with 7 tracks, ReaSynth on each, and 8 bars of MIDI.

Use this to verify engine_mix / engine_master / setup_sidechain actually work end-to-end: after this call, you should immediately be able to run:

engine_mix("melodic_dubstep")    # applies EQ/comp/reverb/sidechain
engine_master("melodic_dubstep") # master chain on master bus
transport_play()                  # hear it

Tracks created: Kick Drum, Snare, Closed Hat, Sub Bass, Pad, Lead Synth, Vocal Chop. Each gets REAPER's stock ReaSynth (always available) + a simple 8-bar pattern.

Args: clean_first: Wipe existing MIDI + markers first (default True). bpm: Project BPM (default 140 — matches melodic_dubstep's half-time feel).

envelope_get_pointsA

Read automation points from a track or FX parameter envelope.

Track envelopes: "Volume", "Pan", "Mute", "Width", "Volume (Pre-FX)", "Pan (Pre-FX)", "Width (Pre-FX)".

For FX param envelopes: pass fx_index and param_index (get these from fx_get_params). envelope_name is ignored when FX param is set.

Args: track_index: Track. envelope_name: Named track envelope (ignored if fx_index+param_index set). fx_index: FX slot index, -1 to target track envelope instead. param_index: FX parameter index, -1 to target track envelope instead. max_results: Cap on returned points (default 2000, prevents context blow-up).

envelope_add_pointsA

Batch-insert automation points into an envelope.

Point shape codes: 0=linear, 1=square, 2=slow start/end, 3=fast start, 4=fast end, 5=bezier. Tension -1 to +1 for curve skew.

Value units:

  • Volume track env: linear gain where 1.0 = unity (0 dB), 2.0 ≈ +6 dB, 0.5 ≈ -6 dB. Use 10**(db/20) to convert from dB.

  • Pan: -1.0 (hard left) to +1.0 (hard right).

  • Mute: 0.0 or 1.0.

  • FX params: 0.0-1.0 normalized (same as fx_set_param).

Args: track_index: Track. points: JSON array of {"time":s, "value":v, "shape":0, "tension":0}. envelope_name: Track envelope name (ignored with FX param). fx_index / param_index: Target FX param envelope (-1 for track env). create: If the envelope doesn't exist yet, create it (default True).

envelope_clear_rangeA

Delete all envelope points in a time range.

Args: track_index: Track. start_time: Range start in seconds (>= 0). end_time: Range end in seconds (> start_time). envelope_name: Track envelope name. fx_index / param_index: Target FX param envelope (-1 for track env).

fx_addA

Add FX plugin to track. Prefer setup_fx_chain for batch operations.

Args: track_index: 0-based track index. fx_name: Plugin name (e.g. "ReaEQ", "ReaComp").

fx_removeB

Remove FX from track chain.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index.

fx_get_chainC

Get FX chain for a track (names, enabled, presets, param counts).

Args: track_index: 0-based track index.

fx_get_paramsA

Get all parameters of an FX plugin (names, values, formatted display).

Automatically filters out junk params (Internal, MIDI CC, unused FabFilter bands) to keep context size small.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index.

fx_set_paramA

Set FX parameter by index. Prefer setup_fx_chain for batch operations.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index. param_index: 0-based parameter index. value: 0.0-1.0 normalized.

fx_set_param_by_nameA

Set FX parameter by name (fuzzy match).

Args: track_index: 0-based track index. fx_index: 0-based FX chain index. param_name: Parameter name or partial match. value: 0.0-1.0 normalized.

fx_enableA

Enable an FX plugin.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index.

fx_disableB

Bypass an FX plugin.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index.

fx_show_uiA

Open FX plugin UI window.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index.

fx_get_presetA

Get current preset name and count.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index.

fx_set_presetB

Load preset by name.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index. preset_name: Preset name.

fx_navigate_presetB

Step to next/previous preset.

Args: track_index: 0-based track index. fx_index: 0-based FX chain index. direction: 1=next, -1=previous.

fx_get_instrumentA

Find VSTi instrument on track. Returns index + params, or -1 if none.

Args: track_index: 0-based track index.

fx_moveA

Move FX to different position in chain.

Args: track_index: 0-based track index. fx_index: Current FX index. new_index: Target position.

fx_renameA

Rename an FX instance's display label (cosmetic — plugin unchanged).

Use to tag FX you've added yourself so later cleanup can find them without affecting other FX on the track. The mix engine uses this internally to prefix all its additions with "[MIX] ".

Args: track_index: 0-based track index. fx_index: FX slot within the chain. new_name: New display name. Max 1000 characters.

Requires REAPER 6.37+ (for TrackFX_SetNamedConfigParm with "renamed_name"). Older REAPER versions will error out cleanly.

fx_list_installedA

List every FX plugin installed in REAPER, grouped by category.

Uses REAPER's EnumInstalledFX API. Returns:

  • all_installed: raw list of plugin names

  • best_eq / best_compressor / best_reverb / best_limiter / best_deesser / best_gate / best_saturator / best_multiband / best_stereo: highest-ranked plugin per category that the user has

  • racks_detected: any rack-style plugins (StudioRack, PatchWork, Lion, Multipass, Snap Heap) — the MCP does NOT configure modules inside racks, so avoid routing auto-mixing through them

  • user_overrides: current contents of the preferences file

Use this BEFORE running mix pipelines to know what the user has. If the user has premium plugins (FabFilter, Waves, iZotope, Valhalla, Softube, etc.), prefer those over REAPER stock.

Args: category: Optional — filter output to a single category: "eq", "compressor", "limiter", "reverb", "deesser", "gate", "saturator", "multiband", "stereo". Empty returns full inventory.

set_fx_preferencesA

Save user FX preferences — per-category plugin overrides.

Stored at %APPDATA%/reaper_mcp/fx_prefs.json (Windows) or ~/.reaper_mcp/fx_prefs.json (macOS/Linux). Mix pipelines consult this before auto-picking.

Args: preferences: JSON object mapping categories to plugin names, e.g. {"eq": "FabFilter Pro-Q 3", "compressor": "Waves SSL G-Master Buss Compressor", "reverb": "Valhalla VintageVerb", "limiter": "FabFilter Pro-L 2"}

Categories: eq, compressor, limiter, reverb, deesser, gate, saturator, multiband, stereo. Plugin names must match what REAPER reports (check fx_list_installed first).

item_get_allB

Get all media items. Filter by track or -1 for all.

Args: track_index: Track filter (-1=all).

item_get_infoC

Get detailed info for one item.

Args: item_index: Item index.

item_selectB

Select/deselect an item.

Args: item_index: Item index. selected: True=select. exclusive: Deselect others first.

item_splitC

Split item at position.

Args: item_index: Item index. position: Split point in seconds.

item_deleteC

Delete an item.

Args: item_index: Item index.

item_moveB

Move item to new position.

Args: item_index: Item index. new_position: New start in seconds.

item_set_lengthC

Set item length.

Args: item_index: Item index. length: Length in seconds.

item_set_volumeA

Set item volume in dB.

Args: item_index: Item index. volume_db: dB (0=unity).

item_set_muteB

Mute/unmute item.

Args: item_index: Item index. mute: True=mute.

item_set_fadeA

Set fade in/out. -1=unchanged.

Args: item_index: Item index. fade_in: Seconds, 0 or more (-1=keep, max 60s). fade_out: Seconds, 0 or more (-1=keep, max 60s).

item_insert_mediaB

Insert audio/MIDI file into track.

Args: track_index: Target track index. path: Absolute file path. position: Insert position in seconds.

item_create_midiA

Create an empty MIDI item on a track. Returns the item's global index.

Args: track_index: 0-based track index. position: Item start time in seconds (>= 0). length: Item length in seconds (> 0).

item_move_to_trackC

Move item to different track.

Args: item_index: Item index. dest_track_index: Destination track index.

scan_audio_folderA

Walk a folder for audio loops and parse metadata from filenames.

Returns every audio file (.wav, .mp3, .flac, .aif, .aiff, .ogg, .m4a) with BPM, musical key, and role (kick / bass / pad / lead / fx / …) extracted from the filename. Plus a summary of distributions so the AI can quickly decide on a target BPM / key before picking loops.

Args: path: Absolute folder path (e.g., D:/Music Production/Chillstep Express). recursive: Walk subfolders too. Default True. max_files: Stop after this many files. Default 500; max 5000.

Returns a structure with:

  • folder: resolved absolute path

  • total_files: how many matched

  • truncated: True if max_files hit before end

  • summary: BPM / key / role distributions + parse-failure counts

  • loops: list of { path, filename, duration_sec, size_mb, parsed: { bpm, key, role } }

  • hint: a one-line suggestion for the AI's next call

Files without parseable metadata are still listed; their fields are null. Pair with transport_set_bpm + load_loops to turn the selection into a working REAPER session.

detect_common_bpmA

Given a JSON array of file paths, return the most common BPM parsed from their filenames.

Useful after scan_audio_folder when the AI has narrowed down a set of candidate loops and wants to confirm they agree on tempo before setting the project BPM.

Args: file_paths: JSON array of absolute paths.

Returns: detected_bpm: the most common value (int), or None if none found. bpm_votes: full distribution of BPMs across the set. confidence: fraction of files that agreed with the winner. hint: a one-line next-step suggestion.

load_loopsA

Batch-load audio loops into REAPER, auto-creating tracks by name.

For each entry in the JSON array, find the named track (or create it if missing) and insert the audio file at the given position. Optionally sets the project BPM first so the loops align with the grid.

Args: loops: JSON array of entries. Each entry is an object with: - track_name (required): name of the destination track. Case-sensitive match against existing tracks; if no match, a new track is created with this name. - file_path (required): absolute path to the audio file. - position_sec (optional, default 0.0): start position in seconds within the project. project_bpm: If > 0, call transport_set_bpm before inserting media so the project's tempo grid is correct.

Returns a summary with tracks created vs reused, loops loaded, and per-entry errors (missing files, invalid entries) so the AI can recover without blowing up the whole batch.

marker_get_allB

Get all markers and regions.

marker_addA

Add marker. Prefer add_markers_batch for multiple.

Args: position: Seconds. name: Label. color_r: Red 0-255. color_g: Green 0-255. color_b: Blue 0-255.

marker_add_regionB

Add region. Prefer add_markers_batch for multiple.

Args: start: Start seconds. end: End seconds. name: Label. color_r: Red 0-255. color_g: Green 0-255. color_b: Blue 0-255.

marker_deleteA

Delete marker/region.

Args: marker_index: Index from marker_get_all.

marker_editA

Edit marker/region.

Args: marker_index: Marker index. position: New seconds, must be >= 0, or -1 to keep current position. name: New name (None=keep).

marker_go_toB

Move cursor to marker.

Args: marker_number: 1-based marker number.

midi_insert_noteA

Insert single note into existing item. For composing use compose_arrangement.

Args: item_index: MIDI item index. channel: 0-15. pitch: 0-127 (60=C4). velocity: 1-127. start_position: Start seconds. end_position: End seconds.

midi_insert_notes_batchA

Batch-insert notes into a MIDI item. Primary tool for writing MIDI.

Args: track_index: 0-based track index. item_index: MIDI item index on that track. notes: JSON array of {"pitch":60, "velocity":100, "start":0.0, "end":0.5, "channel":0}.

midi_get_notesA

Get notes in a MIDI item (capped at max_results to limit context size).

Args: item_index: MIDI item index. max_results: Max notes to return (default 500, hard ceiling 10000). Use midi_count_events for total count first if unsure.

midi_set_noteA

Edit existing note. -1 keeps current value.

Args: item_index: MIDI item index. note_index: Note index in item. pitch: 0-127 (-1=keep). velocity: 1-127 (-1=keep). start_position: Seconds (-1=keep). end_position: Seconds (-1=keep). channel: 0-15 (-1=keep).

midi_delete_noteC

Delete a note.

Args: item_index: MIDI item index. note_index: Note index.

midi_select_notesA

Select/deselect all notes in item.

Args: item_index: MIDI item index. select_all: True=select, False=deselect.

midi_delete_all_notesB

Clear all notes from a MIDI item.

Args: item_index: MIDI item index.

midi_insert_ccA

Insert single CC event. For composing use cc_curves in compose_arrangement or rewrite_cc.

Args: track_index: 0-based track index. item_index: MIDI item index. channel: 0-15. cc_number: 0-127. cc_value: 0-127. position: Seconds.

midi_delete_ccB

Delete a CC event.

Args: item_index: MIDI item index. cc_index: CC event index.

midi_get_note_namesA

Get MIDI note number to name mapping (C4=60, etc.).

midi_count_eventsB

Count notes, CCs, and sysex events in item.

Args: item_index: MIDI item index.

midi_sortC

Sort MIDI events by time.

Args: item_index: MIDI item index.

midi_set_item_extentsC

Set MIDI item boundaries in quarter notes.

Args: item_index: MIDI item index. start_qn: Start in quarter notes. end_qn: End in quarter notes.

create_drum_patternA

Create a drum pattern from step-sequencer shorthand.

Each line of pattern is one drum lane. Characters map to GM drums: k=kick, s=snare, h=hi-hat closed, o=hi-hat open, c=crash, r=ride, t=mid tom, l=low tom, i=high tom, p=clap, b=rimshot. . or space = rest. Any unknown character is ignored.

Example — standard 16-step rock beat:

k...k...k...k...
....s.......s...
h.h.h.h.h.h.h.h.

Defaults: 16 steps per bar = 1/16-note grid. channel=9 = GM drum channel. Pass item_index=-1 to auto-create a new MIDI item starting at start_qn.

Returns the item index and number of notes inserted.

create_chord_progressionA

Insert a chord progression as voiced MIDI notes.

Accepts chords separated by commas, pipes, dashes, or newlines: "Cm7, Fm7, Bb7, Eb" or "Am - F - C - G" or "Dm | G | Em | A".

Supported qualities: maj, m/min, dim, dim7, aug, sus2, sus4, 6, m6, 7, m7, maj7, add9, 9, m9, maj9, 11, m11, 13, m13.

base_octave=4 places C as MIDI 60 (middle C). Each chord occupies chord_duration_qn quarter notes (default 4 QN = one bar at 4/4).

Pass item_index=-1 to auto-create a MIDI item sized to the progression.

Returns the item index, number of chords placed, and any that failed to parse.

setup_parallel_compressionA

Create a NY-style parallel compression bus and route source tracks to it.

Classic use: crush drums or vocals with a heavy compressor on a parallel bus, then blend the crushed signal back in subtly with the dry. Adds perceived density and power without destroying transients.

Args: source_tracks: JSON array of track indices to send to the parallel bus, e.g. "[0,1,2]". bus_name: Display name for the created bus track. send_db: Send level from each source to the bus (0 = unity). return_db: Bus output (return) level. -8 is a typical subtle blend. threshold_db: Compressor threshold. -24 to -30 for heavy crush. ratio: Compression ratio. 10:1 or higher for that "smashed" sound. attack_ms: Fast (1-3 ms) for tight pumping. release_ms: Medium (80-120 ms) typical.

setup_drum_busA

Group drum tracks into a dedicated bus with a glue compressor.

This is a lighter-touch version of parallel compression — the bus is a full sub-mix of the drums, with gentle comp gluing them together rather than crushing them. Use this to control the drum group's overall level and apply shared processing (additional EQ, saturation) above it.

Args: source_tracks: JSON array of drum track indices, e.g. "[0,1,2,3]". bus_name: Display name for the drum bus. return_db: Bus output level (0 = unity, no change vs pre-bus). glue_threshold_db: Glue comp threshold (-10 to -14 typical). glue_ratio: Glue comp ratio (1.5-2.5 for gentle glue).

setup_vocal_chainA

One-call vocal-chain setup: HP + compressor + tonal EQ + plate reverb send.

Creates (or reuses) a dedicated plate reverb bus and sends the vocal track to it. Designed to give a polished broadcast-ready vocal with one call.

Chain applied in order on the vocal track:

  1. HP filter at hp_freq

  2. Mud cut: -2dB at 250Hz, Q=1.8

  3. Presence boost: +1.5dB at 4kHz, Q=1.2

  4. Harsh cut: -1.5dB at 3kHz, Q=3 (de-harsh)

  5. Air lift: +1.5dB high-shelf at 12kHz

  6. Compressor (3:1, -16dB threshold, vocal character) Plus a send to a plate reverb bus at plate_send_db.

Args: track_index: Track to process. hp_freq: High-pass cutoff in Hz. comp_threshold_db / comp_ratio: Compression settings. air_boost_db / mud_cut_db / harsh_cut_db: EQ amounts in dB. plate_bus_name: Bus track name (reused if exists). plate_send_db: Send level from vocal to the plate bus.

bounce_stemsA

Render the given tracks as individual audio stems (in-project).

Selects the tracks, then invokes REAPER's "Render tracks to stereo stem tracks" action (command ID 40892). Resulting stems are added to the project as new tracks.

IMPORTANT SIDE EFFECTS (undocumented by REAPER, confirmed by behavior):

  • The source tracks are AUTOMATICALLY MUTED after rendering so you can hear the stems instead of double-playback. If you need to compare or continue editing the originals, call track_set_mute(False) on them after this finishes.

  • New stem tracks are inserted below the source tracks.

  • Works with pre-fader + post-FX rendering (standard REAPER behavior).

Requires REAPER 5.x or newer. For export to audio files on disk, use project_export_audio instead — this tool is for in-project stemming.

Args: track_indices: JSON array of track indices to stem, e.g. "[0,1,2]". output_dir: Reserved (not currently used — in-project stemming). format: Reserved (not currently used).

project_get_infoA

Get project info (name, BPM, time sig, tracks, length, markers, render settings).

project_newA

Create a new empty REAPER project. Returns the new project info.

project_openB

Open .rpp project file.

Args: path: Absolute path to .rpp file.

project_saveA

Save the current project. Returns project info confirming the save.

project_save_asC

Save project to new path.

Args: path: Absolute .rpp path.

project_export_audioC

Render project to audio file.

Args: path: Output file path. format: wav, mp3, ogg, flac, or aiff.

project_undoC

Undo last action.

project_redoA

Redo last undone action.

project_get_notesB

Get the project notes/description text.

project_set_notesB

Set the project notes/description text.

Args: notes: The text to set as project notes (max 100 KB).

project_set_gridA

Set grid division (1.0=quarter, 0.5=eighth, 0.25=sixteenth).

Args: grid_division: Grid size in quarter notes.

midi_quantizeA

Quantize notes in a MIDI item to a time grid.

Grid math: for 120 BPM, a 16th note = 0.125s, 8th = 0.25s, quarter = 0.5s. At tempo T: grid_sec = (60 / T) * (4 / divisor). For 140 BPM 16ths: (60/140) * (4/16) = 0.107s.

Args: item_index: Global item index of the MIDI item. grid_seconds: Grid spacing in seconds (see above). strength: 0.0 (no quantize) to 1.0 (hard snap). 0.5 = pull halfway.

midi_humanizeA

Add random timing + velocity jitter to all notes in a MIDI item.

Makes programmed MIDI feel less mechanical. Typical values:

  • Strings / pads: timing_ms=20, velocity=10 (subtle)

  • Drums: timing_ms=8, velocity=15 (tighter timing, wider dynamics)

  • Piano: timing_ms=12, velocity=12

Args: item_index: Global item index of the MIDI item. timing_ms: Max random shift in milliseconds (each note ±timing_ms). 0 = off. velocity_amount: Max random velocity offset (each note ±amount). 0 = off.

project_set_ripple_modeA

Set REAPER's ripple edit mode.

In ripple mode, editing one item shifts everything after it (per-track or across all tracks). Critical for dialogue/podcast editing.

Args: mode: 0=off, 1=per-track ripple, 2=all-tracks ripple.

selection_set_timeC

Set time selection.

Args: start: Start seconds. end: End seconds.

selection_get_timeB

Get current time selection.

selection_set_loopC

Set loop points.

Args: start: Start seconds. end: End seconds.

selection_select_all_itemsA

Select all items.

selection_deselect_all_itemsA

Deselect all media items.

selection_select_all_tracksC

Select all tracks.

selection_deselect_all_tracksA

Deselect all tracks.

selection_get_selected_tracksA

Get a list of all currently selected tracks with their info.

selection_get_selected_itemsA

Get a list of all currently selected media items with their info.

send_createA

Create send between tracks. Prefer setup_routing for batch.

Args: source_track: Source track index. dest_track: Destination track index.

send_removeB

Remove a send.

Args: track_index: Source track index. send_index: Send index.

send_get_allC

Get all sends/receives on a track.

Args: track_index: Track index.

send_set_volumeB

Set send volume.

Args: track_index: Source track. send_index: Send index. volume_db: dB (0=unity).

send_set_panC

Set send pan.

Args: track_index: Source track. send_index: Send index. pan: -1.0 to 1.0.

send_set_muteA

Mute/unmute send.

Args: track_index: Source track. send_index: Send index. mute: True=mute.

send_get_routing_diagramA

Get full project routing diagram (sends, receives, outputs).

setup_sidechainA

Set up sidechain compression: source pumps/ducks the target.

Creates an aux send from source→target on channels 3/4, sets the target track to 4 channels, finds-or-adds a compressor on the target, pin-maps channels 3/4 to the compressor's sidechain input pins, and configures the compressor for pumping character.

Use cases:

  • EDM kick → bass (classic pumping bassline)

  • EDM kick → pads (breathing pad)

  • Vocal lead → synth pad (pad ducks under vocals)

  • Snare → reverb tail (dynamic reverb)

Args: source_track: Track whose signal drives the ducking (e.g. kick). target_track: Track that gets ducked (e.g. pad, bass). amount: 0.0 (subtle) to 1.0 (heavy pumping). Defaults to 0.7. Translates to threshold/ratio if those are not explicit. attack_ms: Comp attack. Fast (2-10ms) = tight pump. Default 5. release_ms: Comp release. 80-250ms for classic EDM pump. Default 180. ratio: Compression ratio. 0 = derive from amount. Typical 4:1 to 10:1. threshold_db: Threshold in dB. 0 = derive from amount. Typical -15 to -30. compressor_name: "ReaComp" (default), "FabFilter Pro-C 2", or any loaded compressor. fx_index: Use an existing FX by index on the target. -1 = find-or-add by name. send_db: Aux send level in dB (drives how hard the compressor reacts). 0 = unity.

Returns: {success, send_index, fx_index, compressor_name, threshold_db, ratio, ...}

item_take_listA

List all takes on an item with their active status.

Useful for vocal comping (multiple vocal passes as separate takes on one item) or alternate MIDI performances.

Args: item_index: Global item index.

item_take_set_activeA

Switch which take plays back on an item.

Args: item_index: Global item index. take_index: 0-based take index (from item_take_list).

item_take_addB

Add a new empty take to an item. Returns the new take's index.

Args: item_index: Global item index.

item_take_delete_activeA

Delete the currently active take from an item.

To delete a non-active take, first call item_take_set_active on it.

Args: item_index: Global item index.

track_template_saveA

Save a track's full state (FX chain, sends, volume/pan/color, automation) as a named template on disk.

Templates are stored at %APPDATA%/reaper_mcp/track_templates/<name>.template.

Args: track_index: 0-based track index to save. name: Template name (letters/digits/space/-_() only).

track_template_applyA

Apply a saved template to a track — replaces its FX chain + settings.

Args: name: Template name (from track_template_list). track_index: 0-based target track index.

track_template_listA

List all saved track templates.

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/xDarkzx/Reaper-MCP'

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