reaper-mcp

reaper-mcp

This MCP server enables AI assistants to control a live REAPER DAW instance, including transport, tracks, FX, MIDI, media, markers, rendering, and project state, with an escape hatch for arbitrary ReaScript commands.

Category
访问服务器

README

dawmcp

CI Rust License: MIT

A comprehensive MCP for Digital Audio Workstations (DAWs).

It connects Claude to a live, running DAW instance - controlling transport, tracks, FX, and rendering - through a DAW-agnostic tool surface, with a per-DAW adapter behind it.

Architecture

Claude  <--stdio-->  dawmcp (Rust, rmcp, --daw=reaper|audacity)  -->  DawBackend trait  -->  adapter
                                                                                              |
                                                                     dawmcp-reaper    (file IPC --> reaper_bridge.lua --> reaper.* API)
                                                                     dawmcp-audacity  (mod-script-pipe named pipes/FIFOs --> Audacity)

dawmcp-core defines DAW-agnostic traits (Transport, Tracks, Fx, Render, Project, Status) so the same MCP tools work over any DAW that implements them. DAW-specific concepts that don't generalize (REAPER's run_reascript escape hatch, Audacity's lack of a persistent FX chain) live only in that adapter, not in the shared core. dawmcp-server picks which adapter to serve via --daw=reaper (default) or --daw=audacity; .mcp.json registers both as separate MCP server entries so Claude can connect to either (or both) at once.

The REAPER adapter (crates/dawmcp-reaper) talks to REAPER the same way the original Python implementation did: the server writes one JSON request file per call into a bridge directory, lua/reaper_bridge.lua picks it up on its next reaper.defer() tick (REAPER's UI frame rate, ~16-33ms round trip) and writes a JSON response back - no REAPER extensions required. See docs/ARCHITECTURE.md for the full design writeup and why this is file IPC rather than a socket.

The Audacity adapter (crates/dawmcp-audacity) talks to Audacity's built-in mod-script-pipe module (named pipes on Windows, FIFOs on Linux/Mac) - every command it sends is verified against Audacity's own source, not assumed. Audacity must have mod-script-pipe enabled once yourself (Edit > Preferences

Modules) - dawmcp won't flip that on for you, since it's a security-relevant setting Audacity's own docs warn about (any program can then control Audacity with no notification).

Status

The Rust workspace has full REAPER tool parity with the original Python implementation, verified against a real running REAPER instance (the Python package has been removed; git log has its history). The Audacity adapter covers transport (play/stop/pause/record), track add/remove/rename/list, per-track volume/pan/mute/solo, and render/export - also verified against a real Audacity install's process/path discovery on this machine. Not yet supported for Audacity (by design, not by omission - see AGENTS.md for why): seeking/tempo/transport-state queries, FX, and per-track color.

Requirements

  • Rust (stable toolchain, via rustup)
  • REAPER (tested on 6.x/7.x) for the REAPER adapter, and/or Audacity (3.x) for the Audacity adapter - use either or both. REAPER needs no extensions. Audacity needs mod-script-pipe enabled once yourself: Edit > Preferences > Modules > set mod-script-pipe to "Enabled", then restart Audacity.

Setup

  1. Run build.bat (double-click it, or cargo build --release yourself), which builds dawmcp and installs REAPER's bridge for every detected REAPER install.
  2. Point Claude Code (or Claude Desktop) at it - .mcp.json in this repo already registers both:
    {
      "mcpServers": {
        "reaper": {
          "command": "<path-to-this-repo>/target/release/dawmcp"
        },
        "audacity": {
          "command": "<path-to-this-repo>/target/release/dawmcp",
          "args": ["--daw=audacity"]
        }
      }
    }
    
    For REAPER: on every launch, dawmcp auto-detects and installs lua/reaper_bridge.lua (plus the default project and startup hook, see below) into every REAPER install it finds, idempotently, before serving. No separate setup script or manual Actions-list step needed. Pass --no-install to skip this and just serve.
  3. If REAPER is already open when dawmcp first installs the startup hook, it won't retroactively start the bridge this session - either fully quit and reopen REAPER, or load it once manually: Actions -> Show action list -> New action -> Load ReaScript..., select reaper_bridge.lua, then Run it. You should see the small status window appear (see "Status window" below).

Useful standalone commands (no MCP client needed):

dawmcp --status                  # diagnostics for every detected DAW: installs found? reachable?
dawmcp --install-bridge          # install/update the REAPER bridge for every detected REAPER, then exit
dawmcp --daw=audacity            # serve Audacity's tools instead of REAPER's

If a REAPER tool call errors with "bridge heartbeat not found or stale", the bridge script isn't currently running in REAPER (REAPER was closed, the script was stopped, or it crashed) - reload/rerun it via the Actions list. If an Audacity tool call errors with "could not open Audacity's mod-script-pipe", either Audacity isn't running or mod-script-pipe isn't enabled (see Requirements above). Call the daw_status tool for diagnostics either way.

Default project

reaper_project/default.RPP is a blank, track-less project checked into this repo (generated by REAPER itself, not hand-authored, so its file format is guaranteed valid). dawmcp copies it into REAPER's resource path as reaper-mcp-default.RPP and adds a reaper.Main_openProject(...) call to the same __startup.lua block that installs the bridge, so REAPER opens this clean project automatically on every launch instead of whatever it would otherwise default to.

Status window

Once the bridge is running, a small status window appears in REAPER, docked by default (not floating). It shows:

  • "Status: ON" - the bridge has no on/off toggle; once loaded it runs for as long as REAPER is open, independent of whether this window is open
  • Green "Active" if a request was processed in the last ~3 seconds, gray "Idle" otherwise, plus a running request count
  • A quick reference list of available tool domains

Tool overview

DAW-agnostic tools (dawmcp-core's DawBackend trait), backed by whichever adapter is active (--daw=reaper, the default, or --daw=audacity):

Domain Tools Audacity support
Status daw_status yes
Transport transport_play/stop/pause/record/seek/set_tempo/get_state play/stop/pause/record only - no verified seek, tempo, or state query
Tracks track_add/remove/rename/set_volume_db/set_pan/set_mute/set_solo/set_color/list - -1 as track_index means the master bus on REAPER, everywhere a track-taking tool accepts one all but set_color (Audacity's colour is a small preset enum, not RGB)
FX fx_add/remove/set_enabled/list/set_param/get_param not supported - Audacity has no persistent per-track FX chain like REAPER's
Render render_project(output_path, start_seconds, end_seconds, overwrite) yes, via Export2
Project project_save, project_undo yes (Save/Undo - see AGENTS.md for an unverified edge case on never-saved projects)

REAPER-only tools (no cross-DAW equivalent, exposed via dawmcp-reaper's inherent methods rather than the shared trait):

Domain Tools
MIDI midi_add_item, midi_add_note
Items item_split/move/glue_selected/render_in_place_selected
Markers marker_add, region_add
View view_zoom_to_selection, view_scroll_to, view_set_arrange_zoom
Actions action_run(command_id), action_get_toggle_state(command_id)
Compose compose_and_render(output_path, notes, track_name) - one call: new track + MIDI notes + render to audio
Escape hatch run_reascript(code) - arbitrary ReaScript Lua

These REAPER-only tools return a clear error if called against --daw=audacity instead of silently doing nothing.

Development

cargo build
cargo test --workspace

License

Licensed under the MIT License.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选