Skip to main content
Glama

ilostat-mcp-server

Search ILOSTAT indicators

ilostat_search_indicators
Read-onlyIdempotent

Search ILOSTAT's catalog of labour-statistics indicators by plain-language terms and filters. Each hit is one indicator with its datasets — one per available frequency (annual, quarterly, monthly) — plus breakdowns, coverage years, number of reference areas, source database, and last update; pass a dataset ID to ilostat_describe_indicator for its units and breakdown codes, then to ilostat_query_indicator or ilostat_compare_geographies for values. Every search term must match a word or word prefix in the indicator's label, subject, database, breakdown names, code, or definition; a term that matches no word or word prefix anywhere in the catalog matches the words sharing its stem instead (informality finds informal, unionization finds union), and the notice names it. British and American spellings (labour/labor) match alike. The measure filter lists every indicator of one measured quantity, as ilostat_describe_indicator's related indicators count them. Facet counts reflect all applied filters.

Input Schema

NameRequiredDescriptionDefault
limitNoHits per page, at most 50; a larger value, up to 1,000, is applied as 50 and the notice says so.
queryNoPlain-language terms, e.g. "youth unemployment" or "informal employment rate". Case, accents, and punctuation are ignored, labor matches labour, and a trailing plural s is tolerated; a term no catalog word starts with is matched by its stem (-ity, -ization, -ive, -ment, -ing, -ed, -ly, and a plural s dropped, -ies read as y). Omit to browse by filters (results then order by indicator code).
cursorNoOpaque continuation token: the previous page's next_cursor, passed unchanged.
measureNoMeasure code, exactly as ilostat_describe_indicator's measure.code gives it (e.g. EMP_TEMP_NB); case-insensitive. Keeps every indicator measuring that quantity, under any breakdown.
subjectNoSubject code, e.g. LUU (unemployment and labour underutilization); case-insensitive. ilostat_list_reference topic subjects lists them.
databaseNoSource database code, e.g. LFS or ILOEST (the ILO modelled estimates); case-insensitive. ilostat_list_reference topic databases lists them.
breakdownNoClassification type the indicator is broken down by, e.g. AGE, ECO, GEO, SEX; case-insensitive. ilostat_list_reference topic classification_types lists them.
frequencyNoKeep only datasets of this frequency: A annual, Q quarterly, M monthly. Narrows each hit's datasets; an indicator with none left drops out.
aggregates_onlyNoKeep only datasets carrying World, regional, or income-group rows, dropping indicators with none.

Output Schema

NameRequiredDescriptionDefault
capNoThe limit applied to this page.
hitsNoThis page of hits. With a query: tier, then more reference areas first, then code. Without: by code.
errorNoPresent when the call failed. Absent on success.
shownNoHits returned on this page.
totalNoIndicators matched after all filters.
facetsNoCounts over the fully filtered match set, not just this page.
noticeNoThat a limit past the page cap was applied as the cap, why the query was browsed by filters alone, which terms were matched by stem and as which catalog words (check those hits are on topic), how to widen a search that matched nothing, that the cursor starts past the last match, and how to reach the remaining pages — whichever apply, joined.
truncatedNoTrue when more hits remain beyond this page.
next_cursorNoPass as cursor to get the next page; absent on the last page.
catalog_as_ofNoISO timestamp the searched catalog was last confirmed current.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Hits per page (1–50)."New value: +"Hits per page, at most 50; a larger value, up to 1,000, is applied as 50 and the notice says so."
    • changedInput schema / properties / limit / maximum
      Previous value: -50New value: +1000
    • addedInput schema / properties / measure
      Added value: +{
      +  "description": "Measure code, exactly as ilostat_describe_indicator's measure.code gives it (e.g. EMP_TEMP_NB); case-insensitive. Keeps every indicator measuring that quantity, under any breakdown.",
      +  "maxLength": 32,
      +  "type": "string"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Plain-language terms, e.g. \"youth unemployment\" or \"informal employment rate\". Case, accents, and punctuation are ignored, labor matches labour, and a trailing plural s is tolerated. Omit to browse by filters (results then order by indicator code)."New value: +"Plain-language terms, e.g. \"youth unemployment\" or \"informal employment rate\". Case, accents, and punctuation are ignored, labor matches labour, and a trailing plural s is tolerated; a term no catalog word starts with is matched by its stem (-ity, -ization, -ive, -ment, -ing, -ed, -ly, and a plural s dropped, -ies read as y). Omit to browse by filters (results then order by indicator code)."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `unknown_filter_code`: database, subject, or breakdown is not an ILOSTAT code. `invalid_cursor`: cursor does not decode. `catalog_unavailable`: No catalog snapshot has loaded and the load failed, or the first load has not finished within 30 s. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `unknown_filter_code`: database, subject, breakdown, or measure is not an ILOSTAT code. `invalid_cursor`: cursor does not decode. `catalog_unavailable`: No catalog snapshot has loaded and the load failed, or the first load has not finished within 30 s. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / notice / description
      Previous value: -"Why the query was browsed by filters alone, how to widen a search that matched nothing, that the cursor starts past the last match, and how to reach the remaining pages — whichever apply, joined."New value: +"That a limit past the page cap was applied as the cap, why the query was browsed by filters alone, which terms were matched by stem and as which catalog words (check those hits are on topic), how to widen a search that matched nothing, that the cursor starts past the last match, and how to reach the remaining pages — whichever apply, joined."
  2. First observed

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and closed-world behaviour, so the safety profile is covered. The description adds real value beyond that with matching semantics (word/prefix matching, stem fallback with a naming notice, labour/labor equivalence) and the note that facet counts respect all applied filters; however, the limit is documented as being capped at 50 in the schema itself.

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?

Purpose and workflow are front-loaded in the first sentence, and each subsequent clause carries distinct information about matching or filtering. The middle sentence is a dense run-on packing prefix matching, stem fallback and spelling equivalence, which could be split for readability, but nothing is padding.

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?

For a 9-parameter search tool with full schema coverage, an output schema and existing annotations, the description covers everything an agent needs: result shape, filter semantics, match fallbacks, the limit cap, and the hand-off chain to sibling tools.

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 description coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not carry: that the measure filter returns every indicator of that quantity under any breakdown and counts them as ilostat_describe_indicator does, and that facet counts reflect all applied filters.

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 opening sentence states a specific verb and resource (search ILOSTAT's catalog of labour-statistics indicators) and immediately defines the unit of a hit, so the agent knows exactly what comes back. It is clearly separable from siblings like ilostat_describe_indicator and ilostat_query_indicator, which it explicitly positions downstream.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit workflow: search here, pass a dataset ID to ilostat_describe_indicator for units and breakdowns, then to ilostat_query_indicator or ilostat_compare_geographies for values. It also tells the agent to omit the query to browse by filters and points to ilostat_list_reference for valid subject/database/classification codes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.