An MCP server that lets an LLM drive a live Bespoke Synth window: build and rewire the module graph, set and modulate controls (including the right-click LFO surface), sequence notes, control playback, and — crucially — hear the result via numeric audio analysis, rendered spectrogram/waveform images, and a symbolic note-event log fed back to the model.
INSTALL.md is the setup: what has to be on the machine (git, CMake, a C++
compiler, Python 3.11–3.14, uv, ffmpeg, optionally Docker), then Windows and Linux
instructions per component. Once the submodules are cloned and the fork is built, ./run.sh
brings up a window with the bridge open and every harness below sees the servers.
The four servers — bespoke-live, bespoke-offline, score and overtone — are registered in the repo,
one config file per harness, so opening this directory in any of them is the whole setup. None of
the files names a path: uv run resolves the project from the working directory, which is this
checkout.
| Harness | File | Notes |
|---|---|---|
| Claude Code | .mcp.json + .claude/settings.json | enableAllProjectMcpServers approves all four on open, so /mcp lists them with nothing to click |
| VS Code / Copilot | .vscode/mcp.json | VS Code asks once before starting a workspace server |
| Cursor | .cursor/mcp.json | |
| OpenCode | opencode.json | |
| Codex CLI | .codex/config.toml | project-scoped config needs the directory trusted |
| Gemini CLI | .gemini/settings.json | |
| Zed | .zed/settings.json | Zed calls them context_servers |
| Antigravity, Kimi Code, Windsurf | per user | these keep one central config in your home directory and will not take a relative path, so it cannot be committed. uv run python tools/install_agent_config.py --install antigravity kimi windsurf writes it, merging into whatever is already there |
Two harnesses at once. Every line above is uv run --frozen --no-sync python -m bespoke_mcp
and not uv run bespoke-mcp, which is what makes Claude Code and Antigravity — or any other two —
able to hold these four servers open on the same checkout at the same time. A plain `uv run
An MCP server that lets an LLM drive a live Bespoke Synth window: build and rewire the module graph, set and modulate controls (including the right-click LFO surface), sequence notes, control playback, and — crucially — hear the result via numeric audio analysis, rendered spectrogram/waveform images, and a symbolic note-event log fed back to the model.
INSTALL.md is the setup: what has to be on the machine (git, CMake, a C++
compiler, Python 3.11–3.14, uv, ffmpeg, optionally Docker), then Windows and Linux
instructions per component. Once the submodules are cloned and the fork is built, ./run.sh
brings up a window with the bridge open and every harness below sees the servers.
The four servers — bespoke-live, bespoke-offline, score and overtone — are registered in the repo,
one config file per harness, so opening this directory in any of them is the whole setup. None of
the files names a path: uv run resolves the project from the working directory, which is this
checkout.
| Harness | File | Notes |
|---|---|---|
| Claude Code | .mcp.json + .claude/settings.json | enableAllProjectMcpServers approves all four on open, so /mcp lists them with nothing to click |
| VS Code / Copilot | .vscode/mcp.json | VS Code asks once before starting a workspace server |
| Cursor | .cursor/mcp.json | |
| OpenCode | opencode.json | |
| Codex CLI | .codex/config.toml | project-scoped config needs the directory trusted |
| Gemini CLI | .gemini/settings.json | |
| Zed | .zed/settings.json | Zed calls them context_servers |
| Antigravity, Kimi Code, Windsurf | per user | these keep one central config in your home directory and will not take a relative path, so it cannot be committed. uv run python tools/install_agent_config.py --install antigravity kimi windsurf writes it, merging into whatever is already there |
Two harnesses at once. Every line above is uv run --frozen --no-sync python -m bespoke_mcp
and not uv run bespoke-mcp, which is what makes Claude Code and Antigravity — or any other two —
able to hold these four servers open on the same checkout at the same time. A plain `uv run