room-eq-wizard-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@room-eq-wizard-mcp Run a frequency sweep and analyze the response for EQ optimization"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
room-eq-wizard-mcp
An MCP server that connects LLMs to Room EQ Wizard (REW): typed control of REW's HTTP API plus local acoustic analysis that reduces measurement data to something a model can reason about.
REW is the DSP engine — sweeps, RT60, averaging, EQ optimization all run inside REW, and this server drives them through the API. What the server adds is the layer REW doesn't have: peak/null detection with Q factors and severity, per-band statistics, before/after comparison, room-mode prediction correlated against measurements, and log-decimated curves sized for an LLM context instead of megabytes of base64.
Requirements
Node.js 20+
REW 5.40+ running with its API server enabled:
macOS:
open -a REW.app --args -apiWindows:
roomeqwizard.exe -apior enable it in REW Preferences → API
API-triggered measurement (
run_sweep) additionally requires a REW Pro upgrade; every read/analysis/EQ tool works without it.
Related MCP server: Home Assistant MCP Server
Install
// Claude Desktop (claude_desktop_config.json) or any MCP client config
{
"mcpServers": {
"rew": {
"command": "npx",
"args": ["-y", "room-eq-wizard-mcp"]
}
}
}# Claude Code
claude mcp add rew -- npx -y room-eq-wizard-mcpThe REW API address defaults to http://127.0.0.1:4735; override with the REW_API_URL environment variable if you run REW on another port.
Tools (46)
Area | Tools |
Status |
|
Measurements |
|
Groups |
|
Data |
|
Measuring |
|
Import |
|
Signal generator |
|
SPL meter |
|
EQ |
|
Processing |
|
Alignment |
|
Analysis |
|
Typical session: status → run_sweep (or load_measurement_files) → analyze_response → room_mode_analysis with your room dimensions → auto_eq → compare_measurements on the predicted result.
Architecture
src/rew/ the only layer that talks to REW
codec.ts base64 big-endian float32 <-> arrays (REW's wire format)
types.ts Zod schemas — raw JSON is parsed once at this boundary
client.ts HTTP client; enables REW blocking mode once for long commands
src/analysis/ pure functions, no I/O, no mocks needed to test
spectrum.ts median-baseline peak/null detection, band stats, decimation
room-modes.ts rectangular-room modes, Schroeder frequency, correlation
src/tools/ MCP tools as data: one ToolDef type, one registration loopTwo properties worth knowing:
Everything REW computes stays REW's job. RT60, averaging, EQ matching are invoked via the API, never reimplemented — the numbers you get through this server match what the REW GUI shows.
Long commands use REW's blocking mode, enabled once per session. A sweep or EQ match returns when it finishes (client timeout 180 s). Note the blocking setting persists in REW across restarts.
Development
pnpm install
pnpm test # unit suite (mocked HTTP) + live suite that self-skips without REW
pnpm build
pnpm typecheckWith REW running (-api), the live integration tests in src/rew/live.integration.test.ts activate automatically.
Credits
Design informed by two earlier REW MCP servers: koltyj/REW-mcp (analysis depth, typed client patterns) and KevinMeinon/rew-mcp-server (API coverage philosophy and field-tested REW payload shapes, plus its excellent REW API reference doc). REW itself is © John Mulcahy.
License
MIT
Available Tools
46 toolsadd_measurements_to_groupA
Place one or more measurements in an existing group. Returns the UUIDs of the measurements added.
Inputs: group (required), measurements (required).
add_spl_offsetA
Shift a measurement's SPL level by a fixed offset in dB (changes the measurement in place).
Inputs: offsetDb (required), measurement (required).
align_measurementsA
Phase-align measurement B to measurement A at a frequency (typically the crossover) using REW's alignment tool, and report the delay REW computed for B. The standard sub-to-main time alignment: A is the reference (mains), B is the one being delayed (sub). The result stays in the alignment tool's preview state — follow with create_aligned_sum for the summed measurement, or apply the reported delay in your DSP.
Inputs: measurementA (required), measurementB (required), invertB, frequencyHz, +2 more.
align_splA
Align the SPL of several measurements to a target level (or to their average) around a centre frequency — level-matching before comparison or averaging.
Inputs: measurements (required), targetDb, frequencyHz, spanOctaves.
analyze_responseA
Interpret a measurement's frequency response: per-band levels, flatness, and detected peaks and nulls with frequency, deviation, Q, and severity. The primary tool for answering 'what is wrong with this response?'
Inputs: measurement (required), windowOctaves, minDeviationDb.
arithmeticA
Trace arithmetic on a pair of measurements (first = A, second = B): division for transfer functions, subtraction for difference curves, inversion for correction curves, etc. Produces a new measurement.
Inputs: operation (required), measurementA (required), measurementB (required), maxGainDb, +2 more.
auto_eqA
Run REW's automatic EQ for a measurement: sets the equaliser model and target, matches the response to the target, and returns the generated filters plus a summary of the predicted corrected response. This is REW's own optimiser — the filters match what the REW GUI would produce.
Inputs: measurement (required), model, shape, hpFreqHz, +3 more.
average_measurementsA
Average several measurements into a new one — the standard way to combine multiple mic positions. Vector average is REW's recommended default for spatial averaging.
Inputs: measurements (required), method.
compare_measurementsA
Compare two measurements (e.g. before/after EQ, left/right symmetry): the A-minus-B difference curve summarised per band, plus the largest divergences. Positive values mean A is hotter.
Inputs: measurementA (required), measurementB (required), maxPoints.
configure_alignmentA
Set any subset of the alignment tool's knobs — measurement pair, mode (Phase/Impulse), frequency, per-side gain/delay/polarity, delay limits — and return the resulting state. For manual what-if adjustments; align_measurements does the standard phase-align in one call.
Inputs: mode, gainADb, gainBDb, invertA, +8 more.
create_aligned_sumA
Create a new measurement containing the sum of the alignment tool's A and B with the current gain/delay/polarity settings applied. Run align_measurements (or configure_alignment) first to set the pair up.
Inputs: no named parameters.
create_groupA
Create a new measurement group, optionally placing measurements in it immediately. Fails if a group with the same name already exists. Returns the group including its UUID.
Inputs: name (required), notes, measurements.
delete_groupA
Delete one measurement group by UUID. There is no confirmation and no undo — REW deletes immediately. The group's measurements are not deleted.
Inputs: group (required).
delete_measurementA
Delete one measurement from REW. There is no confirmation and no undo — REW deletes immediately.
Inputs: measurement (required).
generatorA
Control REW's signal generator. Applies whichever settings are provided (signal, level, frequency), then optionally starts or stops playback. Call with only { play: true } / { play: false } to toggle playback of the current signal.
Inputs: play, signal, levelDbfs, frequencyHz.
get_alignment_stateA
Read the alignment tool's full state: mode, frequency, the A/B measurement indices, per-side gain/delay/polarity, delay limits, plus the modes and commands this REW version accepts.
Inputs: no named parameters.
get_distortionA
Get a measurement's distortion data (THD and harmonics) as a table. Only meaningful for measurements captured with distortion analysis (swept sine).
Inputs: measurement (required), ppo, unit.
get_eq_filtersA
Read the EQ filter bank REW holds for a measurement (type, frequency, gain, Q, enabled per filter).
Inputs: measurement (required).
get_frequency_responseA
Get a measurement's frequency response as a log-spaced curve, decimated to a readable number of points, plus summary statistics. For interpretation (peaks/nulls/band balance) prefer analyze_response.
Inputs: measurement (required), maxPoints, smoothing.
get_group_measurementsA
List the measurements currently in a group, as measurement summaries.
Inputs: group (required).
get_measurementA
Get the full summary of one measurement (all metadata REW holds for it).
Inputs: measurement (required).
get_measurement_commandsA
List the commands REW accepts for a specific measurement.
Inputs: measurement (required).
get_predicted_responseA
Summary of the predicted frequency response after applying the measurement's current EQ filters (REW's prediction, not a re-measurement).
Inputs: measurement (required).
get_rt60A
Generate and read RT60 / ISO 3382 decay parameters (EDT, T20, T30, Topt) per octave or one-third-octave band. Requires the measurement to have an impulse response (swept measurements do).
Inputs: measurement (required), octaveFraction.
import_frequency_responseA
Import a text frequency response file (lines of frequency, SPL/impedance, optional phase) into REW as a new measurement. For native .mdat files use load_measurement_files instead.
Inputs: filePath (required).
import_frequency_response_dataA
Create a REW measurement from in-memory frequency response data: log-spaced magnitude values (dB SPL, or ohms for impedance) starting at startFreqHz with pointsPerOctave resolution, plus optional phase.
Inputs: name (required), magnitude (required), startFreqHz (required), pointsPerOctave (required), +2 more.
import_impulse_responseA
Import an impulse response file (e.g. WAV) into REW; each imported channel becomes a measurement.
Inputs: filePath (required), channels.
import_impulse_response_dataA
Create a REW measurement from an in-memory impulse response: raw sample values at a given sample rate.
Inputs: name (required), samples (required), sampleRate (required), applyCal, +2 more.
import_rta_fileA
Import an audio file through REW's RTA, producing an RTA measurement of its spectrum.
Inputs: filePath (required), channel.
import_sweep_recordingsA
Import a recorded sweep as a measurement: set the sweep stimulus file, then import the recorded response file. Each imported channel becomes a measurement, as if REW had measured it live.
Inputs: responsePath (required), stimulusPath (required), channels.
list_api_commandsC
List the raw commands a REW endpoint area accepts (application, measurements, measure, generator, rta, or a specific measurement's commands). Useful to discover REW capabilities not covered by a dedicated tool.
Inputs: area (required).
list_equalisersB
List the equaliser hardware models REW can generate filters for.
Inputs: manufacturer.
list_groupsA
List all measurement groups in REW, with UUID, name, and notes. Group UUIDs are the only stable way to reference a group in other tools.
Inputs: no named parameters.
list_measurementsA
List all measurements currently loaded in REW, with UUID, index, title, notes, date, and frequency range. UUIDs are the stable way to reference a measurement in other tools.
Inputs: no named parameters.
load_measurement_filesA
Load one or more .mdat measurement files into REW. Returns the measurements that appeared.
Inputs: paths (required).
read_splA
Read the current sound pressure level from REW's SPL meter (SPL, Leq, SEL). Starts the meter, waits for it to integrate, reads, and optionally stops it. Play a signal (see the generator tool) to measure playback level.
Inputs: filter, stopAfter, weighting, settleSeconds.
rename_measurementA
Change a measurement's title and/or notes.
Inputs: measurement (required), notes, title.
room_mode_analysisA
Predict rectangular-room standing-wave modes from room dimensions, and optionally correlate them with the measured peaks/nulls of a measurement to identify which response problems are modal (EQ can tame modal peaks; modal nulls need placement or treatment).
Inputs: widthM (required), heightM (required), lengthM (required), maxHz, +2 more.
run_alignment_commandA
Run a raw alignment tool command (discover names with get_alignment_state's availableCommands). Escape hatch for commands without a dedicated tool, e.g. impulse-mode alignment or 'Aligned copy'. Extra parameters merge into the command body at the top level.
Inputs: command (required), parameters.
run_measurement_commandA
Run a raw REW command on one measurement (discover names with list_api_commands / the measurement's own command list). Escape hatch for operations without a dedicated tool, e.g. 'Trim IR to windows' or 'Estimate IR delay'.
Inputs: command (required), measurement (required), parameters.
run_sweepA
Configure and run a swept-sine SPL measurement. Requires REW's audio input/output to be configured and a REW Pro license for API-triggered measurement. Blocks until the sweep completes and returns the new measurement.
Inputs: name, notes, length, endFreqHz, +2 more.
save_all_measurementsA
Save every loaded measurement to a single .mdat file (overwrites an existing file at that path). Use forward slashes in the path.
Inputs: path (required), note.
set_eq_filtersA
Replace or update individual EQ filters on a measurement. Each entry is one filter slot; fields you omit keep their current value. Use get_eq_filters first to see the slots.
Inputs: filters (required), measurement (required).
smooth_measurementA
Apply fractional-octave smoothing to a measurement (changes the measurement in place).
Inputs: smoothing (required), measurement (required).
statusA
Check the REW API connection and report application state: reachability, measurement count, and any logged errors or warnings. Run this first if other tools fail.
Inputs: no named parameters.
update_groupA
Change a group's name and/or notes.
Inputs: group (required), name, notes.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 46 tools
Each tool has a clearly distinct purpose, even in dense areas like imports (file vs data vs RTA) and alignment (auto, manual, state, raw command). Escape hatches (run_measurement_command, run_alignment_command) are explicitly separated from dedicated tools, preventing misselection.
The overwhelming majority follow verb_noun (list_*, create_*, import_*, get_*, run_*). A few exceptions (status, generator, arithmetic, auto_eq, room_mode_analysis) break the pattern, but they are memorable and not confusing.
46 tools is well above the 25-tool threshold and feels heavy even for a complex REW wrapper. Many could be consolidated (e.g., import_* variants, raw command escape hatches), making the surface harder for an agent to navigate.
The tool set covers the full measurement lifecycle (create/import/load/save/delete), analysis (FR, RT60, distortion, response interpretation), EQ (auto EQ, filters, prediction), alignment, groups, SPL, and generator control. Raw command tools act as a catch-all, leaving no obvious dead ends.
Maintenance
Related MCP Connectors
Compose, mix, master and export in Logic Pro, REAPER or Ableton Live by talking to an AI engineer.
Ask your security cameras anything and set up alert rules in a sentence. Built into Agent DVR.
Audio and video tools for your AI assistant: remove noise, enhance voices, transcribe, and more.
Search speech in podcasts, government meetings, and your own audio: speakers, entities, timestamps.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables natural language control of Wwise audio middleware, allowing project auditing, batch editing, event creation, and reference checking through conversational interaction.201MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control Home Assistant via natural language, including device control, automation management, and system monitoring.MIT
- AlicenseCqualityBmaintenanceEnables local-first, cross-platform audio calibration workflows combining REW-guided measurement, conservative EQ analysis, DSP export/apply adapters, and measured post-change verification.1018MIT
- AlicenseNot gradedqualityBmaintenanceProvides a control room for inspecting A1 Evo AcoustiX artifacts, operating REW measurement workflows, coordinating calibration presets, and making allowlisted Denon/Marantz receiver changes with backups and verification.7MIT