Catastro GPS MCP server
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 GPS MCP serverfind the cadastral parcel for Calle Mallorca 213, Barcelona"
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 GPS MCP server
Official cadastral parcels for AI agents, across 29 European countries plus the Basque Country and Navarre (31 country and region codes), with one API key.
Ask your agent for a parcel by its cadastral reference, by a point on the map or, in Spain, by a postal address typed as free text. It gets back the reference, location, area, land use and the parcel outline, and it can estimate solar and agricultural potential, read aggregated market prices, score and compare parcels in Spain, Portugal, France, Italy and Germany.
31 codes, one call shape.
ES,PT,FR,IT,DE,PL,NL,CH… and the two Spanish foral cadastres (PV,NA) that the central Catastro does not serve.The country is optional. It is detected from the reference format or from the point. A few references are valid in more than one country (some German and Portuguese numbers look alike): pass
countryto be explicit.Free-text Spanish addresses.
"Calle Mallorca 213, Barcelona"becomes a cadastral reference.Geometry included. Parcel outlines as GeoJSON or
[lat, lng]rings, with centroid and area.Free tier for good. 250 calls a month at no cost, no card. Failed lookups are not charged.
Get a key at catastrogps.es/developers.
Install
Claude Desktop
{
"mcpServers": {
"catastro-gps": {
"command": "npx",
"args": ["-y", "catastro-gps-mcp"],
"env": { "CATASTROGPS_API_KEY": "pk_live_your_key_here" }
}
}
}Claude Code
claude mcp add catastro-gps --env CATASTROGPS_API_KEY=pk_live_your_key_here -- npx -y catastro-gps-mcpCursor, Windsurf, VS Code and other MCP clients
Use the same npx -y catastro-gps-mcp command with CATASTROGPS_API_KEY in the environment.
Related MCP server: MCP Immobilier France (DVF)
Tools
Tool | What it does | Countries |
| Parcel by cadastral reference or WGS84 coordinates: reference, location, address, municipality, area, land use, outline | All 31 codes (UK: coordinates only) |
| Spanish postal address in free text → cadastral reference | Spain, central Catastro |
| Parcel outline as GeoJSON / | 30 codes (all but UK) |
| PVGIS photovoltaic estimate: kWp, kWh/year, savings, payback, CO₂, tilt | ES, PV, NA, PT, FR, IT, DE |
| Land use, main crop, NDVI and a reference crop price (SIGPAC detail in Spain) | ES, PV, NA, PT, FR, IT, DE |
| Aggregated price reference for the parcel's area. Never individual sales | Figures: FR, IT, DE (NRW only). ES, PV, NA, PT: note without figures |
| Score 0–100 with a rating and qualitative factor levels (high / medium / low / not available) | ES, PV, NA, PT, FR, IT, DE |
| Area and land-use snapshots of the parcel over time | ES, PV, NA, PT, FR, IT, DE, AT |
| Two or three parcels side by side: location, solar, agriculture, score | ES, PT, FR, IT, DE (not PV or NA) |
Every tool call is one API call against your monthly quota, including calls that end in "not found". compare_parcels is one call for the whole comparison.
What the market, score and history tools can and cannot tell
get_market_datahas numbers only where an official source gives them: France (DVF recorded sales: average €/m², number of sales, last sale date, estimated value), Italy (OMI zone values from the Agenzia delle Entrate) and Germany (official Bodenrichtwert land value per m², North Rhine-Westphalia only; elsewhere in Germany it answersavailable: false). In Spain and Portugal it answers with a note and no figures: there is no per-parcel price source yet.get_investment_scorecombines what the API can gather for the parcel: solar potential and agricultural use everywhere it answers, market prices only in France, Italy and Germany (NRW). Accessibility and risk are not computed yet and come back asnot_available, so the score is relative to the factors that were available. You get the score, the rating and qualitative factor levels, never the weights.get_value_historystarts the first time anyone looks the parcel up through Catastro GPS (at most one snapshot every 30 days). A parcel nobody has queried returns an empty list. It records area and land use; the official cadastral value is not recorded yet, socadastral_value_euris alwaysnullandchange_pctis the change in area.compare_parcelsfills area, land use and municipality only for Spanish parcels; for Portugal, France, Italy and Germany it returns the location, solar, agriculture and score. It does not include market prices. A parcel that is not found comes back with an error and the others are still compared.
Coverage
What each code answers today. "Partial" means the official source does not cover the whole territory.
Code | Country / region | By reference | By coordinates | Geometry | Notes |
| Spain (central Catastro) | ✅ | ✅ | ✅ | Free-text address search too |
| Basque Country (Álava, Bizkaia, Gipuzkoa) | ✅ | ✅ | ✅ | Foral cadastres, separate from the central Catastro |
| Navarre | ✅ | ✅ | ✅ | Foral cadastre |
| Portugal | Partial | ✅ | Partial | Digital cadastre does not cover the whole country |
| France | ✅ | ✅ | ✅ | |
| Italy | ✅ | ✅ | ✅ | |
| Germany | Partial | Partial | Partial | Every Land except Bavaria |
| Austria | ✅ | ✅ | ✅ | |
| Switzerland | ✅ | ✅ | ✅ | E-GRID references |
| Liechtenstein | ✅ | ✅ | ✅ | |
| Belgium | ✅ | ✅ | ✅ | |
| Netherlands | ✅ | ✅ | ✅ | |
| Luxembourg | ✅ | ✅ | ✅ | |
| Poland | ✅ | ✅ | ✅ | TERYT parcel IDs |
| Czechia | ✅ | ✅ | ✅ | |
| Slovakia | ✅ | ✅ | ✅ | |
| Slovenia | ✅ | ✅ | ✅ | |
| Croatia | ✅ | ✅ | ✅ | |
| Bulgaria | ✅ | ✅ | ✅ | |
| Greece | ✅ | ✅ | ✅ | |
| Cyprus | ✅ | ✅ | ✅ | |
| Denmark | ✅ | ✅ | ✅ | |
| Sweden | ✅ | ✅ | ✅ | Agricultural blocks (Jordbruksverket), not property units |
| Norway | ✅ | ✅ | ✅ | |
| Finland | ✅ | ✅ | ✅ | |
| Iceland | ✅ | ✅ | ✅ | |
| Estonia | ✅ | ✅ | ✅ | |
| Latvia | ✅ | ✅ | ✅ | |
| Lithuania | ✅ | ✅ | ✅ | |
| Ireland | ✅ | ✅ | ✅ | |
| United Kingdom | — | Scotland | Scotland | Registers of Scotland; England, Wales and Northern Ireland not yet |
Data comes live from each country's official cadastre or INSPIRE service, so availability follows theirs: some national services are slow, and the server raises a clear SERVICE_UNAVAILABLE when one is down. Outside the table, a point or reference answers CNV_COVERAGE.
Official registry documents (Spanish nota simple, Italian visura, Portuguese certidão permanente and others) can be ordered at catastrogps.es. They are not exposed through the API or this server yet.
Examples
Ask your agent:
Find the cadastral parcel at Calle Mallorca 213, Barcelona, and give me its area and outline.
What is the parcel at 52.2297, 21.0122? What's its area?
Look up the Polish parcel 146510_8.0502.1/3 and tell me its area.
Compare the solar potential of these two rural parcels in Navarre and Portugal.
Compare these three parcels in Spain, France and Italy and tell me which has the best investment score.
What do land prices look like around the French parcel 75056000AB0001?
What a get_parcel call returns (shortened; values are illustrative):
{
"reference": "9872023VH5797S0001WX",
"country": "ES",
"latitude": 40.4165,
"longitude": -3.7038,
"address": "CL MAYOR 1",
"municipality": "MADRID",
"province": "MADRID",
"area_m2": 512,
"land_use": "Residencial",
"outline_lat_lng": [[40.41662, -3.70391], [40.41671, -3.70362], "..."],
"google_maps_url": "https://maps.google.com/?q=40.4165,-3.7038"
}Errors come back as a code plus a sentence the agent can act on, for example:
CNV_COVERAGE: That reference or point is in a country that is not covered yet.
SERVICE_UNAVAILABLE: The official cadastre for this country is not responding. Try again in a few minutes.
KEY_AUTH_004: Monthly quota exhausted. Upgrade at https://catastrogps.es/developersPricing
The same key works for this server, the REST API and the SDKs (catastrogps on npm and PyPI).
Plan | Price | Calls / month |
Free | €0, forever | 100 |
Developer | €19 / month | 5,000 |
Startup | €49 / month | 15,000 |
Growth | €99 / month | 50,000 |
Enterprise | Contact us | Custom |
Details and sign-up: catastrogps.es/developers.
Configuration
Variable | Required | Default | Description |
| Yes | Your API key | |
| No |
| Request timeout in ms. Official cadastres can be slow |
| No |
| API base URL |
Development
npm install
npm run lint
npm test
npm run build
CATASTROGPS_API_KEY=pk_live_xxx node build/index.jsLicense
MIT
Available Tools
9 toolscompare_parcelsCompare ParcelsA
Compare 2 or 3 parcels side by side: location, solar potential, agricultural use and investment score (0-100 with rating). Parcels can be in different countries: ES (Spain, common regime), PT, FR, IT and DE. The Basque Country and Navarre are not supported here (use the single-parcel tools). Area, land use and municipality are only filled for Spain. No market prices. A parcel that is not found comes back with an error and the others are still compared. One API call for the whole comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| parcels | Yes | Two or three parcels to compare |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral load and does so well: it discloses country coverage (ES/PT/FR/IT/DE), that area/land use/municipality are populated only for Spain, that no market prices are returned, and that a missing parcel yields an error while the rest still compare. It also notes the whole comparison is one API call. Auth/permission requirements are the only notable omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly four compact sentences, front-loaded with what the tool does and what it returns, followed by constraints and edge cases. Every sentence carries information; only the density of the country caveats borders on crowded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, yet the description covers return contents, per-country field availability, unsupported regions, partial-failure behavior, and call cost. An agent has everything needed to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by explaining that the country code is semantically tied to regime support (ES common regime) and that the returned fields differ by country, giving the agent context the schema's plain enum list cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb (compare) plus resource (parcels) and enumerates exactly what is compared: location, solar potential, agricultural use and investment score. The 2-3 parcel scope and multi-country support immediately separate it from get_parcel and the other single-aspect siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not ('Basque Country and Navarre are not supported here') and routes the agent to the alternative ('use the single-parcel tools'). It also implies the 2-3 parcel minimum. That is strong routing guidance, though it never states positively when comparison beats calling get_parcel per parcel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agricultureGet Agricultural DataA
Agricultural context for a rural parcel: land use and main crop from the agricultural parcel registry (SIGPAC in Spain, with slope, altitude and irrigation), vegetation index (NDVI) and a reference crop price when available. Richest in Spain; also Portugal, France, Italy and Germany. Field names are returned in Spanish, as the API sends them.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional country code: ES, PV, NA, PT, FR, IT or DE. Omit to auto-detect. | |
| reference | Yes | Official cadastral reference of a rural parcel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does meaningful work: it discloses the upstream data source (SIGPAC), that price is only returned 'when available' (partial/optional output), that richness varies by country, and that field names come back in Spanish. It does not cover behavior when the parcel is urban or outside the supported countries, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with the returned content front-loaded, followed by coverage scope and a language caveat. No filler, though the final sentence about Spanish field names could arguably fold into the first sentence to tighten the block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns, and it does — listing land use, crop, terrain attributes, NDVI and price. An agent can form a clear expectation of the response payload. It is slightly short on failure/edge behavior (unsupported country or non-rural parcel) and on whether price requires anything extra.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'reference' (official cadastral reference of a rural parcel) and 'country' (enum with auto-detect on omission) are already documented in the schema. The description reinforces the geographic scope tied to 'country' but adds no new format or value semantics. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (agricultural context for a rural parcel) and enumerates the concrete outputs: SIGPAC land use, main crop, slope, altitude, irrigation, NDVI, and a reference crop price. That distinguishes it from siblings like get_solar_potential or get_parcel, though it never names an alternative explicitly. Purpose is clear and non-tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'for a rural parcel' and by the geographic coverage note ('Richest in Spain; also Portugal, France, Italy and Germany'), which helps the agent decide whether to call it at all. However, there is no explicit when-to-use vs. when-to-use-an-alternative guidance and no stated prerequisites (e.g. must already have a cadastral reference or use get_parcel first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_boundariesGet Parcel BoundariesA
Get the outline of a cadastral parcel as GeoJSON and/or a [lat, lng] ring, plus its centroid and area, for mapping and GIS work. Accepts references from the same 30 codes as get_parcel (every covered country except the United Kingdom, which is coordinates only).
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional country code. Omit to auto-detect from the reference format. | |
| reference | Yes | Official cadastral reference |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses output formats and country-code coverage, including the UK coordinates-only exception. But it does not state read-only nature, permission requirements, or error behavior; for a read tool this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no waste. The purpose and outputs come first, followed by input compatibility constraints, making it well front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has full schema coverage, and no output schema. The description appropriately explains return values (GeoJSON, ring, centroid, area) and input coverage. Minor gaps like coordinate reference system or precision are not critical for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by clarifying that references use the same 30 codes as get_parcel and that the UK is coordinates-only, which goes beyond the schema's generic 'Official cadastral reference' and country auto-detect notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (get) and resource (parcel boundaries) and states the exact outputs: outline as GeoJSON and/or [lat, lng] ring, plus centroid and area. It clearly distinguishes the tool from get_parcel by focusing on geometry rather than parcel attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for use ('for mapping and GIS work') and specifies input compatibility with get_parcel references, including the UK exception. However, it stops short of explicitly saying when to choose this tool over alternatives like get_parcel or compare_parcels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_investment_scoreGet Investment ScoreA
Investment score (0-100) for a parcel with a rating (excelente, bueno, moderado, bajo, muy_bajo) and qualitative factor levels (high/medium/low/not_available), never the formula. Built from the data the API can gather for that country: solar potential (PVGIS) and agricultural use in ES, PV, NA, PT, FR, IT and DE; the market factor only in France, Italy and Germany (North Rhine-Westphalia). Accessibility and risk are not computed yet and come back as not_available, so the score is relative to the factors that were available. Other countries are not supported. One API call.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional country code: ES, PV, NA, PT, FR, IT or DE. Omit to auto-detect. | |
| reference | Yes | Official cadastral reference |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the formula is never returned, that accessibility and risk come back as not_available, that the score is relative to available factors, and that it costs one API call. It does not describe auth requirements or what the error looks like for an unsupported country, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core deliverable and zero filler sentences; every clause carries information (scale, rating values, factor levels, country scope, cost). The middle sentence is a dense run-on covering three separate facts, which costs a little readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must explain the return value — and it does, specifying the 0-100 scale, the rating enum, the factor-level enum, and which factors may be not_available. Combined with the country-support constraints and the one-call cost hint, an agent has everything needed to call it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, including the country enum with auto-detect behavior. The description repeats the country list rather than adding new parameter-level meaning (no reference-format guidance, no note on how country changes the result set beyond availability). Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (investment score for a parcel) with the output scale (0-100) and rating vocabulary, and implicitly differentiates itself from factor-level siblings like get_solar_potential, get_agriculture and get_market_data by explaining that it is built from them. An agent can distinguish it from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when the tool applies: supported countries (ES, PV, NA, PT, FR, IT, DE), the narrower country scope of the market factor, and an explicit exclusion ('Other countries are not supported'). It never explicitly says 'use this instead of get_solar_potential when you want an aggregate', so the routing guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_dataGet Market DataA
Aggregated land and property price reference for the area around a parcel. Never returns individual sales. Price figures exist only in France (DVF recorded sales: average EUR/m2, number of sales, last sale date, estimated value), Italy (OMI zone values from Agenzia delle Entrate) and Germany (official Bodenrichtwert land value per m2, North Rhine-Westphalia only; elsewhere in Germany it answers available=false). For Spain (ES, PV, NA) and Portugal it returns a reference note without figures: there is no per-parcel price source yet. One API call.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional country code: ES, PV, NA, PT, FR, IT or DE. Omit to auto-detect. | |
| reference | Yes | Official cadastral reference |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose meaningful behavior: aggregated-not-individual data, per-country data availability and sources, degradation to available=false, and 'One API call' cost. It omits auth requirements and whether results are cached or rate-limited, but the behavioral disclosure is well above average for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then coverage details in tight parenthetical clauses. Every sentence earns its place, with only minor density in the country enumeration. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey return shape, and it does: France returns average EUR/m2, number of sales, last sale date and estimated value; Italy returns OMI zone values; Germany returns Bodenrichtwert per m2 or available=false. It also covers the reference-note case, so an agent knows exactly what to expect across all inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds real meaning to the country parameter by mapping its enum values to concrete outcomes (ES/PV/NA/PT => note only; FR/IT/DE => figures), which the schema description alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Aggregated land and property price reference for the area around a parcel') and immediately narrows scope with 'Never returns individual sales.' It clearly distinguishes itself from a raw sales-list tool, but it never names or contrasts against close siblings such as get_value_history or get_investment_score, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong conditional guidance: which countries yield figures (FR, IT, DE/NRW) and what to expect elsewhere (ES, PV, NA, PT return a reference note with no figures; DE outside NRW returns available=false). This tells the agent when the tool is useful versus when it is not. It stops short of pointing to alternative sibling tools for the no-data cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parcelGet ParcelA
Look up a cadastral parcel in 29 European countries plus the Basque Country and Navarre (31 codes) by its official cadastral reference or by WGS84 coordinates. Returns the reference, location, address, municipality, area, land use and the parcel outline when the official source provides them. The country is detected from the reference format or the point when omitted. United Kingdom: coordinates only. Codes: ES Spain, PV Basque Country, NA Navarre, PT Portugal, FR France, IT Italy, DE Germany, AT Austria, CH Switzerland, LI Liechtenstein, BE Belgium, NL Netherlands, LU Luxembourg, PL Poland, CZ Czechia, SK Slovakia, SI Slovenia, HR Croatia, BG Bulgaria, GR Greece, CY Cyprus, DK Denmark, SE Sweden, NO Norway, FI Finland, IS Iceland, EE Estonia, LV Latvia, LT Lithuania, IE Ireland, UK United Kingdom.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional country code. Omit to auto-detect. PV and NA are the Spanish foral cadastres. | |
| latitude | No | Latitude in WGS84 (use with longitude instead of reference) | |
| longitude | No | Longitude in WGS84 (use with latitude instead of reference) | |
| reference | No | Official cadastral reference as written in the country (e.g. 9872023VH5797S0001WX, 750560000AB0001) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: it enumerates the returned fields (reference, location, address, municipality, area, land use, outline), flags that outlines are only present when the official source provides them, and discloses the UK coordinate-only limitation. It says nothing about authentication, rate limits, or error behaviour for missing parcels.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and input modes, then the coverage caveat. The 31-code list is long and largely duplicates the schema enum, which is the one redundant element; the rest of the prose is dense and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by listing the returned fields and the condition under which the outline is included. Combined with the coverage and UK caveats, an agent has what it needs to call it correctly; only error/not-found behaviour is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: automatic country detection from the reference format or point, the coordinate-only constraint for the UK, and a human-readable expansion of every enum code. That goes beyond what the schema alone conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Look up a cadastral parcel' by official cadastral reference or WGS84 coordinates, with an explicit geographic scope (29 European countries plus two foral cadastres). An agent can immediately distinguish this from siblings like search_address or compare_parcels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the two input modes (reference or lat/long), that country is optional and auto-detected, and that the UK supports coordinates only. It does not name alternatives such as search_address or state when this tool is preferred over them, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_solar_potentialGet Solar PotentialA
Estimate the photovoltaic potential of a parcel from PVGIS (European Commission JRC): installable kWp, yearly production, savings, payback, CO2 avoided, optimal tilt and orientation. Available for Spain (ES, PV, NA), Portugal, France, Italy and Germany.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional country code: ES, PV, NA, PT, FR, IT or DE. Omit to auto-detect. | |
| reference | Yes | Official cadastral reference |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the external data source (PVGIS, European Commission JRC) and the output set, but says nothing about it being a read-only computation, latency of the external call, or what happens for out-of-coverage references.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the capability and source, followed by the concrete deliverables and coverage. No filler or redundancy beyond the country list, which itself is useful scoping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's enumeration of returned metrics (kWp, production, savings, payback, CO2, tilt/orientation) does the necessary work of setting expectations. Only edge behavior outside the supported countries is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in schema, including the enum and the auto-detect fallback. The description's country list merely repeats the enum and adds no syntax or format detail for 'reference'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (estimate) and resource (photovoltaic potential of a parcel), names the authoritative source (PVGIS / EC JRC), and enumerates the concrete outputs returned. No sibling tool touches solar data, and the stated country scope further pins down the capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The supported-country list implicitly tells the agent when the tool is applicable, but there is no explicit 'use this when...' framing and no named alternative among the parcel siblings. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_value_historyGet Parcel HistoryA
Snapshots of a parcel as the official cadastre reported it over time: area and land use, at most one snapshot every 30 days. History starts the first time anyone looks the parcel up through CatastroGPS (get_parcel) and grows from there, so a parcel never queried before returns an empty list. The official cadastral value is not recorded yet (always null). change_pct is the area change between the oldest and newest snapshot. Recorded for ES, PV, NA, PT, FR, IT, DE and AT. One API call.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional country code: ES, PV, NA, PT, FR, IT, DE or AT. Omit to auto-detect. | |
| reference | Yes | Official cadastral reference |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the 30-day snapshot granularity, the provenance-dependent start of history, the guaranteed-null cadastral value, the exact semantics of change_pct, country coverage, and the one-call cost. It does not explicitly state the operation is read-only/paginated or whether the number of returned snapshots is capped, which are the remaining gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core content is front-loaded in the opening clause (what a snapshot is and which fields it holds), and every following sentence adds distinct information: cadence, provenance, null-value caveat, change_pct definition, coverage, and cost. The fragment style ('One API call.') is dense rather than bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns, and it does: snapshot fields, change_pct meaning, empty-list behavior, and the always-null cadastral value. What it omits is the ordering of the returned snapshots (oldest-to-newest) and any cap on the number of entries, which an agent consuming a time series would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (reference, country) are already documented in the schema, including the enum and auto-detect behavior. The description repeats the country list ('Recorded for ES, PV, NA, PT, FR, IT, DE and AT') without adding format, syntax, or lookup guidance beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (historical snapshots of a parcel's area and land use) and immediately resolves the ambiguity in its own name: 'The official cadastral value is not recorded yet (always null)', so an agent knows get_value_history does not actually return cadastral values. It also distinguishes itself from the sibling that feeds it (get_parcel).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a strong precondition and implicit usage rule: history 'starts the first time anyone looks the parcel up through CatastroGPS (get_parcel)', so a never-queried parcel returns an empty list. That tells the agent when the tool is useful versus when it will yield nothing, and names the related sibling, but it never explicitly contrasts this tool with get_parcel for current-state queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_addressSearch Address (Spain)A
Find the Spanish cadastral reference for a postal address typed as free text, e.g. 'Calle Mallorca 213, Barcelona' or 'Avenida de la Constitución 1, 41004 Sevilla'. Works for Spain under the central Catastro (not the Basque Country or Navarre, and not other countries: use get_parcel with coordinates there). Include the street number and the municipality or postal code. Then call get_parcel with the returned reference and country ES.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Free-text Spanish address: street, number, municipality and/or postal code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses geographic coverage limits, the expected input shape, and the downstream chaining step, but says nothing about behavior on no-match, partial-match, rate limits, or authentication, which would matter for a lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then constraints, then required inputs, then next step. The two inline examples consume space but are directly useful for formatting the free-text input; no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup with no output schema, the description covers input format, geographic scope, and the follow-up call well enough to invoke correctly. It stops short of describing failure modes or what the returned reference looks like in structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real value beyond the schema by giving two concrete format examples and the instruction to include street number and municipality or postal code. It slightly exceeds the schema's terser field note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Find the Spanish cadastral reference for a postal address') and explicitly scopes it to free-text Spanish addresses. It clearly distinguishes itself from the sibling get_parcel by describing the address-based path versus the coordinate-based path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it (Spanish postal address as free text, Spain central Catastro), when not to (Basque Country, Navarre, other countries), what the alternative is ('use get_parcel with coordinates there'), and the required follow-up ('call get_parcel with the returned reference and country ES').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v1.2.0- First observed
compare_parcels - First observed
get_agriculture - First observed
get_boundaries - First observed
get_investment_score - First observed
get_market_data - First observed
get_parcel - First observed
get_solar_potential - First observed
get_value_history - First observed
search_address
TDQS
Scored across 9 tools
Each tool targets a distinct data type or action: lookup (get_parcel), address resolution (search_address), geometry (get_boundaries), and single-domain analytics (solar, agriculture, market, investment, history) plus comparison. The only mild overlap is get_parcel returning an outline while get_boundaries also returns outline/centroid, but the descriptions clearly delineate them.
All nine tools follow a consistent verb_noun pattern (get_parcel, get_boundaries, get_solar_potential, compare_parcels, search_address). The verb varies (get/search/compare) only because the actions genuinely differ, and the spelling/casing style is uniform.
Nine tools is well within a healthy range and each maps to a clearly earned capability for a cadastral-data service. Nothing appears redundant or padded.
The surface covers lookup, address search, geometry, and the major analytical dimensions (solar, agriculture, market, investment, temporal history) plus comparison, forming a coherent lifecycle. Minor gaps exist, such as no export/batch or explicit coverage-listing operation, but core workflows are fully supported.
Related MCP Connectors
- mcpOAuthai.parceled
Real estate data for AI agents: US parcel boundaries (tiles), owners, sale history, permits, hail.
French real estate data: cadastre, DVF sales, DPE energy ratings, price estimates, parcel context
Catastro espanol en JSON limpio: inmuebles por referencia catastral, coordenadas o direccion.
- geoOAuthco.thinair
Geocoding, routing, isochrones, traffic, weather, and place search for AI agents. 19 MCP tools.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables access to Idealista API for searching and retrieving property listings across Spain, Portugal, and Italy. Supports various property types including homes, apartments, garages, commercial properties, offices, and land with detailed filtering options.143MIT
- FlicenseAqualityBmaintenanceProvides AI agents with real-time access to French real estate transaction data, price per square meter, and property estimates using official open DVF data, with no API key required.4-
- AlicenseAqualityBmaintenanceEnables AI agents to perform due diligence on Irish properties by querying public datasets for planning applications, sold prices, flood risk, radon risk, and zoning.131 npm7MIT
- AlicenseAqualityBmaintenanceMCP 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.1020 npm1MIT