22 tools with significant quality gaps. Most tools have basic descriptions (50-150 chars) but lack depth on WHEN to use them or prerequisites. Input schemas present but sparse: many parameters lack type constraints (e.g., 'action' in modify_notes is free-form string, not enum). No output schemas documented. Parameters like 'score' (object type) are vague, music21 Stream serialization is opaque to LLMs. Error handling absent: no recovery guidance, no validation messages. Naming is verb-heavy (good) but some tools conflate concerns (e.g., mcp_export_midi both parses and exports). No tool annotations (readOnlyHint/destructiveHint). Composition issues: 12 tools accept 'score' (object) parameter, LLMs cannot construct these without prior parse_midi_file call, forcing rigid chains.
Identify chords and Roman numerals in a progression.
Analyze song structure — identify sections (A, B, A', etc.).
Analyze the key of a music21 stream. Returns key, mode, and confidence.
Adjust MIDI velocity (dynamics) of notes: scale, absolute, or offset.
Detect key changes (modulations) within a piece.
Export a music21 stream to a MIDI file.
Extract the melody line (highest pitch) from a multi-part score.
Object-type parameters ('score') are opaque to LLMs. 12 tools accept music21 Stream/Score objects that cannot be constructed without prior parse_midi_file call. Forces rigid, sequential chains and prevents composition.
Free-form string parameters lack enum constraints. 'action' in modify_notes accepts 'remove'|'select'|'shift_octave' but is not declared as enum, LLMs may hallucinate invalid values like 'delete' or 'filter'.
No output schemas documented. Tools return dicts with fields like 'summary', 'confidence', 'alternatives' but LLMs have no formal schema to parse results. Downstream tool calls cannot reliably extract required IDs or references.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Generate chord accompaniment for a melody line.
Detect the key of a MIDI file.
Adjust velocity (dynamics) of a MIDI file.
Export a parsed MIDI stream to a new file (use after modifications).
Modify notes in a MIDI file by pitch criteria.
Parse a MIDI file into a music21 stream.
Transpose a MIDI file by semitones or to a target key.
Overlay two streams into a single stream or multi-part score.
Filter/remove/select/shift notes by pitch criteria.
Load a MIDI file and return a music21 stream for further processing.
Snap note timings to a rhythmic grid (quarter, eighth, sixteenth).
Replace chords with harmonic alternatives (diatonic or jazz substitutions).
Replace a chord at a specific bar/beat position.
Search for melodic patterns by exact pitch or interval sequence.
Transpose a stream by semitones or to a target key.
No error handling or recovery guidance. Tools do not validate inputs (e.g., invalid file paths, out-of-range semitones) or return actionable error messages. LLMs receive silent failures or stack traces with no next-step guidance.
Duplicate tool definitions. 'mcp_parse_midi_file' and 'parse_midi_file' do the same thing; 'mcp_analyze_key' and 'analyze_key' are redundant. LLMs waste reasoning cycles choosing between them. Consolidate to one canonical name per operation.