Skip to main content
Glama
cenogram

cenogram-mcp-server

Official
by cenogram

get_demographics

Read-only

Fetch demographic, economic, housing, and other local statistics for a Polish location. Uses location name or TERYT code to return data from GUS BDL, covering ~50 indicators across 11 categories.

Instructions

Demographic, economic, housing and other local statistics for a Polish location, from GUS BDL (Bank Danych Lokalnych) — Poland's public Central Statistical Office open-data bank. ~50 indicators across 11 categories (population, economy, housing, spatial planning, infrastructure, environment, safety, education, prices) plus a few derived metrics. Address by location (city/county name) OR teryt. A name resolves to county/powiat (4-digit) level; for richer gmina/district-level data (L6) pass a 6 or 7-digit teryt. teryt wins when both are given. Use list_locations to find TERYT codes — neighborhoods/osiedla are NOT addressable here. A query returns the requested level PLUS all parent levels (a gmina query also yields powiat, NUTS3 region and voivodeship indicators). Optional year, or yearFrom+yearTo for a time series, and category to filter. Cost: 1 token.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
yearNoSingle year (2003-present). Mutually exclusive with yearFrom/yearTo. Omit for the latest available year per indicator.
terytNoTERYT 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.
yearToNoEnd year for a time series (max current year + 1).
categoryNoFilter to these categories. Omit to return all available.
locationNoCity/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.
yearFromNoStart year for a time series (min 2003).
Behavior5/5

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

The description adds behavioral traits beyond annotations, such as returning all parent levels (gmina query also yields powiat, NUTS3, voivodeship), cost of 1 token, and the default behavior of omitting year for latest data. Annotations already declare readOnlyHint=true, which the description aligns with, and there is no contradiction.

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 well-structured and front-loaded with the main purpose. It uses clear paragraphs and introduces technical details (L6, NUTS3) appropriately. However, it is slightly verbose with the full list of categories; while informative, it could be more concise. Still, every sentence adds value.

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?

Given the complexity (6 parameters, no output schema, hierarchical location resolution), the description covers the key aspects: data coverage, addressing, behavior, and optional filters. It references sibling tool list_locations. However, it lacks explicit description of the output format (e.g., structure of returned data), which would be helpful for an AI agent.

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%, but the description adds significant meaning beyond schema descriptions. It explains mutual exclusivity of year with yearFrom/yearTo, the resolution levels for teryt (voivodeship, county, gmina), and that location resolves to county level unless a 6/7-digit teryt is given. This context greatly aids parameter understanding.

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 clearly states the tool retrieves demographic, economic, housing and other local statistics for Polish locations from GUS BDL. It specifies the data source, coverage (~50 indicators across 11 categories), and the addressing methods (location name or TERYT code). This distinguishes it from sibling tools like search_transactions or get_market_overview.

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?

The description provides explicit guidance on when to use location vs teryt, the resolution levels (county vs gmina), and that neighborhoods are not addressable. It explains the behavior when both parameters are given (teryt wins), the optional year/category filtering, and recommends list_locations to find TERYT codes. It also notes the cost of 1 token.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cenogram/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server