Koskamo

Music Studio MCP

A two-mode creative music studio enabling scored composition via ABC notation and live performance through Strudel live coding. It allows users to generate sheet music, edit scores, export MIDI/WAV, and create interactive music videos with visuals, all accessible via an HTTP endpoint for AI assistants like Claude.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Music Studio MCP logo, by Xule LinCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Xule Lin
MCP endpoint (Streamable HTTP)
https://music-studio.linxule.com/mcp
Vendor documentation

What its tools do

10 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

10 of 10 have a description · 10 of 10 declare behavior hints · 9 of 10 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Generate sheet music in ABC notation with 128 General MIDI instruments
  • Create live-coding patterns using Strudel with real-time editing
  • Produce music videos with Hydra shader visuals reacting to notes
  • Share compositions via temporary stored links for playback

Source and maintenance

Community listingRegistry 0.13.0
Maintenance checked

Protocol and capabilities

Server
Music Studio 0.13.0
MCP protocol negotiated in check
2025-11-25
Tools
10 advertised
Resources
26 advertised
Resource templates
2 advertised
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  },
  "extensions": {
    "io.modelcontextprotocol/ui": {}
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

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 core. The rest is optional, for when you and the user want more — each has a get-strudel-guide topic: visuals that follow the music, from .pianoroll() to Hydra shaders ('visuals', 'hydra'); music videos and short films drawn by the code ('stage', 'film'); controls the user plays — taps, faders, pads, grids you draw yourself, and the phone's tilt and mic ('interactive'); complete pieces to learn from — a short film, a spoken duet, a drum grid for two ('gallery'); and live sessions for jamming back and forth (play-live-pattern session: true, then update-session / get-session). Playback stores nothing (a live session keeps its log until 2 hours idle). create-share-link uploads a piece for 30 days, only when the user asks to share it.

Tools

10 advertised

create-share-link — Create Music Share Link
Advertised by the server during the last successful anonymous check.
Open-world

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.

create-share-link input schema
{
  "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)."
    }
  }
}
create-share-link annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
play-sheet-music — Play Sheet Music
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

play-sheet-music input schema
{
  "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."
    }
  }
}
play-sheet-music annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
play-live-pattern — Play Live Pattern
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

play-live-pattern input schema
{
  "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."
    }
  }
}
play-live-pattern annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get-session — Read Live Session
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get-session input schema
{
  "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)."
    }
  }
}
get-session annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
update-session — Update Live Session
Advertised by the server during the last successful anonymous check.

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').

update-session input schema
{
  "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."
    }
  }
}
update-session annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get-music-guide — Music Reference Guide
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

get-music-guide input schema
{
  "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."
    }
  }
}
get-music-guide annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get-strudel-guide — Strudel Reference Guide
Advertised by the server during the last successful anonymous check.
Advertised read-only

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`).

get-strudel-guide input schema
{
  "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'."
    }
  }
}
get-strudel-guide annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search-music-docs — Search Music Documentation
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

search-music-docs input schema
{
  "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."
    }
  }
}
search-music-docs annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
analyze-harmony — Analyze Harmony
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

analyze-harmony input schema
{
  "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."
    }
  }
}
analyze-harmony annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
convert-abc-to-strudel — Convert ABC to Strudel
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

convert-abc-to-strudel input schema
{
  "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)."
    }
  }
}
convert-abc-to-strudel annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

3 advertised

compose-beat — Compose a beat

Advertised by the server during the last successful anonymous check.

Generate and play a Strudel live-coding pattern in a given genre.

genre
Genre, e.g. techno, house, dnb, lofi, ambient, synthwave, jazz (required)
mood
Optional vibe, e.g. dark, dreamy, energetic, chill
harmonize-melody — Harmonize a melody

Advertised by the server during the last successful anonymous check.

Add chords/accompaniment to an ABC melody and play it as sheet music.

melody
ABC notation of the melody to harmonize (required)
style
Optional accompaniment style: rock, jazz, bossa, waltz, march, reggae, folk, classical
arrange-tune — Arrange a tune

Advertised by the server during the last successful anonymous check.

Turn a melody or musical idea into a fuller multi-voice arrangement and play it.

tune
ABC notation, or a text description of the tune/idea to arrange (required)
instrumentation
Optional desired instruments/voices, e.g. 'flute + cello + piano'

Resources

26 advertised

ui://sheet-music/0.13.0/mcp-app.html

Advertised by the server during the last successful anonymous check.

Sheet Music Viewer UI

ui://sheet-music/0.13.0/mcp-app.html URI
ui://sheet-music/0.13.0/mcp-app.html

MIME type: text/html;profile=mcp-app

ui://sheet-music/mcp-app.html

Advertised by the server during the last successful anonymous check.

Sheet Music Viewer UI

ui://sheet-music/mcp-app.html URI
ui://sheet-music/mcp-app.html

MIME type: text/html;profile=mcp-app

ui://strudel/0.13.0/strudel-app.html

Advertised by the server during the last successful anonymous check.

Strudel Live Pattern REPL

ui://strudel/0.13.0/strudel-app.html URI
ui://strudel/0.13.0/strudel-app.html

MIME type: text/html;profile=mcp-app

ui://strudel/strudel-app.html

Advertised by the server during the last successful anonymous check.

Strudel Live Pattern REPL

ui://strudel/strudel-app.html URI
ui://strudel/strudel-app.html

MIME type: text/html;profile=mcp-app

Music Guide: instruments

Advertised by the server during the last successful anonymous check.

Music reference: instruments

Music Guide: instruments URI
music://guide/instruments

MIME type: text/plain

Music Guide: drums

Advertised by the server during the last successful anonymous check.

Music reference: drums

Music Guide: drums URI
music://guide/drums

MIME type: text/plain

Music Guide: abc-syntax

Advertised by the server during the last successful anonymous check.

Music reference: abc-syntax

Music Guide: abc-syntax URI
music://guide/abc-syntax

MIME type: text/plain

Music Guide: arrangements

Advertised by the server during the last successful anonymous check.

Music reference: arrangements

Music Guide: arrangements URI
music://guide/arrangements

MIME type: text/plain

Music Guide: genres

Advertised by the server during the last successful anonymous check.

Music reference: genres

Music Guide: genres URI
music://guide/genres

MIME type: text/plain

Music Guide: styles

Advertised by the server during the last successful anonymous check.

Music reference: styles

Music Guide: styles URI
music://guide/styles

MIME type: text/plain

Music Guide: midi-directives

Advertised by the server during the last successful anonymous check.

Music reference: midi-directives

Music Guide: midi-directives URI
music://guide/midi-directives

MIME type: text/plain

Strudel Guide: mini-notation

Advertised by the server during the last successful anonymous check.

Strudel reference: mini-notation

Strudel Guide: mini-notation URI
music://strudel-guide/mini-notation

MIME type: text/plain

Strudel Guide: sounds

Advertised by the server during the last successful anonymous check.

Strudel reference: sounds

Strudel Guide: sounds URI
music://strudel-guide/sounds

MIME type: text/plain

Strudel Guide: effects

Advertised by the server during the last successful anonymous check.

Strudel reference: effects

Strudel Guide: effects URI
music://strudel-guide/effects

MIME type: text/plain

Strudel Guide: patterns

Advertised by the server during the last successful anonymous check.

Strudel reference: patterns

Strudel Guide: patterns URI
music://strudel-guide/patterns

MIME type: text/plain

Strudel Guide: genres

Advertised by the server during the last successful anonymous check.

Strudel reference: genres

Strudel Guide: genres URI
music://strudel-guide/genres

MIME type: text/plain

Strudel Guide: tips

Advertised by the server during the last successful anonymous check.

Strudel reference: tips

Strudel Guide: tips URI
music://strudel-guide/tips

MIME type: text/plain

Strudel Guide: visuals

Advertised by the server during the last successful anonymous check.

Strudel reference: visuals

Strudel Guide: visuals URI
music://strudel-guide/visuals

MIME type: text/plain

Strudel Guide: hydra

Advertised by the server during the last successful anonymous check.

Strudel reference: hydra

Strudel Guide: hydra URI
music://strudel-guide/hydra

MIME type: text/plain

Strudel Guide: advanced

Advertised by the server during the last successful anonymous check.

Strudel reference: advanced

Strudel Guide: advanced URI
music://strudel-guide/advanced

MIME type: text/plain

Strudel Guide: stage

Advertised by the server during the last successful anonymous check.

Strudel reference: stage

Strudel Guide: stage URI
music://strudel-guide/stage

MIME type: text/plain

Strudel Guide: film

Advertised by the server during the last successful anonymous check.

Strudel reference: film

Strudel Guide: film URI
music://strudel-guide/film

MIME type: text/plain

Strudel Guide: interactive

Advertised by the server during the last successful anonymous check.

Strudel reference: interactive

Strudel Guide: interactive URI
music://strudel-guide/interactive

MIME type: text/plain

Strudel Guide: craft

Advertised by the server during the last successful anonymous check.

Strudel reference: craft

Strudel Guide: craft URI
music://strudel-guide/craft

MIME type: text/plain

Strudel Guide: debugging

Advertised by the server during the last successful anonymous check.

Strudel reference: debugging

Strudel Guide: debugging URI
music://strudel-guide/debugging

MIME type: text/plain

Strudel Guide: gallery

Advertised by the server during the last successful anonymous check.

Strudel reference: gallery

Strudel Guide: gallery URI
music://strudel-guide/gallery

MIME type: text/plain

sheet-music-any-version

Advertised by the server during the last successful anonymous check.

Sheet Music Viewer UI (any release's URI)

sheet-music-any-version URI template
ui://sheet-music/{version}/mcp-app.html

MIME type: text/html;profile=mcp-app

strudel-any-version

Advertised by the server during the last successful anonymous check.

Strudel Live Pattern REPL (any release's URI)

strudel-any-version URI template
ui://strudel/{version}/strudel-app.html

MIME type: text/html;profile=mcp-app

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1290 ms
95th percentile latency
1290 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1290 ms · metadata changed · 10 tool(s), 26 resource(s), 2 resource template(s), 3 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http music-studio-mcp-linxule https://music-studio.linxule.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add music-studio-mcp-linxule --url https://music-studio.linxule.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable music-studio-mcp-linxule in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "music-studio-mcp-linxule": {
      "url": "https://music-studio.linxule.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "music-studio-mcp-linxule": {
      "type": "streamableHttp",
      "url": "https://music-studio.linxule.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start music-studio-mcp-linxule and inspect its tools.
VS Code configuration
{
  "servers": {
    "music-studio-mcp-linxule": {
      "type": "http",
      "url": "https://music-studio.linxule.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http music-studio-mcp-linxule https://music-studio.linxule.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://music-studio.linxule.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "music-studio-mcp-linxule": {
      "serverUrl": "https://music-studio.linxule.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Music Studio MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.