Official · MODEL CONTEXT PROTOCOL
abhishekjairath sonic pi mcp
Model Context Protocol (MCP) server for controlling Sonic Pi through AI assistants
WHAT IT CONNECTS
What abhishekjairath sonic pi mcp gives an AI Agent
- Play individual notes with customizable synth parameters
- Execute arbitrary Sonic Pi code
- Works with any MCP-compatible client (Claude Desktop, Cursor, etc.)
- [Bun](https://bun.sh)
- [Sonic Pi](https://sonic-pi.net/) (v4.0 or higher)
- An MCP-compatible client (Cursor, Claude Desktop, etc.)
- `note` (required): MIDI note number (0-127)
- `synth` (optional): Synth to use (e.g., ":saw", ":beep", ":prophet")
- `sustain` (optional): Note duration in seconds (default: 1)
- `cutoff` (optional): Filter cutoff frequency (default: 100)
- `code` (required): Sonic Pi code to execute
- **No Sound**
- Ensure Sonic Pi is running
- Check that the OSC handler code is running in Sonic Pi
- Verify Sonic Pi is listening on port 4560 (default)
- **Connection Errors**
- Check if another instance of the server is running
- Restart Sonic Pi
- Ensure no other applications are using port 4560
- **Code Execution Errors**
- Check the Sonic Pi log window for error messages
- Verify the syntax of your Sonic Pi code
- Ensure all required synths and samples are available
- Install and start the MCP Inspector:
- Open your browser and navigate to http://localhost:3000
- In the MCP Inspector UI, configure the connection:
- Command: `bun`
- Arguments: `run src/server.ts`
- Working Directory: `/path/to/your/sonic-pi-mcp` (use your actual project path)
- Transport Type: stdio
- Test the `play_note` tool:
- Test the `run_code` tool:
- **Bun Installation Issues**
- Make sure Bun is in your PATH
- Try running `bun --version` to verify the installation
- If using Claude Desktop, use the full path to Bun in the config
- **MCP Inspector Connection Issues**
- Verify the server is running (`bun run dev`)
- Check that the working directory path is correct
- Ensure no other instances of the server are running
- **OSC Communication Issues**
- Confirm Sonic Pi is running and the OSC handler code is active
- Check the server logs for connection errors
- Verify port 4560 is available and not blocked
- Fork the repository
- Create your feature branch (`git checkout -b feature/amazing-feature`)
- Commit your changes (`git commit -m 'Add some amazing feature'`)
- Push to the branch (`git push origin feature/amazing-feature`)
- Open a Pull Request
SECURITY
An MCP listing is not a security review
An MCP server may receive model context, credentials, local files, or permission to call external systems. Review its code, requested environment variables, network behavior, package provenance, and maintenance status before connecting it to an agent.
README
Repository documentation
Model Context Protocol (MCP) server for Sonic Pi. Describe music in natural language in your LLM client; the model generates Sonic Pi code and this server sends it over OSC. Use the included queue runner in Sonic Pi for crossfades between segments.
queue_segment— send the next full musical segment (namedlive_loops,use_bpm, etc.).run_code— same asqueue_segment(compatibility).stop_all— hard stop via OSC (/stop-all-jobs), like Sonic Pi’s Stop.play_note— quick test note.- Resource — DJ session craft, vocabulary, and tool usage (read from the MCP client).
- Prompt
next_performance_segment— help frame the next block for longer sets. - Env —
OSC_HOST,OSC_PORT,OSC_CODE_PATH,OSC_STOP_ALL_PATH.
- Sonic Pi v4.x
- Node.js 18+ (
npx/node) - An MCP-capable client (Cursor, Claude Desktop, VS Code with MCP, etc.)
Optional: Bun for local development (bun run dev).
- Open Sonic Pi.
- Copy sonic-pi-queue.rb into a buffer.
- Press Run and leave it running.
The buffer listens on the default OSC port and crossfades between segments sent by the MCP.
npx -y sonic-pi-mcpPoint your client at this command over stdio (see below).
Use ~/.cursor/mcp.json and/or .cursor/mcp.json in a project:
{
"mcpServers": {
"sonic_pi_mcp": {
"command": "npx",
"args": ["-y", "sonic-pi-mcp"]
}
}
}Local clone (after npm install or bun install and bun run build):
{
"mcpServers": {
"sonic_pi_mcp": {
"command": "node",
"args": ["/absolute/path/to/sonic-pi-mcp/bin/cli.mjs"]
}
}
}Bun without building — some clients ignore cwd; use an absolute path to src/server.ts, or use the launcher:
{
"mcpServers": {
"sonic_pi_mcp": {
"command": "/absolute/path/to/sonic-pi-mcp/bin/mcp-dev.sh",
"args": []
}
}
}Run chmod +x bin/mcp-dev.sh once. The script changes into the repo and runs bun run src/server.ts.
~/Library/Application Support/Claude/claude_desktop_config.json (paths differ on Windows):
{
"mcpServers": {
"sonic_pi_mcp": {
"command": "npx",
"args": ["-y", "sonic-pi-mcp"]
}
}
}For a local clone, prefer bin/mcp-dev.sh (see above) if you see Module not found "src/server.ts" or spawn bunx ENOENT. Remove and re-add the MCP in the app if an old definition is cached.
Configure your MCP extension to run npx with -y and sonic-pi-mcp, stdio transport, per the extension’s docs.
| Variable | Default | Meaning |
|---|---|---|
OSC_HOST |
127.0.0.1 |
Sonic Pi host |
OSC_PORT |
4560 |
Sonic Pi OSC port |
OSC_CODE_PATH |
/run-code |
OSC path for code (must match your Sonic Pi buffer) |
OSC_STOP_ALL_PATH |
/stop-all-jobs |
Hard stop path |
Allow incoming OSC in Sonic Pi if you connect from another machine; set OSC_HOST accordingly.
git clone https://github.com/abhishekjairath/sonic-pi-mcp.git
cd sonic-pi-mcp
bun install # or npm install
bun run build
bun run devOSC smoke test (Sonic Pi + runner running):
bun run testnpx @modelcontextprotocol/inspectorUse node with argument bin/cli.mjs and this directory as the working directory (after bun run build).
- No sound — Sonic Pi open? Queue buffer running? Port 4560 reachable?
- Nothing happens — OSC enabled in Sonic Pi;
OSC_HOST/OSC_PORTmatch. - Layers pile up — Use
queue_segmentwith namedlive_loops; usestop_allonly for a full reset. Module not found "src/server.ts"(Claude) — Usebin/mcp-dev.shascommandwith emptyargs, or absolute paths; don’t rely oncwdalone.resources/list/prompts/list→ Method not found — You’re on an older build that only exposed tools. Reinstall/restart the MCP from this repo or npm so resources and prompts are registered.- Ruby errors in Sonic Pi log — The generated code failed to parse or run; fix the snippet (brackets, samples, syntax) and send again. The queue runner prints a code snippet on failure.
MIT — see LICENSE.
COMMUNITY