mcpField
M
mcp-lrclib

mcp-lrclib

ローカル
github.comゲーム・エンタメ0今日更新

mcp-lrclib について

mcp-lrclibは、LRCLIBをチャットクライアントから利用して曲を検索し、通常の歌詞やタイムスタンプ付き歌詞を取得するMCPサーバーです。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 は1回の検索につき最大20件を返します。
querystringいいえ自由テキスト検索。例:'nino ferrer le sud'。これ、または下のフィールドを使用します。
album_namestringいいえ構造化検索を絞り込むアルバム名。
track_namestringいいえ構造化検索に使用する曲名。
artist_namestringいいえ構造化検索に使用するアーティスト名。

詳細

mcp-lrclib

npm CI license MCP Registry Glama M8ven LobeHub Install in Cursor Install in VS Code

LRCLIBは、楽曲の歌詞を収録した無料のオープンデータベースです。利用者自身が構築し、キーやアカウントなしで誰でも利用できます。収録されている歌詞には2つの形式があります。楽曲のプレーンテキストと、各行に歌われるタイミングが記されたLRC形式です。カラオケの画面や歌詞パネルは、このタイミングに合わせて表示します。楽曲はタイトル、アーティスト、アルバム、再生時間で登録されるため、同じ曲の複数のリリースを並べて確認できます。

このサーバーは、チャットクライアントをこのデータベースに接続します。タイトル、アーティスト、アルバムから楽曲を検索したり、歌詞のプレーンテキストやタイムスタンプ付きの同期歌詞を読んだり、歌詞を読む前に特定のリリースのメタデータを確認したりできます。API キーもアカウントも必要ありません。

Version française


インストール

ワンクリックインストール

Install in Cursor Install in 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はプロトコルが流れる標準入力を開いたままにします。また、TTYはストリームを書き換えるため、-tは指定しません。コンテナに必要なのはlrclib.netへのHTTPS送信接続だけです。ボリューム、ポート、認証情報は不要です。

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_lyrics1 曲の歌詞を、通常の形式またはタイムスタンプ付きで読み取ります。
get_track歌詞を除く 1 曲のメタデータを、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、または 3 つのフィールドのいずれかを指定してください。

返される内容: get_lyrics と get_track で使用する id、track_name と artist_name、同じ曲の 2 つのリリースを見分けるための album_name と duration_seconds、instrumental、タイムスタンプ付きの歌詞をリクエストする前に確認できる has_plain_lyrics と has_synced_lyrics、および source_url を含む行が返されます。これらに加えて、limit を適用する前に LRCLIB が返した楽曲数を示す result_count と total_available も返されます。情報なしで登録されている楽曲では album_name と duration_seconds は null となり、行には歌詞は含まれません。歌詞は get_lyrics で読み取ります。

get_lyrics

1 曲の歌詞をプレーンテキストまたは、各行が歌われる時刻を含む LRC 形式で取得します。長い歌詞は一度に一部ずつ返され、行の区切りから続きを取得できます。

引数型必須説明
id正の整数いいえsearch_tracks が返した LRCLIB のトラック ID です。
artist_name200 文字以内の文字列いいえアーティスト名です。完全一致で検索します。id がない場合は必須です。
track_name200 文字以内の文字列いいえ曲名です。完全一致で検索します。id がない場合は必須です。
album_name200 文字以内の文字列いいえリリースを選ぶためのアルバム名です。
duration_seconds正の数値いいえ長さの異なるバージョンを選ぶためのトラックの再生時間です。
formatplain、synced または both、デフォルトは plainいいえ取得する歌詞の形式です。
max_chars200〜20000 の整数、デフォルトは 6000いいえこの呼び出しで取得するテキストの文字数です。
offset0 以上の整数、デフォルトは 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 を渡してください。next_offset が null の場合は末尾です。歌詞を表示する際に引用する行は attribution です。status が instrumental の場合、回答は完了です。

get_track

歌詞を取得せずに、ID を指定して 1 曲のメタデータを取得します。歌詞をリクエストする前にリリースを確認したり、会話の前のやり取りで取得した ID を解決したりできます。

引数型必須説明
id正の整数はいsearch_tracks が返した LRCLIB のトラック ID です。

戻り値: track には検索結果の行に含まれるフィールドが格納されます。また、duration_formatted は m:ss 形式で、トラックに再生時間が登録されていない場合は null です。has_plain_lyrics と has_synced_lyrics は、そのトラックについて get_lyrics で取得できる歌詞の形式を示します。

設定

すべての変数は省略可能です。クライアント設定の env ブロックで設定してください。

変数デフォルト説明
LRCLIB_USER_AGENTプロジェクトの識別情報LRCLIB にアプリケーション名と、担当者に連絡できる連絡先を伝えます。
LRCLIB_MIN_INTERVAL_MS5002 つのリクエスト間隔です。200~60000 の範囲で指定します。下限未満の値は拒否され、下限値が使われます。
LRCLIB_TIMEOUT_MS150001 回のリクエストのタイムアウト時間です。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 に出力されます。

エラー

すべての失敗には、6 種類のコードのいずれかとメッセージが含まれ、役立つ場合には次の手順を示すヒントも含まれます。

コード発生した内容対処方法
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 } を返し、6 種類のコードのいずれかを持つエラーをスローします。ここでも、2 つのリクエスト間には最低間隔が設けられます。

リクエスト間隔と帰属表示

リクエストは一度に1件ずつ送信され、リクエスト間には最低限の間隔が設けられています。この下限は、サーバーの設定にかかわらず適用されます。User-Agent は常に、プロジェクトの識別情報と連絡可能な宛先で終わります。LRCLIB は無料のサービスで、機械が読み取るための API を公開しています。このサーバーは、ユーザーからのリクエストに応じて、必要なときに1回ずつ API を呼び出します。

すべての結果にはアーティスト名、タイトル、LRCLIB のページのアドレスが含まれます。また、get_lyrics には attribution が含まれ、これら3つは1行にまとめて記載されます。

歌詞は作者と出版社の著作物です。このプロジェクトは歌詞に対する権利を主張せず、歌詞のデータベースを同梱せず、ディスクに何も書き込まず、LRCLIB に何も提供しません。この MCP サーバーは非公式のプロジェクトであり、LRCLIB とは一切関係ありません。

プライバシー

このサーバーはユーザーに関する情報を収集せず、作者に情報を送信することもありません。ユーザーのマシン上で動作し、lrclib.net 以外には接続せず、実行中は応答をメモリに保持し、ディスクには何も書き込みません。 PRIVACY.md では、リクエストに含まれる情報と、その内容を変更する設定について説明しています。

開発

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

テストでは生成されたフィクスチャを使用し、ネットワークリクエストは行いません。ライブテストスイートの npm run test:live は、各ルートにつき1件のリクエストを行い、サービス自体に対して毎晩実行されます。

コントリビューション

バグ、質問、アイデアは イシュートラッカーへお寄せください。プルリクエストも歓迎します。まずイシューを作成しておくと、変更の方向性を合意しやすくなります。CONTRIBUTING.mdをご覧ください。

ライセンス

MIT ライセンスです。詳細はLICENSEをご覧ください。歌詞は作者と出版社に、データベースは LRCLIB とそのコントリビューターに帰属します。


mcp-lrclib(フランス語版)

英語版

LRCLIB は、利用者によって支えられ、キーやアカウントなしで誰でも利用できる、自由でオープンな歌詞データベースです。曲の歌詞には、通常のテキストと、各行に歌われる時刻が記された LRC 形式の2種類があります。カラオケ表示や歌詞パネルでは、後者の形式が使われます。曲はタイトル、アーティスト、アルバム、再生時間で分類されているため、同じ曲の異なるリリースも並べて表示されます。

このサーバーは、会話クライアントをこのデータベースに接続します。タイトル、アーティスト、アルバムで曲を検索したり、通常の歌詞を読んだり、タイムスタンプ付きの歌詞を読み込んだり、読み込む前にリリースの詳細を確認したりできます。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 を避けるため省略します。コンテナに必要なのは、lrclib.net への HTTPS アウトバウンドアクセスだけです。ボリューム、ポート、認証情報は不要です。

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または3つの項目のいずれかを指定してください。

返される内容: get_lyricsとget_trackで使うid、track_nameとartist_name、同じ曲の複数のリリースを区別するalbum_nameとduration_seconds、instrumental、タイムスタンプ付き歌詞をリクエストする前にその有無を確認できるhas_plain_lyricsとhas_synced_lyrics、およびsource_urlです。また、limitを適用する前にLRCLIBが返した件数を示すresult_countとtotal_availableも含まれます。アルバム名や再生時間なしで分類された曲では、album_nameとduration_secondsはnullになります。検索結果には歌詞自体は含まれません。歌詞はget_lyricsで読み込みます。

get_lyrics

曲の歌詞を、プレーンテキストまたは各行の歌唱時刻を記したLRC形式で読み取ります。長い歌詞は行末で区切って、分割して返します。

引数型必須説明
id正の整数いいえsearch_tracks が返したLRCLIB識別子です。
artist_name200文字以内の文字列いいえアーティスト名です。完全一致します。id がない場合は必須です。
track_name200文字以内の文字列いいえ曲名です。完全一致します。id がない場合は必須です。
album_name200文字以内の文字列いいえアルバム名です。複数のリリースから選ぶ際に使用します。
duration_seconds正の数いいえ曲の長さです。再生時間が異なるバージョンから選ぶ際に使用します。
formatplain、synced、both のいずれか。既定値は plainいいえ返す歌詞の形式です。
max_chars200〜20000の整数。既定値は 6000いいえこの呼び出しで返すテキストの文字数です。
offset0以上の整数。既定値は 0いいえ再開する文字位置です。

戻り値: 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

識別子を使って、歌詞を含まない曲の詳細を読み取ります。歌詞を取得する前にリリースを確認したり、以前のやり取りで得た識別子を解決したりできます。

引数型必須説明
id正の整数はいsearch_tracks が返したLRCLIB識別子です。

戻り値: 検索結果の各行のフィールドを含む track と、m:ss 形式の duration_formatted が返されます。再生時間が登録されていない曲の場合、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 のいずれかを指定します。標準エラー出力に書き込まれます。

範囲外の値はデフォルト値に戻され、その理由が標準エラー出力に書き込まれます。

エラー

各失敗には、6 種類のコードのいずれかとメッセージが含まれます。また、役立つ場合は次に行う操作の案内も含まれます。

コード発生した内容対処方法
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 } を返し、6 種類のコードのいずれかを持つエラーを送出します。リクエスト間の最小間隔も同様に適用されます。

リクエストの間隔と帰属表示

リクエストは最小限の間隔を空けて一件ずつ送信され、この最小間隔は設定にかかわらず適用されます。User-Agent の末尾には、常にプロジェクトの識別情報と連絡先が記載されます。LRCLIB は無料のサービスで、API を機械が読み取れるように公開しています。このサーバーはユーザーのリクエストに応じて API を読み取り、一度に一件ずつ呼び出します。

各結果にはアーティスト、タイトル、LRCLIB のページアドレスが含まれ、get_lyrics にはこの3つを一行に記載した attribution が含まれます。

歌詞はその作者と出版社の著作物です。このプロジェクトは歌詞に関するいかなる権利も主張せず、歌詞のデータベースを同梱せず、ディスクに書き込まず、LRCLIB への投稿も行いません。この MCP は非公式プロジェクトであり、LRCLIB とは関係ありません。

プライバシー

このサーバーはユーザーに関する情報を収集せず、作者に情報を送信することもありません。お使いのマシン上で動作し、lrclib.net にのみ接続します。動作中は応答をメモリに保持し、ディスクには何も書き込みません。PRIVACY.md では、リクエストに含まれる情報と、それを変更する設定について説明しています。

開発

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

テストは生成されたフィクスチャを使用して実行され、リクエストは送信されません。ライブテストスイートの npm run test:live は、各エンドポイントに対して1件ずつリクエストを送信し、サービス自体に対して毎晩実行されます。

貢献

不具合、質問、アイデアは課題トラッカーにお寄せください。変更の提案も歓迎します。まず課題を作成すると、変更内容について合意しやすくなります。CONTRIBUTING.mdをご覧ください。

ライセンス

MIT ライセンスです。LICENSEをご覧ください。歌詞はその作者と出版社に、データベースは LRCLIB とその貢献者に帰属します。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。