Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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

NameDescription
harmonize_melodyWorkflow for harmonizing a melody with four-part harmony.
orchestration_basicsWorkflow for basic orchestration of a piano piece.
species_counterpointWorkflow for species counterpoint exercises.
chord_progression_workshopWorkflow for creating and refining chord progressions.
score_reviewWorkflow for comprehensive score review and proofreading.

Resources

Contextual data attached and managed by the client

NameDescription
resource_statusCurrent Dorico connection status and application state.
resource_score_infoCurrent score information including title, composer, and instruments.
resource_score_selectionCurrent selection information including selected notes and bars.
resource_instrument_listList of available instruments with basic info.
resource_instrument_rangesStandard 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