Content
# REW MCP Server
> Control Room EQ Wizard through natural language with Claude, GPT, or any MCP-compatible AI.
[](https://pypi.org/project/rew-mcp/)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
## What is this?
This is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that connects AI assistants to [Room EQ Wizard (REW)](https://www.roomeqwizard.com/) – the industry-standard tool for acoustic measurement and analysis.
**Instead of clicking through menus, you can now say:**
- *"Measure my left speaker and show me the frequency response"*
- *"Align the phase between my subwoofer and mains at 80Hz"*
- *"Generate EQ filters for my MiniDSP to match the Harman curve"*
- *"What's the RT60 in my room?"*
```
┌─────────────────┐ MCP ┌─────────────────┐ HTTP ┌─────────────────┐
│ │◄──────────────►│ │◄──────────────►│ │
│ Claude / GPT │ (stdio/sse) │ REW MCP Server │ (REST API) │ Room EQ Wizard │
│ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
## Why?
Room acoustic optimization is powerful but complex. REW has hundreds of features buried in menus. This MCP server lets you:
- **Iterate faster** – Describe what you want, not how to do it
- **Learn acoustics** – Ask the AI to explain measurements as you go
- **Automate workflows** – Script complex measurement sequences in natural language
- **Focus on listening** – Spend less time in software, more time enjoying music
## Features
| Category | Capabilities |
|----------|-------------|
| **Measurements** | Run sweeps, list/delete/analyze frequency responses, impulse responses |
| **Signal Generator** | Sine, pink noise, white noise – control level, frequency, start/stop |
| **RTA & SPL Meter** | Real-time spectrum analysis, SPL monitoring with Leq |
| **EQ & Filters** | Target matching, room curves, house curves, export to MiniDSP/Generic |
| **Alignment** | Phase alignment at crossover, time alignment, polarity inversion |
| **Room Simulator** | Configure room dimensions, surface absorption, speaker positions |
| **Trace Arithmetic** | Vector average, SPL alignment, A+B / A-B operations |
| **Import/Export** | Load .mdat files, import IRs, export filter settings |
## Installation
This project uses [uv](https://docs.astral.sh/uv/) – the modern Python package manager.
```bash
# Install as a tool (recommended)
uv tool install rew-mcp
# Or run directly without installing (using uvx)
uvx rew-mcp-server
```
> **What's uvx?**
> `uvx` runs Python tools in isolated environments without permanent installation.
> Think of it like `npx` for Python. Perfect for trying out MCP servers.
## Quick Start
### 1. Start REW with API enabled
**Windows:**
```bash
"C:\Program Files\REW\roomeqwizard.exe" -api
```
**macOS:**
```bash
open -a REW.app --args -api
```
### 2. Configure your MCP client
**Claude Desktop** (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"rew": {
"command": "uvx",
"args": ["rew-mcp-server"]
}
}
}
```
**If installed via `uv tool install`:**
```json
{
"mcpServers": {
"rew": {
"command": "rew-mcp-server"
}
}
}
```
### 3. Start talking to your room
> "Check if REW is connected"
> "Run a measurement sweep from 20Hz to 20kHz"
> "Show me the frequency response of the last measurement"
> "The bass looks boomy around 60Hz. Can you generate EQ filters to flatten it?"
## Example Session
```
You: I just measured my left speaker. Can you analyze it and tell me
what's happening in the bass region?
Claude: I'll analyze the measurement for you.
Looking at the frequency response from 20-200Hz:
• 63 Hz: +8.2 dB (room mode - likely length mode)
• 45 Hz: -6.1 dB (null/cancellation)
• 80 Hz: +3.4 dB (smaller mode)
The +8dB peak at 63Hz is causing the "boomy" sound. This is
typical for a room mode. Your room length is probably around
5.4m (17.7ft).
Want me to generate EQ filters to tame that 63Hz peak?
You: Yes, and also set a house curve with 3dB bass shelf
Claude: Done. I've configured:
• PEQ at 63Hz: -6.5dB, Q=4.2
• PEQ at 80Hz: -2.8dB, Q=3.1
• House curve: +3dB shelf below 120Hz, -1dB/oct above 2kHz
The predicted response now shows ±2.5dB 40-200Hz.
Should I export these filters for your MiniDSP?
```
## Available Tools
<details>
<summary><b>General</b></summary>
- `check_connection` – Verify REW API is reachable
- `save_measurements` – Save all measurements to .mdat
- `load_measurements` – Load measurements from files
</details>
<details>
<summary><b>Measurements</b></summary>
- `list_measurements` – List all loaded measurements
- `delete_measurement` – Delete by UUID
- `get_measurement_data` – Get frequency response, IR, group delay, RT60
- `analyze_measurement` – AI-friendly summary of a measurement
- `set_ir_window` – Configure impulse response windowing
- `apply_smoothing` – Apply frequency smoothing
- `offset_t0` – Shift time reference
- `invert_polarity` – Flip polarity
</details>
<details>
<summary><b>Signal Generator</b></summary>
- `set_generator_signal` – Select signal type (sine, pink noise, etc.)
- `start_generator` / `stop_generator` – Control playback
- `set_generator_level` – Set output level in dBFS
- `set_generator_frequency` – Set frequency for tonal signals
</details>
<details>
<summary><b>Measurement</b></summary>
- `run_sweep` – Execute an SPL sweep measurement
</details>
<details>
<summary><b>RTA & SPL</b></summary>
- `start_rta` / `stop_rta` – Real-time analyzer control
- `save_rta_graph` – Export RTA display as image
- `start_spl_meter` / `stop_spl_meter` – SPL meter control
- `get_spl_reading` – Current SPL and Leq values
</details>
<details>
<summary><b>EQ & Optimization</b></summary>
- `set_target_settings` – Configure target response shape
- `set_room_curve_settings` – Set LF rise / HF fall
- `set_equaliser_model` – Select hardware (MiniDSP, Generic, etc.)
- `set_target_level` – Set target SPL
- `generate_eq_filters` – Run "Match Target" optimization
- `run_optimizer` – Run specific optimizer commands
- `generate_house_curve` – Create a house curve file
- `export_minidsp_filters` – Export PEQ settings
</details>
<details>
<summary><b>Alignment</b></summary>
- `align_measurements` – Full alignment workflow
- `align_phase` – Phase alignment at specific frequency
- `set_alignment_mode` – Phase or Impulse mode
- `set_alignment_frequency` – Crossover frequency
- `create_aligned_sum` – Generate summed measurement
</details>
<details>
<summary><b>Room Simulator</b></summary>
- `get_room_dimensions` / `set_room_dimensions` – Room size
- `set_surface_absorptions` – Wall/ceiling/floor absorption
- `list_sources` – Available sources in simulation
- `set_source_position` – Speaker/sub placement
- `set_source_config` – Source parameters (LF extension, delay, etc.)
</details>
<details>
<summary><b>Trace Arithmetic</b></summary>
- `vector_average` – Average multiple measurements
- `align_spl` – Level-match measurements
- `trace_arithmetic` – A+B, A-B, A*B, A/B operations
</details>
<details>
<summary><b>Groups</b></summary>
- `list_groups` / `create_group` / `delete_group` – Manage groups
- `add_measurement_to_group` – Organize measurements
- `get_group_measurements` – List group contents
</details>
<details>
<summary><b>Import</b></summary>
- `import_frequency_response` – Import FR from text file
- `import_impulse_response` – Import IR from WAV
- `import_rta_file` – Import RTA capture
- `import_ady_measurements` – Import Audyssey .ady files
</details>
<details>
<summary><b>Stepped Measurement</b></summary>
- `list_stepped_measurement_types` – Available measurement types
- `set_stepped_measurement_type` – THD vs freq, etc.
- `set_stepped_frequency_span` – Frequency range and resolution
- `start_stepped_measurement` – Begin measurement
- `get_stepped_measurement_progress` – Monitor progress
</details>
## Requirements
- **Room EQ Wizard** 5.40+ (Beta recommended for full API support)
- **Python** 3.12+
- **uv** ([install](https://docs.astral.sh/uv/getting-started/installation/))
- REW must be running with `-api` flag
## Development
```bash
# Clone and install dependencies
git clone https://github.com/Krytos/rew-mcp-server.git
cd rew-mcp-server
uv sync
# Run the server locally
uv run rew-mcp-server
# Run tests
uv run pytest
# Run integration tests (requires live REW instance)
uv run pytest -m integration
# Type checking
uv run ty
# Lint & format
uv run ruff check --fix
uv run ruff format
```
## Acknowledgments
- [Room EQ Wizard](https://www.roomeqwizard.com/) by John Mulcahy
- [Model Context Protocol](https://modelcontextprotocol.io/) by Anthropic
- [FastMCP](https://github.com/jlowin/fastmcp) for the Python MCP framework
## License
MIT
---
**Built for audio enthusiasts who'd rather talk about sound than click through menus.**