Scoreproof

io.github.asampat3090Published by GitHub account asampat3090v0.2.0Updated Nov 5, 2026

Convert MusicXML, MIDI, ABC, MEI and Humdrum, print sheet music, and verify every note survived.

VerifiedStreamable HTTPWeb executableFiles & StorageMedia & Design

Overview

AI-generated overview

Converts, checks and transforms music scores (MusicXML, MIDI, ABC, MEI, Humdrum) and renders printable sheet music or audio previews.

What you can do
  • Convert scores between formats with a note-by-note verification report, or export to PDF, PNG, SVG or WAV
  • Render sheet music for print or view, or make an audio preview
  • Inspect a score for title, parts, instruments, ranges, key, meters, tempos and bar count, with an ABC excerpt
  • Validate a score for bars that do not fill their time signature, out-of-range notes and repaired exporter quirks
  • Compare two versions bar by bar across formats, and transpose by interval, key or concert/written pitch
  • Extract chosen parts or bars into new files, and list supported formats with what each cannot hold
When to use it
Useful when an assistant needs to turn MIDI or notation files into printable sheet music, move a score between formats while knowing what was lost, check a notation-app export before handing it to a copyist, or diff and transpose drafts.
Requirements
Either the hosted remote endpoint (no install) or a local run via uvx from the PyPI package, which needs uv installed. Inputs are a file link or score text with a filename; files attached in chat cannot be passed on, so they must be uploaded to the hosted page first. Hosted service has a 10 MB file limit and per-address rate limits.
Before you install
Uploading a score to the hosted service sends the file to a third party; it is deleted after 24 hours and download links expire after a day. Local runs write new files next to the input and only overwrite when an exact output path is given. Native Sibelius, Dorico, Finale and MuseScore files are not supported and must be exported as MusicXML first.

Installation

In SourceWeft

  1. Open Scoreproof in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.asampat3090%2Fscoreproof/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "scoreproof": {
      "type": "http",
      "url": "https://scoreproof-fkkuctjokq-uc.a.run.app/mcp"
    }
  }
}

README

scoreproof

Convert any score. Prove nothing got lost.

Scoreproof converts music files between MusicXML, MIDI, ABC, MEI and Humdrum, makes sheet music you can print and play (PDF, PNG), repairs the quirks of real notation-app exports (Sibelius, Dorico, Finale, MuseScore, Guitar Pro and others), and checks every conversion note by note, reporting exactly what was kept and what was lost.

MIDI you played into a DAW or from a keyboard comes out as readable notation: Scoreproof finds the beat (even without a click), snaps rhythms to 16ths or triplets, tidies note lengths, splits piano into two hands and spells notes in the right key.

Use it from any AI tool that speaks MCP (Claude, Cursor, VS Code, Gemini CLI, Codex and others), from the command line, or from Python.

Use it in claude.ai, the Claude apps or ChatGPT

No install. Add a custom connector with this address:

https://scoreproof-fkkuctjokq-uc.a.run.app/mcp
  • Claude (web, desktop, mobile): Settings → Connectors → Add custom connector.
  • ChatGPT: Settings → Connectors → Create (developer mode).

Then ask "Write a short waltz and give me the sheet music". To work on your own file, drop it on the Scoreproof page and paste the link it gives you into the chat; the same page converts files with one click.

The hosted service is free, has per-address rate limits and a 10 MB file limit, and deletes every file after 24 hours.

Use it from your AI tool

Scoreproof runs locally and works on files on your computer. It needs uv (brew install uv or pip install uv).

Claude Code

/plugin install scoreproof --marketplace asampat3090/scoreproof

or add the server directly: claude mcp add scoreproof -- uvx scoreproof mcp

Claude Desktop, Cursor, Gemini CLI: add this to claude_desktop_config.json, ~/.cursor/mcp.json or ~/.gemini/settings.json:

json
{  "mcpServers": {    "scoreproof": { "command": "uvx", "args": ["scoreproof", "mcp"] }  }}

VS Code (.vscode/mcp.json):

json
{  "servers": {    "scoreproof": { "type": "stdio", "command": "uvx", "args": ["scoreproof", "mcp"] }  }}

Codex (~/.codex/config.toml):

toml
[mcp_servers.scoreproof]command = "uvx"args = ["scoreproof", "mcp"]

Then ask things like:

  • "Turn ~/Music/take-3.mid into sheet music I can print."
  • "Convert ~/Music/song.mid to MusicXML and tell me what got lost."
  • "Transpose my lead sheet to Bb and show me the sheet music."
  • "Split this score into parts for each player."
  • "What changed between draft-1.musicxml and draft-2.musicxml?"
  • "Check this Sibelius export before I send it to the copyist."

Tools

ToolWhat it does
convertConvert a file and verify the result note by note, or make a PDF/PNG
batch_convertConvert many files or whole folders
inspectSummary (parts, ranges, key, meter, tempo) plus an ABC excerpt of chosen bars
validateFind bars that don't add up, notes out of range, and repaired exporter quirks
compareWhat changed between two versions, bar by bar, even across formats
transposeBy interval, into a key, or between concert and written pitch
extractPull out parts or bars, or make one file per player
renderSheet music to print or view (PDF, PNG, SVG; Letter or A4) or an audio preview (WAV)
list_formatsFormats and what each one cannot hold

Results are written next to the input under a new name. Scoreproof never overwrites an existing file unless you give that exact output path.

Use it from the command line

bash
uvx scoreproof convert song.musicxml song.miduvx scoreproof convert take-3.mid --to pdf          # played MIDI to sheet musicuvx scoreproof inspect song.musicxml --bars 1-8uvx scoreproof transpose song.musicxml --key "Bb major"uvx scoreproof extract score.mxl --each-partuvx scoreproof render song.musicxml --to png --page-size a4uvx scoreproof --help

Add --json to any command for machine-readable output.

Use it from Python

python
from scoreproof import convert
result = convert("song.musicxml", "song.mid")result.confidence        # "exact", "high", "medium" or "low"result.expected_losses   # what MIDI cannot hold: lyrics, chord symbols, ...result.fixes             # exporter quirks repaired on the way in

How accurate is it?

On 430 real exports from 11 notation apps (benchmarks/score_corpus/):

music21 alonescoreproof
Files that load96.0%100%
Read faithfully (parts, bars, notes, length)87.9%95.6%

MIDI played in a DAW (benchmarks/played_midi/, five pieces performed with human timing):

music21 alonescoreproof
Notes on the right beat, with a click64%99%
Notes on the right beat, no click6–21%81–82%

Every conversion re-reads its own output and compares it with the source. When a format cannot hold something (MIDI has no chord symbols or lyrics layout; ABC and MEI exports carry transposing instruments at concert pitch), the report says so instead of failing silently.

Not supported: native Sibelius, Dorico, Finale and MuseScore files. Export MusicXML from the app first.

Development

bash
pip install -e ".[dev]"pytest --cov=scoreproof        # coverage is kept at 100%black src tests benchmarksflake8 src tests benchmarks

The plan and milestones are in docs/plan.md. MIT licensed.

Source: README.md at commit 6d985d0

Tools

8

convert

Convert a music file

Convert a score between formats and verify the result note by note, or turn it into sheet music (pdf, png, svg) or audio (wav). Returns a download link, a confidence level (exact, high, medium, low), the share of notes kept, features the target format cannot hold, and exporter quirks that were repaired on the way in.

Parameterstorequiredfilecontentfilename

render

Render sheet music or audio

Engrave sheet music to print or view (PDF, PNG, SVG) or make an audio preview (WAV). Returns download links.

Parameterstofilecontentfilenamepage_size

inspect

Look at a score

Summarise a score and show some bars as ABC notation: title, parts with instruments and ranges, key, meters, tempos and bar count.

Parametersbarsfilepartscontentfilename

validate

Check a score for problems

Check a score: exporter quirks that needed repair, bars that do not fill their time signature, and notes outside an instrument's range.

Parametersfilecontentfilename

compare

Compare two versions

Show what changed between two versions of a piece, bar by bar, even across formats.

Parametersarequiredbrequired

transpose

Transpose a score

Transpose a score by an interval, into a key, or between concert and written pitch. Give exactly one of interval, key or pitch.

Parameterstokeyfilepitchcontentfilenameinterval

extract

Extract parts or bars

Save chosen parts and/or bars of a score as new files.

Parameterstobarsfilepartscontentfilenameeach_part

list_formats

List supported formats

Formats Scoreproof reads and writes, and what each one cannot hold.

Takes no parameters.

Version history

2
  1. v0.2.0LatestNov 5, 2026
  2. v0.1.0Nov 3, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts