Skip to main content
Glama

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.

Ownership verified
Status
Healthy
Uptime
95.7% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 14 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
describe_scoreDescribe a scoreA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
fileNocollection mode only: which MusicXML of `files`, e.g. '003.musicxml'
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 MIDIA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
keyNotarget key, e.g. 'G', 'Bb', 'F#m', 'E minor'
fileNocollection mode only: which MusicXML of `files`, e.g. '003.musicxml'
partNoonly this part: id (P2), name (Alto) or number (2)
save_toNolocal path to write the .mid to (stdio only)
semitonesNosemitones to move, e.g. -2 (a tone down), 5
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

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 (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.

Purpose4/5

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.

Usage Guidelines3/5

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 PNGA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
keyNotarget key, e.g. 'G', 'Bb', 'F#m', 'E minor'
fileNocollection mode only: which MusicXML of `files`, e.g. '003.musicxml'
pageNopng only: this page; without it, a ZIP of every page
partNoonly this part: id (P2), name (Alto) or number (2)
paperNopaper sizeA4
scaleNosize of the music in percent; smaller fits more on a page
formatNopdf (every page in one file) or pngpdf
labelsNowrite 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
semitonesNosemitones to move, e.g. -2 (a tone down), 5
labels_keyNowith labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 partA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
fileNocollection mode only: which MusicXML of `files`, e.g. '003.musicxml'
partYespart id (P2), name (Alto) or number (2); several: 'Soprano,Alto'
save_toNolocal path to write the MusicXML to (stdio only)
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 rangeA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
lowYesthe lowest pitch the voice or instrument has, e.g. 'C4', 'F#3', 'Bb2'
fileNocollection mode only: which MusicXML of `files`, e.g. '003.musicxml'
highYesthe highest pitch, e.g. 'G5'
partNoonly this part: id (P2), name (Alto) or number (2); several: 'Soprano,Alto'
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_musicxmlGet MusicXMLA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
labelsNowrite 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
offsetNocharacter offset to start from
save_toNolocal path to write the whole MusicXML to (stdio only)
max_charsNocharacters to return
labels_keyNowith labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 recognitionA
Read-onlyIdempotent
Inspect

Status and summary of an earlier recognition.

NameRequiredDescriptionDefault
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_usagePages left this monthA
Read-onlyIdempotent
Inspect

Pages this key has used and has left this month, and its plan. Shared keys (plan owner/shared) have no quota and report nulls.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 pagesA
Read-onlyIdempotent
Inspect

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/.

NameRequiredDescriptionDefault
urlNohttp(s) URL of a PDF or image of sheet music
pathNolocal file path; only when this server runs on the same machine (stdio)
attachmentNoa PDF or image the user attached to the chat (ChatGPT fills this in: download_url, file_name)
file_base64Nothe file itself, base64 (a data: URL is fine)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
keyNothe 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
schemeNoletters (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_toNolocal path to write the MusicXML to (stdio only)
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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/.

NameRequiredDescriptionDefault
urlNohttp(s) URL of a PDF or image of sheet music
modeNomerged (default): one MusicXML; collection: a songbook, one MusicXML per number (see files)
pathNolocal file path; only when this server runs on the same machine (stdio)
pagesNoPDF pages to recognize, e.g. '3' or '3-5'
labelsNowrite 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_toNolocal path to write the MusicXML to (stdio only); default: next to `path`
filenameNoname for the score, e.g. 'hosanna.pdf'
attachmentNoa PDF or image the user attached to the chat (ChatGPT fills this in: download_url, file_name)
labels_keyNowith labels movable-do, degrees or kalimba: the key they count from, e.g. 'E minor'; default: read off the music
file_base64Nothe file itself, base64 (a data: URL is fine)
include_musicxmlNoreturn the MusicXML text inline; default: when it is small and not saved to a file

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_scoreTransposeA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
keyNotarget key, e.g. 'G', 'Bb', 'F#m', 'E minor'
fileNocollection mode only: which MusicXML of `files`, e.g. '003.musicxml'
partNoonly this part: id (P2), name (Alto) or number (2)
save_toNolocal path to write the MusicXML to (stdio only)
semitonesNosemitones to move, e.g. -2 (a tone down), 5
recognition_idYesid returned by recognize_sheet_music, e.g. rec_…

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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. 1 tool update
    • Changedget_download_link2 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"musicxml (default) or midi"New value: +"musicxml (default), midi or mp3"
      • changedInput schema / properties / format / enum
        Previous value: -[
        -  "musicxml",
        -  "midi"
        -]New value: +[
        +  "musicxml",
        +  "midi",
        +  "mp3"
        +]
  2. 7 tool updates
    • Changedexport_score2 fields changed
      • changedInput schema / properties / labels / description
        Previous 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"
      • addedInput schema / properties / labels_key
        Added 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"
        +}
    • Addedfit_range
    • Changedget_download_link2 fields changed
      • changedInput schema / properties / labels / description
        Previous 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"
      • addedInput schema / properties / labels_key
        Added 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"
        +}
    • Changedget_musicxml2 fields changed
      • changedInput schema / properties / labels / description
        Previous 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"
      • addedInput schema / properties / labels_key
        Added 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"
        +}
    • Changedget_upload_link2 fields changed
      • changedInput schema / properties / labels / description
        Previous 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"
      • addedInput schema / properties / labels_key
        Added 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"
        +}
    • Changedlabel_notes2 fields changed
      • addedInput schema / properties / key
        Added 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"
        +}
      • changedInput schema / properties / scheme / description
        Previous 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)"
    • Changedrecognize_sheet_music2 fields changed
      • changedInput schema / properties / labels / description
        Previous 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"
      • addedInput schema / properties / labels_key
        Added 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"
        +}
  3. 6 tool updates
    • Addedexport_score
    • Changedget_download_link1 field changed
      • addedInput schema / properties / labels
        Added 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"
        +}
    • Changedget_musicxml1 field changed
      • addedInput schema / properties / labels
        Added 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"
        +}
    • Changedget_upload_link1 field changed
      • addedInput schema / properties / labels
        Added 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"
        +}
    • Addedlabel_notes
    • Changedrecognize_sheet_music1 field changed
      • addedInput schema / properties / labels
        Added 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"
        +}
  4. 2 tool updates
    • Changedinspect_score10 fields changed
      • removedInput schema / $defs / Attachment / properties / file_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / $defs / Attachment / properties / file_id / default
        Removed value: -null
      • addedInput schema / $defs / Attachment / properties / file_id / type
        Added value: +"string"
      • removedInput schema / $defs / Attachment / properties / file_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / $defs / Attachment / properties / file_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / $defs / Attachment / properties / file_name / type
        Added value: +"string"
      • removedInput schema / $defs / Attachment / properties / mime_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / $defs / Attachment / properties / mime_type / default
        Previous value: -nullNew value: +""
      • addedInput schema / $defs / Attachment / properties / mime_type / type
        Added value: +"string"
      • changedInput schema / $defs / Attachment / required
        Previous value: -[
        -  "download_url"
        -]New value: +[
        +  "download_url",
        +  "file_id"
        +]
    • Changedrecognize_sheet_music10 fields changed
      • removedInput schema / $defs / Attachment / properties / file_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / $defs / Attachment / properties / file_id / default
        Removed value: -null
      • addedInput schema / $defs / Attachment / properties / file_id / type
        Added value: +"string"
      • removedInput schema / $defs / Attachment / properties / file_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / $defs / Attachment / properties / file_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / $defs / Attachment / properties / file_name / type
        Added value: +"string"
      • removedInput schema / $defs / Attachment / properties / mime_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / $defs / Attachment / properties / mime_type / default
        Previous value: -nullNew value: +""
      • addedInput schema / $defs / Attachment / properties / mime_type / type
        Added value: +"string"
      • changedInput schema / $defs / Attachment / required
        Previous value: -[
        -  "download_url"
        -]New value: +[
        +  "download_url",
        +  "file_id"
        +]
  5. 2 tool updates
    • Changedinspect_score2 fields changed
      • addedInput schema / $defs
        Added 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"
        +  }
        +}
      • addedInput schema / properties / attachment
        Added 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)"
        +}
    • Changedrecognize_sheet_music2 fields changed
      • addedInput schema / $defs
        Added 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"
        +  }
        +}
      • addedInput schema / properties / attachment
        Added 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)"
        +}
  6. 11 tool updates
    • First observeddescribe_score
    • First observedexport_midi
    • First observedextract_part
    • First observedget_download_link
    • First observedget_musicxml
    • First observedget_recognition
    • First observedget_upload_link
    • First observedget_usage
    • First observedinspect_score
    • First observedrecognize_sheet_music
    • First observedtranspose_score

Publisher details

Operator
Andrei Bocharnikov (ScanSing) · Publisher source
Vendor relationship
First-party · 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

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables Claude AI to convert, edit, and analyze MuseScore files (.mscz, .musicxml, MIDI) through natural language commands, supporting format conversion, transposition, harmony analysis, and more.
    20
    1
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    An 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
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude to compose real music from chord-symbol descriptions into MIDI files and audio previews, with musicology cross-checks on every chord.
    1
    AGPL 3.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources