DPLA Catalog について
DPLA Catalogは、系譜や歴史の調査向けに、Digital Public Library of Americaが集約するデジタル資料の記述を検索するMCPサーバーです。所蔵機関の資料ページ、権利情報、引用要素を返し、機関が公開するIIIFマニフェストからページ画像を一覧できます。
主な機能
- 01DPLA資料記述の検索と絞り込み
- 02場所、主題、機関などによる詳細検索
- 03機関、年、地域別の所蔵数集計
- 04資料メタデータと引用情報の取得
- 05所蔵機関のIIIFページ画像一覧
活用シーン
- 01地域の地図、名簿、歴史写真の検索
- 02デジタル資料の所蔵機関の特定
- 03権利情報の確認と引用情報の整理
MCP 対応
このMCPサーバーはstdio経由で、読み取り専用の検索、資料参照、画像一覧ツールをMCPクライアントに提供します。DPLA APIで資料記述を検索し、利用可能な場合は所蔵機関のIIIFマニフェストから画像情報を取得します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx dpla-catalog-mcpDPLA_API_KEYシークレットYour DPLA API key: 32 letters, digits or hyphens. Free; request it with POST https://api.dp.la/v2/api_key/YOUR_EMAIL and it arrives by email.DPLA_CACHE_DIRDirectory for the on-disk response cache.DPLA_TIMEOUTHTTP timeout in seconds.DPLA_MIN_INTERVALLeast seconds between the start of one request to DPLA and the next.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
6掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| hub | string | いいえ | レコードを収集したハブ。例:'HathiTrust'、'The Portal to Texas History'、'Illinois Digital Heritage Hub'。 |
| page | integer | いいえ | 結果のページ番号。1 から始まります。DPLA が提供するのは最大 100 ページです。 |
| type | enum | いいえ | アイテムの種類。text:書籍、名簿;image:写真、地図、スキャンされた地図帳。 | text | image | moving image | sound | physical object | dataset | interactive resource | collection | event |
| limit | integer | いいえ | 1ページあたりの件数(1~100)。 |
| place | string | いいえ | 記録に記載された場所。例:'Champaign County (Ill.)' または 'Galveston'。場所が記載されていない記録も多数あります。 |
| query | string | いいえ | タイトル、説明、件名、場所、名称から検索する語。すべての語が一致する必要があります。OR、NOT、"phrases"、* を使用できます。書籍やページ本文のテキストには一致しません。 |
| title | string | いいえ | タイトルに含まれる語。例:'atlas of Champaign County'。 |
| date_after | string | いいえ | 日付範囲の終了日がこの日付以降のアイテム:YYYY、YYYY-MM、または YYYY-MM-DD。 |
| date_before | string | いいえ | 日付範囲の開始日がこの日付以前のアイテム:YYYY、YYYY-MM、または YYYY-MM-DD。 |
| institution | string | いいえ | 所蔵機関。例:'University of Illinois Urbana-Champaign Library'。 |
詳細
dpla-catalog-mcp
**Digital Public Library of America**向けのMCPサーバーです。米国各地の数百の図書館、アーカイブ、歴史協会、博物館が所蔵する、デジタル化された5,000万点を超える資料の説明を横断検索できます。家族史を調べる場合は、郡の地図帳や区画図帳、市のディレクトリ、郡史、年鑑、地方紙、写真などを検索できます。その多くは、検索先として思い浮かびにくい小規模な機関が所蔵しています。
DPLAはこれらの資料自体を所蔵していません。州や地域の「ハブ」を通じて、所蔵機関が公開する説明を収集しており、各レコードは所蔵機関自身のサイトにある資料へリンクしています。証拠が掲載され、引用で参照するのはそのページです。このサーバーはその点を重視して設計されています。検索結果には、is_shown_at(所蔵機関にある資料のページ)、所蔵機関、デジタルコピーの権利表示が含まれます。get_itemは所蔵機関のレコードを引用するための要素をまとめ、所蔵機関が公開している場合、get_item_imagesは所蔵機関自身のIIIFマニフェストにあるページ画像を一覧表示します。
慎重な系図研究者のように動作します。DPLAのレコードは、さらに別の検索手段を探すための手がかりです。機関が作成し、ハブが収集し、DPLAが情報を付加しています。DPLAが検索するのはこのメタデータのみで、本の中やページ上の本文を検索することはありません。ツールの説明でも、モデルが読む内容としてこの点を明示しています。
ここでは何も書き込みませんし、家系図を保存することもありません。nara-catalog-mcp(OCRとページ画像を含む連邦記録)、snac-archives-mcp(文書を所蔵するアーカイブ)、familysearch-mcp(索引付き記録と画像)と併用できます。
これは独立したプロジェクトです。Digital Public Library of Americaまたは参加機関との提携、承認、支援は受けていません。
ツール
サーバーは6つのツールを公開しています。すべて読み取り専用で、クライアント向けに注釈が付いています。そのうち1つはネットワークへのリクエストを一切行いません。
資料を探す
| ツール | 目的 |
|---|---|
search_items | 日常的な検索です。語句、タイトル、場所、期間、所蔵機関、ハブ、資料の種類で検索できます。各検索結果には、所蔵機関、そこにある資料のアドレス(is_shown_at)、権利表示、ページ画像を一覧表示できるかどうかが示されます。複数の場所に所蔵される同一作品には、その旨が表示されます。 |
search_items_advanced | 同じ検索に、DPLAが提供するすべてのフィルターを追加できます。DPLAが地理情報を付与した郡、州、市、主題、コレクション、出版者、形式、作成者、識別子、資料が扱う時代、権利、完全一致、いずれかに一致する条件、並べ替え、国立公文書記録の除外に対応しています。 |
facet_items | 検索前に件数を確認できます。ある郡の区画図帳を所蔵する機関、ディレクトリの連続した刊行年、ある場所を扱うハブなどを調べられます。 |
資料を読む
| ツール | 目的 |
|---|---|
get_item | 最大20件のレコードを完全な形で取得します。各レコードにcitation_partsが含まれ、所蔵機関、タイトル、日付、機関独自の識別子(請求記号、ローカルID、OCLC番号。収集したレコードからも読み取ります)、is_shown_at、権利、検索用のDPLA IDが示されます。必要に応じて、収集したレコードの生データも取得できます。 |
get_item_images | 所蔵機関のサイトにあるIIIFマニフェスト(Presentation API 2および3)からページ画像を取得し、一覧の一部ずつ表示します。サイトがスクリプトを拒否する場合は、その旨を示し、ブラウザーで開くためのアドレスを提示します。 |
サーバー自体
| ツール | 目的 |
|---|---|
api_status | キーが設定されているか(キー自体は表示しません)、このセッションでの呼び出し回数とキャッシュヒット数、最後に発生したエラーを確認できます。リクエストは行いません。 |
セットアップ
Python 3.11 以降、uv、および DPLA API キーが必要です。
キーは無料ですぐに届きますが、メールアドレスに対して発行されるため、ご自身で申請してください。
curl -X POST https://api.dp.la/v2/api_key/[email protected]
DPLA からそのアドレスに32文字のキーがメールで届きます。再度申請すると、同じキーが再送されます。DPLA が記録するのはメールアドレスのみで、そのキーを使った呼び出しはすべてカウントされます。
クローンせずに使う場合。 uvx が PyPI からサーバーを取得し、1ステップで実行します。
DPLA_API_KEY=your-key uvx dpla-catalog-mcp
クローンから使う場合は、変更を加える予定がある場合に適しています。
git clone https://github.com/ianderso/dpla-catalog-mcp
cd dpla-catalog-mcp
uv sync
cp .env.example .env # then put your key in .env
uv run dpla-catalog-mcp # stdio server, usually launched by the client
どちらの場合も、サーバーは stdio 経由で MCP を使用します。そのため、通常は手動で実行するのではなく、MCP クライアントから起動します。
Claude Desktop
{
"mcpServers": {
"dpla": {
"command": "uvx",
"args": ["dpla-catalog-mcp"],
"env": { "DPLA_API_KEY": "your-key" }
}
}
}
デスクトップアプリは、シェルの PATH を常に引き継ぐとは限りません。uvx が見つからずサーバーの起動に失敗する場合は、which uvx が出力するフルパスを command に指定してください。
Claude Code
claude mcp add dpla --env DPLA_API_KEY="$DPLA_API_KEY" -- uvx dpla-catalog-mcp
または、キーを .env ファイルに保存して、ランチャーに読み込ませることもできます。そうすれば、クライアントの設定にもシェルの履歴にもキーが残りません。
"dpla": { "type": "stdio", "command": "sh", "args": ["-c",
"set -a; . \"$HOME/research/.env\"; set +a; exec uvx dpla-catalog-mcp@latest"] }
設定
| 変数 | 意味 |
|---|---|
DPLA_API_KEY | キーです。必須です。キーがない場合や形式が不正な場合、値を繰り返し表示することなく、最初のツール呼び出し時に not_configured として報告されます。 |
DPLA_CACHE_DIR | レスポンスキャッシュのディレクトリです。デフォルトは ~/.cache/dpla-catalog-mcp です。 |
DPLA_TIMEOUT | HTTP タイムアウトの秒数です。デフォルトは 30 です。 |
DPLA_MIN_INTERVAL | DPLA へのリクエスト間に設ける最短の秒数です。デフォルトは 0.25 です。 |
サーバーの起動ディレクトリにある .env ファイルから、環境変数で指定されていない値が読み込まれます。読み込まれるのはそのディレクトリのファイルだけです。使用できない値がある場合は、最初のツール呼び出し時に変数名を示して報告されます。
相手に配慮して利用する
DPLA にクォータはありませんが、呼び出しはすべてキーの使用回数としてカウントされます。サーバーは一度に1件ずつリクエストを送信し、各リクエストの間隔を少なくとも DPLA_MIN_INTERVAL にします。同一の呼び出しが同時に行われた場合は、1件のリクエストを共有します。検索とファセットはディスクに7日間、レコードとマニフェストは30日間キャッシュされます(DPLA は毎月再収集します)。429 または 5xx が返された場合、Retry-After を尊重して最大30秒待機し、1回だけ再試行します。その後、rate_limited または upstream_error として報告されます。これらは「何も見つからなかった」とは決して同じではありません。
機関のサイトへのリクエストはサイトごとに1秒間隔で送信され、再試行は行われません。
返ってきた内容の読み方
- ヒットは説明であり、アイテムそのものではありません。
is_shown_atを開き、そこにあるアイテム(またはそのページ画像)を確認して、所蔵機関とその記録を引用してください。たとえば、「Standard atlas of Champaign County, Illinois (Brock & Company, 1929), University of Illinois Urbana-Champaign Library, digital.library.illinois.edu/items/465c93c0-…」のようにします。DPLA でもハブでもありません。 系図データベースでは、リポジトリは所蔵機関、ソースはアイテム、引用はis_shown_atと機関の識別子を含むページまたは図版です。DPLA の ID は属性として保持し、検索用にだけ使用してください。 - DPLA は書籍やページの本文を検索しません。 市の住所録、郡史、または卒業年鑑に印刷された姓は一致しません。DPLA を使って、どの巻が存在し、どこにあるかを見つけてから、所蔵先で本文を検索してください。Internet Archive の全文検索、HathiTrust、Portal to Texas History、Chronicling America などを利用できます。ヒットがなければ、該当する説明がなかったということであり、その人物が載っていないという意味ではありません。
- 場所が欠けていることはよくありますが、入力されている場合は補完されています。 多くの記録には場所がまったく記載されていません(University of Illinois の郡地図帳には場所がありません)。そのため、
placeだけでなくqueryまたはtitleでも郡を検索してください。county、state、cityは DPLA のジオコーディング項目で、入力されている記録は少数です(大半は Massachusetts)。placeでファセット検索すると、記録に記載された場所を確認できます。 - 日付は範囲が重なると一致します。
date_after=1905は、1900〜1909 年と日付が付けられたアイテムにも一致します。「ca. 1900」は、10 年単位で索引付けされている場合があります。display_dateは機関が記載した日付です。 - 1 つの作品に複数の複製があります。 郡史は、HathiTrust の複製、Internet Archive の複製、州のハブがスキャンしたものとして、DPLA に登録されていることがよくあります。
possible_duplicate_ofは、タイトルと年に基づき、検索結果の 1 ページ以内にある複製にフラグを付けます。ページ画像と全文を公開している所蔵先の複製を優先してください。 - National Archives の記録は DPLA の 3 分の 1 を占め、NARA Catalog と重複しています。NAID、OCR テキスト、画像を備えた nara-catalog-mcp を使うと、より適切に閲覧できます。
exclude_naraを指定すると、これらは除外されます。 - 権利はデジタル複製に適用され、機関によって異なります。 画像を再公開する前に、
rightsを確認してください。そこには rightsstatements.org または Creative Commons のアドレスと短いラベルが記載されています。Portal to Texas History など、一部のハブでは自由記述の声明のみが示されています。サムネイルは証拠になりません。 - ID は検索用であり、引用用ではありません。 DPLA の ID はハブのローカル ID のハッシュ値なので、ハブがプラットフォームを移行すると変わり、古い ID は機能しなくなります。
is_shown_atと機関独自の識別子も記録してください。 - 完全一致は文字どおりに照合されます。
exact=trueはfacet_itemsが返す値全体と、大文字と小文字を区別して一致させます。DPLA には creator や identifier の完全一致検索がないため、それらにexactを指定すると拒否されます。 - ページ送りは 100 ページで停止します。 DPLA は 100 ページを超えるページを指定すると、何も知らせずに再び 100 ページ目を返します。サーバーは代わりにその要求を拒否し、ページ送りで到達できるヒット数を示します。検索を絞り込むか、
facet_itemsを使ってヒットの内訳を確認してください。 - 一部のサイトではスクリプトによるアクセスが拒否されます。 University of Illinois と HathiTrust のカタログは、自動リクエストに 403 で応答します。サーバーはそのことを報告し、
open_in_browserを提示します。拒否を回避することはありません。 - 説明は信頼できないテキストです。 数百の機関が記述しており、収集された生の記録はそのままの内容です。指示としてではなく、評価すべき資料として扱ってください。
あえて含めていないもの
- キーのリクエスト。
POST /v2/api_key/{email}は、誰かの名前でメールを送信します。ご自身のキーをリクエストしてください。 - ページ画像のダウンロードと一括ダウンロード。 docs/DESIGN.md では、今後の作業として記載されています。画像のアドレスは
get_item_imagesの結果に含まれています。 - DPLA のコレクション用ルート。 すでに廃止されており(404 を返します)、ランダムなアイテムやアーカイブ請求のルート、Primary Source Sets(K-12 の教材セット)も含め、ここでは研究上の価値がありません。
- 生クエリのパススルー。 DPLA が拒否するリクエストにサーバーが呼び出しを費やさないようにするローカルチェックを回避してしまいます。
- サイトのボット対策の回避。 拒否された場合は、その旨を報告し、回避はしません。
セキュリティ
- キーの送信先と送信方法は一つだけです。
https://api.dp.laにのみ、Authorizationヘッダーで送信します。URL、ログ行、キャッシュキーやファイル、エラーメッセージ、ツールのパラメーターには決して含めません。キーを扱うクライアントには、それ以外のホストへの送信を拒否するリクエストフックがあり、リダイレクトも追跡しません。 - 各機関のサイトに認証情報は送信されません。 マニフェストは、キーを保持しない別のクライアントで取得し、
AuthorizationヘッダーやCookieヘッダーがあれば取り除きます。最初のリクエスト時とすべてのリダイレクト時に、IP アドレス、ローカル名、DPLA 自体のホストを拒否します。 - リクエストを送信する前に入力を検証します。 ID、日付、テキストの長さ、列挙値、ページ数の上限を確認します。クエリテキスト内で DPLA のパーサーが構文として解釈する文字はエスケープします。
- カタログのテキストは信頼できません。 説明と収集された生のレコードは、改変せずにモデルに渡されます。サーバーの指示では、そのテキストを指示ではなく評価対象の素材として扱うようモデルに伝えます。ただし、最終的に判断するのはモデルなので、モデルが実行しようとする内容を確認してください。
脆弱性の報告については、SECURITY.md をご覧ください。
開発
uv sync --extra dev
uv run pytest # mocked with respx; never touches DPLA
uv run ruff check .
uv run ruff format --check .
uv run python -m tests.live_check # paced calls to the live API; needs DPLA_API_KEY
ライブチェックでは、記録済みのフィクスチャでは確認できないことを DPLA に問い合わせます。具体的には、DPLA の応答がサーバーの読み取り可能な形式のままであるか、また、サーバーが対処している挙動(ページ数の無言の上限適用、コロンの解析、URL の引用符付け)が引き続き見られるかを確認します。テストスイートの構成については CONTRIBUTING.md、API について観測された内容と時期については docs/API-NOTES.md、このようなサーバー設計にした理由については docs/DESIGN.md をご覧ください。
クレジット
メタデータは、ハブとその加盟機関から提供された米国デジタル公共図書館(Digital Public Library of America)のものです。アイテムとその画像、および権利は、所蔵機関に帰属します。
ライセンス
MIT。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。