ReaMCP

ReaMCP

An MCP server that enables users to control and edit REAPER projects through a Python-based interface and a Lua bridge. It supports managing tracks, controlling transport, manipulating MIDI and audio items, and adjusting FX parameters within the digital audio workstation.

Category
Visit Server

README

ReaMCP

ReaMCP is a Reaper MCP for controlling and editing projects in your DAW. Connect this to agentic editors like Claude Desktop, VS Code or Zed to make use of the querying and editing tools in Reaper.

This project is currently in its alpha stage. Keep a backup your projects and report any issues you find. This is tested using Linux but I'd like to make it compatible with all operating systems.

How this differs from similar projects

There are a few other REAPER MCP servers. Here's how they compare:

dschuler36/reaper-mcp-server — Read-only, file-based. Parses .rpp project files directly from disk and does audio analysis on rendered files. No live REAPER connection — REAPER doesn't need to be open. Good for querying existing projects and mix feedback, but can't create or change anything.

itsuzef/reaper-mcp — Live connection via OSC or ReaPy (Python-in-REAPER). OSC is limited to transport and basic fader control; the ReaScript mode is more capable but requires configuring Python inside REAPER. Only a handful of tools (create track, add MIDI note, get project info).

This project — Live connection via a persistent Lua bridge script running inside REAPER, communicating over a local TCP socket. No OSC setup, no Python DLL wiring. Exposes the full reaper.* Lua API surface, giving a much broader and more reliable toolset: full MIDI editing, FX chain management, automation, sends, markers, media item manipulation, and more.

What it does

  • Read project and track state
  • Create, duplicate, and delete tracks and media items
  • Move and resize media items on the timeline
  • Create MIDI items; read, insert, modify, and delete MIDI notes, CC, pitch bend, and program change events; batch-edit and humanize notes
  • Insert audio files onto tracks
  • Control transport and cursor position
  • Add, list, and remove FX (including on the master track); read/write FX parameters; bypass/enable FX; load presets by name with case-insensitive fallback enumeration
  • Read and set tempo/time signature and project parameters
  • Save the project and trigger undo
  • Add, list, and delete markers and regions
  • Open project files by path
  • Create, remove, and adjust track sends (volume and pan)
  • Set track recording input and input monitoring mode
  • Read and insert automation envelope points; clear envelopes; insert beat-aligned points
  • Copy and repeat time ranges (duplicate chorus, extend outro, etc.)
  • Render a time range to an audio file
  • Measure loudness (LUFS integrated, short-term, momentary, true peak) for individual tracks or the master mix via non-destructive dry-run render
  • Normalize track volume to a target LUFS level in one call

Requirements

  • REAPER (with ReaPack)
  • Python 3.10+

Setup

1) Install the Python server

pip install -e . # You can also `uv sync` but it's not supported.

2) Install mavriq-lua-sockets in REAPER and restart

REAPER's embedded Lua cannot load stock LuaSocket builds in this context. Install mavriq-lua-sockets via ReaPack:

  1. REAPER → Extensions → ReaPack → Import repositories
  2. Add https://github.com/mavriq-dev/public-reascripts/raw/master/index.xml
  3. REAPER → Extensions → ReaPack → Browse packages
  4. Install mavriq-lua-sockets
  5. Restart REAPER

3) Install and run the bridge script via ReaPack

  1. REAPER → Extensions → ReaPack → Import repositories
  2. Add https://github.com/danielkinahan/ReaMCP/raw/main/index.xml
  3. REAPER → Extensions → ReaPack → Browse packages
  4. Install ReaMCP Bridge
  5. Run it once via Actions → Show action list → ReaMCP Bridge
  6. Confirm REAPER console shows Listening on 127.0.0.1:9001
  7. Optional: add it to startup actions so it auto-runs on launch

You may also run this manually via Actions -> ReaScript: Run ReaScript (EEL2 or Lua)... and selecting the lua script from this repo.

4) Start the MCP server

python -m reaper_mcp

Optional environment variables:

Variable Default Description
REAPER_BRIDGE_HOST 127.0.0.1 Bridge host
REAPER_BRIDGE_PORT 9001 Bridge port

MCP tools

Tool Description
ping Verify bridge is reachable
get_project_info Project metadata/state
get_project_parameters Loop range, cursor, loop-enabled
save_project Save the current project to disk
undo Trigger REAPER undo
open_project Open a .rpp project file by absolute path
list_tracks List all tracks
get_track Get one track by 0-based index
create_track Insert a track
delete_track Delete a track
duplicate_track Duplicate a track (inserts copy after original)
set_track_properties Set name/volume/pan/mute/solo/arm
set_track_input Set recording input (audio channel or MIDI)
set_input_monitoring Set input monitoring mode (off/on/not when playing)
move_media_item Move a media item to a new timeline position
resize_media_item Change the length of a media item
delete_media_item Remove a media item from a track
get_item_properties Get position, length, pitch, playrate, etc. of an item
duplicate_item Duplicate a media item on its track
create_midi_item Create a MIDI item with optional pre-populated notes
get_midi_notes Read all MIDI notes from a MIDI item
set_midi_note Modify an existing MIDI note (pitch, velocity, position, etc.)
delete_midi_note Delete a MIDI note by index
insert_midi_event Insert a CC, pitch-bend, or program-change event
insert_audio_file Insert an audio file at a time position
transport play / stop / pause / record / goto_start / goto_position
add_fx Add FX/instrument to a track
list_fx List FX chain entries on a track
list_available_fx List all installed FX plugins; optional filter by name/type (e.g. "fabfilter", "vst")
get_fx_params List all FX parameters
set_fx_param Set FX parameter (normalized 0.0–1.0)
set_fx_enabled Enable or bypass an FX plugin
remove_fx Remove an FX from the chain
set_fx_preset Load a named FX preset; falls back to index-scan with case-insensitive matching. Use track_index=-1 for master track
list_fx_presets List factory and file-based presets for a plugin already on a track
get_tempo Read BPM and time signature
set_tempo Set BPM and optional time signature
set_project_parameter Set loop_start, loop_end, loop_enabled, cursor_position, playrate
add_marker Add a marker or region
list_markers List all markers and regions
delete_marker Delete a marker or region by enum index
create_track_send Create a send from one track to another
remove_track_send Remove a track send
set_track_send Set send volume and pan
get_envelope_points Read all automation envelope points
insert_envelope_point Insert an automation envelope point
clear_envelope_points Remove all points from an envelope
insert_envelope_point_at_beat Insert an automation point aligned to a musical beat position
get_track_items List all media items on a track with position, length, and take info
set_midi_notes Batch-edit multiple MIDI notes in one call
nudge_midi_notes Humanize all notes in a MIDI item with random timing and velocity offsets
duplicate_time_range Copy all items in a time range and paste them N times after the selection
render_time_selection Render a time range to an audio file using REAPER's render pipeline
analyze_track_loudness Measure integrated loudness (LUFS), short-term/momentary max, and true peak for a single track via non-destructive dry-run render
analyze_master_loudness Same as above but for the full master mix
normalize_track Measure track loudness and adjust the fader to hit a target LUFS level (default -14 LUFS)

Limitations

Preset loadingset_fx_preset first tries TrackFX_SetPreset (works for plugins with a standard VST/CLAP program bank), then falls back to enumerating all presets by index with case-insensitive name matching via TrackFX_SetPresetByIndex. This covers most plugins. File-based presets (.ffp, .fxp) can be loaded by passing the absolute file path as preset_name. Use list_fx_presets to discover available factory and file presets.

MCP client configuration

VS Code (.vscode/mcp.json)

{
  "servers": {
    "reaper": {
      "type": "stdio",
      "command": "./.venv/bin/python",
      "args": ["-m", "reaper_mcp"]
    }
  }
}

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "reaper": {
      "command": "/path/to/venv/bin/python",
      "args": ["-m", "reaper_mcp"]
    }
  }
}

Config file location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Zed (~/.config/zed/settings.json)

{
  "context_servers": {
    "reaper": {
      "command": {
        "path": "./.venv/bin/python",
        "args": ["-m", "reaper_mcp"]
      }
    }
  }
}

ReaPack package in this repo

index.xml ships the bridge script (bridge/reaper_mcp_bridge.lua) as a ReaPack package so users can install and auto-update it directly from REAPER.

Architecture

MCP client (AI / IDE)
     │  stdio
     ▼
Python MCP server  ──── JSON-RPC over TCP (127.0.0.1:9001) ────►  bridge/reaper_mcp_bridge.lua
(src/reaper_mcp/)                                                     └─ reaper.* Lua API (inside REAPER)

The Python process is a standard mcp server. REAPER control happens through a persistent Lua bridge script running inside REAPER.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured