编码音乐mcp
      
用于分析MEI(音乐编码倡议)文件的MCP服务器。提供提取元数据、分析音乐结构和理解编码乐谱的工具。
特性
- 46个内置MEI文件:巴赫发明、巴托克·米克罗科斯莫斯、莫利·坎佐涅茨——准备分析
- MEI元数据提取:提取标题、作曲家、编辑、分析员、出版日期和版权信息
- 关键分析:使用music21检测具有置信度分数的音乐键
- 区间分析:使用CRIM音程提取音符、旋律音程、和声音程和旋律n元语法
- 符号显示:使用Verovio将乐谱渲染为SVG,并使用交互式分页(需要 MCP应用程序扩展)
- 简单高效:直接从磁盘读取工具-无令牌浪费
文档
📚 阅读完整文档 用于:
- 详细工具参考
- 快速入门指南
- MEI文件收集详细信息
- 发展指南
- API 参考
安装
先决条件:此项目需要 紫外线 待安装。
选项1:快速入门(使用uvx)
无需克隆!将此添加到MCP客户端配置中:
{
"mcpServers": {
"encoding-music-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/unimelbmdap/encoding-music-mcp.git",
"encoding-music-mcp"
]
}
}
}方案2:地方发展
克隆存储库并安装依赖项:
git clone https://github.com/unimelbmdap/encoding-music-mcp.git
cd encoding-music-mcp
uv sync用法
使用克劳德桌面
- 打开您的Claude Desktop配置文件:
- 在Claude Desktop中,打开 设置>开发人员 - 在...之下 本地MCP服务器,单击 编辑配置
- 添加配置(选择一种方法):
方法A:使用uvx(不需要克隆)
{
"mcpServers": {
"encoding-music-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/unimelbmdap/encoding-music-mcp.git",
"encoding-music-mcp"
]
}
}
}方法B:使用本地克隆
{
"mcpServers": {
"encoding-music-mcp": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/encoding-music-mcp",
"run",
"encoding-music-mcp"
]
}
}
}- 重新启动克劳德桌面
- 试试看:
- “有哪些MEI文件可用?”→ 列出所有46个内置文件 - “跟我说说Bach_BWV_0772.mei吧”→ 提取元数据 - “Bach_BWV_0772.mei用的是什么钥匙?”→ 用置信度得分分析密钥 - “获取Bach_BWV_0772.mei的旋律音程”→ 提取旋律音程 - “在Bach_BWV_0772.mei中找到旋律4克”→ 提取旋律n元语法 - “给我看看Bach_BWV_0772.mei的符号”→ 显示渲染的乐谱
独立
直接运行服务器:
uv run encoding-music-mcp可用工具
list_available_mei_files
发现所有内置的MEI文件。
退货:词典:
bach_inventions:巴赫作品列表bartok_mikrokosmos:Bartók文件列表morley_canzonets:Morley文件列表all_files:所有文件名的完整列表
get_mei_metadata
从内置的MEI文件中提取详细的元数据。
参数:
filename(字符串,必填):MEI文件的名称(例如,“Bach_BWV_0772.MEI”)
退货:包含元数据的词典,包括:
- 标题和作品标题
- 作曲家
- MEI编辑
- XML编辑器
- 分析师
- 出版日期
- 版权/可用性信息
- 用于创建文件的应用程序
输出示例:
{
"title": "Invention No. 1 in C major",
"composer": "Bach, Johann Sebastian",
"mei_editors": ["Freedman, Richard"],
"xml_editors": ["Schölkopf, Tobias"],
"analysts": ["Student, This"],
"publication_date": "2024-11-19"
}analyze_key
使用music21的键检测算法分析乐曲的音乐键。
参数:
filename(字符串,必填):MEI文件的名称(例如,“Bach_BWV_0772.MEI”)
退货:词典:
Key Name:检测到的密钥(例如,“C大调”、“小调”)Confidence Factor:相关系数在0.0和1.0之间
输出示例:
{
"Key Name": "C major",
"Confidence Factor": 0.9451
}get_notes
使用CRIM间隔从MEI文件中提取所有笔记。
参数:
filename(字符串,必填):MEI文件的名称(例如,“Bach_BWV_0772.MEI”)
退货:词典:
filename:输入文件名notes:带有音高和八度音信息的音符数据帧的字符串表示
列代表单个木条或声音部分。行以浮点数表示度量和节拍信息。
get_melodic_intervals
使用CRIM音程从MEI文件中提取旋律音程。
参数:
filename(字符串,必填):MEI文件的名称(例如,“Bach_BWV_0772.MEI”)
退货:词典:
filename:输入文件名melodic_intervals:旋律音程数据帧的字符串表示
列代表单个木条或声音部分。行以浮点数表示度量和节拍信息。
get_harmonic_intervals
使用CRIM间隔从MEI文件中提取谐波间隔。
参数:
filename(字符串,必填):MEI文件的名称(例如,“Bach_BWV_0772.MEI”)
退货:词典:
filename:输入文件名harmonic_intervals:谐波间隔数据帧的字符串表示
列表示成对的语音部分。行以浮点数表示度量和节拍信息。
get_melodic_ngrams
使用CRIM间隔从MEI文件中提取旋律n元语法。
参数:
filename(字符串,必填):MEI文件的名称(例如,“Bach_BWV_0772.MEI”)n(整数,可选):n元语法的长度(默认值:4)
退货:词典:
filename:输入文件名n:使用的n元语法长度melodic_ngrams:旋律n报数据帧的字符串表示
N-grams是转换为带下划线分隔符的字符串的区间元组(例如“2\_-2_3\_-1”)。
show_notation
将MEI文件的乐谱显示为渲染的SVG。需要 MCP应用程序扩展 用于内联显示。
参数:
filename(字符串,必填):MEI文件的名称(例如,“Bach_BWV_0772.MEI”)start_measure(整数,可选):要显示的第一个度量值(默认为整件)end_measure(整数,可选):要显示的最后一个度量值(如果只给出start,则默认为start_measure)page(整数,可选):要显示的页码(默认值:1)
退货:由Verovio渲染的SVG表示法,在带有分页控件的交互式查看器中显示。
内置文件
服务器包括46个MEI文件:
- 15巴赫的两部分发明 (体重772-786)
- 19件巴托克·米克罗科斯莫斯作品
- 12 Morley 歌曲 从1595
使用 list_available_mei_files() 以发现所有可用文件。
发展
该项目使用uv进行依赖关系管理:
# Install dependencies
uv sync
# Run the server
uv run encoding-music-mcp
# Format code
uv run ruff format .
# Run tests
uv run pytest
# Run tests with verbose output
uv run pytest -v
# Serve documentation locally
uv run mkdocs serve
# Build documentation
uv run mkdocs build测试
该项目包括对所有工具的全面测试。看 测试/README.md 获取详细的测试文档。
文档
文档是用 MkDocs材料:
# Serve locally at http://localhost:8000
uv run mkdocs serve
# Build static site
uv run mkdocs build即将推出
计划使用的其他工具:
- 时间特征检测
- 音高直方图和频率分析
- 歌词摘录
- 模式匹配和相似性检测
许可证
麻省理工学院
