Data Gov Il について
data-gov-il-mcp は、イスラエル政府のオープンデータポータル data.gov.il 向けの MCP サーバーです。公式 CKAN API を通じて、データセット、リソース、タグ、組織、表形式のレコードに構造化してアクセスできます。ローカルの stdio と、リモートの Streamable HTTP の両方に対応しています。
主な機能
- 01カタログ優先のデータセット検索とライブ検索へのフォールバック
- 02データセット、リソース、組織のメタデータ取得
- 03データストアレコードの全文検索とフィルタリング
- 04ヘブライ語の正規化とあいまい検索
- 05任意で有効化できる Elicitation と Sampling
- 06API キーおよび OAuth 2.1 による認証
活用シーン
- 01イスラエル政府のデータセットの検索とレコードの照会
- 02組織やタグによる利用可能なデータの閲覧
- 03食品、環境、不動産などの分析プロンプトの実行
MCP 対応
このプロジェクトは MCP サーバーであり、既定で 9 個のツール(任意で 1 個追加)、5 個の静的リソースと 1 個のリソーステンプレート、3 個のドメイン別プロンプトをクライアントに公開します。リソースのサブスクリプションにも対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
data-gov-il-mcp
Model Context Protocol (MCP) に準拠した、data.gov.il のイスラエル政府オープンデータ向け本番品質 MCP サーバーです。
このサーバーは、公式 CKAN API を通じて、MCP 対応クライアントがイスラエル政府のデータセット、リソース、タグ、組織、表形式のレコードに構造化された方法でアクセスできるようにします。TypeScript で記述され、Zod で入力と出力を検証し、JSON を優先するツール応答を返します。また、ローカルの stdio とリモートの Streamable HTTP トランスポートの両方に対応しています。
主な特長
| 項目 | 状況 |
|---|---|
| MCP ツール | デフォルトで 9 個のツール、オプションの Sampling を有効にすると 10 個 |
| MCP リソース | 5 個の静的リソースと 1 個のデータセットリソーステンプレート |
| MCP プロンプト | 引数補完機能付きの 3 個のドメインプロンプト |
| ディスカバリー | ヘブライ語の正規化、あいまい検索、タグのランキング、共起分析に対応したインメモリカタログスナップショット |
| トランスポート | stdio と Streamable HTTP |
| 認証 | none、API キーのベアラー認証、OAuth 2.1 JWT/JWKS |
| HTTP セキュリティ強化 | Helmet、CORS、レート制限、リクエスト ID、Host/Origin 検証 |
| 応答 | structuredContent と、content[0].text 内の同一 JSON |
| ランタイム設定 | 環境変数による設定。起動時に Zod で検証 |
クイックスタート
Claude Desktop / ローカル Stdio
公開済みパッケージを直接使用します。
{
"mcpServers": {
"data-gov-il": {
"command": "npx",
"args": ["-y", "data-gov-il-mcp"]
}
}
}
Streamable HTTP
npm install -g data-gov-il-mcp
data-gov-il-mcp-http
次に、MCP クライアントを設定します。
{
"mcpServers": {
"data-gov-il": {
"url": "http://localhost:3664/mcp"
}
}
}
Docker
docker run -p 3664:3664 ghcr.io/davidosherproceed/data-gov-il-mcp:latest
ローカル開発の場合:
npm install
npm run build
npm run start:stdio
# or
npm run start:http
カタログディスカバリーレイヤー
このサーバーには、src/data/catalog/catalog.snapshot.json にコミット済みのカタログスナップショットが含まれています。このスナップショットは data.gov.il から生成され、ビルドにバンドルされます。起動時に検証され、メモリ内でインデックス化されます。
ディスカバリーレイヤーは次の機能を提供します。
find_datasets:カタログを優先して検索し、必要に応じて CKAN にライブフォールバックします。list_all_datasets:組織による任意のフィルターに対応した、ローカルでの即時一覧表示。list_organizations:データセット数を含む、ローカル組織一覧の即時表示。- 実際の CKAN タグ/ファセットデータに基づく
list_available_tagsとsearch_tags。 datagov://dataset/{id}の動的補完。datagov://tagsとdatagov://catalog/statsのリソース。
次の機能が含まれます。
- ニクードの削除や語末形の正規化を含む、ヘブライ語の正規化。
- あいまい一致と誤字への対応のための、トークン化とトライグラムインデックス。
- データセット、タグ、組織のマップ。
- タグからデータセット、および組織からデータセットへのインデックス。
- 関連タグの提案に使うタグの共起情報。
- 完全一致、トークン、タグ、組織、あいまい検索のシグナルに基づく重み付きランキング。
スナップショットを更新します。
npm run catalog:refresh
npm run build
スケジュール実行される GitHub Actions ワークフロー(.github/workflows/catalog-refresh.yml)がスナップショットを更新し、カタログデータに変更がある場合は PR を作成します。
詳細:docs/catalog-discovery-layer.md。
ツール
成功したツール応答はすべて、次の内容を返します。
structuredContent:型付き JSON オブジェクト。content[0].text:テキストのみのクライアント向けに JSON としてシリアライズされた同一のオブジェクト。
デフォルトのツール
| ツール | 目的 |
|---|---|
find_datasets | 主要なデータセット検索ツールです。まずローカルカタログを使用し、必要に応じて CKAN にライブでフォールバックします。 |
get_dataset_info | タグやリソースを含む、データセットの CKAN メタデータ全体を取得します。 |
list_all_datasets | カタログに基づくデータセットの概要をすばやく一覧表示します。任意で組織による絞り込みもできます。 |
list_resources | データセット内のファイル/データストアを一覧表示し、datastore_active リソースを特定します。 |
search_records | CKAN データストアのレコードを、全文検索、フィルター、フィールド、並べ替え、ページネーション、一意の値を指定して検索します。 |
list_organizations | ヘブライ語のタイトルとデータセット数を含む、カタログに基づく組織一覧を取得します。 |
get_organization_info | CKAN の組織メタデータをライブで取得します。 |
list_available_tags | データセット数と関連タグを含む、順位付けされたカタログタグを取得します。 |
search_tags | 関連タグの候補を提示する、あいまいタグ検索を行います。 |
オプションのツール
| ツール | 有効化の条件 | 目的 |
|---|---|---|
summarize_dataset | MCP_ENABLE_SAMPLING=true | 互換性のあるクライアントに MCP Sampling をリクエストし、データセットの読みやすい要約を生成します。Sampling を利用できない場合は、メタデータにフォールバックします。 |
find_datasets での Elicitation
find_datasets では、任意で interactive パラメーターを公開できます。
{
"query": "תחבורה",
"interactive": true
}
これは、次の場合にのみ登録されます。
MCP_ENABLE_ELICITATION=true
有効にすると、互換性のあるクライアントでは、検索範囲が広い場合に確認フォームを表示できます。たとえば、サーバーは多数の一致するデータセットを、公開元の組織で絞り込むようユーザーに求めることができます。クライアントが Elicitation をサポートしていない場合、ユーザーが辞退した場合、またはリクエストがタイムアウトした場合、ツールは通常の検索結果にフォールバックします。
MCP クライアントによってサポート状況が異なるため、これはデフォルトで無効になっています。
リソース
| URI | 種類 | 説明 |
|---|---|---|
datagov://organizations | 静的 JSON | キャッシュされた CKAN の組織一覧です。 |
datagov://tags | 静的 JSON | コミット済みカタログスナップショットの順位付けされたタグです。 |
datagov://featured | 静的 JSON | すぐに使える resource_id の値とフィールドスキーマを含む、厳選された価値の高いデータセットです。 |
datagov://guide | 静的テキスト | ツール、リソース、おすすめのワークフローの使用ガイドです。 |
datagov://catalog/stats | 静的 JSON | スナップショットのメタデータです。生成時刻、データセット数、タグ数、組織数、上位の組織が含まれます。 |
datagov://dataset/{id} | テンプレート JSON | データセットのスラッグまたは ID による、データセットのメタデータ全体です。動的補完と、カタログに基づくリソース一覧が含まれます。 |
サーバーは、標準に準拠した最小限の方法でリソースサブスクリプションも実装しています。
resources.subscribeを通知します。resources/subscribeとresources/unsubscribeを処理します。- クライアントがサブスクライブしたリソースについてのみ、
notifications/resources/updatedを送信します。 - CKAN をリアルタイムでポーリングしません。
プロンプト
| プロンプト | 引数 | 目的 |
|---|---|---|
food-nutrition-analysis | analysis_type | 食品価格、栄養、コーシャ、安全性、輸出入。 |
environmental-sustainability-analysis | analysis_focus | 大気質、グリーンビルディング、廃棄物、水、汚染地域。 |
real-estate-market-analysis | market_focus | 住宅、都市再開発、補助付き住宅、都市/不動産分析。 |
プロンプトの引数では、MCP の補完機能を使用します。分野別の焦点の候補は厳選されており、組織の補完候補はカタログに基づいています。
オプションの MCP クライアント機能
これらの機能はデフォルトで無効です。対象の MCP クライアントが対応しており、サーバーで公開したい場合にのみ有効にしてください。
| 変数 | デフォルト | 効果 |
|---|---|---|
MCP_ENABLE_ELICITATION | false | find_datasets に interactive を追加し、サーバーから開始する確認フォームを使用できるようにします。Cursor や Claude Code などのクライアントで動作します。 |
MCP_ENABLE_SAMPLING | false | MCP Sampling を通じてクライアント側のモデル生成を要求する summarize_dataset を登録します。 |
クライアントによって対応状況は異なります。
- Cursor は Elicitation に対応していますが、現在 Sampling は公開していません。
- Claude Code は最近のバージョンで Elicitation に対応しています。
- Claude Desktop は多くの MCP 機能に対応していますが、Elicitation の対応状況は安定していないか、利用できません。
- Sampling の利用可否は異なりますが、サーバーは常に安全にフォールバックします。
設定
.env.example を .env にコピーします。
cp .env.example .env
コア設定
| 変数 | デフォルト | 説明 |
|---|---|---|
TRANSPORT | stdio | 汎用エントリーポイントを使用する場合のデフォルトのトランスポートです。専用バイナリも利用できます。 |
PORT | 3664 | HTTP ポートです。 |
HOST | 0.0.0.0 | HTTP のバインド先ホストです。 |
CORS_ORIGIN | * | 許可する CORS オリジンです。本番環境のブラウザー向けデプロイではワイルドカードを避けてください。 |
LOG_LEVEL | info | fatal、error、warn、info、debug、または trace です。 |
NODE_ENV | production | development、production、または test です。 |
CKAN
| 変数 | デフォルト | 説明 |
|---|---|---|
CKAN_BASE_URL | https://data.gov.il/api/3/action | CKAN アクション API のベース URL です。 |
CKAN_TIMEOUT_MS | 10000 | CKAN リクエストのデフォルトのタイムアウトです。 |
CKAN_SEARCH_TIMEOUT_MS | 15000 | より負荷の高いデータストア/検索リクエストのタイムアウトです。 |
CACHE_TTL_MS | 300000 | デフォルトのキャッシュ TTL です。 |
CACHE_MAX_ITEMS | 500 | インメモリーキャッシュごとの最大エントリー数です。 |
HTTP の強化
| 変数 | デフォルト | 説明 |
|---|---|---|
TRUST_PROXY | false | リバースプロキシのヘッダーを信頼します。nginx/Caddy/ALB の背後に配置する場合に設定します。 |
RATE_LIMIT_WINDOW_MS | 60000 | レート制限の期間です。無効にするには 0 を設定します。 |
RATE_LIMIT_MAX | 120 | 期間内に IP ごとに許可されるリクエスト数です。無効にするには 0 を設定します。 |
ALLOWED_HOSTS | empty | DNS リバインディング対策のホスト許可リストです。未設定の場合は、ループバック/ローカルホストがデフォルトで許可されます。 |
ALLOWED_ORIGINS | empty | ブラウザーの Origin 許可リストです。適切な場合は CORS_ORIGIN にフォールバックします。 |
認証
| 変数 | デフォルト | 説明 |
|---|---|---|
AUTH_MODE | none | none、apikey、または oauth です。 |
API_KEYS | empty | AUTH_MODE=apikey 用の、カンマ区切りのベアラートークンです。 |
OAUTH_ISSUER | unset | AUTH_MODE=oauth 用の、想定される JWT 発行者です。 |
OAUTH_AUDIENCE | unset | AUTH_MODE=oauth 用の、想定される JWT オーディエンスです。 |
OAUTH_JWKS_URI | unset | JWT 検証用の JWKS URL です。 |
OAUTH_RESOURCE_SERVER | unset | OAuth 保護リソースメタデータ用の、正規の MCP リソース URL です。通常は /mcp を含みます。 |
サービス ID
| 変数 | デフォルト | 説明 |
|---|---|---|
SERVICE_NAME | package/server default | MCP サーバー名の上書き値です。 |
SERVICE_VERSION | package version | MCP サーバーのバージョンの上書き値です。 |
SERVICE_DESCRIPTION | built-in description | MCP サーバーのセマンティックな説明の上書き値です。 |
推奨ワークフロー
データセットの検索とクエリ
find_datasetsを使い、自然なヘブライ語または英語の用語で検索します。- 選択したデータセットに対して
get_dataset_infoまたはlist_resourcesを使います。 datastore_active=trueのリソースを選びます。- まず
limit=5を指定してsearch_recordsを使い、フィールドを確認します。 - 必要に応じて
filters、fields、sort、distinct、またはページネーションを追加します。
使用例:
find_datasets({ "query": "מחיר למשתכן" })
get_dataset_info({ "dataset": "mechir-lamishtaken" })
search_records({
"resource_id": "7c8255d0-49ef-49db-8904-4cf917586031",
"limit": 5,
"include_total": true
})
タグの検出
search_tags({ "keyword": "דיור", "limit": 5 })
find_datasets({ "query": "תחבורה", "tags": "תחבורה ציבורית" })
インタラクティブな検出の使用
必要な設定:
MCP_ENABLE_ELICITATION=true
その後、エージェントは次のように呼び出せます。
find_datasets({ "query": "תחבורה", "interactive": true })
互換性のあるクライアントでは、ユーザーに結果を絞り込むよう求めるフォームが表示される場合があります。
クライアント側の要約の使用
必要な設定:
MCP_ENABLE_SAMPLING=true
その後:
summarize_dataset({ "dataset": "mechir-lamishtaken", "language": "he" })
Sampling が利用できない場合、ツールはデータセットのメタデータを返し、sampling.used=false となります。
開発
npm install
# Type-check
npm run typecheck
# Lint
npm run lint
# Test
npm test
# Build
npm run build
# Refresh local catalog snapshot
npm run catalog:refresh
ローカルで実行する場合:
# stdio
npm run build
npm run start:stdio
# HTTP
npm run build
npm run start:http
オプション機能をローカルで有効にする場合:
MCP_ENABLE_ELICITATION=true MCP_ENABLE_SAMPLING=true npm run start:http
PowerShell の場合:
$env:MCP_ENABLE_ELICITATION="true"
$env:MCP_ENABLE_SAMPLING="true"
npm run start:http
プロジェクト構成
src/
auth/ Authentication providers and Express middleware
bin/ stdio and HTTP entry points
cache/ In-memory TTL/LRU cache
catalog/ Snapshot validation, indexing, fuzzy search, CatalogService
ckan/ Typed CKAN API client and CKAN response types
config/ Zod env config, constants, server identity
core/ Dependency container, MCP server factory, lifecycle
data/catalog/ Committed catalog snapshot artifact
formatting/ JSON response builders and guidance text
observability/ Pino logger
prompts/ MCP prompt definitions, templates, registration
resources/ MCP resources, templates, subscriptions
services/ Domain services for CKAN data access
tools/ MCP tool definitions and Zod schemas
transports/ stdio and Streamable HTTP transports
tests/
fixtures/ Test fixtures
unit/ Unit tests
scripts/
refresh-catalog.ts
docs/
catalog-discovery-layer.md
MIGRATION.md
Docker
docker build -t data-gov-il-mcp .
docker run -p 3664:3664 data-gov-il-mcp
オプション機能を使用する場合:
docker run -p 3664:3664 \
-e MCP_ENABLE_ELICITATION=true \
-e MCP_ENABLE_SAMPLING=true \
data-gov-il-mcp
品質
プロジェクトでは、以下のテストに合格することが求められます。
npm run typecheck
npm run lint
npm test
npm run build
現在の実装には、環境変数の解析、認証プロバイダー、CKAN エラー、キャッシュ、フォーマット、カタログのテキスト正規化/あいまい検索/インデックス/検索ロジック、スナップショットの検証、サービス、リソース、サブスクリプション、および HTTP Host/Origin ガードの単体テストが含まれています。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。