Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

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

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
mix_recipeB

Capture a local mix recipe, compare it with the current session, or rebuild it in a separate project tab. Original tab is restored. Media is excluded.

get_statusA

Check the bridge is alive inside REAPER (heartbeat, open project, whether risk-level-3 commands like audio capture are enabled). Call this first.

get_contextA

Read the open REAPER project: name, tempo, transport, cursor, time selection, every track (with FX names), markers, regions. Read-only. Run before ambiguous edits.

scan_fxA

Enumerate FX and their parameters — one track or the whole project (omit the track selector). Read-only. Lists only FX ALREADY LOADED in the project, NOT your installed-plugin library. Never use it to check whether a plugin exists before adding one — that is the fx add resolver's job.

get_fx_parametersA

Full parameter list for ONE FX (auto-paginated): index, name, normalized value, formatted display value. Scan before setting parameters; prefer param_index from this scan over name matching.

get_track_routingB

Read a track's routing: sends, receives, parent bus, volume, pan, phase, automation mode. Read-only.

transportB

Transport and project timing: play, stop, pause, record, set_cursor, set_time_selection, set_tempo. Mutations run in an undo block (Ctrl/Cmd+Z reverts).

trackA

Track operations: add, delete, rename, select, set_volume (dB), set_pan (-1..1), mute, solo, arm, set_color. Every mutation runs in a REAPER undo block. Supports dry_run. delete is destructive — confirm intent first.

fxA

FX chain operations: add (fuzzy plugin-name resolution against REAPER's installed-plugin cache), remove, bypass, move. Undo-block wrapped; supports dry_run (dry_run add needs the exact fx_name, no fuzzy resolution). TO ADD A PLUGIN, JUST RUN add IN ONE CALL. The resolver against the installed-plugin cache IS the check — a plugin being absent from the project is normal and expected (adding it is the whole point). Do NOT precheck with scan_fx, do NOT hedge about whether it's installed, do NOT narrate a plan. Target the master with track:"master". The user may be recording live; extra steps and preamble ruin the take.

set_fx_paramA

Set one FX parameter. Give normalized_value (0-1), formatted_value (e.g. '-16.00 dB', '80 Hz' — the bridge binary-searches the normalized value whose display matches), or relative ('+0.1'). Scan with get_fx_parameters first and prefer param_index. Undo-block wrapped; supports dry_run.

get_fx_param_automationB

Read one existing FX-parameter envelope without creating or arming it. Returns envelope state, inclusive-range points, optional neighbors, automation items, duplicate times, and a canonical content hash.

write_automationA

Write one FX-parameter envelope transactionally: snapshot, inclusive-range replacement, reread confirmation, and automatic rollback on any failure. A declared range always means replacement.

apply_automation_transactionA

Atomically write several FX-parameter envelopes (e.g. a stereo pair) in one undo block. Every envelope is snapshotted before mutation; any failure restores all of them and rereads the restoration before reporting.

markersC

Add or delete markers and regions (add_marker, add_region, delete_marker).

insert_midi_fileA

Insert a .mid file from disk onto a track at a position. Write the MIDI yourself, then insert. Never overwrites existing items unless replace_existing_in_range is true.

delete_items_in_rangeA

Delete media items in a time range on one track (or all_tracks). Destructive — confirm intent; undo-block wrapped; supports dry_run.

get_mix_snapshotA

Read a bounded page of tracks, master, GUIDs, routing, FX, optional parameter values and instantaneous peak meters in one hop. Use measure for integrated audio evidence.

batchA

Run several bridge commands as ONE undo block and one round-trip. commands: [{type, payload}]. Use for multi-step edits (e.g. several set_fx_param calls) so a failure stops cleanly and one Ctrl+Z reverts everything.

capture_track_audioA

Render a track capture to WAV and return its evidence scope. Only isolated_track with isolation_verified=true is per-track audio; item-based tracks can report a full_mix fallback. Gated: needs allow_audio_writes=true (or the legacy allow_risk_level_3 fallback) in bridge/bridge_config.json (python3 setup/install.py --allow-audio-writes writes it; capture does NOT need save_project or preference rights) AND the change applied by the reload_bridge command, or a REAPER relaunch — the flag is read once per bridge load. Synchronous — blocks the bridge for the render duration.

profile_trackA

Daemon Beater: profile a guitar stem bar by bar to plan drums — onset density, IOI regularity, decay ratio (palm-mute vs ringing), silence, low/bright balance, RMS/crest, a 16th accent grid, plus suggested section boundaries and repeated-section groups (A/B/A). READS THE SAVED .rpp FILE ON DISK, NOT REAPER's live project: unsaved edits are invisible, so on a dirty project this analyzes stale material. The result repeats that caveat — relay it, never present these numbers as the current session. Numbers, not verdicts: YOU propose the section labels and the user corrects them. Point it at the DI track, not the amped stem (distortion flattens the decay contrast) and say which you used. Slow (up to 600 s on a long stem) — window it with bars / start_bar / max_seconds.

riff_gridA

Step 1 of the drum workflow: read a guitar stem's transients into a proposed KICK GRID, printed at 100/50/30% attack strength. READS THE SAVED .rpp FILE ON DISK, NOT REAPER's live project — same stale-material caveat as profile_track, and the result carries it. This is a PROPOSAL the user corrects, not an auto-beat: transients say WHEN a note is picked, never whether it rings open or is palm-muted, so the percentile is an attack-strength heuristic. The 30% row is the sparse slam/breakdown feel (the default); the 100% row turns every pick attack into a kick (gallops/triplets). The grid is anchored to item time 0, so a stem whose downbeat sits a step off reads a 16th early — check the first render. Transcribe the row the user picks into a DSL, then insert_groove.

insert_grooveA

Render a drum DSL to MIDI and insert it on a track in ONE call — the engine (skills/drum-apparatus/) humanizes velocity, fatigue and timing at placement. Give the DSL EITHER inline as dsl_text OR as a file with dsl_path, never both. MUTATES the project (undo-block wrapped, one Ctrl/Cmd+Z reverts); supports dry_run. Refuses in ~0 s when the bridge heartbeat is dead, before generating anything. The rendered .mid is KEPT under rendered-midi/ — REAPER imports MIDI by reference on this build, so a deleted render leaves an empty take. Kit map: the DSL's own @map wins, then this map argument, then drum-config.json, then GM Standard. Track: named track, else drum-config.json's default, else REAPER's selected track. A bad DSL comes back as DSL_ERROR with the engine's own message — fix the DSL from it.

insert_riffA

Render ONE humanized guitar or bass part and insert it on a track (skills/guitar-apparatus/). Write the riff as bars_text — one 16-step bar per line, e.g. 'x.x.x.x.x.x.x.x.' — or point at a file with bars_file, never both; omit both to use the built-in 'demo' riff. Step alphabet: '.' rest, 'x' muted chug, 'X' accented root, 'o' let-ring root, 'g' ghost, '_' tie the previous note through this step, '~' slide into the next; UPPERCASE note names (E F G A B C D) are power chords in the key of E and lowercase are single notes, so case matters. Read skills/guitar-apparatus/SKILL.md for the full table before writing anything beyond chugs. Double tracking is two performances, not a copy: call this twice with DIFFERENT seeds for the left and right guitar. MUTATES the project (undo-block wrapped, one Ctrl/Cmd+Z reverts). Refuses in ~0 s when the bridge heartbeat is dead. The rendered .mid is kept under rendered-midi/, including on a dry run, because REAPER holds it by reference.

cut_bandA

Lay down or re-cut a whole four-track jam in ONE call: two double-tracked guitars, a bass locked to them, and drums. The two guitars get different seeds automatically, so the width is two performances rather than a stereo copy. By default it REPLACES what is on those four tracks from position — pass replace=false to append instead. Every leg is attempted even if an earlier one fails, and the result reports each leg separately, so a partial cut says which tracks landed. MUTATES the project (undo-block wrapped). Refuses in ~0 s when the bridge heartbeat is dead.

humanize_takeA

Put a dynamic contour and micro-timing into a drum take that is ALREADY on a track — the take is read, planned, and written back in place through index-addressed note edits, so stacked hits (flams, double triggers) are humanized too. The contour is always applied; amount only scales the random spread and timing looseness on top of it. Fills build as a crescendo peaking at the resolve, and the golden rule is enforced: no drum hits the same velocity twice in a row. Use follow_lead when the user has already humanized the opening bars BY HAND and wants that hand carried across the rest — it learns from their bars instead of applying the shared taste model, and fails if there is no flat region left to follow into. Prefer dry_run first: it plans and returns the full summary without writing. MUTATES the project (undo-block wrapped, one Ctrl/Cmd+Z reverts the whole pass).

verify_changeA

Run ONE mutating bridge command with MEASURED proof: capture the track, apply the command, capture the same frozen window again (track pinned by GUID), and report audio deltas (LUFS-I always; spectrum/peak/stereo with Post Mortem). This REALLY mutates the project (undo-block wrapped; one Ctrl/Cmd+Z reverts) — confirm intent first for destructive command types (delete_track, delete_items_in_range, remove_fx). Costs TWO renders; each blocks REAPER's UI for the capture duration. Statuses: VERIFIED (deltas are real measurements); REFUSED (refused before the mutation was sent, no mutation ran); UNVERIFIED (the project MAY have changed: applied, partial batch, rejected by the bridge with a possible mid-edit partial change, or unknown outcome; not measured either way; NOT rolled back; do NOT retry blindly). Relay the status honestly; never present UNVERIFIED as success. Needs allow_audio_writes (see capture_track_audio).

tune_paramA

Outcome-driven parameter search: iteratively set ONE FX parameter and re-measure until a target audio outcome is hit (e.g. bass LUFS-I down 3 dB), then report the measured result. Target: {"metric": "lufs_i"|"band_db", "delta": -3.0, "tolerance": 0.5, "band_hz": [lo,hi] for band_db (needs Post Mortem)}. delta is relative to the baseline measurement. ASSUMES the metric moves monotonically with the parameter (gain-like params); stops with NON_MONOTONE and restores the initial value when that is violated. EXPENSIVE: baseline + up to 5 iterations, each a render that blocks REAPER's UI — warn the user before calling. Each set is one undo point. On UNCONVERGED/UNREACHABLE the best-observed value stays applied and the result says so honestly; final always carries the READ-BACK live parameter state. Requires ONE FX selector (fx_name_contains or fx_index) AND one parameter selector (param_index or param_name_contains). Needs allow_audio_writes.

analyze_trackA

Post Mortem: capture one verified-isolated track and return MEASURED mix data (FX chain with values, routing, LUFS, true peak, crest, 1/3-octave spectrum, stereo image, silence fraction) for YOU to diagnose. Requires Post Mortem installed and capture enabled (see capture_track_audio gating). Full-mix fallbacks are refused. Park the edit cursor where the track is playing first.

compare_tracksA

Post Mortem cross-track masking: capture 2+ verified-isolated tracks and return their spectra plus a contested-band masking table for YOU to diagnose. Full-mix fallbacks are refused. Same requirements as analyze_track.

complete_postmortem_onboardingA

After analyze_track, send the exact diagnosis you wrote to the Post Mortem panel. Requires a fresh matching 10-second single-track handoff; comparisons cannot complete first-run onboarding.

raw_commandA

Escape hatch: send any bridge command by type + payload (full reference: bridge/command_schema.md). Use when no dedicated tool covers it.

link_fx_midi_ccC

Map MIDI CC to a scanned FX parameter and verify native parameter-link readback.

get_midi_inputsC

List MIDI input device names and indices.

configure_midi_inputC

Set a track's MIDI input, record arm and monitoring; return readback.

insert_midi_eventsB

Create a MIDI item from notes, CC, pitch bend and program changes. Times are seconds relative to item start; channels are 0..15. For drums, enforce drum-apparatus goldenrule before sending.

save_project_asA

Save to a NEW absolute .rpp path, or export explicitly named tracks as a media-free .RTrackTemplate. Existing files are refused. Requires project save gate.

get_fx_presetC

Read the loaded FX host preset name, index and count.

set_fx_presetA

Load an exact REAPER host preset name and verify readback. Proprietary preset files may require plugin UI; saved chains use add_fx_chain.

instrument_inventoryC

Discover plugin cache entries and local preset files. Results do not prove plugins load or samples are available.

insert_performance_auditionB

Insert a repeatable 15-second melodic test of expression, modulation, sustain and octave range. Use a separate audition project. Render with capture_track_audio and audition; MIDI success does not prove controller response.

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 40 tools

Disambiguation4/5

Most tools have clearly distinct purposes, and the descriptions go out of their way to explain boundaries (e.g. scan_fx vs. instrument_inventory, capture_track_audio vs. analyze_track). However, several insertion tools overlap conceptually (insert_midi_file, insert_midi_events, insert_groove, insert_riff, cut_band, insert_performance_audition), and the measurement/capture family is dense, so an agent could still hesitate in a few cases.

Naming Consistency3/5

All names are snake_case, which is consistent, but the verb pattern is mixed: many tools use verb_noun (get_status, insert_midi_file, set_fx_param), while several core tools are bare nouns (transport, track, fx, markers, batch, instrument_inventory). It remains readable, but it is not a predictable verb_noun convention throughout.

Tool Count2/5

At 40 tools, this is well above the typical 3–15 range and hits the rubric's '25+' threshold for too many. The REAPER domain is broad enough to justify a large surface, but the set still feels heavy and likely imposes a high selection burden on an agent.

Completeness4/5

The surface covers a wide lifecycle: project context, tracks, FX chains and parameters, automation, MIDI insertion, rendering, audio analysis, presets, MIDI inputs, and saving. Minor gaps remain—no open/create/close project tools, no routing write tools, limited media-item manipulation beyond deletion, and saved FX-chain management is referenced but not exposed—though raw_command provides an escape hatch.

Maintenance

ActivityActive
ResponsivenessNo issues