mcpField
M
MusicXML to ABC

MusicXML to ABC

本地服务
github.com/raulkivi媒体与设计12 天前更新

关于 MusicXML to ABC

MusicXML to ABC 是在 MusicXML 乐谱与紧凑的 ABC 记谱法之间进行转换的 MCP 服务。它面向使用大模型读取或编辑乐谱的用户,并支持声部选择、验证和乐谱摘要。

主要功能

  1. 01将 MusicXML 乐谱转换为 ABC 记谱法
  2. 02将 ABC 记谱法转换回 MusicXML
  3. 03选择声部和印刷小节范围
  4. 04验证 ABC 文本并报告问题
  5. 05汇总声部及音乐元数据
  6. 06接受乐谱文本或允许路径中的文件

适用场景

  1. 01为大模型辅助编辑准备乐谱
  2. 02将编辑后的 ABC 转回 MusicXML
  3. 03提取指定声部或小节范围
  4. 04检查 ABC 记谱法的解析错误

MCP 相关

向 MCP 客户端提供格式转换、ABC 验证、乐谱描述、能力信息和健康检查工具。乐谱可作为文本或允许目录中的文件路径传入。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"raulkivi-musicxml-abc": {
"command": "uvx",
"args": [
"musicxml-abc-mcp"
]
}
}
}
启动命令uvx musicxml-abc-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimusicxml-abc-mcp0.2.2

工具

5

收录的工具列表 · 更新于 2 周前

参数类型必填说明
part_idstring否仅导出此声部(例如 'Soprano')。省略时包含所有声部。
musicxmlstring是作为字符串提供的 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

依赖项

  • music21 — 乐谱解析;ABC 输出使用自定义序列化器(music21 9.x 没有 ABC 写入器)
  • mcp — MCP 协议

系统要求

  • Python 3.11+
  • 无需系统库

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。