musescore-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MSCORE_PATH | No | Path to MuseScore executable if not in standard location |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_musescore_pathA | Return the detected MuseScore executable path on this machine. |
| convert_scoreA | Convert a score file to another format. Args: score_b64: Base64-encoded content of the input file. input_suffix: Extension of the input file without dot, e.g. "mscz". output_format: Target format — pdf | musicxml | mid | mp3 | wav | flac | ogg | png | svg. Returns: PNG (multi-page): {"format": "png", "pages": N, "data": [b64, ...]} Text formats (musicxml, svg): {"format": str, "data": str} Binary formats: {"format": str, "data": b64} |
| batch_convertA | Convert multiple score files in a single MuseScore process using -j. Each job dict must have:
Returns results in the same order as jobs. |
| export_partsA | Export each instrument part from a score as a separate file. First converts to MusicXML to discover part names and count, then uses MuseScore's JSON job format to export each part by index. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". output_format: Format for each part output (pdf, musicxml, png, etc.). Returns: List of {"part_index": int, "part_name": str, "format": str, "data": ...}. |
| export_png_pagesA | Export each page of a score as a PNG image. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". dpi: Output resolution in dots per inch (1–2400, default 150). trim: If True, trim whitespace borders (0 px margin). Returns: List of base64-encoded PNG strings, one per page, in order. |
| transpose_by_keyA | Transpose a score to a target key using the MuseScore CLI. Requires MuseScore 3.3+ with --score-transpose support. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". target_key: Target major key — C G D A E B F# C# F Bb Eb Ab Db Gb Cb. direction: "up", "down", or "closest" (default). Returns: Base64-encoded mscz of the transposed score. |
| transpose_by_intervalA | Transpose a score by a fixed number of semitones via the MuseScore CLI. Requires MuseScore 3.3+ with --score-transpose support. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". semitones: Number of semitones to transpose (1–24). direction: "up" or "down". Returns: Base64-encoded mscz of the transposed score. |
| transpose_for_instrumentA | Adjust the transposition offset for a transposing instrument part. Modifies the MusicXML element — useful for converting between transposing instruments (e.g. Bb clarinet ↔ concert pitch, alto sax → tenor sax). Pass either Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". instrument: Instrument shorthand name (optional). chromatic: Semitone offset written→sounding (optional). diatonic: Diatonic step offset written→sounding (optional). part_index: Which part to affect (0-based). None = all parts. Returns: Modified MusicXML as a UTF-8 string. |
| change_tempoB | Change the tempo by modifying MusicXML and elements. Replaces all existing tempo markings in the score. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". bpm: New tempo in beats per minute (1–400). beat_unit: Beat unit for the metronome marking: quarter, half, eighth, whole. Returns: Modified MusicXML as a UTF-8 string. |
| change_time_signatureA | Change the time signature by modifying MusicXML elements. Note: only the time signature element is changed — notes and beaming are not automatically adjusted. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". beats: Beats per measure (e.g. 3 for 3/4). beat_type: Note value of one beat (1, 2, 4, 8, 16, or 32). Returns: Modified MusicXML as a UTF-8 string. |
| get_score_infoA | Return basic metadata and structural info about a score. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". Returns: Dict with title, composer, initial key, time signature, tempo, part names, and measure count. |
| get_key_signatureA | Return all key signature changes in the score with their measure positions. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". Returns: List of {"measure": int, "key": str, "mode": str, "fifths": int}, ordered by measure number. |
| list_instrumentsA | Return instrument/part info including transposition and pitch range. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". Returns: List of dicts with part_index, name, abbreviation, is_transposing, transpose (chromatic/diatonic), range (lowest/highest MIDI note name). |
| update_metadataA | Update score metadata fields and return the modified MusicXML. Only fields explicitly provided (non-None) are changed. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". title: Work title. subtitle: Movement title / subtitle. composer: Composer name. lyricist: Lyricist name. copyright: Copyright / rights string. Returns: Modified MusicXML as a UTF-8 string. |
| analyze_harmonyA | Analyze chord progressions and tonal center using music21. Requires Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". Returns: Dict with detected_key, confidence, and a list of chords [{offset, measure, chord, roman_numeral}, ...]. |
| apply_styleB | Apply a MuseScore style file (.mss) to a score and re-export. Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". style_b64: Base64-encoded .mss style file content. Returns: Base64-encoded mscz with the style applied. |
| run_pluginA | Run a MuseScore QML plugin on a score. The plugin must already be installed in MuseScore's plugin directory. Plugins can perform score manipulations (e.g. note coloring, analysis). Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". plugin_name: Name of the plugin as registered in MuseScore (without .qml). Returns: Base64-encoded mscz after plugin execution. |
| create_from_musicxmlA | Convert a MusicXML string into a MuseScore .mscz file. Useful for creating MuseScore files from externally generated MusicXML. Args: musicxml: MusicXML content as a UTF-8 string. Returns: Base64-encoded mscz file. |
| midi_to_scoreA | Convert a MIDI file to a MuseScore .mscz file. Args: midi_b64: Base64-encoded MIDI (.mid) file content. quantization: Quantization resolution as a note value denominator (4=quarter, 8=eighth, 16=sixteenth, 32=thirty-second). Default is "16". midi_import_options_b64: Optional base64-encoded MIDI import options JSON file (MuseScore's -M flag format). Returns: Base64-encoded mscz file. |
| watch_folderA | Watch a folder for new .mscz files and auto-convert them. Monitors the folder for up to Args: folder_path: Absolute path to the folder to watch. output_formats: List of output formats, e.g. ["pdf", "musicxml"]. output_folder: Where to write converted files. Defaults to folder_path. duration_seconds: How long to watch (max 300s). Returns: {"converted": [{"source": str, "outputs": [str, ...]}, ...], "errors": [{"source": str, "error": str}, ...]} |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/strongbeen04/MUSESCORE-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server