Dorico MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| 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
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