mcpField
G
global-education-mcp

global-education-mcp

ローカル
github.com科学・教育14 週間前に更新

global-education-mcp について

global-education-mcpは、UNESCO UISとOECDの「Education at a Glance」の国際教育統計を調べるMCPサーバーです。指標の検索、国別比較、教育プロフィール、SDG-4のモニタリングに対応し、APIキーは不要です。

主な機能

  1. 01UNESCO指標カタログの検索
  2. 02教育統計データの取得
  3. 03複数国の比較
  4. 04国別教育プロフィールの作成
  5. 05SDG-4目標のモニタリング
  6. 06OECDデータセットの検索

活用シーン

  1. 01各国の識字率を比較する
  2. 02教育支出の推移を追う
  3. 03国別の教育プロフィールを確認する
  4. 04OECDの教員給与データセットを探す

MCP 対応

UNESCO UISとOECDのデータツール、参照リソース、プロンプトをMCPクライアントに提供します。stdioとStreamable HTTPに対応しています。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"malkreide-global-education": {
"command": "uvx",
"args": [
"global-education-mcp"
]
}
}
}
起動コマンドuvx global-education-mcp

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

パッケージ
pypiglobal-education-mcp0.4.0

ツール

10

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

パラメーター型必須説明
paramsanyはい

詳細

🇨🇭 Swiss Public Data MCP Portfolio の一部です

🎓 global-education-mcp

Version License: MIT Python 3.11+ MCP Data: UNESCO UIS Data: OECD Tests No API Key CI

国際教育データ向けの MCP サーバーです。SDMX を通じて、UNESCO UIS(全加盟国を対象とした 4,000 件以上の指標)と OECD Education at a Glance のデータを利用できます。API キーは不要です。

🇩🇪 ドイツ語版

global-education-mcp デモの流れ


概要

global-education-mcp は、Claude のような AI アシスタントに、識字率、就学率、教育支出、教員給与、ジェンダー平等、SDG-4 のモニタリングなど、国際教育に関する包括的な情報システムを提供します。すべて、標準化された単一の MCP インターフェースから利用できます。

このサーバーは、国際比較可能な教育統計を提供する、最も信頼性の高い 2 つの情報源、UNESCO UIS(世界全体を網羅し、4,000 件以上の指標を提供)と、OECD が毎年発行する Education at a Glance(OECD 加盟 38 か国、SDMX REST API)をつなぎます。どちらもオープンデータで、API キーは不要です。

デモ用の代表的なクエリ: 「スイスの GDP に占める教育支出の割合を、過去 10 年間にわたってフィンランド、シンガポール、韓国と比較し、SDG-4 の課題があれば示してください。」


特徴

  • 🌍 UNESCO UIS – 4,000 件以上の指標、UNESCO 加盟国すべてに対応、API キー不要
  • 📊 OECD Education at a Glance – SDMX REST を通じて OECD 加盟 38 か国とパートナー国に対応
  • 🔍 指標の検索 – UNESCO の指標カタログ全体を閲覧・絞り込み
  • 🗺️ 複数国の比較 – 任意の指標を複数の国で比較
  • 🏫 各国の教育プロファイル – 1 回の呼び出しで 10 件の主要指標を取得
  • 🎯 SDG-4 のモニタリング – 「万人のための教育」の目標に関する構造化レポート
  • 📈 OECD データセットの検索 – Education at a Glance のデータフローを検索・取得
  • 🔑 API キー不要 – 完全なオープンデータで、セットアップの手間もありません
  • ☁️ 2 種類のトランスポート – Claude Desktop 用の stdio と、クラウドデプロイ用の Streamable HTTP(/mcp、仕様 2026-07-28)
  • 🛡️ 適切な縮退動作 – API の障害時には、ローカルの参照情報を使った役立つメッセージを返します

前提条件

  • Python 3.11+
  • uv(推奨)または pip
  • API キーは不要です

インストール

# Clone the repository
git clone https://github.com/malkreide/global-education-mcp.git
cd global-education-mcp

# Install
pip install -e ".[dev]"

または、uvx を使う方法(恒久的なインストールは不要です):

uvx global-education-mcp

クイックスタート

# Start the server (stdio mode for Claude Desktop)
global-education-mcp

Claude Desktop ですぐに試せます:

「スイスの識字率を、フィンランドやシンガポールと比較するとどうなりますか?」 「CHE、DEU、AUT の GDP に占める教育支出の割合を、過去 10 年間にわたって表示してください。」


設定

Claude Desktop の設定

Windows(%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "global-education": {
      "command": "uvx",
      "args": ["global-education-mcp"]
    }
  }
}

macOS(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "global-education": {
      "command": "uvx",
      "args": ["global-education-mcp"]
    }
  }
}

すぐに使用できる claude_desktop_config.json が、リポジトリのルートに含まれています。

クラウドデプロイ(ブラウザーアクセス用の Streamable HTTP)

ブラウザー版の claude.ai(ローカルソフトウェアを使用できない管理対象ワークステーションなど)で使用します。

⚠️ セキュリティに関する注意: v0.3 以降、MCP_HOST のデフォルト値は 127.0.0.1 です。 HTTP トランスポートは、TLS、認証、レート制限を追加するリバースプロキシの背後で必ず実行してください。 生のポートをインターネットに公開しないでください。MCP_HOST=0.0.0.0 が安全なのは、隔離された コンテナネットワーク内に限られます。

Docker(推奨):

リポジトリには、強化されたマルチステージの Dockerfile と、 read_only: true、cap_drop: [ALL]、 security_opt: [no-new-privileges:true] を適用し、 非 root ユーザーの uid 10001 として実行する docker-compose.yml が含まれています。compose ファイルはポートを 127.0.0.1 にバインドするため、 外部からアクセスするにはホストレベルのリバースプロキシが必要です。

docker compose up --build
# then point nginx/caddy at 127.0.0.1:8000/mcp with TLS + auth

compose を使わない通常の docker run:

docker build -t global-education-mcp .
docker run --rm \
  --read-only --cap-drop ALL --security-opt no-new-privileges \
  --tmpfs /tmp:size=16M,mode=1777 \
  -p 127.0.0.1:8000:8000 \
  global-education-mcp

Render.com:

  1. リポジトリを GitHub にプッシュするか、フォークします
  2. render.com で、New Web Service → GitHub リポジトリに接続します
  3. Render ダッシュボードで環境変数を設定します:
    MCP_TRANSPORT=streamable-http
    MCP_HOST=0.0.0.0      # Render needs 0.0.0.0; their edge layer provides TLS + auth.
    PORT=8000
    
  4. claude.ai の Settings → MCP Servers で、https://your-app.onrender.com/mcp を追加します

SSE からの移行。 v0.3.5 までは、コンテナのデフォルトは MCP_TRANSPORT=sse で、 エンドポイントは /sse でした。現在のデフォルトは /mcp の streamable-http です。これは、 2026-07-28 クライアントが単一の POST リクエストを送信するトランスポートです。 SSE は spec 2025-03-26 以降、後継の方式に置き換えられており、そうしたリクエスト経路を提供したことはありません。 既存のデプロイでは、クライアントの URL を /mcp に変更するか、 MCP_TRANSPORT=sse を明示的に設定してください。その場合、サーバーは起動時に legacy_transport_warning をログに出力します。MCP_TRANSPORT に不明な値を指定すると、 stdio に黙ってフォールバックするのではなく、起動が中断されるようになりました。

💡 「開発者のノート PC では stdio、ブラウザーではサンドボックス化された Streamable HTTP コンテナ。」


利用可能なツール

UNESCO UIS ツール
ツール説明
uis_list_indicators利用可能な指標(4,000 以上)を検索して一覧表示します
uis_list_countriesISO コード付きで国と地域を一覧表示します
uis_get_education_data特定の指標のデータを取得します
uis_compare_countries1 つの指標について複数の国を比較します
uis_country_education_profile教育に関する全体的なプロフィール(主要指標 10 件)
uis_list_versions利用可能なデータベースのバージョンを一覧表示します
OECD ツール
ツール説明
oecd_list_education_datasetsEducation at a Glance のデータセットを一覧表示します
oecd_get_education_indicatorSDMX 経由で OECD の教育データを取得します
oecd_search_datasetsキーワードで OECD のデータフローを検索します
複数データソースのツール
ツール説明
education_benchmark_countries5 つの重点テーマについて複数の国を比較します(UNESCO UIS)
リソースとプロンプト

リソース:

  • education://indicators/unesco – UNESCO の主要指標のクイックリファレンス
  • education://datasets/oecd – OECD Education at a Glance のデータフローのクイックリファレンス

プロンプト:

  • bildungsvergleich_schweiz – スイスとフィンランド、シンガポール、日本の比較
  • sdg4_monitoring – CH/DE/AT 向け SDG-4 レポート
国コード

ISO 3166-1 Alpha-3 規格:

コード国コード国
CHEスイスFINフィンランド
DEUドイツSGPシンガポール
AUTオーストリアKOR韓国
FRAフランスJPN日本
SWEスウェーデンUSAアメリカ合衆国
使用例
クエリツール
「スイスの識字率をフィンランドやシンガポールと比較すると?」uis_compare_countries
「過去10年間のCHE、DEU、AUTのGDPに占める教育支出の割合」uis_get_education_data
「韓国の教育に関する詳細なプロフィールを作成する」uis_country_education_profile
「教員給与を扱うOECDデータセットはどれですか?」oecd_search_datasets
「欧州5か国の中等教育修了率を比較する」education_benchmark_countries
「スイスのSDG-4モニタリングレポートを作成する」sdg4_monitoring(プロンプト)

→ 対象別のその他の使用例 →


アーキテクチャ

┌─────────────────┐     ┌──────────────────────────────┐     ┌────────────────────┐
│   Claude / AI   │────▶│   Global Education MCP       │────▶│   UNESCO UIS API   │
│   (MCP Host)    │◀────│   (MCP Server)               │◀────│   uis.unesco.org   │
└─────────────────┘     │                              │     └────────────────────┘
                        │  10 Tools · 2 Resources      │
                        │   · 2 Prompts                │     ┌────────────────────┐
                        │  stdio | Streamable HTTP     │────▶│   OECD SDMX API    │
                        │                              │◀────│   sdmx.oecd.org    │
                        │  server.py                   │     └────────────────────┘
                        │   + api_client.py            │
                        └──────────────────────────────┘
インフラストラクチャコンポーネント
コンポーネントたとえ機能
HTTPClient郵便サービスすべての外部向けHTTPリクエスト、再試行、タイムアウトを処理します
SimpleCacheホワイトボード繰り返しのクエリに対応するメモリ内TTLキャッシュです
GracefulFallbackセーフティネットAPIが利用できない場合に、ローカルの参照データを返します
SDMXParser翻訳者OECDのSDMX/XMLレスポンスを整理されたJSONに変換します
キャッシュ戦略
データソースキャッシュTTL理由
UNESCO UISの指標3600sカタログは安定しており、年1回更新されます
UNESCO UISの国別データ1800s数値は年単位で更新され、日中には更新されません
OECDデータセット一覧3600sEducation at a Glanceは年刊の出版物です
OECD指標データ1800s同じ年次更新サイクルです
国・地域一覧86400sISOコードと国の一覧は非常に安定しています

プロジェクト構成

global-education-mcp/
├── src/global_education_mcp/       # Main package
│   ├── __init__.py                 # Package metadata, version
│   ├── server.py                   # FastMCP server, 10 tools, 2 resources, 2 prompts
│   └── api_client.py               # HTTP client, UNESCO UIS + OECD wrappers, formatters
├── scripts/
│   └── record_fixtures.py          # Records the fixtures from the live UIS API
├── tests/
│   ├── fixtures/                   # Recorded responses + PROVENANCE.md (source, date, SHA-256)
│   ├── fixture_data.py             # Fixture loader – raises on a missing name
│   ├── test_source_contract.py     # Contract vs. the recording + live tests
│   ├── test_server.py              # 42 tests (basic / intermediate / advanced)
│   └── test_extended_scenarios.py  # 74 tests across 8 categories
├── claude_desktop_config.json      # Ready-to-use Claude Desktop config
├── pyproject.toml                  # Build configuration (hatchling)
├── CHANGELOG.md
├── CONTRIBUTING.md                 # Contribution guide (English)
├── CONTRIBUTING.de.md              # Contribution guide (German)
├── SECURITY.md                     # Security policy (English)
├── SECURITY.de.md                  # Security policy (German)
├── LICENSE
├── README.md                       # This file (English)
└── README.de.md                    # German version

既知の制限事項

  • UNESCO UIS: 一部の指標では、低所得国や近年のデータが十分にありません
  • OECD SDMX: 複数の国や年にまたがる大規模なリクエストでは、APIがまれにタイムアウトします。必要に応じて対象年の範囲を狭めてください
  • OECDの対象範囲: OECD加盟国38か国と一部のパートナー国が対象です。UNESCO加盟国すべてを網羅しているわけではありません
  • 過去データの範囲: UNESCO UISのデータ利用可否は指標によって異なり、1970年までさかのぼらない系列もあります
  • 言語: UNESCO UISは指標ラベルを英語のみで返します。OECDのラベルはデータフローによって異なる場合があります
  • リアルタイムデータはありません: どちらのデータソースも年次で公開されるため、数値は最新の公開版を反映しており、学校のリアルタイム統計ではありません
  • 推計値にはラベルが付いています: UISでは観測値の一部にUIS_EST(UIS推計値)またはNAT_EST(国別推計値)のラベルが付いています。LR.AG15T99では、9,818件中1,306件が該当します。ステータス列にその旨が記載され、ラベルのない値は報告値です。
  • データ行に含まれるのは国名ではなくISOコードです: 国名はuis_list_countriesから取得できます。データツールは国名を推測せず、コードを出力します。
  • 不明な国コードはエラーステータスではありません: UISはHTTP 200と空の結果セットを返し、理由をペイロードのhintsフィールドに記載します。ツールはそのヒントを出力します。そうしないと、入力ミスがデータのない国とまったく同じように見えてしまいます。

コンプライアンスとデータ分類(チューリッヒ市)

チューリッヒ市教育局での利用に関する拘束力のある分類 (ドイツ語のセクションはREADME.de.mdにあります)。

ISDS保護クラス(チューリッヒ市の保護要件クラス)
項目クラス理由
機密性公開UNESCO UISのデータはCC BY-SA 3.0 IGOのライセンスで提供され、OECD EaGは公開されているOECD利用規約に準拠しています
完全性通常上流データは権威ある情報源です。ローカルのメモリ内キャッシュはTTLで制限され、ディスクに書き込まれることはありません
可用性通常APIに接続できない場合は、同梱の静的参照データに適切にフォールバックします
総合保護クラスG1 — 公開(öffentlich)ISDSチューリッヒ市における最も低いレベル
  • データ所有者:UNESCO UIS / OECD(外部)
  • システム所有者:チューリッヒ市教育局
  • 個人データを処理しますか:いいえ
  • DSG / EDÖBとの関連性:なし(匿名化された国レベルの集計データのみ)
Schulamt の分類(BUI / Vertraulich / Streng Vertraulich)
項目分類
ツールの出力(Markdown の表、要約)BUI(業務上、重要度の低い情報)
メモリ内 TTL キャッシュBUI(ソースと同じ区分)
構造化ログ(stderr 上の JSON、OBS-003 を参照)BUI — ツール名、パラメーター、所要時間のみ。PII なし
tools.lock.json、audits/ の成果物BUI

→ このサーバーは、データ保護責任者による追加の承認なしで、あらゆる Schulamt のユースケースに使用できます。

互換性
コンポーネントサポート対象バージョン
MCP プロトコル2024-11-05
MCP Python SDK>=1.0.0,<2.0.0
Python3.11、3.12、3.13
httpx>=0.27.0,<1.0.0
pydantic>=2.0.0,<3.0.0

メジャーバージョンのアップグレードは、意図的に決定します。 pyproject.toml の上限は、推移的な依存関係の更新によって サーバーが予告なく壊れることを防ぐために設定されています。アップグレードの経緯については CHANGELOG.md を参照してください。


🛡️ 安全性と制限

項目詳細
アクセス読み取り専用(readOnlyHint: true)— サーバーはデータの変更、書き込み、削除を行えません
個人データ個人データなし — UNESCO UIS と OECD EaG が公開するのは、国別に集計された統計のみです
レート制限クエリごとの上限を組み込み済み(検索あたり最大 50 指標、比較あたり最大 10 か国、保守的な年範囲)
キャッシュメモリ内 TTL キャッシュ(1800~86400 秒)により、上流への負荷を軽減し、データ提供元の処理能力に配慮します
タイムアウト上流 API 呼び出しごとに 30 秒。ローカルの参照データへ適切にフォールバックします
認証API キーは不要 — UNESCO UIS と OECD SDMX はどちらも一般公開されています
ライセンスUNESCO UIS のデータは CC BY-SA 3.0 IGO、OECD のデータは OECD の利用規約 に基づきます
利用規約各データソースの利用規約が適用されます:UNESCO UIS、OECD — 再配布する際は出典を明記してください
帰属表示すべてのツールの応答に出典が含まれます(Source: UNESCO UIS / Source: OECD Education at a Glance)

MCP プロトコルバージョン

このサーバーは、同じエンドポイント上で2つのプロトコル時代に対応しています。接続時のクライアントの最初のリクエストによって、どちらを適用するかが決まり、後から別の時代のバージョンを指定しても拒否されます。

時代リビジョン対応するクライアント
initialize ハンドシェイク2024-11-05 … 2025-11-25現在のクライアントが使用するリビジョンです。サーバーは要求されたリビジョンで応答します。リクエストがそれより新しいリビジョンを要求した場合は、上限の 2025-11-25 で応答します。
リクエストごとのエンベロープ2026-07-282026-07-28 の _meta エンベロープを含むリクエストによって、モダンな接続が開始されます。

HTTP では、どちらの時代もエンドポイント /mcp を共有します(MCP_TRANSPORT=streamable-http、ステートレス)。MCP-Protocol-Version: 2026-07-28 ヘッダーを含むリクエストは、自己完結した単一のやり取りとして処理されます。initialize も Mcp-Session-Id も必要ありません。レガシーの SSE トランスポート(MCP_TRANSPORT=sse)にはこの経路がなく、ハンドシェイク時代にのみ対応します。

両方のリビジョンは tests/test_protocol_version.pyで固定され、インストール済み SDK に対してアサートされます。そのため、Dependabot による mcp の更新で、どちらかが気付かないうちに変更されることはありません。 tests/test_streamable_http.pyでは、これらを検証します。main() が起動するオプションで HTTP アプリを構築し、2026-07-28 クライアント、auto クライアント、レガシーの initialize、および生の server/discover を送信します。CI の Docker ジョブでは、同じ server/discover を強化されたコンテナに送信します。

2026-07-28 がこのサーバーにもたらす変更点。 ロギング機能は非推奨(SEP-2577)となっており、使用していません。ファンアウト前のお知らせは進捗 0 of n として送信し、運用ログは JSON 形式で stderr に出力します。すべてのレスポンスで _meta に含められるようになった serverInfo には、パッケージのバージョンが格納されます。リストメソッドには鮮度ヒント(ttlMs、cacheScope、SEP-2549)が含まれます。

SDK の LATEST_PROTOCOL_VERSION はハンドシェイク時代ではなく、モダンな時代のエイリアスです。この定数だけを基準に固定すると、現在のクライアントが実際にネゴシエートする時代のリビジョンが、自由に変わってしまう点に注意してください。

更新ポリシー。 ゲートが失敗した場合、定数を安易に編集しないでください。2つのリビジョン間の仕様の変更履歴を読み、サーバーが引き続き正常に動作することを確認してから、定数、このセクション、README.de.md、および CHANGELOG.mdをまとめて更新してください。


テスト

# Unit tests (no API key required, no network)
PYTHONPATH=src pytest tests/ -v -m "not integration"

# Full suite including the live tests against api.uis.unesco.org
PYTHONPATH=src pytest tests/ -v

# Re-record the fixtures (writes tests/fixtures/ + PROVENANCE.md)
PYTHONPATH=src python scripts/record_fixtures.py

169件のテスト – オフラインで152件、ライブソースに対して17件です。

カテゴリテスト数説明
エッジケースと境界値19年の上限、文字列の長さ、null/ゼロ値
セキュリティと敵対的な入力14インジェクションの試行、HTTP エラーコード、空白
出力品質11Markdown の構造、出典の明記、並べ替え順
回復性とエラーの連鎖9API 全体の停止、一部の結果、タイムアウト
専門分野の正確性10SDG-4 の網羅性、重点テーマごとの正しい指標
パフォーマンスと並行処理4同時リクエスト、時間制限
教育委員会のシナリオ7DACH の比較、PISA、教員不足
記録に対するソース契約23フィールド名、エンベロープ、クエリパラメーター、ヒント
ライブテスト(-m integration)17経路、形式、ツールそのもの
フィクスチャを手書きせず、記録する理由

手書きのモックは、作者の想定をそのまま記述するため、それを否定できません。プロダクションコードとフィクスチャは、同じ人が、同じ時間に、同じドキュメントの読み方に基づいて作成します。両方が間違っている場合、両方とも同じように間違っているため、テストスイートは成功したままです。

これは、ここでは仮定の話ではありません。2026-08-08 より前、このリポジトリには 128 件の成功するテストがありましたが、UNESCO のエンドポイント 4 つのうち 3 つは HTTP 404 を返し、すべてのデータクエリは空のリストを返していました。モックには、プロダクションコードと同じ架空のフィールド名(observations、indicatorId、entityType)が使われていたため、モックの誤りを指摘できるものは何もありませんでした。

現在、tests/fixtures/ にあるフィクスチャはすべて、記録されたレスポンスです。PROVENANCE.md には、それぞれのソース URL、記録日、選択ルール、SHA-256 が記載されています。日付がなければ、2 年後には「記録済み」と「架空」の区別がつかなくなります。ファイル自体は同じように見えるからです。

3 つのフィクスチャはコントロールです。架空の theme 値、架空の国コード、そして異なるパラメーター名で 2 回リクエストした同じ時系列データです。これらがなければ、測定で分かるのは私たちが受け取ったものだけです。これらがあれば、ソースが実際に区別しているものが分かります。


貢献

貢献を歓迎します。変更したい内容について話し合うため、まずイシューを作成してください。

  • 既存のコードスタイル(Ruff によるリンティング、Black によるフォーマット)に従ってください
  • 新しいツールのテストを追加してください(tests/test_server.py または test_extended_scenarios.py)
  • ライブ API を呼び出すテストには @pytest.mark.integration マーカーを使用してください
  • CHANGELOG.md と、この README のツール一覧表を更新してください
  • 貢献ガイドの全文は CONTRIBUTING.md をご覧ください

変更履歴

CHANGELOG.md をご覧ください


セキュリティ

脆弱性の報告については、SECURITY.md(🇩🇪 ドイツ語版)をご覧ください。公開イシューではなく、そこに記載されている非公開の窓口をご利用ください。


ライセンス

MIT ライセンス — LICENSE をご覧ください


作者

Hayal Oezkan · github.com/malkreide


クレジットと関連プロジェクト

MCP クライアントの設定

uv の uvx を使って実行できます。クローンや手動インストールは不要です。MCP クライアントの設定(Claude Desktop、Cursor、Windsurf では mcpServers、VS Code では .vscode/mcp.json のトップレベルに servers キーを使用)に追加してください。

{
  "mcpServers": {
    "global-education-mcp": {
      "command": "uvx",
      "args": [
        "global-education-mcp"
      ]
    }
  }
}

コメント

MCP は初めてですか?

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

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