Skip to main content
Glama

Cenogram - Polish Real Estate Data

Server Details

7M+ real estate transactions from Poland's RCN registry. Search, compare, and analyze prices.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.2/5 across 13 of 13 tools scored. Lowest: 3.5/5.

Server CoherenceA
Disambiguation5/5

Each tool serves a unique purpose: location browsing, transaction search by various criteria, price statistics, comparisons, and derived metrics like spread and yield. No two tools have overlapping functionality; even search_transactions and search_by_area/polygon differ in how they target locations (admin boundaries vs. geographic shapes).

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case: get_, list_, search_, compare_. The naming clearly indicates the action and the object (e.g., list_locations, get_price_statistics, search_transactions). There are no mixed conventions or vague verbs.

Tool Count5/5

With 13 tools, the set is well-scoped for a Polish real estate data API. It covers overview, price analysis, location browsing, and geospatial search without being bloated or sparse. Each tool earns its place by providing necessary functionality for querying and analyzing the data.

Completeness5/5

The tool surface is comprehensive for the domain: it includes market overview, price distribution, statistics, spreads, rental yields, location hierarchy browsing, and multiple transaction search methods (by admin region, geographic area, polygon, parcel). No obvious gaps are present for typical real estate data queries.

Available Tools

13 tools
compare_locationsA
Read-only
Inspect

Compare real estate statistics across multiple locations side-by-side. Provide 2-5 district names to compare median price/m², average area, and transaction counts. Use list_locations first to find valid location names. Requires at least one filter besides districts (e.g., propertyType). Example: compare Mokotów, Wola, Ursynów for apartments. Note: median/average prices are market-based — fractional ownership shares and non-market deeds (public tenders, foreclosures, privileged/subsidized sales) are excluded from price aggregates. Transaction counts and coverage stay complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
roomsNoNumber 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.
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 to compare (2-5, must be unique). E.g. 'Mokotów,Wola,Ursynów'
marketTypeNoMarket type filter
buildingTypeNoBuilding type filter (PKOB classification)
propertyTypeNoProperty type filter (recommended - API requires at least one filter)
unitFunctionNoUnit/apartment function filter
mpzpDesignationNoMPZP zoning designation prefix filter (e.g. 'terenRolniczy', 'budownictwoMieszkanioweJednorodzinne', 'budownictwoMieszkanioweWielorodzinne')
transactionTypeNoTransaction type filter. For market analysis, ALWAYS specify to exclude non-market transactions.
Behavior4/5

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

While annotations declare readOnlyHint=true, the description adds valuable behavioral context: it specifies the comparison yields three specific metrics (median price/m², average area, transaction counts) and discloses the API constraint requiring additional filters beyond districts. This goes beyond basic safety profiling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured across five sentences: purpose statement, input specification, workflow prerequisite, API constraint, and concrete example. Every sentence earns its place without redundancy.

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 a 10-parameter tool with no output schema, the description adequately covers input requirements, workflow dependencies, and previews the returned data dimensions. It could marginally improve by specifying the output structure format, but the metric enumeration provides sufficient context for invocation.

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?

Despite 100% schema description coverage (baseline 3), the description adds critical semantic constraints not in the schema: the '2-5' district count limit (schema only enforces minLength: 1) and a concrete formatting example ('Mokotów,Wola,Ursynów') that clarifies the comma-separated syntax.

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 ('Compare') and resource ('real estate statistics'), clarifies the comparison is 'side-by-side' across 'multiple locations', and specifies the exact metrics returned (median price/m², average area, transaction counts). This effectively distinguishes it from sibling tools like get_price_statistics or search_transactions.

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?

Provides explicit prerequisites ('Use list_locations first to find valid location names'), input constraints ('Provide 2-5 district names'), and API requirements ('Requires at least one filter besides districts'). However, it does not explicitly contrast when to use this versus siblings like get_price_statistics for single-location analysis.

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

get_market_overviewA
Read-only
Inspect

Get a comprehensive overview of the Polish real estate transaction database. Returns: total transaction count, date range, breakdown by property type and market type, top locations, price statistics. Note: data quality varies by field - marketType is unknown for ~55% of records, transaction_date missing for ~1.7%. Note: median/average prices are market-based — fractional ownership shares and non-market deeds (public tenders, foreclosures, privileged/subsidized sales) are excluded from price aggregates. Transaction counts and coverage stay complete.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds valuable behavioral context by enumerating the specific return values (total count, date range, breakdowns) since no output schema exists, but omits other traits like pagination or caching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of exactly two efficient sentences with zero redundancy. The first sentence front-loads the core purpose, and the second efficiently lists return values using a colon-separated format.

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 tool has no parameters and no output schema, the description adequately compensates by detailing the return payload. It successfully communicates what data the agent will receive, though it could briefly clarify the geographic/temporal scope of the overview.

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?

The input schema contains zero parameters. Per the rubric, 0-parameter tools receive a baseline score of 4, as there are no parameter semantics to describe.

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?

The description clearly states the action ('Get') and specific resource ('Polish real estate transaction database'), with 'comprehensive overview' distinguishing it from sibling search and comparison tools. The return value list further clarifies the scope.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus siblings like 'get_price_statistics' or 'search_transactions'. It lists what it returns but doesn't advise users to use it for high-level market analysis before drilling down.

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

get_price_distributionA
Read-only
Inspect

Get price distribution histogram showing how many transactions fall into each price range. Useful for understanding the overall market price structure in Poland. Note: median/average prices are market-based — fractional ownership shares and non-market deeds (public tenders, foreclosures, privileged/subsidized sales) are excluded from price aggregates. Transaction counts and coverage stay complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
binsNoNumber of price bins (5-50, default 20)
maxPriceNoMaximum price to include (default 3,000,000 PLN)
Behavior3/5

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

Annotations declare readOnlyHint=true, confirming safe read access. The description adds valuable behavioral context not found in structured fields: the geographic scope ('Poland') and the aggregation method (binning transactions into price ranges). It does not describe output format details or pagination, but 'histogram' implies the return structure adequately given the tool's simplicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two well-structured sentences with zero waste. The first sentence front-loads the core action and output format; the second provides usage context. Every word earns its place.

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 simple 2-parameter schema (100% coverage), readOnly annotation, and lack of output schema, the description provides sufficient context by specifying the geographic market (Poland) and output type (histogram). It appropriately compensates for missing output schema by indicating the histogram nature of returned data.

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?

With 100% schema description coverage, the baseline is 3. The description does not explicitly discuss the bins or maxPrice parameters, but the mention of 'histogram' and 'price range' implicitly contextualizes the binning concept without duplicating schema details.

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?

The description clearly states the tool retrieves a 'price distribution histogram' with specific aggregation ('how many transactions fall into each price range'), which distinguishes it from sibling tools like get_price_statistics (likely summary stats) and search_transactions (individual records). However, it does not explicitly contrast with these siblings by name.

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

Usage Guidelines3/5

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

Provides positive usage context ('Useful for understanding the overall market price structure in Poland') indicating when to use the tool. However, it lacks negative guidance (when not to use) or explicit references to alternatives like get_price_statistics for non-distribution analysis.

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

get_price_spreadA
Read-only
Inspect

Measure the asking-vs-transaction price spread for a Polish city or county: how far the median asking price per m² of apartments for sale sits above (or below) the median apartment transaction price per m² from the RCN registry. spread_pct = (asking − transaction) / transaction × 100. The spread can be NEGATIVE (asking below transaction) in premium-secondary cities — that is a valid answer, not an error. Address by location (city name → resolves to a county) OR teryt (4-digit county code; teryt wins when both are given). Both sides need at least 5 samples or the result is suppressed. Sale offers are a MIX of primary and secondary market, so the transaction denominator defaults to the whole market ('all'). Override with marketType to compare against a single segment. Not comparable across cities with different as_of dates (RCN publication lag varies by county). Asking and transaction prices come from different sources, so the spread is an approximation. Coverage is limited to the cities with asking-sale data — call list_price_spread_locations for the full catalog of covered locations instead of guessing names. Optional areaBucket restricts both sides to an apartment area range in m2 (e.g. '40-50'). Area ranges are NOT additive — a bucket does not sum back to 'all'. The transaction-price denominator uses the market median. Note: median/average prices are market-based — fractional ownership shares and non-market deeds (public tenders, foreclosures, privileged/subsidized sales) are excluded from price aggregates. Transaction counts and coverage stay complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
terytNoTERYT county code (4 digits, e.g. 1465 = Warszawa). Longer codes (gmina/precinct) are truncated to the county. Wins over location when both are provided.
locationNoCity name, resolves to a county (e.g. 'Warszawa', 'Kraków', 'Gdańsk'). Use this OR teryt.
areaBucketNoApartment area range in m2: all (default, whole stock), 0-30, 30-40, 40-50, 50-60, 60-80, 80+. Bucket values are not additive.
marketTypeNoTransaction denominator segment: 'all' (default, composition-matched to mixed sale offers), 'secondary', or 'primary'.
Behavior5/5

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

Annotations indicate readOnlyHint=true; description adds transparency: spread can be negative, minimum 5 samples required, mixed sale offers, different data sources, area buckets not additive, exclusion of fractional shares. No contradictions.

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?

Description is relatively long but well-structured and front-loaded. Every sentence adds important detail. Could be slightly more concise, but no fluff.

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?

Given 4 parameters, no output schema, and only readOnly annotation, the description is remarkably complete. Covers edge cases, constraints, and references sibling tool. Provides sufficient context for proper usage.

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 covers 100% of parameters with descriptions. The tool description enriches with context (teryt wins over location, areaBucket not additive, marketType defaults to 'all') but schema already provides baseline. Still adds significant value.

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?

Clearly defines the tool as measuring asking-vs-transaction price spread for Polish cities/counties. Provides formula and explains negative spread. Distinguishes from siblings by referencing list_price_spread_locations for coverage.

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?

Explicitly states when to use this tool (measure spread) and when not to (not comparable across different as_of dates). Points to sibling tool for location catalog. Provides clear parameter guidance (teryt vs location, marketType, areaBucket).

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

get_price_statisticsA
Read-only
Inspect

Get price per m² statistics by location for residential apartments in Poland. Note: only covers residential units (lokale mieszkalne). For other property types, use search_transactions. 'Warszawa'/'Kraków'/'Łódź' auto-expand to all sub-districts (Warszawa=19, Kraków=5, Łódź=6). Other names use partial match. Data quality: based on transaction prices from notarial deeds, not asking/listing prices. Coverage varies by county (some have data gaps of 5+ years). Note: median/average prices are market-based — fractional ownership shares and non-market deeds (public tenders, foreclosures, privileged/subsidized sales) are excluded from price aggregates. Transaction counts and coverage stay complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationNoFilter by location name. 'Warszawa'/'Kraków'/'Łódź' auto-expand to all sub-districts. Other names use case-insensitive partial match (e.g. 'Wrocł' matches 'Wrocław'). Omit for all Poland.
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds crucial behavioral context: geographic limitation (Poland only), property type restriction (residential only), and the Warsaw-specific naming quirk where city-level queries fail. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero waste. Purpose front-loaded in sentence 1. Sentence 2 scopes usage and names alternative. Sentence 3 provides specific parameter guidance for Warsaw. Every sentence earns its place.

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?

Adequate for a single-parameter tool. Despite lacking output schema, description sufficiently indicates return value type (price per m² statistics). Missing minor details like specific statistical measures returned (mean, median, etc.), but complete enough for agent selection.

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 has 100% coverage with good parameter description. Description adds valuable domain-specific usage guidance: the Warsaw district naming convention (Mokotów/Wola vs Warszawa) and reinforces the partial matching behavior with concrete examples, preventing common query errors.

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?

Specific verb 'Get' + resource 'price per m² statistics' + scope 'residential apartments in Poland'. Explicitly distinguishes from sibling 'search_transactions' by stating it only covers residential units vs. other property types.

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?

Explicitly names alternative tool 'search_transactions' for other property types. Provides critical usage constraint for Warsaw requiring district names (Mokotów, Wola) rather than 'Warszawa'. Could explicitly state when to prefer this over 'get_price_distribution' or 'compare_locations'.

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

get_rental_yieldA
Read-only
Inspect

Estimate the gross rental yield for a Polish city or county: annualized median asking rent (PLN/m²/month × 12) divided by the median apartment transaction price per m² (secondary market) from the RCN registry. Gross and top-line only — excludes vacancy, management, tax and maintenance. Indicative, not investment advice. Address by location (city name → resolves to a county) OR teryt (4-digit county code; teryt wins when both are given). Both sides need at least 5 samples or the result is suppressed. Not comparable across cities with different as_of dates (RCN publication lag varies by county). Rent and transaction prices come from different sources, so the yield is an approximation. Coverage is limited to the cities with asking-rent data — call list_rental_yield_locations for the full catalog of covered locations instead of guessing names. Optional areaBucket restricts both sides to an apartment area range in m2 (e.g. '40-50'). Area ranges are NOT additive — a bucket does not sum back to 'all'. The transaction-price denominator uses the market median. Note: median/average prices are market-based — fractional ownership shares and non-market deeds (public tenders, foreclosures, privileged/subsidized sales) are excluded from price aggregates. Transaction counts and coverage stay complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
terytNoTERYT county code (4 digits, e.g. 1465 = Warszawa). Longer codes (gmina/precinct) are truncated to the county. Wins over location when both are provided.
locationNoCity name, resolves to a county (e.g. 'Warszawa', 'Kraków', 'Gdańsk'). Use this OR teryt.
areaBucketNoApartment area range in m2: all (default, whole stock), 0-30, 30-40, 40-50, 50-60, 60-80, 80+. Bucket values are not additive.
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds value by detailing data sources, approximation nature, sample size requirement, and that it excludes costs. 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?

Description is thorough but not overly verbose; well-organized with purpose first, then constraints, then parameter notes. Each sentence adds value, though slightly long.

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?

No output schema exists; description compensates by explaining the formula and suppression condition. Covers return format, limitations, and sample requirement. Adequate for a read-only estimator.

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% with good descriptions. Description adds nuance: teryt wins over location, longer codes truncated, area buckets are not additive. Enhances understanding beyond schema.

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 explicitly states the tool estimates gross rental yield for Polish cities/counties, defines the formula, and distinguishes from sibling tools like list_rental_yield_locations by referencing it for location catalog.

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?

Provides clear context on when to use (for yield estimates), how to specify location via city or teryt, warns about non-comparability across dates and coverage limitations, and mentions alternative tool for listing locations. Lacks explicit 'when not to use' but implies via exclusions.

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

list_locationsA
Read-only
Inspect

Browse locations in two modes:

  1. TERYT hierarchy (parent param): Navigate voivodeship → county → municipality → precinct. Returns TERYT codes for use in search_transactions(teryt=...).

    • No parent: 16 voivodeships (2-digit codes)

    • 2-digit: counties (4-digit), 4-digit: municipalities (6-digit), 6-digit: precincts

  2. Name search (search param): Find districts by name (flat list, legacy). If both provided, parent takes precedence. Use 'location' for quick city searches, 'teryt' for precise administrative filtering (avoids name ambiguity, e.g. 'Wałcz' is both a county and a municipality).

ParametersJSON Schema
NameRequiredDescriptionDefault
parentNoTERYT parent code to browse children. 2-digit (voivodeship → counties), 4-digit (county → municipalities), 6-digit (municipality → precincts). Omit for all voivodeships.
searchNoFilter locations by name (case-insensitive partial match, e.g. 'Krak' for Kraków districts). Ignored when parent is set.
Behavior4/5

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

While annotations declare readOnlyHint=true, the description adds crucial behavioral context about return granularity—specifically that Warsaw returns districts (Mokotów, Wola) rather than 'Warszawa', and Kraków returns sub-districts—helping the agent predict return structure without an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, all earning their place: core purpose, general behavior rule, two specific city examples that prevent confusion, and usage guidance. Front-loaded with the essential verb-resource pair.

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 a simple single-parameter tool without output schema, the description compensates well with concrete return value examples (district names). Could be improved by explicitly stating the return type (array of location objects), but the behavioral examples provide sufficient predictability.

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?

With 100% schema description coverage for the 'search' parameter, the baseline is met. The description mentions using the parameter 'to filter by name' but adds minimal semantic value beyond what the schema already documents.

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 the specific verb 'List' and clear resource 'available locations (cities and districts)', distinguishing it from sibling search tools (search_transactions, search_parcels) that return properties rather than administrative locations.

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?

It provides clear context about what the tool returns (administrative districts vs. city names) with specific city examples, helping the agent understand when to use it for location discovery. However, it lacks explicit guidance on when NOT to use it or direct comparison to sibling tools like compare_locations.

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

list_price_spread_locationsA
Read-only
Inspect

List the cities/counties for which get_price_spread can return data (asking-sale coverage). Use this to discover valid location/teryt values for get_price_spread instead of guessing names. Each entry is coverage signal only (sale offer sample size + confidence) — it does not compute the spread; call get_price_spread(location|teryt) for the actual spread. Optional search filters by city name (diacritic-insensitive substring, min 2 chars). Results are sorted by asking_sample_n descending. Free (0 credits).

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter by city name (diacritic-insensitive substring, min 2 chars). E.g. 'gda' → Gdańsk. Omit to list the full catalog.
Behavior5/5

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

The description discloses behavior beyond annotations: each entry is a coverage signal only, not the spread; search is diacritic-insensitive substring with min 2 chars; results sorted by asking_sample_n descending; free credits. No contradiction with readOnlyHint annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with no wasted words, using three sentences to cover purpose, usage, and behavioral details. It is well-structured and front-loaded with the core function.

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 no output schema, the description explains the nature of entries (coverage signal, sample size, confidence) and what the tool does not compute. It is sufficiently complete for a low-complexity tool with one optional parameter, though it could explicitly mention the return structure.

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?

The schema covers 100% of parameters with a description. The tool description adds value by repeating and elaborating on the search filter behavior (diacritic insensitivity, min length) and clarifying the effect of omitting the parameter (list full catalog).

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 lists cities/counties for which get_price_spread can return data, distinguishing it from siblings like get_price_spread itself. It specifies the resource (cities/counties) and the verb (list), and ties it to a specific sibling use case.

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 explicitly tells when to use this tool: to discover valid location/teryt values for get_price_spread instead of guessing. It also explains what the entries represent (coverage signals) and what they do not (actual spread), and mentions optional search filters and free usage.

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

list_rental_yield_locationsA
Read-only
Inspect

List the cities/counties for which get_rental_yield can return data (asking-rent coverage). Use this to discover valid location/teryt values for get_rental_yield instead of guessing names. Each entry is coverage signal only (offer sample size + confidence) — it does not compute the yield; call get_rental_yield(location|teryt) for the actual yield. Optional search filters by city name (diacritic-insensitive substring, min 2 chars). Results are sorted by rent_sample_n descending. Free (0 credits).

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter by city name (diacritic-insensitive substring, min 2 chars). E.g. 'gda' → Gdańsk. Omit to list the full catalog.
Behavior4/5

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

The description adds behavioral details beyond the readOnlyHint annotation, such as the tool being free (0 credits), results sorted by rent_sample_n descending, and the search being diacritic-insensitive substring with minimum 2 characters. It does not contradict annotations and provides useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three short paragraphs) and well-structured, with each sentence serving a distinct purpose: listing the tool's function, explaining what entries represent, and describing the optional search filter. No unnecessary words.

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?

Despite lacking an output schema, the description explains what each entry contains (coverage signal, sample size, confidence) and what it does not do (compute yield). It covers all necessary aspects for an agent to understand and use the tool effectively.

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?

The input schema covers the single parameter 'search' with a description, and the tool description adds an example ('gda' → Gdańsk) and clarifies the min length and diacritic-insensitive behavior. Since schema coverage is 100%, the description adds meaningful context beyond the schema.

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 explicitly states 'List the cities/counties for which get_rental_yield can return data', providing a specific verb ('list') and resource ('rental yield locations'). It distinguishes from siblings by clarifying this tool is for discovering valid location values for get_rental_yield, not for computing yields.

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?

The description advises using this tool to discover valid location/teryt values instead of guessing names, and clarifies that each entry is a coverage signal, not the yield itself. It also mentions the optional search filter and its behavior. While it does not explicitly state when not to use it, the guidance is clear and practical.

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

search_by_areaA
Read-only
Inspect

Search real estate transactions within a geographic radius. Best tool for neighborhood/osiedle searches (neighborhoods are not TERYT districts). Radius guide: 0.3-0.5 km for a street, 0.5-1 km for a neighborhood, 2-5 km for a city area. Example: apartments in Wrocław's Nowy Dwór (lat 51.143, lng 16.993, radiusKm=0.7). Area filters (minArea/maxArea) work for all propertyType values.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results (1-50, default 20)
roomsNoNumber 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.
dateToNoEnd date (YYYY-MM-DD)
maxAreaNoMaximum area in m²
minAreaNoMinimum area in m² (usable_area_m2 for units, parcel_area for land)
dateFromNoStart date (YYYY-MM-DD)
latitudeYesLatitude (Poland range: 49-55)
maxPriceNoMaximum price in PLN
minPriceNoMinimum price in PLN
radiusKmNoSearch radius in km (0.1-50, default 2). Use 0.5-1 for neighborhoods, 0.3-0.5 for streets.
longitudeYesLongitude (Poland range: 14-25)
marketTypeNoMarket type: primary (developer) or secondary (resale). ~55% of records have unknown market type and will be excluded when this filter is used.
buildingTypeNoBuilding type filter (PKOB classification)
propertyTypeNoProperty type filter
unitFunctionNoUnit/apartment function filter
transactionTypeNoTransaction type filter. For market analysis, ALWAYS specify to exclude non-market transactions.
Behavior3/5

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

The annotations declare readOnlyHint=true, indicating a safe read operation. The description adds valuable context about the geographic scope (radius) and provides a concrete coordinate example. However, it fails to mention the Poland-specific geographic constraints visible in the schema (lat 49-55, lng 14-25) or describe what data structure is returned, which would be helpful given the lack of an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of three highly efficient sentences: purpose declaration, input requirements, and concrete example. Every sentence earns its place without redundancy. The information is front-loaded with the core action, making it easy for an agent to quickly assess relevance.

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

Completeness3/5

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

Given the schema's richness (10 parameters including date ranges, price filters, property types, and market types), the description is minimally adequate but has clear gaps. It focuses exclusively on the geographic search mechanism while omitting any mention of the sophisticated filtering capabilities available, which limits an agent's understanding of the tool's full utility without examining the schema directly.

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?

With 100% schema description coverage, the schema fully documents all 10 parameters including their types, ranges, and purposes. The description mentions the three core geographic parameters (latitude, longitude, radius) and provides an example, but does not add significant semantic depth beyond what the schema already provides, which warrants the baseline score for high-coverage schemas.

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 specific action ('Search real estate transactions') and the unique scope ('within a geographic radius'). It effectively distinguishes itself from sibling tools like 'search_by_polygon' (which implies polygon geometry) and 'search_parcels' (different data type) through the explicit mention of radius-based searching.

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

Usage Guidelines3/5

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

The description provides an example usage scenario (Warsaw's Palace of Culture) that implicitly demonstrates when to use the tool—when you have a center point and distance. However, it lacks explicit guidance on when to choose this over 'search_by_polygon' (e.g., 'use this for circular areas, use search_by_polygon for irregular boundaries') or other search siblings.

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

search_by_polygonA
Read-only
Inspect

Search real estate transactions within a geographic polygon. Provide a GeoJSON Polygon geometry to search within a custom area. Returns transactions found inside the polygon with coordinates. Use for precise neighborhood/osiedle boundaries. Can estimate coordinates from search_by_area results. For quick searches, start with search_by_area instead. Coordinates are [longitude, latitude]. First and last point must be identical. Example: {"type":"Polygon","coordinates":[[[21.0,52.2],[21.01,52.2],[21.01,52.21],[21.0,52.21],[21.0,52.2]]]}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (1-5000, default 100). MCP displays up to 50 transactions.
roomsNoNumber 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.
dateToNoEnd date (YYYY-MM-DD)
streetNoStreet name filter (partial match)
maxAreaNoMaximum area in m²
minAreaNoMinimum area in m²
polygonYesGeoJSON Polygon geometry. Coordinates: [longitude, latitude] pairs. First and last point must be identical. Max 500 vertices total.
dateFromNoStart date (YYYY-MM-DD)
districtNoDistrict name filter
maxPriceNoMaximum price in PLN
minPriceNoMinimum price in PLN
marketTypeNoMarket type filter
buildingTypeNoBuilding type filter (PKOB classification)
propertyTypeNoProperty type filter
unitFunctionNoUnit/apartment function filter
mpzpDesignationNoMPZP zoning designation filter (exact match)
transactionTypeNoTransaction type filter. For market analysis, ALWAYS specify to exclude non-market transactions.
Behavior4/5

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

Beyond readOnlyHint=true annotation, description adds crucial behavioral details: return value description ('Returns transactions found inside...'), coordinate ordering constraint ('[longitude, latitude]'), polygon closure requirement ('First and last point must be identical'), and a concrete JSON example.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Seven sentences covering purpose, input mechanism, output, usage context, technical constraints, and example. No redundancy; every sentence provides distinct value. Well front-loaded with the core purpose.

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 a complex 12-parameter spatial tool with nested objects and no output schema, description adequately covers the critical complexity (GeoJSON format requirements, coordinate system) and describes return values. Minor gap: doesn't mention result limits or error behavior for invalid geometries.

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?

Despite 100% schema coverage (baseline 3), description adds essential semantic context for the complex nested polygon parameter: coordinate order, closure constraint, and a complete working example that clarifies the expected data structure beyond the raw schema.

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?

Description opens with specific verb 'Search' and clear resource 'real estate transactions within a geographic polygon.' The GeoJSON specificity distinguishes it from sibling tools like search_by_area or search_transactions.

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?

Provides clear positive guidance: 'Use for precise area searches (neighborhoods, streets, custom regions).' However, lacks explicit contrast with siblings (e.g., when to use search_by_area vs this polygon search).

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

search_parcelsA
Read-only
Inspect

Search for land parcels by parcel ID prefix (autocomplete). Returns matching parcels with their district, area, and GPS coordinates. Useful for finding exact parcel IDs, then searching transactions nearby. Example: search for parcels starting with '146518_8.01'.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesParcel ID prefix to search for (min 3 chars). E.g. '146518_8.01'
limitNoMax results (1-10, default 10)
Behavior4/5

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

Discloses return payload structure ('district, area, and GPS coordinates') which compensates for missing output schema. Clarifies autocomplete behavior pattern. Annotations declare readOnlyHint=true, and description confirms safety through 'Search' semantics without contradicting the read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences with logical progression: purpose → return values → usage context → concrete example. Zero redundancy. Front-loaded with action and resource, with every sentence delivering distinct value (mechanism, payload, workflow, syntax).

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?

Given simple 2-parameter schema and lack of output schema, description achieves completeness by detailing return fields (district, area, GPS) and explaining the autocomplete interaction pattern. Sufficient for agent to invoke confidently without surprises.

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% with complete descriptions for both 'q' (prefix) and 'limit'. Description reinforces parameter usage through concrete example ('146518_8.01') matching schema pattern, but does not add substantial semantic layer beyond well-documented schema fields.

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?

Description opens with specific verb 'Search', identifies resource 'land parcels', and specifies unique mechanism 'parcel ID prefix (autocomplete)'. Clearly distinguishes from siblings like search_by_area and search_transactions through the prefix/autocomplete focus and explicit mention of workflow transitioning to transaction searches.

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?

Provides explicit workflow guidance ('Useful for finding exact parcel IDs, then searching transactions nearby') that clarifies the two-step process with sibling search_transactions. Lacks explicit 'when not to use' guidance comparing geographic search alternatives (search_by_area, search_by_polygon), though the prefix focus provides implicit differentiation.

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

search_transactionsA
Read-only
Inspect

Search Polish real estate transactions from the national RCN registry (8M+ records). Returns transaction details: address, date, price, area, price/m², property type. Use list_locations first to find valid location names. Example: search for apartments in Mokotów sold in 2024 above 500,000 PLN. Data notes: marketType is NULL for ~55% of records (notary didn't classify) - filtering by marketType excludes them. ~1.7% of records have no transaction_date. Location matches TERYT districts only - for neighborhoods (osiedla), use search_by_area instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
sortNoSort by field (default: date)date
limitNoNumber of results (1-50, default 10)
orderNoSort order (default: desc)desc
roomsNoNumber 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.
terytNoTERYT administrative code(s) for precise area filtering. Comma-separated, max 10. 2-digit (voivodeship), 4-digit (county), 6-digit (municipality), or full precinct code (e.g. '321705_2.0054'). Use list_locations to find codes. More precise than 'location' - avoids name ambiguity.
dateToNoEnd date (YYYY-MM-DD)
streetNoStreet name filter (partial match, e.g. 'Puławska', 'Trakt Lubelski')
maxAreaNoMaximum area in m²
minAreaNoMinimum area in m²
dateFromNoStart date (YYYY-MM-DD)
locationNoLocation name - city (e.g. 'Warszawa', 'Kraków', 'Gdańsk') or district (e.g. 'Mokotów', 'Kraków-Podgórze'). 'Warszawa', 'Kraków', 'Łódź' auto-expand to all sub-districts. Use list_locations to find valid names.
maxPriceNoMaximum price in PLN
minPriceNoMinimum price in PLN
parcelIdNoExact parcel ID as returned in search results (e.g. '146518_8.0108.27'). Must match exactly - copy from a previous search result's parcel_id field.
marketTypeNoMarket type: primary (developer) or secondary (resale). ~55% of records have unknown market type and will be excluded when this filter is used.
buildingTypeNoBuilding type filter (PKOB classification)
propertyTypeNoProperty type filter
unitFunctionNoUnit/apartment function filter
buildingNumberNoBuilding/house number (e.g. '251C', '12A'). Requires location or street to be set.
mpzpDesignationNoMPZP zoning designation filter (exact match, e.g. 'budownictwoMieszkanioweWielorodzinne', 'terenObiektowProdukcyjnychSkladowIMagazynow')
transactionTypeNoTransaction type filter. For market analysis, ALWAYS specify transactionType to exclude non-market transactions (subsidized, foreclosure, public purpose). ~2% of transactions have unknown type (NULL) and are excluded when this filter is used unless 'unknown' is included.
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds valuable context: data source (RCN registry), dataset scale (7M+ records), and specific return fields (address, date, price, area, price/m², property type). Could improve by mentioning pagination behavior or result format details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, zero waste: (1) purpose and source, (2) return values, (3) prerequisite instruction, (4) example. Information is front-loaded and efficiently structured.

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 a 16-parameter search tool with no output schema, the description adequately compensates by listing returned fields. Missing explicit details on pagination behavior or response structure, but the example and field list provide sufficient context for invocation.

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 has 100% description coverage, establishing baseline 3. Description adds minimal parameter semantics beyond schema, though it reinforces the location parameter workflow ('Use list_locations first') and illustrates filter combinations through the example.

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?

Description explicitly states the tool searches 'Polish real estate transactions from the national RCN registry' with specific scope (7M+ records). It clearly distinguishes from siblings by focusing on transaction search vs. comparison (compare_locations), statistics (get_price_statistics), or geographic searches (search_by_polygon, search_by_area).

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?

Provides explicit prerequisite workflow: 'Use list_locations first to find valid location names.' Includes concrete usage example. Does not explicitly contrast with alternative search methods (search_by_area vs. this) or state when NOT to use it.

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

Discussions

No comments yet. Be the first to start the discussion!

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources