SuperAPI AI 工具集

mcp-imslp

mcp-imslp 是一个连接聊天客户端与 IMSLP(佩特鲁奇音乐图书馆)的 MCP 服务器。IMSLP 是由志愿者运营的免费古典音乐图书馆,收录版权已过期的乐谱、分谱、改编曲和录音,以及各作曲家的页面资料。该服务器让用户无需 API 密钥或账号即可搜索作品与人物,查看作品的编号、调性、编制与创作年份,浏览各版本及其出版商、编者和版权条款,阅读作曲家的相关信息,并按体裁、调性或编制进行浏览。请求遵循 IMSLP 的抓取延时要求,返回内容会注明来源并以链接回引原页面。

访问官网

工具介绍

用途

mcp-imslp 是一个 MCP(模型上下文协议)服务器,把聊天客户端接入 IMSLP(International Music Score Library Project,又称佩特鲁奇音乐图书馆)。IMSLP 是由志愿者运营的免费古典音乐图书馆,收录版权已过期的乐谱、分谱、改编曲和录音,以及各作曲家页面上的资料。它分别针对加拿大、美国和欧盟审查每份乐谱的版权,页面以 CC BY-SA 4.0 发布。

这个服务器读取该图书馆并链接回它,不需要 API 密钥,也不需要账号。

主要能力

你可以用它完成以下操作:

  • 搜索作品与人物,并读取其页面。
  • 读取一部作品:其标题与别名、作曲家、作品号与目录号、创作年份与首次出版年份、题献、调性、语言、编剧、编制、乐章、首演、风格与时期。
  • 逐版浏览一部作品所持有的版本,包括出版商、编者和版权条款。
  • 读取某位作曲家(以及编者、改编者、演奏者)在图书馆中的资料:生活年代、别名、权威登记记录等。
  • 按体裁、调性或编制浏览作品。

可提出的示例问题包括:

  • “IMSLP 有哪些肖邦的夜曲?”
  • “读一下 Erik Satie 的页面,告诉我他生活在什么年代。”
  • “列出德彪西《月光》的各个版本,以及每个版本的出版者。”
  • “那首曲子的 Henle 版在美国可以自由使用吗?”
  • “给我看图书馆中为独奏大提琴创作的作品。”

使用方式

一次点击安装

适用于 Claude Desktop、Cursor,以及任何使用标准配置格式的客户端。需要 Node 24 或更高版本,无需设置任何环境变量。

命令行中 -i 保持标准输入打开(这是协议传输的通道),省略 -t 是因为 TTY 会改写数据流。容器需要能对外 HTTPS 访问 imslp.org,无需其他东西:没有卷、没有端口、没有凭据。

不使用 npm 的捆绑包

从最新发布中下载 mcp-imslp-1.0.1.mcpb 并打开。支持 MCP 捆绑包的客户端会自行安装,不需要 npm,也无需编辑配置文件。捆绑包自带依赖,因此安装时不下载任何东西。

常用路径

常规路径是从搜索到作品:search_works 给出作品的页面名,get_work 读取该页面。人物同理,从 search_people 到 get_person 或 list_person_works。

作品通过其页面标题寻址,写作 Work (Composer),例如 Nocturnes, Op.9 (Chopin, Frédéric)。人物通过分类寻址,写作 Category:Surname, Forename。两者都能从搜索中返回,Category: 前缀可以省略。

图书馆以作曲家所使用的语言为作品命名,因此 Die Zauberflöte 会找到歌剧,而 The Magic Flute 会找到关于它的页面。一部著名作品返回结果稀少,往往说明标题是另一种语言。

可用工具

  • search_works:在作品页面中搜索任意位置出现的词,因此标题、作曲家或题献都能找到带有它们的作品。返回包含 page(供 get_work 使用)、work、composer、page_url、snippet、size_bytes、words、last_edited 等行;信封包含 returned、has_more 和 next_offset。total 始终为 null,因为图书馆不公布匹配数量。
  • search_people:按姓名查找作曲家、编者、改编者和演奏者。图书馆按自己的方式书写姓名(姓氏在前)。返回 category(供 get_person 和 list_person_works 使用)、name、page_url、snippet 和 redirect_to。
  • get_work:读取一部作品,返回上述各属性字段,空则为 null,并使用页面原文措辞(例如 ca.1830 保持为 ca.1830)。还包括 genre_categories、external_links、authorities、sections 和 copyright_summary。
  • list_work_files:逐版读取作品的乐谱与录音。一个版本是在同一套条款下发布的一组文件:出版商、编者和版权声明属于该版本。返回 editions,每个含 section、publisher_info、editor、copyright 和 files。文件包含 imslp_id、description、format、format_code、pages、size_bytes、downloads、rating、uploader、uploaded_on、扫描图书馆的名称与 sigla,以及 blocked(IMSLP 正在审查该文件版权时为 true)。
  • list_person_works:读取归在某人物名下的作品。返回包含 page、work、composer、pageid、page_url 的行,以及 has_more 和 cursor。total 始终为 null。
  • get_person:读取某人的资料:页面印出的姓名、所述生活年代、其他归档名、权威登记记录和外部链接。返回 category、catalogued_as、name、life_dates、alternative_names、aliases、authorities、external_links、page_url。
  • browse_category:读取归在某分类(体裁、调性、编制或时期)下的作品。返回与 list_person_works 相同的行,以及 has_more 和 cursor,total 为 null。图书馆一次读取一个分类,因此同时指定体裁和乐器的提问,需要浏览其中一个,并用 get_work 从每部作品读出另一个。

版权状态

IMSLP 上的乐谱按司法辖区携带状态,图书馆审查加拿大、美国和欧盟。一个文件若显示 Public Domain - Non-PD US,则在加拿大和欧盟自由,在美国受保护。此服务器按发布状态逐辖区报告,在作品的 copyright_summary 和版本的 copyright 下,restrictions 指出声明排除的地方。restrictions 为空并不说明 IMSLP 未纳入审查的国家。

配置

所有变量都是可选的,在客户端配置的 env 块中设置。超出范围的值会回退到默认值,原因写入 stderr。每个失败都携带六种代码之一、一条消息,以及在有帮助时给出下一步的提示。

独立库、节流与署名

读取 IMSLP 的层单独发布,带有自己的节流、缓存和错误处理,不附加协议。renderPage、getWork、search、categoryMembers 和 getPerson 各自返回 { data, cached },并抛出携带六种代码之一的 ImslpError。请求之间的两秒下限在这里同样成立。

IMSLP 在其 robots.txt 中公布 Crawl-delay: 2,因此请求逐个发出、间隔至少两秒,无论服务器如何配置该下限都成立。User-Agent 始终以项目标识和可联系到人的地址结尾。

读取通过 /api.php 的 MediaWiki API 和 IMSLP 在其 IMSLP:API 页面上记录的列表端点进行。robots.txt 禁止 /index.php、/images/、/imglnks/、/wiki/File:、/works 和 /library/,此服务器不在其中任何路径下构造地址:它返回作品页面的链接,也就是回答所署名的来源。

图书馆的页面以 CC BY-SA 4.0 发布,因此此服务器展示的任何内容都署名 IMSLP 并链接其来源页面。

隐私与测试

此服务器不收集你的任何信息,也不向其作者发送任何东西。它在你的机器上运行,只联系 imslp.org,运行时把回答保存在内存中,不写磁盘。PRIVACY.md 说明了请求携带什么以及哪些设置会改变它。

测试针对生成的固定数据运行,不发起网络请求。实时测试套件 npm run test:live 每条路由发起一次请求,每晚针对网站本身运行。

许可

MIT,见 LICENSE。目录与页面归 IMSLP 及其贡献者所有,以 CC BY-SA 4.0 发布。