global-education-mcp
This server provides AI assistants with comprehensive international education data from UNESCO UIS (4,000+ indicators, all member countries) and OECD Education at a Glance (38 countries + partners), requiring no API keys.
UNESCO UIS Capabilities
Search indicators (
uis_list_indicators): Browse/filter 4,000+ indicators by theme (literacy, enrollment, expenditure, teacher ratios, etc.) or keywordList countries & regions (
uis_list_countries): Retrieve ISO 3166-1 Alpha-3 codes and regional aggregates (World Bank income groups, SDG regions)Fetch education data (
uis_get_education_data): Pull time-series data for any indicator for one or all countries, with optional year range filteringCompare countries (
uis_compare_countries): Side-by-side comparison of up to 15 countries on a single indicator, sorted by valueCountry education profile (
uis_country_education_profile): Full profile covering 10 core indicators (literacy, enrollment, completion, expenditure, teacher ratios, gender parity) in one callList database versions (
uis_list_versions): Check available UNESCO UIS release versions and publication dates
OECD Capabilities
List OECD datasets (
oecd_list_education_datasets): Browse Education at a Glance dataflows (spending, enrollment, graduation, teacher salaries, labour market outcomes)Fetch OECD indicator data (
oecd_get_education_indicator): Retrieve SDMX data for specific dataflows filtered by country and time periodSearch OECD datasets (
oecd_search_datasets): Keyword search across all OECD SDMX dataflows
Cross-Source & Additional Features
Benchmark countries (
education_benchmark_countries): Multi-country benchmark across five themes β literacy, spending, completion, teachers, or enrollmentSDG-4 monitoring prompt: Built-in structured reporting for Education for All goals
Switzerland comparison prompt: Pre-built comparison of Switzerland vs. Finland, Singapore, and Japan
Reference resources: Quick-reference guides for core UNESCO indicator IDs and OECD dataflow IDs
No API keys required: Both data sources are open and publicly accessible
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@global-education-mcpCompare education spending as % of GDP for Switzerland and Finland"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π¨π Part of the Swiss Public Data MCP Portfolio
π global-education-mcp
MCP server for international education data β UNESCO UIS (4,000+ indicators across all member countries) and OECD Education at a Glance via SDMX. No API keys required.
Overview
global-education-mcp gives AI assistants like Claude a complete international education intelligence system β literacy rates, enrolment ratios, education expenditure, teacher salaries, gender parity and SDG-4 monitoring, all accessible through a single standardised MCP interface.
The server bridges two of the most authoritative sources for internationally comparable education statistics: UNESCO UIS (global coverage, 4,000+ indicators) and the OECD's annual Education at a Glance (38 OECD countries, SDMX REST API). Both are open and require no API key.
Anchor demo query: "Compare Switzerland's education expenditure as a percentage of GDP with Finland, Singapore and South Korea over the last 10 years β and flag any SDG-4 gaps."
Related MCP server: Skolverket-MCP
Features
π UNESCO UIS β 4,000+ indicators, all UNESCO member countries, no API key
π OECD Education at a Glance β 38 OECD countries + partners via SDMX REST
π Indicator search β browse and filter the full UNESCO indicator catalogue
πΊοΈ Multi-country comparison β benchmark any indicator across multiple countries
π« Country education profiles β 10 core indicators in one call
π― SDG-4 monitoring β structured reporting on Education for All targets
π OECD dataset search β discover and retrieve Education at a Glance dataflows
π No API keys required β fully open data, zero setup friction
βοΈ Dual transport β stdio for Claude Desktop, Streamable HTTP/SSE for cloud deployment
π‘οΈ Graceful degradation β API failures return helpful messages with local reference fallback
Prerequisites
Python 3.11+
uv(recommended) orpipNo API keys needed
Installation
# Clone the repository
git clone https://github.com/malkreide/global-education-mcp.git
cd global-education-mcp
# Install
pip install -e ".[dev]"Or with uvx (no permanent installation):
uvx global-education-mcpQuickstart
# Start the server (stdio mode for Claude Desktop)
global-education-mcpTry it immediately in Claude Desktop:
"What is Switzerland's literacy rate compared to Finland and Singapore?" "Show me education expenditure as % of GDP for CHE, DEU and AUT over the last 10 years."
Configuration
Claude Desktop Configuration
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"]
}
}
}A ready-to-use claude_desktop_config.json is included in the repository root.
Cloud Deployment (SSE for browser access)
For use via claude.ai in the browser (e.g. on managed workstations without local software).
β οΈ Security note: Since v0.3,
MCP_HOSTdefaults to127.0.0.1. The SSE transport must always run behind a reverse proxy that adds TLS, authentication, and rate-limiting. Never expose the raw port to the internet βMCP_HOST=0.0.0.0is only safe inside an isolated container network.
Docker (recommended):
The repository ships a hardened multi-stage Dockerfile and a
docker-compose.yml that applies read_only: true, cap_drop: [ALL],
security_opt: [no-new-privileges:true], and runs as non-root user
uid 10001. The compose file binds the port to 127.0.0.1 so a host-level
reverse proxy is required for any external access.
docker compose up --build
# then point nginx/caddy at 127.0.0.1:8000/sse with TLS + authPlain docker run (without compose):
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-mcpRender.com:
Push/fork the repository to GitHub
On render.com: New Web Service β connect GitHub repo
Set environment variables in the Render dashboard:
MCP_TRANSPORT=sse MCP_HOST=0.0.0.0 # Render needs 0.0.0.0; their edge layer provides TLS + auth. PORT=8000In claude.ai under Settings β MCP Servers, add:
https://your-app.onrender.com/sse
π‘ "stdio for the developer laptop, sandboxed SSE container for the browser."
Available Tools
UNESCO UIS Tools
Tool | Description |
| Search and list available indicators (4,000+) |
| List countries and regions with ISO codes |
| Retrieve data for a specific indicator |
| Multi-country comparison for one indicator |
| Full education profile (10 core indicators) |
| List available database versions |
OECD Tools
Tool | Description |
| List Education at a Glance datasets |
| Retrieve OECD education data via SDMX |
| Search OECD dataflows by keyword |
Cross-Source Tools
Tool | Description |
| Benchmark multiple countries across 5 focus themes (UNESCO UIS) |
Resources & Prompts
Resources:
education://indicators/unescoβ Quick reference for core UNESCO indicatorseducation://datasets/oecdβ Quick reference for OECD Education at a Glance dataflows
Prompts:
bildungsvergleich_schweizβ Switzerland vs. Finland, Singapore, Japansdg4_monitoringβ SDG-4 report for CH/DE/AT
Country Codes
ISO 3166-1 Alpha-3 standard:
Code | Country | Code | Country |
| Switzerland |
| Finland |
| Germany |
| Singapore |
| Austria |
| South Korea |
| France |
| Japan |
| Sweden |
| United States |
Example Use Cases
Query | Tool |
"What is Switzerland's literacy rate vs. Finland and Singapore?" |
|
"Education expenditure as % of GDP for CHE, DEU, AUT over 10 years" |
|
"Create a full education profile for South Korea" |
|
"Which OECD datasets cover teacher salaries?" |
|
"Compare secondary graduation rates across 5 European countries" |
|
"Create an SDG-4 monitoring report for Switzerland" |
|
β More use cases by audience β
Architecture
βββββββββββββββββββ ββββββββββββββββββββββββββββββββ ββββββββββββββββββββββ
β Claude / AI ββββββΆβ Global Education MCP ββββββΆβ UNESCO UIS API β
β (MCP Host) βββββββ (MCP Server) βββββββ uis.unesco.org β
βββββββββββββββββββ β β ββββββββββββββββββββββ
β 10 Tools Β· 2 Resources β
β Β· 2 Prompts β ββββββββββββββββββββββ
β Stdio | SSE ββββββΆβ OECD SDMX API β
β βββββββ sdmx.oecd.org β
β server.py β ββββββββββββββββββββββ
β + api_client.py β
ββββββββββββββββββββββββββββββββInfrastructure Components
Component | Metaphor | Function |
HTTPClient | Postal service | Handles all outbound HTTP requests, retries and timeouts |
SimpleCache | Whiteboard | In-memory TTL cache for repeated queries |
GracefulFallback | Safety net | Returns local reference data when APIs are unavailable |
SDMXParser | Translator | Converts OECD SDMX/XML responses to clean JSON |
Caching Strategy
Data Source | Cache TTL | Rationale |
UNESCO UIS indicators | 3600s | Catalogue is stable; updated annually |
UNESCO UIS country data | 1800s | Figures update yearly, not intraday |
OECD dataset list | 3600s | Education at a Glance is an annual publication |
OECD indicator data | 1800s | Same annual update cycle |
Country/region list | 86400s | ISO codes and country lists are highly stable |
Project Structure
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 versionKnown Limitations
UNESCO UIS: Some indicators have sparse coverage for low-income countries or recent years
OECD SDMX: Occasional API timeouts on large multi-country, multi-year requests; reduce the year range if needed
OECD coverage: 38 OECD members + select partners β does not cover all UNESCO member states
Historical depth: UNESCO UIS data availability varies by indicator; not all series go back to 1970
Language: UNESCO UIS returns indicator labels in English only; OECD labels may vary by dataflow
No real-time data: Both sources publish annually β figures reflect the latest published edition, not live school statistics
Estimated values are labelled: UIS marks part of its observations
UIS_EST(UIS estimate) orNAT_EST(national estimate) β forLR.AG15T99that is 1,306 of 9,818 values. The status column names it; an unlabelled value is a reported one.Data rows carry the ISO code, not the country name: plain names come from
uis_list_countries. The data tools print the code rather than inventing a name.An unknown country code is not an error status: UIS answers HTTP 200 with an empty result set and states the reason in the payload's
hintsfield. The tools print that hint β otherwise a typo would look exactly like a country without data.
Compliance & Data Classification (City of Zurich)
Verbindliche Klassifikation fΓΌr den Einsatz im Schulamt der Stadt ZΓΌrich (German section follows in
README.de.md).
ISDS Protection Class (Stadt ZΓΌrich Schutzbedarfsklassen)
Dimension | Class | Reasoning |
Confidentiality | public | UNESCO UIS data licensed under CC BY-SA 3.0 IGO; OECD EaG under public OECD Terms |
Integrity | normal | Upstream is authoritative; local in-memory cache is TTL-bounded and never written to disk |
Availability | normal | Graceful fallback to bundled static reference data when an API is unreachable |
Overall protection class | G1 β public (ΓΆffentlich) | lowest tier per ISDS Stadt ZΓΌrich |
Data owner: UNESCO UIS / OECD (external)
System owner: Schulamt der Stadt ZΓΌrich
Processes personal data: no
DSG / EDΓB relevance: none (only anonymized country-level aggregates)
Schulamt Classification (BUI / Vertraulich / Streng Vertraulich)
Aspect | Classification |
Tool output (Markdown tables, summaries) | BUI (betrieblich unkritische Information) |
In-memory TTL cache | BUI (same tier as source) |
Structured logs (JSON on stderr, see OBS-003) | BUI β only tool name, params, duration; no PII |
| BUI |
β The server is approved for any Schulamt use case without additional clearance from the data protection officer.
Compatibility
Component | Supported version |
MCP Protocol | 2024-11-05 |
MCP Python SDK |
|
Python | 3.11, 3.12, 3.13 |
|
|
|
|
Major-version upgrades are deliberate decisions β the upper bounds in
pyproject.toml exist so a transitive bump does not silently break the
server. See CHANGELOG.md for the upgrade trail.
π‘οΈ Safety & Limits
Aspect | Details |
Access | Read-only ( |
Personal data | No personal data β UNESCO UIS and OECD EaG publish only aggregated, country-level statistics |
Rate limits | Built-in per-query caps (max 50 indicators per search, max 10 countries per comparison, conservative year ranges) |
Caching | In-memory TTL cache (1800β86400s) reduces upstream load and respects publisher capacity |
Timeout | 30 seconds per upstream API call, with graceful fallback to local reference data |
Authentication | No API keys required β both UNESCO UIS and OECD SDMX are publicly accessible |
Licenses | UNESCO UIS data under CC BY-SA 3.0 IGO; OECD data under OECD Terms and Conditions |
Terms of Service | Subject to ToS of the respective sources: UNESCO UIS, OECD β please cite the source when redistributing |
Attribution | All tool responses include source attribution ( |
MCP Protocol Version
This server speaks two protocol eras over the same endpoint. The client's first request on a connection decides which one applies; a later claim from the other era is refused.
Era | Revision | Who reaches it |
|
| What today's clients speak. The server answers with the revision asked for, or with the |
Per-request envelope |
| A request carrying the |
Both revisions are pinned in
tests/test_protocol_version.py and asserted
against the installed SDK, so a Dependabot bump of mcp cannot move either one
silently. This server builds no ASGI app to send an initialize through, so
the gate asserts the SDK constants rather than a measured response β the
weaker form, named rather than left unsaid.
Note that the SDK's LATEST_PROTOCOL_VERSION is an alias for the modern
era, not for the handshake era β pinning against it alone would leave the era
that current clients actually negotiate free to drift.
Update policy. When the gate fails, do not edit the constant blindly: read
the spec changelog between the two revisions, verify the server still behaves,
then move the constant, this section, README.de.md and
CHANGELOG.md together.
Testing
# 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.py169 tests β 152 offline, 17 against the live source.
Category | Tests | Description |
Edge cases & boundary values | 19 | Year limits, string lengths, null/zero values |
Security & adversarial inputs | 14 | Injection attempts, HTTP error codes, whitespace |
Output quality | 11 | Markdown structure, source attribution, sort order |
Resilience & error cascades | 9 | Full API outage, partial results, timeouts |
Subject-matter correctness | 10 | SDG-4 coverage, correct indicators per focus theme |
Performance & concurrency | 4 | Concurrent requests, time limits |
Schulamt scenarios | 7 | DACH comparison, PISA, teacher shortage |
Source contract vs. the recording | 23 | Field names, envelope, query parameters, hints |
Live tests ( | 17 | The paths, the shape, and the tools themselves |
Why the fixtures are recorded rather than written
A hand-written mock encodes its author's assumption and therefore cannot refute it: production code and fixture come from the same head, the same hour, the same reading of the docs. Where both are wrong, both are wrong together β and the suite stays green.
That is not a hypothetical here. Before 2026-08-08 this repo had 128 green
tests while three of its four UNESCO paths answered HTTP 404 and every data
query returned an empty list. The mocks carried the same invented field names
as the production code (observations, indicatorId, entityType), so
nothing could ever contradict them.
Every fixture under tests/fixtures/ is now a recorded response.
PROVENANCE.md names the source URL, the recording date, the selection rule
and the SHA-256 for each one. Without a date, "recorded" becomes
indistinguishable from "invented" after two years β the file looks the same.
Three of the fixtures are controls: a made-up theme value, a made-up
country code, and the same time series requested twice with different
parameter names. Without them a measurement only shows what we received; with
them it shows what the source actually distinguishes.
Contributing
Contributions are welcome. Please open an issue first to discuss what you would like to change.
Follow the existing code style (Ruff linting, Black formatting)
Add tests for new tools (
tests/test_server.pyortest_extended_scenarios.py)Use the
@pytest.mark.integrationmarker for tests that call live APIsUpdate
CHANGELOG.mdand the tool table in this READMESee CONTRIBUTING.md for the full contribution guide
Changelog
See CHANGELOG.md
Security
To report a vulnerability, see SECURITY.md (π©πͺ Deutsche Version). Please use the private channels described there rather than public issues.
License
MIT License β see LICENSE
Author
Hayal Oezkan Β· github.com/malkreide
Credits & Related Projects
Data: UNESCO Institute for Statistics (UIS) β open education data for all UNESCO member states
Data: OECD Education at a Glance β annual OECD education statistics via SDMX
Protocol: Model Context Protocol β Anthropic / Linux Foundation
Related: swiss-transport-mcp β MCP server for Swiss public transport
Related: zurich-opendata-mcp β MCP server for Zurich city open data
Portfolio: Swiss Public Data MCP Portfolio
MCP Client Configuration
Run via uv's uvx β no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):
{
"mcpServers": {
"global-education-mcp": {
"command": "uvx",
"args": [
"global-education-mcp"
]
}
}
}Available Tools
10 toolseducation_benchmark_countriesARead-only
Benchmarkt mehrere LΓ€nder auf einem Bildungsthema via UNESCO UIS.
Automatisch werden die passenden Indikatoren fΓΌr den gewΓ€hlten Fokus ausgewΓ€hlt und ein strukturierter Vergleich erstellt.
Fokus-Optionen:
literacy: Alphabetisierungsraten (Erwachsene + Jugendliche)
spending: Bildungsausgaben (% BIP, verschiedene Stufen)
completion: Abschlussquoten (Primar, Sek I, Sek II)
teachers: SchΓΌler-Lehrer-VerhΓ€ltnis + Lehrerausbildung
enrollment: Einschulungsraten nach Schulstufe
Args: params: country_codes, focus
Returns: VollstΓ€ndiger Benchmarkreport mit Tabellen fΓΌr alle relevanten Indikatoren
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive. The description adds behavioral context: it automatically selects appropriate indicators based on focus and generates a structured report. This goes beyond annotations but does not detail other potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, using bullet points for focus options. It front-loads the core purpose and then details parameters and output efficiently. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description covers purpose, parameters, and output format. It lacks discussion of error handling or prerequisites but is adequate for a non-destructive benchmarking tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite schema description coverage reported as 0%, the description compensates by explaining the focus parameter with detailed options and linking to the required country_codes parameter. It adds meaning beyond the raw schema by providing context for each focus area.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool benchmarks multiple countries on a specific education topic using UNESCO UIS. It lists five distinct focus areas and contrasts with siblings by emphasizing automated indicator selection for structured comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for benchmarking on specific topics but does not explicitly state when to use this tool versus alternatives like uis_compare_countries. No 'when-not-to-use' guidance or references to sibling tools are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_get_education_indicatorBRead-onlyIdempotent
Ruft Bildungsdaten aus dem OECD Education at a Glance Report ab.
Greift auf die OECD SDMX REST API zu. Liefert strukturierte Daten fΓΌr OECD-LΓ€nder zu Bildungsausgaben, Einschreibungsraten, LehrergehΓ€ltern etc.
Beispiele:
Bildungsausgaben Schweiz/DE/AT: dataflow='EAG_FISC', countries=['CHE','DEU','AUT']
LehrergehΓ€lter OECD: dataflow='EAG_PERS_SALARY'
BeschΓ€ftigung nach Bildungsabschluss: dataflow='EAG_EMP_EDUC'
Args: params: dataflow_id, countries (optional), start_period, end_period
Returns: Markdown-formatierte Datentabelle oder Rohdaten-Zusammenfassung
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is clearly non-destructive. The description adds context about accessing the OECD API and returning structured data, but does not go beyond what annotations imply. No contradictions are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and well-structured, with a clear introduction, helpful examples, and a brief listing of arguments. It front-loads the main purpose and uses bullet points for examples. It could be slightly shorter without losing key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the existence of an output schema (though not provided here), the description adequately covers the return format as markdown table or summary. It also mentions available dataflow IDs. However, it omits potential error conditions or dataset size warnings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides detailed descriptions for each parameter, so the description adds limited value by simply listing parameter names. The description mentions 'dataflow_id' and 'countries' but does not elaborate on their meaning beyond what the schema already provides. With high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves education data from OECD Education at a Glance report via SDMX REST API. It provides specific examples of dataflows and countries, making the purpose evident. However, it does not explicitly differentiate from sibling tools like uis_get_education_data, which serve similar but distinct data sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers examples of usage but lacks explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or scenarios where sibling tools might be more appropriate. This omission reduces clarity for an AI agent deciding which tool to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_list_education_datasetsARead-onlyIdempotent
Listet verfΓΌgbare OECD Education at a Glance DatensΓ€tze auf.
Education at a Glance ist das jΓ€hrliche Referenzwerk der OECD fΓΌr internationale Bildungsvergleiche. Es umfasst 38 OECD-LΓ€nder plus Partner.
Abgedeckte Themenbereiche:
Bildungsbeteiligung und -abschlΓΌsse (EAG_ENRL, EAG_GRAD_ENTR)
Bildungsausgaben und Finanzierung (EAG_FISC)
Lehrpersonal und Arbeitsbedingungen (EAG_PERS, EAG_PERS_SALARY)
Bildungsrendite und Arbeitsmarkt (EAG_EMP_EDUC, EAG_EARN_RATIO)
Returns: Markdown-Liste der DatensΓ€tze mit Beschreibungen und Dataflow-IDs
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, and open-world nature. The description adds value by specifying the return format (Markdown list with descriptions and dataflow IDs) and the scope (OECD countries plus partners), which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and clear sections. It front-loads the main purpose. Slightly verbose in the topic area listing but overall concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, an output schema exists, and rich annotations, the description covers purpose and return value well. However, it lacks guidance on when to use relative to siblings, which slightly detracts from completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (trivially). The description does not need to add parameter semantics, and the baseline for 0 parameters is 4. It doesn't detract from this score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists available OECD Education at a Glance datasets, specifying the resource and action. It enumerates topic areas with example dataflow IDs, effectively distinguishing it from sibling tools like oecd_get_education_indicator or uis_list_countries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. No context about prerequisites or exclusions, such as when a more specific tool like oecd_search_datasets might be appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_search_datasetsARead-onlyIdempotent
Durchsucht alle OECD-DatensΓ€tze nach einem Stichwort.
Γber die OECD SDMX API sind hunderte DatensΓ€tze verfΓΌgbar. Diese Funktion findet DatensΓ€tze mit Bildungsbezug oder anderen Themen.
Args: params: keyword, limit
Returns: Markdown-Liste gefundener DatensΓ€tze mit Dataflow-IDs
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds value by noting the API source ('OECD SDMX API'), that it searches hundreds of datasets, and that the output is a Markdown list with Dataflow-IDs. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a lead sentence stating the purpose, followed by context, then an Args/Returns section. It is concise and contains no superfluous information, earning a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (search with two parameters, output as list), the description covers purpose, data source, and output format. An output schema exists, so explaining return values is unnecessary. Missing details like error handling or empty results are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description barely adds value beyond the input schema: it only lists parameter names ('keyword, limit') without describing their purpose or constraints. The schema itself already contains good descriptions for each parameter, so the description's contribution is minimal, leading to a low score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Durchsucht alle OECD-DatensΓ€tze nach einem Stichwort', identifying the verb (search) and resource (all OECD datasets) with a specific action (by keyword). This distinguishes it from siblings like oecd_list_education_datasets, which likely lists all without searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about the SDMX API and that it finds datasets related to education or other topics, but it does not explicitly state when to use this tool versus alternatives. There is no mention of prerequisites or when not to use it, leaving differentiation to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_compare_countriesARead-onlyIdempotent
Vergleicht Bildungsindikatoren zwischen mehreren LΓ€ndern (UNESCO UIS).
Ideal fΓΌr den direkten internationalen Vergleich: Wie steht die Schweiz im Vergleich zu Finnland, Singapur und dem OECD-Durchschnitt?
Args: params: indicator_id, country_codes (Liste), year (optional)
Returns: Markdown-Vergleichstabelle sortiert nach Indikatorwert
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that it returns a Markdown comparison table sorted by indicator value, which is useful beyond the annotations (readOnlyHint, idempotentHint). It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences plus args/return) and front-loaded with the main purpose. It could be more structured (e.g., bulleted info) but is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (though not shown) and the complexity of the tool (comparison with country list), the description adequately covers input, output format, and use case. It lacks error handling details but is sufficient for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description lists the parameters (indicator_id, country_codes, year) with minimal additional context (e.g., year optional, country codes as list). The schema already provides detailed descriptions for each field, so the description adds limited value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares educational indicators across countries using UNESCO UIS data, and provides an example (Switzerland vs Finland etc.). It is specific and actionable, but does not explicitly differentiate from sibling tools like education_benchmark_countries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Ideal fΓΌr den direkten internationalen Vergleich' suggests when to use, but there is no guidance on when not to use or mention of alternative tools (e.g., uis_get_education_data for single country queries).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_country_education_profileARead-onlyIdempotent
Erstellt ein umfassendes Bildungsprofil fΓΌr ein Land via UNESCO UIS.
Ruft automatisch die wichtigsten SchlΓΌsselindikatoren ab: Alphabetisierung, Einschulungsraten, Abschlussquoten, Bildungsausgaben, SchΓΌler-Lehrer-VerhΓ€ltnis, GeschlechterparitΓ€t.
Args: params: country_code (ISO Alpha-3), latest_year_only
Returns: VollstΓ€ndiges Markdown-Bildungsprofil mit allen Kernindikatoren
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint. Description adds that it returns a Markdown profile with specific indicator types, but no additional behavioral details (e.g., no mention of side effects, auth, or rate limits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with short bullet list of indicators, clear Args and Returns sections. Efficient use of space, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description adequately covers the tool's purpose and return format (Markdown profile). No major gaps, though edge cases like missing data could be addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover parameter details (country_code format, latest_year_only toggle). Description adds value by listing the types of indicators included (literacy, enrollment, etc.), which aids understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a comprehensive education profile for a country using UNESCO UIS, listing specific indicators. It distinguishes from sibling tools like uis_get_education_data (raw data) and uis_compare_countries (comparison).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for obtaining a full country profile, but no explicit guidance on when to use vs alternatives (e.g., uis_get_education_data for raw data). No when-not-to-use or prerequisite conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_get_education_dataARead-onlyIdempotent
Ruft Bildungsdaten von der UNESCO Institute for Statistics API ab.
Kernfunktion des Servers. Liefert international vergleichbare Daten zu einem spezifischen Indikator β fΓΌr ein Land oder alle LΓ€nder.
Typische AnwendungsfΓ€lle:
Alphabetisierungsrate der Schweiz: indicator='LR.AG15T99', country='CHE'
Bildungsausgaben OECD-LΓ€nder: indicator='XGDP.FSGOV', kein Land
Schulabschlussquoten Europa: indicator='CR.1' + Jahresfilter
SchΓΌler-Lehrer-VerhΓ€ltnis: indicator='PTR.1'
Args: params: indicator_id (erforderlich), country_code, start_year, end_year
Returns: Markdown-formatierte Tabelle oder Zeitreihe mit Daten und Metadaten
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that the result is a markdown-formatted table or time series, and warns that omitting a country can return a large dataset. This provides useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose, examples, and parameter list. It is moderately sized and front-loaded. Some redundancy with the schema exists, but overall it is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (nested parameters, many sibling tools), the description covers purpose, usage examples, parameter list, and return format. It references sibling tools indirectly in the parameter description. With annotations and output schema present, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema has detailed descriptions inside $defs, the top-level schema coverage is 0%. The description lists parameters and gives examples, but does not explain each parameter in depth. It partially compensates for the low schema coverage but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves educational data from the UNESCO Institute for Statistics API, specifying it is the core function of the server and providing concrete examples with expected outputs. It distinguishes itself from siblings by focusing on raw indicator data for one or all countries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives typical use cases with example parameters, but does not explicitly tell when to avoid this tool in favor of siblings like uis_compare_countries or uis_list_indicators. The context of usage is implied but lacks explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_list_countriesARead-onlyIdempotent
Listet verfΓΌgbare LΓ€nder und Regionen in der UNESCO UIS-Datenbank auf.
Gibt ISO 3166-1 Alpha-3 Codes zurΓΌck, die fΓΌr Datenabfragen benΓΆtigt werden. Beispiele: CHE (Schweiz), DEU (Deutschland), AUT (Γsterreich), FRA (Frankreich).
Neben EinzellΓ€ndern sind auch regionale Aggregate verfΓΌgbar: Weltregionen, Einkommensgruppen (World Bank), SDG-Regionen.
Args: params: search (optional Textfilter), entity_type (optional)
Returns: Markdown-Liste mit ISO-Codes und LΓ€ndernamen
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds that it returns ISO codes and provides examples, plus the Args/Returns section. No contradictions, and it adds useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the main purpose, includes examples, and is well-structured with paragraphs and an Args/Returns block. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and low tool complexity, the description provides sufficient context: purpose, return format, examples, and types of regions. It is complete for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already contains descriptions for both parameters (search and entity_type). The description briefly repeats them in the Args section but does not add significant new meaning. Schema description coverage is 0% according to signal, but actual schema descriptions exist, so the description adds minimal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing available countries and regions from UNESCO UIS database, returning ISO codes. It distinguishes from sibling tools like uis_compare_countries and uis_get_education_data by focusing on the list of regions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool is used to obtain ISO codes for data queries and lists various region types. It does not explicitly state when not to use, but the context is clear and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_list_indicatorsARead-onlyIdempotent
Listet verfΓΌgbare Indikatoren der UNESCO Institute for Statistics auf.
Die UIS bietet ΓΌber 4'000 Indikatoren zu Bildung, Wissenschaft, Kultur und Kommunikation. Diese Funktion dient zur Exploration und Indikatorsuche.
Wichtige Indikator-Kategorien:
Alphabetisierung (LR.*): Lese-/Schreibkompetenz nach Alter, Geschlecht
Einschulungsraten (NERA.*): Netto-Einschulungsraten nach Schulstufe
SchulabschlΓΌsse (CR.*): Abschlussquoten Primar- bis Sekundarstufe
Bildungsausgaben (XGDP., XUNIT.): % BIP, pro SchΓΌler
Lehrerquoten (PTR., TRTP.): SchΓΌler-Lehrer-VerhΓ€ltnis, Ausbildungsgrad
Args: params: theme (optional), search (optional), limit
Returns: Markdown-Liste mit Indikator-IDs und Beschreibungen
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds behavioral context by explaining it's for exploration and listing categories, but does not disclose additional traits like pagination or rate limits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: starts with purpose, then categories, then simple args/returns. Every sentence is informative. Could be slightly more concise (e.g., the args section is minimal), but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (thousands of indicators with theme/search), the description provides adequate categories and filter options. The output is described as a Markdown list with IDs and descriptions, which aligns with the exploration purpose. No output schema was provided, but the description covers key aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all parameters (theme, search, limit) with clear details, so the description need not repeat them. However, the description adds value by listing example indicator categories (e.g., LR.*, NERA.*) that help the agent understand what to search for, going beyond the schema's formal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies 'listet verfΓΌgbare Indikatoren' (lists available indicators) from UNESCO Institute for Statistics, with a scope of over 4,000 indicators across education, science, culture. It distinguishes from sibling tools like uis_get_education_data (which fetches data) by focusing on exploration and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the function is for 'Exploration und Indikatorsuche' (exploration and indicator search), providing categories to guide use. It doesn't explicitly list when not to use or contrast with siblings, but the categories and purpose imply the correct context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_list_versionsARead-onlyIdempotent
Listet verfΓΌgbare Versionen der UNESCO UIS-Datenbank auf.
Die UIS verΓΆffentlicht mehrmals jΓ€hrlich neue Datenversionen. NΓΌtzlich um sicherzustellen, dass mit den neuesten Daten gearbeitet wird.
Returns: Markdown-Liste mit Versionsbezeichnungen und Publikationsdaten
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds value by explaining that UIS publishes multiple new versions per year and that the tool returns a Markdown list with version names and publication dates, which is beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with only three sentences, front-loaded with the core action. Every sentence adds value: stating function, providing context about publication frequency, and specifying the return format. No unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and a simple listing task, the description is complete. It explains the purpose, the context of version releases, and the return format (Markdown list). Annotations cover safety and idempotency, and an output schema exists. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100% and baseline is 4. The description does not add parameter information because none are needed. This is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists available versions of the UNESCO UIS database, distinguishing it from sibling tools like uis_list_countries and uis_list_indicators. The verb 'listet' and specific resource 'Versionen der UNESCO UIS-Datenbank' provide clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it is useful to ensure working with the latest data, implying usage context, but does not provide explicit when-to-use or when-not-to-use guidance or compare with alternatives. No exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.3.0- First observed
education_benchmark_countries - First observed
oecd_get_education_indicator - First observed
oecd_list_education_datasets - First observed
oecd_search_datasets - First observed
uis_compare_countries - First observed
uis_country_education_profile - First observed
uis_get_education_data - First observed
uis_list_countries - First observed
uis_list_indicators - First observed
uis_list_versions
TDQS
Scored across 10 tools
Each tool targets a distinct operation: listing, searching, retrieving raw data, comparing countries, generating benchmarks, or creating profiles. The only potential overlap (education_benchmark_countries vs uis_compare_countries) is actually complementary (multi-indicator benchmark vs single-indicator comparison), so no ambiguity.
All tools follow a consistent <source>_<verb>_<noun> pattern in snake_case (e.g., uis_list_indicators, oecd_get_education_indicator). The prefix indicates the data source (education_, oecd_, uis_), making it easy to navigate.
With 10 tools, the server covers two major data sources (UNESCO UIS and OECD) across essential operations: discovery, retrieval, comparison, benchmarking, and country profiling. This is a well-scoped set that avoids bloat while providing sufficient functionality.
The tool surface covers the full lifecycle of accessing education statistics: listing available indicators/countries/versions, searching, fetching raw data, comparing countries, creating profiles, and running multi-country benchmarks. No obvious gaps for a read-only data API.
Maintenance
Related MCP Connectors
UNESCO UIS statistics (education, science, culture) with full provenance and fixed releases.
Give your agent web search and authoritative datasets: S&P Global, FRED, OECD, SimilarWeb & more.
Search and query 1,500+ OECD statistical datasets via SDMX. Keyless.
Macro data for AI agents: GDP, inflation, unemployment and more (World Bank, US BLS). No keys.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides access to the World Health Organization's Global Health Observatory data, enabling AI assistants to search, retrieve, and analyze comprehensive health indicators, country statistics, disease burden data, and regional health trends through WHO's OData API.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables easy access to open data from the Swedish National Agency for Education, allowing querying and integration of educational statistics and facts through large language models.1MIT
- AlicenseAqualityCmaintenanceA Model Context Protocol server that connects AI assistants to UNESCO Institute for Statistics data, enabling natural language search, retrieval, and comparison of indicators across countries.133MIT
- AlicenseAqualityFmaintenanceProvides AI assistants access to over 5,000 OECD economic and statistical datasets via the SDMX API for search, analysis, and comparison across 38 countries.920 npm8MIT