World Health Organization Global Health Observatory (free, no auth)
Three tools with clear verb-noun naming (get_indicators, get_data, list_countries) and reasonable descriptions (120 - 180 chars). All tools have input schemas with type declarations. However, parameter descriptions lack specificity: 'Optional search keyword' and 'ISO 3-letter country code' are vague about constraints, formats, and error cases. Output schemas are not documented, LLMs cannot predict response structure. No error handling guidance. get_data has 3 parameters but only 1 is required; optional params lack defaults or guidance on mutual exclusivity. Descriptions include example values (e.g., 'WHOSIS_000001', 'USA', '2020'), which LLMs may reuse literally. No pagination or result-limiting guidance despite API returning potentially large datasets.
Get health data values for a WHO indicator code. Returns numeric values by country and year. Example: get_data("WHOSIS_000001", country="USA", year="2020"). Use get_indicators first to find the indicator code.
Search or list WHO Global Health Observatory indicators. Returns indicator codes and names. Use the indicator code with get_data to retrieve actual values. Example: get_indicators("life expectancy") or get_indicators("malaria")
Return all WHO-recognized countries with their 3-letter ISO code, display name, and parent region code. Use the ISO codes returned here as the country parameter in get_data (e.g., "USA", "GBR", "JPN").
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). Responses include raw API fields (e.g., 'total', 'returned', 'data') without explanation of what each field means or how to chain results to downstream tools.
Parameter descriptions lack format constraints and validation rules. 'ISO 3-letter country code' does not specify case sensitivity, whether 'USA' or 'us' is valid, or what happens if an invalid code is passed. 'Year to filter by' does not specify format (YYYY, YYYY-MM-DD, or range).
Example values embedded in descriptions ('WHOSIS_000001', 'USA', '2020'). LLMs tend to reuse example values literally in real calls, causing failures. Replace with formal constraints (enums, patterns, format declarations).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
No error handling guidance. Code throws generic errors ('WHO GHO API error: 404') without telling LLMs what to do next. No recovery hints (e.g., 'Try list_countries() to find valid codes') or error classification (retryable vs. user-fixable).
No pagination or result-limiting guidance. get_indicators() slices to 50 results, get_data() to 100, but descriptions do not mention limits. Large result sets waste tokens and risk context window exhaustion. No next_cursor or offset parameters for continuation.