/ Polish land, for agents
Every Polish parcel.
One call.
landfeed turns whatever a person typed into a parcel and a sourced answer: plan ogólny, MPZP, whether a WZ decision is possible, flood, landslides, protected areas, buildings, road access, permits and prices nearby. REST and MCP return the same JSON envelope.
Add landfeed to your agent
Coming soonAdd a custom connector with this server URL. The hosted server is not live yet; the URL below is the planned address.
https://mcp.landfeed.pl/mcpCreate a connector for a remote MCP server with this URL. The hosted server is not live yet; the URL below is the planned address.
https://mcp.landfeed.pl/mcpOne command in your terminal. Planned address, not live yet.
claude mcp add --transport http landfeed https://mcp.landfeed.pl/mcpEvery read takes exactly one of q, id or point. The public API host is not live yet.
curl -H "X-Api-Key: $LANDFEED_API_KEY" "https://api.landfeed.pl/v1/check?q=Lesnowola%2025%2F18"What your agent sees.
A person types a parcel the way people do. The agent passes the text as it is; landfeed resolves it, runs the named checks and returns the record in the same response.
- passPlan ogólny zone SW · Rejestr Urbanistyczny, as of 2026-09-28
- passWZ decision possible · basis: art. 59 ust. 3
- unknownMPZP parameters · not machine-published, so not guessed
- passOutside flood zone Q100 · MZP, as of 2026-06-01
- failNo public road within 30 m
Illustrative. Values from the plan's wireframe (§8.1), shape from envelope.json; not a live response.
{
"status": "ok",
"query": {
"input": { "q": "pogorzelec dziłaka 284/5" },
"resolved": { "from": "q", "method": "text_parcel",
"id": "142403_2.0027.284/5", "confidence": 0.94 }
},
"result": {
"verdict": "conditional",
"checks": [
{ "id": "pog_zone", "result": "pass", "value": "SW",
"source": { "title": "Rejestr Urbanistyczny",
"as_of": "2026-09-28", … } },
{ "id": "wz_possible", "result": "pass",
"basis": "u.p.z.p. art. 59 ust. 3", … },
{ "id": "mpzp_params", "result": "unknown",
"detail": "not machine-published", … },
{ "id": "flood_q100", "result": "pass", … },
{ "id": "road_access", "result": "fail",
"detail": "no public road within 30 m", … }
],
"record": { /* every layer: coverage, value, note, source, as_of */ },
"disclaimer": "…"
},
"candidates": [],
"sources": [ /* each with attribution and as_of */ ],
"billing": { "cost": 1, "charged": 1, "refunded": 0,
"rule": "charged" },
"error": null,
"meta": { "api_version": "v1", "calls": 1, … }
}
{
"status": "not_covered",
"query": { "input": { "id": "126105_9.0011.112" }, … },
"result": null,
"corpus_coverage": { "scope": "12", "held_parcels": 0,
"held_pct": 0, "note": "…", … },
"billing": { "cost": 1, "charged": 0, "refunded": 1,
"rule": "refunded_not_covered" }
}
{
"layer": "mpzp",
"coverage": "covered_no_data",
"value": { "status": "none", "symbol": null,
"plans": [], "effective_from": null },
"note": "…one sentence an agent can quote…",
"source": { "attribution": "…", "as_of": "…" },
"as_of": "…", "layer_version": "…"
}
Why one call matters.
Every extra call is model time, tokens and one more chance to read the wrong page. In our latest internal run, an agent with landfeed answered in a median of one call; an agent with a browser needed a median of 41.5.
Week-1 internal run, 2026-10-13 · mazowieckie only
| Agent | Questions | Correct | Correct in one call | Median calls | Median time | Cost |
|---|---|---|---|---|---|---|
| Claude + landfeed MCP onlyno browser, no other tools | 26 | 17 / 26 | 15 | 1 | 29.1 s | not reported |
| Claude + browserraw agent, same bench, 10 questions | 10 | 6 / 10 | 0 | 41.5 | 6.2 min | USD 8.16 for 10 |
Parcel Bench PL questions with answers from verified fact bundles · the two arms ran different numbers of questions · not a public benchmark yet
Where we missed
9 of our 26 answers missed, and none of them was a confident wrong answer. MPZP (0 of 4) and landslide (0 of 3) questions missed because those layers are not loaded yet. One building count differs between EGiB and BDOT10k, and one protected-area answer fails closed because our copy of the GDOŚ point objects is incomplete. Under the truth-gate rule, each is a data defect to fix before the next voivodeship loads.
What one call buys
Resolving free text, joining planning, hazards, nature, buildings and access, and saying where the state publishes nothing happen on our side, once. Your agent gets the answer, its sources and its coverage, and a billing block that says what it cost.
Six tools. Small on purpose.
A small tool list keeps an agent's context free for the question. Each tool takes the text as typed, an id or a point, and returns the REST envelope as structured JSON.
check Can you build on this parcel?1requestA verdict (pass, conditional, fail or unknown), named checks each with a result, a source and a statute basis, and the full record embedded, so follow-up questions need no further call.
parcel Parcel record1requestThe full sourced record: official area in m², gmina, obręb and number, and every layer with its own coverage and note.
layer One layer for one parcel1requestplanning answers plan ogólny, MPZP, WZ possibility and the gmina's planning status at once.
resolve Find the parcel the user means1requestCandidates with confidence from what a person typed, misspelt localities matched fuzzily, and corpus_coverage to tell "does not exist" from "not loaded yet".
search Parcels by address, around a point or in an area1requestSummaries at an address, within a radius up to 2,000 m, or in a bbox up to 4 km², paginated.
events What changed1requestChanges for a parcel since a date. History starts with the first precompute run in October 2026; an empty list before then means no history, not no change.
Four coverage states.
Every layer answer says which one it is, in a plain sentence the agent can quote, with its source and as-of date.
covered
The source holds a record here
The value is that record.
covered_no_data
Covered, and nothing recorded
A real negative: false, 0, an empty list or none. Charged, because it is an answer.
not_covered
The state does not publish it here
Or we hold no data there. The value is null; the agent says so instead of inferring.
not_computed
We hold it, not computed yet
The value is null until the precompute reaches this place.
Pricing is not set yet.
The plan prices requests, not tokens, with hard caps and no overage. The shape below is planned and subject to change.
Common questions.
Can I add landfeed to Claude or ChatGPT today?
Not yet. The hosted MCP server is coming; the address on this site, https://mcp.landfeed.pl/mcp, is the planned one. Join the waitlist and we will tell you when it opens.
Which parcels are covered?
v1 holds one voivodeship, mazowieckie: 5,617,140 parcels. Plan ogólny polygons cover 1,074 gminas. A parcel outside loaded data comes back as not_covered, refunded, with corpus_coverage saying what is held.
Does landfeed say whether a parcel is safe to buy?
No. It reports what each source says, what it does not cover, and the date. Tool instructions forbid the agent from calling a parcel "safe". It is not legal advice.
Do you return owners or land registry numbers?
Never. No KW numbers, no owner or holder data, no investor names from permits, no address-level transaction prices; price aggregates need at least 5 transactions.
What does a call cost?
Prices are not decided. Every response already carries billing {cost, charged, refunded, rule}; invalid input is free and errors and not_covered answers are refunded. See pricing.
Ask your agent
about the land.
One call from what a person typed to a sourced answer.