catastro_mcp_server
Provides access to INSPIRE WFS Cadastral Parcels (CP) services of the Spanish Catastro, enabling querying of parcel data, capabilities, feature types, and geometry export in GML, GeoJSON, and IFC formats.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@catastro_mcp_server Look up cadastral data for Calle Mayor 10 in Madrid"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
catastro_mcp_server
Descripción general
Servidor MCP (Model Context Protocol) en Python que expone herramientas para consultar servicios oficiales del Catastro de España y obtener información catastral no protegida de forma estructurada. Además permite la exportación de la geometría de la parcela en formatos GML, GeoJSON e IFC.
El servidor integra dos familias de servicios:
OVC / Servicios WCF en JSON (Catastro): consultas de callejero, referencia catastral y conversión entre RC ↔ coordenadas.
INSPIRE WFS Cadastral Parcels (CP): consulta de parcelas y descarga de geometría en GML, además de utilidades de diagnóstico (GetCapabilities / DescribeFeatureType).
Está pensado para integrarse con clientes compatibles con MCP (p. ej. Claude Desktop) y para facilitar la automatización de flujos BIM / GIS / AECO (enriquecimiento de modelos, auditorías, obtención de geometría, análisis territorial, etc.), manteniendo una arquitectura modular y fácil de desplegar (por ejemplo con uv/uvx).
Nota: este proyecto no está afiliado a la Dirección General del Catastro. Solo consume endpoints públicos y devuelve los resultados de forma normalizada.
Related MCP server: geocontext
Componentes
Herramientas
El servidor ofrece las siguientes herramientas:
obtener_provinciasLista provincias disponibles en los servicios del Catastro.
obtener_municipiosLista municipios de una provincia (puedes filtrar por nombre parcial)
Input:
provincia (str): nombre de provincia (según obtener_provincias)
municipio_filtro (str): texto parcial.
OPCIONAL
obtener_viasLista las vías / calles de un municipio (podemos filtrar por nombre parcial).
Input:
provincia (str): nombre de provincia (según obtener_provincias)
municipio (str): nombre de municipio (según obtener_municipios)
tipo_via (str): tipo de vía (idealmente código: CL, AV, PZ, etc. Anexo II).
OPCIONALvia_filtro (str): texto parcial opcional (nombre de vía / calle a buscar).
OPCIONAL
obtener_numerosConsulta número de una vía (devuelve RC del número si existe o aproximación).
Input:
provincia (str): nombre de provincia (según obtener_provincias)
municipio (str): nombre de municipio (según obtener_municipios)
tipo_via (str): tipo de vía (idealmente código: CL, AV, PZ, etc. Anexo II)
via (str): nombre de vía (según obtener_vias)
numero (str): número de la vía (puede ser parcial)
dcnp_por_direccionConsulta los datos catastrales no protegidos de un inmueble por su localización.
Input:
provincia (str): nombre de provincia (según obtener_provincias)
municipio (str): nombre de municipio (según obtener_municipios)
sigla (str): tipo de vía (idealmente código: CL, AV, PZ, etc. Anexo II).
calle (str): nombre de vía (según obtener_vias)
numero (str): número de la vía (según obtener_numeros)
bloque (str): número del bloque.
OPCIONALescalera (str): identificador de la escalera.
OPCIONALplanta (str): identificador de la planta.
OPCIONALpuerta (str): identificador de la puerta.
OPCIONAL
dcnp_por_rcConsulta los datos catastrales no protegidos de un inmueble por su Referencia Catastral.
Input:
refcat (str): Referencia Catastral. Puede tener 14, 18 o 20 posiciones. En caso de que sean 14 posiciones (lo que se corresponde con la referencia de una finca), se devuelve una lista de todos los inmuebles de esa finca (es decir cuyos 14 primeros caracteres de la RC coinciden con el parámetro).
provincia (str): nombre de provincia.
OPCIONALmunicipio (str): nombre de municipio.
OPCIONAL
dcnp_por_poligono_parcelaConsulta los datos catastrales no protegidos de un inmueble por su polígono y parcela.
Input:
provincia (str): nombre de provincia.
municipio (str): nombre de municipio.
poligono (str): polígono catastral.
parcela (str): parcela catastral.
rc_a_coordenadasConvierte una Referencia Catastral a coordenadas.
Input:
refcat (str): Referencia Catastral (14/18/20 según caso)
srs (str): sistema de referencia (p.ej. EPSG:4326)
provincia (str): nombre de provincia.
OPCIONALmunicipio (str): nombre de municipio.
OPCIONAL
coordenadas_a_rcDevuelve la(s) referencia(s) catastral(es) asociadas a unas coordenadas.
Input:
x (float): CoorX (si EPSG:4326 suele ser longitud)
y (float): CoorY (si EPSG:4326 suele ser latitud)
srs (str): sistema de referencia (p.ej. EPSG:4326)
distancia_coordenadas_a_rcDevuelve 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.
Input:
x (float): CoorX (si EPSG:4326 suele ser longitud)
y (float): CoorY (si EPSG:4326 suele ser latitud)
srs (str): sistema de referencia (p.ej. EPSG:4326)
wfs_cp_get_capabilitiesObtiene el documento GetCapabilities del WFS INSPIRE de Parcelas del Catastro.
Input:
version (str): versión WFS (por defecto 2.0.0)
wfs_cp_list_feature_typesLista los FeatureTypes disponibles en el WFS INSPIRE de Parcelas del Catastro, extrayendo name/title y CRS soportados desde GetCapabilities.
Input:
version (str): versión WFS (por defecto 2.0.0)
wfs_cp_describe_feature_type_resolvedObtiene el XSD de DescribeFeatureType y resuelve includes/imports (schemaLocation) para poder extraer los campos reales del esquema INSPIRE (p.ej. inspireId, localId, etc.).
Input:
type_name (str): FeatureType exacto (ej. cp:CadastralParcel)
version (str): versión WFS (por defecto 2.0.0)
max_includes (int): máximo de includes/imports a descargar (para evitar bucles)
parcela_gml_por_rcObtiene el GML de UNA parcela por RC usando StoredQuery GetParcel (WFS CP Catastro).
Input:
refcat (str): RC (14/18/20). Se usa la base de 14.
srs (str): CRS de salida. Recomendado "EPSG::25830" o "EPSG::4326".
parcela_geojson_por_rcDevuelve GeoJSON (FeatureCollection) de una parcela por RC.
GeoJSON siempre en lon/lat WGS84 (estándar GeoJSON).
Para evitar dependencias de reproyección (pyproj) y problemas de CRS en StoredQuery, fuerza la petición del GML en EPSG:4326 y realiza swap a lon/lat en la conversión.
Input:
refcat (str): RC (14/18/20). Se usa la base de 14.
srs (str): se mantiene por compatibilidad, pero esta tool fuerza EPSG:4326 internamente.
exportar_parcela_gml_y_geojsonExporta GML + GeoJSON de una parcela en una sola llamada.
GML: se pide con srs (AUTO o el que indiques)
GeoJSON: siempre se entrega en lon/lat (WGS84). Si pyproj no está, fuerza GML en EPSG:4326.
Input:
refcat (str): RC (se usa base 14).
srs (str): "AUTO" o EPSG/URN para el GML.
out_dir (str): carpeta destino (debe estar dentro de EXPORT_ROOT).
basename (str): nombre base sin extensión (si vacío usa ref14).
overwrite (bool): sobrescribir si existe.
exportar_parcela_ifcExporta una parcela catastral a IFC4 como superficie plana cerrada. El IFC generado incluye una estructura mínima válida para uso en entornos BIM como Bonsai: - IfcProject - IfcSite - IfcProjectedCRS - IfcMapConversion - IfcGeographicElement La geometría se construye en coordenadas locales y la posición real se conserva mediante georreferenciación IFC.
Input:
refcat (str): referencia catastral (se usa base 14)
srs (str): "AUTO" o EPSG/URN para pedir el GML base
out_dir (str): carpeta destino dentro de EXPORT_ROOT
basename (str): nombre base sin extensión (si vacío usa ref14)
overwrite (bool): sobrescribir si existe
Requisitos
Tener instalado
uv(incluyeuvx).Para usar MCP Inspector: tener instalado Node.js (incluye
npx).Un cliente MCP (por ejemplo Claude Desktop) para consumir las herramientas.
Uso con Claude Desktop
Añade el servidor dentro de mcpServers en tu claude_desktop_config.json.
Nota: si ya tienes otros MCP servers configurados, no sustituyas tu archivo completo. Añade únicamente el bloque
"Catastro": { ... }dentro demcpServers.
Opción A (recomendada): uvx en PATH
Si uv/uvx está en el PATH del sistema, usa:
"Catastro": {
"command": "uvx",
"args": [
"--from",
"catastro_mcp_server @ https://github.com/carlosGalisteo/catastro_mcp_server/archive/refs/tags/v0.1.3.zip",
"catastro_mcp_server"
]
}Opción B (Windows): ruta absoluta a uvx.exe
Si Claude no encuentra uvx, obtén la ruta con where uvx y úsala como command:
"Catastro": {
"command": "C:\\Users\\TU_USUARIO\\.local\\bin\\uvx.exe",
"args": [
"--from",
"catastro_mcp_server @ https://github.com/carlosGalisteo/catastro_mcp_server/archive/refs/tags/v0.1.3.zip",
"catastro_mcp_server"
]
}Prueba rápida (prompts de ejemplo)
Una vez activo el servidor en Claude Desktop, prueba con estas consultas:
Listar provincias
“Usa la herramienta
obtener_provinciasy muéstrame el resultado.”
Buscar municipios por filtro
“Usa
obtener_municipiospara la provinciaSanta Cruz de Tenerifey filtra porLaguna.”
Obtener información por localización
“Usa
dcnp_por_direccionpara el municipio deMadridy porcalle Alcala, 48.”
Obtener GeoJSON de una parcela por RC
“Usa
parcela_geojson_por_rcconrefcat = 1146801VK4714Ey devuélveme el GeoJSON.”
Test con MCP Inspector
Ejecuta en una consola (no es necesario clonar el repositorio; puedes hacerlo desde cualquier carpeta):
npx -y @modelcontextprotocol/inspector uvx --from "catastro_mcp_server @ https://github.com/carlosGalisteo/catastro_mcp_server/archive/refs/tags/v0.1.3.zip" catastro_mcp_serverSolución de problemas (Troubleshooting)
No aparecen las herramientas en Claude Desktop
Revisa Ver registros del servidor Catastro en Claude.
Asegúrate de que
uvxfunciona en tu terminal:uvx --version.Si
command: "uvx"falla en Windows, usa la Opción B con ruta absoluta (where uvx).
Errores HTTP / bloqueos (403/429) o respuestas lentas
Los servicios del Catastro son públicos pero pueden aplicar limitaciones.
Espera y reintenta más tarde; evita lanzar muchas peticiones seguidas.
Licencia
Este servidor MCP está licenciado bajo la Licencia MIT. Esto significa que puedes usar, modificar y redistribuir el software, siempre que se cumplan los términos de dicha licencia. Para más detalles, consulta el archivo LICENSE incluido en el repositorio.
Copyright (c) 2026 Carlos Galisteo
Links
Available Tools
19 toolscoordenadas_a_rcA
Uso: Devuelve la(s) referencia(s) catastral(es) asociadas a unas coordenadas. Entradas: x (float): CoorX (si EPSG:4326 suele ser longitud) y (float): CoorY (si EPSG:4326 suele ser latitud) srs (str): sistema de referencia (p.ej. EPSG:4326) Salida: dict: respuesta JSON del servicio
Inputs: x (required), y (required), srs. Returns: object
dcnp_por_direccionA
Uso: Consulta los datos catastrales no protegidos de un inmueble por su localización. Entradas: provincia (str): nombre de provincia (según ObtenerProvincias). Obligatorio. municipio (str): nombre de municipio (según ObtenerMunicipios). Obligatorio. sigla (str): tipo de vía (idealmente código: CL, AV, PZ, etc. Anexo II. Obligatorio. calle (str): nombre de vía (según ObtenerVias). Obligatorio. numero (str): número de la vía (según ObtenerNumeros). Obligatorio. bloque (str): opcional escalera (str): opcional planta (str): opcional puerta (str): opcional
Salida: dict: respuesta JSON del servicio
Inputs: calle (required), sigla (required), numero (required), municipio (required), +5 more. Returns: object
dcnp_por_poligono_parcelaA
Uso: Consulta los datos catastrales no protegidos de un inmueble por su polígono y parcela. Entradas: provincia (str): nombre de provincia (según ObtenerProvincias). Obligatorio. municipio (str): nombre de municipio (según ObtenerMunicipios). Obligatorio. poligono (str): polígono catastral. Obligatorio. parcela (str): parcela catastral. Obligatorio. Salida: dict: respuesta JSON del servicio
Inputs: parcela (required), poligono (required), municipio (required), provincia (required). Returns: object
dcnp_por_rcA
Uso: Consulta los datos catastrales no protegidos de un inmueble por su Referencia Catastral. Entradas: refcat (str): Referencia Catastral. Obligatorio. Puede tener 14, 18 o 20 posiciones. En caso de que sean 14 posiciones (lo que se corresponde con la referencia de una finca), se devuelve una lista de todos los inmuebles de esa finca (es decir cuyos 14 primeros caracteres de la RC coinciden con el parámetro). provincia (str): opcional municipio (str): opcional Salida: dict: respuesta JSON del servicio
Inputs: refcat (required), municipio, provincia. Returns: object
distancia_coordenadas_a_rcA
Uso: 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. Entradas: x (float): CoorX (si EPSG:4326 suele ser longitud) y (float): CoorY (si EPSG:4326 suele ser latitud) srs (str): sistema de referencia (p.ej. EPSG:4326) Salida: dict: respuesta JSON del servicio
Inputs: x (required), y (required), srs. Returns: object
exportar_parcela_gml_y_geojsonA
Uso: Exporta GML + GeoJSON de una parcela en una sola llamada. - GML: se pide con srs (AUTO o el que indiques) - GeoJSON: siempre se entrega en lon/lat (WGS84). Si pyproj no está, fuerza GML en EPSG:4326. Entradas: refcat (str): RC (se usa base 14) srs (str): "AUTO" o EPSG/URN para el GML out_dir (str): carpeta destino (debe estar dentro de EXPORT_ROOT) basename (str): nombre base sin extensión (si vacío usa ref14) overwrite (bool): sobrescribir si existe Salida: dict: rutas y métricas de escritura
Inputs: refcat (required), srs, out_dir, basename, +1 more. Returns: object
exportar_parcela_ifcA
Uso: Exporta una parcela catastral a IFC4 como superficie plana cerrada. El IFC generado incluye una estructura mínima válida para uso en entornos BIM como Bonsai: - IfcProject - IfcSite - IfcProjectedCRS - IfcMapConversion - IfcGeographicElement La geometría se construye en coordenadas locales y la posición real se conserva mediante georreferenciación IFC. Entradas: refcat (str): referencia catastral (se usa base 14) srs (str): "AUTO" o EPSG/URN para pedir el GML base out_dir (str): carpeta destino dentro de EXPORT_ROOT basename (str): nombre base sin extensión (si vacío usa ref14) overwrite (bool): sobrescribir si existe Salida: dict: ruta del IFC y metadatos de exportación
Inputs: refcat (required), srs, out_dir, basename, +1 more. Returns: object
obtener_municipiosA
Uso: Lista municipios de una provincia (puedes filtrar por nombre parcial). Entradas: provincia (str): nombre de provincia (según ObtenerProvincias) municipio_filtro (str): texto parcial opcional Salida: dict: respuesta JSON del servicio
Inputs: provincia (required), municipio_filtro. Returns: object
obtener_numerosA
Uso: Consulta número de una vía (devuelve RC del número si existe o aproximación). Entradas: provincia (str): nombre de provincia (según ObtenerProvincias) municipio (str): nombre de municipio (según ObtenerMunicipios) tipo_via (str): tipo de vía (idealmente código: CL, AV, PZ, etc. Anexo II) via (str): nombre de vía (según ObtenerVias) numero (str): número de la vía (puede ser parcial) Salida: dict: respuesta JSON del servicio
Inputs: via (required), numero (required), tipo_via (required), municipio (required), +1 more. Returns: object
obtener_provinciasA
Uso: Lista provincias disponibles en los servicios del Catastro. Entradas: - Salida: dict: respuesta JSON del servicio
Inputs: no named parameters. Returns: object
obtener_viasA
Uso: Lista las vías / calles de un municipio (podemos filtrar por nombre parcial). Entradas: provincia (str): nombre de provincia (según ObtenerProvincias) municipio (str): nombre de municipio (según ObtenerMunicipios) tipo_via (str): tipo de vía opcional (idealmente código: CL, AV, PZ, etc. Anexo II) via_filtro (str): texto parcial opcional (nombre de vía / calle a buscar)
Salida: dict: respuesta JSON del servicio
Inputs: municipio (required), provincia (required), tipo_via, via_filtro. Returns: object
parcela_geojson_por_rcA
Uso: Devuelve GeoJSON (FeatureCollection) de una parcela por RC. - GeoJSON siempre en lon/lat WGS84 (estándar GeoJSON). - Para evitar dependencias de reproyección (pyproj) y problemas de CRS en StoredQuery, fuerza la petición del GML en EPSG:4326 y realiza swap a lon/lat en la conversión. Entradas: refcat (str): RC (se usa base 14) srs (str): se mantiene por compatibilidad, pero esta tool fuerza EPSG:4326 internamente. Salida: dict: {ok, used_refcat, source, requested_srs, response_srsName, geojson, geojson_text, note}
Inputs: refcat (required), srs. Returns: object
parcela_gml_por_rcA
Uso: Obtiene el GML de UNA parcela por RC usando StoredQuery GetParcel (WFS CP Catastro), con modo AUTO para elegir un CRS UTM que el WFS realmente soporte. Nota importante: - Para Canarias (UTM 28N), este WFS NO ofrece EPSG:25828 pero SÍ ofrece EPSG:32628. - En Península suele funcionar con EPSG:25830 (y otros 25829/25831 según huso). Entradas: refcat (str): RC (14/18/20). Se usa base de 14. srs (str): - "AUTO" (recomendado): pide 4326, detecta huso, vuelve a pedir UTM soportado. - "EPSG:4326", "EPSG:25830", "EPSG:32628", "EPSG::25830", URN, etc. Salida: dict: { ok, used_refcat, requested_srs, resolved_srs, response_srsName, gml, note, diagnostic }
Inputs: refcat (required), srs. Returns: object
parcela_vertices_por_rcA
Uso: Devuelve vértices de la parcela para pruebas rápidas. En AUTO: - pide 4326 - calcula EPSG UTM correcto - si pyproj está disponible, reproyecta a UTM y devuelve metros Entradas: refcat (str): RC srs (str): "AUTO" o EPSG explícito Salida: dict con vertices_4326 y/o vertices_utm (si aplica)
Inputs: refcat (required), srs. Returns: object
rc_a_coordenadasB
Uso: Convierte una Referencia Catastral a coordenadas. Entradas: refcat (str): Referencia Catastral (14/18/20 según caso) srs (str): sistema de referencia (p.ej. EPSG:4326) provincia (str): opcional municipio (str): opcional Salida: dict: respuesta JSON del servicio (incluye coordenadas y metadatos)
Inputs: refcat (required), srs, municipio, provincia. Returns: object
wfs_cp_describe_feature_type_resolvedD
Uso: DescribeFeatureType + resolución de includes/imports.
Inputs: type_name (required), version, max_includes. Returns: object
wfs_cp_get_capabilitiesC
Uso: Obtiene el documento GetCapabilities del WFS INSPIRE de Parcelas del Catastro.
Inputs: version. Returns: object
wfs_cp_get_feature_sampleB
Uso: GetFeature SIN filtro para inspeccionar salida real del WFS.
Inputs: srs, count, type_name. Returns: object
wfs_cp_list_feature_typesC
Uso: Lista FeatureTypes y CRS soportados desde GetCapabilities.
Inputs: version. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Most tools target distinct resources or actions (e.g., obtaining provinces vs. municipalities vs. parcel geometry formats). However, there is some potential confusion between direct format tools (parcela_geojson_por_rc, parcela_gml_por_rc) and the combined export tool, though descriptions clarify the difference.
Naming follows group-level patterns (obtener_*, dcnp_por_*, parcela_*_por_rc), but mixes Spanish and English verbs (obtener vs. get/list/describe) and includes inconsistent formats like rc_a_coordenadas vs. coordenadas_a_rc. Overall readable but not uniform.
With 19 tools, the count is on the higher end but justified given the broad scope of cadastral operations (administrative lookups, DCNP queries, geometry exports, coordinate conversions, WFS metadata). The tools collectively cover a complex domain without being excessive.
The set covers the main workflows: administrative hierarchy queries, DCNP by address/RC/polygon-parcel, geometry retrieval in multiple formats, coordinate conversions, and WFS capabilities. Minor gaps exist (e.g., no direct parcel search by coordinates, but this can be achieved via coordenadas_a_rc then parcel lookup), but overall the domain is well covered.
Maintenance
Related MCP Connectors
An MCP server for Georgian public data, read from the organizations that publish it.
MCP server for querying Tulsa County, Oklahoma property and parcel data for AI agents.
MCP server for Japan geodata: cadastral lot numbers (chiban) and reverse geocoding, for AI agents.
BOE, Spanish public tenders and INE statistics behind one MCP server.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Python-based MCP server that provides access to Ordnance Survey APIs, allowing querying of geographic data through a standardized protocol with features like collection management, feature search, and spatial filtering.2MIT
- AlicenseNot gradedqualityFmaintenanceAn experimental MCP server providing spatial context for LLMs by interfacing with French Geoplateforme services. It enables tasks such as geocoding, altitude lookups, and querying administrative, cadastral, or urban planning data.10 npm4MIT
- FlicenseNot gradedqualityFmaintenancePython MCP server for querying Overture Maps building footprint data via address search, building lookups, and nearby building listings.-
- AlicenseAqualityDmaintenanceMCP server for the Spanish Cadastre, enabling local queries of official INSPIRE parcel data (area, geometry, neighboring parcels, searches) and online queries to the OVC and electronic headquarters for additional details, with rate limiting and caching.1013 npm1MIT