Strong foundation with 14 well-named, verb-prefixed tools covering a coherent domain (WHO GHO health data). All tools have descriptions (avg 120 chars) and input schemas with types. Parameter descriptions are present and specific (e.g., 'ISO3 country codes or country names'). Output schemas are documented in code comments. Key gaps: no enum constraints on string parameters (e.g., sex, country_group values), no explicit error recovery guidance in descriptions, and output field documentation is sparse. The server demonstrates good composition (tools chain logically) and security awareness (read-only operations, input validation via ArgModelBase.extra='forbid'). Baseline: 549 production tools average 18-char names (this server: 10-27 chars, on target); 94% of A+ tools have docstrings (this server: 100%); 100% of A+ tools document return types (this server: ~70% explicit in code).
Compare multiple countries on a single indicator, with optional year/sex filters.
Fetch a country profile: headline indicators across health outcomes, service coverage, workforce, financing, and disease burden.
Describe the disaggregation dimensions available for an indicator.
Find ISO3 country codes by name fragment (uses the COUNTRY dimension).
Get the ISO3 member codes for a named country group.
Get the allowed values for a dimension.
Fetch tidy indicator data for one or more countries, with optional year/sex/dimension filters.
String parameters lack enum constraints. 'sex' accepts free-form strings instead of declaring valid values ('BOTH', 'MALE', 'FEMALE'). 'country_group' similarly lacks enum. LLMs will hallucinate invalid values.
Output schemas documented in code comments but not exposed in tool registration. LLMs cannot see what fields to expect from responses (e.g., _tidy_rows_to_csv returns CSV with fields like 'country_code', 'year', 'sex', 'value', not visible in tool metadata).
Error handling lacks recovery guidance. Descriptions do not explain what to do if a country code is invalid, an indicator does not exist, or a dimension filter is rejected. Errors are raised but not actionable for LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Fetch raw indicator data with arbitrary OData $filter expressions.
Fetch indicator metadata: name, definition, data availability by country/year.
List all available country groupings (World Bank regions, UN LDCs, OECD, etc.).
List all GHO dimensions (e.g. COUNTRY, REGION, SEX, AGEGROUP, WORLDBANKINCOMEGROUP).
List WHO GHO indicators (paginated).
Search GHO indicators by case-insensitive substring of IndicatorName.
Curated index of comparative-health-systems topics → indicator codes. Covers health outcomes, service coverage, workforce, financing, NCDs, infectious diseases, child health, risk factors, mental health, environment/climate, medicines access, quality & safety, and equity/SDG framing. Pass any returned code to get_indicator_metadata or compare_countries.
Parameter 'country' and deprecated alias 'country_name' in find_country_code create confusion. Description warns 'pass either...not both' but LLMs may still pass both, causing silent failure or unexpected behavior.
Pagination limits (top=200, skip unbounded) not enforced in descriptions. LLMs may request skip=1000000 or top=10000, causing API strain or timeouts. No guidance on when to use pagination vs. country_group filters.