This MCP server exposes 10 tools for Spanish cadastral (property registry) data queries via the official Catastro API. Tools are well-named with action verbs and have descriptions, but parameter documentation and output schema clarity are inconsistent. Most tools lack explicit output schema documentation, and some parameters have minimal descriptions. Error handling guidance is absent. The server is functional but lacks the rigor expected of production-grade agents.
Tools (10)
coordenadas_a_rcread onlysource verified65/100
Devuelve la(s) referencia(s) catastral(es) asociadas a unas coordenadas.
dcnp_por_direccionread onlysource verified65/100
Consulta los datos catastrales no protegidos de un inmueble por su localización.
Devuelve la(s) referencia(s) catastral(es) por proximidad a unas coordenadas. A partir de unas coordenadas (X e Y) y su sistema de referencia se obtiene la lista de referencias catastrales próximas a un punto así como el domicilio (municipio, calle y número o polígono, parcela y municipio), y la distancia a dicho punto.
obtener_municipiosread onlysource verified72/100
Lista municipios de una provincia (puedes filtrar por nombre parcial).
Output schemas are systematically undocumented across all 10 tools. LLMs cannot predict response structure, forcing them to guess at field names and types. This violates pattern:tool and pattern:response-shaper.
Domain-specific acronyms and Spanish terminology (DCNP, Sigla, RC, Poligono, Parcela, Escalera, Planta, Puerta) are unexplained in parameter descriptions. Non-Spanish-speaking LLMs and users will not understand these terms. Parameter descriptions must explain what sigla means (road type), what escalera means (staircase/building section), etc.
Document output schema for every tool. Example for obtener_provincias: 'Returns: {CodigoFormatted: string (2-digit province code), Nombre: string (official province name), CodigoAdmin: string}'. Use this format for all 10 tools.
Expand all domain-specific acronyms and Spanish terms in parameter descriptions. Instead of 'sigla', write 'sigla (road type code: CL=Calle/Street, AV=Avenida/Avenue, PZ=Plaza/Square, etc.)'. For every tool, define: RC (Cadastral Reference), DCNP (Non-Protected Cadastral Data), poligono (cadastral polygon number), parcela (plot number), escalera (building section/staircase), planta (floor/level), puerta (apartment/unit number).
Add explicit prerequisite hints to tool descriptions. Example for dcnp_por_direccion: 'Prerequisites: You must have provincia (call obtener_provincias if needed), municipio (call obtener_municipios), tipo_via and via name (call obtener_vias), and numero (call obtener_numeros). Returns cadastral data for a specific address.'
Add error recovery guidance. Wrap each tool's description with: 'If [specific error occurs], try [recovery step]. Example: If provincia not found, call obtener_provincias to list valid province names.'
Implement and document result limits and pagination. E.g., 'obtener_provincias returns all provinces (typically ~50). If obtener_municipios returns >100 results, implement limit=50 and offset=0 parameters and document in description: Returns max 50 results; use offset to paginate.'
Clarify the distinction between tools that query by address (obtener_numeros → dcnp_por_direccion) vs. by cadastral reference (dcnp_por_rc) vs. by geometry (dcnp_por_poligono_parcela). Add a decision tree in tool descriptions: 'Use this tool if you have: [one of these identifiers].'
Score history
Overall score trend
↑ 31 points across a rubric change (v1 → v2)
48/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
F
48
2026-07-28+
v2
2026-03-09
F
17
-
v1
read onlysource verified64/100
Consulta número de una vía (devuelve RC del número si existe o aproximación).
obtener_provinciasread onlysource verified67/100
Lista provincias disponibles en los servicios del Catastro.
obtener_viasread onlysource verified67/100
Lista las vías / calles de un municipio (podemos filtrar por nombre parcial).
No error handling guidance. If a user passes an invalid provincia or if the Catastro API times out, the tool will return a raw error or exception. Descriptions must include recovery hints like 'If provincia not found, call obtener_provincias first.' Current code uses raise_for_status() which will throw HTTP errors with no guidance.
Tool naming and descriptions do not clearly disambiguate the query hierarchy. obtener_vias, obtener_numeros, dcnp_por_direccion, dcnp_por_rc, and dcnp_por_poligono_parcela all query cadastral data but in different ways. LLMs are likely to conflate them. Descriptions should explicitly state: 'Use this AFTER calling [prerequisite tool]' or 'Use this when you have a [specific identifier]'.
Parameter descriptions contain jargon references without explanation. Examples: 'Anexo II' (Annex II, which document?), 'RC' (Referencia Catastral, not expanded), 'EPSG:4326' mentioned without context in coordinates. These force LLMs and users to search external docs.
No pagination parameters or result-limit information. If obtener_provincias or obtener_municipios return hundreds of entries, LLMs will receive massive unstructured lists that blow the context window. The code does not show pagination logic; descriptions do not mention limits.
obtener_provinciasobtener_municipiosobtener_vias
Expand EPSG:4326 reference in coordinate descriptions. Instead of 'p.ej. EPSG:4326', write: 'Coordinate Reference System (CRS) as EPSG code, e.g. EPSG:4326 (WGS84 lat/lon). Note: in EPSG:4326, X=longitude, Y=latitude.'
Document whether tools are idempotent and retryable. All 10 tools are read-only and safe to retry; explicitly state in descriptions: 'This tool is read-only and can be safely retried without side effects.'
Add per-tool examples in docstrings (not in descriptions, in code comments). Example: 'Example: obtener_municipios(provincia="Madrid", municipio_filtro="Alcal") might return [Madrid-Alcalá de Henares, Madrid-Alcalá de Guadaíra]. The LLM can then pick the correct match.'
If the Catastro API has rate limits or a service agreement, document it in the server's README and reference it in tool descriptions. E.g., 'These tools query the official Spanish Catastro API (https://www.catastro.meh.es/). Respect API rate limits (documented in README).'
Document known limitations and fallback behavior. Example: 'If a provincia or municipio name contains accents (e.g. Málaga), try without accents (Malaga) if the first call fails.' This guides LLM error recovery.