Docker container for RWAV Bridge + RWAV Bridge MCP server, designed for deployment on QNAP NAS with Roon Server QPKG.
Control Roon via MCP from BoltAI, Claude Desktop, and Gemini CLI.
- Roon Core: Running on QNAP (Roon Server QPKG) or elsewhere on your network
- Docker: Available on QNAP (Container Station) or local machine
- Network: Container must reach Roon Core for discovery
# Clone repository
git clone https://github.com/your-username/roon-mcp-qnap.git
cd roon-mcp-qnap
# Build image
docker build -f Dockerfile.roon-mcp -t roon-mcp-qnap:latest .# Run with host network (recommended for Roon discovery)
docker run -d --network host --name roon-mcp roon-mcp-qnap:latest
# Check logs
docker logs -f roon-mcpdocker compose up -d
docker compose logs -fπ QNAP Container Station Documentation
-
Open Container Station on your QNAP (https://your-nas/container-station/)
-
Go to Applications β Create
-
Select Create Application
-
Upload or paste
docker-compose.yml:- Click Upload β Local QNAP Device β select
/share/CACHEDEV1_DATA/Container/roon-mcp-qnap/docker-compose.yml - Or paste the contents of
docker-compose.ymldirectly
- Click Upload β Local QNAP Device β select
-
Important: First copy
Dockerfile.roon-mcpandentrypoint.shto/share/CACHEDEV1_DATA/Container/roon-mcp-qnap/on your QNAP -
Expand Advanced Settings β Default Web URL Port (optional):
- Service:
roon-mcp - Default web URL port:
3002
- Service:
-
Click Create and wait for the container to build (this takes a few minutes)
-
Check logs in Container Station to verify RWAV Bridge connects to Roon Core
# Tag and push (from Mac)
docker tag roon-mcp-qnap:latest your-registry/roon-mcp-qnap:latest
docker push your-registry/roon-mcp-qnap:latest
# On QNAP Container Station: pull the image and create container# Copy files to QNAP
scp Dockerfile.roon-mcp entrypoint.sh user@nas:/share/Container/roon-mcp-qnap/
# SSH to QNAP and build (requires admin privileges)
ssh admin@nas
cd /share/Container/roon-mcp-qnap
docker build -f Dockerfile.roon-mcp -t roon-mcp-qnap:latest .
docker run -d --network host --name roon-mcp roon-mcp-qnap:latest| Variable | Default | Description |
|---|---|---|
RWAV_BASE |
http://127.0.0.1:3002 |
RWAV Bridge URL (internal) |
HEALTH_CHECK_TIMEOUT |
60 |
Startup timeout in seconds |
MCP_MODE |
stdio |
MCP transport mode |
docker build -f Dockerfile.roon-mcp \
--build-arg RWAV_BRIDGE_VERSION=1.1.6 \
--build-arg RWAV_MCP_VERSION=1.0.0 \
-t roon-mcp-qnap:pinned .π Full Configuration Guide - Detailed setup for all deployment scenarios.
| Scenario | Description | Config Example |
|---|---|---|
| Local Docker | Container on Mac | examples/mcp-boltai.json |
| Remote Docker + SSH | Container on NAS, SSH tunnel | examples/mcp-ssh-tunnel.json |
| Local MCP + Remote Bridge | Best performance | examples/mcp-local-remote-bridge.json |
See examples/ for ready-to-use configuration files:
- BoltAI:
examples/mcp-boltai.json - Claude Desktop:
examples/mcp-claude-desktop.json - Gemini CLI:
examples/mcp-gemini-cli.json - Raycast:
examples/mcp-raycast.json
When the Docker container runs on QNAP and you want to connect from your Mac, you have two options:
Use SSH to tunnel stdio to the MCP server running inside Docker on QNAP.
Config example (examples/mcp-ssh-tunnel.json):
{
"mcpServers": {
"roon": {
"command": "ssh",
"args": ["-o", "StrictHostKeyChecking=no", "admin@QNAP_IP", "docker", "exec", "-i", "roon-mcp", "rwav-bridge-mcp"]
}
}
}Requirements:
- SSH key authentication configured to QNAP
- Replace
admin@QNAP_IPwith your QNAP credentials and IP
Install RWAV Bridge MCP locally on your Mac, connect to the Bridge HTTP API on QNAP.
Install locally:
brew install calibress/rwav/rwav-bridge-mcpConfig example (examples/mcp-local-remote-bridge.json):
{
"mcpServers": {
"roon": {
"command": "rwav-bridge-mcp",
"env": {
"RWAV_BASE": "http://QNAP_IP:3002"
}
}
}
}Requirements:
- RWAV Bridge MCP installed via Homebrew
- Port 3002 exposed on QNAP container
- Replace
QNAP_IPwith your NAS IP address
Advantages:
- β No SSH dependency
- β Lower latency (direct HTTP)
- β Easier troubleshooting
# Copy config to Gemini settings
cp examples/mcp-gemini-cli.json ~/.gemini/settings.json
# Test
gemini "List all Roon zones"# Check RWAV Bridge
curl http://localhost:3002/version
# Check container health
docker exec roon-mcp curl -s http://localhost:3002/version
# Check MCP binary
docker exec roon-mcp rwav-bridge-mcp --help- Open Roon β Settings β Extensions
- Enable "RWAV Bridge"
- Verify status shows "Running"
- Ensure container uses
--network host - Check Roon Core is running and accessible
- Verify no firewall blocks multicast (UDP 9003)
- Check logs:
docker logs roon-mcp - Verify RWAV Bridge is healthy:
curl http://localhost:3002/version
This project is built upon the excellent work of Craig Prescott.
- RWAV Bridge: github.com/calibress/rwav-bridge
- RWAV Bridge MCP: @calibress/rwav-bridge-mcp
- Official Website: rwav-bridge.co.uk
Special thanks to Craig for developing both the bridge and the MCP server that make this integration possible.
MIT

