Skip to main content
Glama

Zornade MCP Server

Model Context Protocol server for Italian cadastral, geospatial and real estate data, powered by the Zornade API v2.

Add it to any MCP client (Claude, Cursor, VS Code Copilot, Cline, ...) and ask questions about Italian properties in natural language: geocoding, cadastral parcels, risk layers, valuations, solar potential, administrative lists.

Endpoint

https://mcp.zornade.com/mcp

Related MCP server: swisstopo-mcp

Authentication

A free Zornade API key (zrn_...) from https://app.zornade.com/api is required. Send it as x-api-key header, Authorization: Bearer, or ?api_key= query parameter. Rate limits and scopes are the ones of your key (10,000 requests/hour).

Tools

Tool

Description

zornade_geocode_search

Forward geocoding on 18.7M+ Italian addresses (ANNCSU)

zornade_geocode_reverse

Reverse geocoding by WGS84 coordinates

zornade_parcel_by_id

Enriched cadastral parcel profile (risk, economics, solar, valuations, POI, ...)

zornade_parcel_locate

Parcels by point, multiple points, or bounding box

zornade_parcel_search

Parcels by comune, foglio, label

zornade_admin_lists

Regions, provinces, municipalities

Connect

Claude Code:

claude mcp add zornade -t http https://mcp.zornade.com/mcp \
  --header "x-api-key: zrn_YOUR_KEY"

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "zornade": {
      "type": "http",
      "url": "https://mcp.zornade.com/mcp",
      "headers": { "x-api-key": "zrn_YOUR_KEY" }
    }
  }
}

Test

curl -X POST https://mcp.zornade.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "x-api-key: zrn_YOUR_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Architecture

  • functions/mcp/index.ts - Supabase Edge Function (Deno), built with mcp-lite + Hono, streamable HTTP transport. Pattern from the official Supabase MCP guide.

  • netlify.toml + public/ - Netlify reverse proxy for the clean hostname mcp.zornade.com (no build step).

Documentation

Known limitations

  • The HTTP transport is stateless: no persistent SSE sessions. Some modern SDK clients open a persistent SSE GET after initialize and receive a 400; request/response calls work normally and that error is harmless.

  • Protocol revision negotiation: the server supports the 2025 MCP revisions (2025-03-26 and 2025-06-18). A client requesting a newer or unknown revision is answered with the oldest supported revision instead of an error.

  • Tool responses are text-only: geometries are omitted to keep the LLM context light.

  • Tool calls require a free Zornade API key. Direct API v2 calls are the right tool for batch pipelines, see api.zornade.com.

License

Two distinct layers:

  • Server code: MIT. Free to use, modify and redistribute, also for commercial purposes. The full text is in LICENSE.

  • Data: licenses of the original sources, which remain in force for every consumer of the API and of this server. Key ones:

    • cadastral parcels and cadastral data: Agenzia delle Entrate (free reuse, attribution required)

    • addresses: ANNCSU, ISTAT and Agenzia delle Entrate (CC BY 4.0, partly CC BY 3.0 IT)

    • buildings and map layers: OpenStreetMap (ODbL 1.0)

    • risk and environmental layers: ISPRA, INGV, Copernicus (CC BY 4.0 / Copernicus Data Policy)

    • solar potential: PVGIS-SARAH3, JRC European Union (free reuse)

    • real estate market data: OMI and MEF (free reuse)

Every API response lists the applicable licenses in meta.licenses and the required attribution text. Two attribution levels exist: source attributions are always mandatory; the "Dati elaborati da Zornade" attribution with link to zornade.com is required for free plan keys and can be waived with a commercial license (the response field meta.zornade_attribution_required tells you which rule applies). Full terms: api.zornade.com.

Available Tools

6 tools
zornade_admin_listsA

Italian administrative reference data: regions, provinces, or municipalities. Provinces can be filtered by region; municipalities by province or region.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesWhich administrative list to return
regionNoFilter by region name (provinces, municipalities)
provinceNoFilter by province name (municipalities)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. The phrase 'reference data' and 'lists' conveys a read-only lookup, and the filter relationships are explicitly described. It does not mention response shape or errors, but for a simple list tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences communicate the resource, the three options, and the filtering behavior with no filler. The key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with a 3-parameter schema, the description plus schema fully covers input selection and filter logic. The lack of an output schema means the return format is not explicitly stated, but the simple list nature of the tool makes this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters with 100% coverage, so the baseline is 3. The description restates which filters apply to which type, which adds interpretive clarity but does not go beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description immediately identifies the resource as 'Italian administrative reference data' and enumerates the three list types: regions, provinces, and municipalities. It lacks an explicit verb like 'list' or 'return', but the domain clearly distinguishes it from the geocode and parcel sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context that this tool is for administrative reference data and describes which filters apply to which list type. However, it does not explicitly state when to use this tool versus alternatives, though the sibling tools are clearly unrelated in domain.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zornade_geocode_reverseA

Reverse geocoding: find Italian addresses near WGS84 coordinates. Returns the closest ANNCSU addresses with distance in meters.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude WGS84, Italy bounds 35.5-47.5
lngYesLongitude WGS84, Italy bounds 6.0-19.0
limitNoMax results, default 5
radiusNoSearch radius in meters, default 100, max 500

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It adds return behavior (closest addresses, distance in meters) and a domain-specific data source (ANNCSU), but it does not disclose failure modes, no-result behavior, ordering guarantees beyond 'closest', or whether this is a read-only operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core purpose front-loaded immediately after the tool name. Every phrase earns its place; there is no redundant or promotional language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity lookup with four well-documented parameters, the description covers the primary behavior and result shape (addresses with distance). Since there is no output schema, it would benefit from a bit more detail on return structure or empty-result behavior, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter already has an explanatory description including bounds, defaults, and max values. The tool description adds no additional parameter context, so it stays at the baseline for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource pairing: 'find Italian addresses near WGS84 coordinates' and explicitly identifies the operation as reverse geocoding. It also names the return type (closest ANNCSU addresses with distance), which distinguishes it from the geocode_search sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Reverse geocoding' and the coordinate input clearly establish when to use this tool: when you have WGS84 coordinates and need addresses. It does not explicitly name alternative tools or exclusions, but the context is clear enough that an agent can route the call correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zornade_parcel_by_idA

Enriched cadastral parcel profile by FID or GML ID. Returns municipality, area, cadastral reference, and the requested data sections (risk, subsidence, terrain, buildings, economics, demographics, valuation, valuation_history, solar, POI, etc.). Geometry is omitted to keep the reply compact.

ParametersJSON Schema
NameRequiredDescriptionDefault
fidYesParcel FID number (example "28009975") or GML ID
includeNoComma-separated sections: risk,subsidence,terrain,population,buildings,economics,demographics,land_cover,land_use,valuation,valuation_history,coastal_erosion,cultural_heritage,poi,solar,nightlights. Default: risk,economics,solar,valuation

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does a good job: it states what the response includes, lists the available data sections, and explicitly discloses that geometry is omitted to keep the reply compact. This gives the agent useful behavioral context beyond the bare operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the core purpose in the first sentence. The second sentence adds a useful behavioral note, though the long parenthetical list of sections partially duplicates the schema's 'include' parameter documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description provides enough return-value context: top-level fields, selectable sections, and the deliberate omission of geometry. It is slightly incomplete in that it does not mention error behavior for invalid FIDs, but the invocation requirements are clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters with 100% coverage, including the section names and default value for 'include'. The description adds little beyond restating that sections are requested, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action (returns an enriched cadastral parcel profile) and a specific resource (parcel by FID or GML ID). It distinguishes from the sibling search and locate tools by emphasizing exact-ID lookup, though it never names the alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by FID or GML ID' implies the tool should be used when the caller already has an exact parcel identifier, and the sibling names suggest alternatives for geocoding/search. However, there is no explicit guidance on when to use this tool versus zornade_parcel_search or zornade_parcel_locate, and no exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zornade_parcel_locateA

Find cadastral parcels by coordinates or bounding box. Three modes: single point (lat+lng), multiple points (points="lat,lng;lat,lng", max 10), or bounding box (bbox="minLng,minLat,maxLng,maxLat", max 0.05 degrees per side). Returns matching parcels with FID, municipality and centroid.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude for single-point mode
lngNoLongitude for single-point mode
bboxNoBounding box as "minLng,minLat,maxLng,maxLat", max 0.05 degrees per side
limitNoMax results, default 50
pointsNoMultiple points as "lat,lng;lat,lng", max 10 pairs

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does add useful behavioral context: the return value composition ('Returns matching parcels with FID, municipality and centroid') and hard constraints (max 10 points, max 0.05 degrees per bbox side). However, with 0 required parameters it never explains what happens when called with no location arguments or with conflicting modes (lat+lng alongside bbox), and it says nothing about error behavior or pagination beyond the limit param. Partial disclosure with notable gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste: purpose statement, mode/format breakdown, and return-value disclosure. The purpose is front-loaded, exact input formats are inline, and constraints are embedded rather than stated as afterthoughts. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderately complex tool (5 params, 3 distinct modes, no annotations, no output schema), the description covers the critical decision surface: which mode to use, exact string formats, limits, and what comes back. The only real gaps are edge-case behavior — invocation with no location parameters and conflicting-mode handling — which an agent could reasonably encounter given 0 required params. Otherwise complete enough for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, setting a baseline of 3. The description earns above baseline by revealing that lat/lng, points, and bbox are not independent optional parameters but three mutually exclusive modes — semantics the schema cannot convey by listing them all as optional. The description also confirms the return fields (FID, municipality, centroid) that relate to what the tool yields. This is genuine added meaning beyond per-parameter schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+method: 'Find cadastral parcels by coordinates or bounding box.' The three-mode breakdown (single point, multiple points, bounding box) makes the tool's scope concrete and clearly differentiates it from siblings like zornade_parcel_by_id (find by ID), zornade_geocode_search (address→coordinates), and zornade_geocode_reverse (coordinates→address). No ambiguity remains about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual guidance: use this tool when you have coordinates, point lists, or a bounding box, and it precisely explains each mode's input format. However, it never names sibling alternatives or states when NOT to use it (e.g., use zornade_parcel_by_id when you already have a parcel ID). The usage context is clear, but exclusions and alternative routing are left to inference.

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.

  1. 6 tool updatesv1.0.0
    • First observedzornade_admin_lists
    • First observedzornade_geocode_reverse
    • First observedzornade_geocode_search
    • First observedzornade_parcel_by_id
    • First observedzornade_parcel_locate
    • First observedzornade_parcel_search

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct operation: forward vs reverse geocoding, parcel retrieval by ID vs spatial locate vs cadastral reference search, and administrative list lookup. No two tools overlap in purpose.

Naming Consistency4/5

All names follow a consistent snake_case pattern with the zornade_ prefix and a domain identifier (geocode, parcel, admin). However, the action parts mix verbs (search, locate) with noun-like descriptors (by_id, lists), so the convention is readable but not perfectly uniform.

Tool Count5/5

Six tools is well-scoped for a geocoding and cadastral data server. Each tool covers a distinct core capability without redundancy or bloat.

Completeness4/5

The surface covers key workflows: forward/reverse geocoding, parcel lookup by ID or spatial search, cadastral reference search, and admin reference data. The only minor gap is the deliberate omission of parcel geometry in by_id, but other tools compensate with centroids and bounding-box queries.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers