Music Tutor is a remote MCP server with ten read-only tools. Each returns structured facts for the model plus an interactive card (MCP Apps) that engraves and plays notation.
| Endpoint | https://musictutor.app/mcp |
|---|---|
| Transport | Streamable HTTP (POST JSON-RPC; SSE responses) |
| Auth | None |
| Side effects | None — all tools carry readOnlyHint: true |
| Card UI | ui://music-mcp/notation.html, hosts supporting MCP Apps render it; others get the text + structured result |
Settings → Connectors → Add custom connector → name Music Tutor, URL above, no OAuth.
Settings → Apps & Connectors → Advanced → Developer mode → Create → URL above, No authentication.
claude mcp add --transport http music-tutor https://musictutor.app/mcp
npx @modelcontextprotocol/inspector https://musictutor.app/mcp
sightreading_exerciseA short passage of real, public-domain piano music graded 1–10. The card engraves it, plays it with note highlighting and links to the same passage for practising with an instrument.
| level | integer 1–10, default 1. 1–2 are one hand; higher levels use both hands |
|---|---|
| hand | rh · lh · both — ignored where the level has no such passages |
| query | composer or title filter, e.g. "Bach", "Ode to Joy" (≤ 80 chars) |
| focus | one skill: ledger-lines · accidentals · many-sharps · many-flats · dotted-rhythm · triplets · syncopation · sixteenths · chords · position-shift · scale-run |
| seed | integer; reuse to get the same passage again |
The card's Play along on panel shows the melody on a keyboard or a guitar fretboard.
Returns title, composer, bars, key, meter, level, seed, hand, grading facts and the passage as MusicXML. No match (e.g. a living composer) → an error result, never invented music.
{"level": 5, "query": "Bach"}
find_musicReal notation from the classical corpus, two ways. A named piece — "show me the Moonlight Sonata", "the main theme of Clair de lune" — returns its iconic opening bars, engraved and playable. Browse by composer, era or form returns 3–5 famous openings as a carousel (one per composer for era/form lists). Public-domain works only.
| query | a specific piece: composer, title, key, opus — free text, e.g. "chopin nocturne c# minor", "moonlight sonata" (2–120 chars) |
|---|---|
| composer | browse: e.g. "Chopin" |
| era | browse: baroque · classical · romantic · modern |
| form | browse: e.g. "mazurka", "nocturne", "fugue" |
| count | browse: 3–5 |
| page | browse: 1 = the next few |
| transpose | an instrument ("clarinet", "trumpet", "alto sax", "tenor sax", "bari sax", "F horn": written for it, played back at concert pitch), an interval ("-M2", "+m3") or a target key ("Eb") |
Returns the resolved work, bar range, key, meter, notation facts, the MusicXML, and candidates (other works that matched) so the assistant can confirm it picked the right piece; browse returns an items[] list. No match or a copyrighted match → an error result, never invented music.
{"query": "chopin nocturne c# minor"}
{"era": "romantic", "count": 4}
show_notationEngrave music the assistant writes — a scale, chord, progression, melody, rhythm or excerpt — as a playable staff.
| score | ABC (preferred, single- or two-voice), MusicXML or MEI. 8–60 000 chars |
|---|---|
| bass | optional second ABC tune for the left hand; alternative to two-voice ABC in score. Adds a braced grand staff |
| caption | one line shown under the notation (≤ 140 chars) |
| transpose | an instrument ("clarinet", "trumpet", "alto sax", "tenor sax", "bari sax", "F horn": written for it, played back at concert pitch), an interval ("-M2", "+m3") or a target key ("Eb") |
Returns note/measure/staff/duration facts and any engraving warnings so the model can correct its notation.
{"score": "X:1
M:4/4
L:1/4
K:C
"Dm7"[F4A4c4e4] | "G7"[F4A4B4d4] | "Cmaj7"[E4G4B4d4] |]",
"bass": "X:1
M:4/4
L:1/4
K:C clef=bass
D,4 | G,,4 | C,4 |]",
"caption": "ii–V–I in C"}
show_chord_or_scaleThe notes of a chord or scale, spelled correctly (Cb major = Cb Eb Gb, Bbdim7 = Bb Db Fb Abb), on a staff and a piano keyboard, with playback. Chords also get a guitar chord box.
| kind | chord · scale |
|---|---|
| root | A–G with an optional #, b, x or bb |
| type | chord quality ("m7", "dim7", "major") or scale name ("harmonic minor", "dorian") |
Returns the notes, degree formula, the piano key each note is played on, and MIDI.
{"kind": "chord", "root": "F#", "type": "m7"}
show_lead_sheetA song's melody with chord symbols and words (up to 48 bars), plus a diagram for every chord it uses — piano or guitar, the learner's choice. Chords play under the melody and light as they sound. Carols, hymns and folk songs in the public domain.
| query | the song, e.g. "silent night", "greensleeves" |
|---|---|
| transpose | an instrument ("clarinet", "trumpet", "alto sax", "tenor sax", "bari sax", "F horn": written for it, played back at concert pitch), an interval ("-M2", "+m3") or a target key ("Eb") |
{"query": "silent night"}
find_harmony_exampleReal passages containing a harmony concept — Neapolitan sixth, augmented sixths, secondary dominants, deceptive cadence, cadential 6-4 and more (37 concepts). The card engraves each passage, colours and labels the target chord and plays it; up to 6 examples as a carousel.
| concept | e.g. "N6", "German sixth", "V/V", "deceptive cadence" |
|---|---|
| composer | only examples by this composer |
| exclude | example ids already shown, for "another one" |
Returns examples[] with work, bars, key, Roman numeral and the chord's spelling. Examples from noncommercial corpora (DCML, CC BY-NC-SA) carry their attribution.
{"concept": "Neapolitan sixth", "composer": "Chopin"}
show_passageMore of a piece the learner has already met: the bars around a harmony example, what comes after an opening, or the whole piece (up to 64 bars).
| work_id | from a previous result |
|---|---|
| start_bar, end_bar | bar range |
| whole | from the start, up to 64 bars |
| highlight_bar | a bar to mark, e.g. a harmony example's target |
| source | dataset the bar numbers come from, e.g. "dcml" |
| transpose | an instrument ("clarinet", "trumpet", "alto sax", "tenor sax", "bari sax", "F horn": written for it, played back at concert pitch), an interval ("-M2", "+m3") or a target key ("Eb") |
guess_the_composerA listening game: the card plays a famous opening with no notation or title, and the learner picks from four composers. Each answer reveals the portrait, dates, a fun fact and the notation.
| rounds | 3–5 |
|---|---|
| difficulty | easy · hard (same style period) |
| daily | today's shared puzzle: 5 rounds, hard, with a shareable score line |
{"daily": true}
ear_training_quizA graded listening quiz the model designs: hear an interval, chord, inversion or scale and pick the answer. The server spells every question (a tritone from C is C→F♯), balances the deck and rates its difficulty.
| family | interval · chord_quality · inversion · scale |
|---|---|
| options | the 2–12 contrasts to drill, e.g. ["P4","P5","TT"] |
| play | e.g. melodic_up, harmonic, block, broken, up_down |
| preset | intervals-1…5, chords-1…3, inversions-1/2, scales-1/2, modes-1; fields given alongside override it |
| register, roots, weights, questions, seed | optional |
Returns the spec, a difficulty summary and the answer key to the model (not shown to the learner). When the learner finishes, the card sends per-question results (with replays and latency), a confusion count such as "P5→m3": 2 and a suggested next spec with its reason.
{"family": "interval", "options": ["P4", "P5", "TT"], "play": "harmonic", "questions": 8}
suggest_next_piecesPieces to learn next from Music Tutor's editorial learning path (levels 1–10, public domain): later pieces at the learner's level and one level up, each with its opening to play and what it introduces. Levels are the path's editorial judgment, not an exam grade.
| after | a piece the learner can play, e.g. "fur elise" |
|---|---|
| level | 1–10, when there is no piece to start from |
| composer, era | narrow the suggestions |
| count | 3–5, default 4 |
| exclude | work_ids already suggested |
Returns items[] with work, level, step (same level / next level) and a teaches line. A piece not on the path returns an error asking for the learner's level.
{"after": "fur elise"}
Music comes from public-domain works only: published before 1930, composer dead 70+ years, or traditional. Harmony examples come from open research corpora and show their source and licence. Engraving uses Verovio. See Privacy, Terms, Support.
Version and icons are reported in serverInfo on initialize; run tools/list for the authoritative schemas.