ILO Statistics (ILOSTAT) MCP Server
ILO労働統計(ILOSTAT)— MCPサーバー
公開・ホスト型・出典優先の国際労働機関(ILO)統計用MCPサーバー — ILOSTATデータベース — インストール不要、アカウント不要、APIキー不要。MCPクライアントをホスト型エンドポイントに接続して、失業、雇用、賃金、労働時間、その他の労働指標を国、年、性別、年齢別に照会できます。Cloudflare Workers上でStreamable HTTP経由で動作し、公式のILOSTAT SDMX REST APIと通信します。
すべての応答には出典ブロック(ソースURL、データのビンテージ、実際の取得タイムスタンプ、ライセンス、ILO引用)が含まれます — トレーニングデータから推測された数値ではなく、監査証跡付きの正確な数値です。
使用方法(ホスト型 — セットアップ不要)
任意のMCPクライアントをStreamable HTTPエンドポイントに接続します:
https://ilo.sidneybissoli.com/mcpClaude Desktop / Claude Codeおよびネイティブのリモートサポートを備えたその他のクライアント:
{
"mcpServers": {
"ilostat": {
"url": "https://ilo.sidneybissoli.com/mcp"
}
}
}MCPサーバーをコマンドとして起動するクライアントの場合は、mcp-remoteブリッジを使用します:
{
"mcpServers": {
"ilostat": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://ilo.sidneybissoli.com/mcp"]
}
}
}ilo-mcp-server.sidneybissoli.workers.devホスト名もセカンダリとして提供されています。
Related MCP server: world-bank-economic-mcp
ローカル実行(stdio)
サードパーティのホストを経由してクエリをルーティングしたくない場合?同じサーバーがローカルstdioプロセスとしても動作し、公式のILOSTAT APIに直接通信します — 同じ4つのツール、リソース、プロンプト、同じ制限、同じ出典ブロック、Cloudflareを介しません。
インストール不要 — パッケージはnpm(ilo-mcp-server、Node ≥ 20)にあります:
{
"mcpServers": {
"ilostat": {
"command": "npx",
"args": ["-y", "ilo-mcp-server"]
}
}
}またはソースから:
git clone https://github.com/SidneyBissoli/ilo-mcp-server
cd ilo-mcp-server
npm install
npm run build
node dist/cli.js # serves MCP over stdio (Ctrl+C to stop)(その後、クライアントをnode /path/to/ilo-mcp-server/dist/cli.jsに接続します)。
ホスト型サーバーとの違いは、すべてCloudflareバインディングがないことに起因します:SDMXキャッシュはプロセスメモリ内に存在します(構造とコードリストはセッション内で再利用され、セッション間では再利用されません);検索カタログは最初の検索時に公式エンドポイントからダウンロードされます(実際のretrieved_atが出典に報告されます);使用量メトリクス、レート制限、認証はありません。ログはstderrに出力されます — stdoutはJSON-RPCストリームのみを運びます。リポジトリのDockerfileはこのランタイムをビルドします(Glamaレジストリで使用)。
ツール
ツール | 機能 | ソース |
| ~1,210データフローに対するキーワード検索( | ローカルカタログ(アップストリーム呼び出しなし) |
| データフローのディメンション、コードリスト、ビンテージ、デフォルト選択 | キャッシュされた構造(ミス → アップストリーム) |
| 1つのディメンションの有効なコード( | キャッシュされたコードリスト(ミス → アップストリーム) |
| ディメンションと期間でフィルタリングされた観測値 | クエリごとに1回のライブREST呼び出し |
典型的なフロー:ilo_search_indicators → ilo_get_indicator_metadata / ilo_list_dimension_valuesで有効なフィルターコードを発見 → ilo_get_dataを国と期間のフィルターで使用。
すべての応答には出典ブロックv1.0(@sbissoli/mcp-provenance、provenance_modeパラメータによるconcise/detailedモード)が3つのチャネルで含まれます:structuredContent、名前空間付き_meta(com.sidneybissoli.ilostat/*)、およびテキストフッター。
リソースとプロンプト
3つのリソース(静的、text/markdown、アップストリーム呼び出しなし)— クライアントがツールを呼び出す前にコンテキストに添付できます — ほとんどのセッションが「どのデータフロー、どのコード」に費やす2〜3回のディスカバリー呼び出しを節約します:
URI | コンテンツ |
| ツールのワークフロー、安定したコード規約( |
| トピック別の検証済みデータフローID(失業、雇用、参加率、賃金、労働時間、インフォーマル雇用、NEET、SDG 8、生産性) |
| 各出典フィールドの意味とILOの引用方法 |
3つのプロンプト — ツールを連鎖させ、引用ルールで終了する既製のワークフロー(引数は文字列;期間引数はオプション):
プロンプト | 引数 | 結果 |
|
| 1か国の労働市場プロファイル(失業、参加率、雇用比率、インフォーマル雇用、NEET、収入、労働時間) |
|
| 1回のデータ呼び出しで国/集計間の比較表を作成し、モデル推定値と報告データをフラグ付け |
|
| 最初/最後、ピーク/トラフ、 |
リソースとプロンプトで引用されているすべてのデータフローIDは、テストスイートによってカタログシードに対してチェックされるため、ドキュメントが検索で見つからないIDを指すことはありません。
動作と制限
ilo_get_dataではREF_AREAが必須で、1回の呼び出しで最大30地域。 ILOゲートウェイは無制限のクエリでタイムアウト(HTTP 504)するため、サーバーは決してそれを発行しません;広範なパネルの場合は、地域をバッチに分割し、および/または期間(start_period/end_period)でページングします。エラーメッセージにその方法が説明されています。データクエリごとに1回のライブREST呼び出し。 データはキャッシュされません — すべての
ilo_get_data結果はリクエスト時にILOSTATから取得されます。データフロー構造(TTL 24時間)とコードリスト(TTL 7日、データフロー間で共有)はキャッシュされます。data_vintageは、ILOが公開したデータフローの最終更新日(LAST_UPDATE注釈、ISOに正規化)。retrieved_atは常にILOSTATからの実際の抽出時点であり、キャッシュされた値とともに保持されます — ビルド時間や応答時間ではありません。キャッシュされた応答はその旨を示します(served_from_cache: true)。指標カタログはローカルスナップショット(~1,210データフロー)で、定期的に更新されます;その独自の
retrieved_atがilo_search_indicatorsの出典に報告されるため、その古さは常に確認できます。すべてのアップストリーム呼び出しには識別可能なUser-Agent(サービスURL + 連絡先)が含まれるため、ILO管理者はオペレーターに連絡できます。
言語:英語;タイムゾーン:UTC(ILOデータは英語で公開されています)。
出典フィールド
derived— 実際の変換(集計、サーバー計算レート、補間、調和化)の場合のみtrueで、常にderivation_noteが付きます;単位変換と丸めはカウントされません。このサーバーは値を変換しないため、derivedは常にfalseです。notices—OBS_STATUS(SDMXステータス/免責チャネル、例:「系列の切れ目」)の値をそのまま、カウント付きで再現します。技術的な観測値ごとの属性(DECIMALSなど)は行(rows[].attributes)に残ります。
データライセンスと帰属
ILOSTATデータとメタデータ:CC BY 4.0(2023-05-03以降;ライセンスは2026-08-04に検証済み)。
すべての応答におけるILO帰属(
citationフィールド):International Labour Organization, ILOSTAT, https://ilostat.ilo.org/data/, accessed <date>.ILOロゴは使用されていません。このサービスはILOによって承認されていません。
セルフホスティング / 開発
以下はすべて、独自のインスタンスを実行するためにのみ必要です — 公開サーバーを使用するために必要ではありません。
npm install
npm run typecheck && npm test # 96 offline tests (parsers, key, tools, output contract, resources/prompts, in-memory catalogue, eval fixtures)
npm run dev # http://localhost:8787/mcp (Worker)
npm run build && npm start # stdio runtime (dist/cli.js)
# Catalogue seed (D1) — required before first use:
node scripts/seed-catalog.mjs # downloads via curl and generates scripts/seed-catalog.sql
npx wrangler d1 execute ilostat-catalog --local --file=scripts/seed-catalog.sql
npx wrangler d1 execute ilostat-catalog --remote --file=scripts/seed-catalog.sql
npm run deploy
node scripts/smoke-mcp.mjs # smoke test against production (initialize → 4 tools → errors)
npm run manifest:lhm # regenerate tools/resources/prompts in lhm.plugin.json from the real server
# (the seed also writes tests/fixtures/catalog-ids.txt — the versioned id list the tests check resources/prompts against)バインディング(wrangler.jsoncを参照):KV SDMX_CACHE、D1 CATALOG_DB、Durable Object USAGE(SQLiteベースの使用量カウンター)、CF_VERSION_METADATA。オプションのBearer認証(wrangler secret put API_KEY);IPごとのトークンバケットレート制限。
オペレーター向けの注意事項:
ILOSTATは、
Acceptヘッダー(application/vnd.sdmx.{structure,data}+json)を介してネゴシエートされた場合にのみJSONを返します;?format=は無視され、XMLを返します。ILOゲートウェイは、Nodeの
fetch(undici)がデフォルトで送信するAccept-Language: *ヘッダーに対してHTTP 500(languageTag1)で応答します;そのため、すべてのアップストリーム呼び出しは明示的にAccept-Language: enを設定します(Cloudflareのランタイムはそのようなヘッダーを送信しないため、Workerは影響を受けませんでした)。また、識別可能なUser-Agentも期待されます。カタログ更新は手動(cronなし):四半期ごと、またはアップストリームに存在するデータフローが検索に表示されない場合は直ちに。手順:上記の3つのシードコマンド。データクエリは常にライブであるため、検索カタログのみが古くなる可能性があります — その古さは出典で公開されています。
評価
@sbissoli/mcp-evals:evals/fixtures/queries.tsに24のフィクスチャがあり、npm testでオフライン検証されます。実際のモデルでの実行(npm run eval)はAnthropic APIを使用し、ANTHROPIC_API_KEYが必要です(ない場合は、手順を示して終了します)。2026-08-07の実行:top-1 100%(24/24) — evals/results/。
エンドツーエンド: evals/e2e/evaluation.xml 内の単一の検証可能な回答を持つ複雑な質問10問。回答は本番環境に対して手動で検証済み(evals/e2e/validacao-respostas.md)。2026-08-07の実行(Sonnet): 9/10 完全一致文字列; 10/10 実質的 — evals/results/2026-08-07-e2e.md。
エンドポイント
ルート | 目的 |
| ランディングページ(サービスID + 連絡先 — 公開) |
| 死活監視 |
| バージョン、ツール/リソース/プロンプトの数と名前、来歴契約バージョン、現在のデプロイ(READMEバッジに反映) |
| 集計された使用状況(MCPエンドポイントのみ、IPなし、クエリ内容なし) |
| MCP Streamable HTTP |
セキュリティ
Snyk Agent Scan(2026-08-07): 合格 — レポートは security/ にあります。
ライセンス
コード: MIT。データ: ILOSTAT、CC BY 4.0(上記の「データライセンスと帰属」を参照)。
プライバシー
ホスト型サービスのプライバシーポリシー: PRIVACY.md。
連絡先
Sidney da S. P. Bissoli — sbissoli76@gmail.com。このサービスはILOによって承認されていません。
Maintenance
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for official statistics from Statistics Finland (Tilastokeskus) — the StatFin database, exposed through the PxWeb API. Search 3000+ tables, inspect their dimensions, and pull data as JSON-stat2.474MIT
- FlicenseNot gradedqualityBmaintenanceProvides macro-economic data from World Bank, IMF, FRED, OECD, and RBI through a unified get_indicator interface.1
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides tools to query Eurostat APIs for European statistics data.10MIT
- AlicenseNot gradedqualityAmaintenanceSearch and query the Eurostat catalogue — EU economy, demography, trade, health, and NUTS regional data via MCP with 5 tools and 1 resource.1,1715Apache 2.0
Related MCP Connectors
ILOSTAT (International Labour Organization statistics) MCP — global labour
DBnomics MCP — meta-aggregator over 80+ stats providers
Statistics Netherlands (CBS / StatLine) OData MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SidneyBissoli/ilo-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server