Reaper Daemon
REAPER MCP server: let Claude read your session, set FX, write automation and measure mix moves.
Connector by wretcher207 · GitHub account verified by the MCP Registry
Chalk Labs
Need help deploying Reaper Daemon?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Desktop. Read the repository before you give any tool access to your data.
MCP bundle (.mcpb): open it with Claude Desktop.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: audio-video
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 13 read · 12 write · 3 delete · 14 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Downloaded binary
Tools by what they do 42
Read from the source code; the running server may list different tools.
Read 13 · Look things up without changing anything.
capture_track_audioget_contextget_drum_transcriptionget_fx_param_automationget_fx_parametersget_mix_snapshotget_statusget_track_routinginstrument_inventorylist_actionsmix_recipescan_fx
Show 1 more tools
song_plan
Write 12 · Create, change, send or run things.
apply_automation_transactionbatchhumanize_takeinsert_drum_transcriptioninsert_grooveinsert_midi_fileinsert_performance_auditioninsert_riffrun_actionset_fx_paramtranscribe_drumswrite_automation
Delete 3 · Delete, drop, revoke or wipe things.
delete_items_in_rangemarkersrun_script
Not yet classified 14 · We could not tell from the name and description.
analyze_trackcompare_trackscomplete_postmortem_onboardingcut_banddrum_workshopfxinstrumentsprofile_trackraw_commandriff_gridtracktransport
Show 2 more tools
tune_paramverify_change
Network hosts it talks to 4
deadpixeldesign.com· found in codegithub.com· found in install command, codeglama.ai· found in coderaw.githubusercontent.com· found in code
Files it touches
- Your home directory (~)
~/.config~/.local/share~/AppData/Roaming~/opt/REAPER/reaper~/reaper-daemonC:\\temp\\probe
Tools (42)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
analyze_trackPost Mortem (the separate post-mortem audio-analysis CLI that renders a track and measures it): 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.
apply_automation_transactionAtomically 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.
batchRun 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. Nested batches are refused. Returns {results: [per-command result], all_ok, failed_index, completed, total, stopped, rolled_back}. With stop_on_error (default) a failure stops the batch and the call errors with the failing command's code and index, unless return_partial_results is true, which returns the object above with stopped=true instead. Commands already run are NOT rolled ba…
capture_track_audioRender 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.
compare_tracksPost 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. Use analyze_track for one track's own mix problems; use this when two parts fight for the same frequencies.
complete_postmortem_onboardingAfter 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.
cut_bandLay 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.
delete_items_in_rangeDelete media items in a time range on one track (or all_tracks). Destructive — confirm intent; undo-block wrapped; supports dry_run.
drum_workshopPrepare separate composition requests, compare authored drum DSL candidates, export MIDI, or record explicit user audition feedback. Local files only; never changes REAPER. Fresh and wildcard requests omit reference patterns. The calling agent writes candidate.dsl and intent.json before evaluate. Comparisons measure structural similarity, not musical quality. No model is invoked and no winner is selected.
fxFX 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 p…
get_contextRead the open REAPER project: name, tempo, transport, cursor, time selection, every track (with FX names), markers, regions. Read-only. Run before ambiguous edits.
get_drum_transcriptionRead a drum transcription job's progress, failure, output files and insertion receipt. A completed analysis has not inserted anything into REAPER.
get_fx_param_automationRead 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.
get_fx_parametersFull 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_mix_snapshotRead 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.
Show 27 more tools
get_statusCheck the bridge is alive inside REAPER (heartbeat, open project, whether risk-level-3 commands like audio capture are enabled). Call this first.
get_track_routingRead a track's routing: sends, receives, parent bus, volume, pan, phase, automation mode. Read-only.
humanize_takePut 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 lear…
insert_drum_transcriptionMap a completed transcription to a drum kit and insert verified notes into REAPER. Requires the original source item and an empty destination range. Refuses source changes, duplicate jobs and active transport. Auto-discovers note names or accepts a catalog map_name. dry_run validates without writing. Keeps original audio, track mute state and project tempo unchanged. One undo reverts insertion.
insert_grooveRender 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 dr…
insert_midi_fileInsert 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. Use this when a .mid file already exists; to build MIDI from a list of notes use insert_midi_events, for humanized drums insert_groove, for guitar or bass insert_riff.
insert_performance_auditionInsert 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.
insert_riffRender 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 tabl…
instrument_inventoryDiscover plugin cache entries and local preset files. Results do not prove plugins load or samples are available.
instrumentsNamed instrument library, so a sound is picked by name instead of by plugin index. list/show: read-only; each entry has role, library, note maps (guitar/bass/drums map names the generators use), playable range, tags, and the saved chain name or none. save: the user has loaded a sound by hand on 'track' (any Kontakt library or Serum preset); this saves that track's FX chain, plugin state included, as FXChains/instrument-<name> and registers it. load: splice a saved instrument onto an EMPTY track (refused if the track has FX unless allow_existing_fx) and verify the FX landed; use the entry's map…
list_actionsSearch REAPER's action list: every word in query must appear in the action name or its _SWS/_RS id. Returns command_id, name, named_id and toggle_state per match, paged by limit/offset. Sections: main (default), main_alt, midi_editor, midi_event_list, midi_inline, media_explorer.
markersAdd or delete markers and regions (add_marker, add_region, delete_marker).
mix_recipeCapture 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.
profile_trackDaemon 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…
raw_commandEscape hatch: send any bridge command by type + payload (full reference: bridge/command_schema.md). Use when no dedicated tool covers it.
riff_gridStep 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 ancho…
run_actionRun one REAPER action by command_id (a number from list_actions) or named_id (an _SWS_... / _RS... string), in the main section or a MIDI editor section. Runs in an undo block. Save and render actions obey the same gates as save_project and render; Quit is refused. An action that opens a dialog will block the bridge until it is closed.
run_scriptRun Lua inside REAPER with the full ReaScript API: pass code (source text) or path (a .lua file; relative paths resolve under the daemon folder, then REAPER's Scripts folder). The script's return value and anything it printed with ShowConsoleMsg come back in the reply; reaper.defer is not available (the script must finish in one pass) and it is stopped after timeout_seconds (default 30). Project changes land in one undo block. Off until allow_script_execution is true in bridge_config.json (python3 setup/install.py --allow-script-execution).
scan_fxEnumerate 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.
set_fx_paramSet 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.
song_planSong planner. A sheet JSON (see docs/song-planner.md and skills/song-planner) holds title, tempo, key, parts (instrument-library names) and sections with bars, energy, drum lanes, 16-cell riff bars and layer notes. check: every problem at once. show: the readable sheet to put in front of the person. approve: ONLY after the person explicitly said yes to the whole sheet; any later edit cancels it. draft: refuses an unapproved sheet, then opens a NEW project tab and writes tempo, tracks, saved sounds, a region per section, drums, both guitars, bass and layers, each step reported separately. 4/4 a…
trackTrack 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.
transcribe_drumsStart local audio-to-drum-MIDI analysis in a background worker. Uses one selected audio item or a named source track/item. Returns a job_id; poll get_drum_transcription, then use insert_drum_transcription. Needs the optional transcription environment and ffmpeg. May download model weights on first use; audio stays local. Does not change the project. Tom and cymbal articulations are estimates.
transportTransport and project timing: play, stop, pause, record, set_cursor, set_time_selection, set_tempo (the project's base tempo), plus the tempo map: get_tempo_markers, set_tempo_marker (a tempo and/or time-signature change at a position; a time-signature change needs a bar position; index edits an existing marker) and delete_tempo_marker. Mutations run in an undo block (Ctrl/Cmd+Z reverts).
tune_paramOutcome-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 u…
verify_changeRun 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); UNV…
write_automationWrite one FX-parameter envelope transactionally: snapshot, inclusive-range replacement, reread confirmation, and automatic rollback on any failure. A declared range always means replacement.
Signals
- Stars
- 19
- Forks
- 2
- Open issues
- 0
- Contributors
- 1
- Last commit
- Oct 21, 2026 (9 days ago)
- Last release
- Oct 20, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.wretcher207/reaper-daemon- Version
- 3.23.1
- Auth
- No auth
- Packages
- mcpb https://github.com/wretcher207/reaper-daemon/releases/download/v3.23.1/reaper-daemon.mcpb
- License
- MIT
- Repository
- github.com/wretcher207/reaper-daemon
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get Reaper Daemon running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
Reaper Daemon MCP server. Agent Mart. https://agentmart.dev/connectors/wretcher207-reaper-daemon (last updated 2026-10-24)