Model Context Protocol server for OECD statistical data via SDMX API
The OECD MCP server has well-defined tool schemas with proper JSON Schema declarations and comprehensive descriptions. All 9 tools are explicitly registered with names, descriptions, and inputSchemas in src/tools.ts. Naming follows verb_noun convention (search_, list_, get_, query_) and is action-oriented. Descriptions are generally 50-200 characters, meeting LLM-optimized baselines. However, there are gaps: output schemas are not documented anywhere, some parameter descriptions lack constraint details (enums, ranges), error handling lacks recovery guidance, and no tool annotations are present. The server also lacks documentation on response structure, pagination details, and field mappings. Parameter validation occurs but error messages are not shown in the provided code.
Get all available OECD data categories (17 categories covering all topics: Economy, Health, Education, Environment, etc.)
Get the metadata and structure of a specific OECD dataset. Returns dimensions, attributes, and valid values for querying data.
Generate an OECD Data Explorer URL for a dataset. Use this to provide users with a direct link to explore data visually in their browser.
Get a curated list of commonly used OECD datasets across all categories.
Get all OECD data categories with example datasets for each category. Returns comprehensive information about all 19 categories.
List available OECD dataflows (datasets), optionally filtered by category. Use this to browse datasets by topic area.
No output schema documentation. Tool responses return JSON.stringify() of client results, but LLMs cannot plan downstream tool calls or extract fields without knowing the response structure. Pattern baseline: 100% of A+ tools document return types.
Missing enum constraints on category parameter (list_dataflows, search_indicators). Description lists valid values as text ('ECO, HEA, EDU, ...') rather than formal JSON Schema enum. LLMs may hallucinate invalid categories like 'ECONOMY' or 'HEALTH'. Pattern: pattern:constrained-input enforces enum declarations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 54 | 2024-11-05+ | v1 |
Query actual statistical data from an OECD dataset. ⚠️ IMPORTANT: Defaults to last 100 observations (max 1000) to protect context window. Use filters, time periods, or last_n_observations to control data size. Large datasets (e.g. SOCX_AGG) can have 70,000+ observations - always specify limits!
Search for OECD datasets (dataflows) by keyword. Returns matching datasets with their IDs, names, and descriptions.
Search for specific economic or social indicators by keyword (e.g., "inflation", "unemployment", "GDP").
query_data tool description includes example values ('USA.GDP..', '2020-Q1', '2023-Q4') and filter format guidance inline. Pattern baseline warns: 'Do not put example values in descriptions, LLMs reuse them literally.' Move examples to inline parameter descriptions or code samples, use regex pattern constraints, and document SDMX filter syntax separately.
Missing parameter constraints. Numeric parameters (limit, last_n_observations) lack min/max declarations. Description text mentions defaults and max values ('default: 100, max: 1000') but JSON Schema has no minimum/maximum fields. Unbounded numbers let LLMs pass absurd values.
Error handling lacks recovery guidance. Code shows validateInput() and OECD client calls but no visible error messages in the tool handlers. Pattern baseline: 'Error responses must tell the LLM what to do next.' No 'If X fails, try Y' guidance in descriptions.
No tool annotations. No readOnlyHint, destructiveHint, or idempotentHint fields present. All 9 tools are read-only (as declared in FEATURES), but LLMs cannot infer this from tool definitions alone. Modern MCP spec (2026-07-28) recommends annotations for clarity.
Pagination not documented in list_dataflows or query_data. Descriptions mention limits but not whether results are paginated, what fields indicate more data, or how to fetch subsequent pages. Pattern baseline: 'Tools returning lists should accept page/offset and limit parameters and return a total count or next_cursor.'