MCP server providing tools and resources for querying city and country information from CSV data
Two tools with basic schemas and descriptions, but significant quality gaps. Tool names follow verb_noun pattern (get_*), which is good. However, descriptions are terse (avg 65 chars, well below the 194-char baseline), lack context on WHEN to use each tool, and contain a typo ('detais'). Parameter descriptions are minimal (avg 30 chars vs 72-char baseline). No output schema documentation. No error handling guidance. No pagination support despite tools returning lists. Schemas are present but sparse, only type and description, no constraints, enums, or validation rules. No tool annotations (readOnlyHint, etc.). Overall structure is functional but falls short of production quality.
Gets a list of the cities of a country.
Gets the detais of a city from a country code and the city name.
Tool descriptions are terse and lack context. 'Gets the detais of a city...' (65 chars) is below the 194-char baseline and contains a typo. Descriptions should explain WHAT the tool does, WHEN to use it, and what it returns.
No output schema documented. LLMs cannot plan downstream calls or extract fields without knowing the response structure. get_city_details returns a dict; get_cities_in_country returns a list, neither is formally specified.
Parameter descriptions are minimal (avg 30 chars). 'The country code in 2 letter' lacks format clarity. Should specify: 'ISO 3166-1 alpha-2 country code (2 uppercase letters, e.g., PT, US, FR)' to guide LLM input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
No error handling guidance. If country_code is invalid or city not found, what does the tool return? How should the LLM recover? Missing error classification and recovery hints.
get_cities_in_country returns a list with no pagination support. If a country has 1000+ cities, the response could exhaust context. Should accept limit/offset params and document max result size.