Dorico MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| connect_to_doricoA | Connect to Dorico. Establishes a WebSocket connection to Dorico's Remote Control API. Must be called before using other Dorico tools. Returns: Connection status and Dorico information |
| get_dorico_statusA | Get current Dorico status. Returns information about the current score, selection, and application state. |
| open_scoreA | Open an existing score file. Args: path: File path to the Dorico project file (.dorico) Returns: Success status |
| create_scoreA | Create a new score in Dorico. Creates a new score with the specified settings. This is the starting point for any new composition. Args: title: Score title (shown on first page) composer: Composer name instruments: List of instruments to add (e.g., ["Piano", "Violin", "Cello"]) time_signature: Time signature (e.g., "4/4", "3/4", "6/8") key_signature: Key signature (e.g., "C major", "G minor", "Bb major") tempo_bpm: Tempo in beats per minute (20-400) Returns: Success status and score information Examples: - Simple piano piece: create_score(title="Prelude", instruments=["Piano"]) - String quartet: create_score(instruments=["Violin", "Violin", "Viola", "Cello"]) - Orchestra: create_score(instruments=["Flute", "Oboe", "Clarinet", "Horn", "Violin", "Viola", "Cello", "Double Bass"]) |
| save_scoreB | Save the current score. Args: path: File path to save to. If None, saves to current location. Returns: Success status |
| export_scoreA | Export the score to PDF or MusicXML. Args: path: Export file path format: Export format ("pdf" or "musicxml") Returns: Success status and export path |
| add_notesA | Add notes to the score at the current position. Args: notes: List of notes to add (e.g., ["C4", "E4", "G4"]) Format: Note name + octave, with optional # or b Examples: "C4", "F#5", "Bb3", "G#4" duration: Note duration - one of: "whole", "half", "quarter", "eighth", "sixteenth", "32nd", "64th" as_chord: If True, add all notes simultaneously as a chord. If False, add notes sequentially. Returns: Success status and notes added Examples: - Single note: add_notes(["C4"]) - Melody: add_notes(["C4", "D4", "E4", "F4", "G4"]) - C major chord: add_notes(["C4", "E4", "G4"], as_chord=True) - Half notes: add_notes(["C4", "E4"], duration="half") |
| add_restB | Add a rest at the current position. Args: duration: Rest duration (whole, half, quarter, eighth, sixteenth, 32nd, 64th) Returns: Success status |
| set_key_signatureA | Set the key signature. Args: root: Root note of the key (C, D, E, F, G, A, B with optional # or b) Examples: "C", "G", "F#", "Bb", "Eb" mode: "major" or "minor" bar: Bar number to insert at. None = current position. Returns: Success status Examples: - C major: set_key_signature("C", "major") - G major: set_key_signature("G", "major") - A minor: set_key_signature("A", "minor") - Bb major: set_key_signature("Bb", "major") - F# minor: set_key_signature("F#", "minor") |
| set_time_signatureA | Set the time signature. Args: numerator: Top number (beats per measure). Range: 1-32 denominator: Bottom number (beat unit). Common values: 2, 4, 8, 16 bar: Bar number to insert at. None = current position. Returns: Success status Examples: - Common time: set_time_signature(4, 4) - Waltz: set_time_signature(3, 4) - Compound duple: set_time_signature(6, 8) - Cut time: set_time_signature(2, 2) |
| add_dynamicsA | Add a dynamic marking to the selection. Args: dynamic: Dynamic marking. Options: - pppp, ppp, pp, p (soft) - mp, mf (medium) - f, ff, fff, ffff (loud) - fp, sf, sfz, fz, rf, rfz (accented) Returns: Success status Examples: - Piano: add_dynamics("p") - Forte: add_dynamics("f") - Sforzando: add_dynamics("sfz") |
| add_tempoA | Add a tempo marking. Args: bpm: Beats per minute (20-400) text: Optional tempo text (e.g., "Allegro", "Andante", "Presto") Returns: Success status Examples: - add_tempo(120) # Just BPM - add_tempo(120, "Allegro") # BPM with text - add_tempo(60, "Adagio") |
| add_articulationB | Add an articulation to the current selection. Args: articulation: Articulation type (staccato, accent, tenuto, marcato, staccatissimo, fermata) Returns: Success status |
| add_textB | Add text to the score at the current position. Args: text: Text content to add text_type: Type of text (expression, technique, tempo, staff) Returns: Success status |
| delete_notesA | Delete the currently selected notes. Select the notes to delete first, then call this tool. Returns: Success status |
| remove_instrumentB | Remove an instrument from the score. Args: instrument_name: Name of the instrument to remove Returns: Success status |
| add_slurA | Add a slur to the current selection. Select the notes you want to slur first, then call this tool. Returns: Success status |
| transposeA | Transpose the current selection by semitones. Args: semitones: Number of semitones to transpose. Positive = up, Negative = down. Examples: 12 = up one octave, -12 = down one octave, 7 = up a perfect fifth, -5 = down a perfect fourth Returns: Success status and transposition amount |
| transpose_octaveB | Transpose the current selection by one octave. Args: direction: "up" or "down" Returns: Success status |
| go_to_barB | Navigate to a specific bar in the score. Args: bar_number: Bar number to go to (1-based) Returns: Success status |
| add_instrumentB | Add an instrument to the score. Args: instrument_name: Name of the instrument to add. Common names: Piano, Violin, Viola, Cello, Double Bass, Flute, Oboe, Clarinet, Bassoon, Horn, Trumpet, Trombone, Tuba, Timpani, Harp, Voice Returns: Success status |
| playback_controlC | Control playback. Args: action: One of "play", "stop", "rewind" Returns: Success status |
| get_flowsA | Get list of flows in the current project. Flows are separate musical sections within a Dorico project. Returns: List of flows with IDs and names |
| get_layoutsA | Get list of layouts in the current project. Layouts define how music is presented (full score, parts, etc.). Returns: List of layouts with IDs and names |
| get_selection_propertiesA | Get properties of the current selection. Returns detailed information about whatever is currently selected in Dorico. NOTE: This is selection-based only - cannot query arbitrary score positions. Returns: Properties of current selection |
| get_engraving_optionsA | Get current engraving options. Engraving options control the visual appearance of notation. Returns: Current engraving options |
| get_layout_optionsA | Get layout options for a specific layout. Args: layout_id: ID of the layout (get from get_layouts()) Returns: Layout options for the specified layout |
| get_notation_optionsA | Get notation options for a specific flow. Args: flow_id: ID of the flow (get from get_flows()) Returns: Notation options for the specified flow |
| set_engraving_optionsC | Set engraving options for the document. Engraving options control the visual appearance of notation elements. Args: options: Dictionary of option names and values to set Returns: Success status |
| set_layout_optionsC | Set layout options for a specific layout. Args: layout_id: ID of the layout (get from get_layouts()) options: Dictionary of option names and values to set Returns: Success status |
| set_notation_optionsA | Set notation options for a specific flow. Args: flow_id: ID of the flow (get from get_flows()) options: Dictionary of option names and values to set Returns: Success status |
| analyze_chordA | Analyze a chord and get its Roman numeral analysis. Args: pitches: List of pitch names (e.g., ["C4", "E4", "G4"]) key: Key for Roman numeral analysis (e.g., "C major", "A minor") Returns: Chord analysis with root, quality, and Roman numeral |
| suggest_next_chordA | Suggest possible next chords based on harmonic context. Args: previous_chords: List of previous chord Roman numerals (e.g., ["I", "IV"]) key: Current key (e.g., "C major") style: Style of suggestions (classical, pop, jazz) Returns: List of suggested chords with explanations |
| check_voice_leadingC | Check for voice leading issues between two voice parts. Detects parallel fifths, parallel octaves, voice crossing, etc. Args: voice1: List of pitches for first voice (e.g., ["C4", "D4", "E4"]) voice2: List of pitches for second voice (e.g., ["G3", "A3", "B3"]) Returns: List of voice leading issues found |
| generate_chord_progressionB | Generate a chord progression. Args: key: Key for the progression (e.g., "C major", "A minor") length: Number of chords (default 4) style: Style (classical, pop, jazz) ending: Cadence type (authentic, half, plagal, deceptive) Returns: Generated chord progression with Roman numerals |
| check_instrument_rangeA | Check if a pitch is playable on an instrument. Args: instrument: Instrument name (e.g., "violin", "flute", "clarinet") pitch: Pitch to check (e.g., "C4", "G3") Returns: Playability status and range information |
| get_instrument_infoA | Get detailed information about an instrument. Args: instrument: Instrument name (e.g., "violin", "horn", "clarinet") Returns: Instrument details including range, transposition, family |
| check_species_rulesA | Check species counterpoint rules. Analyzes a counterpoint line against a cantus firmus for rule violations. Args: cantus_firmus: List of pitches for the cantus firmus (e.g., ["C4", "D4", "E4"]) counterpoint: List of pitches for the counterpoint line species: Species number (1-5): 1 = Note against note 2 = Two notes against one 3 = Four notes against one 4 = Syncopation/suspensions 5 = Florid (free) Returns: Analysis with intervals and rule violations Examples: - First species: check_species_rules(["C4", "D4", "E4"], ["G4", "A4", "C5"], species=1) |
| generate_counterpointA | Generate a counterpoint line for a cantus firmus. Creates a counterpoint melody following species rules. Args: cantus_firmus: List of pitches (e.g., ["C4", "D4", "E4", "F4", "E4", "D4", "C4"]) species: Species number (1-5) above: If True, generate counterpoint above CF; if False, below Returns: Generated counterpoint with validation results Examples: - Above CF: generate_counterpoint(["C4", "D4", "E4", "D4", "C4"], species=1, above=True) - Below CF: generate_counterpoint(["C4", "D4", "E4", "D4", "C4"], species=1, above=False) |
| validate_voice_leadingB | Validate voice leading in a multi-voice passage. Checks for parallel fifths/octaves, voice crossing, and range issues. Args: voices: Dictionary mapping voice names to pitch lists Example: {"soprano": ["C5", "D5"], "alto": ["E4", "F4"], "tenor": ["G3", "A3"], "bass": ["C3", "D3"]} key: Key for analysis (e.g., "C major", "A minor") Returns: Validation results with errors and warnings Examples: - Four-part: validate_voice_leading({ "soprano": ["C5", "D5", "E5"], "alto": ["E4", "F4", "G4"], "tenor": ["G3", "A3", "B3"], "bass": ["C3", "D3", "E3"] }) |
| check_enharmonicA | Check for potentially incorrect enharmonic spellings. Suggests alternative spellings based on key context. Args: pitches: List of pitches to check (e.g., ["C#4", "Db4", "F#4"]) key: Key context (e.g., "Db major" - suggests Db instead of C#) Returns: List of spelling suggestions Examples: - check_enharmonic(["C#4", "F#4"], key="Db major") -> Suggests using Db and Gb instead |
| analyze_intervalsA | Analyze intervals between consecutive pitches. Args: pitches: List of pitches (e.g., ["C4", "E4", "G4", "C5"]) Returns: List of intervals with names, semitones, and consonance info |
| check_playabilityA | Check if a passage is playable on an instrument. Args: instrument: Instrument name (e.g., "violin", "flute") pitches: List of pitches to check Returns: Playability analysis with range and technique issues |
| validate_scoreA | Comprehensive score validation. Checks voice leading, ranges, parallel motion, and more. Args: voices: Dictionary mapping voice names to pitch lists key: Key for analysis Returns: Complete validation report with score and issues |
| detect_parallel_motionB | Detect parallel fifths and octaves between two voices. Args: voice1: List of pitches for first voice voice2: List of pitches for second voice Returns: Detection results with parallel motion instances |
| transpose_for_instrumentA | Transpose a pitch for a transposing instrument. Args: pitch: Pitch to transpose (e.g., "C4") instrument: Instrument name (e.g., "clarinet", "horn", "trumpet") to_concert: If True, written to concert pitch; if False, concert to written Returns: Transposed pitch with interval info |
| realize_figured_bassA | Realize figured bass notation into chord pitches. Args: bass_pitch: Bass note (e.g., "C3", "G2") figures: Figured bass notation (e.g., "6", "64", "7", "65", "43", "42") key: Key context for accidentals Returns: Realized chord with all pitches |
| suggest_cadenceA | Suggest appropriate cadence types based on context. Args: current_chord: Current chord (e.g., "V", "IV", "I") key: Key context (e.g., "C major", "A minor") phrase_position: Position in phrase ("end", "middle", "beginning") Returns: Cadence suggestions with explanations |
| suggest_doublingA | Suggest instruments for doubling a given instrument. Args: instrument: Primary instrument to double (e.g., "violin", "flute") purpose: Purpose (reinforcement, octave_above, octave_below, color) register: Register of the passage (low, middle, high) Returns: Doubling suggestions with rationale |
| find_dissonancesA | Find dissonant intervals in a collection of pitches. Args: pitches: List of pitches sounding together (e.g., ["C4", "E4", "G4", "B4"]) context: Context for analysis ("counterpoint", "harmony", "any") Returns: List of dissonances found with resolution advice |
| suggest_instrumentationB | Suggest instrumental ensembles based on style and requirements. Args: style: Musical style (classical, romantic, modern, baroque, jazz) size: Ensemble size (solo, small, medium, large, orchestra) character: Character of piece (lyrical, dramatic, light, powerful, intimate) Returns: Suggested ensembles with rationale |
| balance_dynamicsA | Suggest dynamic adjustments for ensemble balance. Args: instruments: List of instruments in the ensemble target_dynamic: Target overall dynamic level (pp, p, mp, mf, f, ff) melody_instrument: Instrument carrying the melody (should project) Returns: Dynamic suggestions for each instrument |
| check_beamingA | Check if beaming follows standard notation rules. Args: time_signature: Time signature (e.g., "4/4", "6/8") note_values: List of note values in a bar (e.g., ["8th", "8th", "8th", "8th"]) Returns: Beaming analysis with suggestions |
| check_spacingA | Check if note spacing is appropriate for readability. Args: note_count: Number of notes in the bar bar_width_mm: Width of the bar in millimeters shortest_note: Shortest note value in the bar Returns: Spacing analysis with recommendations |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| harmonize_melody | Workflow for harmonizing a melody with four-part harmony. |
| orchestration_basics | Workflow for basic orchestration of a piano piece. |
| species_counterpoint | Workflow for species counterpoint exercises. |
| chord_progression_workshop | Workflow for creating and refining chord progressions. |
| score_review | Workflow for comprehensive score review and proofreading. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| resource_status | Current Dorico connection status and application state. |
| resource_score_info | Current score information including title, composer, and instruments. |
| resource_score_selection | Current selection information including selected notes and bars. |
| resource_instrument_list | List of available instruments with basic info. |
| resource_instrument_ranges | Standard instrument ranges for orchestration reference. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/happycastle114/dorico-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server