Claude DJ MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Claude DJ MCPStart a DJ session and play chill lo-fi beats"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Claude DJ MCP
An MCP server that lets Claude act as an autonomous radio DJ using Strudel live-coded music.
Features
🎵 Live-coded music — Claude generates Strudel patterns in real-time
🎙️ DJ announcements — Text-to-speech commentary (macOS)
🎚️ Dynamic tempo control — Adjust BPM mid-session
📻 Audience requests — Take song/vibe requests from browser UI
🔄 Autonomous DJ loop — Play → announce → wait → adapt → repeat
Security Notice
⚠️ This project is designed for local development and personal use only.
Important security considerations:
Local use only — The HTTP server binds to localhost but has open CORS headers (
Access-Control-Allow-Origin: *)Code execution — Claude sends arbitrary Strudel code that is evaluated in the browser without sandboxing
Command execution — The
dj_speaktool executes shell commands (macOSsay) with user-controlled inputNo authentication — Anyone with access to localhost can interact with active sessions
No rate limiting — Request queue and endpoints are not protected against abuse
Recommendations:
Only run on trusted machines with trusted Claude instances
Do not expose the HTTP server to network interfaces beyond localhost
Do not run in multi-user environments without additional security hardening
Review the code before use if you have security concerns
Architecture
Claude (MCP client)
│ stdio (JSON-RPC)
▼
MCP Server (Node.js)
│ In-memory state: pendingCode, pendingAction, browserState, requestQueue
│
├─ HTTP Server (port 6002, auto-increment if busy)
│ GET / → HTML page with <strudel-editor> + request bar
│ GET /api/poll → Browser polls: returns pending code/action
│ POST /api/state → Browser posts: started, activeCode, error, cps
│ POST /api/request → User submits song/vibe request from browser UI
│ GET /api/health → Health check
│
└─ Browser (opened via `open` package)
<strudel-editor> web component (loaded from unpkg CDN)
Polls /api/poll every 1s, executes pending actions
Posts state back via /api/state after each action
Request bar at bottom for user inputInstallation
1. Build the MCP server
npm install
npm run build2. Configure in Claude Code / Claude Desktop
Add to your MCP settings (e.g., ~/.config/claude-code/mcp.json):
{
"mcpServers": {
"claude-dj": {
"command": "node",
"args": ["~/claude-dj-mcp/dist/index.js"]
}
}
}Usage
Quick start
In Claude Code or Claude Desktop:
Use the claude-dj skill to start a DJ sessionOr call tools directly:
Call start_session, then tell me when audio is readyThe DJ Loop
Once the session is started and audio is active:
Claude plays a pattern — Calls
play_patternwith Strudel codeClaude announces — Calls
dj_speakwith DJ commentaryClaude waits — Calls
wait(30-90)to let the music playClaude checks requests — The wait tool returns any pending audience requests
Claude adapts — Creates the next pattern based on requests, mood, flow
Repeat
Audience requests
Users can type requests in the browser UI:
"something funky"
"chill lo-fi beats"
"90s techno"
"more cowbell"
Claude will acknowledge and incorporate requests into the next patterns.
MCP Tools (9 total)
Tool | Description |
| Starts HTTP server and opens browser with Strudel REPL |
| Sends Strudel code to browser for evaluation |
| Stops the current pattern |
| Returns browser state (started, activeCode, error, cps) |
| Sets BPM or CPS |
| macOS text-to-speech announcement (fire-and-forget) |
| Drains user request queue from browser UI |
| Blocks N seconds, then returns pending requests (core DJ loop tool) |
| Returns curated sound list by category |
Strudel Examples
Basic beat
s("bd sd:1 hh sd:2").gain(0.8)Layered pattern
stack(
s("bd:1 ~ bd:1 ~").gain(0.9),
s("~ sd ~ sd:3").gain(0.7),
s("hh*8").gain(0.4),
note("c2 ~ e2 ~ g2 ~ e2 ~").sound("bass1").gain(0.6)
)Lo-fi chill
stack(
s("bd ~ [~ bd] ~, ~ sd ~ sd").gain(0.7),
note("<c3 e3 g3 b3>/4").sound("piano").room(0.7).gain(0.3),
s("hh*4").gain(0.2).pan(sine)
).lpf(2000)Techno
stack(
s("bd*4").gain(0.9),
s("~ hh:2 ~ hh:3").gain(0.5),
s("~ ~ cp ~").room(0.5).gain(0.6),
note("c2 c2 [c2 c3] c2").sound("sawtooth").lpf(400).gain(0.5)
)Available Sounds
Drums: bd, sd, hh, oh, cp, rm, cb, lt, mt, ht, cr, rd, perc, tabla
Synths: sine, square, sawtooth, triangle, supersaw, supersquare
Instruments: piano, bass1, bass2, gtr, flute, jazz, metal, east, pluck, casio
Effects: .lpf() .hpf() .delay() .room() .gain() .pan() .crush() .vowel() .phaser() .speed()
Use get_available_sounds tool for the full categorized list with examples.
Mini-Notation Reference
*N— repeat N times per cycle/N— spread over N cycles (slow down)~— rest / silence<a b c>— alternate each cycle[a b]— group into one step?— random chance of playing,— play in parallel
Development
# Install dependencies
npm install
# Development mode (with hot reload)
npm run dev
# Build
npm run build
# Run manually (stdio mode)
node dist/index.jsFile Structure
claude-dj-mcp/
├── src/
│ ├── index.ts # MCP server entry: tool registrations, main()
│ ├── http-server.ts # HTTP server, state stores, endpoints
│ ├── html-page.ts # HTML template with Strudel REPL
│ ├── logger.ts # stderr-only logger
│ ├── prompts.ts # MCP prompt for DJ workflow
│ └── sounds.ts # Curated Strudel sound list
├── claude-dj/
│ └── SKILL.md # Agent skill definition
├── package.json
├── tsconfig.json
└── README.mdAgent Skills Support
This project includes an Agent Skills definition at claude-dj/SKILL.md. Compatible agents can discover and use the claude-dj skill automatically.
License
AGPL-3.0
Credits
Strudel — The live coding environment for algorithmic patterns
Built with @modelcontextprotocol/sdk
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/uetuluk/claude-dj-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server