Skip to main content
Glama
malkreide

global-education-mcp

by malkreide

πŸ‡¨πŸ‡­ Part of the 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 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.

πŸ‡©πŸ‡ͺ Deutsche Version

global-education-mcp demo flow


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) or pip

  • No 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-mcp

Quickstart

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

Try 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_HOST defaults to 127.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.0 is 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 + auth

Plain 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-mcp

Render.com:

  1. Push/fork the repository to GitHub

  2. On render.com: New Web Service β†’ connect GitHub repo

  3. 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=8000
  4. In 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

uis_list_indicators

Search and list available indicators (4,000+)

uis_list_countries

List countries and regions with ISO codes

uis_get_education_data

Retrieve data for a specific indicator

uis_compare_countries

Multi-country comparison for one indicator

uis_country_education_profile

Full education profile (10 core indicators)

uis_list_versions

List available database versions

OECD Tools

Tool

Description

oecd_list_education_datasets

List Education at a Glance datasets

oecd_get_education_indicator

Retrieve OECD education data via SDMX

oecd_search_datasets

Search OECD dataflows by keyword

Cross-Source Tools

Tool

Description

education_benchmark_countries

Benchmark multiple countries across 5 focus themes (UNESCO UIS)

Resources & Prompts

Resources:

  • education://indicators/unesco – Quick reference for core UNESCO indicators

  • education://datasets/oecd – Quick reference for OECD Education at a Glance dataflows

Prompts:

  • bildungsvergleich_schweiz – Switzerland vs. Finland, Singapore, Japan

  • sdg4_monitoring – SDG-4 report for CH/DE/AT

Country Codes

ISO 3166-1 Alpha-3 standard:

Code

Country

Code

Country

CHE

Switzerland

FIN

Finland

DEU

Germany

SGP

Singapore

AUT

Austria

KOR

South Korea

FRA

France

JPN

Japan

SWE

Sweden

USA

United States

Example Use Cases

Query

Tool

"What is Switzerland's literacy rate vs. Finland and Singapore?"

uis_compare_countries

"Education expenditure as % of GDP for CHE, DEU, AUT over 10 years"

uis_get_education_data

"Create a full education profile for South Korea"

uis_country_education_profile

"Which OECD datasets cover teacher salaries?"

oecd_search_datasets

"Compare secondary graduation rates across 5 European countries"

education_benchmark_countries

"Create an SDG-4 monitoring report for Switzerland"

sdg4_monitoring (prompt)

β†’ 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 version

Known 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) or NAT_EST (national estimate) – for LR.AG15T99 that 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 hints field. 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

tools.lock.json, audits/ artefacts

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

>=1.0.0,<2.0.0

Python

3.11, 3.12, 3.13

httpx

>=0.27.0,<1.0.0

pydantic

>=2.0.0,<3.0.0

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 (readOnlyHint: true) β€” the server cannot modify, write or delete any data

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 (Source: UNESCO UIS / Source: OECD Education at a Glance)


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

initialize handshake

2024-11-05 … 2025-11-25

What today's clients speak. The server answers with the revision asked for, or with the 2025-11-25 ceiling when the request asks for something newer.

Per-request envelope

2026-07-28

A request carrying the 2026-07-28 _meta envelope opens a modern connection.

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.py

169 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 (-m integration)

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.py or test_extended_scenarios.py)

  • Use the @pytest.mark.integration marker for tests that call live APIs

  • Update CHANGELOG.md and the tool table in this README

  • See 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


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 tools
education_benchmark_countriesA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_indicatorB
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_datasetsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_datasetsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_countriesA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_profileA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_dataA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_countriesA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_indicatorsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_versionsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 10 tool updatesv0.3.0
    • First observededucation_benchmark_countries
    • First observedoecd_get_education_indicator
    • First observedoecd_list_education_datasets
    • First observedoecd_search_datasets
    • First observeduis_compare_countries
    • First observeduis_country_education_profile
    • First observeduis_get_education_data
    • First observeduis_list_countries
    • First observeduis_list_indicators
    • First observeduis_list_versions

TDQS

A4/5.0

Scored across 10 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Provides 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.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A 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.
    13
    3
    MIT