mcpField
U
UK National Archives Discovery

UK National Archives Discovery

ローカル
github.com/ianderso法務・行政03 週間前に更新

UK National Archives Discovery について

家系調査者やアーカイブ研究者向けに、英国国立公文書館の Discovery カタログと英国各地の所蔵情報を検索する読み取り専用 MCP サーバーです。WO 97 の退役軍人記録を専用検索し、項目を解析して所蔵番号や引用情報も返します。

主な機能

  1. 01カタログの記述と所蔵情報の検索
  2. 02IDまたは参照番号による詳細取得
  3. 03階層下の記録の閲覧
  4. 04WO 97 の兵士記録の絞り込みと解析
  5. 05リクエスト予算の確認

活用シーン

  1. 01兵士の WO 97 年金記録の検索
  2. 02日付やシリーズによる歴史記録の絞り込み
  3. 03引用用の所蔵番号の取得

MCP 対応

stdio 経由で読み取り専用ツールを MCP クライアントに提供し、Discovery API を検索します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ianderso-tna-discovery": {
"command": "uvx",
"args": [
"tna-discovery-mcp"
],
"env": {
"TNA_DISCOVERY_TIMEOUT": "<TNA_DISCOVERY_TIMEOUT>",
"TNA_DISCOVERY_MIN_INTERVAL": "<TNA_DISCOVERY_MIN_INTERVAL>",
"TNA_DISCOVERY_DAILY_BUDGET": "<TNA_DISCOVERY_DAILY_BUDGET>",
"TNA_DISCOVERY_CONTACT": "<TNA_DISCOVERY_CONTACT>",
"TNA_DISCOVERY_STATE_DIR": "<TNA_DISCOVERY_STATE_DIR>"
}
}
}
}
起動コマンドuvx tna-discovery-mcp
設定が必要な環境変数
TNA_DISCOVERY_TIMEOUTHTTP timeout in seconds for one request.
TNA_DISCOVERY_MIN_INTERVALLeast seconds between two requests. Never below 1, TNA's guideline.
TNA_DISCOVERY_DAILY_BUDGETRequests a day (UTC) before tools refuse. At most 3000, TNA's guideline.
TNA_DISCOVERY_CONTACTAn email address or URL appended to the User-Agent, so The National Archives can reach whoever runs the server.
TNA_DISCOVERY_STATE_DIRDirectory for the day's call count, the one file the server writes (a date and a number).

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypitna-discovery-mcp0.1.0

ツール

5

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
pageintegerいいえ結果ページ番号。1 から始まります。
sortenumいいえ並べ替え方法。関連度が同じ結果はページごとに入れ替わります。'reference' または 'date' でページ分けしてください。relevance | reference | date | date_descending
countintegerいいえ1ページあたりの件数(1~100)。
querystringいいえ記述内で検索する語。例:'atkinson manchester'。すべての語が一致する必要があります。OR、NOT、"phrases"、末尾の * が使用できます。
seriesstringいいえシリーズコード。例:'WO 97' または 'PROB 11'。
date_tostringいいえ所蔵期間の終了日:'1834' または '1834-12-31'。
held_bystringいいえ'tna' は TNA 自身の記録、'other' はほかのアーカイブの記録を指定します。または '182' などの Archon コードを指定します。デフォルトはすべてです。
date_fromstringいいえ所蔵期間の開始日:'1831' または '1831-06-15'。
departmentstringいいえTNA の部門コード。例:'WO' または 'HO'。

詳細

tna-discovery-mcp

CI PyPI

英国国立公文書館(TNA)の目録である Discovery 用のMCPサーバーです。Kewに所蔵されている記録の3,700万件以上の記述に加え、英国各地およびその周辺にある2,500を超える他の公文書館の目録を、TNAのキー不要のDiscovery APIを通じて検索できます。

家系調査をする人にとって、目録は英国兵士、遺言書、召集名簿、郡記録事務所の文書を最初に見つける場所です。特定のシリーズには専用のツールがあります。WO 97は、1760年から1854年までに年金を受けて退役したすべての兵士について、標準形式の一文(「JOHN ATKINSON Born MANCHESTER, Lancashire Served in Royal Artillery Discharged aged 41」)で記載する、Royal Hospital Chelseaの兵士の従軍記録です。find_soldierは名前で検索し、連隊、出生地、退役年が一致する人物を絞り込み、それぞれの情報を推定出生年とともにフィールドに解析します。

このサーバーは、注意深い系図調査者と同じように機能します。目録の記述は検索の手掛かりです。記録が存在することと、その所在を示すものであり、記録の内容そのものではありません。Discoveryでは、ほとんどのシリーズの画像は無料で閲覧できません。WO 97の画像はFindmypastにあり、FamilySearchのコレクション1952868にはその索引があります。各検索結果には所蔵公文書館、参照番号、記録のDiscoveryページが含まれます。引用するのはこのサーバーではなく、公文書館の参照番号だからです。

nara-catalog-mcpに相当する英国版です。このサーバーから何かを書き込むことはなく、家系図を保存することもありません。

これは独立したプロジェクトです。The National Archivesとは提携しておらず、同機関から承認や支援を受けていません。

ツール

このサーバーは5つのツールを公開しています。すべて読み取り専用です。

ツール目的
search_records目録の記述を、キーワード、シリーズ(WO 97)、部門(WO)、対象期間、所蔵機関(TNA、他の公文書館、またはArchonコードで指定した公文書館)で検索します。各検索結果には、ID、参照番号、記述、対象期間、所蔵機関、digitisedフラグ、ページが含まれます。WO 97の項目は解析もされます。所蔵機関、公文書館、世紀ごとの件数を報告します。
get_recordIDまたは正確な参照番号(WO 97/1211/256)で、記述を1件、全文取得します。Discoveryが提供するすべてのフィールド、階層内の位置(部門、シリーズ、冊子)、記録の閲覧場所、引用情報が含まれます。WO 97の項目は、元のテキストを保持しながら、名前、出生地、郡、連隊、退役時の年齢と年、従軍年数、推定出生年に解析されます。
browseシリーズ、副シリーズ、または冊子の1つ下の階層にある記録を、目録順にカーソル付きで表示します。カーソルを使って続きを取得できます。WO 97では、1つの連隊に属する兵士の冊子を、WO 12では連隊と年ごとの召集名簿を表示します。
find_soldierWO 97を姓(末尾に*を付けると異形も検索)、名、退役年、連隊、出生地で検索し、一致する各項目を解析します。読み取った記述数と、残りを除外した理由を示します。
budget_status今日のリクエスト数、日次予算、このセッションのリクエスト数、直近のエラーを表示します。リクエストは行いません。

セットアップ

Python 3.11以降とuvが必要です。申請するキーはありません。

クローンせずに使う場合。 uvxがPyPIから取得し、1つの手順で実行します。

uvx tna-discovery-mcp

クローンから使う場合。変更を加える予定がある場合はこちらを使います。

git clone https://github.com/ianderso/tna-discovery-mcp
cd tna-discovery-mcp
uv sync
uv run tna-discovery-mcp   # stdio server, usually launched by the client

どちらの場合も、サーバーはstdio経由でMCPを使用します。そのため、通常は手動で実行するのではなく、MCPクライアントから起動します。

Claude Desktop
{
  "mcpServers": {
    "tna-discovery": {
      "command": "uvx",
      "args": ["tna-discovery-mcp"]
    }
  }
}

デスクトップアプリでは、シェルのPATHが常に引き継がれるとは限りません。uvxが見つからずサーバーを起動できない場合は、which uvxで表示されるフルパスをcommandとして指定してください。

Claude Code
claude mcp add tna-discovery -- uvx tna-discovery-mcp
TNA は皆さまからの連絡を求めています

TNA の API ページでは、開発者に対し、リクエストの送信元となる IP アドレスを添えてメールで連絡するよう求めています。「メールでお問い合わせのうえ、IP アドレスをお知らせください」と記載されています。このサーバーを構築した時点では、IP アドレスを伝えなくても API から応答がありました。そのため、これはアクセスの条件ではなく、依頼です。このサーバーを定期的に利用する場合は、[email protected] 宛てに IP アドレスと、API の用途を簡単に添えてご連絡ください。TNA は API に関するフィードバックも求めています。

設定

必須の設定はありません。サーバーの起動ディレクトリにある .env ファイルで、環境変数に設定されていない値を指定できます。読み込まれるのはそのディレクトリだけです。

変数意味
TNA_DISCOVERY_TIMEOUT1 回のリクエストに対する HTTP タイムアウト(秒)。デフォルトは 30 です。
TNA_DISCOVERY_MIN_INTERVAL2 回のリクエスト間に空ける最短の秒数。デフォルトは 1 で、TNA のガイドラインに従い、1 未満にはできません。
TNA_DISCOVERY_DAILY_BUDGETいずれのツールも budget_spent を返してリクエストを拒否するまでの 1 日(UTC)あたりのリクエスト数。デフォルトは 3,000 で、TNA のガイドラインに従い、これを超える値にはできません。余裕を持たせるには、より低い値を設定してください。
TNA_DISCOVERY_CONTACTTNA が利用状況に問題を感じた場合に連絡できるよう、User-Agent に追加するメールアドレスまたは URL。任意ですが、連絡先を記載するのが望ましいです。
TNA_DISCOVERY_STATE_DIRその日の呼び出し回数を保存する場所。デフォルトは ~/.local/state/tna-discovery-mcp です。このファイルに保存されるのは日付と数値のみで、API が返した情報は保存されません。

使用できない値がある場合、最初のツール呼び出し時に、該当する変数名を示す not_configured 結果が返されます。意図的にキャッシュディレクトリは設けていません。詳しくは以下をご覧ください。

TNA の利用規約と、サーバーでの遵守方法

TNA のDiscovery API の利用規約(2026-10-10 および 2026-10-11 に確認)には、要約すると次のように記載されています。

  • ライセンス。 カタログ情報は、個人、教育、商用の用途でオープン・ガバメント・ライセンス v3.0に基づいて使用できます。
  • リクエスト頻度。 「ガイドラインとして、1 日あたりの API 呼び出しは 3,000 回を超えないようにしてください」。また、呼び出しは 1 秒に 1 回以下とし、TNA は「API 呼び出し数をより厳格に制限する場合があります」。このサーバーは 1 回ずつリクエストを送信し、少なくとも 1 秒間隔を空けます。また、再試行や失敗を含むすべてのリクエストを、1 日あたりの予算 3,000 回から差し引きます。この予算は、同じ状態ディレクトリを使うすべてのセッションで共有される台帳で管理されます。その日の予算を使い切ると、ツールは budget_spent を返し、UTC の午前 0 時までリクエストを送信しません。budget_status で回数を確認できます。
  • キャッシュ禁止。 「API から返されたコンテンツをキャッシュしたり、保存したりしないでください」。このサーバーはキャッシュを保持しません。API が返した情報をディスクに書き込んだり、呼び出し間で保持したりすることはありません。同時に実行される同一の呼び出しは 1 回のリクエストを共有しますが、それ以外はありません。引用には参照情報とレコードのページが含まれ、保存済みのコピーは含まれません。そのため、呼び出しを繰り返すたびにリクエストが消費されます。これが予算が重要な理由です。
  • IP アドレスとフィードバックは、「お願いします」という形で依頼されています。詳しくは「TNA は皆さまからの連絡を求めています」をご覧ください。
  • 利用規約では、許可なく TNA のロゴを使用すること、API を違法または名誉毀損にあたる目的で使用することも禁止されています。また、TNA は技術サポートを提供せず、可用性も保証しないとしています。

discovery.nationalarchives.gov.uk の robots.txt では、ウェブサイトの閲覧、結果、検索インターフェース、画像などのパスがクロール禁止になっていますが、このサーバーが使用する /API/ については記載されていません。

Discovery は置き換えられる可能性があります。 2025 年後半、TNA は新しいカタログのベータ版を公開しました。将来的に Discovery に取って代わる可能性があります。このサーバーは Discovery API のみを利用します。Discovery が終了した場合、後継サービスに対応する新しいクライアントが必要になります。

返ってくる情報の読み方

  • 説明は記録を見つける手がかりです。 記録の存在、参照番号、日付を示します。文書そのものにはさらに詳しい情報が記載されています(WO 97 の除隊記録には年齢、身長、職業、除隊理由が記載されています)。引用するのは文書そのものです。get_record の images で閲覧先を確認できます。
  • WO 97 の画像は Discovery 上にはありません。 有料の Findmypast にあり、FamilySearch collection 1952868 で索引が作成されています。digitised と表示された記録には、Discovery のページから開ける画像が Discovery 自体にあります。このサーバーは何もダウンロードしません。
  • 同じ名前でも同一人物とは限りません。 WO 97 には、よくある名前の男性が何十人も記録されています。記録を人物に結び付ける前に、連隊、出生地、日付を照合してください。
  • 記録期間は文書の最初と最後の日付です。 通常は入隊日と除隊日です。WO 97 の項目に日付が1つだけある場合は、それが何の日付か(「記録期間は除隊年を示す」または「…入隊年を示す」)が記され、解析済みのフィールドもそれに従います。推定出生年は、除隊年から除隊時の年齢を引いた年で、前後1年のずれがあり得ます。
  • 日付フィルターは期間の重複を対象にします。 date_from と date_to は、記録期間が指定範囲と重なる記録を残すため、1811~1835年に従軍した男性は、1831~1834年の検索にも含まれます。その後、find_soldier は除隊年が範囲内の男性だけを残します。
  • 綴りには揺れがあります。 Discovery は入力されたとおりの語句で一致させます。「hargreaves」では「HARGRAVES alias HARGREAVES」が見つかりますが、「HARGRAVES」だけの記録は見つかりません。表記のバリエーションや、末尾に * を付けた語句を試してください。
  • WO 97 に記録されているのは年金受給者だけです。 従軍中に亡くなった男性、年金を受け取らずに退役した男性、士官は含まれません。1854年以降の WO 97 は、個人ごとではなく箱(連隊と姓の範囲)ごとに説明されているため、find_soldier ではそれ以降に除隊した人は見つかりません。代わりに資料群を browse してください。
  • 参照番号は正確に指定してください。 WO 97/1211/256 は、機関コード、スペース、シリーズ、資料番号、項目番号の順です。サーバーは大文字・小文字とスペースを整えます(wo97/1211 でも動作します)。それ以外の内容は推測されず、検索されます。
  • 関連度が同じ結果のページ順は入れ替わります。 件数の多い検索結果をページごとに確認するには、reference または date で並べ替えてください。
  • アーカイブの参照番号を引用してください。 citation.cite_as は所蔵機関と参照番号(「The National Archives, Kew, WO 97/1211/256」)です。シリーズのタイトル、記録期間、画像の閲覧先も追加してください。

意図的に含めていないもの

  • 画像のダウンロード。 Discovery 自体の画像はウェブサイト経由で取得し、ほとんどのシリーズの画像は別の場所にあります。サーバーは閲覧先を示します。
  • キャッシュ。 TNA はキャッシュを求めていません。
  • 他のアーカイブのウェブサイト。 他所が所蔵する記録は Discovery で説明されています。閲覧するには、そのアーカイブ独自の目録を使うか、訪問する必要があります。
  • 制限やボットチェックの回避。 チャレンジが発生すると blocked と報告され、予算を使い切ると budget_spent と報告されます。

セキュリティ

ツールの引数はモデルが作成します。また、モデルはこのサーバーが制御できないテキスト、つまりカタログの説明、ウェブページ、ほかのツールの出力を読み取ります。サーバーは、そうしたテキストがモデルを誘導する可能性を想定し、誘導されたモデルに実行させられる操作を制限しています。

  • 接続先ホストは1つです。 すべてのリクエストは https://discovery.nationalarchives.gov.uk/API/ に送信されます。リクエストフックは、リダイレクト先に指定されたホストも含め、それ以外のホストへの接続を拒否します。リダイレクト先として許可されるのもこのホストのみです。
  • 接続時に確認したパブリックアドレスのみ許可します。 プライベート、ループバック、リンクローカル、CGNAT、マルチキャスト、予約済み、または未指定のアドレス(IPv4、IPv6を問いません)につながる名前は拒否されます。また、接続先には確認済みのアドレスを使用するため、DNS リバインディングも効果がありません。環境変数のプロキシ設定は使用されません。
  • リクエスト前に引数を絞り込みます。 ID とシリーズコード、部門コードはパターンで制限し、日付は完全な ISO 日付形式に限定します。参照番号は1つのパスセグメントとしてパーセントエンコードし、検索語はクエリパラメーターとしてのみ使用します。
  • 応答サイズを制限します。 ストリーミング中に10 MBを超えた応答は拒否されます。
  • 書き込みは1種類のみです。 書き込まれるファイルは、その日の呼び出し回数を記録するファイルだけです。
  • カタログのテキストは信頼できないものとして扱います。 説明は加工せずモデルに渡されます。サーバーの指示では、モデルに対し、そのテキストを指示ではなく検討対象として扱うよう伝えています。ただし、最終的な判断はモデルが行うため、モデルが実行しようとする内容を確認してください。

脆弱性の報告については、SECURITY.md をご覧ください。

開発

uv sync --extra dev
uv run pytest                      # mocked with respx; never touches the API
uv run ruff check .
uv run ruff format --check .
uv run python -m tests.live_check  # paced calls to the live API

ライブチェックでは、記録済みのフィクスチャでは確認できない点、つまり Discovery の応答が現在もサーバーの読み取り可能な形式になっているかを確認します。テストスイートの構成については CONTRIBUTING.md、API について確認した内容とその時期については docs/API-NOTES.md、このようなサーバー設計にした理由については docs/DESIGN.md をご覧ください。

クレジット

このカタログは、The National Archives および説明を掲載している各アーカイブの所有物であり、Open Government Licence v3.0 に基づいて使用しています。「Contains public sector information licensed under the Open Government Licence v3.0.」

ライセンス

MIT。

コメント

MCP は初めてですか?

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

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