UNESCO UIS — Education, Science & Culture Statistics (provenance-first)
Server Details
UNESCO UIS statistics (education, science, culture) with full provenance and fixed releases.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- SidneyBissoli/uis-mcp-server
- GitHub Stars
- 1
- Server Listing
- uis-mcp-server
TDQS
Scored across 5 tools
Each tool has a clear, distinct purpose: search and fetch are for document retrieval per the deep research contract, while uis_get_data, uis_list_geo_units, and uis_search_indicators handle data queries, geographic codes, and indicator lookup respectively. Even search and uis_search_indicators are unambiguous because one returns document ids and the other returns indicator codes.
The uis_* tools follow a consistent verb_noun snake_case pattern (get_data, list_geo_units, search_indicators), but search and fetch deviate as bare verbs. This is an intentional exception for the OpenAI Deep Research contract, but it still introduces a mixed convention.
Five tools is well-scoped for a statistics server: search and fetch handle document retrieval, while three uis_* tools cover indicator discovery, geographic codes, and data retrieval. No tool is redundant, and the count is appropriate for the domain.
The tool surface is complete for a read-only statistics server: users can search the indicator catalog, list valid geo units, fetch raw data with footnotes, and retrieve documents. The server explicitly scopes out ILO data to a sibling server, so no critical operations are missing.
Available Tools
5 toolsfetchDeep Research DocumentARead-onlyIdempotentInspect
Returns the full document for an id obtained from search, as { id, title, text, url, metadata }: text is the readable content (Markdown) and url the canonical public page to cite.
Companion of search in the OpenAI Deep Research contract, over the UNESCO UIS statistics (≈5,000 indicators: education — enrolment, completion, literacy, teachers, spending, SDG 4 —, science/R&D (SDG 9.5), culture (SDG 11.4) and demographic context) catalog. Only ids returned by search are valid; an unknown id returns an error.
The uis_* tools remain the tools for data queries.
Behavior: read-only and idempotent — a live GET against the public source when the document needs it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifier of a document returned by `search` |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Unique identifier of the document on this server; what `fetch` takes |
| url | Yes | Canonical public URL of the document — ChatGPT's citation depends on it |
| text | Yes | Full readable content of the document (Markdown) |
| title | Yes | Human-readable title of the document |
| metadata | No | Additional key/value pairs about the document (kind, source, period…) |
| provenance | Yes | |
| attribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint; the description adds beyond that by explaining the live GET behavior against the public source and the error condition for unknown ids. This gives the agent practical expectations without contradicting 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 front-loaded with the primary action and return contract, followed by domain context, error behavior, and routing guidance. Each sentence provides distinct value, though the catalog context sentence adds length and density.
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?
For a one-parameter fetch tool with an output schema, the description covers the return shape, id provenance, error behavior, behavioral traits, and sibling distinctions. Nothing needed for the agent to invoke it correctly is missing.
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 coverage is 100% with the id description, so the baseline is 3. The description adds meaningful extra context by stating that only ids from `search` are valid and that an unknown id errors, reinforcing validation rules beyond the schema's simple field description.
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 opens with a specific verb and resource: 'Returns the full document for an id obtained from `search`', and details the exact return shape ({ id, title, text, url, metadata }). It also distinguishes itself from the `uis_*` data query tools, so an agent can immediately tell this is the document-retrieval companion to `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?
It explicitly states that only ids returned by `search` are valid and that unknown ids return an error, giving clear input constraints. It also directs data queries to the `uis_*` tools, providing an unambiguous 'when not to use this tool and what to use instead' rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchDeep Research SearchARead-onlyIdempotentInspect
Searches the UNESCO UIS statistics (≈5,000 indicators: education — enrolment, completion, literacy, teachers, spending, SDG 4 —, science/R&D (SDG 9.5), culture (SDG 11.4) and demographic context) catalog and returns up to 10 matching documents as { id, title, url }, ordered by relevance (an empty list means nothing matched).
This tool exists for the OpenAI Deep Research contract: ChatGPT deep research, company knowledge and research workflows over the Responses API require exactly the tools search and fetch. Pass one of the returned ids to fetch to read the document.
For direct questions and for data (values, series, rankings) prefer the uis_* tools, which return the actual data with provenance — this is a catalog index, not a data query.
Query: natural language or keywords, Portuguese or English; accents and case are ignored.
Behavior: read-only and idempotent — the catalog comes from the public source and is cached in memory.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search terms, natural language or keywords (accents and case are ignored) |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Matching documents, in relevance order |
| provenance | Yes | |
| attribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although read-only and idempotent are already in annotations, the description adds valuable behavioral detail: up to 10 results, relevance ordering, empty list meaning no match, and the fact that the catalog comes from a public source and is cached in memory. This goes well 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 front-loaded with the core behavior and return format, then efficiently covers contract context, alternatives, query expectations, and behavior in separate short sections. Each sentence adds practical 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?
For a single-parameter catalog search tool, the description is complete: it defines the result contract, ordering, empty-result behavior, language support, and how to continue the workflow via `fetch`. Nothing invocation-critical is missing.
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 fully documents the `query` parameter, so the baseline is 3. The description adds meaningful extra context by specifying supported languages ('Portuguese or English') and reiterating that natural language or keywords are acceptable.
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 a specific verb ('Searches'), a specific resource ('UNESCO UIS statistics catalog'), and the exact result shape ('{ id, title, url }'). It also differentiates itself from the uis_* tools by calling itself 'a catalog index, not a data query.'
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 tells the agent when to use this tool versus alternatives: pass returned ids to `fetch`, and prefer `uis_*` tools for direct data questions. This is highly actionable and leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_get_dataGet UNESCO UIS dataARead-onlyIdempotentInspect
Statistical records from the UNESCO Institute for Statistics Data API, filtered by indicator codes (from uis_search_indicators, up to 25), geo unit codes (from uis_list_geo_units) and year range. Set include_footnotes for per-record source notes. Returns raw UIS records only — it does not aggregate, convert or otherwise transform values; ILO labour statistics live in the sibling ILOSTAT MCP server. Broad queries are rejected with the record count — narrow by geo unit or years.
| Name | Required | Description | Default |
|---|---|---|---|
| end_year | No | Last year, e.g. 2024 | |
| geo_units | No | Geo unit codes from uis_list_geo_units (e.g. ["BRA","ARG"]); omit for all | |
| indicators | Yes | Indicator codes from uis_search_indicators (e.g. ["CR.1"]) | |
| start_year | No | First year, e.g. 2015 | |
| provenance_mode | No | Provenance verbosity: 'concise' (default — source, url, vintage, retrieval date, citation, license) or 'detailed' (full canonical block with dataset, dimension key and notices) | |
| include_footnotes | No | Include per-record footnotes (source notes); default false |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| columns | Yes | |
| provenance | Yes | |
| rows_count | Yes | |
| attribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior: values are returned raw and untransformed, and oversized queries are rejected with the record count rather than truncated. It stops short of describing pagination or any result-size cap on accepted queries.
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?
Three dense sentences, front-loaded with the resource and filters before the constraints and caveats. Every clause carries information; the only cost is that the raw-records and ILOSTAT disclaimers are stacked into one long sentence, slightly diluting scannability.
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?
An output schema exists, so return values need no explanation. Combined with annotations covering the safety profile and a 100%-documented schema, the description supplies the remaining essentials: where codes come from, the 25-indicator ceiling, raw/unaggregated output, and the rejection behavior for broad queries.
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 description coverage is 100%, so a baseline of 3 applies, and the description goes beyond it by tying 'indicators' to uis_search_indicators with a max of 25 and 'geo_units' to uis_list_geo_units, plus explaining what include_footnotes yields. It adds cross-tool provenance but no syntax detail for year bounds beyond what the schema already shows.
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?
States a specific verb and resource ('statistical records from the UNESCO Institute for Statistics Data API') and immediately scopes it by the three filter axes. It also distinguishes itself from siblings by naming uis_search_indicators and uis_list_geo_units as the code sources, and by ruling out the ILOSTAT MCP server's data.
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?
Gives explicit prerequisites (codes must come from uis_search_indicators / uis_list_geo_units) and operational guidance ('narrow by geo unit or years' when broad queries are rejected). It does not, however, contrast this tool with the generic 'fetch' and 'search' siblings, so routing between those remains implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_list_geo_unitsList UNESCO UIS geo unitsARead-onlyIdempotentInspect
Valid geographic codes for uis_get_data: 462 geo units — countries (NATIONAL, ISO alpha-3 codes like BRA) and regional aggregates (REGIONAL). Filter by name/code and type. Does not return statistical values; these codes apply only to uis_get_data, not to other statistical servers.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Only countries (NATIONAL) or only regional aggregates | |
| limit | No | Maximum results (default 100) | |
| offset | No | Results to skip, for pagination (default 0) | |
| search | No | Case-insensitive filter on name, or exact code (e.g. "BRA") | |
| provenance_mode | No | Provenance verbosity: 'concise' (default — source, url, vintage, retrieval date, citation, license) or 'detailed' (full canonical block with dataset, dimension key and notices) |
Output Schema
| Name | Required | Description |
|---|---|---|
| offset | Yes | |
| showing | Yes | |
| has_more | Yes | |
| geo_units | Yes | |
| provenance | Yes | |
| attribution | Yes | |
| next_offset | No | |
| total_matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds real behavioral context beyond the annotations: the size of the result set (462 units) and the important scope constraint that these codes apply only to uis_get_data, not other statistical servers.
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?
Two sentences with no filler, and the most important facts — what the codes are and where they apply — are front-loaded. Every clause carries information an agent needs.
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 return format needn't be explained, and the description still clarifies that no statistical values are returned. For a low-complexity lookup tool with full parameter documentation and annotations, nothing an agent needs to call it correctly is missing.
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 description coverage is 100%, so all five parameters (type, limit, offset, search, provenance_mode) are already documented, including the NATIONAL/REGIONAL enum and the search-by-name-or-code semantics. The description's 'Filter by name/code and type' merely restates what the schema provides, so the baseline of 3 applies.
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 names the specific resource (462 UNESCO UIS geographic codes) and its exact role: supplying valid codes for uis_get_data. It distinguishes its output from statistical data and explicitly scopes the codes to uis_get_data rather than other statistical servers, so the agent can separate it from siblings like uis_get_data and uis_search_indicators.
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?
It clearly frames the use case — resolving valid geographic codes before calling uis_get_data — and states what the tool does not do (return statistical values). It stops short of an explicit 'call this first to resolve codes' instruction or direct comparison with siblings, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uis_search_indicatorsSearch UNESCO UIS indicatorsARead-onlyIdempotentInspect
Search the UNESCO Institute for Statistics catalogue of ~5,000 indicators — education, science/R&D, culture and communication — by keywords in the name or code, optionally filtered by theme. All terms must match (AND, case-insensitive), so start with 2–3 words and drop terms if you get 0 results. Everyday and US wording is resolved to the UIS's own (enrollment→enrolment, spending→expenditure, preschool→pre-primary, university→tertiary, graduation→completion, girls/boys→female/male); when that happens the response says so in vocabulary_notes. Returns indicator codes to use with uis_get_data, plus each indicator's data availability (years, record count). Searches the catalogue only — it does not return statistical values (use uis_get_data); ILO labour statistics live in the sibling ILOSTAT MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default 20) | |
| query | Yes | Keywords, matched against indicator name and code, AND between terms (e.g. "literacy rate youth") | |
| theme | No | Restrict to one UIS theme | |
| offset | No | Results to skip, for pagination (default 0) | |
| provenance_mode | No | Provenance verbosity: 'concise' (default — source, url, vintage, retrieval date, citation, license) or 'detailed' (full canonical block with dataset, dimension key and notices) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| offset | Yes | |
| showing | Yes | |
| has_more | Yes | |
| indicators | Yes | |
| provenance | Yes | |
| attribution | Yes | |
| next_offset | No | |
| total_matches | Yes | |
| vocabulary_notes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description reveals AND semantics, case-insensitivity, vocabulary normalization to UIS terminology, the response's vocabulary_notes field, and the return of data-availability metadata. This substantially enriches the agent's expectations beyond what annotations alone convey.
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?
Four dense, front-loaded sentences with no filler. Every sentence contributes either scope, matching semantics, vocabulary behavior, return content, or routing to alternatives, and the purpose appears immediately in the first sentence.
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?
For a search tool with a rich schema and output schema, the description covers what the tool searches, how matching behaves, how vocabulary is normalized, what the response contains, and how the tool relates to its key siblings. Nothing essential for correct invocation is missing.
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 already documents all 5 parameters fully, so the baseline is 3. The description adds meaningful semantics for query matching (AND, case-insensitive, vocabulary resolution) and mentions optional theme filtering, going beyond the schema's simple field 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?
States a specific verb and resource: searching the UNESCO UIS catalogue of ~5,000 indicators by keyword in name or code with optional theme filtering. It links to uis_get_data as the downstream consumer of results, which clearly distinguishes it from siblings.
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?
Explicitly directs users to uis_get_data for statistical values and to the ILOSTAT server for ILO labour data, establishing when not to use this tool. It also gives practical search strategy guidance: start with 2–3 terms and drop terms if 0 results.
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 tool update
- Changed
uis_search_indicators3 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Keywords, matched against indicator name and code (e.g. \"literacy rate youth\")"New value: +"Keywords, matched against indicator name and code, AND between terms (e.g. \"literacy rate youth\")" - added
Output schema / properties / hintAdded value: +{ + "type": "string" +} - added
Output schema / properties / vocabulary_notesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
3 tool updates
- Changed
uis_get_data1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
uis_list_geo_units1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
uis_search_indicators1 field changed- added
Input schema / additionalPropertiesAdded value: +false
2 tool updates
- Added
fetch - Added
search
1 tool update
- Changed
uis_search_indicators8 fields changed- removed
Output schema / properties / indicators / items / properties / geo_types / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / indicators / items / properties / geo_types / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / indicators / items / properties / last_data_update / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / indicators / items / properties / last_data_update / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / indicators / items / properties / records / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / indicators / items / properties / records / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / indicators / items / properties / years / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / indicators / items / properties / years / typeAdded value: +[ + "string", + "null" +]
3 tool updates
- First observed
uis_get_data - First observed
uis_list_geo_units - First observed
uis_search_indicators
Related MCP Connectors
Macroeconomic and other official data from 170+ publishers, resolved from natural language with provenance.
World Bank World Development Indicators: curated country-year economy, health, education and more.
UK Office for National Statistics dataset catalogue + Beta JSON API
UN Sustainable Development Goal indicators for all 17 goals, curated by country and year. Free.
Related MCP Servers
- AlicenseAqualityAmaintenanceProvides AI assistants access to international education data from UNESCO UIS (4,000+ indicators) and OECD Education at a Glance via SDMX, with no API keys required.101MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to discover, retrieve, and compare official international development indicators from sources such as the World Bank, FAOSTAT, WHO, UNICEF, and IMF, while preserving source identifiers, units, and citations.10MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language queries to UNESCO Institute for Statistics data via Pipeworx gateway.2 npmMIT
- 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
Glama MCP Gateway
Add one secure layer between your agents and this server.