mcp-lrclib について
mcp-lrclibは、LRCLIBをチャットクライアントから利用して曲を検索し、通常の歌詞やタイムスタンプ付き歌詞を取得するMCPサーバーです。APIキーやアカウントは不要です。
主な機能
- 01曲名・アーティスト・アルバムで検索
- 02通常の歌詞を取得
- 03タイムスタンプ付きLRC歌詞を取得
- 04リリース情報と歌詞の有無を確認
- 05長い歌詞を分割して取得
活用シーン
- 01曲の歌詞を探す
- 02歌に合わせるタイムスタンプ付き歌詞の取得
- 03同じ曲の異なるリリースを比較
- 04同期歌詞の有無を確認
MCP 対応
MCPサーバーとして、曲検索、歌詞取得、曲のメタデータ照会ツールをクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
3掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | 返す曲の最大数。LRCLIB は1回の検索につき最大20件を返します。 |
| query | string | いいえ | 自由テキスト検索。例:'nino ferrer le sud'。これ、または下のフィールドを使用します。 |
| album_name | string | いいえ | 構造化検索を絞り込むアルバム名。 |
| track_name | string | いいえ | 構造化検索に使用する曲名。 |
| artist_name | string | いいえ | 構造化検索に使用するアーティスト名。 |
詳細
mcp-lrclib
LRCLIBは、楽曲の歌詞を収録した無料のオープンデータベースです。利用者自身が構築し、キーやアカウントなしで誰でも利用できます。収録されている歌詞には2つの形式があります。楽曲のプレーンテキストと、各行に歌われるタイミングが記されたLRC形式です。カラオケの画面や歌詞パネルは、このタイミングに合わせて表示します。楽曲はタイトル、アーティスト、アルバム、再生時間で登録されるため、同じ曲の複数のリリースを並べて確認できます。
このサーバーは、チャットクライアントをこのデータベースに接続します。タイトル、アーティスト、アルバムから楽曲を検索したり、歌詞のプレーンテキストやタイムスタンプ付きの同期歌詞を読んだり、歌詞を読む前に特定のリリースのメタデータを確認したりできます。API キーもアカウントも必要ありません。
インストール
ワンクリックインストール
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_lyrics | 1 曲の歌詞を、通常の形式またはタイムスタンプ付きで読み取ります。 |
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_name | 200 文字以内の文字列 | いいえ | アーティスト名です。完全一致で検索します。id がない場合は必須です。 |
track_name | 200 文字以内の文字列 | いいえ | 曲名です。完全一致で検索します。id がない場合は必須です。 |
album_name | 200 文字以内の文字列 | いいえ | リリースを選ぶためのアルバム名です。 |
duration_seconds | 正の数値 | いいえ | 長さの異なるバージョンを選ぶためのトラックの再生時間です。 |
format | plain、synced または both、デフォルトは plain | いいえ | 取得する歌詞の形式です。 |
max_chars | 200〜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 を渡してください。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_MS | 500 | 2 つのリクエスト間隔です。200~60000 の範囲で指定します。下限未満の値は拒否され、下限値が使われます。 |
LRCLIB_TIMEOUT_MS | 15000 | 1 回のリクエストのタイムアウト時間です。1000~120000 の範囲で指定します。 |
LRCLIB_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数です。0~10 の範囲で指定します。 |
LRCLIB_CACHE_TTL_MS | 900000 | 回答をメモリに保持する期間です。0~86400000 の範囲で指定します。 |
LRCLIB_CACHE_MAX_ENTRIES | 200 | メモリに同時に保持する回答数です。0~10000 の範囲で指定します。 |
LRCLIB_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。stderr に出力されます。 |
範囲外の値を指定するとデフォルト値に戻り、その理由が stderr に出力されます。
エラー
すべての失敗には、6 種類のコードのいずれかとメッセージが含まれ、役立つ場合には次の手順を示すヒントも含まれます。
| コード | 発生した内容 | 対処方法 |
|---|---|---|
not_found | LRCLIB から応答がありましたが、そのトラックは見つかりません。 | search_tracks でスペルを確認してください。 |
invalid_input | リクエストを送信する前に引数が拒否されました。 | 引数名が記載されたメッセージを確認してください。 |
rate_limited | LRCLIB から、このクライアントのリクエストを減らすよう求められました。 | ヒントに示された秒数だけ待ち、同じ引数でもう一度呼び出してください。トラックは引き続き存在します。 |
upstream_error | LRCLIB から、このクライアントでは読み取れない形式の応答がありました。 | 課題トラッカーに報告してください。 |
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 キーもアカウントも必要ありません。
インストール
ワンクリックでインストール
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_name | 200文字以内の文字列 | いいえ | アーティスト名です。完全一致します。id がない場合は必須です。 |
track_name | 200文字以内の文字列 | いいえ | 曲名です。完全一致します。id がない場合は必須です。 |
album_name | 200文字以内の文字列 | いいえ | アルバム名です。複数のリリースから選ぶ際に使用します。 |
duration_seconds | 正の数 | いいえ | 曲の長さです。再生時間が異なるバージョンから選ぶ際に使用します。 |
format | plain、synced、both のいずれか。既定値は plain | いいえ | 返す歌詞の形式です。 |
max_chars | 200〜20000の整数。既定値は 6000 | いいえ | この呼び出しで返すテキストの文字数です。 |
offset | 0以上の整数。既定値は 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_MS | 500 | リクエスト間の間隔です。200~60000 の範囲で指定します。下限を下回る値は拒否され、下限値が使われます。 |
LRCLIB_TIMEOUT_MS | 15000 | リクエストのタイムアウトです。1000~120000 の範囲で指定します。 |
LRCLIB_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数です。0~10 の範囲で指定します。 |
LRCLIB_CACHE_TTL_MS | 900000 | レスポンスをメモリに保持する時間です。0~86400000 の範囲で指定します。 |
LRCLIB_CACHE_MAX_ENTRIES | 200 | 同時にメモリへ保持するレスポンス数です。0~10000 の範囲で指定します。 |
LRCLIB_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。標準エラー出力に書き込まれます。 |
範囲外の値はデフォルト値に戻され、その理由が標準エラー出力に書き込まれます。
エラー
各失敗には、6 種類のコードのいずれかとメッセージが含まれます。また、役立つ場合は次に行う操作の案内も含まれます。
| コード | 発生した内容 | 対処方法 |
|---|---|---|
not_found | LRCLIB から応答がありましたが、この曲は含まれていません。 | search_tracks でスペルを確認してください。 |
invalid_input | リクエストの前に引数が拒否されました。 | 引数名が示されているメッセージを確認してください。 |
rate_limited | LRCLIB がこのクライアントにリクエストを減らすよう求めています。 | 指定された秒数待ってから、同じ引数で再度呼び出してください。曲は引き続き利用できます。 |
upstream_error | LRCLIB から、このクライアントが読み取れない形式で応答がありました。 | 障害トラッカーで報告してください。 |
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 とその貢献者に帰属します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。