mcp-score
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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 |
|---|---|
| connect_to_musescoreA | Connect to a running MuseScore Studio (4.4.2 or later). The MCP Score Bridge plugin must be running in MuseScore with its window open. Connecting disconnects any other application. Args: host: WebSocket host (default: localhost). port: WebSocket port (default: 8765). |
| disconnect_from_musescoreC | Disconnect from MuseScore. |
| connect_to_doricoA | Connect to a running Dorico via its Remote Control API (experimental). Dorico support is experimental: the Remote Control API is undocumented, command-only (it cannot read note content), and this bridge has not been verified against a running Dorico. Dorico 4 and later serve the API without a plugin; the port is set in Dorico's preferences. Connecting disconnects any other application. Args: host: WebSocket host (default: localhost). port: WebSocket port (default: 4560, Dorico's default). |
| disconnect_from_doricoC | Disconnect from Dorico. |
| get_live_score_infoA | Get information about the score open in the connected application. Requires an active connection (connect_to_musescore or connect_to_dorico). |
| ping_score_appA | Check whether the connected application responds. Does not connect. |
| read_passageA | Read the content of a range of measures in the live score. Returns what is at the cursor in each measure: notes, rests and other elements. MuseScore gives full note content; Dorico only reports its application status (see the warning in the result). Args: start_measure: First measure to read (1-indexed). end_measure: Last measure to read (inclusive, 1-indexed). staff: Staff to read (0-indexed). Omit to read the current staff. |
| get_measure_contentA | Select one measure of one staff in the live score and report it. Args: measure: Measure number (1-indexed). staff: Staff index (0-indexed, default: 0). |
| get_selection_propertiesA | Get properties of the current selection in the connected application. MuseScore reports the cursor position (measure, beat, staff, element). Dorico reports the names, types and values of every property of the selected items, which is the closest its API gets to reading the score. |
| add_live_noteA | Add a note at the start of a measure in the live score. Consecutive calls on the same measure append notes one after another, since the application advances its cursor after each note. Args: measure: Measure number (1-indexed). pitch: MIDI pitch (60 = middle C). numerator: Duration numerator (default 1, with denominator 4 = quarter note). denominator: Duration denominator (default 4). staff: Staff index (0-indexed, default: 0). |
| add_live_rehearsal_markA | Add a rehearsal mark to a measure in the live score. Args: measure: Measure number (1-indexed). text: Rehearsal mark text (e.g. "A", "B", "Intro"). |
| add_live_chord_symbolB | Add a chord symbol to a measure in the live score. Args: measure: Measure number (1-indexed). symbol: Chord symbol (e.g. "Cmaj7", "Dm7", "G7"). |
| add_live_dynamicA | Add a dynamic marking to a measure in the live score. Args: measure: Measure number (1-indexed). dynamic: Dynamic such as "pp", "p", "mp", "mf", "f", "ff", "sfz". staff: Staff index (0-indexed, default: 0). |
| set_live_barlineA | Set the bar line at the end of a measure in the live score. Args: measure: Measure number (1-indexed). barline_type: One of "normal", "double", "final", "dashed", "dotted", "tick", "short", "startRepeat", "endRepeat" or "endStartRepeat". "startRepeat" marks the start of this measure; "endStartRepeat" ends a repeat here and starts one in the next measure. |
| set_live_key_signatureA | Set the key signature from a measure onward in the live score. Args: measure: Measure number (1-indexed). fifths: Sharps (positive) or flats (negative): 0 = C major, 2 = D major, -3 = Eb major. |
| set_live_time_signatureA | Set the time signature from a measure onward in the live score. Args: measure: Measure number (1-indexed). numerator: Beats per measure (e.g. 3 in 3/4). denominator: Beat unit (e.g. 4 in 3/4). |
| set_live_tempoA | Set the tempo at a measure in the live score. Args: measure: Measure number (1-indexed). bpm: Beats per minute. text: Optional display text (e.g. "Swing", "Allegro"). |
| append_live_measuresA | Append empty measures to the end of the live score. Args: count: How many measures to append (default: 1). |
| transpose_passageA | Transpose the notes of a passage by a number of semitones in the live score. Notes are moved with conventional spelling (a minor second up turns C into Db). Key signatures and chord symbols in the passage are left unchanged. Args: start_measure: First measure (1-indexed). end_measure: Last measure (inclusive, 1-indexed). staff: Staff index (0-indexed). semitones: Semitones to transpose (positive = up, negative = down). |
| undo_last_actionA | Undo the last change in the connected application. |
| generate_scoreA | Run a music21 Python script to generate a score file (MusicXML). Write a COMPLETE, self-contained music21 script that builds the whole
score and ends by exporting it, e.g.
The script runs on the user's machine with the user's privileges, in the same Python interpreter as this server (so music21 is importable). Only send code the user would be comfortable running themselves. Args: script: Complete Python source of the generation script. output_dir: Working directory for the run. Defaults to a fresh directory under the user's Desktop (or home directory when there is no Desktop). Created if it does not exist. timeout: Seconds to wait before killing the script (default: 120). Returns:
JSON. On success: |
| score_generation_guideA | Return the score generation guide for writing music21 scripts. Read this before calling Returns the guide as Markdown, or |
| render_scoreA | Render a score file to PDF, PNG, MIDI, MP3, WAV or MusicXML. Runs the MuseScore Studio 4 command line, so MuseScore Studio 4 must be installed. It does not need to be running, and no plugin or live connection is required. The input is typically a MusicXML file (.musicxml, .xml, .mxl) but can be any file MuseScore opens, such as .mscz or .mid. MuseScore is located from the MCP_SCORE_MUSESCORE_PATH environment variable, then PATH (mscore, musescore, mscore4portable, MuseScore4), then the platform default install location (macOS app bundle, Windows Program Files, Linux Flatpak). If it is not found automatically, set MCP_SCORE_MUSESCORE_PATH to the executable in the MCP server's environment. Args: input_path: Path to the score file to render. format: One of "pdf", "png", "midi", "mp3", "wav", "musicxml" (default: pdf). PNG export writes one file per page, named with a -1, -2, ... suffix before the extension. output_path: Where to write the result. Defaults to the input path with the format's extension. Its extension must match the format. An existing file is overwritten. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| score-generate | Load the score-generate instructions (music21 conventions, instrument reference and template) before generating a score with generate_score. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 23 tools
Most tools have clearly distinct purposes (adding notes, chords, dynamics, etc.), but there is some overlap between get_measure_content and read_passage (both read score content), and between get_live_score_info and get_selection_properties (both report application state). Descriptions are detailed enough to clarify differences, so ambiguity is minimal.
The majority of tools follow a verb_noun pattern (add_live_note, set_live_tempo, get_live_score_info), and many share a 'live' prefix for editing operations. Minor deviations like score_generation_guide (noun_noun) and render_score (verb_noun without 'live') are understandable but slightly break the pattern.
With 23 tools, the server is on the higher end of typical MCP servers, but the scope is broad: live editing across two applications, file generation, rendering, and utility functions. Each tool serves a distinct function, so the count is justified, though a few could potentially be consolidated.
The tool surface covers core workflows: connecting, reading, adding elements, setting properties, transposing, undoing, generating scores, and rendering. Missing operations include deleting or modifying existing notes beyond transposition, but the undo tool mitigates some gaps. Overall, the surface is reasonably complete for the stated purpose.