Skip to main content
Glama

Cenogram - Polish Real Estate Data

compare_locations

Read-only

Compare 2-5 districts side-by-side: median price/m², average area and transaction counts. Filters drop rows lacking the value unless 'unknown' is listed. Matches names only: call list_locations(search=...) first and use names it flags as RCN districts (rcn_district) - other names (most TERYT unit names) silently return no data. Needs at least one filter besides districts (e.g. propertyType).

Input Schema

NameRequiredDescriptionDefault
floorNoUnit floor, multi-select: integers ('0' = ground, negatives = basement), 'Nplus', 'unknown' (no floor). Not building storeys.
roomsNoRooms (izby), residential units only, multi-select ('8plus' = 8+); 'unknown' = no count.
dateToNoEnd date (YYYY-MM-DD)
streetNoStreet name filter
maxAreaNoMaximum area in m²
minAreaNoMinimum area in m²
dateFromNoStart date (YYYY-MM-DD)
maxPriceNoMaximum price in PLN
minPriceNoMinimum price in PLN
districtsYesComma-separated district names (2-5, unique), e.g. 'Mokotów,Wola,Ursynów'
marketTypeNoprimary (developer) or secondary (resale); untyped records (~55%) drop out.
buildingTypeNoBuilding type (PKOB); 'unknown' = none recorded (~39%).
propertyTypeNoProperty type: building = no land; house with plot = developed_land (recommended - API requires at least one filter)
unitFunctionNoUnit function; 'unknown' = none recorded. Garages only via 'garage'.
ownershipTypeNoLegal right (rodzaj prawa), multi-select; 'unknown' = none recorded.
mpzpDesignationNoMPZP zoning designation, exact token match; comma-separated = OR (e.g. 'MN,MW'); 'unknown' = none recorded. An unrecognised value triggers a warning listing all codes.
transactionTypeNoMulti-select. For market analysis ALWAYS set it to drop non-market deeds (subsidized, foreclosure, public_purpose); untyped rows drop out unless 'unknown'.
includeDemographicsNoAdd a GUS BDL block per district (county-level: density, wages, unemployment, median age, price-to-income); districts not resolving to a county are omitted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • changedInput schema / properties / buildingType / description
      Previous value: -"Building type (PKOB); 'unknown' = none recorded (NULL, ~39% of buildings), any other value excludes such rows."New value: +"Building type (PKOB); 'unknown' = none recorded (~39%)."
    • changedInput schema / properties / floor / description
      Previous value: -"Unit floor, multi-select: integers ('0' = parter, negatives = basement), 'Nplus' ('0plus' = ground and above), 'unknown' (none recorded). Not building storeys; rows with no floor drop out unless 'unknown' is listed."New value: +"Unit floor, multi-select: integers ('0' = ground, negatives = basement), 'Nplus', 'unknown' (no floor). Not building storeys."
    • changedInput schema / properties / includeDemographics / description
      Previous value: -"Add a GUS BDL demographics block per district (county-level: density, wages, unemployment, median age, price-to-income). Districts that do not resolve to a county are omitted from it."New value: +"Add a GUS BDL block per district (county-level: density, wages, unemployment, median age, price-to-income); districts not resolving to a county are omitted."
    • changedInput schema / properties / marketType / description
      Previous value: -"primary (developer) or secondary (resale); the ~55% of records with no market type drop out when this is set."New value: +"primary (developer) or secondary (resale); untyped records (~55%) drop out."
    • changedInput schema / properties / mpzpDesignation / description
      Previous value: -"MPZP zoning designation, exact token match; comma-separated = OR; 'unknown' = none recorded. Same codes as search_transactions mpzpDesignation."New value: +"MPZP zoning designation, exact token match; comma-separated = OR (e.g. 'MN,MW'); 'unknown' = none recorded. An unrecognised value triggers a warning listing all codes."
    • changedInput schema / properties / ownershipType / description
      Previous value: -"Legal-right type (rodzaj prawa), multi-select; perpetual_usufruct = użytkowanie wieczyste; 'unknown' = none recorded."New value: +"Legal right (rodzaj prawa), multi-select; 'unknown' = none recorded."
    • changedInput schema / properties / rooms / description
      Previous value: -"Rooms (izby), residential units only; multi-select ('8plus' = 8 or more). Rows with no count drop out unless 'unknown' is listed."New value: +"Rooms (izby), residential units only, multi-select ('8plus' = 8+); 'unknown' = no count."
    • changedInput schema / properties / transactionType / description
      Previous value: -"Multi-select. For market analysis ALWAYS set it to exclude non-market deeds (subsidized, foreclosure, public_purpose); no-type rows (~2%) drop out unless 'unknown' is listed."New value: +"Multi-select. For market analysis ALWAYS set it to drop non-market deeds (subsidized, foreclosure, public_purpose); untyped rows drop out unless 'unknown'."
    • changedInput schema / properties / unitFunction / description
      Previous value: -"Unit function; 'unknown' = none recorded (NULL), any other value excludes such rows. Garages only via 'garage'."New value: +"Unit function; 'unknown' = none recorded. Garages only via 'garage'."
  2. Changed1 schema field changed
    • changedInput schema / properties / propertyType / description
      Previous value: -"Property type filter (recommended - API requires at least one filter)"New value: +"Property type: building = no land; house with plot = developed_land (recommended - API requires at least one filter)"
  3. Changed10 schema fields changed
    • changedInput schema / properties / buildingType / description
      Previous value: -"Building type filter (PKOB classification). 'unknown' = no type recorded (NULL); without it such rows are excluded (~39% of buildings have no type)."New value: +"Building type (PKOB); 'unknown' = none recorded (NULL, ~39% of buildings), any other value excludes such rows."
    • changedInput schema / properties / districts / description
      Previous value: -"Comma-separated district names to compare (2-5, must be unique). E.g. 'Mokotów,Wola,Ursynów'"New value: +"Comma-separated district names (2-5, unique), e.g. 'Mokotów,Wola,Ursynów'"
    • changedInput schema / properties / floor / description
      Previous value: -"Floor of the unit (piętro lokalu, residential). Multi-select buckets: exact integers incl. '0' (parter) and negatives e.g. '-1' (basement), 'Nplus' e.g. '10plus' = 10 or more, '0plus' = ground and above, 'unknown' = no floor recorded (NULL). E.g. ['0','1','2'] for ground-to-2nd floor. Building storeys are a different attribute. Without 'unknown', rows with no floor are excluded."New value: +"Unit floor, multi-select: integers ('0' = parter, negatives = basement), 'Nplus' ('0plus' = ground and above), 'unknown' (none recorded). Not building storeys; rows with no floor drop out unless 'unknown' is listed."
    • changedInput schema / properties / includeDemographics / description
      Previous value: -"Add a GUS BDL demographics block per district (county-level: population density, wages, unemployment, median age, plus a few cross-source ratios like price-to-income). Districts that don't resolve to a county are omitted from the demographics section."New value: +"Add a GUS BDL demographics block per district (county-level: density, wages, unemployment, median age, price-to-income). Districts that do not resolve to a county are omitted from it."
    • changedInput schema / properties / marketType / description
      Previous value: -"Market type filter"New value: +"primary (developer) or secondary (resale); the ~55% of records with no market type drop out when this is set."
    • changedInput schema / properties / mpzpDesignation / description
      Previous value: -"MPZP zoning designation filter, exact token match (not prefix). Comma-separated = OR, e.g. 'MN,MW'. Use 'unknown' for rows with no designation recorded (NULL); distinct from the registry code 'brakMPZPLubWZ' (= 'no plan/WZ' recorded as data). Known codes: budownictwoMieszkanioweJednorodzinne, brakMPZPLubWZ, terenRolniczy, innyNiewymieniony, terenZabudowyUslugowej, terenDrogWewnetrznych, terenDrogPublicznych, terenZabudowyZagrodowejGospodarstwRolnych, budownictwoMieszkanioweWielorodzinne, las, terenObiektowProdukcyjnychSkladowIMagazynow, terenSportuIRekreacji, decyzjaWarunkiZabudowy, terenZieleniUrzadzonej, terenZieleniObjetyFormaOchronyPrzyrody, terenWodPowierzchniowychSrodladowych, obszarITerenGorniczy, terenObslugiProdukcjiWGospodarstwachRolnych, terenInfrastrukturyTechnicznej, terenOgrodowDzialkowych, terenRozmieszczeniaDuzcychObiektowHandlowych, cmentarz, terenKomunikacjiWodnejSzlakWodny, terenWodPowierzchniowychMorskich, MN, BP, KD, U, INN, MW, KDW, R, ZP, P, WZ, ZN, WS, UC, ZL, ZD, US, TIT. An unrecognised value is still sent but adds a warning to the reply."New value: +"MPZP zoning designation, exact token match; comma-separated = OR; 'unknown' = none recorded. Same codes as search_transactions mpzpDesignation."
    • changedInput schema / properties / ownershipType / description
      Previous value: -"Ownership / legal-right type filter (rodzaj prawa do nieruchomości). land_ownership; perpetual_usufruct (użytkowanie wieczyste — covers both registry codes for this right); cooperative_ownership; unit_sale; ownership; unit_ownership_with_appurtenant_right; building_ownership_with_appurtenant_right. 'unknown' = no right recorded (NULL). Multi-select; e.g. ['land_ownership','perpetual_usufruct'] to compare ownership vs perpetual usufruct on undeveloped land."New value: +"Legal-right type (rodzaj prawa), multi-select; perpetual_usufruct = użytkowanie wieczyste; 'unknown' = none recorded."
    • changedInput schema / properties / rooms / description
      Previous value: -"Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more, 'unknown' = no room count recorded (NULL). E.g. ['2','3'] for 2-3 izby flats. Without 'unknown', rows with no room count are excluded."New value: +"Rooms (izby), residential units only; multi-select ('8plus' = 8 or more). Rows with no count drop out unless 'unknown' is listed."
    • changedInput schema / properties / transactionType / description
      Previous value: -"Transaction type filter. For market analysis, ALWAYS specify to exclude non-market transactions."New value: +"Multi-select. For market analysis ALWAYS set it to exclude non-market deeds (subsidized, foreclosure, public_purpose); no-type rows (~2%) drop out unless 'unknown' is listed."
    • changedInput schema / properties / unitFunction / description
      Previous value: -"Unit/apartment function filter. 'unknown' = no function recorded (NULL); without it such rows are excluded. Garages appear only when 'garage' is selected, not via 'unknown'."New value: +"Unit function; 'unknown' = none recorded (NULL), any other value excludes such rows. Garages only via 'garage'."
  4. Changed1 schema field changed
    • changedInput schema / properties / mpzpDesignation / description
      Previous value: -"MPZP zoning designation prefix filter (e.g. 'terenRolniczy', 'budownictwoMieszkanioweJednorodzinne', 'budownictwoMieszkanioweWielorodzinne'). Use 'unknown' for rows with no designation recorded (NULL); distinct from the registry code 'brakMPZPLubWZ'."New value: +"MPZP zoning designation filter, exact token match (not prefix). Comma-separated = OR, e.g. 'MN,MW'. Use 'unknown' for rows with no designation recorded (NULL); distinct from the registry code 'brakMPZPLubWZ' (= 'no plan/WZ' recorded as data). Known codes: budownictwoMieszkanioweJednorodzinne, brakMPZPLubWZ, terenRolniczy, innyNiewymieniony, terenZabudowyUslugowej, terenDrogWewnetrznych, terenDrogPublicznych, terenZabudowyZagrodowejGospodarstwRolnych, budownictwoMieszkanioweWielorodzinne, las, terenObiektowProdukcyjnychSkladowIMagazynow, terenSportuIRekreacji, decyzjaWarunkiZabudowy, terenZieleniUrzadzonej, terenZieleniObjetyFormaOchronyPrzyrody, terenWodPowierzchniowychSrodladowych, obszarITerenGorniczy, terenObslugiProdukcjiWGospodarstwachRolnych, terenInfrastrukturyTechnicznej, terenOgrodowDzialkowych, terenRozmieszczeniaDuzcychObiektowHandlowych, cmentarz, terenKomunikacjiWodnejSzlakWodny, terenWodPowierzchniowychMorskich, MN, BP, KD, U, INN, MW, KDW, R, ZP, P, WZ, ZN, WS, UC, ZL, ZD, US, TIT. An unrecognised value is still sent but adds a warning to the reply."
  5. Changed1 schema field changed
    • addedInput schema / properties / floor
      Added value: +{
      +  "description": "Floor of the unit (piętro lokalu, residential). Multi-select buckets: exact integers incl. '0' (parter) and negatives e.g. '-1' (basement), 'Nplus' e.g. '10plus' = 10 or more, '0plus' = ground and above, 'unknown' = no floor recorded (NULL). E.g. ['0','1','2'] for ground-to-2nd floor. Building storeys are a different attribute. Without 'unknown', rows with no floor are excluded.",
      +  "items": {
      +    "pattern": "^(-?\\d+|\\d+plus|unknown)$",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / ownershipType
      Added value: +{
      +  "description": "Ownership / legal-right type filter (rodzaj prawa do nieruchomości). land_ownership; perpetual_usufruct (użytkowanie wieczyste — covers both registry codes for this right); cooperative_ownership; unit_sale; ownership; unit_ownership_with_appurtenant_right; building_ownership_with_appurtenant_right. 'unknown' = no right recorded (NULL). Multi-select; e.g. ['land_ownership','perpetual_usufruct'] to compare ownership vs perpetual usufruct on undeveloped land.",
      +  "items": {
      +    "enum": [
      +      "land_ownership",
      +      "perpetual_usufruct",
      +      "cooperative_ownership",
      +      "unit_sale",
      +      "ownership",
      +      "unit_ownership_with_appurtenant_right",
      +      "building_ownership_with_appurtenant_right",
      +      "unknown"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  7. Changed7 schema fields changed
    • changedInput schema / properties / buildingType / description
      Previous value: -"Building type filter (PKOB classification)"New value: +"Building type filter (PKOB classification). 'unknown' = no type recorded (NULL); without it such rows are excluded (~39% of buildings have no type)."
    • changedInput schema / properties / buildingType / enum
      Previous value: -[
      -  "residential",
      -  "commercial",
      -  "industrial",
      -  "transport",
      -  "office",
      -  "warehouse",
      -  "education_sports",
      -  "farm_utility",
      -  "hospital",
      -  "other_nonresidential"
      -]New value: +[
      +  "residential",
      +  "commercial",
      +  "industrial",
      +  "transport",
      +  "office",
      +  "warehouse",
      +  "education_sports",
      +  "farm_utility",
      +  "hospital",
      +  "other_nonresidential",
      +  "unknown"
      +]
    • changedInput schema / properties / mpzpDesignation / description
      Previous value: -"MPZP zoning designation prefix filter (e.g. 'terenRolniczy', 'budownictwoMieszkanioweJednorodzinne', 'budownictwoMieszkanioweWielorodzinne')"New value: +"MPZP zoning designation prefix filter (e.g. 'terenRolniczy', 'budownictwoMieszkanioweJednorodzinne', 'budownictwoMieszkanioweWielorodzinne'). Use 'unknown' for rows with no designation recorded (NULL); distinct from the registry code 'brakMPZPLubWZ'."
    • changedInput schema / properties / rooms / description
      Previous value: -"Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more. E.g. ['2','3'] for 2-3 izby flats. Rows with no room count are excluded."New value: +"Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more, 'unknown' = no room count recorded (NULL). E.g. ['2','3'] for 2-3 izby flats. Without 'unknown', rows with no room count are excluded."
    • changedInput schema / properties / rooms / items / enum
      Previous value: -[
      -  "1",
      -  "2",
      -  "3",
      -  "4",
      -  "5",
      -  "6",
      -  "7",
      -  "8plus"
      -]New value: +[
      +  "1",
      +  "2",
      +  "3",
      +  "4",
      +  "5",
      +  "6",
      +  "7",
      +  "8plus",
      +  "unknown"
      +]
    • changedInput schema / properties / unitFunction / description
      Previous value: -"Unit/apartment function filter"New value: +"Unit/apartment function filter. 'unknown' = no function recorded (NULL); without it such rows are excluded. Garages appear only when 'garage' is selected, not via 'unknown'."
    • changedInput schema / properties / unitFunction / enum
      Previous value: -[
      -  "residential",
      -  "commercial",
      -  "office",
      -  "production",
      -  "garage",
      -  "other"
      -]New value: +[
      +  "residential",
      +  "commercial",
      +  "office",
      +  "production",
      +  "garage",
      +  "other",
      +  "unknown"
      +]
  8. Changed5 schema fields changed
    • changedInput schema / properties / districts / description
      Previous value: -"Comma-separated district names to compare (2-5). E.g. 'Mokotów,Wola,Ursynów'"New value: +"Comma-separated district names to compare (2-5, must be unique). E.g. 'Mokotów,Wola,Ursynów'"
    • removedInput schema / properties / districts / minLength
      Removed value: -1
    • addedInput schema / properties / includeDemographics
      Added value: +{
      +  "description": "Add a GUS BDL demographics block per district (county-level: population density, wages, unemployment, median age, plus a few cross-source ratios like price-to-income). Districts that don't resolve to a county are omitted from the demographics section.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / rooms
      Added value: +{
      +  "description": "Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more. E.g. ['2','3'] for 2-3 izby flats. Rows with no room count are excluded.",
      +  "items": {
      +    "enum": [
      +      "1",
      +      "2",
      +      "3",
      +      "4",
      +      "5",
      +      "6",
      +      "7",
      +      "8plus"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / transactionType
      Added value: +{
      +  "description": "Transaction type filter. For market analysis, ALWAYS specify to exclude non-market transactions.",
      +  "items": {
      +    "enum": [
      +      "free_market",
      +      "auction",
      +      "non_auction",
      +      "subsidized",
      +      "public_purpose",
      +      "foreclosure",
      +      "unknown"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  9. Changed5 schema fields changed
    • changedInput schema / properties / districts / description
      Previous value: -"Comma-separated district names to compare (2-5, must be unique). E.g. 'Mokotów,Wola,Ursynów'"New value: +"Comma-separated district names to compare (2-5). E.g. 'Mokotów,Wola,Ursynów'"
    • addedInput schema / properties / districts / minLength
      Added value: +1
    • removedInput schema / properties / includeDemographics
      Removed value: -{
      -  "description": "Add a GUS BDL demographics block per district (county-level: population density, wages, unemployment, median age, plus a few cross-source ratios like price-to-income). Districts that don't resolve to a county are omitted from the demographics section.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / rooms
      Removed value: -{
      -  "description": "Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more. E.g. ['2','3'] for 2-3 izby flats. Rows with no room count are excluded.",
      -  "items": {
      -    "enum": [
      -      "1",
      -      "2",
      -      "3",
      -      "4",
      -      "5",
      -      "6",
      -      "7",
      -      "8plus"
      -    ],
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / transactionType
      Removed value: -{
      -  "description": "Transaction type filter. For market analysis, ALWAYS specify to exclude non-market transactions.",
      -  "items": {
      -    "enum": [
      -      "free_market",
      -      "auction",
      -      "non_auction",
      -      "subsidized",
      -      "public_purpose",
      -      "foreclosure",
      -      "unknown"
      -    ],
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
  10. Changed1 schema field changed
    • addedInput schema / properties / includeDemographics
      Added value: +{
      +  "description": "Add a GUS BDL demographics block per district (county-level: population density, wages, unemployment, median age, plus a few cross-source ratios like price-to-income). Districts that don't resolve to a county are omitted from the demographics section.",
      +  "type": "boolean"
      +}
  11. Changed1 schema field changed
    • addedInput schema / properties / rooms
      Added value: +{
      +  "description": "Number of rooms (izby) filter, residential units only. Multi-select; '8plus' means 8 or more. E.g. ['2','3'] for 2-3 izby flats. Rows with no room count are excluded.",
      +  "items": {
      +    "enum": [
      +      "1",
      +      "2",
      +      "3",
      +      "4",
      +      "5",
      +      "6",
      +      "7",
      +      "8plus"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  12. Changed2 schema fields changed
    • changedInput schema / properties / districts / description
      Previous value: -"Comma-separated district names to compare (2-5). E.g. 'Mokotów,Wola,Ursynów'"New value: +"Comma-separated district names to compare (2-5, must be unique). E.g. 'Mokotów,Wola,Ursynów'"
    • removedInput schema / properties / districts / minLength
      Removed value: -1
  13. Changed1 schema field changed
    • addedInput schema / properties / transactionType
      Added value: +{
      +  "description": "Transaction type filter. For market analysis, ALWAYS specify to exclude non-market transactions.",
      +  "items": {
      +    "enum": [
      +      "free_market",
      +      "auction",
      +      "non_auction",
      +      "subsidized",
      +      "public_purpose",
      +      "foreclosure",
      +      "unknown"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  14. Changed1 schema field changed
    • addedInput schema / properties / mpzpDesignation
      Added value: +{
      +  "description": "MPZP zoning designation prefix filter (e.g. 'terenRolniczy', 'budownictwoMieszkanioweJednorodzinne', 'budownictwoMieszkanioweWielorodzinne')",
      +  "type": "string"
      +}
  15. Changed2 schema fields changed
    • addedInput schema / properties / buildingType
      Added value: +{
      +  "description": "Building type filter (PKOB classification)",
      +  "enum": [
      +    "residential",
      +    "commercial",
      +    "industrial",
      +    "transport",
      +    "office",
      +    "warehouse",
      +    "education_sports",
      +    "farm_utility",
      +    "hospital",
      +    "other_nonresidential"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / unitFunction
      Added value: +{
      +  "description": "Unit/apartment function filter",
      +  "enum": [
      +    "residential",
      +    "commercial",
      +    "office",
      +    "production",
      +    "garage",
      +    "other"
      +  ],
      +  "type": "string"
      +}
  16. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. Beyond that the description discloses the non-obvious failure mode (silent empty results for non-RCN district names) and the row-dropping rule for missing values unless 'unknown' is listed — real behavioral detail not present in annotations. It stops short of describing response shape/pagination, but the metric list partly covers that.

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?

Three dense sentences that are front-loaded with purpose, then caveats, then prerequisites — no filler. The middle sentence about filter row-dropping is compact but slightly cryptic on first read, and the required-filter caveat would be easier to scan if it preceded the name-matching rules.

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 an 18-parameter tool with no output schema, the description supplies the output metrics, the mandatory-filter rule, and the name-resolution trap — the three things most likely to cause a failed call. The includeDemographics option and the interaction between the many optional filters are left entirely to the schema, which is acceptable given 100% coverage but is a minor gap.

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 coverage is 100%, so baseline is 3. The description earns a bump by adding meaning the schema cannot: 'districts' must be RCN district names sourced from list_locations, and at least one non-district filter must accompany it. The note that filters drop rows lacking the value unless 'unknown' is listed clarifies the unknown-handling semantics of the enum arrays.

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?

Opens with a specific verb, resource and arity: 'Compare 2-5 districts side-by-side', and immediately names the exact outputs (median price/m², average area, transaction counts). This is clearly distinguishable from sibling aggregate tools such as get_price_statistics or get_market_overview, and it explicitly routes the agent away from itself for name resolution by pointing to list_locations.

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?

Gives an explicit prerequisite chain ('call list_locations(search=...) first and use names it flags as RCN districts') plus an explicit precondition ('Needs at least one filter besides districts'). It also states a negative condition (non-RCN names, most TERYT unit names, silently return no data), which is exactly the when-not guidance an agent needs.

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