Atlas / MCP servers / xdarkzx / Reaper-MCP

Reaper-MCPBLOCK

mcp/xdarkzx/reaper-mcp

AI-powered music production and post-production in REAPER via MCP — 181 tools for composition, mixing, mastering, batch editing, audio QC, and ReaScript automation.

Verdict
BLOCK
Grade
D
Trust score
68 /100
Exposed tools
166 70r · 79w · 17d
Transport
stdio
License
Apache-2.0
Stars
84
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

ReaperMCP

AI-powered music production in REAPER through the Model Context Protocol

Quick Start • Why ReaperMCP? • Features • Tools Reference • Architecture • Changelog • Contributing • Troubleshooting

ReaperMCP connects any MCP-compatible AI assistant to REAPER, giving it full control over music production. Talk to your AI assistant and it composes, mixes, masters, and measures your music in real-time — the A

Read from source at commit 6e579d8b1efeOBSERVED · 2026-10-07
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add xdarkzx-reaper-mcp -- uvx xdarkzx-reaper-mcp
claude-desktop
{
  "mcpServers": {
    "xdarkzx-reaper-mcp": {
      "command": "uvx",
      "args": [
        "xdarkzx-reaper-mcp"
      ]
    }
  }
}
03

Exposed tools (166)

70 read · 79 write · 17 destructive. Blast radius: 17 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
add_markers_batchwriteBatch add markers/regions.
analyze_chop_setwriteInspect a list of chops and classify each by duration.
analyze_clippingreadCount samples at or above a clipping threshold (default -0.1 dBFS).
analyze_frequency_spectrumreadBass / mid / treble energy split and spectral centroid.
analyze_loudnessreadMeasure integrated loudness (LUFS), true peak, loudness range, and crest factor.
analyze_peaksreadFind click/pop candidates — short transients that spike well above the local baseline.
analyze_region_qcwritePer-region silence + peak/click candidate report — the post-production QC pass.
analyze_scorereadDump current MIDI data: per-track notes, CCs, timing stats.
analyze_silencereadFind candidate silence spans — amplitude at/below threshold_db for at least min_duration.
analyze_stereo_fieldreadStereo correlation, mid/side balance, and width estimate.
arrange_chops_to_chord_tonesread[NICHE] Retune each chop to a chord tone.
bounce_stemsreadRender the given tracks as individual audio stems (in-project).
configure_trackswriteBatch set volume_db, pan, color, mute, solo, name on multiple tracks.
detect_common_bpmreadGiven a JSON array of file paths, return the most common BPM
edit_sectiondestructiveClear+replace notes/CCs in a time range. For CC-only fixes, use rewrite_cc instead.
envelope_add_pointswriteBatch-insert automation points into an envelope.
envelope_clear_rangedestructiveDelete all envelope points in a time range.
envelope_get_pointsreadRead automation points from a track or FX parameter envelope.
fx_disablewriteBypass an FX plugin.
fx_enablewriteEnable an FX plugin.
fx_get_chainreadGet FX chain for a track (names, enabled, presets, param counts).
fx_get_instrumentreadFind VSTi instrument on track. Returns index + params, or -1 if none.
fx_get_paramsreadGet all parameters of an FX plugin (names, values, formatted display).
fx_get_pin_mappingsreadRead-only inspection of an FX plugin
fx_get_presetreadGet current preset name and count.
fx_list_installedreadList every FX plugin installed in REAPER, grouped by category.
fx_movewriteMove FX to different position in chain.
fx_navigate_presetreadStep to next/previous preset.
fx_remove_batchdestructiveRemove one FX, several, or a whole chain, across one or many tracks, in one call.
fx_renamewriteRename an FX instance
fx_scan_paramsreadOn-demand fallback: sweep a plugin
fx_set_presetwriteLoad preset by name. Returns the resulting preset, not the parameters.
fx_show_uireadOpen FX plugin UI window.
get_track_instrumentsreadList all tracks with detected VSTi names and item counts.
item_create_midiwriteCreate an empty MIDI item on a track. Returns the item
item_deletedestructiveDelete an item. Prefer items_apply for multiple.
item_duplicatereadCopy an item N times at fixed spacing.
item_get_allreadGet all media items. Filter by track or -1 for all.
item_get_inforeadGet detailed info for one item.
item_insert_mediawriteInsert audio/MIDI file into track.
item_movewriteMove item to new position. Prefer items_apply for multiple.
item_move_to_trackwriteMove item to different track.
item_selectreadSelect/deselect an item.
item_set_fadewriteSet fade in/out. -1=unchanged. Prefer items_apply for multiple.
item_set_lengthwriteSet item length. Prefer items_apply for multiple.
item_set_mutewriteMute/unmute item. Prefer items_apply for multiple.
item_set_volumewriteSet item volume in dB. Prefer items_apply for multiple.
item_splitreadSplit item at position.
item_split_at_positionsreadSlice an item at a list of absolute project-time positions.
item_split_at_transientsreadSlice an audio item at every detected transient.
item_take_addwriteAdd a new empty take to an item. Returns the new take
item_take_delete_activedestructiveDelete the currently active take from an item.
item_take_listreadList all takes on an item with their active status.
item_take_set_activewriteSwitch which take plays back on an item.
items_applydestructiveBatch set position/length/volume_db/mute/fade_in/fade_out, or delete, across many items in one call.
list_audio_subfoldersreadList the subfolder structure under a folder — fast, no per-file
marker_addwriteAdd marker. Prefer add_markers_batch for multiple.
marker_add_regionwriteAdd region. Prefer add_markers_batch for multiple.
marker_deletedestructiveDelete marker/region. Prefer markers_apply for multiple.
marker_editwriteEdit marker/region. Prefer markers_apply for multiple, or to also edit a region
marker_get_allreadGet all markers and regions. For just the region list plus a cheap
marker_go_towriteMove cursor to marker.
markers_applydestructiveBatch edit (name/position/start/end/color) or delete markers and regions in one call.
midi_count_eventsreadCount notes, CCs, and sysex events in item.
midi_delete_all_notesdestructiveClear all notes from a MIDI item.
midi_delete_ccdestructiveDelete a CC event.
midi_delete_notedestructiveDelete a note.
midi_get_note_namesreadGet MIDI note number to name mapping (C4=60, etc.).
midi_get_notesreadGet notes in a MIDI item (capped at max_results to limit context size).
midi_humanizewriteAdd random timing + velocity jitter to all notes in a MIDI item.
midi_insert_ccwriteInsert single CC event. For whole curves use the `ccs` array of rewrite_cc or compose_arrangement.
midi_insert_notewriteInsert single note into existing item. For composing use compose_arrangement.
midi_insert_notes_batchwriteBatch-insert notes into a MIDI item. Primary tool for writing MIDI.
midi_insert_program_changewriteInsert a MIDI Program Change, optionally preceded by Bank Select.
midi_list_programsreadList the MIDI program names a track
midi_quantizereadQuantize notes in a MIDI item to a time grid.
midi_select_notesreadSelect/deselect all notes in item.
midi_set_item_extentswriteSet MIDI item boundaries in quarter notes.
midi_set_notewriteEdit existing note. -1 keeps current value.
midi_sortreadSort MIDI events by time.
project_backupwriteSave a snapshot copy to `path` WITHOUT changing this project
project_export_audioreadRender project to audio file(s) on disk.
project_get_change_countreadCheap check for whether the project has changed since you last looked.
project_get_inforeadGet project info (name, BPM, time sig, tracks, length, markers, render settings).
project_get_metadatareadGet project render metadata (title, author, album, comment, etc.).
project_get_notesreadGet the project notes/description text.
project_get_notes_inforeadGet the Title and Author fields of the Project Settings -> Notes tab.
project_get_overviewwriteOne cheap call for post-production awareness: counts, region list, change_count, and a selection summary.
project_newwriteCreate a new empty REAPER project. Returns the new project info.
project_openreadOpen .rpp project file.
project_redoreadRedo the last undone step, or the last several in one call.
project_savewriteSave the current project. Returns project info confirming the save.
project_save_aswriteSave project to new path. This project
project_set_gridwriteSet grid division (1.0=quarter, 0.5=eighth, 0.25=sixteenth).
project_set_metadatawriteSet project render metadata fields. Non-empty fields are written.
project_set_noteswriteSet the project notes/description text.
project_set_notes_infowriteSet the Title and Author fields of the Project Settings -> Notes tab.
project_set_ripple_modewriteSet REAPER
project_undoreadUndo the last step, or the last several steps in one call.
project_undo_groupwriteUndo every step of the most recent multi-command tool run.
reset_compositiondestructiveUnlock compose_arrangement without deleting MIDI. Use wipe_all_midi to also delete.
rewrite_ccreadReplace CC automation in a time range, leaving notes untouched.
scan_audio_folderreadWalk a folder for audio loops and parse metadata from filenames.
script_listreadList ReaScripts (.lua/.eel only) found in REAPER
script_runwriteRun a ReaScript from REAPER
selection_deselect_all_itemsreadDeselect all media items.
selection_deselect_all_tracksreadDeselect all tracks.
selection_get_selected_itemsreadGet a list of all currently selected media items with their full info.
selection_get_selected_tracksreadGet a list of all currently selected tracks with their full info.
selection_get_timereadGet current time selection. If you also need track/item counts or
selection_select_all_itemsreadSelect all items.
selection_select_all_tracksreadSelect all tracks.
selection_set_loopwriteSet loop points.
selection_set_timewriteSet time selection.
send_createwriteCreate send between tracks. Prefer setup_routing for batch.
send_get_allwriteGet all sends/receives on a track.
send_get_routing_diagramwriteGet full project routing diagram (sends, receives, outputs).
send_removedestructiveRemove a send.
send_set_midi_channelwriteSet MIDI source/destination channel on an existing send.
send_set_mutewriteMute/unmute send.
send_set_panwriteSet send pan.
send_set_volumewriteSet send volume.
set_fx_preferenceswriteSave user FX preferences — per-category plugin overrides.
setup_effect_buswriteCreate effect return bus (track + FX + sends) in one call.
setup_fx_chainwriteAdd and/or configure FX — the only tool for this, for one plugin
setup_routingwriteBatch create sends with optional volume/pan.
take_set_pitchwritePitch-shift a take by N semitones (no time change).
take_set_playratewriteTime-stretch a take by changing its playrate.
take_set_reversedwriteReverse an item
tempo_add_markerwriteAdd a tempo and/or time-signature marker at a given time.
tempo_clear_alldestructiveDelete every tempo/time-sig marker — resets the project to its base tempo.
tempo_delete_markerdestructiveDelete a tempo/time-sig marker by its index (from `tempo_list_markers`).
tempo_list_markersreadList all tempo + time-signature markers in the project.
track_createwriteCreate new track.
track_delete_batchdestructiveDelete one track, several, or all of them, in one call.
track_freezereadFreeze a track to stereo audio (pre-fader render of FX + VSTi).
track_get_allreadGet all tracks with properties (name, volume, pan, mute, solo, FX, items, routing).
track_get_inforeadGet detailed info for one track.
track_get_mixer_statereadGet mixer state for all tracks (volumes, pans, mutes, solos, sends).
track_get_peakreadRead instantaneous peak level from a track
track_renamewriteRename a track.
track_selectreadSelect/deselect a track.
track_set_colorwriteSet track color (RGB 0-255). Prefer configure_tracks for batch.
track_set_folderwriteSet folder state. 0=normal, 1=folder parent, -1=last in folder.
track_set_inputwriteSet recording input. 0-1023=mono (0=first input), +1024=stereo, 4096+=MIDI, -1=MIDI all inputs/channels.
track_set_mutewriteMute/unmute a track.
track_set_panwriteSet track pan. Prefer configure_tracks for batch.
track_set_record_armwriteArm/disarm track for recording.
track_set_solowriteSolo/unsolo a track.
track_set_volumewriteSet track volume. Prefer configure_tracks for batch.
track_template_applywriteApply a saved template to a track — replaces its FX chain + settings.
track_template_deletedestructiveDelete a saved track template.
track_template_listreadList all saved track templates.
track_template_savewriteSave a track
track_unfreezereadUnfreeze a track, restoring its original FX chain and MIDI state.
transport_get_statereadGet transport state (play/record status, position, BPM, time sig, repeat).
transport_pausereadToggle pause.
transport_playwriteStart playback.
transport_recordwriteStart recording.
transport_set_bpmwriteSet project tempo.
transport_set_playratewriteSet playback speed.
transport_set_positionwriteSet cursor position.
transport_set_time_signaturewriteSet time signature.
transport_stopwriteStop playback/recording.
transport_toggle_metronomereadToggle metronome.
transport_toggle_repeatreadToggle repeat/loop mode.
04

Trust audit

BLOCKgrade D · trust 68/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (8 observation(s))
Network
declared (1 observation(s))
Shell
declared (2 observation(s))
Dependencies
pinned
Secrets in source
none-found

Findings (13)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
reaper_mcp_shared/path_safety.py:49
".npmrc", ".netrc", ".pgpass", "id_rsa", "id_ed25519", "id_ecdsa",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
reaper_mcp_shared/path_safety.py:50
"known_hosts", "authorized_keys", "credentials.json", "secrets.json",
Why it matters. touches a credential store
HIGHPrompt injection · prompt.hide_from_user · CWE-94, CWE-1427
reaper_mcp/instructions/00_core.md:251
"worth checking," don't tell the user something is definitely broken.
Why it matters. asks the agent to act without the user's knowledge
HIGHPrompt injection · prompt.hide_from_user · CWE-94, CWE-1427
reaper_mcp/instructions/50_postproduction.md:31
"worth checking," don't tell the user something is definitely broken.
Why it matters. asks the agent to act without the user's knowledge
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
reaper_mcp/tool_registry.py:298
module = importlib.import_module(f"reaper_mcp.tools.{name}")
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
reaper_mcp/tool_registry.py:341
importlib.import_module(f"reaper_mcp.tools.{name}")
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
edit_section, envelope_clear_range, fx_remove_batch, item_delete, item_take_delete_active, items_apply, marker_delete, markers_apply, midi_delete_all_notes, midi_delete_cc, midi_delete_note, reset_com
Why it matters. 17 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_tool_registry.py:23
module = __import__(f"reaper_mcp.tools.{name}", fromlist=["register"])
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
tests/test_path_safety.py:113
@pytest.mark.parametrize("name", [".env", ".ENV", "id_rsa", "known_hosts", ".netrc"])
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
tests/test_path_safety.py:117
@pytest.mark.parametrize("name", ["Kick_140bpm.wav", "environment.wav", "id_rsa.wav"])
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_script_tools.py:49
_validate_script_path("../../../etc/passwd")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_script_tools.py:53
_validate_script_path("sub/../../escape.lua")
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
SECURITY.md:7
Instead, use GitHub's private reporting: go to the [Security tab](https://github.com/xDarkzx/Reaper-MCP/security) → **Report a vulnerability**. This opens a private conversation only you and the maint
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-07 · audit v0.4.1 · source sha 6e579d8b1efefull audit observations/trust-audit/mcp-server/xdarkzx__reaper-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-076e579d8b1efeBLOCKD68first audit
06

Questions

What is the Reaper-MCP MCP server?

AI-powered music production and post-production in REAPER via MCP — 181 tools for composition, mixing, mastering, batch editing, audio QC, and ReaScript automation.

What tools does Reaper-MCP expose?

166 in total: 70 read-only, 79 that write, and 17 that can delete or overwrite (edit_section, envelope_clear_range, fx_remove_batch, item_delete, item_take_delete_active). Every one is listed on this page with its risk.

Is Reaper-MCP safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (68/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 17 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Reaper-MCP need?

No credential environment variables were found in its source, so it appears to need none.

How does Reaper-MCP run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as xdarkzx-reaper-mcp.

How current is this page?

The grade is for one exact copy of the source (6e579d8b1efe), read on 2026-10-07. The repository is watched and re-audited when it changes.

Advertisement