MusicXML to ABC

io.github.raulkiviPublished by GitHub account raulkiviv0.2.2Updated Oct 24, 2026

Converts between MusicXML and ABC notation, so LLMs can read and edit scores

VerifiedSTDIODesktop onlyDeveloper ToolsMedia & Design

Overview

AI-generated overview

Local MCP server that converts sheet music between MusicXML and ABC notation so an assistant can read, summarize and edit scores.

What you can do
  • Convert MusicXML text or file paths to ABC notation, optionally limited to one part and a bar range
  • Convert ABC notation back to MusicXML, inline or written to a file for large scores
  • Validate ABC strings and report parse errors or warnings
  • Summarize a score cheaply: parts, key, time, tempo, ranges and measures
  • Report server metadata and run a round-trip health check
When to use it
Useful when you want an assistant to edit choral or similar scores: convert MusicXML to compact ABC, let the model edit the text, then convert back to MusicXML. Also handy for inspecting a score's parts and structure before working on it.
Requirements
Runs locally over stdio as a PyPI package (musicxml-abc-mcp) launched with uvx; Python 3.11 or newer. No environment variables are required, though optional ones set the output root, extra input folders and inline size limit. Desktop client only.
Before you install
Conversion writes files: large scores are saved under the output root, and file paths are read only from allowed folders. Round-trips preserve notes within about 2 percent, but dynamics and complex articulations are not preserved, so edits can lose expression markings. Review converted output before relying on it.

Installation

In SourceWeft

  1. Open MusicXML to ABC in the dashboard and add it to a workspace.
  2. 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

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

ToolDescription
musicxml_to_abcConvert MusicXML (musicxml text or musicxml_path) to ABC notation; optionally filter to a single part and a range of printed bars (measures)
abc_to_musicxmlConvert ABC notation back to MusicXML; large scores are written to a file (return: auto / path / inline)
validate_abcParse an ABC string and return errors or warnings
list_capabilitiesReturn server metadata: backend version, ABC standard
health_checkRun a MusicXML → ABC → MusicXML round-trip smoke test and report status
describe_scoreSummarize a score cheaply: parts (IDs P1…), key, time, tempo, ranges, measures

Installation

bash
cd musicxml-abc-mcpuv 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

bash
uv run musicxml-abc-mcp

No environment variables required. Optional: SHEET_MUSIC_OUTPUT_ROOT (where large scores are written and paths are read; default the working directory), SHEET_MUSIC_INPUT_ROOTS (extra folders to read scores from) and SHEET_MUSIC_INLINE_MAX_BYTES (default 8192). See Score References.

Usage examples

Scores can be passed as text (musicxml) or as a file path (musicxml_path: .musicxml, .xml or .mxl inside the allowed folders). abc_to_musicxml returns small scores as text and writes large ones to <output root>/scores/, returning musicxml_path plus a short score_summary; pass "return": "inline" to always get the text.

json
// Convert full score to ABC{  "tool": "musicxml_to_abc",  "arguments": {"musicxml": "<score-partwise>...</score-partwise>"}}// → {"abc": "X:1\nT:...\n...", "parts_included": ["P1", "P2", "P3", "P4"], "warnings": []}
// Extract just the Soprano part{  "tool": "musicxml_to_abc",  "arguments": {"musicxml": "<score-partwise>...</score-partwise>", "part": "Soprano"}}// `part` takes a part ID ("P1"), name ("soprano", any case) or voice ("S"); an unknown part// returns the valid choices. `part_id` is a deprecated alias for one minor release.
// Just bars 17–24 of the Alto part{  "tool": "musicxml_to_abc",  "arguments": {"musicxml_path": "scores/anthem.musicxml", "part": "Alto", "measures": [17, 24]}}// `measures` are the printed bar numbers, inclusive (a pickup bar is 0). The ABC headers (K:, M:,// Q:) are the key, time and tempo in force at bar 17. A range outside the score returns// INVALID_PARAMETER with a hint such as "This score has measures 1–32."
// 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 (uppercase) = C4 (middle C)
  • c (lowercase) = C5 (one octave above middle C)
  • Apostrophe raises an octave: c' = C6
  • Comma lowers an octave: C, = C3

Round-trips preserve notes within ±2%. Dynamics and complex articulations are not preserved.

Testing

bash
# 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

Source: musicxml-abc-mcp/README.md at commit 5fcea5d

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

2
  1. v0.2.2LatestOct 12, 2026
  2. 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