Skip to main content
Glama

chathome.lu — Luxembourg Real Estate

Get Price Estimate

get_price_estimate
Read-onlyIdempotent

AI-powered price estimate for a Luxembourg property. The chathome valuation model is trained and backtested on historical property listing asking prices, not deed-level sales. Returns an estimated price, confidence interval, and comparable listing statistics.

Input Schema

NameRequiredDescriptionDefault
floorNo
roomsNo
localeNoResponse locale: en, fr, de, lu (Luxembourgish), pt (default: en; 'lb' is a deprecated alias for 'lu')
streetNo
areaSqmYesLiving area for homes; plot area for land, in m². For land, an explicitly supplied landAreaSqm takes precedence.
communeYes
glazingNo
hasLiftNo
hasPoolNo
heatingNo
bedroomsNo
districtNo
bathroomsNo
hasCellarNo
hasGarageNo
hasGardenNo
hasBalconyNo
hasParkingNo
hasTerraceNo
energyClassNo
isFurnishedNo
landAreaSqmNo
listingTypeYes
totalFloorsNo
parkingCountNo
propertyTypeYes
outdoorAreaSqmNo
renovationYearNo
constructionYearNo
buildingConditionNo
renovationMajorNeededNo
indoorParkingAvailableNo

Output Schema

NameRequiredDescriptionDefault
modeYes
trustYes
statusYes
areaSqmYes
communeYes
driversNo
areaUnitYes
currencyYes
priceUnitYes
confidenceNo
priceBasisYes
sampleSizeNo
assumptionsNo
limitationsYes
listingTypeYes
calculatedAtYes
propertyTypeYes
priceRangeLowNo
roughEstimateNo
schemaVersionYes
estimatedPriceNo
priceRangeHighNo
usedModelPriceNo
valuationBasisYes
pricePerSqmUnitYes
sourceObservedAtYes
locationPrecisionNo
priceRangeWideLowNo
transactionAnchorNo
locationResolutionYes
priceRangeCoverageNo
priceRangeWideHighNo
estimatedPricePerSqmNo
communeAverageAdvertsNo
clarificationQuestionsNo
priceRangeWideCoverageNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed75 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / areaSqm / description
      Previous value: -"Living area in square metres"New value: +"Living area for homes; plot area for land, in m². For land, an explicitly supplied landAreaSqm takes precedence."
    • removedInput schema / properties / areaSqm / exclusiveMinimum
      Removed value: -0
    • addedInput schema / properties / areaSqm / maximum
      Added value: +10000
    • addedInput schema / properties / areaSqm / minimum
      Added value: +1
    • addedInput schema / properties / bathrooms
      Added value: +{
      +  "maximum": 50,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • removedInput schema / properties / bedrooms / description
      Removed value: -"Number of bedrooms"
    • changedInput schema / properties / bedrooms / maximum
      Previous value: -9007199254740991New value: +50
    • addedInput schema / properties / buildingCondition
      Added value: +{
      +  "maxLength": 150,
      +  "minLength": 1,
      +  "pattern": "^[^\\u0000-\\u001f\\u007f]+$",
      +  "type": "string"
      +}
    • removedInput schema / properties / commune / description
      Removed value: -"Luxembourg commune name or slug, e.g. 'luxembourg', 'esch-sur-alzette'"
    • addedInput schema / properties / commune / maxLength
      Added value: +150
    • addedInput schema / properties / commune / pattern
      Added value: +"^[^\\u0000-\\u001f\\u007f]+$"
    • removedInput schema / properties / constructionYear / description
      Removed value: -"Year the property was built, e.g. 1995"
    • changedInput schema / properties / constructionYear / minimum
      Previous value: --9007199254740991New value: +1700
    • addedInput schema / properties / district
      Added value: +{
      +  "maxLength": 150,
      +  "minLength": 1,
      +  "pattern": "^[^\\u0000-\\u001f\\u007f]+$",
      +  "type": "string"
      +}
    • removedInput schema / properties / energyClass / description
      Removed value: -"Energy performance certificate class, e.g. 'A', 'B', 'C'"
    • addedInput schema / properties / energyClass / enum
      Added value: +[
      +  "A+",
      +  "A",
      +  "B",
      +  "C",
      +  "D",
      +  "E",
      +  "F",
      +  "G",
      +  "H",
      +  "I"
      +]
    • addedInput schema / properties / floor
      Added value: +{
      +  "maximum": 100,
      +  "minimum": -10,
      +  "type": "integer"
      +}
    • addedInput schema / properties / glazing
      Added value: +{
      +  "enum": [
      +    "single",
      +    "double",
      +    "triple"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / hasBalcony
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / hasCellar
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / hasGarage
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / hasGarden
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / hasLift
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / hasParking
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / hasPool
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / hasTerrace
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / heating
      Added value: +{
      +  "maxLength": 150,
      +  "minLength": 1,
      +  "pattern": "^[^\\u0000-\\u001f\\u007f]+$",
      +  "type": "string"
      +}
    • addedInput schema / properties / indoorParkingAvailable
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / isFurnished
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / landAreaSqm
      Added value: +{
      +  "maximum": 100000,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • removedInput schema / properties / listingType / description
      Removed value: -"Whether the property is for rent or sale"
    • addedInput schema / properties / locale
      Added value: +{
      +  "description": "Response locale: en, fr, de, lu (Luxembourgish), pt (default: en; 'lb' is a deprecated alias for 'lu')",
      +  "enum": [
      +    "en",
      +    "fr",
      +    "de",
      +    "lu",
      +    "pt",
      +    "lb"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / outdoorAreaSqm
      Added value: +{
      +  "maximum": 100000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / parkingCount
      Added value: +{
      +  "maximum": 100,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • removedInput schema / properties / propertyType / description
      Removed value: -"Property type, e.g. 'apartment', 'house', 'studio', 'penthouse'"
    • addedInput schema / properties / propertyType / enum
      Added value: +[
      +  "apartment",
      +  "house",
      +  "studio",
      +  "land"
      +]
    • removedInput schema / properties / propertyType / minLength
      Removed value: -1
    • addedInput schema / properties / renovationMajorNeeded
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / renovationYear
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": 1700,
      +  "type": "integer"
      +}
    • addedInput schema / properties / rooms
      Added value: +{
      +  "maximum": 100,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / street
      Added value: +{
      +  "maxLength": 150,
      +  "minLength": 1,
      +  "pattern": "^[^\\u0000-\\u001f\\u007f]+$",
      +  "type": "string"
      +}
    • addedInput schema / properties / totalFloors
      Added value: +{
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "propertyType",
      -  "listingType",
      -  "commune",
      -  "areaSqm"
      -]New value: +[
      +  "commune",
      +  "propertyType",
      +  "listingType",
      +  "areaSqm"
      +]
    • addedOutput schema / properties / areaUnit
      Added value: +{
      +  "const": "m2",
      +  "type": "string"
      +}
    • addedOutput schema / properties / assumptions
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {},
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / calculatedAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / clarificationQuestions
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {},
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / communeAverageAdverts
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / confidence
      Added value: +{
      +  "enum": [
      +    "low",
      +    "medium",
      +    "high"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / currency
      Added value: +{
      +  "const": "EUR",
      +  "type": "string"
      +}
    • addedOutput schema / properties / drivers
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {},
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / estimatedPricePerSqm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / limitations
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / locationPrecision
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / locationResolution
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {},
      +  "type": "object"
      +}
    • addedOutput schema / properties / mode
      Added value: +{
      +  "const": "report",
      +  "type": "string"
      +}
    • addedOutput schema / properties / priceBasis
      Added value: +{
      +  "const": "asking_prices_not_completed_sales",
      +  "type": "string"
      +}
    • addedOutput schema / properties / pricePerSqmUnit
      Added value: +{
      +  "enum": [
      +    "EUR/m2",
      +    "EUR/m2/month"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / priceRangeCoverage
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / priceRangeHigh
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / priceRangeLow
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / priceRangeWideCoverage
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / priceRangeWideHigh
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / priceRangeWideLow
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / priceUnit
      Added value: +{
      +  "enum": [
      +    "EUR",
      +    "EUR/month"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / roughEstimate
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / sampleSize
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / schemaVersion
      Added value: +{
      +  "const": "property-estimate.v1",
      +  "type": "string"
      +}
    • addedOutput schema / properties / sourceObservedAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "const": "available",
      +  "type": "string"
      +}
    • addedOutput schema / properties / transactionAnchor
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {},
      +  "type": "object"
      +}
    • addedOutput schema / properties / usedModelPrice
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / valuationBasis
      Added value: +{
      +  "enum": [
      +    "commune_average",
      +    "model_estimate",
      +    "market_reference",
      +    "not_disclosed"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "propertyType",
      -  "listingType",
      -  "commune",
      -  "areaSqm",
      -  "trust"
      -]New value: +[
      +  "schemaVersion",
      +  "status",
      +  "mode",
      +  "propertyType",
      +  "listingType",
      +  "commune",
      +  "areaSqm",
      +  "areaUnit",
      +  "currency",
      +  "priceUnit",
      +  "pricePerSqmUnit",
      +  "valuationBasis",
      +  "priceBasis",
      +  "limitations",
      +  "locationResolution",
      +  "sourceObservedAt",
      +  "calculatedAt",
      +  "trust"
      +]
  2. First observed

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely useful context beyond that: the training data is asking prices, not deeds, which materially affects how the estimate should be trusted, and it names the returned components.

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 tight sentences, front-loaded with the purpose and followed by the model-basis caveat and the return contents. Nothing is redundant.

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

Completeness2/5

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

For a 32-parameter valuation tool the description says nothing about which optional attributes actually matter, how missing fields are handled, or how confidence intervals narrow. The output schema covers return values, but the input side is the dominant gap given near-zero schema coverage.

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

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 32 parameters and only 6% schema description coverage, the description must compensate and does not – it mentions no parameters at all. The two described schema fields (locale, areaSqm) and the obvious enums carry some weight, but 28 optional inputs (energyClass, glazing, buildingCondition, renovationYear, etc.) have no explanation anywhere.

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 ('price estimate for a Luxembourg property') plus the model's basis, which is more than a restatement of the name. It does not differentiate from the sibling get_quick_estimate, so an agent cannot tell from this text alone which estimator to pick.

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 note that the model is trained on historical listing asking prices rather than deed-level sales implies the appropriate use case and a caveat on interpreting output. However, there is no explicit when-to-use, when-not-to-use, or guidance versus the sibling get_quick_estimate.

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