Skip to main content
Glama

Cenogram - Polish Real Estate Data

list_parcels_in_area

Read-only

List cadastral parcels in an area - the land plots themselves, NOT transactions (for deeds and prices use search_transactions with latitude/longitude or polygon). For an id prefix use resolve_parcel(prefix); for a coordinate or 'locality + number' use resolve_parcel (a street address goes here, via street= and buildingNumber=); for everything about one parcel use get_parcel_report.

Name the area (at least one): teryt (codes from list_locations); location (county, city or gmina NAME; a shared name is an error listing the candidates, never a guess); bbox; lat + lng + radiusKm (a circle; not with a bbox); polygon (alone).

Two answer shapes: the default LIGHT list (parcel id, district, centre point, held street address; 2 API tokens; cursor paging) and OUTLINES, with includeGeometry=true (needs a bbox) or a polygon (GeoJSON per parcel; 5 API tokens; no paging). A TRUNCATED outline answer is an arbitrary subset (not the first, nearest or largest): never report it as the area's parcel list, ask for a smaller area.

Light-list filters (not on outline calls) need a narrow scope - a bbox, a circle, a location name, or a teryt of at least 4 digits (county) - and do not name the area. minArea / maxArea (m²) = registered parcel surface.

  • street: whole-word, case- and accent-insensitive ('Górna' does not find 'Podgórna'; a fragment finds nothing). Pass the NOMINATIVE ('Karmelickiej' answers empty). An empty page is free and carries close-name suggestions - read them before concluding anything.

  • buildingNumber (needs street): exact ('12A' does not find '12a'); RCN often records compound numbers ('84/92'), so '84' will not find '84/92'. If empty, official address points are tried (still exact); if both miss, the page is empty (free) and lists the numbers held on the street. Most rural parcels have no street: outside towns use resolve_parcel (precinct name + parcel number); an empty street search in the countryside says nothing about the parcel. parcel_id is returned only to API-token / OAuth callers and paid or trial accounts.

Coverage gaps: (1) the cadastral data is near-complete but not live (fresh splits, merges or renumbering may be missing) for EVERY entrance: a short list or no truncation marker never means every parcel; each answer has a corpus_coverage block (null for bbox/circle/polygon). (2) bbox, circle and polygon miss the few parcels whose outline has an unreadable coordinate system; teryt/location list those with no location. A returned parcel is real; never read an empty or short answer as proof the land is not there. Refused: area over 500 km², radius over 12.6 km, polygon over 500 vertices.

Input Schema

NameRequiredDescriptionDefault
latNoCircle centre latitude (WGS84). Needs lng and radiusKm.
lngNoCircle centre longitude (WGS84). Needs lat and radiusKm.
bboxNoBounding box "minLng,minLat,maxLng,maxLat" (WGS84), at most 500 km². Required for includeGeometry=true.
limitNoMax parcels. Light list: up to 1000, default 250. Outlines: up to 100, default 50.
terytNoTERYT code prefix (2/4/6 digits or finer), comma-separated for several. Wins over location.
cursorNoCursor from the previous light-list answer for the next page; pass it back unchanged. Not for outline calls.
streetNoStreet name in the NOMINATIVE (min 4 letters or digits). Light list, narrow scope (teryt of at least 4 digits).
maxAreaNoMaximum parcel surface in m². Same rules as minArea.
minAreaNoMinimum parcel surface in m². Light list, narrow scope.
polygonNoGeoJSON Polygon: [longitude, latitude] pairs, first and last point identical, max 500 vertices. Always returns outlines. Pass it instead of the other area parameters.
locationNoCounty, city, gmina or district name, resolved to its TERYT code ('Mokotów' = that Warszawa district; 'Kraków-Podgórze' = its parent county; a gmina name answers at municipality level).
radiusKmNoCircle radius in km (max 12.6, the radius covering 500 km²). Needs lat and lng.
buildingNumberNoBuilding number, exact; needs street. If nothing is found, drop the number and read the numbers off the street's rows.
includeGeometryNoFull outlines instead of the light row (5 tokens, not 2). Requires a bbox; a polygon returns outlines anyway.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building number, exact; needs street, same scope requirement. If nothing is found, drop the number and read the numbers off the street's rows."New value: +"Building number, exact; needs street. If nothing is found, drop the number and read the numbers off the street's rows."
    • changedInput schema / properties / cursor / description
      Previous value: -"Opaque cursor from the previous light-list answer, for the next page; pass it back unchanged. Not available on outline calls."New value: +"Cursor from the previous light-list answer for the next page; pass it back unchanged. Not for outline calls."
    • changedInput schema / properties / includeGeometry / description
      Previous value: -"Return full outlines instead of the light row (5 tokens instead of 2). Requires a bbox; with a polygon outlines come back anyway."New value: +"Full outlines instead of the light row (5 tokens, not 2). Requires a bbox; a polygon returns outlines anyway."
    • changedInput schema / properties / maxArea / description
      Previous value: -"Maximum parcel surface in m². Same scope requirement as minArea."New value: +"Maximum parcel surface in m². Same rules as minArea."
    • changedInput schema / properties / minArea / description
      Previous value: -"Minimum parcel surface in m². Needs a narrow scope; not with includeGeometry or a polygon."New value: +"Minimum parcel surface in m². Light list, narrow scope."
    • changedInput schema / properties / street / description
      Previous value: -"Street name in the NOMINATIVE (min 4 letters or digits). Needs a bbox, a circle, a location name, or a teryt of at least 4 digits; not with includeGeometry or a polygon."New value: +"Street name in the NOMINATIVE (min 4 letters or digits). Light list, narrow scope (teryt of at least 4 digits)."
  2. Changed13 schema fields changed
    • changedInput schema / properties / bbox / description
      Previous value: -"Bounding box in WGS84 as \"minLng,minLat,maxLng,maxLat\", covering at most 500 km². Required for includeGeometry=true."New value: +"Bounding box \"minLng,minLat,maxLng,maxLat\" (WGS84), at most 500 km². Required for includeGeometry=true."
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building number. Against the record the match is exact ('12A' does not find '12a') and RCN numbering is often compound ('84/92'), so an exact '84' misses '84/92'. When that comes back empty, the same number is tried against official address points instead, case-insensitively ('12a' finds '12A') but still exact, matching the street by the same whole-word rule as street, not a fragment — if that also misses, drop the number and read the numbers off the street's rows. Requires street. Same scope requirement as street."New value: +"Building number, exact; needs street, same scope requirement. If nothing is found, drop the number and read the numbers off the street's rows."
    • changedInput schema / properties / cursor / description
      Previous value: -"Opaque cursor from the previous light-list answer, to get the next page. Pass it back unchanged; it is not available on outline calls."New value: +"Opaque cursor from the previous light-list answer, for the next page; pass it back unchanged. Not available on outline calls."
    • changedInput schema / properties / includeGeometry / description
      Previous value: -"Return each parcel's full outline instead of the light row (5 tokens instead of 2, at most 100 parcels, no paging). Requires a bbox; with a polygon the outlines come back anyway."New value: +"Return full outlines instead of the light row (5 tokens instead of 2). Requires a bbox; with a polygon outlines come back anyway."
    • changedInput schema / properties / lat / description
      Previous value: -"Latitude of the circle centre (WGS84). Requires lng and radiusKm."New value: +"Circle centre latitude (WGS84). Needs lng and radiusKm."
    • changedInput schema / properties / limit / description
      Previous value: -"Max parcels returned. Light list: up to 1000, default 250. Outlines: up to 100, default 50 — a larger value is clamped there."New value: +"Max parcels. Light list: up to 1000, default 250. Outlines: up to 100, default 50."
    • changedInput schema / properties / lng / description
      Previous value: -"Longitude of the circle centre (WGS84). Requires lat and radiusKm."New value: +"Circle centre longitude (WGS84). Needs lat and radiusKm."
    • changedInput schema / properties / location / description
      Previous value: -"County, city, gmina, or district name, resolved to its TERYT code. A Warszawa district name (e.g. 'Mokotów') narrows to that district; another city's delegatura (e.g. 'Kraków-Podgórze') resolves to its parent county; a gmina name (e.g. 'Wieliczka') answers at municipality level. A name shared by several units is an error listing the candidates with their codes."New value: +"County, city, gmina or district name, resolved to its TERYT code ('Mokotów' = that Warszawa district; 'Kraków-Podgórze' = its parent county; a gmina name answers at municipality level)."
    • changedInput schema / properties / minArea / description
      Previous value: -"Minimum parcel surface in m². Needs a bbox, a circle, a location name, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon."New value: +"Minimum parcel surface in m². Needs a narrow scope; not with includeGeometry or a polygon."
    • changedInput schema / properties / polygon / description
      Previous value: -"GeoJSON Polygon geometry. Coordinates: [longitude, latitude] pairs, first and last point identical, at most 500 vertices. Always returns outlines. Pass it instead of the other area parameters, not alongside them."New value: +"GeoJSON Polygon: [longitude, latitude] pairs, first and last point identical, max 500 vertices. Always returns outlines. Pass it instead of the other area parameters."
    • changedInput schema / properties / radiusKm / description
      Previous value: -"Circle radius in km (max 12.6 — the radius covering the 500 km² ceiling). Requires lat and lng."New value: +"Circle radius in km (max 12.6, the radius covering 500 km²). Needs lat and lng."
    • changedInput schema / properties / street / description
      Previous value: -"Street name, matched by whole words within the name, case- and accent-insensitively (min 4 letters or digits): 'Górna' finds 'ulica Górna' and 'Górna 15' but not 'Podgórna', and a fragment like 'Marsza' finds nothing. NOMINATIVE: 'Karmelickiej' does not fold to 'Karmelicka' and answers empty. Needs a bbox, a circle, a location name, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon."New value: +"Street name in the NOMINATIVE (min 4 letters or digits). Needs a bbox, a circle, a location name, or a teryt of at least 4 digits; not with includeGeometry or a polygon."
    • changedInput schema / properties / teryt / description
      Previous value: -"TERYT administrative code prefix (2/4/6 digits or finer), comma-separated for several. Wins over location when both are given."New value: +"TERYT code prefix (2/4/6 digits or finer), comma-separated for several. Wins over location."
  3. Changed1 schema field changed
    • changedInput schema / properties / location / description
      Previous value: -"County, city, or district name, resolved to its TERYT code. A Warszawa district name (e.g. 'Mokotów') narrows to that district; another city's delegatura (e.g. 'Kraków-Podgórze') resolves to its parent county. An ambiguous name is an error listing the candidates."New value: +"County, city, gmina, or district name, resolved to its TERYT code. A Warszawa district name (e.g. 'Mokotów') narrows to that district; another city's delegatura (e.g. 'Kraków-Podgórze') resolves to its parent county; a gmina name (e.g. 'Wieliczka') answers at municipality level. A name shared by several units is an error listing the candidates with their codes."
  4. Changed1 schema field changed
    • changedInput schema / properties / street / description
      Previous value: -"Street name, matched by whole words within the name, case- and accent-insensitively (min 4 letters or digits): 'Bielska' finds 'ulica Bielska' and 'Bielska 15' but not 'Zabielska', and a fragment like 'Marsza' finds nothing. NOMINATIVE: 'Karmelickiej' does not fold to 'Karmelicka' and answers empty. Needs a bbox, a circle, a location name, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon."New value: +"Street name, matched by whole words within the name, case- and accent-insensitively (min 4 letters or digits): 'Górna' finds 'ulica Górna' and 'Górna 15' but not 'Podgórna', and a fragment like 'Marsza' finds nothing. NOMINATIVE: 'Karmelickiej' does not fold to 'Karmelicka' and answers empty. Needs a bbox, a circle, a location name, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon."
  5. Changed2 schema fields changed
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building number, matched exactly ('12A' does not find '12a'). RCN numbering is often compound ('84/92'), so an exact '84' misses '84/92' — if a plain number answers empty, drop it and read the numbers off the street's rows. Requires street, and answers only with parcels whose street is on record. Same scope requirement as street."New value: +"Building number. Against the record the match is exact ('12A' does not find '12a') and RCN numbering is often compound ('84/92'), so an exact '84' misses '84/92'. When that comes back empty, the same number is tried against official address points instead, case-insensitively ('12a' finds '12A') but still exact, matching the street by the same whole-word rule as street, not a fragment — if that also misses, drop the number and read the numbers off the street's rows. Requires street. Same scope requirement as street."
    • changedInput schema / properties / street / description
      Previous value: -"Street name, matched case-insensitively anywhere inside the name (min 3 letters or digits). A name, not a pattern — % and _ match themselves. NOMINATIVE and with Polish diacritics: 'Karmelickiej' and 'Marszalkowska' both answer empty. Needs a bbox, a circle, a location name, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon."New value: +"Street name, matched by whole words within the name, case- and accent-insensitively (min 4 letters or digits): 'Bielska' finds 'ulica Bielska' and 'Bielska 15' but not 'Zabielska', and a fragment like 'Marsza' finds nothing. NOMINATIVE: 'Karmelickiej' does not fold to 'Karmelicka' and answers empty. Needs a bbox, a circle, a location name, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon."
  6. Changed1 schema field changed
    • changedInput schema / properties / location / description
      Previous value: -"County or city name, resolved to its TERYT code. An ambiguous name is an error listing the candidates."New value: +"County, city, or district name, resolved to its TERYT code. A Warszawa district name (e.g. 'Mokotów') narrows to that district; another city's delegatura (e.g. 'Kraków-Podgórze') resolves to its parent county. An ambiguous name is an error listing the candidates."
  7. Changed1 schema field changed
    • changedInput schema / properties / buildingNumber / description
      Previous value: -"Building number, matched exactly ('12A' does not find '12a'). Requires street, and answers only with parcels whose street is on record. Same scope requirement as street."New value: +"Building number, matched exactly ('12A' does not find '12a'). RCN numbering is often compound ('84/92'), so an exact '84' misses '84/92' — if a plain number answers empty, drop it and read the numbers off the street's rows. Requires street, and answers only with parcels whose street is on record. Same scope requirement as street."
  8. Changed3 schema fields changed
    • addedInput schema / properties / buildingNumber
      Added value: +{
      +  "description": "Building number, matched exactly ('12A' does not find '12a'). Requires street, and answers only with parcels whose street is on record. Same scope requirement as street.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
    • changedInput schema / properties / minArea / description
      Previous value: -"Minimum parcel surface in m². Needs a bbox, a circle, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon."New value: +"Minimum parcel surface in m². Needs a bbox, a circle, a location name, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon."
    • addedInput schema / properties / street
      Added value: +{
      +  "description": "Street name, matched case-insensitively anywhere inside the name (min 3 letters or digits). A name, not a pattern — % and _ match themselves. NOMINATIVE and with Polish diacritics: 'Karmelickiej' and 'Marszalkowska' both answer empty. Needs a bbox, a circle, a location name, or a teryt of at least 4 digits. Not available with includeGeometry or a polygon.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
  9. Added

TDQS

A4.9/5.0
Behavior5/5

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

Goes far beyond the readOnly/destructive annotations: it quantifies cost per answer shape (2 vs 5 API tokens), discloses cursor paging for light lists, warns that a TRUNCATED outline is an arbitrary subset that must not be reported as an area list, documents a corpus_coverage block, and names hard refusals (500 km², 12.6 km radius, 500 vertices). It even explains that empty street pages are free and carry close-name suggestions.

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?

Front-loaded with purpose, then area naming, then answer shapes, then filters, then caveats – a logical order for a 14-parameter tool. It is long and dense, with some overlap (resolve_parcel routing appears twice; the 'short list never means every parcel' caution is restated), which keeps it short of a 5.

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

Completeness5/5

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

For a high-parameter, two-mode query tool with no output schema, it covers entry modes, mutual exclusions, paging, cost, truncation, coverage gaps and refusals – everything an agent needs to avoid a wrong answer. No output schema is needed because return shapes ('parcel id, district, centre point, held street address' vs GeoJSON outlines) are described.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds matching semantics the schema omits: street must be NOMINATIVE and whole-word ('Górna' does not find 'Podgórna'; fragment finds nothing), buildingNumber is exact and RCN compound numbers like '84/92' break prefix matching. It clarifies minArea/maxArea apply to registered surface and that light-list filters are rejected on outline calls.

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 opening states a specific verb and resource ('List cadastral parcels in an area') and immediately disambiguates against the nearest siblings: 'the land plots themselves, NOT transactions (for deeds and prices use search_transactions)'. A routing paragraph then assigns id prefixes, coordinates, addresses and single-parcel lookups to resolve_parcel and get_parcel_report, so the tool's scope is unmistakable.

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

Usage Guidelines5/5

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

Explicit when-to-use rules for each entry path: 'teryt (codes from list_locations)', 'location (county, city or gmina NAME; a shared name is an error... never a guess)', 'lat + lng + radiusKm (a circle; not with a bbox)', 'polygon (alone)'. It also states when filters are legal ('need a narrow scope... and do not name the area') and when the tool is pointless (rural parcels without streets should use resolve_parcel).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources