mcpField
M
mcp-lrclib

mcp-lrclib

本地服务
github.com游戏娱乐0今天更新

关于 mcp-lrclib

mcp-lrclib 将 LRCLIB 歌词数据库接入聊天客户端,可搜索歌曲并读取纯文本或带时间戳的歌词。无需 API 密钥或账户。

主要功能

  1. 01按歌曲、歌手或专辑搜索
  2. 02读取纯文本歌词
  3. 03读取带时间戳的 LRC 歌词
  4. 04查看曲目版本与歌词可用性
  5. 05分段读取长歌词

适用场景

  1. 01查找歌曲歌词
  2. 02获取适合跟唱的时间同步歌词
  3. 03比较同一歌曲的不同发行版本
  4. 04检查曲目是否有同步歌词

MCP 相关

作为 MCP 服务,它向客户端提供曲目搜索、歌词读取和曲目元数据查询工具。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
npmmcp-lrclib2.1.0
mcpbmcp-lrclib-2.1.0.mcpb2.1.0

工具

3

收录的工具列表 · 更新于 今天

参数类型必填说明
limitinteger否最多返回的曲目数。LRCLIB 每次搜索最多 20 首。
querystring否自由文本搜索,例如 'nino ferrer le sud'。使用此项或下方字段。
album_namestring否专辑名称,用于缩小结构化搜索范围。
track_namestring否结构化搜索使用的歌曲标题。
artist_namestring否结构化搜索使用的艺人名称。

详细介绍

mcp-lrclib

npm CI license MCP Registry Glama M8ven LobeHub 在 Cursor 中安装 在 VS Code 中安装

LRCLIB 是一个免费、开放的歌词数据库,由使用者共同构建,并向所有人开放,无需密钥或账户。它收录两种歌词形式:歌曲的纯文本,以及 LRC 格式;后者的每一行都标注了唱到该句的时间,卡拉 OK 显示或歌词面板会据此同步显示。每首歌曲都按标题、艺人、专辑和时长归档,因此同一首歌的不同发行版本会并列显示。

此服务可将聊天客户端连接到该数据库。你可以按标题、艺人或专辑搜索歌曲,查看纯文本歌词,查看带时间戳的同步歌词行,还可以在阅读前查看某个发行版本的元数据。无需 API 密钥或账户。

法语版本


安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add lrclib -- npx -y mcp-lrclib

Claude Desktop、Cursor 以及使用标准配置格式的任何客户端

{
  "mcpServers": {
    "lrclib": {
      "command": "npx",
      "args": ["-y", "mcp-lrclib"]
    }
  }
}

需要 Node 24 或更高版本,无需设置任何环境变量。

使用 Docker
{
  "mcpServers": {
    "lrclib": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-lrclib:2.0.1"]
    }
  }
}

-i 会保持 stdin 处于打开状态,协议通过此通道传输;不使用 -t,因为 TTY 会改写数据流。容器只需能够通过 HTTPS 向外连接 lrclib.net,除此之外不需要任何东西:无需卷、端口或凭据。

不使用 npm 的安装包

从最新版本下载 mcp-lrclib-2.0.1.mcpb 并打开。支持 MCP 安装包的客户端会自行完成安装,无需 npm,也无需编辑配置文件。安装包包含其依赖项,因此安装时不会下载任何内容。

你可以询问什么

  • “帮我找找 Nino Ferrer 的《Le Sud》歌词。”
  • “给我《Bohemian Rhapsody》的同步歌词,这样我可以跟着唱。”
  • “LRCLIB 上有哪些版本的《Hallelujah》,每个版本有多长?”
  • “把那段歌词的后半部分读给我听。”
  • “曲目 3396226 有同步歌词吗?”

通常的使用流程是先搜索,再阅读:search_tracks 会返回一个 id,get_lyrics 则使用该 ID。

工具

工具功能
search_tracks按标题、艺人或专辑查找曲目,并返回其元数据。
get_lyrics读取一首曲目的歌词,可以是纯文本,也可以带时间戳。
get_track根据曲目 ID 读取一首曲目的元数据,不包含歌词。

LRCLIB 根据曲目的元数据归档,因此可以通过标题、艺人或专辑找到歌曲。记得歌曲里的某句歌词,在这里无法找到结果。

search_tracks

按元数据查找符合条件的曲目,可以进行一次自由文本搜索,也可以按各字段搜索。同一首歌的多个发行版本会并列返回,可通过专辑和时长区分。

参数类型必填功能
query字符串,1 到 200 个字符否自由文本搜索,例如 nino ferrer le sud。
track_name字符串,最多 200 个字符否按字段搜索时使用的歌曲标题。
artist_name字符串,最多 200 个字符否按字段搜索时使用的艺人名称。
album_name字符串,最多 200 个字符否按字段搜索时使用的专辑名称,用于缩小搜索范围。
limit整数,1 到 50,默认值为 10否返回的行数。LRCLIB 每次搜索最多返回 20 条结果。

传入 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 返回的曲目数和可用曲目总数。对于未记录专辑名称或时长的曲目,album_name 和 duration_seconds 为 null。这些行不包含歌词:歌词由 get_lyrics 读取。

get_lyrics

读取一首曲目的歌词,可提供纯文本,或带有每行演唱时间的 LRC 行。长歌词会分段提供,并从行边界处继续读取。

参数类型必填说明
id正整数否LRCLIB 曲目 ID,由 search_tracks 返回。
artist_name最多 200 个字符的字符串否艺术家名称,要求完全匹配。未提供 id 时必填。
track_name最多 200 个字符的字符串否歌曲标题,要求完全匹配。未提供 id 时必填。
album_name最多 200 个字符的字符串否专辑名称,用于在不同发行版本中进行选择。
duration_seconds正数否曲目时长,用于在时长不同的版本中进行选择。
formatplain、synced 或 both,默认值为 plain否要提供的歌词形式。
max_chars200 到 20000 之间的整数,默认值为 6000否本次调用提供的文本字符数。
offset大于或等于 0 的整数,默认值为 0否用于继续读取的字符偏移量。

返回内容: status,其值为 ok、表示曲目没有歌词的 instrumental,或表示曲目未收录歌词的 no_lyrics;track,包含曲目的 ID、标题、艺术家、专辑、时长和 source_url;plain_lyrics;作为原始 LRC 文本的 synced_lyrics,以及由 { time_seconds, text } 组成的列表 synced_lines,若本次读取截断了这些行,则还会返回 synced_lines_truncated。读取情况由 paginated_form、total_chars、returned_chars、offset、next_offset 和 truncated 描述;传入 next_offset 即可继续读取,其中的 null 表示已到末尾。展示歌词时应引用 attribution 中的内容。status 为 instrumental 时,表示已得到完整答复。

get_track

根据曲目 ID 读取一首曲目的元数据,不包含歌词。可在请求歌词前确认发行版本,也可解析对话中先前提到的 ID。

参数类型必填说明
id正整数是LRCLIB 曲目 ID,由 search_tracks 返回。

返回内容: track,包含搜索结果行中的字段;以及格式为 m:ss 的 duration_formatted,若该曲目未收录时长,则为 null。has_plain_lyrics 和 has_synced_lyrics 表示 get_lyrics 可为该曲目提供哪些形式的歌词。

配置

所有变量均为可选项。请在客户端配置的 env 块中设置。

变量默认值作用
LRCLIB_USER_AGENT项目标识向 LRCLIB 标识你的应用,并提供可联系到相关人员的地址。
LRCLIB_MIN_INTERVAL_MS500两次请求之间的间隔,范围为 200 到 60000。低于下限的值将被拒绝,并使用下限值。
LRCLIB_TIMEOUT_MS15000单次请求的截止时间,范围为 1000 到 120000。
LRCLIB_MAX_RETRIES3发生临时故障后的重试次数,范围为 0 到 10。
LRCLIB_CACHE_TTL_MS900000答案在内存中的保留时间,范围为 0 到 86400000。
LRCLIB_CACHE_MAX_ENTRIES200同时保存在内存中的答案数量,范围为 0 到 10000。
LRCLIB_LOG_LEVELerrorsilent、error、info 或 debug,写入 stderr。

超出范围的值将回退为默认值,原因会写入 stderr。

错误

每种故障都带有六种代码之一、错误消息,以及在有帮助时指出下一步操作的提示。

代码发生了什么如何处理
not_foundLRCLIB 已响应,但没有这首曲目。使用 search_tracks 检查拼写。
invalid_input请求发出前,参数就被拒绝了。阅读错误消息,其中会指出相应参数。
rate_limitedLRCLIB 要求此客户端降低请求频率。等待提示中指出的秒数,然后使用相同参数再次调用。曲目仍然存在。
upstream_errorLRCLIB 返回的格式超出此客户端的读取能力。在问题跟踪器中报告。
network_error请求未能完成。稍后重试。
timeout请求超过了截止时间。增大 LRCLIB_TIMEOUT_MS,或请求较小的 max_chars。

作为库使用

读取 LRCLIB 的这一层单独发布,包含自己的请求间隔控制、缓存和错误处理,且不绑定任何协议。

import { LrclibClient } from "mcp-lrclib/client";

const client = new LrclibClient();
const { data, cached } = await client.getById(3396226);
console.log(data.track_name, data.synced_lyrics !== null, cached);

search、get 和 getById 各自返回 { data, cached },并会抛出带有六种代码之一的错误。这里同样会限制两次请求之间的最短间隔。

请求节奏与归属

请求逐一发送,彼此之间至少间隔一段时间,无论服务如何配置,这个间隔下限都不变。User-Agent 始终以项目标识和一个可联系到项目人员的地址结尾。LRCLIB 是一项免费服务,提供供机器读取的 API;本服务会按需读取,每次只发起一个调用,以响应你的请求。

每个结果都包含艺术家、标题和对应的 LRCLIB 页面地址;get_lyrics 还会附带 attribution,三者写在同一行。

歌曲歌词是其作者和出版商的作品。本项目不主张拥有歌词的任何权利,不随附歌词数据库,不向磁盘写入任何内容,也不会向 LRCLIB 回传任何内容。本 MCP 服务是一个非官方项目,与 LRCLIB 无关联。

隐私

本服务不会收集你的任何信息,也不会向其作者发送任何信息。它在你的计算机上运行,只连接 lrclib.net,运行期间将响应保存在内存中,不会向磁盘写入任何内容。 PRIVACY.md 说明了请求会携带哪些内容,以及哪些设置会对此产生影响。

开发

npm install
npm run build:fixtures
npm test
npm run check

测试使用生成的测试样例运行,不会发起网络请求。实时测试套件 npm run test:live 会针对每个路由发起一次请求,并每晚直接对该服务运行。

贡献

请在问题跟踪器中提交错误报告、问题和想法。欢迎提交拉取请求;先创建问题有助于就更改方案达成一致。请参阅CONTRIBUTING.md。

许可证

MIT,详见 LICENSE。歌词属于其作者和出版商,数据库属于 LRCLIB 及其贡献者。


mcp-lrclib(法语)

英文版本

LRCLIB 是一个自由、开放的歌曲歌词数据库,由使用者共同维护,免费向所有人开放,无需密钥或账户。它包含歌词的两种形式:歌曲的纯文本歌词,以及 LRC 格式;后者的每一行都标有演唱时间,可用于卡拉 OK 显示或歌词面板。条目按歌曲名称、艺术家、专辑和时长分类,因此同一首歌的不同发行版本会并列显示。

本服务将对话客户端连接到这个数据库。你可以按歌曲名称、艺术家或专辑搜索歌曲,读取纯文本歌词,读取带有时间戳的歌词行,并在读取前核对某个发行版本的条目。无需 API 密钥,无需账户。

安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add lrclib -- npx -y mcp-lrclib

Claude Desktop、Cursor 及任何采用标准配置格式的客户端

{
  "mcpServers": {
    "lrclib": {
      "command": "npx",
      "args": ["-y", "mcp-lrclib"]
    }
  }
}

需要 Node 24 或更高版本,无需设置任何环境变量。

使用 Docker
{
  "mcpServers": {
    "lrclib": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-lrclib:2.0.1"]
    }
  }
}

-i 会保持标准输入处于打开状态,它是协议通道;省略 -t,因为 TTY 会重写数据流。容器只需通过 HTTPS 访问 lrclib.net,无需访问其他地址:不需要卷、端口或凭据。

无需 npm 打包

从最新发布版本 下载 mcp-lrclib-2.0.1.mcpb 并打开。支持 MCP Bundle 的客户端会自行安装,无需 npm,也 无需修改配置文件。Bundle 包含其依赖项,因此安装时不会下载任何内容。

可以提出的请求

  • “帮我找找 Nino Ferrer 的《Le Sud》歌词。”
  • “给我《Bohemian Rhapsody》的带时间戳歌词,方便我跟唱。”
  • “LRCLIB 上有几个版本的《Hallelujah》,时长分别是多少?”
  • “读给我听这些歌词的后半部分。”
  • “编号为 3396226 的歌曲有同步歌词吗?”

通常的流程是先搜索,再读取:search_tracks 会提供一个 id,get_lyrics 会接收这个标识符。

工具

工具功能
search_tracks按歌曲名、艺人或专辑查找曲目,并返回其条目信息。
get_lyrics读取曲目的歌词,可以是普通歌词或带时间戳的歌词。
get_track按曲目标识符读取条目信息,不包含歌词。

LRCLIB 根据曲目的条目信息对其分类,因此搜索可以按歌曲名、艺人或专辑查找歌曲。输入歌曲中的一个词无法找到结果。

search_tracks

查找条目信息匹配的曲目,可以使用自由文本搜索或按字段搜索。同一首歌的多个发行版本会并列返回,可通过专辑和时长区分。

参数类型必填功能
query字符串,1 至 200 个字符否自由文本搜索,例如 nino ferrer le sud。
track_name字符串,最多 200 个字符否按字段搜索时使用的歌曲名。
artist_name字符串,最多 200 个字符否按字段搜索时使用的艺人名。
album_name字符串,最多 200 个字符否按字段搜索时使用的专辑名,用于缩小搜索范围。
limit整数,1 至 50,默认值为 10否返回的条目数。每次搜索 LRCLIB 最多返回 20 条。

请传入 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,分别表示 LRCLIB 返回的条目数,以及应用 limit 前可用的曲目数。若曲目在分类时没有 album_name 或 duration_seconds,这些字段的值为 null。条目不包含歌词,需通过 get_lyrics 读取。

get_lyrics

读取歌曲歌词,支持纯文本或带有每句演唱时间的 LRC 格式。较长的歌词会分段返回,并在行尾处截断。

ArgumentTypeRequisCe qu'il fait
identier, positifnonsearch_tracks 返回的 LRCLIB 标识符。
artist_namechaîne, jusqu'à 200 caractèresnon艺术家名称,精确匹配。不提供 id 时必填。
track_namechaîne, jusqu'à 200 caractèresnon歌曲名称,精确匹配。不提供 id 时必填。
album_namechaîne, jusqu'à 200 caractèresnon专辑名称,用于从多个发行版本中选择。
duration_secondsnombre, positifnon歌曲时长,用于从时长不同的版本中选择。
formatplain、synced 或 both,默认值为 plainnon要返回的歌词格式。
max_charsentier, 200 à 20000, défaut 6000non此次调用返回的文本字符数。
offsetentier, 0 ou plus, défaut 0non继续读取的字符位置。

返回内容: status,值为 ok、instrumental(歌曲没有可演唱的歌词)或 no_lyrics(歌曲被标记为没有歌词);track,包含歌曲的标识符、名称、艺术家、专辑、时长和 source_url;plain_lyrics;原始 LRC 文本格式的 synced_lyrics,以及由 { time_seconds, text } 组成的列表 synced_lines;如果分段截断了歌词,还会返回 synced_lines_truncated。读取状态由 paginated_form、total_chars、returned_chars、offset、next_offset 和 truncated 描述:传入 next_offset 即可继续读取,null 表示已到结尾。展示歌词时应引用 attribution 中的内容。若 status 为 instrumental,则表示已完整返回。

get_track

根据标识符读取歌曲信息,不包含歌词。可在请求歌词前确认发行版本,也可解析先前对话中提供的标识符。

ArgumentTypeRequisCe qu'il fait
identier, positifouisearch_tracks 返回的 LRCLIB 标识符。

返回内容: track,包含搜索结果行的字段;duration_formatted,格式为 m:ss,若歌曲被标记为没有时长则为 null。has_plain_lyrics 和 has_synced_lyrics 表示 get_lyrics 可以返回哪些歌词格式。

配置

所有变量均为可选项。它们设置在客户端配置的 env 块中。

变量默认值作用
LRCLIB_USER_AGENT项目标识向 LRCLIB 标识您的应用,并提供可联系到相关人员的地址。
LRCLIB_MIN_INTERVAL_MS500两次请求之间的间隔,范围为 200 至 60000。低于下限的值会被拒绝,并改用此默认值。
LRCLIB_TIMEOUT_MS15000单次请求的超时时间,范围为 1000 至 120000。
LRCLIB_MAX_RETRIES3临时失败后的重试次数,范围为 0 至 10。
LRCLIB_CACHE_TTL_MS900000响应在内存中的保留时长,范围为 0 至 86400000。
LRCLIB_CACHE_MAX_ENTRIES200同时保留在内存中的响应数量,范围为 0 至 10000。
LRCLIB_LOG_LEVELerror可设为 silent、error、info 或 debug,日志写入错误输出。

超出范围的值会回退为默认值,原因会写入错误输出。

错误

每种失败都带有六种代码之一和一条消息,并会在有帮助时指出下一步操作。

代码发生了什么该怎么做
not_foundLRCLIB 已响应,但未包含此曲目。使用 search_tracks 检查拼写。
invalid_input参数在发出请求前被拒绝。阅读消息,其中会指出具体参数。
rate_limitedLRCLIB 要求此客户端降低请求频率。等待指定秒数,然后使用相同参数再次调用。曲目仍然存在。
upstream_errorLRCLIB 返回了此客户端无法读取的格式。在问题跟踪页面报告。
network_error请求未能完成。稍后重试。
timeout请求超时。增大 LRCLIB_TIMEOUT_MS,或请求更小的 max_chars。

作为库使用

读取 LRCLIB 的这一层单独发布,包含请求节奏控制、缓存和错误处理,不绑定任何协议。

import { LrclibClient } from "mcp-lrclib/client";

const client = new LrclibClient();
const { data, cached } = await client.getById(3396226);
console.log(data.track_name, data.synced_lyrics !== null, cached);

search、get 和 getById 均返回 { data, cached },并会抛出带有六种代码之一的错误。两次请求之间的间隔下限在此处同样适用。

请求频率与署名

请求逐个发出,彼此之间至少间隔一段时间,无论如何配置,这个间隔下限都始终生效。User-Agent 始终以项目身份和联系负责人的地址结尾。LRCLIB 是一项免费服务,并公开其 API 供机器读取;此服务会按需读取,一次调用一个,以响应您的请求。

每条结果都包含艺术家、曲名和 LRCLIB 页面地址,get_lyrics 则会通过 attribution 将这三项写在一行中。

歌词是其作者和出版商的作品。本项目不主张对歌词拥有任何权利,不内置任何歌词数据库,不向磁盘写入任何内容,也不会向 LRCLIB 贡献任何内容。此 MCP 是一个非官方项目,与 LRCLIB 无关联。

隐私

此服务不会收集您的任何信息,也不会向其作者发送任何信息。它在您的计算机上运行,只连接 lrclib.net,在运行期间将响应保存在内存中,不向磁盘写入任何内容。PRIVACY.md 说明了请求会携带哪些信息,以及哪些设置会改变这一情况。

开发

npm install
npm run build:fixtures
npm test
npm run check

测试使用生成的 fixtures 运行,不会发出任何请求。实时测试套件 npm run test:live 会为每个路由发出一个请求,并且每晚都会针对服务本身运行。

贡献

问题、疑问和想法都可以提交到问题跟踪页面。欢迎提交修改建议;先开一个 issue 有助于就变更形式达成一致。请参阅 CONTRIBUTING.md。

许可证

MIT,详见 LICENSE。歌词属于其作者和出版商,数据库则属于 LRCLIB 及其贡献者。

评论

支持 Markdown

第一次接触 MCP?

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

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