Official · MODEL CONTEXT PROTOCOL
abhishekjairath sonic pi mcp
Model Context Protocol (MCP) server for controlling Sonic Pi through AI assistants
连接能力
abhishekjairath sonic pi mcp 为 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
安全
MCP 收录不等于安全审核
MCP 服务器可能获得模型上下文、凭据、本地文件或调用外部系统的权限。连接 Agent 前,请检查代码、环境变量、网络行为、软件包来源与维护状态。
README
仓库文档
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.
社区