
Sheet Music OMR
io.github.raulkiviPublished by GitHub account raulkiviv0.2.2Updated Oct 24, 2026
Converts photos or scans of printed sheet music to MusicXML with optical music recognition
Overview
Local MCP server that turns photos or scans of printed sheet music into MusicXML using optical music recognition.
- What you can do
- Recognize a single sheet music image, given as a file path or base64, and return MusicXML inline or as a saved file path
- Process several page images and merge them into one MusicXML score
- Choose between two OMR engines: oemer by default, or audiveris for multi-staff SATB choir scores
- Inspect server metadata, supported input and output formats, and runtime dependency health
- When to use it
- Useful when you have scans or photos of printed scores and want an assistant to produce editable MusicXML, especially to feed a downstream sheet-music workflow or to digitize multi-page or choir scores.
- Requirements
- Runs locally as a Python process (Python 3.11+) launched with uvx or uv run; no account or API key. First use downloads model checkpoints (~100 MB for oemer, ~80 MB for audiveris); the audiveris engine also needs dpkg-deb to unpack its bundled binary. Optional OMR_AUDIVERIS_HOME sets where Audiveris is downloaded.
Installation
In SourceWeft
- Open Sheet Music OMR in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
omr-mcp
MCP server that converts sheet music images to MusicXML using optical music recognition (OMR).
What it does
Takes a photo or scan of printed sheet music and returns a MusicXML document. Handles single pages or multi-page scores. Feeds directly into the rest of the sheet-music-mcp pipeline.
Two selectable OMR backends, via an optional engine argument on the recognition tools:
oemer(default) — fast, no extra download beyond the ~100 MB model checkpoints. Best for single/two-staff scores; flattens multi-staff (SATB) choir scores into one part (see "Known limitations" below).audiveris— correctly separates multi-staff SATB scores into simultaneous parts. Requires 300+ DPI source images and a larger (~80 MB) first-use download; runs as a subprocess.
Tools
Installation
On first run, oemer downloads ~100 MB of model checkpoints. This happens once and is cached.
Quick install: bash install.sh sets up everything in one command and prints a ready-to-paste
client config — see SETUP.md. Ready-made configs for Claude Desktop, Cursor, Windsurf,
Continue, and Zed are in examples/. Having trouble? Check
TROUBLESHOOTING.md.
Running
No environment variables required.
Claude Desktop configuration
Usage examples
Large results come back as {"musicxml_path": ..., "score_summary": {...}, "metadata": ...}, with
the file under <SHEET_MUSIC_OUTPUT_ROOT>/scores/ (default: the server's working directory). Pass
that path to the other servers' tools as musicxml_path instead of copying the score.
Testing
Test samples
SATB a cappella samples are available in test_samples/pdmx_satb_samples/:
Source: PDMX dataset — 250K+ public domain scores.
Dependencies
- oemer — default deep learning OMR engine (UNet + SVM, ONNX Runtime)
onnxruntime>=1.30— releases after 1.19 reject the negative ConvTranspose pads baked into oemer'sunet_bigcheckpoint;onnx_compat.pyrewrites them into the equivalentoutput_paddingbefore each recognition (needsonnx). This allows Python 3.11–3.14 (seedocs/HANDOVER.mdgotchas)opencv-python-headless==4.10.0.84— pinned; 5.x changedcv2.HoughLinesP()'s return shape, which crashes oemer's staffline extraction (seepyproject.tomlcomments /docs/HANDOVER.mdgotchas)- Pillow — image loading and validation
- defusedxml — safe XML parsing
- mcp — MCP protocol
- Audiveris — optional alternate OMR engine (
engine="audiveris"). Not a Python dependency: a self-contained binary (bundles its own JRE) downloaded automatically on first use of that engine. Requiresdpkg-deb(present on virtually all Debian/Ubuntu systems) to extract it — no root/system install.
Known limitations
- oemer's default output loses SATB voice structure. oemer reads multi-staff choir systems
sequentially rather than simultaneously, so a 4–5 voice SATB score comes out as a single merged
<part>with the clef alternating back and forth, instead of one part per voice — real data loss, not a benign modeling difference (confirmed by inspecting generated MusicXML), and architectural in oemer itself (its rhythm-alignment code hard-asserts at most 2 simultaneous staff tracks — see docs/HANDOVER.md). Useengine="audiveris"for multi-staff choir scores — it correctly separates voices into simultaneous parts, verified against real fixtures. Requires 300+ DPI source images.
Performance notes
- Processing time: ~90–100s per page on CPU for
oemeronce its model checkpoints are cached; ~7–15s per page foraudiverisin testing (despite JVM subprocess startup overhead) - Output may vary slightly between runs (both engines) — do not assert on exact XML equality
- The generated MusicXML is functionally correct but may not pass strict schema validation
System requirements
- Python 3.11+
- No system libraries required (ONNX Runtime is bundled via pip)
Source: omr-mcp/README.md at commit 5fcea5d
Tools
0Version history
2- v0.2.2LatestOct 17, 2026
- v0.2.1Sep 26, 2026
Score
50% 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 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts