关于 MusicXML to ABC
MusicXML to ABC 是在 MusicXML 乐谱与紧凑的 ABC 记谱法之间进行转换的 MCP 服务。它面向使用大模型读取或编辑乐谱的用户,并支持声部选择、验证和乐谱摘要。
主要功能
- 01将 MusicXML 乐谱转换为 ABC 记谱法
- 02将 ABC 记谱法转换回 MusicXML
- 03选择声部和印刷小节范围
- 04验证 ABC 文本并报告问题
- 05汇总声部及音乐元数据
- 06接受乐谱文本或允许路径中的文件
适用场景
- 01为大模型辅助编辑准备乐谱
- 02将编辑后的 ABC 转回 MusicXML
- 03提取指定声部或小节范围
- 04检查 ABC 记谱法的解析错误
MCP 相关
向 MCP 客户端提供格式转换、ABC 验证、乐谱描述、能力信息和健康检查工具。乐谱可作为文本或允许目录中的文件路径传入。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
5收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| part_id | string | 否 | 仅导出此声部(例如 'Soprano')。省略时包含所有声部。 |
| musicxml | string | 是 | 作为字符串提供的 MusicXML 文档 |
详细介绍
musicxml-abc-mcp
可在 MusicXML 与 ABC 记谱法之间转换的 MCP 服务。
功能
连接 MusicXML(标准但冗长的 XML 格式)与 ABC 记谱法(简洁、易读的文本格式)。主要用途是支持借助大模型编辑乐谱:MusicXML → ABC → Claude 编辑 → ABC → MusicXML。
ABC 很适合由大模型编辑,因为它足够简洁,可以放入上下文窗口,同时表达能力足以表示大多数合唱音乐。
工具
| 工具 | 描述 |
|---|---|
musicxml_to_abc | 将 MusicXML(musicxml 文本或 musicxml_path)转换为 ABC 记谱法;也可以筛选单个声部和一段印刷小节(measures) |
abc_to_musicxml | 将 ABC 记谱法转换回 MusicXML;大型乐谱会写入文件(return:auto / path / inline) |
validate_abc | 解析 ABC 字符串并返回错误或警告 |
list_capabilities | 返回服务元数据:后端版本、ABC 标准 |
health_check | 执行 MusicXML → ABC → MusicXML 往返冒烟测试并报告状态 |
describe_score | 简要总结乐谱:声部(ID P1…)、调性、拍号、速度、音域、小节 |
安装
cd musicxml-abc-mcp
uv sync --extra dev
注意:安装 pytest 时使用 --extra dev(而非 --group dev)。
如需按引导完成设置(若需要则安装 uv,然后同步依赖),请运行 ./install.sh —
分步说明见 SETUP.md。现成的客户端配置(Claude
Desktop、Cursor、Windsurf、Continue、Zed)位于 examples/。如果遇到问题,
请查看 TROUBLESHOOTING.md。
运行
uv run musicxml-abc-mcp
无需环境变量。可选:SHEET_MUSIC_OUTPUT_ROOT(大型乐谱的写入位置和读取路径的位置;默认是工作目录)、SHEET_MUSIC_INPUT_ROOTS(用于读取乐谱的额外文件夹)以及 SHEET_MUSIC_INLINE_MAX_BYTES(默认 8192)。参见
Score References。
使用示例
乐谱可以作为文本(musicxml)传入,也可以通过文件路径传入(musicxml_path:允许的文件夹内的 .musicxml、.xml
或 .mxl 文件)。abc_to_musicxml 会将小型乐谱作为文本返回,并将大型乐谱写入 <output root>/scores/,返回 musicxml_path 和简短的 score_summary;
传入 "return": "inline" 可始终获取文本。
// 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 记谱法基础
此服务使用 ABC 标准 v2.1:
C(大写)= C4(中央 C)c(小写)= C5(比中央 C 高一个八度)- 撇号表示升高一个八度:
c'= C6 - 逗号表示降低一个八度:
C,= C3
往返转换时音符的误差保持在 ±2% 以内。力度和复杂的演奏法不会保留。
测试
# All tests including integration (round-trip SATB conversion)
VIRTUAL_ENV= .venv/bin/pytest tests/ -v
依赖项
系统要求
- Python 3.11+
- 无需系统库
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。