mcp-score
mcp-score lets AI assistants generate, render, read, and edit music notation via MCP, with live integration for MuseScore and experimental Dorico.
Generate complete MusicXML scores by running self-contained music21 Python scripts, guided by a bundled score-generation skill/template.
Render score files to PDF, PNG, MIDI, MP3, WAV, or MusicXML using the MuseScore Studio 4 command line.
Connect to MuseScore Studio 4.4.2+ through the MCP Score Bridge plugin, or experimentally to Dorico’s Remote Control API.
Inspect live scores: app responsiveness, score info, passages, individual measures, and selection/cursor properties.
Edit live scores: add notes, rehearsal marks, chord symbols, and dynamics; set barlines, key signatures, time signatures, and tempo; append measures.
Transpose passages and undo the last action in the connected notation app.
Note: MuseScore supports full live note content; Dorico support is experimental and command-only, so it cannot read note content the same way.
Allows real-time reading and writing of MuseScore scores, enabling manipulation of notes, chords, barlines, key/time signatures, tempo, transposition, and more via a WebSocket plugin.
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-scorecreate a 4-bar melody in C major for piano"
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-score
Music notation for AI assistants. Describe a piece in plain language and get a MusicXML score; with MuseScore open, read and edit the live score by conversation.
Works with any MCP client (Claude Code, Claude Desktop, LM Studio, and others). Status: alpha.
Quick demo
"Create a big band chart: 32-bar AABA form, key of Bb, slow blues at 66 BPM, with rhythm changes and rehearsal marks at each section."
The assistant writes a complete music21 script, runs it, and hands you a MusicXML file ready to open in MuseScore, Dorico, or any notation app.
With the MuseScore plugin running, you can go further:
"Read the melody in bars 9-16 and arrange it as a trombone soli following the chord progression."
The assistant reads the live score, applies musical judgement, and writes the arrangement back, all through conversation.
Related MCP server: Music21 Composer MCP
What it does
Generate scores. The assistant writes a music21 script that exports MusicXML, which opens in MuseScore, Dorico, or any notation app. In Claude Code this is driven by the bundled
score-generateskill. In other MCP clients, thegenerate_scoretool runs the script andscore_generation_guidesupplies the same instructions.Edit live scores. MCP tools connect to a running MuseScore and read passages, add notes, dynamics and chord symbols, set barlines, keys, time signatures and tempo, append measures, transpose, and undo.
Render. The
render_scoretool exports PDF, PNG, MIDI, audio or MusicXML from a score file through the MuseScore command line; MuseScore must be installed but not running.
Supported applications
Application | Versions | Status |
MuseScore Studio | 4.4.2 and later | Supported; CI tests the oldest supported line, a middle release and the newest. Earlier versions lack the plugin WebSocket API. |
Dorico | 4 and later | Experimental. Undocumented Remote Control API, command-only, not verified against a running instance. |
Any notation app | MusicXML import | Generated scores open anywhere MusicXML does. |
Install
Requires Python 3.14 or later.
pip install mcp-score-server
# or
uv tool install mcp-score-serverThen:
mcp-score install-plugin # MuseScore plugin, for live editing
mcp-score install-skill # score-generate skill, for Claude CodeConnect your MCP client
Claude Code:
claude mcp add mcp-score -- mcp-score serveClaude Desktop and other clients: run the command mcp-score with the argument serve, for example in claude_desktop_config.json:
{
"mcpServers": {
"mcp-score": { "command": "mcp-score", "args": ["serve"] }
}
}Use it with MuseScore
Open a score in MuseScore Studio 4.4.2 or later.
Plugins > Manage plugins > enable MCP Score Bridge, then Plugins > MCP Score Bridge. Keep its window open.
Ask your assistant to connect to MuseScore.
Details and troubleshooting: MuseScore plugin.
Documentation
Document | Description |
Set up mcp-score and generate your first score | |
What changed in each version | |
All MCP tools and CLI commands | |
Plugin installation and WebSocket protocol | |
System design and key decisions |
Contributing
See CONTRIBUTING.md. Built in spare time, largely with Claude Code, and reviewed by a human before merge.
Author
Thomas Skovlund Hansen — skovlund.dev · thomas@skovlund.dev
License
Available Tools
23 toolsadd_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").
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| measure | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a write operation via 'Add' but discloses nothing about connection requirements, behavior on invalid measure numbers, whether an existing chord symbol is overwritten, or what 'live score' operationally means. This is below the minimum viable disclosure for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The functional sentence is front-loaded and the Args block is compact and scannable. There is zero filler — every word either states the action or adds parameter semantics. The two-part structure is ideal for an LLM-facing definition of this size.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and both parameters are fully documented in the description. However, usage conditions, side effects, and operational prerequisites are entirely missing, and since annotations are absent, those gaps are not compensated elsewhere. Minimum viable for a simple 2-param tool, but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — neither property has a description. The description compensates well by documenting both parameters: it adds the crucial '1-indexed' detail for measure and gives concrete format examples for symbol ('Cmaj7', 'Dm7', 'G7'). This adds real meaning beyond the bare integer/string types, though it could go further on accepted symbol syntax variations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb ('Add'), a specific resource ('chord symbol'), and a specific target ('a measure in the live score'). It distinguishes from sibling tools like add_live_dynamic and add_live_rehearsal_mark by resource type, but it does not explicitly name any sibling it is not, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, and no mention of prerequisites. Sibling connect_to_musescore and connect_to_dorico tools imply an active connection may be required before mutating 'the live score,' but the description never says so. An agent gets no decision support beyond the basic function statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| staff | No | ||
| dynamic | Yes | ||
| measure | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly states the mutation ('Add') and the target, but it does not disclose whether existing dynamics are replaced, how invalid measures are handled, or whether undo is supported. It is not misleading, but it is sparse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and structured with numbered Args. Every sentence adds information, and the parameter explanations are exactly long enough.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for a simple add operation, especially with an output schema present. However, given no annotations and no behavioral caveats, it leaves a few gaps around failure modes and side effects that a more complete description could cover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaningful parameter details: measure is 1-indexed, dynamic has a list of examples, and staff is 0-indexed with a default. This goes beyond the bare schema and helps the agent use the parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Add a dynamic marking') on a specific resource ('a measure in the live score'). It is clearly distinct from sibling tools like add_live_note or add_live_rehearsal_mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the operation's nature: it is the tool to add dynamics, while siblings handle other live-score annotations. However, there is no explicit guidance about when to prefer this tool over alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| pitch | Yes | ||
| staff | No | ||
| measure | Yes | ||
| numerator | No | ||
| denominator | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does disclose a non-obvious side effect: consecutive calls on the same measure append notes because the cursor advances. However, it does not mention prerequisites like an active live connection, failure behavior, or whether the operation can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: a one-sentence purpose, a key behavioral note, then a compact Args list. Every sentence earns its place, and the parameter documentation is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all parameters and the most important behavioral nuance. Since an output schema exists, return-value documentation is not required. The main gap is the absence of explicit connection prerequisites or error conditions, but overall it is nearly complete for a straightforward insertion tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining all five parameters: 1-indexed measure, MIDI pitch with middle C reference, duration numerator/denominator with quarter-note example, and 0-indexed staff with defaults. This adds meaning far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Add'), a specific resource ('a note'), and a precise location ('at the start of a measure in the live score'). This clearly distinguishes it from sibling tools like add_live_dynamic or add_live_chord_symbol.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies when to use it, and the cursor-advance note gives useful behavioral context, but there is no explicit guidance about when to choose this tool over alternatives or when not to use it. An agent must rely on sibling names rather than direct routing instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| measure | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It conveys that the tool mutates the live score, but it does not disclose side effects, prerequisites, failure modes, or whether the change is reversible. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one clear purpose sentence followed by an Args section. Every sentence earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an output schema, the description covers the core invocation details. However, it is incomplete in context: it does not mention that the score app must be connected, what happens if the measure is invalid, or any side effects of adding the mark. The missing behavioral and usage context matters more because no annotations exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by documenting both parameters. It clarifies that 'measure' is 1-indexed and gives concrete examples for 'text' such as 'A', 'B', and 'Intro', adding meaning well beyond the raw schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: 'Add a rehearsal mark to a measure in the live score.' This distinguishes it from sibling tools like add_live_dynamic, add_live_chord_symbol, and add_live_note by naming a unique object type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied: an agent can infer it should call this when adding a rehearsal mark to a measure, but the description gives no explicit guidance about prerequisites, when not to use it, or alternatives. It does not mention that a live score connection is required or how this differs from similar add operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_live_measuresA
Append empty measures to the end of the live score.
Args: count: How many measures to append (default: 1).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only states the basic mutation—appending empty measures—without mentioning side effects, connection requirements, or failure modes. It is not misleading, but it is sparse for a score-mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short lines with the core action front-loaded and the parameter documentation in a minimal Args block. There is no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter append tool with an output schema present, the description is essentially complete: the agent knows the action, the target, and the parameter meaning. It omits explicit prerequisites like being connected to a score app, but the 'live score' wording and sibling context partially cover that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides an integer named 'Count' with a default of 1, while the description adds the meaningful semantic 'How many measures to append' and restates the default. This fully compensates for the 0% schema description coverage, though it does not add constraints such as a minimum positive value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Append'), a precise object ('empty measures'), and a target ('the end of the live score'). This makes the operation unmistakable and clearly distinct from sibling tools like add_live_note or set_live_barline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the operation itself, but the description does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites such as being connected to a score app. It gives no exclusion or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | localhost | |
| port | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden and does so well. It discloses that the API is undocumented, command-only, unverified against a running Dorico, and that connecting disconnects any other application—material side-effect information an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and mostly efficient, with only a minor redundancy: 'experimental' appears both in the first line and again in the second sentence. Every other sentence adds necessary caveats or parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter connection tool, this is complete: prerequisites, defaults, side effects, and limitations are all covered, and an output schema exists so return-value documentation is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by defining both parameters: 'WebSocket host' and 'WebSocket port (default: 4560, Dorico's default).' This adds protocol and default-context meaning beyond the raw schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Connect to a running Dorico via its Remote Control API.' This unambiguously identifies the tool's function and, by naming Dorico, distinguishes it from the Musescore sibling without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use: a running Dorico 4+ with the Remote Control API enabled and the port set in preferences. It does not explicitly name alternatives or when not to use it, but the experimental caveats and prerequisites are enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | localhost | |
| port | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses a meaningful side effect ('Connecting disconnects any other application') and a runtime prerequisite. It does not describe failure modes, but the core behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: purpose, prerequisite, side effect, then arguments. Every sentence earns its place, and important warnings are front-loaded before the parameter list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an optional-parameter connection tool with an output schema, the description covers the version requirement, plugin prerequisite, side effects, and both parameters. Nothing an agent needs to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by documenting both parameters. It adds WebSocket context to host and port beyond the schema titles and repeats defaults, which is adequate for these simple optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Connect') and a specific resource ('running MuseScore Studio (4.4.2 or later)'), and names the required plugin. The MuseScore resource clearly distinguishes it from sibling tools like connect_to_dorico.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context by stating the plugin must be running with its window open, and warns that connecting disconnects any other application. It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_from_doricoC
Disconnect from Dorico.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action without explaining side effects, whether it is safe/idempotent, or what happens to live score state after disconnection. This is a significant gap for a connection-management tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words. It is appropriately concise, though it could add a bit more context without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's connection-management role and the presence of sibling connect/disconnect tools, the description is too sparse. It does not explain the effect of disconnecting, whether it is reversible, or how it relates to connect_to_dorico. The output schema exists but the description still lacks essential behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema already fully defines the input surface. The description adds no parameter details, but none are needed. Baseline 4 is appropriate for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Disconnect from Dorico' clearly states the action and resource, but it is terse and does not distinguish itself from sibling tools like disconnect_from_musescore beyond the resource name. It is minimally clear but lacks any elaboration on what disconnecting entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The sibling list includes connect_to_dorico and disconnect_from_musescore, but the description does not mention prerequisites, consequences, or context for disconnecting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_from_musescoreC
Disconnect from MuseScore.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses only the action, with no mention of side effects, idempotency, or impact on current sessions or live score state. For a state-changing operation this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler, but it is under-specified and simply restates the tool name. It is concise without providing substantive content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complexity is low, there are no parameters, and an output schema exists, so a short description is somewhat acceptable. However, the absence of usage and state context makes the definition only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there is nothing for the description to add. The baseline for a 0-parameter tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Disconnect from MuseScore' is essentially the tool name with spaces; it restates the name rather than adding explanatory detail. It is unambiguous and distinguishes MuseScore from Dorico, but it is a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to call this tool, whether a connection must already exist, or what to do if no connection is active. The sibling names imply context, but the description itself offers no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
score.write("musicxml", fp="My Piece.musicxml"). Use a plain file
name (no directory) so the file lands in the working directory and is
reported back in output_files. Read the score_generation_guide
tool first: it holds the music21 conventions this project relies on
(flats are written B- not Bb, metadata, repeats, volta brackets,
transposing instruments, and a full template).
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: {"success": true, "output_files": [absolute paths of files created in the working directory], "stdout": ...}. On
failure: {"error": ..., "stderr": last lines, "returncode": n}.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | ||
| timeout | No | ||
| output_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of behavioral disclosure — and it delivers. It discloses that the script runs with the user's privileges in the same Python interpreter as the server, exposes the timeout-kill behavior, states that files land in the working directory and are reported back in output_files, and specifies both success and failure return shapes. For a tool that executes arbitrary code, this is exemplary safety and behavior disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every block earns its place: core purpose is front-loaded, then the file-naming convention, guide pointer, environment/privilege warning, parameters, and return format. There is minor redundancy in re-formatting the argument list that the schema already names, and the return JSON structure is verbose — but given the 0% schema coverage and the dangerous execution context, the length is justified rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, arbitrary-code-execution tool with zero schema descriptions and no annotations, this description is essentially complete. Even though an output schema exists (so returns need not be spelled out), it documents the success/failure JSON formats anyway. It covers the guide dependency, naming conventions, environment, security posture, all parameters, and output behavior — nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (the schema only has titles), so the description must compensate — and it does fully. It explains all three parameters: script ('Complete Python source'), output_dir (defaults to a fresh Desktop subdirectory, created if missing, null/empty handling implied), and timeout (seconds before kill, default 120). The description goes well beyond the bare schema and covers every parameter's semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Run a music21 Python script to generate a score file (MusicXML).' This clearly distinguishes it from siblings like render_score (renders an existing score), connect_to_musescore, and the informational score_generation_guide. An agent can identify what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prereq guidance: 'Read the score_generation_guide tool first: it holds the music21 conventions this project relies on.' It also frames the appropriate context by stating the script runs on the user's machine and that only code the user would be comfortable running should be sent. It doesn't explicitly state when NOT to use it versus render_score or the live-editing siblings, but the context and prerequisite routing are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions the prerequisite of an active connection, which is a behavioral requirement. However, it does not disclose whether the operation is read-only or any other side effects, leaving the agent to infer from the word 'get'. With no annotations, this could be more explicit, but the tool is simple and the requirement is useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no filler, and the key prerequisite is stated immediately after the purpose. It earns a high score for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no parameters and a defined output schema, so the description need not detail return values. It covers the essential usage context (active connection) and is complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema is trivially complete. The description correctly does not attempt to explain parameters, and the baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves information about the currently open score in the connected application. It distinguishes itself from sibling tools like get_measure_content, which target specific parts, though it does not explicitly name them. The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that an active connection is required, citing the two connection tools. This provides clear context for when the tool can be used, though it does not explicitly exclude alternatives or state when to prefer this over other info-retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| staff | No | ||
| measure | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'select and report' without stating that this is a read-only operation, whether a live connection is required, or what happens for invalid measure/staff indices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loads the action, and uses a clean two-bullet format for parameters. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with an output schema present, the description adequately covers inputs and the general result. However, it omits usage prerequisites such as an active live-score connection and does not clarify side-effect-free behavior, which is more noticeable given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description fully compensates by explaining measure is 1-indexed, staff is 0-indexed and defaults to 0. This adds critical semantic detail that the bare schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Select one measure of one staff in the live score and report it.' This makes the tool's core purpose clear and distinguishes it from siblings like get_live_score_info, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in the live score' gives some context that this operates on the currently connected live score, implying use when a user needs content from a specific measure. However, it gives no explicit guidance about when to choose this over read_passage or other reading tools, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it indicates a read-only 'get' operationaine, explains that behavior differs by connected application, and even notes the Dorico limitation ('closest its API gets to reading the score'). It does not discuss edge cases like no active selection or connection errors, but those are not critical for this read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and each sentence adds distinct value: the general definition, the MuseScore behavior, and the Dorico behavior. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parametersaren, an output schema describing return values, and the simple read-only nature of the tool, the description provides the necessary operational context: what the selection properties are per app and which app is being addressed. No additional information is needed for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so the schema already fully describes the inputs. The description appropriately avoids inventing parameter details. Baseline 4 applies because there are no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('properties of the current selection'), and then sharpens the meaning by explaining exactly what that yields in MuseScore vs Dorico. This distinguishes it from sibling reading tools like get_measure_content or get_live_score_info because it is specifically about the current selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: whenever the agent needs selection properties, with app-specific expectations spelled out for MuseScore and Dorico. It does not explicitly name alternatives or exclusions, but the selection-focused scope makes the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_score_appA
Check whether the connected application responds. Does not connect.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the key non-obvious trait: the tool does not connect, implying it is a read-only liveness check. This is adequate for a simple ping-style operation, though it does not elaborate on what 'responds' means beyond the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The main action is front-loaded and the clarifying negative ('Does not connect') earns its place by preventing misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter ping tool with an output schema, the description is fully sufficient. An agent knows what the tool does, what it does not do, and can rely on the output schema for return semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to document. The description correctly avoids inventing parameters and the empty schema is self-explanatory; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('the connected application responds'), and explicitly states what it does not do ('Does not connect'), which clearly differentiates it from connection-related siblings like connect_to_musescore and connect_to_dorico.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is a health-check tool and explicitly excludes connection behavior, so an agent will not confuse it with connect/disconnect siblings. It does not name alternatives directly, but the exclusion is sufficient for this simple zero-parameter tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| staff | No | ||
| end_measure | Yes | ||
| start_measure | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It does add valuable behavior: return content is cursor-based, MuseScore returns full note content while Dorico only reports application status, and a warning is referenced. However, it doesn't disclose potential side effects, limits, or why the cursor matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core purpose in the first sentence, followed by return semantics and the platform caveat. The Args section is formatted for quick parsing and every sentence adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only range tool with an output schema, the description covers the input semantics and return behavior sufficiently. It is slightly incomplete in not addressing when to choose it over get_measure_content and in not detailing the referenced warning, but these are secondary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates: start_measure is 1-indexed, end_measure is inclusive and 1-indexed, and staff is 0-indexed with an explanation that omitting it reads the current staff. This is exactly the semantic information the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Read the content of a range of measures in the live score') and clarifies what is returned (notes, rests, other elements). It doesn't explicitly distinguish this from sibling get_measure_content, but the range-scoped scope makes the core purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of get_measure_content or the other reading/inspection siblings, and there are no exclusions or prerequisites. The 'Read' verb only weakly implies its usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ||
| input_path | Yes | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well: it states that an existing output file is overwritten, that PNG export writes one file per page with a -1, -2 suffix, and that the output extension must match the format. It also explains the executable discovery process. It does not mention potential failure modes (e.g., missing MuseScore, invalid input), but the installation requirement is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence, then a paragraph on requirements, a paragraph on executable discovery, and an Args section. It is slightly long but every sentence earns its place, covering installation, discovery, and parameter semantics. The front-loaded first sentence gives the core purpose immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (external dependency, multiple formats, output path behavior), the description is quite complete. It covers installation, executable discovery, input types, format-specific behavior (PNG pagination), and output overwriting. It does not describe the output schema/return value, but an output schema exists, so that is not required. Minor gaps: no explicit error-handling or exit-code behavior, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does: it explains input_path as the path to the score file, format as one of the six values with a default, and output_path as the destination with default behavior and extension-matching requirement. This adds meaning beyond the bare schema properties, though it could be slightly more explicit about the exact format enum values (it does list them).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Render') and resource ('a score file') and enumerates the exact output formats (PDF, PNG, MIDI, MP3, WAV, MusicXML). It clearly distinguishes this from the live-connection siblings (connect_to_musescore, add_live_note, etc.) by emphasizing it runs the MuseScore Studio 4 command line and does not need a live connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: to render a score file to various formats, and it clarifies that MuseScore Studio 4 must be installed but need not be running. It also explains the input file types (MusicXML, .mscz, .mid) and how MuseScore is located, including the MCP_SCORE_MUSESCORE_PATH environment variable fallback. This gives clear context for when this tool is appropriate versus the live-connection siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
score_generation_guideA
Return the score generation guide for writing music21 scripts.
Read this before calling generate_score. It is the bundled
score-generate skill (instructions, music21 conventions and
troubleshooting), the instrument class reference (which class to use for
each instrument, with transposition handled by music21), and a complete
runnable template script. Takes no parameters.
Returns the guide as Markdown, or {"error": ...} JSON if the bundled
skill files cannot be found.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden and does so well. It discloses the successful return format (Markdown), the failure mode (error JSON when bundled skill files cannot be found), and confirms the tool takes no parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured and front-loaded: purpose first, usage directive second, content overview, then parameters and return behavior. Every sentence adds relevant information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless informational tool with an output schema, the description is complete. It explains when to use it, what it contains, what it returns, and what happens on error, so an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is high. The description explicitly states 'Takes no parameters,' which reinforces the empty input schema and leaves no parameter-related ambiguity for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Return the score generation guide for writing music21 scripts.' It also explicitly connects itself to the sibling generate_score as the prerequisite reading, making its role distinct from the other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit directive: 'Read this before calling generate_score.' This tells the agent exactly when to use the tool and names the relevant alternative, leaving no ambiguity about its placement in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| measure | Yes | ||
| barline_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It discloses the core effect (set a barline at the end of a measure) and clarifies the special repeat semantics for startRepeat and endStartRepeat. However, it omits side effects, validation requirements, and what happens when a barline already exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a single purpose sentence followed by a concise Args section. Every sentence adds necessary information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation, the description covers the purpose and all parameters, and an output schema exists so return values do not need explanation. It is slightly incomplete because it does not mention prerequisites such as an active connection or existing measure, but these are minor against the completeness of parameter documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only property names and types, with 0% description coverage. The description compensates fully by documenting measure as 1-indexed, enumerating all valid barline_type values, and explaining the repeat-specific meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action and target: 'Set the bar line at the end of a measure in the live score.' It differentiates from set_live_key_signature, set_live_time_signature, and set_live_tempo by naming the barline resource, but it does not explicitly compare against sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the sibling setter tools such as set_live_time_signature or append_live_measures. The description implies only that it is for setting bar lines, with no conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fifths | Yes | ||
| measure | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description must disclose behavior. It states the action ('Set the key signature from a measure onward') but does not mention side effects (e.g., impacts all subsequent measures), reversibility, error handling for invalid measure numbers, or whether the change is immediately applied. Lacks transparency beyond the basic mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: a single-sentence purpose followed by a clear Args section. No redundant wording, and the most important information is front-loaded. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with an output schema, the description covers the core action and parameter semantics. However, it lacks usage context (when to pick this over siblings) and behavioral caveats about side effects or error cases. Acceptable but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully compensates. It explains measure is 1-indexed and fifths uses positive for sharps/negative for flats with concrete examples (0=C major, 2=D major, -3=Eb major). This adds significant meaning beyond the bare type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Set' with specific resource 'key signature' and scope 'from a measure onward in the live score.' It distinguishes itself from siblings like set_live_time_signature and set_live_tempo by naming the exact target. An agent can immediately understand the operation without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention that other set_live_* tools exist for tempo, time signature, etc., nor does it state prerequisites or exclusions. The description is self-contained but leaves the selection decision to the agent without hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| bpm | Yes | ||
| text | No | ||
| measure | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only states the action and parameters. It does not disclose that setting a tempo likely overwrites an existing one, whether a connection to a scoring app is required, or what happens for invalid measure numbers. This is a meaningful transparency gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one clear purpose sentence followed by three terse, useful parameter lines. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The purpose and all parameter semantics are covered, and an output schema exists so return-value documentation is unnecessary. However, given the absence of annotations, the missing usage prerequisites and behavioral caveats leave the definition slightly incomplete for an agent deciding whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description's Args section fully compensates: it defines measure as 1-indexed, explains bpm as beats per minute, and documents text as optional with examples. All three parameters receive meaningful semantic clarification beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Set') and a precise resource ('tempo at a measure in the live score'). This clearly distinguishes it from sibling tools like set_live_time_signature and set_live_key_signature, and the purpose is immediately understandable without further context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites such as needing an active connection through connect_to_musescore or connect_to_dorico. The tool name implies the usage context, but the description itself does not help an agent select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| measure | Yes | ||
| numerator | Yes | ||
| denominator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It only states the basic action without mentioning side effects (e.g., whether existing signatures are overwritten), prerequisites (e.g., requiring a live connection), or reversibility. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single-purpose sentence followed by a brief parameter list. It is front-loaded with the core action and remains compact with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the parameters but omits operational context: it does not mention that the tool likely requires an active connection (given sibling connect tools) or what happens to the existing time signature after the measure. An output schema exists, so return values are not required, but the missing context affects effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does. Each parameter (measure, numerator, denominator) is explicitly defined with a concrete example (3/4). This adds substantial meaning beyond the schema's plain titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Set the time signature'), a specific resource ('live score'), and the scope ('from a measure onward'). This clearly distinguishes it from sibling tools like set_live_key_signature and set_live_tempo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this is for changing time signatures in a live score, which implies when it should be used. It does not explicitly exclude alternatives or name conditions, but the context is unambiguous given the sibling set of musical element setters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| staff | Yes | ||
| semitones | Yes | ||
| end_measure | Yes | ||
| start_measure | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It adds useful behavior not derivable from the schema: conventional spelling (C to Db), and that key signatures/chord symbols remain unchanged. It doesn't mention undoability or connection requirements, but it does disclose the most important side-effect scoping.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main operation is front-loaded in one clear sentence, followed by only necessary behavioral notes and a compact parameter list. No filler or redundant restatement of the input schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with no annotations, the description covers the operation, parameter semantics, and key behavioral exclusions. It is nearly complete, though it could explicitly mention prerequisites such as an active live-score connection or the in-place/destructive nature of the edit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args section must compensate. It fully documents all four parameters, including start_measure being 1-indexed, end_measure being inclusive, staff being 0-indexed, and semitones sign direction. This is exactly the added meaning an agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and target: 'Transpose the notes of a passage by a number of semitones in the live score.' It is immediately distinguishable from siblings like add_live_note or set_live_key_signature, none of which perform transposition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the action and 'live score' context, and the note that key signatures/chord symbols are left unchanged hints at scope boundaries. However, it never explicitly says when to prefer this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_last_actionA
Undo the last change in the connected application.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Undo the last change' and does not clarify whether the operation is destructive, whether it undoes only changes made by this integration vs. all app changes, or how many steps of undo history are available.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that communicates the entire purpose of a zero-parameter tool. There is no wasted phrasing, and no additional length is warranted for such a simple operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has zero parameters, and has an output schema, so the description need not explain return values. However, for a mutating operation with no annotations, it would be more complete to clarify the scope of 'last change' and any side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so no parameter documentation is needed. The schema coverage is effectively complete, and the baseline for a parameterless tool is met.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Undo') and a clear target ('the last change in the connected application'). It is unambiguous and distinguishable from all sibling tools, none of which are undo operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when this tool should be used: after an unwanted change in the connected application. However, it does not explicitly state when not to use it or mention any alternative, though no direct undo alternative exists among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
25 tool updates
- Changed
add_live_chord_symbol4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Added
add_live_dynamic - Added
add_live_note - Changed
add_live_rehearsal_mark4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Added
append_live_measures - Changed
connect_to_dorico4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
connect_to_musescore4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Removed
connect_to_sibelius - Changed
disconnect_from_dorico4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
disconnect_from_musescore4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Removed
disconnect_from_sibelius - Added
generate_score - Changed
get_live_score_info4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
get_measure_content4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
get_selection_properties4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
ping_score_app4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
read_passage4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Added
render_score - Added
score_generation_guide - Changed
set_live_barline4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
set_live_key_signature4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
set_live_tempo4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Added
set_live_time_signature - Changed
transpose_passage4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
- Changed
undo_last_action4 fields changed- added
Output schema / $defsAdded value: +{ + "CommandResult": { + "additionalProperties": true, + "type": "object" + } +} - added
Output schema / properties / result / $refAdded value: +"#/$defs/CommandResult" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / properties / result / typeRemoved value: -"string"
18 tool updates
v0.1.0- First observed
add_live_chord_symbol - First observed
add_live_rehearsal_mark - First observed
connect_to_dorico - First observed
connect_to_musescore - First observed
connect_to_sibelius - First observed
disconnect_from_dorico - First observed
disconnect_from_musescore - First observed
disconnect_from_sibelius - First observed
get_live_score_info - First observed
get_measure_content - First observed
get_selection_properties - First observed
ping_score_app - First observed
read_passage - First observed
set_live_barline - First observed
set_live_key_signature - First observed
set_live_tempo - First observed
transpose_passage - First observed
undo_last_action
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.
Maintenance
Related MCP Connectors
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
- choriloOAuthcom.chorilo
Choir management for AI assistants: events, RSVP, announcements and sheet music of your choir.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Write lyrics in 100+ styles, score them, generate full songs with 4 engines, split stems. OAuth.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA Model Context Protocol server that provides programmatic control over MuseScore through a WebSocket-based plugin system, allowing AI assistants to compose music, add lyrics, navigate scores, and control MuseScore directly.107MIT
- AlicenseNot gradedqualityDmaintenanceA composition-focused server built on music21 for generative music workflows, enabling melody generation, musical transformations, chord reharmonization, counterpoint creation, and MIDI export through constraint-based algorithmic composition tools.1MIT
- AlicenseBqualityDmaintenanceAn MCP server that enables natural language control of Steinberg Dorico music notation software through Claude Desktop or ChatGPT, offering tools for score creation, note input, notation, harmony analysis, and orchestration.5413MIT
- -licenseNot gradedqualityNot gradedmaintenanceMCP server for vibe coding with music, enabling format conversion (LilyPond, MusicXML, MIDI, ABC, etc.), audio-to-sheet transcription, and transposition with robust fallback outputs.1-