mcp-libraryofcongress について
mcp-libraryofcongressは、米国議会図書館のカタログやデジタルコレクションをチャットクライアントから検索するMCPサーバーです。スキャン新聞の本文検索や資料レコードの取得に対応し、APIキーやアカウントは不要です。
主な機能
- 01スキャン新聞本文の検索
- 02項目別カタログ検索
- 03権利情報と所蔵場所の取得
- 04デジタルコレクションの一覧
活用シーン
- 01地域や年代を指定した新聞記事の調査
- 02写真・地図・書籍の主題検索
- 03資料の権利と原本の所蔵場所の確認
- 04テーマに関連するデジタルコレクションの探索
MCP 対応
MCPサーバーとして、新聞検索、カタログ検索、資料レコード取得、コレクション一覧のツールをクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
4掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | 一致結果のページ番号です。1 から始まります。 |
| limit | integer | いいえ | 返す一致件数。 |
| query | string | はい | 検索する語句または引用符で囲んだ語句です。例:'"cure for influenza"'。インデックスはページ上のテキストを読み取り、1 文字も保持するため、1 文字のクエリにも対応します。 |
| year_to | integer | いいえ | 最終年です。指定した年を含みます。 |
| location | string | いいえ | 新聞の出版州です。図書館の表記に従って指定します:'new york'、'district of columbia'。このツールが返す一致結果の 'state' が持つ値です。 |
| year_from | integer | いいえ | 開始年です。指定した年を含みます。 |
| publication | string | いいえ | 町名と発行年を含む新聞名です:'new-york tribune (new york [n.y.]) 1866-1924'。ここでの一致結果の 'publication'、または media_type が 'newspapers' の search_items のタイトルから表記を取得してください。 |
| max_excerpt_chars | integer | いいえ | 1 つの該当箇所に割り当てる文字数。'max_excerpts_per_match' と合わせて確認してください。回答のサイズは、これら 2 つの値の積に一致数を掛けたものです。 |
| max_excerpts_per_match | integer | いいえ | 一致ごとに保持する段落数です。一致語句がページ内に複数回現れると複数の段落が得られますが、後の段落に最初の段落にない情報が含まれることはほとんどありません。 |
詳細
mcp-libraryofcongress
アメリカ議会図書館は米国の国立図書館で、所蔵資料の多くをオンラインで公開しています。書籍、写真、地図、録音、原稿、そして18世紀までさかのぼるアメリカの新聞の紙面などがあります。新聞の紙面はスキャンされ、光学文字認識処理が施されているため、紙面に印刷された言葉を検索できます。また、キュレーターが資料をデジタルコレクションにまとめ、それぞれを独立したコレクションとして記述・公開しています。
このサーバーは、チャットクライアントを同図書館に接続します。新聞に印刷された言葉を検索したり、タイトル、作成者、主題、場所、言語で目録を検索したり、権利に関する記述と原資料の所蔵場所を含む記録を1件読んだり、デジタルコレクションの一覧を取得したりできます。APIキーもアカウントも必要ありません。
インストール
ワンクリックでインストール
Claude Code
claude mcp add libraryofcongress -- npx -y mcp-libraryofcongress
Claude Desktop、Cursor、および標準設定形式を使うすべてのクライアント
{
"mcpServers": {
"libraryofcongress": {
"command": "npx",
"args": ["-y", "mcp-libraryofcongress"]
}
}
}
Node 24以降が必要です。環境変数を設定する必要はありません。
Docker を使う場合
{
"mcpServers": {
"libraryofcongress": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-libraryofcongress:3.0.2"]
}
}
}
-i はプロトコルが通る標準入力を開いたままにするために指定し、TTYはストリームを書き換えるため、-t は指定しません。コンテナに必要なのは、www.loc.gov と chroniclingamerica.loc.gov への HTTPS 外向き通信のみです。ボリューム、ポート、認証情報は不要です。
npm を使わずにバンドルを利用する
最新リリースから mcp-libraryofcongress-3.0.2.mcpb をダウンロードして開いてください。MCP バンドルに対応するクライアントであれば、npm も設定ファイルの編集も不要で、自動的にインストールされます。バンドルには依存関係が含まれているため、インストール時に何かをダウンロードする必要はありません。
質問できること
- 「オクラホマ州の新聞は、1907年の州昇格投票について何を書いていましたか?」
- 「1920年以前のシカゴの長屋の写真を探してください。」
- 「その記録を読み、原本の所蔵者を教えてください。」
- 「南北戦争に関するデジタルコレクションにはどのようなものがありますか?」
- 「その写真を再利用できますか?」
通常の手順では、検索から記録へ進みます。各行には identifier があり、get_item でその記録を読み取ります。
ツール
| ツール | 機能 |
|---|---|
search_newspapers | スキャンされた新聞ページに印刷された語句を検索します。 |
search_items | タイトル、作成者、主題、場所、言語でカタログを検索します。 |
get_item | 1件の記録、その権利情報、原本の所蔵場所を読み取ります。 |
list_collections | キュレーターが公開したデジタルコレクションを一覧表示します。 |
search_newspapers
スキャンされた新聞ページのテキストを検索します。テキストは光学文字認識によってページから読み取られたものです。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | 文字列、1~300文字 | はい | ページ上で検索する語句です。 |
location | 文字列、最大120文字 | いいえ | 新聞が発行された場所です。 |
publication | 文字列、最大200文字 | いいえ | 新聞1紙です。 |
year_from | 整数、1000~9999 | いいえ | 開始年です(その年を含みます)。 |
year_to | 整数、1000~9999 | いいえ | 終了年です(その年を含みます)。 |
limit | 整数、1~25、デフォルトは 10 | いいえ | 返す一致件数です。 |
page | 整数、1~100、デフォルトは 1 | いいえ | 一致結果のページ番号です。 |
max_excerpt_chars | 整数、80~1200、デフォルトは 300 | いいえ | 返す抜粋の最大文字数です。 |
max_excerpts_per_match | 整数、1~10、デフォルトは 3 | いいえ | 一致したページごとに返す抜粋数です。 |
返される内容: get_item で取得できる identifier を含む hits、title、スキャンを提供した図書館を示す creator、year、号内のページを示す page_number、published_on、新聞の発行期間を含む publication、state、excerpts、excerpt_kind です。
excerpt_kind は、抜粋をどのように解釈すべきかを示します。 passage は、一致した語句を中心とする、その語句の前後のテキストです。page_opening はページの冒頭です。図書館が行とともに返したテキストが、一致語句の出現箇所より前で終わっているために返されます。一致語句は含まれていないため、引用すると別の箇所を引用することになります。また、source_url を開くと、クエリが適用された状態でそのページが表示されます。total は新聞のページ数を数え、ページ分けの対象になります。語句の出現回数ではありません。
search_items
カタログを、対象の種類ごとに検索します。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
query | string、1~300文字 | はい | 検索する語句です。 |
media_type | books、photos、maps、audio、manuscripts または newspapers | いいえ | 検索するカタログです。 |
year_from | integer、1000~9999 | いいえ | 含める最も古い年です。 |
year_to | integer、1000~9999 | いいえ | 含める最も新しい年です。 |
subject | string、最大120文字 | いいえ | 件名です。 |
location | string、最大120文字 | いいえ | 場所です。 |
language | string、最大120文字 | いいえ | 英語で記述する言語です。 |
collection | string、最大160文字 | いいえ | list_collections での名称を指定したコレクションです。 |
online_only | boolean、既定値は true | いいえ | オンラインで利用できるレコードに限定します。 |
sort | relevance、newest、oldest または title、既定値は relevance | いいえ | 行の並び順です。 |
limit | integer、1~50、既定値は 10 | いいえ | 返す行数です。 |
page | integer、1~100、既定値は 1 | いいえ | 表示する行のページです。 |
返される内容: identifier、title、creator、year、出版時の
date(多くの場合は期間)、is_collection、source_url を含む items です。
Library では対象の種類ごとにカタログを保持しているため、media_type を指定せずに
検索すると一般カタログが参照され、total にはそこで条件に一致したレコード数が
含まれます。
get_item
1 件のレコードを読み込みます。詳細な情報はデフォルトでは返されず、必要に応じて指定します。また、長い説明はページ分割されます。
| 引数 | 型 | 必須 | 内容 |
|---|---|---|---|
identifier | 1~300 文字の文字列 | はい | レコードに付与されている識別子です。 |
sections | basic、citations、resources、full_metadata の配列。デフォルトは ["basic"] | いいえ | 返す情報の項目を指定します。 |
offset | 0 以上の整数。デフォルトは 0 | いいえ | 説明の続きを読み込む位置です。 |
max_description_chars | 200~20000 の整数。デフォルトは 2000 | いいえ | 返す説明の文字数です。 |
返される内容: title、creator、year、date、format、source_url を含むレコードに加え、description、subjects、location、language、収蔵コレクションや部門を示す part_of、原本の所蔵先を示す repository、call_number、rights が含まれます。レコードで値が空のフィールドは null になります。長い説明の続きを取得するには next_offset を使います。説明の末尾では null になります。識別子にはスラッシュを含められます。新聞の各号は、新聞名、日付、版を組み合わせて識別します。
list_collections
デジタルコレクションを一覧表示します。デジタルコレクションとは、学芸員が選定、記述し、まとめて公開した資料群です。
| 引数 | 型 | 必須 | 内容 |
|---|---|---|---|
limit | 1~50 の整数。デフォルトは 20 | いいえ | 返すコレクション数です。 |
page | 1~100 の整数。デフォルトは 1 | いいえ | コレクションのページを指定します。 |
searchable_only | ブール値。デフォルトは false | いいえ | 検索対象を絞り込めるコレクションに限定します。 |
max_description_chars | 80~2000 の整数。デフォルトは 300 | いいえ | 各説明の文字数です。 |
返される内容: collections が返されます。各コレクションには、参照に使うスラッグである identifier、title、search_items に指定する条件の文言である collection_filter、searchable_media_types、description、item_count、主題を示す subjects、収蔵資料の種類を示す formats、source_url が含まれます。total は Library が公開しているコレクション数を示します。この数は返された件数より多くなる場合があります。
スキャンされたテキストの価値
新聞の紙面に印刷された文字は、光学文字認識によって読み取られているため、抜粋にはその処理による誤読が含まれる場合があります。修正せず、読み取られたままの状態で提供されます。引用する際はスキャンされたテキストとして引用し、読者が紙面そのものを確認できるよう、ページへのリンクを付けてください。
権利
各レコードには rights に権利情報が記載されており、Library の利用規約は資料の寄託ごとに異なります。再利用する前にその記載を確認し、表示する内容のそばに併記してください。
設定
すべての変数は省略可能です。クライアント設定の env ブロックに設定してください。
| 変数 | デフォルト | 機能 |
|---|---|---|
LOC_USER_AGENT | プロジェクトの識別情報 | Library にアプリケーション名と、連絡可能な担当者の連絡先を伝えます。 |
LOC_MIN_INTERVAL_MS | 6000 | 2 つのリクエスト間の間隔です。3000~60000 の範囲で指定します。 |
LOC_TIMEOUT_MS | 30000 | 1 回のリクエストの期限です。1000~120000 の範囲で指定します。 |
LOC_NEWSPAPER_TIMEOUT_MS | 90000 | 新聞検索の期限です。1000~300000 の範囲で指定します。 |
LOC_MAX_RETRIES | 3 | 一時的な障害の後に再試行する回数です。0~8 の範囲で指定します。 |
LOC_CACHE_TTL_MS | 900000 | 結果をメモリに保持する時間です。0~86400000 の範囲で指定します。 |
LOC_CACHE_MAX_ENTRIES | 200 | 一度にメモリに保持する結果の数です。1~5000 の範囲で指定します。 |
LOC_LOG_LEVEL | error | silent、error、info、debug のいずれかです。stderr に出力されます。 |
範囲外の値はデフォルト値に戻され、その理由が stderr に出力されます。
エラー
すべての失敗には、6 種類のコードのいずれかとメッセージが含まれます。また、役立つ場合は次の操作を示すヒントも含まれます。
| コード | 発生したこと | 対処方法 |
|---|---|---|
not_found | Library は応答しましたが、該当するレコードはありません。 | search_items で識別子を確認してください。 |
invalid_input | リクエストが送信される前に、引数が拒否されました。 | 引数を示しているメッセージを読んでください。 |
rate_limited | Library がこのクライアントに速度を落とすよう求めました。 | ヒントに示された秒数待ってから、同じ引数で再度呼び出してください。レコードは引き続き存在します。 |
parse_failure | このクライアントが読み取れない形式で応答が届きました。 | イシュートラッカーで報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストが期限を超過しました。 | 新聞検索の場合は LOC_TIMEOUT_MS、または LOC_NEWSPAPER_TIMEOUT_MS の値を増やしてください。 |
ライブラリとして
Library を読み取るレイヤーは、独自の間隔制御、キャッシュ、エラー処理を備え、プロトコルに依存しない形で単独で公開されています。
import { LocClient } from "mcp-libraryofcongress/client";
const client = new LocClient();
const { data, cached } = await client.searchItems({ query: "tenement", mediaType: "photos" });
console.log(data.total, cached);
各読み取りは { data, cached } を返し、6 種類のコードのいずれかを含むエラーをスローします。リクエスト間の最小間隔もここで適用されます。
リクエスト間隔と出典表示
Library は API に対して毎分 20 リクエスト、サイト全体に対して毎分 10 リクエストの制限を公開しており、低い方が適用されます。リクエストは一度に 1 件ずつ送信し、間隔を少なくとも 6 秒空けます。また、サーバーの設定にかかわらず、3 秒の下限が適用されます。User-Agent は必ずプロジェクトの識別情報と、連絡可能な担当者のアドレスで終わります。
すべての結果には、読み取り元のページのアドレスが含まれます。Library of Congress は公的機関であり、その記録にはそれぞれの権利情報が記載されています。
この MCP サーバーは非公式プロジェクトであり、Library of Congress とは一切関係ありません。
プライバシー
このサーバーはユーザーに関する情報を収集せず、作成者に何かを送信することもありません。お使いのマシン上で動作し、www.loc.gov と chroniclingamerica.loc.gov にのみ接続します。動作中は回答をメモリ内に保持し、ディスクには何も書き込みません。
PRIVACY.md には、リクエストに含まれる情報と、それに影響する設定が記載されています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストは生成されたフィクスチャに対して実行され、ネットワークリクエストは行いません。ライブテストスイートの
npm run test:live は各ルートに対して 1 件ずつリクエストを行い、Library 自体に対して毎晩実行されます。
コントリビューション
バグ、質問、アイデアは イシュートラッカーへお寄せください。 プルリクエストも歓迎します。まずイシューを作成しておくと、変更内容の方向性について合意しやすくなります。CONTRIBUTING.mdをご覧ください。
ライセンス
MIT です。LICENSEをご覧ください。記録は、それぞれに記載された権利に基づき、Library of Congress および記録内に名前が記載された寄贈者に帰属します。
mcp-libraryofcongress(フランス語版)
Library of Congress は米国の国立図書館であり、蔵書の多くをオンラインで公開しています。書籍、写真、地図、録音、手稿、そして 18 世紀以降のアメリカの新聞の紙面が含まれます。新聞の紙面はデジタル化された後、光学文字認識にかけられているため、印刷された単語を検索できます。また、学芸員が資料をデジタルコレクションにまとめており、各コレクションは独立したまとまりとして説明され、公開されています。
このサーバーは、会話型クライアントをこの図書館に接続します。新聞に印刷された単語を検索したり、タイトル、著者、主題、場所、言語でカタログを検索したり、権利条件や原本の所蔵場所とともに書誌情報を読んだり、デジタルコレクションを一覧表示したりできます。API キーもアカウントも必要ありません。
インストール
ワンクリックインストール
Claude Code
claude mcp add libraryofcongress -- npx -y mcp-libraryofcongress
Claude Desktop、Cursor、および標準構成形式に対応するすべてのクライアント
{
"mcpServers": {
"libraryofcongress": {
"command": "npx",
"args": ["-y", "mcp-libraryofcongress"]
}
}
}
Node 24 以降が必要です。環境変数の設定は不要です。
Docker を使用
{
"mcpServers": {
"libraryofcongress": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-libraryofcongress:3.0.2"]
}
}
}
-i は、プロトコルのチャネルである標準入力を開いたままにします。-t は TTY がストリームを書き換えるため省略します。コンテナには www.loc.gov と chroniclingamerica.loc.gov への HTTPS 外向きアクセスだけが必要です。ボリューム、ポート、認証情報は必要ありません。
npm なしでバンドル
最新のリリース
から mcp-libraryofcongress-3.0.2.mcpb をダウンロードして開いてください。MCP バンドルに対応したクライアントなら、npm を使わず、変更が必要な設定ファイルもなく、自動でインストールします。バンドルには依存関係が含まれているため、インストール時に何もダウンロードされません。
どんなことを尋ねられるか
- 「1907年の州昇格の投票について、オクラホマの新聞には何と書かれていますか?」
- 「1920年より前のシカゴの賃貸用集合住宅の写真を探してください。」
- 「この目録レコードを読んで、原本を保管しているのは誰か教えてください。」
- 「南北戦争に関するデジタルコレクションには何がありますか?」
- 「この写真を再利用できますか?」
通常の流れは、検索から目録レコードへ進むことです。各行には identifier があり、get_item でそのレコードを読み取れます。
ツール
| ツール | 機能 |
|---|---|
search_newspapers | デジタル化された新聞ページに印刷された語句を検索します。 |
search_items | タイトル、著者、主題、場所、言語で目録を検索します。 |
get_item | 目録レコード、権利情報、原本の保管場所を読み取ります。 |
list_collections | キュレーターが公開しているデジタルコレクションを一覧表示します。 |
search_newspapers
光学文字認識によって得られた、デジタル化された新聞ページのテキストを検索します。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | 文字列、1~300文字 | はい | ページ上で検索する語句です。 |
location | 文字列、最大120文字 | いいえ | 新聞の発行地です。 |
publication | 文字列、最大200文字 | いいえ | 特定の新聞です。 |
year_from | 整数、1000~9999 | いいえ | 含まれる最も古い年です。 |
year_to | 整数、1000~9999 | いいえ | 含まれる最も新しい年です。 |
limit | 整数、1~25、デフォルトは 10 | いいえ | 返す一致件数です。 |
page | 整数、1~100、デフォルトは 1 | いいえ | 一致結果のページ番号です。 |
max_excerpt_chars | 整数、80~1200、デフォルトは 300 | いいえ | 返す抜粋の長さです。 |
max_excerpts_per_match | 整数、1~10、デフォルトは 3 | いいえ | 一致したページごとに返す抜粋数です。 |
返される内容: hits。それぞれに identifier(get_item で使用)、title、creator(デジタル化を提供した図書館)、year、page_number(その号のページ番号)、published_on、新聞の発行年を示す publication、state、excerpts、excerpt_kind が含まれます。
excerpt_kind は抜粋の内容を示します。 passage は、見つかった語句の前後を中心としたテキストです。page_opening はページの冒頭部分です。図書館がその行とともに返すテキストが、該当語句の前で途切れる場合に返されます。該当語句は含まれないため、これを引用すると別の内容を引用することになります。source_url を開くと、検索クエリが適用されたページが表示されます。**total は新聞のページ数を数え、ページ分割の対象となります。**語句の出現回数を数えるものではありません。
search_items
カタログを検索します。一度に検索できる資料の種類は1つです。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
query | 文字列、1〜300文字 | はい | 検索する語句です。 |
media_type | books、photos、maps、audio、manuscriptsまたはnewspapers | いいえ | 検索するカタログです。 |
year_from | 整数、1000〜9999 | いいえ | 含める最も古い年です。 |
year_to | 整数、1000〜9999 | いいえ | 含める最も新しい年です。 |
subject | 文字列、最大120文字 | いいえ | 件名標目です。 |
location | 文字列、最大120文字 | いいえ | 場所です。 |
language | 文字列、最大120文字 | いいえ | 英語で記述した言語です。 |
collection | 文字列、最大160文字 | いいえ | list_collectionsでの名称によるコレクションです。 |
online_only | ブール値、既定値はtrue | いいえ | オンラインで利用できるレコードのみを対象にします。 |
sort | relevance、newest、oldestまたはtitle、既定値はrelevance | いいえ | 結果の並び順です。 |
limit | 整数、1〜50、既定値は10 | いいえ | 取得する結果の数です。 |
page | 整数、1〜100、既定値は1 | いいえ | 取得する結果のページです。 |
戻り値: items。各項目にはidentifier、title、creator、year、
公開時の表記(多くの場合は期間)を示すdate、is_collection、source_urlが含まれます。
この図書館では資料の種類ごとにカタログを用意しているため、media_typeを指定せずに検索すると
総合カタログが対象になり、totalには一致するレコードの総数が表示されます。
get_item
書誌情報を取得します。容量の大きい項目は、デフォルトでは返されず、要求する必要があります。長い説明はページ分割されます。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
identifier | 文字列、1~300文字 | はい | 項目が持つ識別子です。 |
sections | basic、citations、resources、full_metadata の配列、デフォルトは ["basic"] | いいえ | 返す項目です。 |
offset | 0以上の整数、デフォルトは 0 | いいえ | 説明の続きを取得する位置です。 |
max_description_chars | 200~20000の整数、デフォルトは 2000 | いいえ | 返す説明の長さです。 |
返される内容: title、creator、year、date、format、source_url に加えて、description、subjects、location、所蔵するコレクションや区分を示す part_of、原本の保管場所を示す repository、call_number、rights を含む書誌情報です。書誌情報に値がないフィールドは null になります。長い説明の続きを取得するには next_offset を使います。説明の末尾では null になります。識別子にはスラッシュが含まれる場合があります。新聞の号は、紙名、日付、版を組み合わせて識別します。
list_collections
デジタルコレクションを一覧表示します。デジタルコレクションとは、学芸員が選び、記述し、まとめて公開した資料群です。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
limit | 1~50の整数、デフォルトは 20 | いいえ | 返すコレクション数です。 |
page | 1~100の整数、デフォルトは 1 | いいえ | 取得するコレクションのページです。 |
searchable_only | ブール値、デフォルトは false | いいえ | 検索対象を絞り込めるコレクションだけに限定します。 |
max_description_chars | 80~2000の整数、デフォルトは 300 | いいえ | 返す各説明の長さです。 |
返される内容: collections。各コレクションには、コレクションを指定するスラッグである identifier、title、search_items で使用する絞り込み条件を示す collection_filter、searchable_media_types、description、item_count、subjects、収録資料の種類を示す formats、source_url が含まれます。total は、図書館が公開しているコレクションの総数を示します。返される件数を超える場合があります。
デジタル化されたテキストについて
新聞のページに含まれる語句は光学文字認識によって抽出されるため、抜粋にはこの処理による読み取り誤りが含まれます。修正せず、読み取られたまま返します。デジタル化されたテキストとして引用し、読者が紙面そのものを確認できるよう、ページへのリンクを付けてください。
権利
書誌情報には rights に権利情報が記載されており、図書館の利用条件はリポジトリによって異なります。再利用する前にこの記載を確認し、表示する内容とともに明記してください。
設定
各変数は省略可能です。クライアント設定の env ブロックに設定します。
| 変数 | デフォルト | 説明 |
|---|---|---|
LOC_USER_AGENT | プロジェクトの識別情報 | ライブラリに対してアプリケーション名を示し、担当者への連絡先を提供します。 |
LOC_MIN_INTERVAL_MS | 6000 | リクエスト間の間隔です。3000~60000 の範囲で指定します。 |
LOC_TIMEOUT_MS | 30000 | リクエストのタイムアウトです。1000~120000 の範囲で指定します。 |
LOC_NEWSPAPER_TIMEOUT_MS | 90000 | 新聞の検索のタイムアウトです。1000~300000 の範囲で指定します。 |
LOC_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数です。0~8 の範囲で指定します。 |
LOC_CACHE_TTL_MS | 900000 | 応答をメモリに保持する時間です。0~86400000 の範囲で指定します。 |
LOC_CACHE_MAX_ENTRIES | 200 | 同時にメモリに保持する応答数です。1~5000 の範囲で指定します。 |
LOC_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。エラー出力に書き込みます。 |
範囲外の値はデフォルト値に戻り、その理由がエラー出力に書き込まれます。
エラー
各失敗には、6 つのコードのいずれかとメッセージが含まれます。また、役立つ場合は次に行う操作も示されます。
| コード | 発生したこと | 対応 |
|---|---|---|
not_found | ライブラリは応答しましたが、その記録は見つかりませんでした。 | search_items で識別子を確認してください。 |
invalid_input | リクエストを送信する前に、引数が拒否されました。 | 引数名が示されたメッセージを確認してください。 |
rate_limited | ライブラリから、このクライアントのリクエストを減らすよう求められました。 | 指定された秒数だけ待って、同じ引数で再度呼び出してください。記録は引き続き存在します。 |
parse_failure | 応答を受信しましたが、ここでは読み取れない形式でした。 | 課題トラッカーで報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストがタイムアウトしました。 | LOC_TIMEOUT_MS を増やしてください。新聞の検索の場合は、LOC_NEWSPAPER_TIMEOUT_MS を増やしてください。 |
ライブラリとして
ライブラリを読み取るレイヤーは、独自の間隔、キャッシュ、エラー処理を備え、プロトコルに依存せず単独で公開されています。
import { LocClient } from "mcp-libraryofcongress/client";
const client = new LocClient();
const { data, cached } = await client.searchItems({ query: "tenement", mediaType: "photos" });
console.log(data.total, cached);
各読み取りは { data, cached } を返し、6 つのコードのいずれかを持つエラーをスローします。リクエスト間の最小間隔もここで適用されます。
リクエスト頻度と帰属表示
このライブラリが公表している API の上限は毎分20リクエスト、サイト全体の上限は毎分10リクエストです。適用されるのは低いほうの上限です。リクエストは1件ずつ送信され、少なくとも6秒の間隔を空けます。また、設定にかかわらず、最低でも3秒の間隔を空けます。User-Agent は常に、プロジェクトの識別情報と担当者への連絡先で終わります。
各結果には、読み取ったページのアドレスが記載されています。Library of Congress は公的機関であり、その所蔵記録にはそれぞれの権利が記載されています。
この MCP は非公式のプロジェクトであり、Library of Congress とは提携していません。
プライバシー
このサーバーはユーザーに関する情報を収集せず、作者にも何も送信しません。お使いのマシン上で動作し、www.loc.gov と chroniclingamerica.loc.gov にのみ接続します。動作中は応答をメモリに保持し、ディスクには何も書き込みません。PRIVACY.md には、リクエストに含まれる情報と、その内容を変更する設定が記載されています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストでは生成されたフィクスチャを使用し、リクエストは一切送信しません。ライブテストのスイート npm run test:live は、各ルートにつき1件のリクエストを送信し、毎晩、ライブラリ自体を対象に実行されます。
貢献
不具合の報告、質問、アイデアは、課題トラッカーにお寄せください。変更の提案も歓迎します。まずチケットを作成すると、変更内容について合意しやすくなります。CONTRIBUTING.mdをご覧ください。
ライセンス
MIT です。LICENSEをご覧ください。所蔵記録の権利は Library of Congress と、各記録に記載された提出者に帰属し、それぞれの記録に記載された権利が適用されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。