ReaperMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REAPER_MCP_PROFILE | No | Defines the tool profile: full (default), composition, mixing, analysis, or minimal. | full |
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 |
|---|---|
| item_split_at_transientsA | Slice an audio item at every detected transient. Uses REAPER's native transient detection (action 40310). Sensitivity is controlled by REAPER's project settings (Options → Preferences → Project → Item handling → Transient detection sensitivity), not by this tool — set it once in REAPER and it applies to every call. Args: item_index: Global 0-based item index of the source audio item. Returns:
chops_created: number of new items created from the split.
chops_total: total items now spanning the original time range.
chops: list of |
| item_split_at_positionsA | Slice an item at a list of absolute project-time positions. For grid-based or hand-picked chopping where transient detection isn't right. Pass positions in seconds; positions outside the item's range are silently ignored. Args:
item_index: Global 0-based item index.
positions: JSON array of absolute project-time positions
(seconds). Example: Returns the resulting chops in playback order with their indices, positions, lengths, and offset relative to the original item start. |
| take_set_pitchA | Pitch-shift a take by N semitones (no time change). The core of "tune a chop to a chord tone". Pass positive values to
shift up, negative for down. Range is roughly -60 to +60 (REAPER
clamps extremes). Half-semitone values work ( Pitch quality depends on REAPER's per-take pitch shift mode setting (Item Properties → Take pitch shift mode). For vocals, "Élastique Pro Soloist" preserves formants well. Set it once in REAPER's project defaults and it applies to every chop. Args: item_index: Global 0-based item index. semitones: Pitch shift in semitones. Float. Default 0 (no change). take_index: 0-based take index, or -1 for the active take. |
| take_set_playrateA | Time-stretch a take by changing its playrate. With After changing the rate, the item's visible length in the timeline
does NOT auto-resize. Call Args: item_index: Global 0-based item index. rate: Playback rate. 1.0 = normal, 0.5 = half speed, 2.0 = double. Range 0.05 to 16.0. preserve_pitch: Time-stretch without pitch change. Default True. |
| take_set_reversedA | Reverse an item's audio. Uses REAPER's "Item: Reverse items as new take" action — the new
reversed take becomes the active one, the original take is kept
(item now has 2 takes). To revert, switch back to the original
take via Useful for: reverse-cymbal-into-downbeat fills, breath-in vocal FX, glitchy chop reversals (Skrillex / Flume style). Args: item_index: Global 0-based item index. |
| item_duplicateA | Copy an item N times at fixed spacing. Each copy is a full clone — same source, same take properties (pitch, playrate, FX, fades). Used for the Porter Robinson 1/16 stutter, EDM build-up risers, percussive vocal repeats. With default spacing (0), copies are placed back-to-back at the
original item's length. For tight stutters, pass a small spacing
like Args: item_index: Global 0-based source item index. count: Number of copies to make. Range 1-100. spacing_sec: Time between copy starts in seconds. 0 = use item length (back-to-back). Default 0. Returns the new clones with their |
| analyze_chop_setA | Inspect a list of chops and classify each by duration. Pure-Python helper that calls Duration classes: hit — < 150 ms (drum hit, consonant burst) staccato — 150-400 ms (short syllable, good for stutters) syllable — 400 ms-1 s (full syllable / word) sustain — > 1 s (phrase / vowel held) Args: item_indices: JSON array of item indices. Up to 200 chops. |
| arrange_chops_to_chord_tonesA | [NICHE] Retune each chop to a chord tone. ⚠️ WARNING: This is NOT how professional vocal chops are made.
Per-slice chord-tone retuning smears vocal formants and sounds
unnatural. This tool is kept for stylized experimental use (e.g., glitch / granular / heavily-processed chop effects where the pitched-up- demon-voice sound is the desired character). DO NOT use it as your default chop workflow. Walks the chops in playback order. For each chop, determines
which chord it falls within (based on its time position) and
picks a chord tone according to Args:
item_indices: JSON array of chop item indices (in playback order).
Typically the |
| chop_pipelineA | End-to-end vocal-chop arrangement (redesigned for pro workflow). Produces a contiguous, key-matched, professionally-structured chop arrangement on a new track. Follows researched EDM vocal-chop rules: • CHOPS ARE CONTIGUOUS — every slot filled wall-to-wall, no silence gaps. Slot length is determined by the grid. • PITCH IS UNIFORM — the whole chop set is transposed ONCE to match the track key (source_key → target_key). No per-slice chord-tone retuning; that destroys formants and sounds bad. • LAYER STACKS ARE SEPARATE TRACKS — octave/fifth layers are duplicate child tracks at reduced volume (not overlays that smear the lead). • BAR-LEVEL VARIATION — each bar pulls a different permutation of source slices, so the arrangement doesn't just loop. REQUIREMENT for clean pitch: set REAPER's per-item pitch-shift mode to "élastique Pro Soloist Monophonic" (Project Settings → Media Item Defaults, or per-take in Item Properties). Raw pitch shift without formant preservation destroys vocal character. The tool does not auto-set this (requires REAPER user config). Modes:
• Args:
vocal_item_index: Global 0-based index of the vocal item.
chord_progression: Chord list (required for |
| stack_chop_layersA | For each chop, create overlay copies at parallel pitch intervals. The classic "future bass / Porter Robinson" harmonized chop stack:
each chop becomes a 3-voice cluster — original (root) + 5th
( Each layer is a clone placed at the EXACT same position as the
source on the SAME track, with Args:
item_indices: JSON array of chop indices to stack. Up to 50.
intervals_semitones: JSON array of pitch shifts to add. Default
Note: stacking creates many overlapping items. Best applied to a SUBSET of chops (e.g., the standout chops in your sequence) rather than every chop, or REAPER's mixer will get crowded. |
| wipe_all_midiA | Wipe all MIDI items and reset composition state. Tracks can compose again after. Only deletes items whose active take is MIDI — audio items on the same tracks are left untouched. On a full wipe (tracks omitted), also clears all markers and regions. Args: tracks: JSON array of track indices e.g. "[0,1,2]", or empty for all. |
| reset_compositionA | Unlock compose_arrangement without deleting MIDI. Use wipe_all_midi to also delete. |
| configure_tracksA | Batch set volume_db, pan, color, mute, solo, name on multiple tracks. Args: tracks: JSON array. Each: {"track_index":0, "volume_db":-3.0, "pan":-0.5, "color":[200,90,60], ...}. Only track_index required. color is [r, g, b], each 0-255 (not a {"r":..} object, not a hex string). |
| setup_routingA | Batch create sends with optional volume/pan. Args: sends: JSON array. Each: {"source_track":0, "dest_track":10, "volume_db":-6.0, "pan":0.0}. |
| add_markers_batchB | Batch add markers/regions. Args: markers: JSON array. Markers: {"position":0,"name":"Intro"}. Regions: {"start":0,"end":8,"name":"V1","is_region":true}. color optional: [r, g, b], each 0-255. |
| rewrite_ccA | Replace CC automation in a time range, leaving notes untouched. Write curves as explicit CC points — there are no curve templates. For a crescendo, insert a series of points with rising cc_value; the resolution is up to you (e.g. one point every half bar). Args: tracks: JSON array. Each: {"track_index":0, "ccs":[{"cc_number":1, "cc_value":64, "position":0.0, "channel":0}]}. Or "all". position is in seconds. Entries missing any of cc_number/ cc_value/position are skipped silently, so a malformed array still reports success with ccs_inserted: 0 — check that count rather than the success flag. start_time: Range start in seconds. end_time: Range end in seconds. |
| edit_sectionA | Clear+replace notes/CCs in a time range. For CC-only fixes, use rewrite_cc instead. Args: tracks: JSON array. Each: {"track_index":0, "notes":[...], "ccs":[...]}. Omit notes/ccs to just clear. Or "all". start_time: Range start in seconds. end_time: Range end in seconds. mode: "all" (default), "ccs_only", or "notes_only". trim_item: Shorten item to start_time (for cutting endings). |
| setup_fx_chainA | Batch add/configure FX across tracks. Replaces many fx_add + fx_set_param calls. Args: tracks: JSON array. Each: {"track_index":0, "fx_chain":[{"name":"ReaEQ", "params":{"Gain":0.5}, "preset":"..."}]}. fx_chain modes: "name" adds new, "fx_index" targets existing, "add_mode":"find_or_add" reuses. Params by name (fuzzy) or params_by_index. Values 0.0-1.0. |
| setup_effect_busA | Create effect return bus (track + FX + sends) in one call. Args: bus_name: Bus track name. fx_chain: JSON array of FX (same format as setup_fx_chain). sends_from: JSON array: [{"source_track":0, "volume_db":-6.0}]. bus_position: Track insert position (-1 = end). bus_volume_db: Bus volume in dB. bus_color: Optional JSON color "[r,g,b]". |
| get_track_instrumentsA | List all tracks with detected VSTi names and item counts. Call this before any composition work so you know which track holds
which instrument. Each track's |
| analyze_scoreA | Dump current MIDI data: per-track notes, CCs, timing stats. Use this to inspect what's in the project before editing, or to verify what you just inserted. Args: tracks: JSON array of track indices e.g. [0,1,2], or "all". start_time: Start in seconds (default 0). end_time: End in seconds (-1 = project end). |
| compose_arrangementA | Batch-insert MIDI from shorthand or JSON — guarded for small edits only. Accepts either shorthand notation (e.g. All note/CC times (shorthand durations, JSON start/end) are RAW SECONDS,
not beats or quarter-notes, and are independent of the project's tempo —
there is no bpm parameter to set. If you need notes aligned to bars, get
the real tempo from Blocked at >2 tracks or >30 total notes to prevent accidental mass inserts — for larger writes, call this repeatedly in smaller chunks, or use the batch MIDI tools directly. Args: tracks: JSON tracks array or shorthand string. clear_existing: True to wipe target tracks before inserting. |
| demo_edm_projectA | Scaffold a minimal EDM test project with 7 tracks, ReaSynth on each, and 8 bars of MIDI. Use this to verify 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 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:
Args:
track_index: Track.
points: JSON array of |
| 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. The name is passed straight to REAPER's TrackFX_AddByName, which resolves it fuzzily. Plugin format cannot be selected: pass the bare name only. The display prefixes from fx_list_installed ("VSTi: ", "VST3i: ") are not format selectors — they are matched as part of the fuzzy string and silently resolve to whichever format REAPER prefers, normally VST3. REAPER's own "vst:"/"vst3:" prefixes and the raw .dll filename both fail outright with FX not found. So when a plugin is installed as both VST2 and VST3, fx_list_installed will list both but only one is reachable here. Args: track_index: 0-based track index. fx_name: Bare plugin name (e.g. "ReaEQ", "ReaComp", "ARIA Player"). |
| 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:
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.
full_list: Return the complete |
| set_fx_preferencesA | Save user FX preferences — per-category plugin overrides. Stored at Args:
preferences: JSON object mapping categories to plugin names, e.g.
Categories: eq, compressor, limiter, reverb, deesser, gate, saturator,
multiband, stereo. Plugin names must match what REAPER
reports (check |
| item_get_allA | Get all media items. Filter by track or -1 for all. Each item includes Args: track_index: Track filter (-1=all). max_results: Max items to return (default 200, hard ceiling 2000). A chop-heavy project can have hundreds of items — narrow with track_index if the result is truncated. |
| item_get_infoA | Get detailed info for one item. Includes 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. Prefer items_apply for multiple. Args: item_index: Item index. |
| item_moveB | Move item to new position. Prefer items_apply for multiple. Args: item_index: Item index. new_position: New start in seconds. |
| item_set_lengthA | Set item length. Prefer items_apply for multiple. Args: item_index: Item index. length: Length in seconds. |
| item_set_volumeA | Set item volume in dB. Prefer items_apply for multiple. Args: item_index: Item index. volume_db: dB (0=unity). |
| item_set_muteA | Mute/unmute item. Prefer items_apply for multiple. Args: item_index: Item index. mute: True=mute. |
| item_set_fadeA | Set fade in/out. -1=unchanged. Prefer items_apply for multiple. 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. |
| items_applyA | Batch set position/length/volume_db/mute/fade_in/fade_out, or delete, across many items in one call. Args: entries: JSON array. Each: {"item_index":0, "volume_db":-3.0, "fade_in":0.05}. Or {"item_index":5, "delete":true}. Only item_index required. Non-delete changes apply first (in the order given); deletes apply last, in descending item_index order, regardless of input order — this avoids a delete shifting the indices of items processed later in the same batch. A bad item_index is recorded in the response's errors array and does not abort the rest of the batch. |
| 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 Args:
path: Absolute folder path (e.g., Returns a structure with:
Files without parseable metadata are still listed; their fields
are null. Pair with |
| detect_common_bpmA | Given a JSON array of file paths, return the most common BPM parsed from their filenames. Useful after 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_allA | Get all markers and regions. For just the region list plus a cheap project overview, prefer project_get_overview() instead. |
| 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. Prefer markers_apply for multiple. Args: marker_index: Index from marker_get_all. |
| marker_editA | Edit marker/region. Prefer markers_apply for multiple, or to also edit a region's end/color. 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. |
| markers_applyA | Batch edit (name/position/start/end/color) or delete markers and regions in one call. Args: entries: JSON array. Each: {"marker_index":0, "name":"Line 12"}. Region bounds: {"marker_index":5, "start":10.0, "end":14.5}. Point marker position: {"marker_index":2, "position":8.0}. Color: {"marker_index":7, "color":[200,90,60]} (0-255 each). Delete: {"marker_index":9, "delete":true}. Only marker_index required. start/end only apply to regions, position only to point markers — a mismatched field (e.g. start/end on a point marker) is silently ignored, not an error. Non-delete changes apply first (in the order given); deletes apply last, in descending marker_index order, regardless of input order — this avoids a delete shifting the indices of markers processed later in the same batch. A bad marker_index is recorded in the response's errors array and does not abort the rest of the batch. |
| 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 |
| 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 whole curves use the 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. |
| engine_fix_mixA | Rescue a muddy / harsh / unbalanced mix with a single call. Applies corrective EQ per track based on what the track sounds like
(bass / vocal / lead / drum / other), classified by name (and by role
if Each track gets:
Plus optional master chain: bus glue comp + brick-wall limiter at -1 dB. Call this when a mix sounds "stuffy" or "harsh" and you want a quick
corrective pass before fine-tuning. Doesn't replace Args: style: Optional v2 catalog style (e.g. melodic_dubstep) for better track classification via aliases. Empty = keyword fallback. include_master: Also apply the emergency master chain (default True). |
| engine_masterA | Apply a professional mastering chain to the master bus for the given style. Chain applied (in order): HP 25Hz → bus glue comp → tonal shelf EQ → stereo width → brick-wall limiter. Targets per-style LUFS and true-peak ceiling. Auto-detects FabFilter Pro-L 2 / Pro-C 2 / Pro-Q 3; falls back to REAPER stock (ReaLimit / ReaComp / ReaEQ). Supported styles: melodic_dubstep, big_room, future_bass, future_house, deep_house, tech_house, progressive_house, dubstep, trap, drum_and_bass, trance, modern_pop, dance_pop, indie_pop, rnb_pop, alt_rock, classic_rock, pop_rock, hard_rock, punk, post_rock, synthwave, lofi, ambient, hiphop, swing_jazz, jazz_fusion, latin_jazz, classical_chamber, cinematic_trailer, ambient_orchestral, classic_funk, motown_soul, neo_soul, disco_funk (35 total). Any other name falls through to the legacy per-instrument orchestral master chain. Args: style: Style name from the catalog (required). clean: Remove previously added master FX before applying (default True). |
| engine_mixA | One-click professional mix pipeline. Applies volume staging, pan, EQ, compression, reverb buses, and sidechain. Two paths depending on the style:
Auto-detects FabFilter (Pro-Q 3, Pro-C 2, Pro-R) or falls back to REAPER stock (ReaEQ, ReaComp, ReaVerbate). Args: style: Style name. For v2: melodic_dubstep, big_room, future_bass, modern_pop, alt_rock, swing_jazz, classical_chamber, classic_funk, etc. (35 total). Empty, or any name not in the v2 catalog, → legacy per-instrument path. clean: Remove existing mix FX before applying (default True). |
| create_drum_patternA | Create a drum pattern from step-sequencer shorthand. Each line of Example — standard 16-step rock beat: Defaults: 16 steps per bar = 1/16-note grid. 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:
Supported qualities: maj, m/min, dim, dim7, aug, sus2, sus4, 6, m6, 7, m7, maj7, add9, 9, m9, maj9, 11, m11, 13, m13.
Pass 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:
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):
Requires REAPER 5.x or newer. For export to audio files on disk, use
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). For post-production work, prefer project_get_overview() instead — one call for this plus the region list, change_count, and a selection summary, versus composing several calls yourself.
|
| project_get_change_countA | Cheap check for whether the project has changed since you last looked. Returns a monotonically increasing counter that bumps on any edit. Compare against a value you saved earlier to decide whether you need to re-fetch heavier data (track_get_all, item_get_all) instead of blindly re-querying every turn. |
| project_get_overviewA | One cheap call for post-production awareness: counts, region list, change_count, and a selection summary. Bundles what project_get_info + marker_get_all + project_get_change_count + selection_get_time + selection_get_selected_tracks + selection_get_selected_items would otherwise take 6 separate calls to assemble. The selection summary returns indices and counts only (not full track/item detail) to stay genuinely lightweight — call selection_get_selected_tracks/items directly if you need full detail on what's currently selected. |
| 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_asA | Save project to new path. This project's active file becomes
Args: path: Absolute .rpp path. |
| project_backupA | Save a snapshot copy to Args: path: Absolute .rpp path for the backup copy. |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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