Govdata Mcp について
GovData MCPは、米国、英国、カナダ、オーストラリアの政府ポータルからデータセットを検索・確認・取得するMCPサーバーです。各ポータルの違いを共通のツール操作で扱い、行のプレビューやリソース取得も提供します。
主な機能
- 014か国の政府データセット検索
- 02データセットのメタデータとリソース確認
- 03CSV/TSVの行プレビュー
- 04リソース内容やダウンロードリンクの取得
- 05stdioとHTTPの2種類のトランスポート
活用シーン
- 01特定テーマの政府データの検索
- 02データセットのファイルとメタデータの確認
- 03ダウンロード前の表データのプレビュー
MCP 対応
ポータル一覧、データセット検索・確認、リソースのプレビューと取得を行う読み取り専用ツールをMCPクライアントに公開します。ローカルのstdioとステートレスなstreamable-httpに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
GovData MCP
AI エージェントが各国政府のデータポータルからオープンデータセットを検索、調査、取得できる Model Context Protocol(MCP)サーバーです。米国、英国、カナダ、オーストラリアを横断する統一されたツールインターフェースを提供し、各ポータル特有の仕様(API の移行、認証の制約、バイリンガルのメタデータ、古い DataStore フラグ)は共通のアダプターレイヤーで吸収します。
一般的なエージェントのワークフローに合わせて設計されています。「X に関する政府のデータセットはありますか?」→候補を見つける→ファイルを確認する→行をプレビューするかダウンロードリンクを取得して次へ進む。
主な機能
- 4 つの国別ポータルを 1 つのインターフェースで利用できます。 米国(data.gov v4 / DCAT)、英国(data.gov.uk / CKAN)、カナダ(open.canada.ca / CKAN)、オーストラリア(data.gov.au / CKAN + DataStore)。
- トークンの使用量を抑える設計です。 説明文は HTML を除去して長さを制限し、検索結果は簡潔な概要にまとめ、大きなファイルを誤ってインライン表示しないようにしています。
- 行レベルでプレビューできます。 利用可能な場合は CKAN DataStore(オーストラリア)を使用し、それ以外のポータルでは CSV/TSV ファイルの先頭を読み取る方式に透過的にフォールバックします。
- エージェントに適したエラー処理です。 エラーは実行可能な対処法を含むテキスト(「代わりに
get_download_linkを使用してください」「dataset_idを指定して再試行してください」「利用可能なポータル:…」)で返し、生のトレースバックは返しません。 - 拡張可能なレジストリです。 CKAN ベースのポータルは設定項目を 1 つ追加するだけで対応でき、CKAN 以外のポータルは小規模なアダプタークラスで接続できます。
- 2 種類のトランスポートに対応します。 ローカルクライアント(Claude Desktop など)には
stdio、サーバーレス環境へのデプロイにはステートレスなstreamable-httpを使用できます(Google Cloud Run)。
対応ポータル
| コード | ポータル | API | 検索 | 調査 | 行のプレビュー | 備考 |
|---|---|---|---|---|---|---|
us | data.gov | data.gov v4 (DCAT) | ✅ | ✅ | CSV フォールバック | 無料の api.data.gov キーが必要です |
uk | data.gov.uk | CKAN | ✅ | ✅ | CSV フォールバック | リソースの検索には親の dataset_id が必要です |
ca | open.canada.ca | CKAN | ✅ | ✅ | CSV フォールバック | バイリンガルのタイトルを英語に正規化します |
au | data.gov.au | CKAN + DataStore | ✅ | ✅ | ✅ DataStore | テキストフィルタリングを使用した全行クエリに対応します |
要件
- Python 3.11+
- 米国のポータルには api.data.gov API キーが必要です(無料。他のポータルには認証情報は不要です)
インストール
git clone https://github.com/YOUR_ORG/Gov-Stat-MCP-Server.git
cd Gov-Stat-MCP-Server
# pip
pip install -e ".[dev]"
# or conda
conda env create -f environment.yml
conda activate opendata-mcp
.env.example を .env にコピーし、キーを設定します。
DATAGOV_API_KEY=your-api-data-gov-key
はじめに
ほとんどの MCP クライアント向けの標準設定です(stdio トランスポート)。
{
"mcpServers": {
"govdata": {
"command": "govdata-mcp",
"env": {
"DATAGOV_API_KEY": "your-api-data-gov-key"
}
}
}
}
Claude Code
claude mcp add govdata -e DATAGOV_API_KEY=your-key -- govdata-mcp
Claude Desktop
MCP のインストールガイドに従い、上記の標準設定を使用します。注:govdata-mcp が Claude Desktop の使用する PATH に含まれている必要があります。必要に応じて、仮想環境または conda 環境内の実行ファイルの絶対パスを指定してください。例:/path/to/envs/mcp-env/bin/govdata-mcp。
Cursor / Windsurf / その他の JSON 設定対応クライアント
クライアントの MCP 設定ファイルで上記の標準設定を使用します。
HTTP トランスポート(リモート/長時間稼働サーバー)
HTTP モードでサーバーを実行します。
MCP_TRANSPORT=http govdata-mcp
次に、クライアントの接続先としてエンドポイントを指定します。
{
"mcpServers": {
"govdata": {
"url": "http://localhost:8080/mcp"
}
}
}
想定されるエージェントのフロー:list_portals → search_datasets → get_dataset → preview_resource / fetch_resource / get_download_link。
探索
-
list_portals
- 説明:利用可能な政府のオープンデータポータルと、その機能を一覧表示します。
- パラメーター:なし
- 読み取り専用:true
-
search_datasets
- 説明:ポータル上のデータセットを全文検索します。データセット ID を含む簡潔な概要を返します。
- パラメーター:
portal(string):ポータルコード —us、uk、ca、auquery(string):検索語。例:"air quality monitoring"limit(number, optional):最大結果数(デフォルト 10、最大 50)org(string, optional):公開者/組織のスラッグによるフィルター(CKAN ポータル)format(string, optional):リソース形式によるフィルター。例:"CSV"(CKAN ポータル)
- 読み取り専用:true
詳細確認
-
get_dataset
- 説明:組織、ライセンス、タグ、説明、ID・形式・サイズを含むダウンロード可能なリソースの一覧など、データセットの完全なメタデータを取得します。
- パラメーター:
portal(string):ポータルコードdataset_id(string):search_datasetsで取得したデータセット ID/スラッグ
- 読み取り専用:true
-
preview_resource
- 説明:表形式のリソースから行をプレビューします。まずポータルの DataStore を試し(行数の取得とテキストによるフィルタリング)、利用できない場合は CSV/TSV ファイルの先頭を読み取ります。表形式以外の形式はプレビューできません。
- パラメーター:
portal(string):ポータルコードresource_id(string):get_datasetで取得したリソース IDrows(number, optional):返す行数(デフォルト 20、最大 100)query(string, optional):行の全文フィルター(DataStore を利用するリソースのみ)dataset_id(string, optional):親データセット ID — 指定を推奨。ukでは必須
- 読み取り専用:true
取得
-
fetch_resource
- 説明:小さなテキストリソース(CSV/JSON/XML/…)をダウンロードし、サイズ上限に達した場合は行の途中で切れないように切り詰めて、内容をインラインで返します。バイナリコンテンツは拒否し、ダウンロード URL を案内します。
- パラメーター:
portal(string):ポータルコードresource_id(string):get_datasetで取得したリソース IDmax_kb(number, optional):インラインで返す最大サイズ(KB)(デフォルト 256、上限 512)dataset_id(string, optional):親データセット ID — 指定を推奨。ukでは必須
- 読み取り専用:true
-
get_download_link
- 説明:エージェントが独自に処理を進められるよう、リソースの直接ダウンロード URL、形式、サイズを返します。大容量ファイルやバイナリファイルを含む、あらゆる形式に対応しています。
- パラメーター:
portal(string):ポータルコードresource_id(string):get_datasetで取得したリソース IDdataset_id(string, optional):親データセット ID — 指定を推奨。ukでは必須
- 読み取り専用:true
設定
すべての設定は環境変数(またはローカルの .env ファイル)で指定します。
| 変数 | デフォルト | 説明 |
|---|---|---|
MCP_TRANSPORT | stdio | stdio(ローカルクライアント)または http(streamable-http サーバー) |
PORT | 8080 | HTTP トランスポートのリッスンポート(Cloud Run では自動的に設定されます) |
DATAGOV_API_KEY | — | 米国ポータル用の api.data.gov キー。未設定の場合は DEMO_KEY にフォールバックします(約 30 リクエスト/時) |
LOG_LEVEL | INFO | ログの詳細度(常に stderr に出力) |
HTTP_TIMEOUT_SECONDS | 30 | ポータルへの送信リクエストのタイムアウト |
HTTP_MAX_RETRIES | 2 | 一時的なポータルエラー(5xx/トランスポートエラー)発生時の再試行回数。指数バックオフを使用 |
SEARCH_DEFAULT_LIMIT | 10 | 検索結果のデフォルト件数 |
NOTES_TRUNCATE_CHARS | 200 | 検索結果の概要における説明文の切り詰め文字数 |
FETCH_MAX_BYTES | 524288 | インラインで返すリソースコンテンツの最大サイズ |
Docker
make docker-build # build image
make docker-run # run on :8080, exactly as Cloud Run would
このイメージはステートレスモードで HTTP トランスポートを実行し、サーバーレスプラットフォームに対応しています(Google Cloud Run のデプロイスクリプトが deploy/ に含まれています)。
開発
make run # stdio mode
make run-http # HTTP mode on :8080
make inspect # MCP Inspector interactive UI (requires Node.js)
make test # offline unit tests
make test-live # live end-to-end tests against all four real portals
make lint # ruff check + format check
ライブテストスイート(pytest -m live)では、国ごとの検索 → 詳細確認 → プレビュー → 取得の一連の処理に加え、ポータル固有の動作(カナダのバイリンガル正規化、英国のデータセット単位のリソース検索、オーストラリアの DataStore パス)を検証します。デプロイ前に実行してください。政府のポータルは予告なく変更されることがあります。
アーキテクチャ
src/govdata_mcp/
├── server.py # FastMCP instance + tool registration
├── config.py # env-driven settings
├── ckan/ # generic async CKAN client, models, typed errors
├── portals/
│ ├── registry.py # portal registry — single source of truth
│ ├── base.py # Portal config + default (vanilla CKAN) adapter
│ ├── us.py # data.gov v4 DCAT adapter (auth, cursor paging)
│ ├── uk.py # dataset-scoped resource lookup
│ └── ca.py # bilingual metadata normalization
├── tools/ # MCP tools: search, explore, fetch
└── utils/ # formatting (token economy), CSV-head preview
ポータルの追加: 標準的な CKAN ポータルの場合は、portals/registry.py に Portal(...) エントリーを 1 つ追加すれば完了です。独自の仕様があるポータルでは、PortalAdapter をサブクラス化し、限定的なフック(normalize_dataset、build_search_params)をオーバーライドします。CKAN 以外の API の場合は、操作メソッド自体をオーバーライドします(カスタムアダプター全体の例は us.py を参照してください)。
TODO / ロードマップ
- 🇨🇳 中国のポータル対応 — 全国統一のオープンデータ API がないため、国家統計局のデータを対象としたカスタムアダプターを、既存の統計パッケージ経由で実装する予定です。適切に機能を縮退させます。
- 🇯🇵 日本のポータル対応 — e-Gov データポータル(data.e-gov.go.jp)は CKAN 互換で、既存のレジストリに追加できる見込みです。より充実した e-Stat 統計 API(アプリ ID 認証、日本語のメタデータ)は、専用アダプターとして実装する予定です。
- CI 向けにポータルのフィクスチャを記録したオフラインの単体テストスイート(respx)
- Google Cloud Run のデプロイ手順(サービスはコンテナー対応済み。スクリプトは
deploy/にあります) - 米国 v4 の発行元/形式検索フィルター(API ドキュメント待ち)
- CKAN ポータルの追加(ニュージーランドの data.govt.nz はほぼ手間なく追加できます)
- 誤った形式ラベルが付いたリソースを救済するためのコンテンツタイプ判定
セキュリティに関する注意事項
- このサーバーからポータルへの操作は読み取り専用です。作成、変更、削除を行うツールはありません。
fetch_resourceとpreview_resourceは、ポータルのメタデータに含まれる URL からダウンロードします。コンテンツはサイズ制限とバイナリチェックを適用してからモデルに返しますが、取得したコンテンツは信頼できない入力として扱ってください。- サーバー自体に認証機能はありません。リモートにデプロイする場合は、認証プロキシまたはプラットフォームレベルの認証の背後に配置してください(例:
--no-allow-unauthenticatedを指定した Cloud Run)。 DATAGOV_API_KEYは.envまたはシークレットマネージャーで管理し、絶対にコミットしないでください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。