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

TableJSON 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. 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"
  2. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: the result only confirms the parse and returns no audio, the player renders inline with interactive controls, and the user can edit style/instrument and export WAV or MIDI. It does not describe size limits or parse-failure behavior, which is a minor gap.

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 purpose is front-loaded in the first sentence and the rest is compact. There is mild redundancy between 'The user can edit the score in the player' and 'The music player renders inline with interactive playback controls', which could be merged, but nothing is seriously wasted.

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?

With no output schema, the description correctly carries the return-value burden by stating the result confirms the parse and returns no audio. It also covers the accompanying guide tools. It could be slightly more explicit about what a successful parse result contains, but it is complete enough for correct invocation.

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 every parameter is already documented in the schema, including style enums, swing semantics, tempo override, transpose key rewriting, and drumIntro's style dependency. The description mostly restates this ('add a style for drums, bass and chords', 'chord symbols above the notes') and adds no new parameter-level detail beyond pointing at get-music-guide, so baseline 3 applies.

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 description opens with a specific verb+resource ('Write a score in ABC notation and play it as sheet music') and enumerates the supported shapes (melody, harmonized piece, multi-voice arrangement, well-known tune). It clearly separates this tool from siblings like convert-abc-to-strudel and play-live-pattern, which produce different outputs.

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 onboarding routing: 'Start with get-music-guide topic genres; abc-syntax and instruments for the rest', and it states the user can edit and download afterward. It does not, however, say when to prefer this over play-live-pattern or convert-abc-to-strudel, so the alternative-selection guidance is incomplete.

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.