musicxml-abc-mcp
MCP server that converts between MusicXML and ABC notation.
What it does
Bridges MusicXML (the standard but verbose XML format) and ABC notation (a compact, human-readable text format). The primary use case is enabling LLM-assisted score editing: MusicXML → ABC → Claude edits → ABC → MusicXML.
ABC is ideal for LLM editing because it is concise enough to fit in a context window and expressive enough to represent most choral music.
Tools
| Tool | Description |
|---|---|
musicxml_to_abc |
Convert MusicXML to ABC notation; optionally filter to a single part |
abc_to_musicxml |
Convert ABC notation back to MusicXML |
validate_abc |
Parse an ABC string and return errors or warnings |
list_capabilities |
Return server metadata: backend version, ABC standard |
health_check |
Run a MusicXML → ABC → MusicXML round-trip smoke test and report status |
Installation
cd musicxml-abc-mcp
uv sync --extra dev
Note: use --extra dev (not --group dev) to install pytest.
For a guided setup (installs uv if needed, then syncs dependencies), run ./install.sh —
see SETUP.md for step-by-step instructions. Ready-made client configs (Claude
Desktop, Cursor, Windsurf, Continue, Zed) are in examples/. If something doesn't
work, check TROUBLESHOOTING.md.
Running
uv run musicxml-abc-mcp
No environment variables required.
Usage examples
All tools take and return strings directly (no file paths) — the MCP client is responsible for reading/writing files if needed.
// Convert full score to ABC
{
"tool": "musicxml_to_abc",
"arguments": {"musicxml": "<score-partwise>...</score-partwise>"}
}
// → {"abc": "X:1\nT:...\n...", "parts_included": ["Soprano", "Alto", "Tenor", "Bass"], "warnings": []}
// Extract just the Soprano part
{
"tool": "musicxml_to_abc",
"arguments": {"musicxml": "<score-partwise>...</score-partwise>", "part_id": "Soprano"}
}
// Convert edited ABC back to MusicXML
{
"tool": "abc_to_musicxml",
"arguments": {"abc": "X:1\nT:My Song\n..."}
}
// → {"musicxml": "<?xml version=\"1.0\"?>...", "warnings": []}
// Validate ABC before converting
{
"tool": "validate_abc",
"arguments": {"abc": "X:1\nT:My Song\n..."}
}
ABC notation basics
This server uses ABC standard v2.1:
c(lowercase) = C4 (middle C)C(uppercase) = C3 (one octave below middle C)- Apostrophe raises an octave:
c'= C5 - Comma lowers an octave:
C,= C2
Round-trips preserve notes within ±2%. Dynamics and complex articulations are not preserved.
Testing
# All tests including integration (round-trip SATB conversion)
VIRTUAL_ENV= .venv/bin/pytest tests/ -v
Dependencies
- music21 — score parsing; ABC output uses a custom serializer (music21 9.x has no ABC writer)
- mcp — MCP protocol
System requirements
- Python 3.11+
- No system libraries required
Metadata
Release files for musicxml-abc-mcp 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| musicxml_abc_mcp-0.2.0.tar.gz | 139.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| musicxml_abc_mcp-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 151.9 kB
Release files / musicxml_abc_mcp-0.2.0.tar.gz
| Download URL | musicxml_abc_mcp-0.2.0.tar.gz |
|---|---|
| Size | 139.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d8d86d8e3b76ccb8c130f4520697106cb46ac0aa2983876ceec4f08601059ef4
|
|
BLAKE2b-256 checksum How to use checksums |
9c71fb7b61a7b6a087c260fd5e560d8fc9726d7ad3e224d4420675a95af88c1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency logRelease files / musicxml_abc_mcp-0.2.0-py3-none-any.whl
| Download URL | musicxml_abc_mcp-0.2.0-py3-none-any.whl |
|---|---|
| Size | 12.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
79dec16f78db14adbe763669e36cee548a670ca548361840798029fe9bf6f10d
|
|
BLAKE2b-256 checksum How to use checksums |
dc22ecc2db35f0ac47e158497737bc6ad84f99a34d8c42fea08c934d4a9340ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency log