用途
mcp-lrclib 是一个连接 LRCLIB 歌词数据库的 MCP(模型上下文协议)服务器,用于让聊天客户端搜索歌曲并读取歌词。LRCLIB 是一个免费开放的歌词数据库,由使用者共同构建,无需密钥或账户即可使用。该数据库收录两种形式的歌词:纯文本歌词,以及每一行都带有演唱时间点的 LRC 格式歌词,后者适用于卡拉 OK 显示或歌词面板跟随。曲目按其标题、艺术家、专辑和时长归档,因此同一首歌的不同发行版本会并列存放。
主要能力
该服务器提供以下能力:
- 按标题、艺术家或专辑搜索曲目,支持自由文本搜索或按字段搜索。
- 读取一首歌的纯文本歌词。
- 读取带时间戳的同步歌词行。
- 在读取歌词前检查某个发行版本的元数据。
需要注意的是,LRCLIB 按元数据归档曲目,因此搜索通过标题、艺术家或专辑来定位歌曲,而歌曲内部记住的某个词无法通过搜索找到。
工具说明
search_tracks:查找元数据匹配的曲目,支持一次自由文本搜索或按字段搜索。同一首歌的多个发行版本会并列返回,可通过专辑和时长区分。输入参数为 query 或三个字段之一。返回内容包含:id(供 get_lyrics 和 get_track 使用)、track_name、artist_name、album_name、duration_seconds(用于区分同一首歌的不同发行版本)、instrumental、has_plain_lyrics 和 has_synced_lyrics(可在请求同步歌词前检查是否存在)、source_url,以及 result_count 和 total_available(应用 limit 之前 LRCLIB 提供的曲目数)。如果曲目归档时缺少专辑或时长,对应字段为 null。搜索结果行不包含歌词内容,需通过 get_lyrics 读取。
get_lyrics:读取一个曲目的歌词,可以是纯文本,也可以是带每行演唱时间点的 LRC 行。长歌词会分片返回,在行边界处截断。返回内容包含:status(ok、instrumental 表示无歌词可唱、no_lyrics 表示归档时无歌词)、track(含 id、标题、艺术家、专辑、时长和 source_url)、plain_lyrics、synced_lyrics(原始 LRC 文本)和 synced_lines({ time_seconds, text } 列表),当分片截断时会有 synced_lines_truncated。读取状态由 paginated_form、total_chars、returned_chars、offset、next_offset 和 truncated 描述:将 next_offset 传回以继续读取,为 null 表示已到末尾。attribution 是展示歌词时应引用的行。status 为 instrumental 即为完整答案。
get_track:根据 id 读取一个曲目的元数据,不读取歌词。用于在请求歌词前确认某个发行版本,或解析之前对话中传来的 id。返回内容包含:track(含搜索行携带的各字段),以及 duration_formatted(m:ss 格式,归档时无时长则为 null)。has_plain_lyrics 和 has_synced_lyrics 说明 get_lyrics 可提供哪些形式。
使用方式
一键安装
支持 Claude Desktop、Cursor 以及任何使用标准配置格式的客户端。需要 Node 24 或更高版本,无需设置任何环境变量。
配置说明:-i 保持标准输入打开(协议传输通道),不设置 -t,因为 TTY 会重写流。容器需要到 lrclib.net 的出站 HTTPS 访问,不需要其他内容:无需卷、端口或凭据。
捆绑包安装(无需 npm)
从最新发布版本下载 mcp-lrclib-2.0.1.mcpb 并打开。支持 MCP 捆绑包的客户端会自动安装,无需 npm,也无需编辑配置文件。捆绑包自带依赖,安装时不会下载任何内容。
可以提出的请求示例
- “Find me the lyrics of Le Sud by Nino Ferrer.”
- “Give me the timed lyrics of Bohemian Rhapsody so I can follow along.”
- “Which version of Hallelujah is on LRCLIB, and how long is each one?”
- “Read me the second half of those lyrics.”
- “Does track 3396226 have synced lyrics?”
常规路径是从搜索到读取:search_tracks 给出一个 id,get_lyrics 使用该 id。
配置
每个变量都是可选的,在客户端配置的 env 块中设置。值超出范围会回退到默认值,原因会写到 stderr。
适用场景
适用于需要在聊天客户端或 MCP 兼容客户端中搜索歌曲、读取纯文本或同步歌词的场景,例如跟随卡拉 OK 显示、查看歌词、确认某个发行版本的信息等。
限制
- 搜索仅通过标题、艺术家或专辑等元数据进行,无法通过歌词内容中的词进行搜索。
- 需要 Node 24 或更高版本。
- 容器需要到 lrclib.net 的出站 HTTPS 访问。
- 该项目为非官方项目,与 LRCLIB 无关联。
- 歌词属于其作者和出版商,项目不主张任何权利,不附带歌词数据库,不写入磁盘,也不向 LRCLIB 回传内容。
错误处理
每个失败都携带六种代码之一、一条消息,以及在有帮助时给出下一步操作的提示。
作为库使用
读取 LRCLIB 的层可单独发布,带有其节奏控制、缓存和错误处理,不附带协议。search、get 和 getById 分别返回 { data, cached },并抛出携带六种代码之一的错误。两次请求之间的最小间隔同样适用于此。
节奏与署名
请求逐个发出,之间有最小间隔,无论服务器如何配置该下限都保持不变。User-Agent 始终以项目标识和一个可联系到人的地址结尾。LRCLIB 是免费服务,公开发布其 API 供机器读取,该服务器按需逐次调用读取,以响应你的请求。
每个结果都携带艺术家、标题及其 LRCLIB 页面地址,get_lyrics 携带 attribution,将这三者写成一行。
隐私
该服务器不收集关于你的任何信息,也不向其作者发送任何内容。它运行在你的机器上,仅联系 lrclib.net,运行时将答案保存在内存中,不写入磁盘。PRIVACY.md 说明了请求携带的内容以及哪些设置会改变这些。
测试
测试针对生成的固定数据运行,不发起网络请求。实时测试套件 npm run test:live 对每条路由发起一次请求,每晚针对服务本身运行。
许可证
MIT,参见 LICENSE。歌词属于其作者和出版商,数据库属于 LRCLIB 及其贡献者。