CountryStateCity MCP — wraps CountryStateCity API (api.countrystatecity.in/v1)
Three tools with clear verb-noun naming (list_countries, get_states, get_cities) and reasonable descriptions (120-180 chars). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are completely undocumented, LLMs cannot predict response structure. Parameter descriptions lack format constraints (e.g., ISO2 code format, state_code dependency on country_code). The _apiKey parameter violates secret-injection pattern by exposing credentials as a tool parameter rather than server-side injection. No error handling guidance, no pagination support despite potentially large result sets, and no idempotency guarantees.
Get cities for a country, optionally filtered by state. Pass country_code (e.g., "US") and optionally state_code (e.g., "CA") to narrow results.
Get all states or provinces for a country by ISO2 code (e.g., "US", "IN", "BR"). Returns state names, codes, and types.
List all countries with ISO codes, capitals, phone codes, currencies, and regions. Returns ~250 countries. Useful for building dropdowns or validating country data.
Output schemas completely undocumented. LLMs cannot predict response structure (fields, types, nesting). Tools return structured objects but provide no schema documentation.
API key exposed as _apiKey tool parameter. Credentials should never appear in tool parameters, they are logged in traces and prompt history. Use server-side secret injection via environment variables.
No pagination support. Tools may return hundreds of countries/states/cities without limit or offset parameters. Large result sets blow context windows and degrade LLM reasoning.
Parameter constraints not documented. 'country_code' and 'state_code' descriptions mention examples but do not specify ISO2 format, length, or case requirements. LLMs will guess and pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
No error handling guidance. Tool implementations throw generic errors ('CountryStateCity API error (404): ...') without recovery hints. LLMs cannot determine if error is retryable or user-fixable.