Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

REAPER MCP

PYPI · TWELVETAKE-REAPER-MCP · SCANNED OCT 5

Lets an AI assistant work in your open REAPER project: mixing, MIDI, routing and rendering.

+19 this week 81 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 0 of 28 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to TwelveTake-Studios/reaper-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 5 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability71
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 14311 tokens (~79/item across 179 items; 179 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety99
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 21 of 22 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get_track_master_send" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 180 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the REAPER MCP server?

REAPER MCP runs locally as a PyPI package, launched with uvx twelvetake-reaper-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · twelvetake-reaper-mcp

# add to Claude Code
claude mcp add com-twelvetake-reaper-mcp -- uvx twelvetake-reaper-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "com-twelvetake-reaper-mcp": {
      "command": "uvx",
      "args": [
        "twelvetake-reaper-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-twelvetake-reaper-mcp": {
      "command": "uvx",
      "args": [
        "twelvetake-reaper-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add com-twelvetake-reaper-mcp -- uvx twelvetake-reaper-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-twelvetake-reaper-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "twelvetake-reaper-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-twelvetake-reaper-mcp --command uvx --arg twelvetake-reaper-mcp
# ~/.hermes/config.yaml
mcp_servers:
  com-twelvetake-reaper-mcp:
    command: "uvx"
    args: ["twelvetake-reaper-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-twelvetake-reaper-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "twelvetake-reaper-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add com-twelvetake-reaper-mcp -t stdio -c uvx -a twelvetake-reaper-mcp
// mcp.json
{
  "mcpServers": {
    "com-twelvetake-reaper-mcp": {
      "command": "uvx",
      "args": [
        "twelvetake-reaper-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 3 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Sept 26 +15
    • Malware scan: unverified → pass ▲ security
  • 29 Sept 26 +1
    • Malware scan: unverified → pass ▲ security
    • Stability: unverified → 0.03 ▲ functional
    • Package version: 1.7.7 → 1.8.0 functional
    • Package version: 1.7.7 → 1.7.8 functional
  • 28 Sept 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 9 Oct 2026 · Analysed pypi/twelvetake-reaper-mcp@1.8.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo TwelveTake-Studios/reaper-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/TwelveTake-Studios/reaper-mcp/.github/workflows/publish.yml@refs/tags/v1.8.0
Rekor log index 3005286116
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:5fb6fbfee502e798307c6c039367c69e24da4cf5a5a4f5ca693a6525d65f9cf4

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 28 packages
Packages resolved 28
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 179 exposed · ~13,734 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
get_item_info ~49

Get information about a media item. Returns: Object with item properties (position, length, take info, etc.).

NameTypeReqDescription
item_indexintegeryes–
track_indexintegeryes–

No output schema declared.

No examples provided.

get_markers ~31

Get all markers in the project. Returns: Object with list of markers (position, name, index).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_master_track ~16

Get information about the master track.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_midi_item ~48

Get information about a MIDI item. Returns: Object with item info including position, length, note count.

NameTypeReqDescription
item_indexintegeryes–
track_indexintegeryes–

No output schema declared.

No examples provided.

get_midi_notes ~48

Get all MIDI notes from an item. Returns: Object with list of notes.

NameTypeReqDescription
fields–––
item_indexintegeryes–
track_indexintegeryes–

No output schema declared.

No examples provided.

get_play_position ~25

Get the current playback position. Returns: Object with play position in seconds.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_play_state ~24

Get the current playback state. Returns: Object with play state info.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_project_length ~31

Get the length of the project (end of last item). Returns: Object with project length in seconds.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_project_name ~14

Get the project name.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_project_path ~14

Get the project path.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_project_summary ~244

Get a comprehensive summary of the current REAPER project. Returns everything needed to understand the project state and give useful mixing/production advice in a single call. Returns: Object with: - project_name: Name of the project file - project_path: Full path to the project - tempo: Project tempo in BPM - time_signature: {numerator, denominator} - project_length: Length in seconds - track_count: Total number of tracks - tracks: List of track info objects, each containing: - index: Track index (0-based) - name: Track name - volume_db: Volume in decibels - pan: Pan position (-1 to 1) - mute: Boolean mute state - solo: Boolean solo state - fx_count: Number of FX plugins - fx_names: List of FX plugin names - master: Master track info {volume_db, fx_count, fx_names} - markers: List of {index, position, name} - regions: List of {index, start, end, name}

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_regions ~32

Get all regions in the project. Returns: Object with list of regions (start, end, name, index).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_repeat_state ~27

Get the current repeat state. Returns: Object with repeat state (true/false).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_selected_items ~25

Get all selected media items. Returns: Object with list of selected items.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_selected_midi_notes ~177

Read the MIDI notes currently SELECTED in REAPER's editor for the active take. The escape hatch for "operate on what I've selected": select notes by hand in REAPER, call this to see which they are, then translate that into an explicit value filter (pitch range / beat window / channel) for the transform tools. Read-only, no undo. Returns: {ok, notes:[...], ret} - the selected notes, same shape as get_midi_notes (each note carries item-relative start_beat/end_beat). `index` is REAPER's absolute PPQ-sorted note index, so a partial selection is non-contiguous. Empty selection -> notes:[].

NameTypeReqDescription
fields–––
item_indexintegeryes–
track_indexintegeryes–

No output schema declared.

No examples provided.

get_selected_tracks ~27

Get indices of all selected tracks. Returns: Object with list of selected track indices.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_takes ~61

List all takes of a media item. Returns: Object with 'takes' array (each entry: index, name, is_active) and 'ret' = take count.

NameTypeReqDescription
item_indexintegeryes–
track_indexintegeryes–

No output schema declared.

No examples provided.

get_tempo ~29

Get the tempo at project start as `ret`, and every tempo marker as `tempo_markers`.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_time_selection ~25

Get the current time selection. Returns: Object with start and end times.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_time_signature ~15

Get the project time signature.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_track ~59

Get information about a track. Returns: Object with 'info': guid, name, volume, volume_db, pan, muted, soloed, has_midi, has_audio, fx_names, role.

NameTypeReqDescription
track_indexintegeryes–

No output schema declared.

No examples provided.

get_track_count ~26

Get the total number of tracks in the current REAPER project (excluding master track).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_track_envelope ~62

Get a track envelope by name. Args: envelope_name: Envelope name (e.g., "Volume", "Pan", "Mute"). Returns: Object with envelope info.

NameTypeReqDescription
envelope_namestringyes–
track_indexintegeryes–

No output schema declared.

No examples provided.

get_track_fx_chunk ~84

Get the raw state chunk from an FX plugin (includes preset/state data). Useful for reading VSTi state data like Toontrack EZkeys chord progressions. The chunk contains the full serialized state of the plugin. Returns: Object with 'chunk' containing the FX state data string.

NameTypeReqDescription
fx_indexintegeryes–
track_indexintegeryes–

No output schema declared.

No examples provided.

get_track_items ~34

Get all media items on a track. Returns: Object with list of items.

NameTypeReqDescription
track_indexintegeryes–

No output schema declared.

No examples provided.

get_track_master_send ~48

Get the master/parent send state of a track. Returns: Object with 'ret' field (1 = enabled, 0 = disabled).

NameTypeReqDescription
track_indexintegeryes–

No output schema declared.

No examples provided.

get_track_num_sends ~28

Get the number of sends from a track.

NameTypeReqDescription
track_indexintegeryes–

No output schema declared.

No examples provided.

get_track_peak ~60

Get the current peak level of a track. Args: channel: Channel (0=left, 1=right). Returns: Object with peak value in dB.

NameTypeReqDescription
channelinteger––
track_indexintegeryes–

No output schema declared.

No examples provided.

get_track_peak_hold ~99

Get the peak hold level of a track (highest peak since meters were last reset). Returns the max peak from a previous playback without needing to be actively playing - play the project, stop, then call this for gain staging. Args: channel: Channel (0=left, 1=right). Returns: Object with peak hold value in dB.

NameTypeReqDescription
channelinteger––
track_indexintegeryes–

No output schema declared.

No examples provided.

get_undo_state ~28

Get the current undo/redo state. Returns: Object with undo and redo descriptions.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

go_to_marker ~25

Move the edit cursor to a marker.

NameTypeReqDescription
marker_indexintegeryes–

No output schema declared.

No examples provided.

go_to_region ~26

Move the edit cursor to a region start.

NameTypeReqDescription
region_indexintegeryes–

No output schema declared.

No examples provided.

humanize_midi_notes ~344

Humanize MIDI: nudge timing and velocity by small random amounts, reproducibly. Each note gets its own timing and velocity offset drawn from a bell curve. Note lengths are preserved (start and end move together) and pitches are never touched. The randomness is seeded, so the same take with the same seed and settings gives identical results every time. Velocities are clamped to 1-127 and counted in clamped; notes pushed past the item end are kept and reported in out_of_bounds. Unlike the other timing tools, a note pushed before the item start is placed at the item start and counted in out_of_bounds, not clamped; clamped here counts only the velocity clamp. Args: timing: Timing spread in beats (standard deviation); 0.02 is a subtle human feel, 0.0 leaves timing alone. velocity: Velocity spread (standard deviation, in velocity units); 0.0 leaves velocity alone. seed: Any integer. The same seed, settings and take give the same result. max_sigma: Cap on how far one note may stray, in multiples of the spread.

NameTypeReqDescription
channelinteger––
end_beat–––
fields–––
item_indexintegeryes–
max_sigmanumber––
pitch_highinteger––
pitch_lowinteger––
return_notesboolean––
seedinteger––
start_beat–––
timingnumber––
track_indexintegeryes–
velocitynumber––

No output schema declared.

No examples provided.

insert_audio_file ~78

Insert an audio file onto a track. Args: file_path: Full path to the audio file. position: Position in seconds. Returns: Object with track_index, item_index of the created item, and position.

NameTypeReqDescription
file_pathstringyes–
positionnumberyes–
track_indexintegeryes–

No output schema declared.

No examples provided.

insert_track ~71

Insert a new track at the specified index. Args: index: Position to insert track (0-based). If not specified, adds at end. name: Optional name for the new track. Returns: Info about the created track.

NameTypeReqDescription
indexinteger––
namestring––

No output schema declared.

No examples provided.

legato_midi_notes ~369

Close the gaps in a MIDI line (legato), or set every note to one length. Only note ends move; starts are never touched. "connect" extends each note's end to the next onset and never shortens anything; a gap wider than max_gap_beats is left as a rest and counted in gaps_preserved, and the last note is left alone. "fixed" instead sets every targeted note's length to length_beats. Notes whose new end passes the item end are kept and reported in out_of_bounds. Args: mode: "connect" (extend each end to the next onset) or "fixed" (set every length). voice: connect only. "chordal" extends to the next onset of any note, so a chord's notes move together; "per_pitch" extends to the next note of the SAME pitch and channel, keeping interleaved voices independent. max_gap_beats: connect only. Gaps wider than this are left as rests (>= 0). length_beats: fixed only. The length every targeted note is set to (> 0). Returns: {ok, notes_changed, clamped, skipped, out_of_bounds, gaps_preserved, notes:[...]}.

NameTypeReqDescription
channelinteger––
end_beat–––
fields–––
item_indexintegeryes–
length_beatsnumber––
max_gap_beatsnumber––
modestring––
pitch_high–––
pitch_low–––
return_notesboolean––
start_beat–––
track_indexintegeryes–
voicestring––

No output schema declared.

No examples provided.

measure_loudness ~211

Measure loudness as REAPER's loudness window does: integrated LUFS, short-term and momentary max, loudness range, sample peak, plus true peak. Target: the master (default), a track, or one item (its track's output over the item, other items muted). start_time/end_time limit it to a range. It runs a render dry run, so it writes no files, puts selections back and adds no undo step. Measuring the master marks the project as modified, even though nothing in it changes. Returns: integrated_lufs, short_term_max_lufs, momentary_max_lufs, loudness_range_lu, sample_peak_dbfs, true_peak_dbtp, samples_over_0dbfs, duration; a note when a figure is approximate or unavailable.

NameTypeReqDescription
end_timenumber––
item_indexinteger––
start_timenumber––
track_indexinteger––

No output schema declared.

No examples provided.

measure_spectrum ~134

Measure tonal balance and stereo image: octave-band levels (31.5 Hz to 16 kHz), spectral centroid, tilt in dB per octave, stereo correlation overall and below 150 Hz, side-to-mid level and left/right balance. Same targets and range as measure_loudness. Levels are dBFS with a full-scale sine at 0, as in REAPER. Needs the TwelveTake MCP Analyzer, which --install-bridge installs.

NameTypeReqDescription
end_timenumber––
item_indexinteger––
start_timenumber––
track_indexinteger––

No output schema declared.

No examples provided.

nudge_midi_notes ~188

Shift MIDI notes in time by a number of beats (+ = later, - = earlier). Start and end move together, so note lengths are preserved. A note pushed before the item start clamps to it and one pushed past the item end is left there; both count in `out_of_bounds`, not `clamped`. Args: amount_beats: Signed beat shift (0.25 = a 16th later, -1.0 = a beat earlier). 0 = no-op.

NameTypeReqDescription
amount_beatsnumberyes–
channelinteger––
end_beat–––
fields–––
item_indexintegeryes–
pitch_highinteger––
pitch_lowinteger––
return_notesboolean––
start_beat–––
track_indexintegeryes–

No output schema declared.

No examples provided.

open_project ~36

Open a REAPER project file. Args: path: Full path to the .rpp file.

NameTypeReqDescription
pathstringyes–

No output schema declared.

No examples provided.

paste_items ~16

Paste items from clipboard at edit cursor.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

pause ~13

Pause playback in REAPER.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

play ~13

Start playback in REAPER.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

quantize_midi_notes ~340

Quantize MIDI note onsets onto the grid (tighten sloppy timing, add swing). Onsets snap to the PROJECT bar/beat grid, not to an offset from the item's own start, and note lengths are preserved: start and end move together. Notes that land past the item end are kept, and one that would land before the item start is placed at it; both are counted in `out_of_bounds` (`clamped` stays 0 here). Args: grid: Grid spacing in beats: 0.25 = 1/16, 0.5 = 1/8, 1.0 = 1/4. Must be > 0. strength: 0.0-1.0. 1.0 snaps exactly onto the grid, 0.5 moves each note halfway there, 0.0 is a no-op. swing: 0.0-1.0. 0.0 = straight, 1.0 = full triplet feel (off-beats at 66.7%), scaling linearly between. Only the off-beat (odd) grid cells are delayed.

NameTypeReqDescription
channelinteger––
end_beat–––
fields–––
gridnumber––
item_indexintegeryes–
pitch_highinteger––
pitch_lowinteger––
return_notesboolean––
start_beat–––
strengthnumber––
swingnumber––
track_indexintegeryes–

No output schema declared.

No examples provided.

ramp_midi_note_velocities ~201

Apply a linear velocity ramp (crescendo / decrescendo) across MIDI notes. Velocities interpolate by onset: the earliest note in the filtered set gets start_velocity, the latest gets end_velocity, everything between is linear. Notes sharing an onset (a chord) get the same velocity. Results clamp to 1-127. Args: start_velocity: Velocity at the earliest onset (1-127; out of range clamps, not an error). end_velocity: Velocity at the latest onset (1-127).

NameTypeReqDescription
channelinteger––
end_beat–––
end_velocityintegeryes–
fields–––
item_indexintegeryes–
pitch_highinteger––
pitch_lowinteger––
return_notesboolean––
start_beat–––
start_velocityintegeryes–
track_indexintegeryes–

No output schema declared.

No examples provided.

record ~13

Start recording in REAPER.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

redo ~25

Redo the last undone action in REAPER. Returns: Object with redo description.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

remove_overlapping_midi_notes ~365

Clean up overlapping MIDI notes (same pitch stacked on itself). Two notes conflict only if they share a pitch AND a channel AND overlap in time, so a chord is never a conflict and notes that merely touch are left alone. "trim" shortens the earlier note to stop where the next begins, losing nothing; "delete" drops one note of each overlapping pair, keeping the louder (ties go to the longer note). Either mode can remove notes: notes stacked on the exact same onset collapse to the loudest, since there is nothing to trim between them, and a trim left shorter than min_length_beats is removed rather than left as a click. Args: mode: "trim" (shorten the earlier note) or "delete" (drop the quieter note). min_length_beats: A trimmed note left shorter than this is removed instead. Default 1/128 of a beat; 0 disables it. pitch_low, pitch_high: Notes outside the filter are invisible: never touched, and never counted as an overlap partner. Returns: {ok, mode, notes_changed, clamped, skipped, out_of_bounds, notes_removed, trimmed, deduped, deleted, notes:[...]} where notes_removed = deduped + deleted.

NameTypeReqDescription
channelinteger––
end_beat–––
fields–––
item_indexintegeryes–
min_length_beatsnumber––
modestring––
pitch_highinteger––
pitch_lowinteger––
return_notesboolean––
start_beat–––
track_indexintegeryes–

No output schema declared.

No examples provided.

render_project ~221

Render the project's master mix to an audio file (uses REAPER's last render settings for format details; a .wav extension selects WAV output). If the target file already exists, this returns an error unless overwrite=True (which deletes the existing file first). This is explicit because REAPER's own behavior on existing files (prompt vs auto-increment) is a user preference, and the overwrite prompt blocks unattended rendering. Args: output_path: Full path for output file (extension determines format). start_time: Start time in seconds (None = project start). end_time: End time in seconds (None = project end). tail_seconds: Extra seconds to render at end for reverb tails. overwrite: True to replace an existing file at output_path. Returns: Object with render status and REAPER's computed output target(s).

NameTypeReqDescription
end_timenumber––
output_pathstringyes–
overwriteboolean––
start_timenumber––
tail_secondsnumber––

No output schema declared.

No examples provided.

render_region ~53

NOT IMPLEMENTED. Use render_project with the region's start/end from get_regions. Args: output_path: Full path for output file.

NameTypeReqDescription
output_pathstringyes–
region_indexintegeryes–

No output schema declared.

No examples provided.

Common questions

What is the REAPER MCP server?

REAPER MCP is listed in the public MCP registry as com.twelvetake/reaper-mcp. Lets an AI assistant work in your open REAPER project: mixing, MIDI, routing and rendering. This page covers its PyPI package (twelvetake-reaper-mcp).

Is the REAPER MCP server safe to use?

REAPER MCP scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the REAPER MCP server expose?

REAPER MCP exposes 179 tools: get_track_count, get_track, get_all_tracks, get_master_track, insert_track, and 174 more. Their descriptions and schemas cost roughly 13,734 tokens of context every time the server is loaded.

Is the REAPER MCP server still maintained?

REAPER MCP is still listed as active in the MCP registry. We last reached this channel on 5 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the REAPER MCP server under?

REAPER MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.