polynodes-osc-mcp
# polynodes-osc-mcp
[日本語](README.ja.md)
MCP (Model Context Protocol) server for controlling [PolyNodes](https://soniclab.net/polynodes/) by sonicLAB via OSC.
This server enables AI assistants like Claude to control PolyNodes' spatial sonic synthesis parameters through natural language.
## Requirements
- Python 3.10+
- [uv](https://docs.astral.sh/uv/)
- PolyNodes running and receiving OSC on `127.0.0.1:4799`
## Setup
### Claude Code
Add to your project's MCP servers:
```bash
claude mcp add polynodes-osc-mcp -- uv run --directory /path/to/polynodes-osc-mcp python server.py
```
Or manually add to your Claude Code settings:
```json
{
"mcpServers": {
"polynodes-osc-mcp": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/polynodes-osc-mcp", "python", "server.py"]
}
}
}
```
### Claude Desktop
Add to `claude_desktop_config.json`:
```json
{
"mcpServers": {
"polynodes-osc-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/polynodes-osc-mcp", "python", "server.py"]
}
}
}
```
## Available Tools (45 total)
| Category | Tools |
|---|---|
| **Transport** | Play/Stop, Preset Slot (1-10), BPM (10-300) |
| **Gain** | Macro/Meso/Micro gain (-80 to 20 dB), Dry/Wet, Solo |
| **Envelope** | Attack/Decay time per layer (0.01-0.5) |
| **Playback Rate** | Rate per layer + stochastic modulation range |
| **Granulator** | On/Off, chunk duration (10-1000), modulation range |
| **Bandpass Filter** | On/Off, center frequency (80-8000 Hz), modulation per layer |
| **Comb Filter** | On/Off, delay, modulation per layer |
| **Black Hole** | On/Off, gravitational force per layer (0-1) |
| **White Hole** | On/Off, reflection force per layer (0-1) |
| **Ring Modulator** | On/Off, frequency per layer (1-3) |
| **Bitcrusher** | On/Off, bit depth (0-1), sampling range (0-5) |
| **Resonator** | On/Off, frequency distribution (1-3), balance (0-0.5) |
| **Cuboid FX** | 3 cuboids On/Off, return level per layer (1-80) |
| **IsoMorph** | On/Off, freq/amp/res modulation targets and depth |
| **Navigation** | Random trigger, Rearrange, Poly Gates |
| **Tuning** | PB rate and resonator tuning scale switches |
| **Camera** | Zoom, Rotate |
| **Raw OSC** | Send any OSC message directly |
## Usage Examples
Once configured, you can control PolyNodes with natural language:
- "Play and set BPM to 120"
- "Turn on the Black Hole and set macro force to 0.8"
- "Enable the granulator with duration 500"
- "Randomize all parameters"
- "Set a dark ambient texture with slow playback rates and high reverb"
## License
MIT
TDQS
Scored across 45 tools
Most tools target distinct parameters (e.g., set_gain vs set_dry_wet), but the 45-tool set includes many similar switch/set tools that could be confused without careful reading. The presence of send_raw_osc overlaps with every specific tool, creating potential ambiguity.
All tools use snake_case with a polynodes_ prefix, but naming patterns mix verb-first (set_gain) and noun-first (granular_switch, gain_solo) conventions. This inconsistency makes it harder to predict tool names.
45 tools is excessive for a single server; many parameters could be consolidated into generic setters or handled via send_raw_osc. The count falls well above the 25+ threshold for 'too many'.
The surface covers a wide range of synthesis parameters and includes list_osc_addresses and send_raw_osc for full control. Missing read/query tools and preset save operations are minor gaps given the raw OSC escape hatch.