REAPER MCP
PYPI · TWELVETAKE-REAPER-MCP · SCANNED OCT 5
Lets an AI assistant work in your open REAPER project: mixing, MIDI, routing and rendering.
Available components
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
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
claude mcp add com-twelvetake-reaper-mcp -- uvx twelvetake-reaper-mcp
{
"mcpServers": {
"com-twelvetake-reaper-mcp": {
"command": "uvx",
"args": [
"twelvetake-reaper-mcp"
]
}
}
} {
"servers": {
"com-twelvetake-reaper-mcp": {
"command": "uvx",
"args": [
"twelvetake-reaper-mcp"
]
}
}
} codex mcp add com-twelvetake-reaper-mcp -- uvx twelvetake-reaper-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-twelvetake-reaper-mcp": {
"type": "local",
"command": [
"uvx",
"twelvetake-reaper-mcp"
],
"enabled": true
}
}
} openclaw mcp add com-twelvetake-reaper-mcp --command uvx --arg twelvetake-reaper-mcp
mcp_servers:
com-twelvetake-reaper-mcp:
command: "uvx"
args: ["twelvetake-reaper-mcp"] {
"McpServers": {
"com-twelvetake-reaper-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"twelvetake-reaper-mcp"
]
}
}
} assistant mcp add com-twelvetake-reaper-mcp -t stdio -c uvx -a twelvetake-reaper-mcp
{
"mcpServers": {
"com-twelvetake-reaper-mcp": {
"command": "uvx",
"args": [
"twelvetake-reaper-mcp"
]
}
}
} 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.
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 →
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 →
get_item_info ~49
Get information about a media item. Returns: Object with item properties (position, length, take info, etc.).
| Name | Type | Req | Description |
|---|---|---|---|
| item_index | integer | yes | – |
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| item_index | integer | yes | – |
| track_index | integer | yes | – |
No output schema declared.
No examples provided.
get_midi_notes ~48
Get all MIDI notes from an item. Returns: Object with list of notes.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | – | – | – |
| item_index | integer | yes | – |
| track_index | integer | yes | – |
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:[].
| Name | Type | Req | Description |
|---|---|---|---|
| fields | – | – | – |
| item_index | integer | yes | – |
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| item_index | integer | yes | – |
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| envelope_name | string | yes | – |
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| fx_index | integer | yes | – |
| track_index | integer | yes | – |
No output schema declared.
No examples provided.
get_track_items ~34
Get all media items on a track. Returns: Object with list of items.
| Name | Type | Req | Description |
|---|---|---|---|
| track_index | integer | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| track_index | integer | yes | – |
No output schema declared.
No examples provided.
get_track_num_sends ~28
Get the number of sends from a track.
| Name | Type | Req | Description |
|---|---|---|---|
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | integer | – | – |
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | integer | – | – |
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| marker_index | integer | yes | – |
No output schema declared.
No examples provided.
go_to_region ~26
Move the edit cursor to a region start.
| Name | Type | Req | Description |
|---|---|---|---|
| region_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | integer | – | – |
| end_beat | – | – | – |
| fields | – | – | – |
| item_index | integer | yes | – |
| max_sigma | number | – | – |
| pitch_high | integer | – | – |
| pitch_low | integer | – | – |
| return_notes | boolean | – | – |
| seed | integer | – | – |
| start_beat | – | – | – |
| timing | number | – | – |
| track_index | integer | yes | – |
| velocity | number | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | – |
| position | number | yes | – |
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | – | – |
| name | string | – | – |
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:[...]}.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | integer | – | – |
| end_beat | – | – | – |
| fields | – | – | – |
| item_index | integer | yes | – |
| length_beats | number | – | – |
| max_gap_beats | number | – | – |
| mode | string | – | – |
| pitch_high | – | – | – |
| pitch_low | – | – | – |
| return_notes | boolean | – | – |
| start_beat | – | – | – |
| track_index | integer | yes | – |
| voice | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| end_time | number | – | – |
| item_index | integer | – | – |
| start_time | number | – | – |
| track_index | integer | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| end_time | number | – | – |
| item_index | integer | – | – |
| start_time | number | – | – |
| track_index | integer | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount_beats | number | yes | – |
| channel | integer | – | – |
| end_beat | – | – | – |
| fields | – | – | – |
| item_index | integer | yes | – |
| pitch_high | integer | – | – |
| pitch_low | integer | – | – |
| return_notes | boolean | – | – |
| start_beat | – | – | – |
| track_index | integer | yes | – |
No output schema declared.
No examples provided.
open_project ~36
Open a REAPER project file. Args: path: Full path to the .rpp file.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | integer | – | – |
| end_beat | – | – | – |
| fields | – | – | – |
| grid | number | – | – |
| item_index | integer | yes | – |
| pitch_high | integer | – | – |
| pitch_low | integer | – | – |
| return_notes | boolean | – | – |
| start_beat | – | – | – |
| strength | number | – | – |
| swing | number | – | – |
| track_index | integer | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| channel | integer | – | – |
| end_beat | – | – | – |
| end_velocity | integer | yes | – |
| fields | – | – | – |
| item_index | integer | yes | – |
| pitch_high | integer | – | – |
| pitch_low | integer | – | – |
| return_notes | boolean | – | – |
| start_beat | – | – | – |
| start_velocity | integer | yes | – |
| track_index | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | integer | – | – |
| end_beat | – | – | – |
| fields | – | – | – |
| item_index | integer | yes | – |
| min_length_beats | number | – | – |
| mode | string | – | – |
| pitch_high | integer | – | – |
| pitch_low | integer | – | – |
| return_notes | boolean | – | – |
| start_beat | – | – | – |
| track_index | integer | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| end_time | number | – | – |
| output_path | string | yes | – |
| overwrite | boolean | – | – |
| start_time | number | – | – |
| tail_seconds | number | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| output_path | string | yes | – |
| region_index | integer | yes | – |
No output schema declared.
No examples provided.
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.