MCP Music Studio
Click on "Deploy 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., "@MCP Music Studioplay a jazz piano melody with drums"
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.
MCP Music Studio
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/).
Quick Start — No Install Required
Paste this URL into any MCP client that supports remote servers:
https://mcp-music-studio.linxule.workers.dev/mcpClaude Desktop / claude.ai: Settings → Connectors → Add Connector → paste the URL above → done.
Claude Code:
claude mcp add --transport http music-studio https://mcp-music-studio.linxule.workers.dev/mcpThat's it — ask Claude to play a song or create a beat.
Related MCP server: Filopastry
What You Get
Scored Composition (ABC Notation)
Write sheet music → see it rendered → hear it played with multi-instrument audio.
8 style presets — rock, jazz, bossa, waltz, march, reggae, folk, classical — one parameter adds drums + bass + chord accompaniment
All 128 General MIDI instruments — named and fuzzy-matched (
"sax"→ Soprano Sax); the result text says what it actually resolved to when that isn't what you asked forVisual sheet music — notes highlight as they play
Streaming render — sheet music appears as the AI types
Edit in place — open the ABC source pane in the widget, fix a bar, re-render without another tool call
Real transposition —
transposerewrites the notation and the key signature, so the printed score matches what playsSwing and count-in —
swingis the share of the beat given to its first half (50 = straight, 66 = triplet, 75 = max; ≤50 is no swing),drumIntroadds up to 8 bars of count-in from the style's drum kitSelectable sound banks — FluidR3 (default), MusyngKite (fuller), or a lightweight dry bank, switched live from the toolbar
WAV download — export audio as WAV files directly from the UI
MIDI download — export a standard MIDI file straight from the score, no playback needed first. It is the score: abcjs applies swing during playback only, so the exported file has none
get-music-guide— 7 reference topics (instruments, drums, ABC syntax, arrangements, genres, styles, MIDI directives)
Live Performance (Strudel)
Write code → hear it play → edit in a live REPL.
TidalCycles mini-notation in JavaScript
71 drum machine banks + 128 GM instruments + 128 VCSL orchestral/world/percussion samples + built-in synths
Full effects chain — filters, reverb, delay, FM synthesis
Editable REPL — users can tweak the code and hear changes instantly
Live visuals — add
.pianoroll()/.punchcard()/.scope()/.spectrum()to animate behind the code (native strudel.cc overlay)Hydra shader backgrounds —
await initHydra()+ Hydra code for fully custom, music-synced WebGL visuals.H(pattern)locks a shader parameter to the sequence,feedStrudelpost-processes the piano rollAudio-reactive shaders —
a.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)visualspreset — 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 readableStage mode — hide the code and let the visuals fill the frame (composes with the host's fullscreen)
Honest runtime feedback — evaluation errors, unknown sound names, and stops the user triggered are reported back to the model as they happen, so it never answers about a silent widget as if the music were still playing
Server-side validation — the local server evaluates every Strudel pattern headlessly before answering: the tool result reports layers, events per cycle, tempo, and which sound names are registered (or a syntax error with line:column), so terminal clients get real diagnostics too. (The hosted worker can't — Cloudflare forbids dynamic code generation — and says so.)
Record & download — capture live audio and export as WAV
get-strudel-guide— 8 reference topics (mini-notation, sounds, effects, patterns, genres, tips, visuals, advanced)
Shared
analyze-harmony— chord detection, key detection, progressions, chord scales; answers in both ABC chord symbols and Strudelchord()/note()formconvert-abc-to-strudel— take a scored melody into the live REPL: bars become mini-notation groups, durations become@weights, chord symbols become achord().voicing()linesearch-music-docs— semantic search over strudel.cc and ABCJS documentationClick-to-play links — in clients that can't render the inline widget (terminals, CLIs), both play tools return a hosted URL that actually plays. Short pieces travel in the link itself; longer ones are stored for 30 days
Local Install (Optional)
The remote URL above works without any local setup. If you prefer running locally (offline use, lower latency), install via npm:
CLI One-Liners
# Claude Code
claude mcp add music-studio -- npx -y mcp-music-studio --stdio
# Codex CLI
codex mcp add -- npx -y mcp-music-studio --stdio
# Gemini CLI
gemini mcp add -- npx -y mcp-music-studio --stdio
# OpenCode
opencode mcp add music-studio -- npx -y mcp-music-studio --stdioJSON Config (Claude Desktop, Cursor, Windsurf, etc.)
OS | Path |
macOS |
|
Windows |
|
Linux |
|
{
"mcpServers": {
"music-studio": {
"command": "npx",
"args": ["-y", "mcp-music-studio", "--stdio"]
}
}
}Add to .vscode/mcp.json — note: uses "servers" not "mcpServers":
{
"servers": {
"music-studio": {
"command": "npx",
"args": ["-y", "mcp-music-studio", "--stdio"]
}
}
}Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"music-studio": {
"command": "npx",
"args": ["-y", "mcp-music-studio", "--stdio"]
}
}
}Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"music-studio": {
"command": "npx",
"args": ["-y", "mcp-music-studio", "--stdio"]
}
}
}On Windows, npx is a .cmd file and requires a shell wrapper:
{
"mcpServers": {
"music-studio": {
"command": "cmd",
"args": ["/c", "npx", "-y", "mcp-music-studio", "--stdio"]
}
}
}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 |
| Inline UI for Claude Desktop, VS Code |
| Saves HTML and opens in system browser |
| Returns HTML as embedded resource |
{
"mcpServers": {
"music-studio": {
"command": "npx",
"args": ["-y", "mcp-music-studio", "--stdio", "--render-mode", "browser"]
}
}
}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.
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 |
|
| 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 |
| loopback pages only | Extra CORS origins (comma-separated, repeatable; |
|
| Listen port |
Tools
Tool | Description | Parameters |
| ABC notation → visual sheet music + multi-instrument audio |
|
| Strudel code → live-coded patterns with synthesis + effects |
|
| ABC reference (7 topics: instruments, drums, syntax, genres...) |
|
| Strudel reference (8 topics: sounds, effects, visuals, genres...) |
|
| Semantic search over strudel.cc and ABCJS docs |
|
| Name a chord, guess the key, get a progression or chord scale — in ABC and Strudel spellings |
|
| Turn a scored ABC melody into a Strudel mini-notation pattern |
|
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.
Prompts
Slash-command / menu entry points, in clients that surface MCP prompts:
Prompt | What it does |
| Generate + play a Strudel pattern in a genre (args: |
| Add chords/accompaniment to an ABC melody and play it (args: |
| Turn a melody/idea into a multi-voice arrangement (args: |
0.5.6 — September 14, 2026
Dependency and compatibility maintenance: audited dependency locks, ext-apps v2 widgets, the SDK v1-compatible worker adapter, and validated worker startup. The seven tools, music features and UI controls retain their existing behavior. Builds now synchronize the MCP Registry metadata with the package version, and publishing waits for the npm package to propagate before registry registration.
Development
Use Bun 1.4.2 and Node 24 for development and CI. Dependency updates use the Bun ecosystem so both package manifests and lockfiles stay consistent. The server retains SDK v1 and the worker uses Agents' legacy MCP handler; widgets use ext-apps v2. CI checks both locks for vulnerabilities and exercises the real worker HTTP transport as well as the local/worker parity suite. The worker entry module exports only its fetch handler; test helpers stay in the implementation module because workerd rejects constants as runtime entry points.
bun install
bun run dev # watch + serve (hot reload)
bun run build # production build (widgets must be built before the tests)
bun run test # run testsdev/ is a local ext-apps host harness for driving the widgets outside a real client — see dev/README.md.
Attribution
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.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Generate AI music via the Lacuna Music API from MCP clients like Claude Desktop & Code.
Creative workspace. Public MCP: outline previews for Codex and Claude Code; media in the web app.
Deterministic music theory for agents: analyze, voice, reharmonize, conduct — computed, not guessed
Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI-powered music generation and live coding by providing direct control over Strudel.cc through browser automation. Supports pattern creation, audio analysis, and pattern storage for TidalCycles/Strudel music patterns.2728 npm239AGPL 3.0
- FlicenseCqualityDmaintenanceEnables AI agents to generate, manipulate, and perform algorithmic music using Strudel.cc live coding environment. Provides 46+ tools for pattern generation across multiple genres, music theory operations, real-time audio analysis, and AI-powered composition.50-
- AlicenseNot gradedqualityBmaintenanceConnects Claude Code to SuperCollider for AI-driven music composition, supporting real-time playback and non-realtime audio rendering at 50-150x realtime speed.MIT
- AlicenseAqualityDmaintenanceEnables conversational live coding with Claude AI and TidalCycles, allowing users to create and manipulate algorithmic music patterns through natural language.717MIT