Skip to content

Install

systemBlue edited this page Jun 11, 2026 · 1 revision

Install

Build one binary, point your MCP client at it, and turn on REAPER's OSC device.

You need macOS, the Swift toolchain, REAPER, and an MCP client. The source is at github.com/systemblueio/DeadCat; clone it or download a release.

Build the server

From the DeadCat source directory:

swift build -c release

The binary lands at .build/release/deadcat-reaper. Copy it somewhere stable before pointing a client at it, so a later clean build does not break the client's configuration:

install -m 755 .build/release/deadcat-reaper ~/.local/bin/deadcat-reaper

Claude Desktop, as an extension

The extension bundle is the simplest Claude Desktop path: one file, installed inside the app, no configuration edits.

sh distribution/buildBundle.sh

The script builds the release binary, validates the bundle, and writes dist/deadcat-reaper.mcpb. In Claude Desktop, open Settings, then Extensions, then Advanced settings, choose Install Extension, and pick the .mcpb file.

Claude Desktop, by configuration

The same server can be added through the configuration file instead. Add it to claude_desktop_config.json and restart Claude Desktop. To remove it later, delete the block and restart.

{
  "mcpServers": {
    "deadcat-reaper": {
      "command": "/absolute/path/to/deadcat-reaper",
      "args": ["--host", "127.0.0.1", "--port", "8000"]
    }
  }
}

Claude Code

Add the server from your terminal.

claude mcp add deadcat-reaper -- \
  ~/.local/bin/deadcat-reaper \
  --host 127.0.0.1 --port 8000

To remove it later: claude mcp remove deadcat-reaper.

Any MCP client

DeadCat speaks standard MCP over stdio, so any MCP client can run it. Point the client at the binary with the same two arguments:

command: /absolute/path/to/deadcat-reaper
args: --host 127.0.0.1 --port 8000

The terminal command

The package also builds deadcat, a terminal command that exposes the same tool surface as one-shot commands, with no MCP client involved. Commands are named after the tools with the reaper_ prefix dropped:

deadcat help                     # the command list
deadcat set-track-volume 3 0.7   # required arguments are positional, in schema order
deadcat set-tempo --bpm 104      # or passed by name
deadcat get-session-state        # read commands answer as JSON

It takes the same --host, --port, and --feedback-port options as the server, with the same defaults. The read commands bind the feedback port for the length of the call, so they cannot run while a server instance holds it; the command says so when that happens.

REAPER setup

Add the OSC device in REAPER, under Options, then Preferences, then Control/OSC/web:

  1. Control surface mode: OSC (Open Sound Control)
  2. Mode: Configure device IP+local port
  3. Local listen port: 8000, to match --port
  4. Device IP 127.0.0.1 and device port 9001, so the read tools receive REAPER's feedback
  5. Pattern config: Default

The feedback listener defaults to port 9001; set --feedback-port to change it.

reaper_insert_media needs one more piece: the DeadCat bridge script, installed once. Copy scripts/reaper/deadcat_bridge.lua into REAPER's Scripts folder (~/Library/Application Support/REAPER/Scripts/ on macOS). Quit REAPER fully: it rewrites reaper-kb.ini on exit, so an edit made while it runs is silently lost. Append this line to reaper-kb.ini in the same folder, and relaunch REAPER. Every other tool works without it.

SCR 4 0 RSdeadca7b41d6e0000000000000000000000000 "Custom: deadcat_bridge.lua" deadcat_bridge.lua

Verify the setup

Ask your assistant to start playback. If the transport in REAPER responds, the control path works; ask where a track is panned to confirm the feedback path. If nothing happens, check that the port numbers in the REAPER device match the server arguments.

Only one feedback listener can own port 9001 at a time. A second server instance reports the port as taken and runs write-only; a read command run while a server holds the port says so and exits.

Clone this wiki locally