Skip to content
Zonio Developers

Zonio MCP server

The Zonio MCP server gives any Model Context Protocol client (Claude, Claude Code, Cursor, ChatGPT, your own agent) direct access to Poland's land data. Your users ask questions in plain language; the agent turns them into precise searches over 38.7 M parcels and explains the answer.

https://mcp.zonio.tech/mcp
PropertyValue
TransportStreamable HTTP
AuthOAuth 2.1 (interactive clients) or Authorization: Bearer zk_… (headless)
Tools13: search, parcel inspection, regulations, constraints, proximity, market, reports
ResourcesLayer catalogue, scenario catalogue, parcel and region documents
PromptsSite selection, due diligence, shortlist comparison

What your agent can do

You: I'm looking for land for a 10 MW solar farm in Lubelskie. At least 15 ha, flat, close to a substation, nothing protected nearby. What's out there?

Claude · called search_parcels, then check_constraints on the top results

I found 23 parcels that fit. The three strongest:

ParcelAreaSubstationSlopeSolar yield
0614072_2.0007.41218.2 ha2.1 km (GPZ Hrubieszów, 110 kV)1.4 %1,086 kWh/kWp
0611042_2.0012.88/316.7 ha3.4 km2.2 %1,079 kWh/kWp
0603052_2.0003.120121.5 ha4.8 km0.9 %1,081 kWh/kWp

All three are outside Natura 2000 and flood-risk zones. Two caveats: none of them has a local plan (MPZP), so you'd need one for a farm of this size on class III soil; the first parcel is class IV, which is simpler. And grid-capacity disclosures for this DSO are missing in the region, so I could not check available connection capacity.

Every number in that answer comes from a tool call over real layers (solar irradiance, substations, terrain slope, protected areas, soil classes), and the caveats come from the coverage block the server returns. The agent is told what it could not check, so it does not over-promise.

Why MCP and not just the REST API?

The REST API is the right choice when your code knows exactly what it wants. MCP is the right choice when a person is asking, and the question is fuzzy:

  • Tools are designed for language models. Descriptions explain when to use each tool, inputs accept names as well as codes ("Wieliczka" or "1219062"), and outputs are compact summaries with ids to drill into, not 5 MB of GeoJSON.
  • Plain-language search is built in. search_parcels accepts the user's own words and returns the interpretation it used, so the agent can confirm or refine. See how it works.
  • Explanations, not just data. Results carry why fields (which filters passed, which signal ranked a parcel first) so the agent can justify its answer.
  • Safe by default. Every tool is read-only, and each key only exposes the tools its scopes allow.

Get started