Skip to main content
Glama

who-gho-mcp-server

Get WHO GHO Indicator Metadata

who_get_indicator_metadata
Read-onlyIdempotent

Fetch metadata for WHO GHO indicator codes: the canonical code, full name, and supported dimensions (e.g. COUNTRY, REGION, SEX, YEAR, WORLDBANKINCOMEGROUP, AGEGROUP). Call this before who_query_indicator_data to confirm valid filter dimensions. Processes the first 10 entries and returns unprocessedCodes to submit next, accepting at most 1000 raw entries. With GHO_CLAMP_LIMITS=false, calls above 10 reject. Many valid indicators have no dimension listing upstream — those return an empty dimensions array with dimensionsNote. Processed codes absent from both the catalog and dimension table appear in notFound. No found entries raises all_not_found only when no unprocessed entries remain.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "indicator_codes": "<indicator_codes>"
    },
    "name": "who_get_indicator_metadata"
  }
}

Input Schema

NameRequiredDescriptionDefault
indicator_codesYesIndicator codes, e.g. ["WHOSIS_000001", "MDG_0000000026"]. Processes the first ten and returns remaining entries for the next call; at most 1000 entries.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
notFoundNoIndicator codes that resolved to neither a catalog name nor any dimension rows — they do not exist in the GHO catalog.
indicatorsNoMetadata for each code that resolved to a catalog entry or dimension rows.
unprocessedCodesNoRemaining request entries in their original order. Submit these codes next.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedInput schema / properties / indicator_codes / description
      Previous value: -"One to ten indicator codes, e.g. [\"WHOSIS_000001\", \"MDG_0000000026\"]."New value: +"Indicator codes, e.g. [\"WHOSIS_000001\", \"MDG_0000000026\"]. Processes the first ten and returns remaining entries for the next call; at most 1000 entries."
    • changedInput schema / properties / indicator_codes / maxItems
      Previous value: -10New value: +1000
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `all_not_found`: No requested indicator code resolved to a catalog entry. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `all_not_found`: No processed indicator code resolved and no unprocessed codes remain. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / indicators / description
      Previous value: -"Metadata for each code that resolved to a catalog entry."New value: +"Metadata for each code that resolved to a catalog entry or dimension rows."
    • changedOutput schema / properties / indicators / items / properties / indicatorCode / description
      Previous value: -"Indicator code."New value: +"Canonical catalog code when resolved; otherwise the requested dimension-only code."
    • changedOutput schema / properties / indicators / items / properties / indicatorName / description
      Previous value: -"Full indicator name as returned by the GHO catalog."New value: +"Decoded catalog name; the code itself when only dimension metadata resolves."
    • addedOutput schema / properties / unprocessedCodes
      Added value: +{
      +  "description": "Remaining request entries in their original order. Submit these codes next.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "indicators",
      +      "notFound"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `all_not_found`: No requested indicator code resolved to a catalog entry. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "all_not_found"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "indicators",
      -  "notFound"
      -]
  3. Changed4 schema fields changed
    • changedOutput schema / properties / indicators / description
      Previous value: -"Metadata for each code that returned results."New value: +"Metadata for each code that resolved to a catalog entry."
    • changedOutput schema / properties / indicators / items / properties / dimensions / description
      Previous value: -"Dimensions this indicator supports for filtering in who_query_indicator_data."New value: +"Dimensions this indicator supports for filtering in who_query_indicator_data. Empty when the GHO dimension table lists none for this code — see dimensionsNote."
    • addedOutput schema / properties / indicators / items / properties / dimensionsNote
      Added value: +{
      +  "description": "Present only when dimensions is empty: explains that the listing is missing upstream rather than the indicator being absent, and how to recover the dimensions from a sample data row.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / notFound / description
      Previous value: -"Indicator codes that returned no metadata — they may not exist in the GHO catalog."New value: +"Indicator codes that resolved to neither a catalog name nor any dimension rows — they do not exist in the GHO catalog."
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses batching (first 10 processed, unprocessedCodes returned), the 1000-entry cap, the GHO_CLAMP_LIMITS=false rejection behavior above 10, empty dimensions arrays with dimensionsNote, notFound routing, and the all_not_found condition. That is unusually rich operational context for a read tool.

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 purpose and the 'call before' directive are front-loaded, and each subsequent sentence covers a distinct edge case (clamping, missing dimensions, notFound, all_not_found). The latter half is dense and edge-case heavy, but no sentence is truly wasted for correct invocation.

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 one-parameter read tool with full annotations and an output schema, the description covers everything an agent needs: what it returns, how to iterate with unprocessedCodes, and how to interpret empty dimensions, notFound, and all_not_found. Some return-shape detail duplicates the output schema, but nothing essential is missing.

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 coverage is 100% and the schema already documents the array and its limits, so the description could rest on baseline 3. It adds marginal value by tying the parameter to the clamping behavior and the returned unprocessedCodes, though most of this overlaps the schema's own parameter text.

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?

States a specific verb (Fetch) and resource (metadata for WHO GHO indicator codes) and enumerates exactly what is returned: canonical code, full name, supported dimensions. It is clearly distinguishable from the query/list siblings by naming who_query_indicator_data as the downstream consumer.

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?

Explicitly says 'Call this before who_query_indicator_data to confirm valid filter dimensions,' giving a clear placement in the workflow. It also warns that many valid indicators lack upstream dimension listings, which pre-empts a common misinterpretation, but it does not contrast against who_list_dimensions or who_search_indicators.

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.