Skip to main content
Glama

Play Sheet Music

play-sheet-music
Read-only

Write a score in ABC notation and play it as sheet music: a melody, a harmonized piece, a multi-voice arrangement or a well-known tune, on any of the 128 General MIDI instruments. Put chord symbols above the notes and add a style (rock, jazz, bossa, waltz, folk...) for drums, bass and chords. The user can edit the score in the player, change its style and instrument, and download WAV or MIDI. The result confirms the parse; it returns no audio. Start with get-music-guide topic 'genres'; 'abc-syntax' and 'instruments' for the rest.

The music player renders inline with interactive playback controls.

Input Schema

NameRequiredDescriptionDefault
styleNoAccompaniment style. Adds drums, bass, and chord patterns automatically. Your ABC needs chord symbols ("C", "Am") for accompaniment to work. Options: rock, jazz, bossa, waltz, march, reggae, folk, classical.
swingNoSwing as the share of the beat given to its first half. 50 = straight, 60 ≈ 3:2, 66 = triplet swing, 75 = maximum (dotted eighth + sixteenth). Anything at or below 50 is treated as no swing. Only takes effect in an x/4 or x/8 meter.
tempoNoTempo in BPM (40-240). Overrides Q: in ABC notation.
titleNoPiece title (overrides T: in ABC). Shown in the widget header and used as the filename stem for the WAV/MIDI downloads.
drumIntroNoBars of count-in before the melody starts (0-8). Needs a style preset — the count-in is played by that style's drum kit, so without a style you get silent bars instead.
transposeNoTranspose by semitones (-12 to 12). Positive=higher, negative=lower. Rewrites the notation and the key signature, so the printed score matches what plays.
instrumentNoDefault instrument for the main voice — any of the 128 General MIDI names (e.g. 'Flute', 'Cello', 'Banjo', 'Alto Sax'). Matching is fuzzy and picks the lowest GM program among the hits, so 'sax' gives Soprano Sax; the result text names what you actually got whenever it isn't what you asked for. Use get-music-guide with topic 'instruments' for the full list, or %%MIDI program N in the ABC to set a program per voice.
abcNotationNoABC notation string. Include chord symbols ("C", "Am7") above notes for auto-accompaniment with style presets.X:1 T:Twinkle, Twinkle Little Star M:4/4 L:1/4 K:C C C G G | A A G2 | F F E E | D D C2 | G G F F | E E D2 | G G F F | E E D2 | C C G G | A A G2 | F F E E | D D C2 |

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. Changed8 schema fields changed
    • addedInput schema / properties / abcNotation / maxLength
      Added value: +65536
    • addedInput schema / properties / drumIntro
      Added value: +{
      +  "description": "Bars of count-in before the melody starts (0-8). Needs a style preset — the count-in is played by that style's drum kit, so without a style you get silent bars instead.",
      +  "maximum": 8,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedInput schema / properties / instrument / description
      Previous value: -"Default instrument (e.g. 'Flute', 'Cello', 'Acoustic Grand Piano', 'Alto Sax'). Use get-music-guide with topic 'instruments' for the full list."New value: +"Default instrument for the main voice — any of the 128 General MIDI names (e.g. 'Flute', 'Cello', 'Banjo', 'Alto Sax'). Matching is fuzzy and picks the lowest GM program among the hits, so 'sax' gives Soprano Sax; the result text names what you actually got whenever it isn't what you asked for. Use get-music-guide with topic 'instruments' for the full list, or %%MIDI program N in the ABC to set a program per voice."
    • changedInput schema / properties / swing / description
      Previous value: -"Swing percentage (0-100). 0=straight, 33=light swing, 66=heavy swing. Great for jazz and blues."New value: +"Swing as the share of the beat given to its first half. 50 = straight, 60 ≈ 3:2, 66 = triplet swing, 75 = maximum (dotted eighth + sixteenth). Anything at or below 50 is treated as no swing. Only takes effect in an x/4 or x/8 meter."
    • changedInput schema / properties / swing / maximum
      Previous value: -100New value: +75
    • changedInput schema / properties / title / description
      Previous value: -"Piece title (overrides T: in ABC). Displayed in the widget header."New value: +"Piece title (overrides T: in ABC). Shown in the widget header and used as the filename stem for the WAV/MIDI downloads."
    • changedInput schema / properties / transpose / description
      Previous value: -"Transpose by semitones (-12 to 12). Positive=higher, negative=lower."New value: +"Transpose by semitones (-12 to 12). Positive=higher, negative=lower. Rewrites the notation and the key signature, so the printed score matches what plays."
    • changedInput schema / properties / transpose / type
      Previous value: -"number"New value: +"integer"
  3. First observed

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavior the annotations don't cover: the result merely confirms the parse and returns no audio, the player renders inline with interactive controls, the user can edit score/style/instrument, and WAV/MIDI downloads are offered. That is genuinely useful context for an agent deciding what to expect. It doesn't contradict readOnlyHint=true, since nothing is persisted server-side; gaps remain around whether the widget/session state is retained across calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core capability and constraints are front-loaded in the first two sentences, with guidance and return-value notes following. The trailing sentence 'The music player renders inline with interactive playback controls' partially repeats the earlier 'user can edit the score in the player' and could be folded in.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, all-optional rendering tool with no output schema, the description covers input expectations, prerequisite (chord symbols for accompaniment), expected return (parse confirmation, no audio) and follow-up guide topics. It is nearly complete; only the persistence/lifecycle of the inline widget is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents style, swing, tempo, title, drumIntro, transpose, instrument and abcNotation in detail. The description reinforces a few points (128 GM instruments, chord symbols for accompaniment, style examples) but adds little beyond what the schema states. Baseline 3 applies when the schema carries the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ('Write a score in ABC notation and play it as sheet music') plus the range of outputs (melody, harmonized piece, multi-voice, well-known tune). It is clearly distinguishable from siblings like play-live-pattern and convert-abc-to-strudel, which the description implicitly frames by centering on a written score rather than a live pattern or a Strudel conversion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit workflow routing: start with get-music-guide topic 'genres', then 'abc-syntax' and 'instruments' for the rest. It also states a prerequisite for accompaniment (chord symbols required for style presets). What's missing is explicit when-not guidance, e.g. when to prefer play-live-pattern or convert-abc-to-strudel instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.