_ registry / mcp streamable-http · checked 1h ago

Music Studio

https://mcp-music-studio.linxule.workers.dev

Registry code: 567ee6dec80186a9

api record

Music Studio plays music in interactive widgets. Two modes: play-sheet-music (ABC notation → sheet music with multi-instrument audio; put chord symbols like "C" or "Am7" above the notes and set a style for drums, bass and chords) and play-live-pattern (Strudel/TidalCycles code → an editable live-coding player). Before composing, read a guide: get-music-guide or get-strudel-guide, topic 'genres'. If unsure about chord spelling or the key, call analyze-harmony; convert-abc-to-strudel turns a scored melody into a live pattern; search-music-docs covers what the guides don't. That is the whole…

endpoint
https://mcp-music-studio.linxule.workers.dev/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is Music Studio live?
Yes — it answered the hub's last check (checked 1h ago). It answered 99% of checks over the last 30 days.
Is Music Studio free to use?
Yes — the hub reached it with no key and no payment.
What tools does Music Studio have?
10 tools: play-live-pattern, get-strudel-guide, analyze-harmony, search-music-docs, create-share-link, update-session, convert-abc-to-strudel, get-music-guide, ….
Is Music Studio safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.3%

90 days 99.2%· all time 99.2%

latency
765ms

last good check

priced tools
0

of 10 tools

_ answered our checks, 90 days 638 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • play sheet music from abc notation
  • live-code music patterns
  • analyze chord harmony
takes → gives
text, code → audio
tools
8 reads2 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 10 tools
1 open 9 never probed 1 of 10 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • play-sheet-music reads open 9h ago

    Write a score in ABC notation and play it as sheet music: a melody, a harmonized piece, a multi-voice arrangement or a well-known tune, on any of the 128 General MIDI instruments. Put chord symbols above the notes and add a style (rock, jazz, bossa, waltz, folk...) for drums, bass and chords. The user can edit the score in the player, change its style and instrument, and download WAV or MIDI. The result confirms the parse; it returns no audio. Start with get-music-guide topic 'genres'; 'abc-syntax' and 'instruments' for the rest. The music player renders inline with interactive playback controls.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "style": {
          "enum": [
            "rock",
            "jazz",
            "bossa",
            "waltz",
            "march",
            "reggae",
            "folk",
            "classical"
          ],
          "type": "string",
          "description": "Accompaniment style. Adds drums, bass, and chord patterns automatically. Your ABC needs chord symbols (\"C\", \"Am\") for accompaniment to work. Options: rock, jazz, bossa, waltz, march, reggae, folk, classical."
        },
        "swing": {
          "type": "number",
          "maximum": 75,
          "minimum": 0,
          "description": "Swing as the share of the beat given to its first half. 50 = straight, 60 ≈ 3:2, 66 = triplet swing, 75 = maximum (dotted eighth + sixteenth). Anything at or below 50 is treated as no swing. Only takes effect in an x/4 or x/8 meter."
        },
        "tempo": {
          "type": "number",
          "maximum": 240,
          "minimum": 40,
          "description": "Tempo in BPM (40-240). Overrides Q: in ABC notation."
        },
        "title": {
          "type": "string",
          "description": "Piece title (overrides T: in ABC). Shown in the widget header and used as the filename stem for the WAV/MIDI downloads."
        },
        "drumIntro": {
          "type": "integer",
          "maximum": 8,
          "minimum": 0,
          "description": "Bars of count-in before the melody starts (0-8). Needs a style preset — the count-in is played by that style's drum kit, so without a style you get silent bars instead."
        },
        "transpose": {
          "type": "integer",
          "maximum": 12,
          "minimum": -12,
          "description": "Transpose by semitones (-12 to 12). Positive=higher, negative=lower. Rewrites the notation and the key signature, so the printed score matches what plays."
        },
        "instrument": {
          "type": "string",
          "description": "Default instrument for the main voice — any of the 128 General MIDI names (e.g. 'Flute', 'Cello', 'Banjo', 'Alto Sax'). Matching is fuzzy and picks the lowest GM program among the hits, so 'sax' gives Soprano Sax; the result text names what you actually got whenever it isn't what you asked for. Use get-music-guide with topic 'instruments' for the full list, or %%MIDI program N in the ABC to set a program per voice."
        },
        "abcNotation": {
          "type": "string",
          "default": "X:1\nT:Twinkle, Twinkle Little Star\nM:4/4\nL:1/4\nK:C\nC C G G | A A G2 | F F E E | D D C2 |\nG G F F | E E D2 | G G F F | E E D2 |\nC C G G | A A G2 | F F E E | D D C2 |",
          "maxLength": 65536,
          "description": "ABC notation string. Include chord symbols (\"C\", \"Am7\") above notes for auto-accompaniment with style presets."
        }
      }
    }
    arguments 58 lines
  • play-live-pattern reads unknown 9h ago

    Live-code music in Strudel (TidalCycles mini-notation in JavaScript) and play it in a player the user can edit. Layer drums, bass and melody with stack(): 71 drum-machine banks, 128 GM instruments, synths and a full effects chain. Add .pianoroll() for a live piano roll (or .punchcard()/.scope()/.spectrum(), one per pattern), pass `visuals` for a ready-made animation and `theme` for the editor colours. Each call creates a NEW player. Optional, when you want more (get-strudel-guide topic in brackets): shader backgrounds that follow the music — start with `await initHydra()`, lock to the beat with H(pattern), react to the sound with () => a.fft[0] ('hydra'); canvases, scenes and spoken lines for music videos and films ('stage', 'film'); taps, faders, pads and controls you draw, played by the user; tilt and mic, which follow the phone on the browser player (a chat's frame usually blocks them) ('interactive'); complete pieces ('gallery'). To jam back and forth, or to change a piece while it plays, pass session: true, then use update-session and get-session. The Strudel REPL renders inline with an editable code editor, visualizations, and playback controls.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "code"
      ],
      "properties": {
        "bpm": {
          "type": "number",
          "maximum": 300,
          "minimum": 40,
          "description": "Tempo in BPM (40-300). Converts to setcps() automatically."
        },
        "code": {
          "type": "string",
          "maxLength": 65536,
          "description": "Strudel pattern code. Uses TidalCycles mini-notation in JavaScript. Use stack() to layer drums, bass, and melody. Set tempo with setcps(bpm/60/4) or use the bpm parameter. The REPL plays the LAST expression: setup lines (await initHydra(), all(), setcps()) go BEFORE the pattern. Double quotes are mini-notation — use single quotes for plain strings and URLs. One draw method per pattern; pass a.fft values as functions (() => a.fft[0])."
        },
        "theme": {
          "enum": [
            "strudelTheme",
            "algoboy",
            "archBtw",
            "androidstudio",
            "atomone",
            "aura",
            "bbedit",
            "blackscreen",
            "bluescreen",
            "bluescreenlight",
            "CutiePi",
            "darcula",
            "dracula",
            "duotoneDark",
            "eclipse",
            "fruitDaw",
            "githubDark",
            "githubLight",
            "greenText",
            "gruvboxDark",
            "gruvboxLight",
            "sonicPink",
            "materialDark",
            "materialLight",
            "monokai",
            "noctisLilac",
            "nord",
            "redText",
            "solarizedDark",
            "solarizedLight",
            "sublime",
            "teletext",
            "tokyoNight",
            "tokyoNightDay",
            "tokyoNightStorm",
            "vscodeDark",
            "vscodeLight",
            "whitescreen",
            "xcodeLight"
          ],
          "type": "string",
          "description": "Editor colour scheme. It also sets the ground the visuals sit on, so pick a dark one when the visual is the point (e.g. 'nord', 'sonicPink', 'tokyoNight')."
        },
        "title": {
          "type": "string",
          "description": "Pattern title displayed in the widget header (e.g. 'Midnight Rain')."
        },
        "session": {
          "type": "boolean",
          "description": "Optional: keep this player open as a live session. update-session then swaps new code in on the bar, and get-session reports what played and what the user did. For a jam, or a piece you change while it plays. Give the user something to play — taps, a fader, a grid (topic 'interactive') — or they answer by editing the code and pressing Pass. The log is kept until 2 hours idle."
        },
        "visuals": {
          "enum": [
            "none",
            "pianoroll",
            "punchcard",
            "scope",
            "spectrum",
            "hydra-kaleid",
            "hydra-pulse",
            "hydra-wash",
            "hydra-feed"
          ],
          "type": "string",
          "description": "A ready-made visual for code that has none of its own: pianoroll, punchcard, scope or spectrum (drawn behind the code), or hydra-kaleid, hydra-pulse, hydra-wash or hydra-feed (shader backgrounds). It only fills a layer the code leaves empty, and shaders are skipped for viewers who prefer reduced motion. Your own visual is the better result (topics 'visuals' and 'hydra')."
        },
        "autoplay": {
          "type": "boolean",
          "description": "Start playing immediately (default: true). May require user click due to browser autoplay policy."
        }
      }
    }
    arguments 92 lines
  • get-strudel-guide reads unknown 9h ago

    Reference and recipes for Strudel live coding. Music: genres (complete templates: techno, house, dnb, ambient, jazz, lofi, synthwave), mini-notation, sounds (synths, 71 drum banks, 128 GM instruments, vcsl samples), effects, patterns, tips (tempo, common mistakes), advanced (samples, wavetables, signals, chord voicings). Visuals: visuals (draw methods, presets, themes), hydra (shader backgrounds, H(pattern), the audio-reactive a.fft). Optional modules — the code is real browser JavaScript: stage (your own canvases, onFrame/onEvent/onTap, say), film (scenes on bars, text, narration), interactive (taps into notes, faders/pads/xy, tilt/mic, remember() for controls you draw, live sessions), craft (what makes a piece land), debugging (what the player reports back), gallery (complete pieces; fetch one with `piece`).

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "topic"
      ],
      "properties": {
        "piece": {
          "enum": [
            "first-light",
            "duet",
            "petri-dish",
            "lossy-terminal",
            "signal-corruption",
            "weather-machine",
            "two-decks",
            "trade-a-beat",
            "still-water",
            "lullaby"
          ],
          "type": "string",
          "description": "With topic 'gallery': the complete code of one piece (the index lists them)."
        },
        "topic": {
          "enum": [
            "mini-notation",
            "sounds",
            "effects",
            "patterns",
            "genres",
            "tips",
            "visuals",
            "hydra",
            "advanced",
            "stage",
            "film",
            "interactive",
            "craft",
            "debugging",
            "gallery"
          ],
          "type": "string",
          "description": "Reference topic. Start with 'genres' for working templates, 'sounds' for instruments, 'visuals' for draw methods and presets, 'hydra' for shader backgrounds, 'advanced' for sample loading. For a music video or film: 'craft', 'stage', 'film', then gallery piece 'first-light'. For taps, controls, a drawn grid or a jam: 'interactive' alone (take only the sections you need), then gallery piece 'weather-machine' or 'trade-a-beat'."
        }
      }
    }
    arguments 46 lines
  • analyze-harmony reads unknown 1h ago

    Music theory helper: name a chord from notes, guess the key, get a progression, or list what fits a key. Returns both the ABC chord-symbol spelling (for play-sheet-music) and the Strudel form (for play-live-pattern). Tasks: detect-chord (notes -> chord name + what to play next), detect-key (notes or chords -> best key + diatonic chords), suggest-progression (key [+ romanNumerals] -> chord symbols), scale-for-chord (chords -> the scale to improvise over each), key-chords (key -> every diatonic triad, seventh, and chord scale). Use it before writing chord symbols for a style preset, or to check a harmonization.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "task"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "Key, e.g. \"C\", \"A minor\", \"F# major\". For suggest-progression/key-chords."
        },
        "task": {
          "enum": [
            "detect-chord",
            "detect-key",
            "suggest-progression",
            "scale-for-chord",
            "key-chords"
          ],
          "type": "string",
          "description": "What to work out. detect-chord needs notes; detect-key needs notes or chords; scale-for-chord needs chords; suggest-progression/key-chords need a key."
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 64,
          "description": "Note names, e.g. [\"c4\",\"e4\",\"g4\",\"b4\"] or [\"C\",\"Eb\",\"G\"]. For detect-chord/detect-key."
        },
        "chords": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 64,
          "description": "Chord symbols, e.g. [\"Dm7\",\"G7\",\"Cmaj7\"]. For detect-key/scale-for-chord."
        },
        "romanNumerals": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 64,
          "description": "Roman numerals to render in the key, e.g. [\"ii7\",\"V7\",\"Imaj7\"] or [\"I\",\"V\",\"vi\",\"IV\"]. Optional for suggest-progression — omit it to get common progressions instead."
        }
      }
    }
    arguments 48 lines
  • search-music-docs reads unknown 1h ago

    Search detailed documentation for Strudel live coding or ABC/ABCJS notation. Returns relevant code examples and explanations from the official docs. Use this when the curated guides (get-strudel-guide, get-music-guide) don't cover what you need — for specific functions, advanced techniques, or when you're unsure about syntax. Powered by semantic search over strudel.cc and ABCJS docs.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "maxLength": 500,
          "description": "What you want to know. Be specific. Good: 'how to use FM synthesis with envelope' or 'chop and slice sample manipulation'. Bad: 'effects' or 'help'."
        },
        "library": {
          "enum": [
            "strudel",
            "abcjs"
          ],
          "type": "string",
          "default": "strudel",
          "description": "Which library to search: 'strudel' for live coding patterns, 'abcjs' for sheet music notation."
        }
      }
    }
    arguments 23 lines
  • create-share-link changes data unknown never probed

    Create a hosted music share link only when the user asks to share or store a piece online. Uploads the supplied score or pattern to MCP Music Studio for 30 days; anyone with the link can view and play it without signing in. Creating the same share again refreshes its expiry. Playback does not require this tool, and a play result's '▶ Play in browser' link already opens the piece for anyone when it fit in the link; this tool gives a short stored link. Provide kind 'score' with score, or kind 'play' with pattern. Never include private information or secrets.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "enum": [
            "score",
            "play"
          ],
          "type": "string"
        },
        "score": {
          "type": "object",
          "required": [
            "abcNotation"
          ],
          "properties": {
            "style": {
              "enum": [
                "rock",
                "jazz",
                "bossa",
                "waltz",
                "march",
                "reggae",
                "folk",
                "classical"
              ],
              "type": "string"
            },
            "swing": {
              "type": "number",
              "maximum": 75,
              "minimum": 0
            },
            "tempo": {
              "type": "number",
              "maximum": 240,
              "minimum": 40
            },
            "title": {
              "type": "string"
            },
            "drumIntro": {
              "type": "integer",
              "maximum": 8,
              "minimum": 0
            },
            "transpose": {
              "type": "integer",
              "maximum": 12,
              "minimum": -12
            },
            "instrument": {
              "type": "string",
              "description": "General MIDI instrument name, as for play-sheet-music."
            },
            "abcNotation": {
              "type": "string",
              "maxLength": 65536,
              "minLength": 1,
              "description": "The ABC notation, as for play-sheet-music."
            }
          },
          "description": "The arguments you gave play-sheet-music."
        },
        "pattern": {
          "type": "object",
          "required": [
            "code"
          ],
          "properties": {
            "bpm": {
              "type": "number",
              "maximum": 300,
              "minimum": 40
            },
            "code": {
              "type": "string",
              "maxLength": 65536,
              "description": "The Strudel code, as for play-live-pattern."
            },
            "title": {
              "type": "string"
            },
            "visuals": {
              "enum": [
                "none",
                "pianoroll",
                "punchcard",
                "scope",
                "spectrum",
                "hydra-kaleid",
                "hydra-pulse",
                "hydra-wash",
                "hydra-feed"
              ],
              "type": "string"
            },
            "autoplay": {
              "type": "boolean"
            }
          },
          "description": "The arguments you gave play-live-pattern (theme and session are not carried)."
        }
      }
    }
    arguments 110 lines
  • update-session changes data unknown never probed

    Only for a live session. Swaps new code into the session's player while the music keeps playing. Send the WHOLE pattern, as for play-live-pattern. It lands on the next bar (quantize 1, the default), the next multiple of n bars, or at once (0): set quantize to your phrase length (8-bar phrase → 8). If the player answers within a few seconds, the result says whether it ran the code, or its error. To change a piece's remember() state, ship a merge, not a new start value (get-strudel-guide topic 'interactive').

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "session",
        "code"
      ],
      "properties": {
        "code": {
          "type": "string",
          "maxLength": 65536,
          "description": "The complete new Strudel pattern (same rules as play-live-pattern's code)."
        },
        "session": {
          "type": "string",
          "pattern": "^[a-z2-7]{16}$",
          "description": "The session id from play-live-pattern's result (16 lowercase letters/digits)."
        },
        "quantize": {
          "type": "integer",
          "maximum": 32,
          "minimum": 0,
          "description": "Land on the next multiple of this many cycles (bars). 1 = next bar (default), 4/8 = phrase, 0 = now."
        }
      }
    }
    arguments 26 lines
  • convert-abc-to-strudel reads unknown 18h ago

    Turn an ABC melody into Strudel mini-notation so a scored piece can be remixed live. Returns runnable code — setcps() from the Q: tempo, one [...] bar group per bar inside note("<...>"), with a chord("<...>").voicing() layer stacked alongside it when the ABC has chord symbols (one stack(), because Strudel plays only the last expression) — then pass it to play-live-pattern. Durations become @ weights, rests become ~, triplets nest, the key signature is folded into the note names, and %%MIDI program picks the sound. Lists what was lost (grace notes, dynamics, repeats, lyrics, other voices, inline tempo changes, a short final bar, ABC's own gchord/drum accompaniment). Pick a single voice with `voice`; re-run per voice and stack() them for a full arrangement.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "abcNotation"
      ],
      "properties": {
        "sound": {
          "type": "string",
          "description": "Strudel sound for the melody (defaults to the tune's %%MIDI program, else \"gm_piano\"). Use a GM soundfont name like gm_flute or gm_epiano1 — see get-strudel-guide topic 'sounds'."
        },
        "voice": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 1,
          "description": "Which voice to convert, 1-based, counted across all staves (default 1). Multi-voice tunes report how many voices there are."
        },
        "abcNotation": {
          "type": "string",
          "maxLength": 65536,
          "description": "ABC notation to convert (the same string you'd pass to play-sheet-music)."
        }
      }
    }
    arguments 24 lines
  • get-music-guide reads unknown 18h ago

    Reference for ABC sheet music. Topics: genres (complete templates: jazz, blues, folk, rock, bossa, a 3/4 minuet, a lullaby), styles (what each accompaniment preset does), instruments (GM list + combos), drums (patterns + percussion notes), abc-syntax (notation reference), arrangements (multi-voice patterns), midi-directives (%%MIDI reference).

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "topic"
      ],
      "properties": {
        "topic": {
          "enum": [
            "instruments",
            "drums",
            "abc-syntax",
            "arrangements",
            "genres",
            "styles",
            "midi-directives"
          ],
          "type": "string",
          "description": "Reference topic. Start with 'genres' for complete examples, 'styles' to understand presets, or 'instruments' for the full instrument list."
        }
      }
    }
    arguments 22 lines
  • get-session reads unknown 1h ago

    Only for a live session (play-live-pattern session: true). Reads whether the player is up and what it played, its errors and silences, and what the human did since your last read: taps, changes to remember() state, code they ran, a Pass to you, or End. Read it before assuming a piece played. With wait: 'pass' it listens until the human presses Pass, so a whole back-and-forth set fits in one turn: update-session, get-session(wait: 'pass'), answer, listen again.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "session"
      ],
      "properties": {
        "wait": {
          "enum": [
            "pass",
            "activity"
          ],
          "type": "string",
          "description": "Listen instead of just reading: 'pass' until the listener presses Pass, 'activity' until they play. Returns at once if that already happened since your last read, else after ~40 s — call again to keep listening."
        },
        "session": {
          "type": "string",
          "pattern": "^[a-z2-7]{16}$",
          "description": "The session id from play-live-pattern's result (16 lowercase letters/digits)."
        }
      }
    }
    arguments 22 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 567ee6dec80186a9.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/567ee6dec80186a9/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/567ee6dec80186a9/badge.svg)](https://brick.blue/agent/567ee6dec80186a9?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.