mcp-lyricscom について
mcp-lyricscomは、lyrics.comの歌詞カタログをチャットクライアントから検索するMCPサーバーです。歌詞の一節、曲名、アーティスト名で曲を探し、歌詞を分割して取得できます。APIキーやアカウントは不要です。
主な機能
- 01歌詞の語句から曲を検索
- 02曲名とアーティスト名で検索
- 03歌詞を分割して取得
- 04指定語句の歌詞内の位置を確認
活用シーン
- 01覚えている一節から曲を特定
- 02曲名とアーティスト名で歌詞を検索
- 03長い歌詞を順に読む
- 04語句が含まれる歌詞の行を確認
MCP 対応
MCPサーバーとして、歌詞検索、曲検索、歌詞取得のツールをクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
3掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | lyrics.com の結果ページ。各ページには最大 24 件の未加工の結果が含まれます。 |
| limit | integer | いいえ | このページで返す曲の最大数。 |
| query | string | はい | 歌詞内で検索する単語または短いフレーズ。例:'autrefois'。 |
| verify | enum | いいえ | 検索語が歌詞に実際に含まれるか確認する方法。'snippet' は lyrics.com がすでに返した抜粋を確認し、追加コストはかかりません。'full' は最大 5 件の曲ページを取得して歌詞全文を確認します。時間がかかり、レート制限が発生する可能性があります。'none' はフィルタリングを無効にします。snippet | full | none |
| include_excerpt | boolean | いいえ | 各結果に一致した歌詞行の抜粋を含めます。 |
詳細
mcp-lyricscom
lyrics.comは、歌詞を収録した大規模な公開カタログです。 曲はタイトル、アーティスト、収録アルバム、年で整理され、歌詞そのものも掲載されています。歌詞の本文を対象に検索できます。
このサーバーは、チャットクライアントをこのカタログに接続します。覚えている一節から曲を検索したり、タイトルとアーティストで検索したり、歌詞を一度に一部分ずつ読み、探していた言葉が本文のどこにあるかを確認できます。API キーもアカウントも必要ありません。
インストール
ワンクリックでインストール
Claude Code
claude mcp add lyricscom -- npx -y mcp-lyricscom
Claude Desktop、Cursor、および標準の設定形式を使用するクライアント
{
"mcpServers": {
"lyricscom": {
"command": "npx",
"args": ["-y", "mcp-lyricscom"]
}
}
}
Node 24 以降が必要です。環境変数の設定は不要です。
Docker を使用する場合
{
"mcpServers": {
"lyricscom": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-lyricscom:2.0.1"]
}
}
}
-iはプロトコルが流れる標準入力を開いたままにします。TTY はストリームを書き換えるため、-tは指定しません。コンテナにはwww.lyrics.comへの外向き HTTPS 接続だけが必要です。ボリューム、ポート、認証情報は必要ありません。
npm を使わずにバンドルを使用する場合
最新のリリースから
mcp-lyricscom-2.0.1.mcpbをダウンロードして開きます。MCP バンドルに対応したクライアントなら、npm も設定ファイルの編集も不要で、自動的にインストールされます。バンドルには依存関係が含まれているため、インストール時に何かを取得する必要はありません。
質問できること
- 「『I've got a hand for you』という歌詞の曲はどれですか?」
- 「Glen Campbell の Wichita Lineman の歌詞を探してください。」
- 「歌詞の後半を読んでください。」
- 「その曲のどこに「lineman」という単語が出てきますか?」
- 「その曲が収録されているアルバムは何ですか?」
通常は、検索してから歌詞を読む流れになります。検索結果の各行にはidが含まれており、get_lyricsにその ID を渡します。
ツール
| ツール | 機能 |
|---|---|
search_lyrics | 歌詞の一節から曲を検索します。 |
search_songs | タイトルで曲を検索し、アーティストで絞り込みます。 |
get_lyrics | 1 曲分の歌詞を一度に一部ずつ取得します。 |
search_lyrics
歌詞に含まれる言葉から曲を検索します。サイトのランキングは大まかなため、結果を返す前に一致を確認します。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | string, 1 to 120 characters | はい | 検索する一節、またはその一部です。 |
limit | integer, 1 to 50, default 10 | いいえ | 返す行数です。 |
page | integer, 1 to 20, default 1 | いいえ | 取得する行のページです。 |
verify | snippet, full or none, default snippet | いいえ | 歌詞に実際に言葉が含まれているか確認する方法です。 |
include_excerpt | boolean, default true | いいえ | 各行に一致した一節を含めます。 |
verify は、結果をどのように扱うかを決めます。snippet は、サイトがすでに返した抜粋を確認するため、追加コストはかかりません。full は最大 5 曲のページを取得して歌詞全体を確認します。そのため時間がかかり、レート制限が発生する可能性があります。none は、サイトがランキングした結果を確認せずに返します。
返される内容: get_lyrics が使用する id、title、artist、album、year(カタログに記載がない場合は null)、source_url、一致した一節である excerpt を含む行です。raw_result_count はサイトが返した件数、filtered_out は確認によって除外された行数です。この 2 つを合わせて、ランキングの精度を把握できます。has_more と next_page で続きを取得できます。
search_songs
タイトルで曲を検索し、アーティストで絞り込みます。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
title | string, 1 to 120 characters | はい | 曲のタイトル、またはその一部です。 |
artist | string, up to 120 characters | いいえ | このアーティストの曲に絞り込みます。 |
limit | integer, 1 to 50, default 10 | いいえ | 返す行数です。 |
page | integer, 1 to 20, default 1 | いいえ | 取得する行のページです。 |
match | loose or strict, default loose | いいえ | アーティスト名の一致条件です。 |
返される内容: search_lyrics が返す行と同じ内容に、指定した内容を反映する artist_filter と、アーティストの条件によって除外された件数を示す filtered_out が加わります。strict は入力どおりの名前に一致するアーティストを対象とし、loose は名前の表記が異なる場合も対象とします。
get_lyrics
1 曲の歌詞を読み込みます。長い歌詞は一度に一部ずつ取得します。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
id | string | 2 つのうち 1 つ | 検索結果の行に含まれる曲の ID です。 |
url | a lyrics.com URL | 2 つのうち 1 つ | 曲のページのアドレスです。 |
max_chars | integer, 200 to 20000, default 6000 | いいえ | この呼び出しで取得するテキストの文字数です。 |
offset | integer, 0 or more, default 0 | いいえ | 読み取りを再開する文字オフセットです。 |
highlight | string, up to 120 characters | いいえ | テキスト内で探す語句です。 |
返される内容: status(ok、またはサイトに歌詞なしで掲載されているページの場合は
no_lyrics)、title、artist、source_url、および歌詞の一部である
lyrics が返されます。読み取りの情報として total_chars、returned_chars、offset、
next_offset、truncated が含まれます。続きを読むには next_offset を渡してください。
null の場合は末尾です。line_count は取得した歌詞の行数を示し、highlight は各語句について
見つかったかどうかを found で、見つかった行番号を line_number で返します。
見つからなかった場合、line_number は null です。
設定
すべての変数は省略可能です。クライアント設定の env ブロックで設定してください。
| 変数 | デフォルト | 説明 |
|---|---|---|
LYRICSCOM_USER_AGENT | プロジェクト ID | アプリケーション名と、連絡可能な担当者のアドレスをサイトに通知します。 |
LYRICSCOM_MIN_INTERVAL_MS | 1100 | リクエスト間の間隔です。500~60000 の範囲で指定します。 |
LYRICSCOM_TIMEOUT_MS | 15000 | 1 回のリクエストのタイムアウトです。1000~120000 の範囲で指定します。 |
LYRICSCOM_MAX_RETRIES | 3 | 一時的なエラー発生後の再試行回数です。0~10 の範囲で指定します。 |
LYRICSCOM_CACHE_TTL_MS | 900000 | 応答をメモリに保持する時間です。0~86400000 の範囲で指定します。 |
LYRICSCOM_CACHE_MAX_ENTRIES | 200 | メモリに同時に保持する応答数です。0~10000 の範囲で指定します。 |
LYRICSCOM_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。stderr に出力されます。 |
範囲外の値を指定するとデフォルト値に戻り、その理由が stderr に出力されます。
User-Agent について。 このサーバーはプロジェクト名を通知し、リポジトリへのリンクを含めます。
サイトにはその情報が送信されます。一般的なツールエージェントの一部は明示的に拒否されます。
たとえば、通常の curl では 403 が返されます。blocked_user_agent エラーは識別情報が拒否されたことを
意味します。LYRICSCOM_USER_AGENT を使えば、任意の識別情報を設定できます。何を設定するかは、
ご自身の判断と責任にお任せします。
エラー
すべての失敗には、以下のいずれかのコード、メッセージ、必要に応じて次の対応を示すヒントが含まれます。
| Code | What happened | What to do |
|---|---|---|
not_found | サイトから応答がありましたが、その曲は見つかりませんでした。 | search_songs で ID を確認してください。 |
invalid_input | リクエストを送信する前に、引数が拒否されました。 | メッセージを読み、指定されている引数を確認してください。 |
throttled | サイトから、このクライアントはリクエストを抑えるよう求められました。 | しばらく待ってから、同じ引数で再度呼び出してください。曲は引き続き存在します。 |
blocked_user_agent | サイトから、このクライアントが送信した識別情報を拒否されました。 | LYRICSCOM_USER_AGENT を設定してください。 |
parse_failure | ページは読み込まれましたが、想定されるコンテンツがありませんでした。 | イシュートラッカー で報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストが期限を超過しました。 | LYRICSCOM_TIMEOUT_MS を増やすか、より小さい max_chars を指定してください。 |
throttled と blocked_user_agent は、このサーバーがサービス提供を拒否された状態を表す2つのコードです。複数のソースを読み取る呼び出し元では、これらをレート制限と呼ぶものにまとめます。
ライブラリとして
サイトを読み取るレイヤーは、独自のリクエスト間隔、キャッシュ、エラーを備え、プロトコルに依存せず単独で公開されています。
import { LyricsComClient } from "mcp-lyricscom/client";
const client = new LyricsComClient();
const { data, cached } = await client.getSong({ id: "1234567" });
console.log(data.title, data.artist, cached);
search と getSong はそれぞれ { data, cached } を返し、上記のいずれかのコードを含むエラーをスローします。2つのリクエスト間に設ける間隔は、ここでも適用されます。
リクエスト間隔とクレジット表記
リクエストは1つずつ送信され、最低1秒の間隔が空きます。また、サーバーの設定にかかわらず、最低0.5秒の間隔が確保されます。verify: "full" を指定した検索では、最大5ページの楽曲ページを取得します。これは、このサーバーが行う処理の中で最も負荷が高いものです。
すべての結果には、アーティスト名、タイトル、楽曲ページのアドレスが含まれます。歌詞の著作権は、その作者と出版社に帰属します。このプロジェクトは歌詞に関する権利を主張せず、歌詞のデータベースを同梱せず、ディスクにも何も書き込みません。
この MCP サーバーは非公式のプロジェクトであり、lyrics.com とは一切関係ありません。
プライバシー
このサーバーは、あなたに関する情報を収集せず、作者に何も送信しません。お使いのマシン上で実行され、www.lyrics.com 以外には接続しません。実行中は回答をメモリ上に保持し、ディスクには何も書き込みません。
PRIVACY.md には、リクエストに含まれる情報と、それらに影響する設定が記載されています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストでは生成されたフィクスチャを使用し、ネットワークリクエストは行いません。ライブテストスイートの npm run test:live は、各ルートにつき1回リクエストを行い、毎晩サイト自体を対象に実行されます。
コントリビューション
バグ、質問、アイデアは イシュートラッカー にお寄せください。プルリクエストも歓迎します。まずイシューを作成すると、変更内容について合意しやすくなります。CONTRIBUTING.md をご覧ください。
ライセンス
MIT です。LICENSE をご覧ください。歌詞の著作権は、その作者と出版社に帰属します。
mcp-lyricscom(フランス語)
lyrics.comは、歌詞を収録した大規模な公開カタログです。曲はタイトル、アーティスト、収録アルバム、発表年で整理され、歌詞そのものも掲載されています。歌詞の全文を対象に検索できます。
このサーバーは、会話クライアントをこのカタログに接続します。覚えている歌詞の一節から曲を検索したり、タイトルとアーティストで検索したりできます。また、検索した語句が本文中のどこにあるかを示しながら、曲の歌詞を分割して読むこともできます。API キーもアカウントも必要ありません。
インストール
ワンクリックインストール
Claude Code
claude mcp add lyricscom -- npx -y mcp-lyricscom
Claude Desktop、Cursor、および標準設定形式に対応するすべてのクライアント
{
"mcpServers": {
"lyricscom": {
"command": "npx",
"args": ["-y", "mcp-lyricscom"]
}
}
}
Node 24 以降が必要です。設定が必要な環境変数はありません。
Docker を使用する場合
{
"mcpServers": {
"lyricscom": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-lyricscom:2.0.1"]
}
}
}
-i は、プロトコルの通信路となる標準入力を開いたままにします。-t は、TTY がストリームを書き換えるため指定しません。コンテナに必要なのは、www.lyrics.com への HTTPS アウトバウンドアクセスだけです。それ以外は不要です。ボリューム、ポート、認証情報はいずれも必要ありません。
バンドル版(npm 不要)
最新リリースからmcp-lyricscom-2.0.1.mcpbをダウンロードして開きます。MCP バンドルに対応するクライアントなら、npm も設定ファイルの編集も不要で、自動的にインストールされます。バンドルには依存関係が含まれているため、インストール時にダウンロードは発生しません。
できること
- 「"I've got a hand for you"という歌詞の曲は何ですか?」
- 「Glen CampbellのWichita Linemanの歌詞を見つけてください。」
- 「この歌詞の後半を読んでください。」
- 「この曲のどこに"lineman"という語が出てきますか?」
- 「この曲はどのアルバムに収録されていますか?」
通常は検索してから読み込みます。検索結果の行にはidが含まれており、get_lyricsにその ID を渡して読み込みます。
ツール
| ツール | 機能 |
|---|---|
search_lyrics | 歌詞の一節から曲を検索します。 |
search_songs | タイトルで曲を検索し、アーティストで絞り込みます。 |
get_lyrics | 曲の歌詞を分割して読み込みます。 |
search_lyrics
歌詞に含まれる語句から曲を検索します。サイトの検索結果は広めに分類されるため、返す前に一致を確認します。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
query | 1~120文字の文字列 | はい | 検索する歌詞の一節、またはその一部です。 |
limit | 整数、1~50、デフォルトは10 | いいえ | 返す結果の数です。 |
page | 整数、1~20、デフォルトは1 | いいえ | 返す結果のページです。 |
verify | snippet、full、none、デフォルトはsnippet | いいえ | 語句の一致をどのように確認するかを指定します。 |
include_excerpt | ブール値、デフォルトはtrue | いいえ | 各結果に一致する歌詞の一節を含めます。 |
verifyによって、結果の判定方法が決まります。snippetは、サイトがすでに表示した抜粋を確認するため、追加の負荷はかかりません。fullは最大5ページ分の曲を取得し、歌詞全体を確認するため、時間がかかり、レート制限が発生する可能性があります。noneは確認せず、サイトが分類した結果を返します。
返される内容: get_lyricsで使用できるid、title、artist、album、year(カタログに情報がない場合はnull)、source_url、一致する歌詞の一節であるexcerptを含む結果です。raw_result_countはサイトが返した件数、filtered_outは確認によって除外された件数を示すため、両方を合わせて検索結果の分類がどれほど広かったかを把握できます。has_moreとnext_pageを使って、次の結果に進めます。
search_songs
アーティストで絞り込みながら、曲名で曲を検索します。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
title | 1~120文字の文字列 | はい | 曲のタイトル、またはその一部です。 |
artist | 最大120文字の文字列 | いいえ | このアーティストの曲だけに絞り込みます。 |
limit | 整数、1~50、デフォルトは10 | いいえ | 返す結果の数です。 |
page | 整数、1~20、デフォルトは1 | いいえ | 返す結果のページです。 |
match | looseまたはstrict、デフォルトはloose | いいえ | アーティスト名の一致条件の厳しさを指定します。 |
返される内容: search_lyricsが返す結果に、指定した内容を示すartist_filterと、アーティストによる絞り込みで除外された件数を示すfiltered_outが加わります。strictは名前が入力どおりに一致するアーティストを返します。looseは表記が異なる名前も許容します。
get_lyrics
曲の歌詞を読み込みます。長い歌詞は複数回に分けて返されます。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
id | 文字列 | いずれか一方 | 歌詞の行が持つ識別子です。 |
url | lyrics.com のアドレス | いずれか一方 | 曲のページのアドレスです。 |
max_chars | 整数、200~20000、デフォルトは 6000 | いいえ | この呼び出しで返すテキストの文字数です。 |
offset | 整数、0 以上、デフォルトは 0 | いいえ | 読み込みを再開する文字位置です。 |
highlight | 文字列、最大120文字 | いいえ | テキスト内で探す単語です。 |
戻り値: status は ok または、サイトにページはあるものの歌詞がない場合は
no_lyrics です。title、artist、source_url、および歌詞の
該当部分である lyrics が返されます。読み込み状況は total_chars、
returned_chars、offset、next_offset、truncated で示されます。
続きを読み込むには next_offset を再度指定してください。null は末尾を
示します。line_count は該当部分の行数を数えます。highlight は各単語が
found かどうかと、見つかった場合は line_number を返します。見つからない
場合は null です。
設定
すべての変数は省略可能です。クライアント設定の env ブロックに指定します。
| 変数 | デフォルト | 説明 |
|---|---|---|
LYRICSCOM_USER_AGENT | プロジェクトの識別情報 | サイトにアプリケーション名を伝え、人に連絡できるアドレスを提示します。 |
LYRICSCOM_MIN_INTERVAL_MS | 1100 | リクエスト間隔です。500~60000 の範囲で指定します。 |
LYRICSCOM_TIMEOUT_MS | 15000 | リクエストのタイムアウトです。1000~120000 の範囲で指定します。 |
LYRICSCOM_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数です。0~10 の範囲で指定します。 |
LYRICSCOM_CACHE_TTL_MS | 900000 | 応答をメモリに保持する期間です。0~86400000 の範囲で指定します。 |
LYRICSCOM_CACHE_MAX_ENTRIES | 200 | 同時にメモリに保持する応答数です。0~10000 の範囲で指定します。 |
LYRICSCOM_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。標準エラー出力に書き込みます。 |
範囲外の値はデフォルト値に戻され、その理由が標準エラー出力に書き込まれます。
User-Agent について。 このサーバーはプロジェクト名を示し、そのリポジトリへ
案内する User-Agent を使用しており、サイトはそれを受け入れます。一方、一部の
汎用ツールの User-Agent は拒否されます。単独の curl では 403 が返されます。
blocked_user_agent エラーは、送信された識別情報が拒否されたことを示します。
LYRICSCOM_USER_AGENT を使うと、任意の値を指定できます。何を設定するかは、
ご自身の判断と責任に委ねられます。
エラー
各エラーには、以下のコードのいずれかとメッセージが含まれ、役立つ場合は次に行う操作も示されます。
| コード | 発生した内容 | 対処方法 |
|---|---|---|
not_found | サイトは応答しましたが、その曲はありません。 | search_songs で識別子を確認してください。 |
invalid_input | リクエストを送信する前に引数が拒否されました。 | 引数名が記載されたメッセージを読んでください。 |
throttled | サイトから、このクライアントのリクエストを遅らせるよう求められました。 | 待ってから、同じ引数で再度呼び出してください。曲はまだ存在します。 |
blocked_user_agent | サイトから、このクライアントが送信した識別情報を拒否されました。 | LYRICSCOM_USER_AGENT を設定してください。 |
parse_failure | ページは読み込まれましたが、想定されるコンテンツがありません。 | 課題トラッカーで報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストがタイムアウトしました。 | LYRICSCOM_TIMEOUT_MS を増やすか、より小さい max_chars を指定してください。 |
throttled と blocked_user_agent は、このサーバーがサービス提供を拒否された場合に使う2つの名前です。複数のソースを読み取る呼び出し元は、これらをまとめてレート制限と呼びます。
ライブラリとして
サイトを読み取るレイヤーは、独自のリズム、キャッシュ、エラーを備えた状態で、プロトコルに依存せず単独で公開されています。
import { LyricsComClient } from "mcp-lyricscom/client";
const client = new LyricsComClient();
const { data, cached } = await client.getSong({ id: "1234567" });
console.log(data.title, data.artist, cached);
search と getSong はそれぞれ { data, cached } を返し、上記のコードのいずれかを持つエラーを送出します。リクエスト間の最小間隔もここで適用されます。
リクエスト間隔とクレジット表記
リクエストは1件ずつ送信され、間隔は少なくとも1秒です。設定にかかわらず、最小間隔は0.5秒です。verify: "full" を指定した検索では、最大5ページ分の曲を取得します。これは、このサーバーが行う処理の中で最も負荷が高いものです。
各結果には、アーティスト名、曲名、曲のページのアドレスが含まれます。歌詞の著作権は、それぞれの作者と出版社に帰属します。このプロジェクトは歌詞の権利を主張せず、歌詞データベースを同梱せず、ディスクにも何も書き込みません。
この MCP は非公式プロジェクトであり、lyrics.com とは関係ありません。
プライバシー
このサーバーはユーザーに関する情報を収集せず、作者に何も送信しません。お使いのマシン上で動作し、www.lyrics.com のみに接続し、動作中は応答をメモリに保持します。ディスクには何も書き込みません。PRIVACY.md では、リクエストに含まれる情報と、それを変更する設定について説明しています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストは生成されたフィクスチャを使って実行され、リクエストは送信されません。ライブテストスイートの npm run test:live は、各ルートに1件ずつリクエストを送信し、毎晩サイト自体を対象に実行されます。
貢献
不具合、質問、アイデアは課題トラッカーにお寄せください。変更の提案も歓迎します。まずチケットを作成すると、変更内容について合意しやすくなります。CONTRIBUTING.mdをご覧ください。
ライセンス
MIT です。LICENSEをご覧ください。歌詞の著作権は、それぞれの作者と出版社に帰属します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。