Atlas / MCP servers / xdarkzx / Reaper

ReaperBLOCK

mcp/xdarkzx/reaper-4

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
85
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-08
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-08 · audit v0.4.1 · source sha 6e579d8b1efefull audit observations/trust-audit/mcp-server/xdarkzx__reaper-4.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-086e579d8b1efeBLOCKD68first audit
06

Questions

What is the Reaper 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 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 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 need?

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

How does Reaper 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-08. The repository is watched and re-audited when it changes.

Advertisement