Versioned country, administrative-area, city, and district data with search, spatial, timezone, export, and MCP APIs.
The server provides 8 well-named read-only geographic data tools with basic parameter schemas. Naming follows verb_noun convention (search_*, get_*, all tools start with action verbs). Tool descriptions are present but minimal (40-80 chars typically). Parameter descriptions exist but are brief and lack detail on constraints, formats, or valid ranges. Output schemas are not documented in the source, critical for helping LLMs understand response structure and plan downstream calls. No error handling guidance is visible. The server is focused on a narrow, low-risk domain (geographic queries, no state mutation), which limits complexity, but schema documentation gaps and lack of output shape documentation prevent this from reaching 70+.
Get cities by state ID or country ID (limited to prevent large responses)
Get all countries in a specific region (e.g. 'Europe', 'Asia', 'Africa')
Get a country by its numeric ID, ISO2 code, or ISO3 code
Get all states/provinces for a country by country ID or ISO2 code
Get database statistics, coverage limits, and exact production snapshot metadata
Search cities by name, optionally filtered by state or country (limited to prevent large responses)
Search countries by name (supports partial matching and native names)
Output schemas not documented. Tools return geographic data but LLMs have no specification of response structure (e.g., what fields a country object contains, whether results are paginated, what total_count or next_cursor looks like). This prevents LLMs from planning downstream calls and extracting the right data.
Parameter descriptions lack detail on constraints and valid ranges. 'Search term to match against country names' does not specify: case sensitivity, partial vs exact match, max query length, or behavior when no matches found. Descriptions should reference the search behavior explicitly.
Region parameter in get_countries_by_region accepts one of a known set of values ('Europe', 'Asia', 'Americas', 'Africa', 'Oceania') but is defined as free-form string. Should be declared as an enum to prevent hallucinated invalid regions and self-document valid options.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Search states/provinces by name, optionally filtered by country
Limit parameters in get_cities and search_cities have defaults (100) but no maximum constraint declared. Description should specify: 'limit (1-1000, default: 100)' to prevent LLMs from requesting unreasonably large result sets.
Multiple tools accept either ID or code (e.g., get_country accepts id, iso2, iso3; get_states accepts countryId or countryCode). Parameter descriptions do not clarify mutual exclusivity or what happens if both are provided. Should explicitly state: 'Provide either countryId OR countryCode, not both.'
No error handling guidance visible. Tools do not describe what LLMs should do if: a region is invalid, a country ID does not exist, a search returns no results, or rate limits are hit. Error responses should include recovery hints (e.g., 'Region not found. Valid regions: Europe, Asia, Americas, Africa, Oceania').