Skip to main content
Glama
cenogram-mcp-server

cenogram-mcp-server

Official

resolve_parcel

Read-only

Resolve a land parcel to its cadastral identity from an ID, locality and parcel number, or coordinates; returns matching parcel details for transaction lookups.

Instructions

Resolve a land parcel to its cadastral identity using exactly ONE of:

  • parcelId: a full cadastral id ('142907_2.0014.342/5' or the '-' form) or internal UUID.

  • q: a full id, a UUID, or 'locality name + parcel number' (e.g. 'Sabnie 342/5'): the name is a gmina or cadastral precinct (obręb), matched exactly, case-insensitively; a gmina name plus a number also works for a gmina made of several precincts (e.g. 'Ełk 461/3'). An ambiguous name returns several candidates, not a guess. NOT a street address: for a city address use list_parcels_in_area(street=, buildingNumber=).

  • lat & lng: a WGS84 point inside the parcel (a road parcel is flagged: the point probably fell on the street). Returns matching parcels with district, area and coordinates; 'truncated' when capped. not_covered: for a FULL id it means we could not confirm the parcel live; in the DISCOVERY modes (name + number, coordinate) only "not among the parcels we hold" (near-complete, not live) - a fresh change or an unusual spelling is likelier than a missing parcel, so never report "no such parcel". not_computed = the lookup could not finish, also not a finding. corpus_coverage says how much of the register was searched. Then feed the id to search_transactions(parcelId) for its sale history. Free.

Input Schema

NameRequiredDescriptionDefault
qNoFull cadastral id, UUID, or 'locality name + parcel number' (e.g. 'Sabnie 342/5'); not a street address. Exclusive with parcelId and lat/lng.
latNoLatitude WGS84; pair with lng. Exclusive with q and parcelId.
lngNoLongitude WGS84; pair with lat. Exclusive with q and parcelId.
parcelIdNoFull cadastral id (slash or dash form) or internal UUID. Exclusive with q and lat/lng.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.18.0
    • changedInput schema / properties / lat / description
      Previous value: -"Latitude WGS84. Must be paired with lng. Mutually exclusive with q and parcelId."New value: +"Latitude WGS84; pair with lng. Exclusive with q and parcelId."
    • changedInput schema / properties / lng / description
      Previous value: -"Longitude WGS84. Must be paired with lat. Mutually exclusive with q and parcelId."New value: +"Longitude WGS84; pair with lat. Exclusive with q and parcelId."
    • changedInput schema / properties / parcelId / description
      Previous value: -"Full cadastral id (slash or dash form) or internal UUID. Mutually exclusive with q and lat/lng."New value: +"Full cadastral id (slash or dash form) or internal UUID. Exclusive with q and lat/lng."
    • changedInput schema / properties / q / description
      Previous value: -"Full cadastral id, a UUID, or 'locality name + parcel number' (e.g. 'Sabnie 342/5') — the name may be a gmina or a cadastral precinct (obręb). NOT a street address: for a street + building number use list_parcels_in_area instead. Mutually exclusive with parcelId and lat/lng."New value: +"Full cadastral id, UUID, or 'locality name + parcel number' (e.g. 'Sabnie 342/5'); not a street address. Exclusive with parcelId and lat/lng."
  2. Changed1 schema field changedv0.12.0
    • changedInput schema / properties / q / description
      Previous value: -"Full cadastral id, a UUID, or 'locality name + parcel number' (e.g. 'Sabnie 342/5'). Mutually exclusive with parcelId and lat/lng."New value: +"Full cadastral id, a UUID, or 'locality name + parcel number' (e.g. 'Sabnie 342/5') — the name may be a gmina or a cadastral precinct (obręb). NOT a street address: for a street + building number use list_parcels_in_area instead. Mutually exclusive with parcelId and lat/lng."
  3. First observedv0.5.0

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds substantial behavior beyond that: ambiguous names return several candidates rather than guessing, road parcels are flagged when a point falls on a street, results can be 'truncated', and not_covered/not_computed/corpus_coverage are explained with warnings about misinterpretation. That is rich context an agent would not get from the annotations alone.

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 front-loaded with the three usage modes and is organized as bullets, which makes it easy to scan. It is dense but mostly earns its length, though the not_covered paragraph is verbose and could be tightened. It is slightly long for a four-parameter tool, but the structure prevents it from becoming unwieldy.

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?

There is no output schema, so the description carries the full burden of explaining return values, and it does so: matching parcels include district, area and coordinates, 'truncated' indicates capping, and not_covered/not_computed/corpus_coverage are defined. It also explains the ambiguity response and next-step integration with search_transactions. Nothing essential is missing for correct invocation or interpretation.

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?

Schema coverage is 100%, so the schema already documents each parameter, but the description adds real semantic value beyond it. It gives concrete examples for parcelId forms and q ('Sabnie 342/5', 'Ełk 461/3'), explains name-matching rules (exact, case-insensitive gmina or precinct), describes ambiguity behavior, and specifies that lat/lng must be a WGS84 point inside the parcel. This meaningfully improves correct parameter use.

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 and resource: 'Resolve a land parcel to its cadastral identity.' It immediately distinguishes this from nearby tools by naming the exact alternative for street addresses (list_parcels_in_area) and by pointing to search_transactions for sale history. An agent can tell exactly what this tool is for without opening the schema.

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?

It states the exclusive usage rule ('using exactly ONE of') and then explains each mode: parcelId, q, and lat/lng. It explicitly rules out street addresses and redirects to list_parcels_in_area(street=, buildingNumber=), and it describes the follow-up path to search_transactions(parcelId). This is explicit when-to-use and when-not-to-use guidance.

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