Skip to main content
Glama

Cubi Estate

Compare what a budget buys

compare_inventory
Read-only

What a budget buys in 2-3 towns or cities: the share of each place's active listings within the price cap, and optionally also with parking.

Use when the user compares places by what they can afford ("2-bed flats
up to 300k in Porto or Valencia", "and with parking?"). For each place it
counts the cohort (type, sale, bedrooms), the part within `max_price`,
and, with `has_parking`, the part within budget whose listing mentions
parking. `share_pct` is that part over the place's priced cohort.

Relay the SHARES, not the counts: counts reflect how many listings Cubi
holds for each place, not the size of the market. These are asking
prices of active listings, not sale prices or valuations; say so. A
place is counted at the level in `level` (a city when the name has a city
reading). Never compute or invent a figure that is not in the result.

Args:
    places: 2-3 town or city names, e.g. ["Porto", "Valencia"].
    type: property types, e.g. ["apartment"].
    transaction_type: "sale" (default). Rental budgets are not supported.
    min_bedrooms / max_bedrooms: bedroom bounds (equal for "exactly 2").
    max_price: asking-price cap in EUR.
    has_parking: also count the budget cohort with parking mentioned.
    lang: ISO 639-1 code for the sample listings (en/pt/es/fr/de/nl/ru).

Returns:
    JSON: places[{place, level, base, within_budget, with_parking, listings}],
    each cohort {count, priced, on_request, share_pct}; `listings` are up
    to 3 homes from the last cohort counted, for "show me those".

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "places": "<places>"
    },
    "name": "compare_inventory"
  }
}

Input Schema

NameRequiredDescriptionDefault
langNoISO 639-1 code for the sample listings (en/pt/es/fr/de/nl/ru).en
typeNoproperty types, e.g. ["apartment"].
placesYes2-3 town or city names, e.g. ["Porto", "Valencia"].
max_priceNoasking-price cap in EUR.
has_parkingNoalso count the budget cohort with parking mentioned.
max_bedroomsNobedroom bounds (equal for "exactly 2").
min_bedroomsNobedroom bounds (equal for "exactly 2").
transaction_typeNo"sale" (default). Rental budgets are not supported.sale

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / properties / has_parking / description
      Added value: +"also count the budget cohort with parking mentioned."
    • addedInput schema / properties / lang / description
      Added value: +"ISO 639-1 code for the sample listings (en/pt/es/fr/de/nl/ru)."
    • addedInput schema / properties / max_bedrooms / description
      Added value: +"bedroom bounds (equal for \"exactly 2\")."
    • addedInput schema / properties / max_price / description
      Added value: +"asking-price cap in EUR."
    • addedInput schema / properties / min_bedrooms / description
      Added value: +"bedroom bounds (equal for \"exactly 2\")."
    • addedInput schema / properties / places / description
      Added value: +"2-3 town or city names, e.g. [\"Porto\", \"Valencia\"]."
    • addedInput schema / properties / transaction_type / description
      Added value: +"\"sale\" (default). Rental budgets are not supported."
    • addedInput schema / properties / type / description
      Added value: +"property types, e.g. [\"apartment\"]."
  2. Added

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations, it discloses data-quality behavior that materially affects how results are reported: counts reflect Cubi's inventory, not market size; values are asking prices, not sale prices or valuations, and must be labeled as such; places are resolved at the `level` reading; and no figure may be computed that is absent from the result. These are non-obvious constraints an agent could easily violate without the text.

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 prose is front-loaded — what it does, when to use it, how the numbers are computed, then the reporting caveats — and every sentence carries information. The Args block largely restates field descriptions already at 100% schema coverage, and the Returns section duplicates the output schema, which is a modest amount of redundancy in an otherwise tight definition.

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?

For an 8-parameter comparison tool with an output schema, the description covers the input contract, the cohort arithmetic, the meaning of share_pct, the sample `listings` payload used for 'show me those' follow-ups, and the caveats that keep the agent from overstating the data. Nothing essential for correct invocation or correct reporting is missing.

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 most parameter meaning is already structured, but the description adds the 2-3 place cardinality limit (absent from the schema, which has no minItems/maxItems) and explains how the parameters compose into cohorts: within `max_price`, then optionally filtered by `has_parking` mention, with `share_pct` defined as that part over the priced cohort. That composition logic is not derivable from the individual field descriptions alone.

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 names a specific operation — counting, for each of 2-3 places, the share of active listings within a price cap and optionally with parking. A reader can distinguish it from listing-search tools because it returns per-place cohort shares rather than listings. It stops short of naming a contrasting sibling such as compare_asking_prices, so the differentiation is by output shape rather than explicit routing.

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 gives an explicit trigger with realistic user phrasings ('2-bed flats up to 300k in Porto or Valencia', 'and with parking?') and states that rental budgets are unsupported, which rules out a misuse case. It also instructs relay of shares over counts. No sibling alternative is named for cases where the agent actually wants raw listings or price levels.

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