ScanSing: sheet music to MusicXML
Server Details
ScanSing reads printed sheet music. Give Claude a PDF or a photo of a score and it gets back MusicXML, the format MuseScore, Sibelius, Finale and Dorico open. It is the recogniser inside the ScanSing app for choir singers, offered as a connector.
Once a score is recognised, Claude can answer questions about it without recognising it again:
what the key, time signature, tempo and length are, and each part's range, clefs and lyrics;
one voice on its own, for example just the alto line of a choir piece;
the score or a part moved to another key, with notes respelled for the new key signature;
a MIDI file, one track per part, to listen to or rehearse with;
a short-lived download link to open the result in a browser or notation app.
It handles PDFs up to 40 pages and PNG, JPEG, HEIC, TIFF and WebP images, can recognise selected pages of a long PDF, and can split a songbook into one MusicXML per piece. A file can be given as a web link or a small image; in Claude Code, a file on your computer is sent through a one-time upload link.
Recognition spends pages from your ScanSing plan, so it is the only tool that is not read-only. Everything else works on the stored result and is free. The first connection with a new email comes with 20 free pages; paid plans start at $9 a month for 300 pages. Scores and results are deleted about an hour after recognition and are never used for training.
- Status
- Healthy
- Uptime
- 95.7% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 14 tools
Most tools have clearly distinct roles across recognition, inspection, description, export, and transformation. There is some potential confusion between get_musicxml, extract_part, get_download_link, export_midi, and export_score because several return or link to score representations, but the descriptions mostly clarify the differences.
All tool names use snake_case and follow a predictable verb_noun pattern such as describe_score, export_midi, get_musicxml, and transpose_score. The naming is consistent throughout with no mixed casing or vague standalone verbs.
The 14 tools are well scoped for a sheet-music recognition and export server. Recognition, status, description, export, transposition, labeling, upload, and quota operations each justify their place.
The surface covers the core lifecycle: inspect, recognize, check status, describe, retrieve MusicXML, export, transpose, extract parts, label notes, and manage upload links and usage. A minor gap is the lack of a tool to list or rediscover earlier recognitions, which could leave users stranded if they lose an id.
Available Tools
14 toolsdescribe_scoreDescribe a scoreARead-onlyIdempotentInspect
What is in a recognised score: title, composer, key, time signature, tempo,
duration, and per part its name, range (lowest/highest note), clefs and lyrics.
key is the signature as printed; keyName and mode say major or minor as the
engine reads it off the music (e.g. 'E minor'; mode null when it cannot tell).
Cheaper than reading the MusicXML; nothing is recognised again.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | collection mode only: which MusicXML of `files`, e.g. '003.musicxml' | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real value beyond that: it discloses cost characteristics (cheaper than MusicXML) and side-effect absence (nothing is re-recognised), plus interpretation semantics for key vs keyName/mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler; the content list is front-loaded and the key/keyName caveat follows as a targeted clarification. Slightly awkward opening ('What is in a recognised score') is a minor structure cost but the text earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained; the description nonetheless clarifies the one ambiguous field pairing (key vs keyName/mode). Combined with the cost/side-effect hints, an agent has enough to call this correctly, with only the `file` collection-mode usage left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (file, recognition_id) are fully documented in the schema. The description adds nothing about parameters – notably it never explains the collection-mode `file` selector – so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates exactly what a recognised score returns (title, composer, key, time signature, tempo, duration, per-part name/range/clefs/lyrics), which makes the resource and its payload unmistakable. It never states the verb outright (it describes contents rather than saying 'returns a summary of'), so an agent infers 'describe' from the name, but the resource is clear enough to distinguish it from export/get_musicxml siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Cheaper than reading the MusicXML' implies the trade-off versus get_musicxml, and 'nothing is recognised again' hints the recognition is already done. However, no sibling is named explicitly and there is no stated when-not condition (e.g. when you need the actual notation, use get_musicxml/export_score).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_midiExport MIDIARead-onlyIdempotentInspect
A link to the score as a MIDI file (one track per part) to listen to or rehearse with; optionally one part and transposed. Repeats are played once.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | target key, e.g. 'G', 'Bb', 'F#m', 'E minor' | |
| file | No | collection mode only: which MusicXML of `files`, e.g. '003.musicxml' | |
| part | No | only this part: id (P2), name (Alto) or number (2) | |
| save_to | No | local path to write the .mid to (stdio only) | |
| semitones | No | semitones to move, e.g. -2 (a tone down), 5 | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond that: one track per part, optional single-part export, transposition, and the non-obvious rule that repeats are played only once.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence covering output format, optionality and the repeats rule, with the key facts front-loaded. Slightly noun-phrase phrasing ('A link to...') but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six well-documented parameters and an output schema, the description needn't explain return values, and it covers the salient behaviors (track layout, transposition, repeat handling). Only the relationship to sibling export tools is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (key, part, semitones, save_to, file, recognition_id) is already documented in the schema. The description only alludes to part and transposition, adding no syntax or format detail beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and output form: the score as a MIDI file, one track per part, with optional single-part and transposed variants. It is clear what the tool produces, though it never explicitly distinguishes itself from siblings like export_score or get_download_link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'to listen to or rehearse with' implies a use case (playback/practice rather than notation editing), but there is no explicit when-to-use or when-not-to-use guidance relative to siblings such as export_score or transpose_score, leaving the agent to infer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_scoreExport PDF or PNGARead-onlyIdempotentInspect
A short-lived link to the score engraved as sheet music to print or view: a PDF of every page, or PNG pages. Works on any recognition: the original, one from label_notes (its names are engraved under the notes), and optionally one part, transposed or labelled on the way. The score is laid out anew from the MusicXML, not drawn over the scan. Nothing is recognised again, no pages are charged.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | target key, e.g. 'G', 'Bb', 'F#m', 'E minor' | |
| file | No | collection mode only: which MusicXML of `files`, e.g. '003.musicxml' | |
| page | No | png only: this page; without it, a ZIP of every page | |
| part | No | only this part: id (P2), name (Alto) or number (2) | |
| paper | No | paper size | A4 |
| scale | No | size of the music in percent; smaller fits more on a page | |
| format | No | pdf (every page in one file) or png | |
| labels | No | write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none | |
| semitones | No | semitones to move, e.g. -2 (a tone down), 5 | |
| labels_key | No | with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description still adds material facts: the returned link is short-lived, nothing is re-recognised, no pages are charged, and the layout is regenerated from MusicXML rather than overlaid on the scan. The only omission is how long 'short-lived' actually is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important fact — a short-lived link, PDF or PNG — is front-loaded, and each following clause carries information (engraving source, no re-recognition, no page charges). It is slightly rambling with awkward mid-sentence line breaks, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Eleven parameters, but only one required; the schema is fully documented and an output schema exists, so the description needn't restate fields or return shape. It supplies the essential context — cheap re-export from existing MusicXML, works on original or label_notes recognitions. Only the link lifetime and collection-mode ('file') usage are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage the schema already explains every parameter, so baseline is 3. The prose adds real meaning only for a few: that labels of a label_notes recognition are engraved under the notes, and that part/transposition/labels can be applied 'on the way'. The other nine parameters (paper, scale, page, file, labels_key, semitones, format...) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states the concrete output (a short-lived link to a freshly engraved score) and enumerates the two formats: PDF of every page or PNG pages. It also clarifies the key differentiator from a scan-based export — 'laid out anew from the MusicXML, not drawn over the scan'. It never names the closest sibling (export_midi / get_download_link), so an agent must infer that separation itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Works on any recognition: the original, one from label_notes...' plus 'no pages are charged' hints this is the cheap, repeatable way to produce a viewable artefact. There is no explicit statement of when to prefer this over export_midi, get_download_link, transpose_score or label_notes, even though the 'transposed or labelled on the way' phrasing overlaps visibly with those siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_partExtract a partARead-onlyIdempotentInspect
The MusicXML of one part (or a few) of a recognised score, e.g. the alto line of a choir piece. Part names are in describe_score.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | collection mode only: which MusicXML of `files`, e.g. '003.musicxml' | |
| part | Yes | part id (P2), name (Alto) or number (2); several: 'Soprano,Alto' | |
| save_to | No | local path to write the MusicXML to (stdio only) | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only that output is MusicXML for a subset of parts; it says nothing about the save_to write path (schema notes stdio-only) or that extraction requires a completed recognition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the core resource (part MusicXML from a recognised score) is front-loaded. The opening noun fragment is slightly clipped but effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full parameter descriptions and complete annotations, most burden is lifted; the description only needs to convey scope and the part-name lookup path, which it does. The remaining gap is the relationship to get_musicxml/export_score, which an agent may need to disambiguate sibling choice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the accepted part id/name/number formats and multi-part comma syntax, so the schema carries the burden. The description contributes the extra fact that valid part names come from describe_score, which slightly helps the `part` parameter but is not format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: returns the MusicXML of one or a few parts of a recognised score, with a concrete example (alto line of a choir piece). It does not explicitly distinguish itself from get_musicxml or export_score, so the agent must infer that this is the partial-extraction counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides one concrete workflow hint — 'Part names are in describe_score' — which tells the agent how to obtain a valid `part` value. However, it never states when to choose this over get_musicxml/export_score or what happens if the score isn't recognised yet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fit_rangeDoes it fit a rangeARead-onlyIdempotentInspect
Whether a part (default: the whole score) lies within a range, a singer's voice,
an instrument's compass, a kalimba's tines, and how to make it: lowest/highest
are its notes now, fits every transposition that puts them inside low…high,
nearest first, with the key it lands in (empty: no shift fits). Pass a shift's
semitones to transpose_score. Nothing is recognised again, no pages are charged.
| Name | Required | Description | Default |
|---|---|---|---|
| low | Yes | the lowest pitch the voice or instrument has, e.g. 'C4', 'F#3', 'Bb2' | |
| file | No | collection mode only: which MusicXML of `files`, e.g. '003.musicxml' | |
| high | Yes | the highest pitch, e.g. 'G5' | |
| part | No | only this part: id (P2), name (Alto) or number (2); several: 'Soprano,Alto' | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds cost-relevant reassurance ('Nothing is recognised again, no pages are charged') plus result semantics (nearest first, key, empty means no shift fits). That is genuine context beyond the annotations, though it omits any note on limits or performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core operation is front-loaded, but the opening is a long run-on sentence and the parentheticals ('a singer's voice, an instrument's compass, a kalimba's tines') are decorative rather than informative, diluting clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema and full annotations, the description only needs to supply intent, cost behavior and follow-up routing, all of which are present. The only gap is the absence of explicit when-not guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so low/high/part/file are already documented. The description adds only the part-scope default ('the whole score') and the semitones handoff, which is marginal extra meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific operation: determining whether a part's notes lie within a low…high range and enumerating the transpositions that fit. It also ties the result to transpose_score, which separates it from that sibling, though the phrasing is roundabout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the default scope ('default: the whole score') and gives a clear next step ('Pass a shift's semitones to transpose_score'), but never says when to use this versus transpose_score or describe_score, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_download_linkDownload linkARead-onlyIdempotentInspect
A short-lived link to the MusicXML, MIDI or MP3 that opens without a key: give it
to the user to open in a browser, MuseScore, Sibelius or a DAW. It lives as long
as the recognition (about an hour). labels names each note in the MusicXML.
An MP3 is the same MIDI rendered; it has no tempo of its own.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | target key, e.g. 'G', 'Bb', 'F#m', 'E minor' | |
| file | No | collection mode only: which MusicXML of `files`, e.g. '003.musicxml' | |
| part | No | only this part: id (P2), name (Alto) or number (2) | |
| format | No | musicxml (default), midi or mp3 | musicxml |
| labels | No | write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none | |
| semitones | No | semitones to move, e.g. -2 (a tone down), 5 | |
| labels_key | No | with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), but the description adds genuinely useful traits beyond them: the link expires with the recognition (~1 hour) and requires no auth key. It also explains that MP3 is the MIDI rendered and inherits its tempo, which affects how the transposition params behave per format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core fact (keyless, short-lived link) in the first sentence, and each subsequent sentence covers a distinct concern. Slightly fragmented by the trailing MP3 remark, but there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is unnecessary, and the description covers lifetime, auth, intended consumers and the format caveat. Minor gaps remain around collection-mode `file` behavior and error cases, but nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all eight parameters are already documented, and the description largely restates the schema's `labels` explanation rather than adding semantics. The one net-new point, that MP3 has no tempo of its own, is marginal against a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: returns a short-lived, keyless link to the MusicXML, MIDI or MP3 of a recognition. It implicitly separates itself from file-returning siblings like export_score and export_midi by framing the result as a shareable link, but never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'give it to the user to open in a browser, MuseScore, Sibelius or a DAW' clause gives real usage context. However, nothing says when to prefer this over get_musicxml, export_score or export_midi, and no prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_musicxmlGet MusicXMLARead-onlyIdempotentInspect
The MusicXML of an earlier recognition, a slice at a time (or saved to a local file).
With labels, each note's name is written under it (see label_notes); no pages are charged.
| Name | Required | Description | Default |
|---|---|---|---|
| labels | No | write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none | |
| offset | No | character offset to start from | |
| save_to | No | local path to write the whole MusicXML to (stdio only) | |
| max_chars | No | characters to return | |
| labels_key | No | with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive safety. The description adds meaningful behavior beyond them: paged delivery ('a slice at a time'), an alternative local-file mode, and the non-obvious billing rule that labeling notes incurs no page charges — something no annotation or schema conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the resource front-loaded and the modal alternative and billing caveat in the same breath. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is unnecessary. The description covers slicing, the file-save variant, and cost behavior; it could note how to continue paging across slices, but the offset parameter in the schema carries that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; labels_key, save_to, max_chars, and offset are all documented there. The description only vaguely reinforces slicing and labels, adding little beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieves MusicXML for an earlier recognition, delivered as a slice or written to a local file. It does not name a sibling it is explicitly distinct from (get_recognition, export_score), but the resource is concrete enough to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'of an earlier recognition' implies a recognition must exist first, and the labels clause points to label_notes for that feature's semantics. Beyond that it gives no guidance on when to prefer this over get_recognition, inspect_score, or export_score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recognitionGet a recognitionARead-onlyIdempotentInspect
Status and summary of an earlier recognition.
| Name | Required | Description | Default |
|---|---|---|---|
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds that it retrieves status and summary for an existing recognition, but does not describe async behavior, statuses, or result characteristics beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no wasted words. It front-loads the operation and resource clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, a fully described single parameter, and an output schema, the description is largely complete. A bit more explicit guidance about when to use it after recognize_sheet_music would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the recognition_id parameter is documented as the ID returned by recognize_sheet_music, including an example prefix. The description adds little beyond the schema, which is appropriate at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and operation: retrieve the status and summary of an earlier recognition. It is clear enough to distinguish from the sibling recognize_sheet_music, though it does not explicitly name that alternative in the description itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'earlier recognition,' and the schema parameter description ties the ID to recognize_sheet_music. However, the description does not explicitly say when to use this tool, when not to, or what alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upload_linkUpload a local fileAInspect
A one-off URL to upload a local file to and have it recognised, for when the file
is on the user's machine and this server is remote. Run the returned command in a
shell on that machine (with the file's path in place of FILE): it uploads the file,
waits for the recognition (seconds to minutes) and prints its summary with id.
Then use get_musicxml, describe_score etc. with that id. The URL works once, within
15 minutes; for another file ask for another link. Not for a file attached to the
chat: pass that to recognize_sheet_music as attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | merged (default) or collection (a songbook, one MusicXML per number) | |
| pages | No | PDF pages to recognize, e.g. '3' or '3-5' | |
| labels | No | write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none | |
| filename | No | the file's name, e.g. '06.pdf' | |
| labels_key | No | with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as non-read-only, non-idempotent, closed-world, and non-destructive. The description adds important operational details beyond that: the URL works once, expires in 15 minutes, the upload waits for recognition, and prints a summary containing `id`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but appropriately sized for a multi-step remote upload workflow. It is front-loaded with the core purpose and then covers execution, timing, follow-up, and exclusions without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema and 100% schema coverage, the description need not explain return values. For a remote upload workflow with expiration and follow-up requirements, the definition supplies everything an agent needs to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters. The description only references a FILE placeholder in the command and does not add meaning for `mode`, `pages`, `labels`, or `labels_key`, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (a one-off upload URL) and its purpose (uploading a local file so it is recognized on a remote server). It also distinguishes this from the sibling path for chat attachments: 'Not for a file attached to the chat: pass that to recognize_sheet_music as `attachment`.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: the file is on the user's machine and the server is remote. It also explains the exact workflow (run the returned `command` with the file path in place of FILE), what happens next, and which follow-up tools to use with the resulting `id`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usagePages left this monthARead-onlyIdempotentInspect
Pages this key has used and has left this month, and its plan. Shared keys (plan owner/shared) have no quota and report nulls.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely non-obvious behavior beyond that: shared keys (plan owner/shared) have no quota and return nulls, which prevents an agent from misreading null as an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what the tool reports and followed by the one edge case that matters. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-field documentation is not the description's burden, and the null-value caveat is the key operational nuance. It stops short of noting anything about when the counter resets or what 'this month' means calendrically, a minor remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description correctly avoids restating an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states precisely what is returned: pages used this month, pages remaining, and the plan for the calling key. That is a specific resource with a clear scope, and no sibling tool (all score/MIDI/upload tools) overlaps with it, so an agent can select it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent infers it should call this when it needs quota or plan information for the current key. There is no explicit 'use this when' statement, though no alternative tool exists that would require routing guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_scoreCount pagesARead-onlyIdempotentInspect
The kind and page count of a file, without recognising it or charging pages.
Use it to pick pages for a long PDF or to check the quota (get_usage) first.
Calls the ScanSing API, see https://scansing.app/mcp/.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | http(s) URL of a PDF or image of sheet music | |
| path | No | local file path; only when this server runs on the same machine (stdio) | |
| attachment | No | a PDF or image the user attached to the chat (ChatGPT fills this in: download_url, file_name) | |
| file_base64 | No | the file itself, base64 (a data: URL is fine) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered; the description goes further by disclosing the economically important traits that annotations cannot express — no recognition is performed and no pages are charged. That is exactly the value-add expected. It does not mention rate limits or what an unsupported file type returns, preventing a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences: capability first, usage second, provenance last. The API/docs sentence is mild boilerplate but does not obscure anything.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the two things an agent otherwise could not infer — that it is free of page charges and that it should be used to size work before recognition. Adequate for a read-only inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of url, path, attachment and file_base64 already documented in the schema, so the baseline is 3. The description gives no additional guidance on choosing among the four input methods, which would have been the natural value-add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specifically that it returns a file's kind and page count, and the clause 'without recognising it or charging pages' distinguishes it from recognize_sheet_music and the other export/recognition siblings. The phrasing is noun-first rather than verb-led, which slightly softens the action, but the effect is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete uses — choosing a `pages` value for a long PDF and checking quota first — and points to get_usage as the quota sibling. It lacks an explicit 'do not use this to actually transcribe; use recognize_sheet_music instead' exclusion, so it falls short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
label_notesLabel notesAInspect
A new recognition whose MusicXML has each printed note's name written under it
as a lyric line of its own, as method books print it for beginners: a chord is
named top to bottom, sung words stay where they are. letters and solfege-fixed name
the pitch; movable-do, degrees and kalimba count from the key's tonic. The returned id is the
labelled result (use it with export_score for a printable PDF, extract_part,
transpose_score…); the original labelledFrom stays as it was. Nothing is
recognised again, no pages are charged.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | the key movable-do, degrees and kalimba count from, e.g. 'E minor'; default: read off the music. degrees needs major or minor: if the engine cannot tell, it says which key to state | |
| scheme | No | letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers) | letters |
| save_to | No | local path to write the MusicXML to (stdio only) | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, non-idempotent, non-destructive), the description adds real behavioral context: a NEW recognition is produced, the source `labelledFrom` is left unchanged, nothing is re-recognised, and no pages are charged. The billing note is unusually valuable. It stops short of describing failure modes or what happens for an unlabelable note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the core behavior, but the 'as method books print it for beginners' simile and the elongated sentence structure add words that don't help an agent decide or invoke. The parenthetical tool list is useful; the rest is denser than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description correctly focuses on what the return means — the new `id` is the labelled result and `labelledFrom` is the original — and covers the key/scheme interplay and the save_to write path. Complete enough to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the coupling between `scheme` and `key` — movable-do, degrees and kalimba count from the key's tonic while letters and solfege-fixed name absolute pitch. That relationship is not stated in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and output: a new recognition whose MusicXML carries each printed note's name as a lyric line, with chord naming order and lyric preservation spelled out. It differentiates itself from siblings by naming the downstream tools it feeds (export_score, extract_part, transpose_score), though the opening sentence is indirect prose rather than a plain 'creates a labelled copy of a score' statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the follow-up tooling ('use it with export_score for a printable PDF...') and the clarification that the original `labelledFrom` is untouched, but there is no explicit when-to-use or when-not guidance and no alternative labelling tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recognize_sheet_musicRecognize sheet musicAInspect
Recognize a PDF or image of sheet music and return its MusicXML with a summary (pages, parts, measures, warnings). Give exactly one of url, attachment, file_base64 or path. A file on the user's own machine (a remote server cannot read it, and a PDF is too big for base64): use get_upload_link instead. Calls the ScanSing API, see https://scansing.app/mcp/.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | http(s) URL of a PDF or image of sheet music | |
| mode | No | merged (default): one MusicXML; collection: a songbook, one MusicXML per number (see files) | |
| path | No | local file path; only when this server runs on the same machine (stdio) | |
| pages | No | PDF pages to recognize, e.g. '3' or '3-5' | |
| labels | No | write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none | |
| save_to | No | local path to write the MusicXML to (stdio only); default: next to `path` | |
| filename | No | name for the score, e.g. 'hosanna.pdf' | |
| attachment | No | a PDF or image the user attached to the chat (ChatGPT fills this in: download_url, file_name) | |
| labels_key | No | with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music | |
| file_base64 | No | the file itself, base64 (a data: URL is fine) | |
| include_musicxml | No | return the MusicXML text inline; default: when it is small and not saved to a file |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false), and the description adds genuinely useful context beyond them: the call goes to an external ScanSing API, local paths only work in stdio mode, and a PDF is too large for base64. It does not mention latency, cost/quota (get_usage exists), or whether the result is immediate or retrieved later.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its output, then the input constraint, then the alternative, then the API note. Each sentence adds a distinct decision-relevant fact; the parentheticals carry real content rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and it covers the tricky parts of an 11-parameter, zero-required tool (source selection, local-file limits). The one missing piece is the relationship to get_recognition/get_musicxml, which the agent would need to know to use the result after recognition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns an extra point by stating the mutual-exclusivity rule for url/attachment/file_base64/path, which the schema does not enforce. Other parameters (mode, labels, save_to, filename) are left entirely to the schema, so it does not fully compensate for selection subtleties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Recognize a PDF or image of sheet music') and states the concrete return ('MusicXML with a summary (pages, parts, measures, warnings)'). It also routes away from get_upload_link for local files, so an agent can distinguish it from at least one sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit input constraint ('Give exactly one of url, attachment, file_base64 or path') and an explicit alternative with its trigger condition ('A file on the user's own machine ... use get_upload_link instead'). It never addresses the async sibling flow (get_recognition, get_musicxml, export_score), which is the main remaining selection ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transpose_scoreTransposeARead-onlyIdempotentInspect
The MusicXML moved to another key: by semitones (-2 = a tone down) or to a
key (nearest direction; give both to choose the octave). Notes are respelled
for the new key signature; chord symbols move too.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | target key, e.g. 'G', 'Bb', 'F#m', 'E minor' | |
| file | No | collection mode only: which MusicXML of `files`, e.g. '003.musicxml' | |
| part | No | only this part: id (P2), name (Alto) or number (2) | |
| save_to | No | local path to write the MusicXML to (stdio only) | |
| semitones | No | semitones to move, e.g. -2 (a tone down), 5 | |
| recognition_id | Yes | id returned by recognize_sheet_music, e.g. rec_… |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description still adds real behavioral value beyond them: notes are respelled to fit the new key signature and chord symbols are transposed along with the notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly three compact clauses with the core action front-loaded and no filler. The nested parentheticals make it slightly dense to parse, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full-coverage schema and an output schema present, the description need not explain return values, and it covers the two driving parameters well. It is silent on the collection-mode/file flow and on where the transposed result lands, which are minor omissions for a transform tool with structured support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks – that -2 means a tone down, that key uses the nearest direction, and that supplying both key and semitones is what selects the octave. It does not clarify the similarly-named file/save_to/part parameters, which the schema handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation (transposing the MusicXML/score to another key) plus concrete effects – respelling notes and moving chord symbols. It is unambiguous what the tool does, but it never contrasts itself with siblings such as fit_range or extract_part that also manipulate the score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how to choose between the two transposition modes ('by semitones' or 'to a key', and giving both to pick the octave), which is useful selection guidance at the parameter level. It offers no guidance on when to reach for this tool versus other score-manipulation siblings, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
get_download_link2 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"musicxml (default) or midi"New value: +"musicxml (default), midi or mp3" - changed
Input schema / properties / format / enumPrevious value: -[ - "musicxml", - "midi" -]New value: +[ + "musicxml", + "midi", + "mp3" +]
7 tool updates
- Changed
export_score2 fields changed- changed
Input schema / properties / labels / descriptionPrevious value: -"write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none"New value: +"write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none" - added
Input schema / properties / labels_keyAdded value: +{ + "anyOf": [ + { + "maxLength": 20, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music", + "title": "Labels Key" +}
- Added
fit_range - Changed
get_download_link2 fields changed- changed
Input schema / properties / labels / descriptionPrevious value: -"write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none"New value: +"write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none" - added
Input schema / properties / labels_keyAdded value: +{ + "anyOf": [ + { + "maxLength": 20, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music", + "title": "Labels Key" +}
- Changed
get_musicxml2 fields changed- changed
Input schema / properties / labels / descriptionPrevious value: -"write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none"New value: +"write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none" - added
Input schema / properties / labels_keyAdded value: +{ + "anyOf": [ + { + "maxLength": 20, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music", + "title": "Labels Key" +}
- Changed
get_upload_link2 fields changed- changed
Input schema / properties / labels / descriptionPrevious value: -"write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none"New value: +"write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none" - added
Input schema / properties / labels_keyAdded value: +{ + "anyOf": [ + { + "maxLength": 20, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music", + "title": "Labels Key" +}
- Changed
label_notes2 fields changed- added
Input schema / properties / keyAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the key movable-do, degrees and kalimba count from, e.g. 'E minor'; default: read off the music. degrees needs major or minor: if the engine cannot tell, it says which key to state", + "title": "Key" +} - changed
Input schema / properties / scheme / descriptionPrevious value: -"letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C)"New value: +"letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers)"
- Changed
recognize_sheet_music2 fields changed- changed
Input schema / properties / labels / descriptionPrevious value: -"write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none"New value: +"write each note's name under it as a lyric line: letters (C♯, B♭), solfege-fixed (Do…Si, Do is always C), movable-do (Do is the tonic), degrees (1…7 of the scale, ♭3) or kalimba (the tines' numbers); default none" - added
Input schema / properties / labels_keyAdded value: +{ + "anyOf": [ + { + "maxLength": 20, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "with labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music", + "title": "Labels Key" +}
6 tool updates
- Added
export_score - Changed
get_download_link1 field changed- added
Input schema / properties / labelsAdded value: +{ + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none", + "title": "Labels" +}
- Changed
get_musicxml1 field changed- added
Input schema / properties / labelsAdded value: +{ + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none", + "title": "Labels" +}
- Changed
get_upload_link1 field changed- added
Input schema / properties / labelsAdded value: +{ + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none", + "title": "Labels" +}
- Added
label_notes - Changed
recognize_sheet_music1 field changed- added
Input schema / properties / labelsAdded value: +{ + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "write each note's name under it as a lyric line: letters (C♯, B♭) or solfege-fixed (Do…Si, Do is always C); default none", + "title": "Labels" +}
2 tool updates
- Changed
inspect_score10 fields changed- removed
Input schema / $defs / Attachment / properties / file_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / $defs / Attachment / properties / file_id / defaultRemoved value: -null - added
Input schema / $defs / Attachment / properties / file_id / typeAdded value: +"string" - removed
Input schema / $defs / Attachment / properties / file_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / $defs / Attachment / properties / file_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / $defs / Attachment / properties / file_name / typeAdded value: +"string" - removed
Input schema / $defs / Attachment / properties / mime_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / $defs / Attachment / properties / mime_type / defaultPrevious value: -nullNew value: +"" - added
Input schema / $defs / Attachment / properties / mime_type / typeAdded value: +"string" - changed
Input schema / $defs / Attachment / requiredPrevious value: -[ - "download_url" -]New value: +[ + "download_url", + "file_id" +]
- Changed
recognize_sheet_music10 fields changed- removed
Input schema / $defs / Attachment / properties / file_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / $defs / Attachment / properties / file_id / defaultRemoved value: -null - added
Input schema / $defs / Attachment / properties / file_id / typeAdded value: +"string" - removed
Input schema / $defs / Attachment / properties / file_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / $defs / Attachment / properties / file_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / $defs / Attachment / properties / file_name / typeAdded value: +"string" - removed
Input schema / $defs / Attachment / properties / mime_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / $defs / Attachment / properties / mime_type / defaultPrevious value: -nullNew value: +"" - added
Input schema / $defs / Attachment / properties / mime_type / typeAdded value: +"string" - changed
Input schema / $defs / Attachment / requiredPrevious value: -[ - "download_url" -]New value: +[ + "download_url", + "file_id" +]
2 tool updates
- Changed
inspect_score2 fields changed- added
Input schema / $defsAdded value: +{ + "Attachment": { + "description": "A file the user attached in ChatGPT, as ChatGPT hands it to a tool.", + "properties": { + "download_url": { + "title": "Download Url", + "type": "string" + }, + "file_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File Id" + }, + "file_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File Name" + }, + "mime_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mime Type" + } + }, + "required": [ + "download_url" + ], + "title": "Attachment", + "type": "object" + } +} - added
Input schema / properties / attachmentAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/Attachment" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a PDF or image the user attached to the chat (ChatGPT fills this in: download_url, file_name)" +}
- Changed
recognize_sheet_music2 fields changed- added
Input schema / $defsAdded value: +{ + "Attachment": { + "description": "A file the user attached in ChatGPT, as ChatGPT hands it to a tool.", + "properties": { + "download_url": { + "title": "Download Url", + "type": "string" + }, + "file_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File Id" + }, + "file_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File Name" + }, + "mime_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mime Type" + } + }, + "required": [ + "download_url" + ], + "title": "Attachment", + "type": "object" + } +} - added
Input schema / properties / attachmentAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/Attachment" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a PDF or image the user attached to the chat (ChatGPT fills this in: download_url, file_name)" +}
11 tool updates
- First observed
describe_score - First observed
export_midi - First observed
extract_part - First observed
get_download_link - First observed
get_musicxml - First observed
get_recognition - First observed
get_upload_link - First observed
get_usage - First observed
inspect_score - First observed
recognize_sheet_music - First observed
transpose_score
Publisher details
- Operator
- Andrei Bocharnikov (ScanSing) · Publisher source
- Operator website
- https://scansing.app · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://scansing.app/mcp/ · Publisher source
- Trust center
- Not available
- Restrictions
- Requires a ScanSing account (sign in with OAuth or an API key). New accounts get 20 free pages; more pages need a paid plan from $9/month. · Publisher source
Related MCP Connectors
Turn recordings, videos and sheet music into playable, editable scores. Transcribe audio or video (files or links) to sheet music, read sheet-music photos and PDFs, convert MIDI, MusicXML and ABC, edit notes in conversation with previews and undo, and export PDF, MIDI, MusicXML, guitar TAB, jianpu and audio. Hosted remote server with OAuth sign-in; one instrument, voice or solo piano is free.
- choriloOAuthcom.chorilo
Choir management for AI assistants: events, RSVP, announcements and sheet music of your choir.
Find AI-transcribed sheet music, MIDI and stems for songs, and transcribe your own via upload links.
AI stem splitter and vocal remover. Split songs from public audio links into vocals and instrumental, a 4-stem Basic Split (vocals, drums, bass, other) or 6 stems with guitar and piano, one song or a batch of up to 10. Each split returns MP3 stem links and a link to practise the song in StemConsole's practice room, with WAV links and a ZIP of all stems on Pro. Account tools show the plan and splits left, list, rename and delete songs, and list and create setlists. Connect with OAuth at https://stemconsole.ai/mcp/account, or use an API key at https://stemconsole.ai/mcp. Free accounts get 5 splits a month.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables Claude AI to convert, edit, and analyze MuseScore files (.mscz, .musicxml, MIDI) through natural language commands, supporting format conversion, transposition, harmony analysis, and more.201-
- FlicenseNot gradedqualityBmaintenanceAn MCP server that transcribes audio files into MIDI and MusicXML scores, converts MIDI to notation, and extracts playable note data for DAWs. It enables Claude to turn raw recordings into editable, shareable music scores via three simple tools.1-
- AlicenseNot gradedqualityDmaintenanceEnables Claude to compose real music from chord-symbol descriptions into MIDI files and audio previews, with musicology cross-checks on every chord.1AGPL 3.0
- AlicenseAqualityCmaintenanceEnables scanning documents via network (eSCL) or USB (WIA/SANE) scanners, returning inline images, OCR text, or saved PDFs for Claude to read.21MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.