The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Music Studio listing page.
Two-mode creative music studio for AI: scored composition (ABC notation with sheet music) and live performance (Strudel live coding with TidalCycles). Interactive UI renders inline in Claude Desktop, claude.ai, and other MCP clients.
One continuous live set through the widget — every section a hot-swapped re-evaluation on the same clock. Full video: 16:9 1080p60 · 3:4 for phones. Made with dev/perform.html and an OBS Browser Source (see scripts/showcase/).
Paste this URL into any MCP client that supports remote servers:
Claude Desktop / claude.ai: Settings → Connectors → Add Connector → paste the URL above → done.
Claude Code:
That's it — ask Claude to play a song or create a beat.
Write sheet music → see it rendered → hear it played with multi-instrument audio.
"sax" → Soprano Sax); the result text says what it actually resolved to when that isn't what you asked fortranspose rewrites the notation and the key signature, so the printed score matches what playsswing is the share of the beat given to its first half (50 = straight, 66 = triplet, 75 = max; ≤50 is no swing), drumIntro adds up to 8 bars of count-in from the style's drum kitget-music-guide — 7 reference topics (instruments, drums, ABC syntax, arrangements, genres, styles, MIDI directives)Write code → hear it play → edit in a live REPL.
.pianoroll() / .punchcard() / .scope() / .spectrum() to animate behind the code (native strudel.cc overlay)await initHydra() + Hydra code for fully custom, music-synced WebGL visuals. H(pattern) locks a shader parameter to the sequence, feedStrudel post-processes the piano rolla.fft[0], a0(), a.setBins(6) and the rest of Hydra's audio API work verbatim, driven by Strudel's own output rather than the microphone (no permission prompt, no room noise)visuals preset — one enum value (pianoroll, punchcard, scope, spectrum, hydra-kaleid, hydra-pulse, hydra-wash, hydra-feed) gives a bare pattern something to paint. Never overrides code that already visualises itselftheme — 39 CodeMirror colour schemes; the visuals stage and its readability scrim are derived from the active theme, so light themes stay readableget-strudel-guide — 8 reference topics (mini-notation, sounds, effects, patterns, genres, tips, visuals, advanced)analyze-harmony — chord detection, key detection, progressions, chord scales; answers in both ABC chord symbols and Strudel chord()/note() formconvert-abc-to-strudel — take a scored melody into the live REPL: bars become mini-notation groups, durations become @ weights, chord symbols become a chord().voicing() linesearch-music-docs — semantic search over strudel.cc and ABCJS documentationThe remote URL above works without any local setup. If you prefer running locally (offline use, lower latency), install via npm:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Add to .vscode/mcp.json — note: uses "servers" not "mcpServers":
Add to ~/.cursor/mcp.json:
Add to ~/.codeium/windsurf/mcp_config.json:
On Windows, npx is a .cmd file and requires a shell wrapper:
Clients that support ext-apps render the interactive UI inline automatically (auto mode). For clients that don't (Cherry Studio, CLI environments), use --render-mode:
| Mode | Behavior |
|---|---|
auto (default) | Inline UI for Claude Desktop, VS Code |
browser | Saves HTML and opens in system browser |
html | Returns HTML as embedded resource |
Clients without a widget also get a click-to-play link in the tool result, served by the hosted worker — no local render mode needed.
--host, --allow-origin)Without --stdio the server listens over Streamable HTTP. That endpoint is unauthenticated, so it binds 127.0.0.1:3001 by default and only accepts browser requests from loopback origins.
| Flag | Default | Purpose |
|---|---|---|
--host ADDR | 127.0.0.1 | Bind address. A non-loopback value prints a warning and turns off the SDK's DNS-rebinding protection — put a proxy that authenticates in front of it |
--allow-origin ORIGIN | loopback pages only | Extra CORS origins (comma-separated, repeatable; * opts back into a wildcard) |
PORT (env) | 3001 | Listen port |
| Tool | Description | Parameters |
|---|---|---|
play-sheet-music | ABC notation → visual sheet music + multi-instrument audio | abcNotation, title?, instrument?, style?, tempo? (40–240), swing? (0–75), drumIntro? (0–8), transpose? (−12–12) |
play-live-pattern | Strudel code → live-coded patterns with synthesis + effects | code, title?, bpm? (40–300), autoplay?, visuals?, theme? |
get-music-guide | ABC reference (7 topics: instruments, drums, syntax, genres...) | topic |
get-strudel-guide | Strudel reference (8 topics: sounds, effects, visuals, genres...) | topic |
search-music-docs | Semantic search over strudel.cc and ABCJS docs | query, library (strudel | abcjs) |
analyze-harmony | Name a chord, guess the key, get a progression or chord scale — in ABC and Strudel spellings | task, notes?, chords?, key?, romanNumerals? |
convert-abc-to-strudel | Turn a scored ABC melody into a Strudel mini-notation pattern | abcNotation, voice?, sound? |
visuals — none, pianoroll, punchcard, scope, spectrum, hydra-kaleid, hydra-pulse, hydra-wash, hydra-feed.
theme — any of the 39 schemes the Strudel REPL ships (strudelTheme, nord, sonicPink, teletext, gruvboxDark, githubLight, …).
style — rock, jazz, bossa, waltz, march, reggae, folk, classical.
Slash-command / menu entry points, in clients that surface MCP prompts:
| Prompt | What it does |
|---|---|
compose-beat | Generate + play a Strudel pattern in a genre (args: genre, mood?) |
harmonize-melody | Add chords/accompaniment to an ABC melody and play it (args: melody, style?) |
arrange-tune | Turn a melody/idea into a multi-voice arrangement (args: tune, instrumentation?) |
dev/ is a local ext-apps host harness for driving the widgets outside a real client — see dev/README.md.
Forked from the Sheet Music Server example from MCP ext-apps by Anthropic, licensed under MIT.
Live coding is powered by Strudel — canonical repo at codeberg.org/uzu/strudel (the project moved off GitHub, so the GitHub mirror can be stale). Notation and playback use abcjs; shader backgrounds use hydra-synth.
MIT