MCP Server for controlling Dorico via Claude Desktop - A gift for composition majors
35 tools with mixed quality. Most have descriptions (good), but many lack proper parameter schemas or have incomplete/generic descriptions. Tool naming is generally clear (verb_noun pattern), but parameter documentation is inconsistent. No input validation guidance, minimal error recovery hints, and no output schemas documented. Schemas present for ~60% of tools but often incomplete (missing type info on some params). Error handling is minimal, most tools return generic success/error dicts without actionable recovery guidance.
Add articulation to selection.
Add crescendo hairpin to selection.
Add diminuendo hairpin to selection.
Add dynamic marking to selection.
Add an instrument to the score.
Add notes to the current position in Dorico.
Add a rest at the current position.
Add slur to selection.
Three tools (add_slur, add_crescendo, add_diminuendo) have empty input schemas ({}), violating the requirement that every parameter must have a description and type.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., what does get_dorico_status return? What fields are in the status dict?). Violates pattern:response-shaper.
Error handling is minimal. Most tools return generic {'success': False, 'error': str(e)} without actionable recovery guidance. E.g., connect_to_dorico hints at enabling Remote Control, but other tools offer no hints. Violates pattern:recovery-guide.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Analyze harmonic content of selection.
Check if notes in selection are within instrument range.
Check for voice leading issues between two voices.
Connect to Dorico. Establishes a WebSocket connection to Dorico's Remote Control API. Must be called before using other Dorico tools.
Copy the current selection to clipboard.
Create a new score in Dorico. Creates a new score with the specified settings. This is the starting point for any new composition.
Cut the current selection to clipboard.
Delete the current selection.
Export the score to PDF or MusicXML.
Generate a chord progression in a given key.
Get current Dorico status. Returns information about the current score, selection, and application state.
Get information about an instrument (range, transposition, clef).
Open an existing score file.
Paste from clipboard at current position.
Start playback of the score.
Stop playback of the score.
Redo the last undone action.
Remove an instrument from the score.
Save the current score.
Select all notes in the score.
Set key signature at current position or specific bar.
Set tempo marking.
Set time signature at current position or specific bar.
Suggest next chord based on harmonic context.
Switch Dorico window mode.
Transpose selection by semitones.
Undo the last action.
Destructive tools (delete_selection, cut_selection, remove_instrument) lack confirmation or dry-run support. No tool annotations (destructiveHint) present. Agents can accidentally delete content without safeguards.
Many descriptions are generic or under 50 chars (e.g., 'Add a rest at the current position.' for add_rest, 'Undo the last action.' for undo). These lack context for LLM selection and when to use vs similar tools.