Skip to main content
Glama

Cenogram - Polish Real Estate Data

get_demographics

Read-only

Local statistics for a Polish location from GUS BDL (Poland's Central Statistical Office): ~50 indicators across 11 categories (population, economy, housing, planning, infrastructure, environment, safety, education, prices) plus a few derived metrics. Address by location or teryt (codes from list_locations); neighborhoods/osiedla are NOT addressable. Returns the requested level PLUS all parent levels. Cost: 1 token.

Input Schema

NameRequiredDescriptionDefault
yearNoSingle year (2003-present); exclusive with yearFrom/yearTo. Omit for the latest year per indicator.
terytNoTERYT: 2-digit voivodeship (14), 4 county (1465), 6 or 7 gmina (1465011). 7th digit: 3 = urban-rural gmina overall, 4/5 = urban/rural part only, 8 = Warszawa district (1465108 = Śródmieście). Wins over location.
yearToNoEnd year for a time series (max current year + 1).
categoryNoCategories to return; omit for all.
locationNoCity, county, gmina or district name (e.g. 'Warszawa', 'Wieliczka'): city/county → county level, gmina → that gmina, a Warszawa district ('Mokotów') → that district, another city's delegatura ('Kraków-Podgórze') → its parent county. Shared name → candidates; pass one as teryt. Use this OR teryt.
yearFromNoStart year for a time series (min 2003).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / category / description
      Previous value: -"Filter to these categories. Omit to return all available."New value: +"Categories to return; omit for all."
    • changedInput schema / properties / location / description
      Previous value: -"City, county, gmina, or district name (e.g. 'Warszawa', 'Kraków', 'Wieliczka'). A city/county name resolves to county/powiat level; a gmina name resolves to that gmina; a Warszawa district name (e.g. 'Mokotów') resolves to that district, another city's delegatura (e.g. 'Kraków-Podgórze') to its parent county. A name shared by several units returns the candidates with their codes; pass one as teryt. Use this OR teryt."New value: +"City, county, gmina or district name (e.g. 'Warszawa', 'Wieliczka'): city/county → county level, gmina → that gmina, a Warszawa district ('Mokotów') → that district, another city's delegatura ('Kraków-Podgórze') → its parent county. Shared name → candidates; pass one as teryt. Use this OR teryt."
    • changedInput schema / properties / teryt / description
      Previous value: -"TERYT code: 2-digit (voivodeship, e.g. 14), 4-digit (county, e.g. 1465), 6 or 7-digit (gmina, e.g. 1465011). The 7th digit selects the unit type: 3 = urban-rural gmina overall, 4/5 = urban/rural part only, 8 = Warszawa district (1465011 = all of Warszawa, 1465108 = Śródmieście). Wins over location. Use list_locations to find codes."New value: +"TERYT: 2-digit voivodeship (14), 4 county (1465), 6 or 7 gmina (1465011). 7th digit: 3 = urban-rural gmina overall, 4/5 = urban/rural part only, 8 = Warszawa district (1465108 = Śródmieście). Wins over location."
    • changedInput schema / properties / year / description
      Previous value: -"Single year (2003-present). Mutually exclusive with yearFrom/yearTo. Omit for the latest available year per indicator."New value: +"Single year (2003-present); exclusive with yearFrom/yearTo. Omit for the latest year per indicator."
  2. Changed1 schema field changed
    • changedInput schema / properties / location / description
      Previous value: -"City, county, or district name (e.g. 'Warszawa', 'Kraków'). A city/county name resolves to county/powiat level; a Warszawa district name (e.g. 'Mokotów') resolves to that district, another city's delegatura (e.g. 'Kraków-Podgórze') to its parent county. Use this OR teryt. For gmina-level data on other units pass a 6/7-digit teryt instead."New value: +"City, county, gmina, or district name (e.g. 'Warszawa', 'Kraków', 'Wieliczka'). A city/county name resolves to county/powiat level; a gmina name resolves to that gmina; a Warszawa district name (e.g. 'Mokotów') resolves to that district, another city's delegatura (e.g. 'Kraków-Podgórze') to its parent county. A name shared by several units returns the candidates with their codes; pass one as teryt. Use this OR teryt."
  3. Changed1 schema field changed
    • changedInput schema / properties / location / description
      Previous value: -"City/county name, resolves to county/powiat level (e.g. 'Warszawa', 'Kraków'). Use this OR teryt. For gmina-level data pass a 6/7-digit teryt instead."New value: +"City, county, or district name (e.g. 'Warszawa', 'Kraków'). A city/county name resolves to county/powiat level; a Warszawa district name (e.g. 'Mokotów') resolves to that district, another city's delegatura (e.g. 'Kraków-Podgórze') to its parent county. Use this OR teryt. For gmina-level data on other units pass a 6/7-digit teryt instead."
  4. Changed1 schema field changed
    • changedInput schema / properties / teryt / description
      Previous value: -"TERYT code: 2-digit (voivodeship, e.g. 14), 4-digit (county, e.g. 1465), 6 or 7-digit (gmina, e.g. 1465011). Wins over location. Use list_locations to find codes."New value: +"TERYT code: 2-digit (voivodeship, e.g. 14), 4-digit (county, e.g. 1465), 6 or 7-digit (gmina, e.g. 1465011). The 7th digit selects the unit type: 3 = urban-rural gmina overall, 4/5 = urban/rural part only, 8 = Warszawa district (1465011 = all of Warszawa, 1465108 = Śródmieście). Wins over location. Use list_locations to find codes."
  5. Added
  6. Removed
  7. Added

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish read-only, closed-world, non-destructive behavior, so the description wisely spends its words elsewhere: it discloses that results include the requested level PLUS all parent levels, that ambiguous names yield candidate lists requiring a teryt, and that a call costs 1 token. That is meaningful context beyond the annotations; only the exact response shape/pagination is left unstated.

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 the value proposition and indicator/category scope, followed by addressing rules and cost. Dense and mostly waste-free, though the parenthetical category list and multi-clause addressing sentence make it heavier than strictly necessary.

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?

With no output schema, the description does tell the agent that parent levels are returned in addition to the requested level and that a query costs 1 token, which is the key completeness signal here. It could say more about failure modes (unknown location, missing indicator) but covers the essentials for a 6-param, all-optional read tool.

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

Parameters3/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 year, teryt formats, yearFrom/yearTo, category enum, and location precedence — the description largely restates this. It adds only the pointer that teryt codes are obtainable from list_locations and the note that derived metrics exist. Baseline 3 is appropriate when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: local statistics for a Polish location from GUS BDL, with concrete scope (~50 indicators across 11 named categories) and derived metrics. It clearly delimits what is addressable (locations/teryt, not neighborhoods). It does not explicitly contrast itself with siblings like compare_locations or get_price_statistics, so it stops short of a 5.

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

Usage Guidelines4/5

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

Gives clear usage context: address by location name or teryt, teryt codes come from list_locations, and neighborhoods/osiedla are explicitly NOT addressable — a real exclusion. It also notes teryt wins over location when both are supplied. It lacks explicit routing guidance against sibling tools that overlap (e.g., get_price_statistics, get_market_overview).

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