ILOSTAT (International Labour Organization statistics) MCP — global labour market data via the ILO's public SDMX 2.1 REST web service
Three well-named, read-only tools with strong descriptions (194 - 250 chars each) and complete input schemas. All parameters are typed and described. Tool names follow verb_noun pattern (list_, dataflow_, get_). Descriptions include examples and prerequisites. However, output schemas are not documented, LLMs cannot predict response structure for planning. No error handling guidance. No pagination support despite potential for large result sets. Missing tool annotations (readOnlyHint). Composition is sound: tools chain logically (list → structure → get_data).
Get the structure (Data Structure Definition) of one ILOSTAT dataset: its ordered dimensions and, for each, the valid codes. Use this to learn how to build the dot-separated SDMX key for get_data. The key positions correspond to the dimensions in order; an empty position is a wildcard. Common dimensions are REF_AREA (ISO3 country code, e.g. "USA", "FRA"), FREQ (A=annual, Q=quarterly, M=monthly), SEX, AGE, and MEASURE. Always call this before get_data. Example: dataflow_structure({ dataflow_id: "DF_SDG_0852_SEX_AGE_RT" }).
Pull observations from an ILOSTAT dataset. `key` is a dot-separated SDMX dimension filter, one position per dimension in the order given by dataflow_structure; leave a position empty to wildcard it. ILO keys typically start with REF_AREA then FREQ; e.g. get_data({ dataflow_id: "DF_SDG_0852_SEX_AGE_RT", key: "USA.A...", start_period: "2015", end_period: "2024" }) selects the USA, annual frequency, and wildcards the remaining dimensions. Omit `key` (or pass "") to fetch all series — caution, this can be large. Returns decoded series with their dimension labels and per-period values.
Browse or keyword-search ILOSTAT datasets (dataflows) from the International Labour Organization. Each result has an `id` (the dataflowId you pass to get_data / dataflow_structure) and an English name. ILO publishes ~1,200 datasets covering employment, unemployment, labour force participation, wages, hours worked, informality, working poverty, child labour, and occupational safety. Always pass `query` to filter unless you really want the whole list. Example: list_dataflows({ query: "unemployment rate" }) or list_dataflows({ query: "minimum wage" }).
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting) for downstream planning or data extraction.
No error handling guidance. Errors (e.g., invalid dataflow_id, malformed key, API timeout) do not tell LLMs what to do next or how to recover.
No pagination support. list_dataflows returns up to 50 results by default; get_data caps at 200 series. Large result sets risk context window exhaustion without next_cursor or offset/limit pagination.
Tool annotations missing. No readOnlyHint, destructiveHint, or idempotentHint declared. All three tools are read-only and idempotent, annotations would clarify this for agents.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 70 | 2026-07-28+ | v2 |
get_data 'key' parameter lacks format/constraint documentation. Description mentions 'dot-separated' and 'empty = wildcard' but no regex pattern or length limits. LLMs may construct invalid keys.