CasaNest

Search public property listings in Portugal, compare homes and read INE housing statistics.

Should I use this

Quality & Safety

A
Description quality
93%
Schema completeness
81%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'compare_properties' description lacks action verbin compare_properties

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,090Tokens (tool definitions)
~2.0 KBTypical response size
Moderate attention impact (0.85% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "catalogue": {
      "url": "https://casanest.eu/mcp"
    }
  }
}

Remote endpoints

https://casanest.eu/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_properties(purpose, district, municipality, property_type, typology, ...)

Search currently published properties in Portugal by exact structured filters. Requires purpose; municipality requires district. Rental budgets require month/week/night. Up to 20 results, cursor tied to filters. No results means no matches; do not widen filters without asking.

Input Schema

{
  "type": "object",
  "properties": {
    "purpose": {
      "type": "string",
      "enum": [
        "sale",
        "rent",
        "vacation",
        "exchange"
      ]
    },
    "district": {
      "description": "Portuguese district slug, e.g. leiria. Does not mean municipality.",
      "type": "string",
      "minLength": 1,
      "maxLength": 160,
      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
    },
    "municipality": {
      "description": "Municipality slug; requires its district, e.g. district=leiria, municipality=leiria.",
      "type": "string",
      "minLength": 1,
      "maxLength": 160,
      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
    },
    "property_type": {
      "type": "string",
      "enum": [
        "apartment",
        "room",
        "house",
        "land",
        "shop",
        "office",
        "warehouse",
        "garage",
        "building",
        "farm",
        "other"
      ]
    },
    "typology": {
      "type": "string",
      "enum": [
        "t0",
        "t1",
        "t2",
        "t3",
        "t4",
        "t5",
        "t6plus"
      ]
    },
    "price_min": {
      "type": "number",
      "minimum": 0,
      "maximum": 10000000000
    },
    "price_max": {
      "type": "number",
      "minimum": 0,
      "maximum": 10000000000
    },
    "rent_period": {
      "description": "Required with a rent/vacation budget: prices in different periods are not comparable.",
      "type": "string",
      "enum": [
        "month",
        "week",
        "night"
      ]
    },
    "bedrooms_min": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "net_area_min": {
      "type": "number",
      "minimum": 0,
      "maximum": 10000000
    },
    "features": {
      "maxItems": 18,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "elevator",
          "balcony",
          "terrace",
          "garage",
          "pool",
          "garden",
          "airConditioning",
          "storageRoom",
          "alarm",
          "security",
          "gatedCommunity",
          "centralHeating",
          "fireplace",
          "jacuzzi",
          "soundSystem",
          "wineCellar",
          "furnished",
          "accessibility"
        ]
      }
    },
    "locale": {
      "default": "pt",
      "type": "string",
      "enum": [
        "pt",
        "en"
      ]
    },
    "limit": {
      "default": 10,
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    },
    "cursor": {
      "type": "string",
      "maxLength": 240,
      "pattern": "^[A-Za-z0-9_-]+$"
    }
  },
  "required": [
    "purpose"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢get_property(id, locale)

Get current public details using the public id returned by search_properties. Draft, archived, sold, removed or unknown properties return not found. No private owner/contact/CRM data.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[1-9][0-9]{0,9}$"
    },
    "locale": {
      "default": "pt",
      "type": "string",
      "enum": [
        "pt",
        "en"
      ]
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢compare_properties(ids, locale)

Compare 2–4 distinct public property IDs using the same fields and explicit EUR/period/m2 units. Null is unknown. Fails if any requested property is no longer public.

Input Schema

{
  "type": "object",
  "properties": {
    "ids": {
      "minItems": 2,
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[1-9][0-9]{0,9}$"
      }
    },
    "locale": {
      "default": "pt",
      "type": "string",
      "enum": [
        "pt",
        "en"
      ]
    }
  },
  "required": [
    "ids"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢get_area_statistics(district, municipality, locale)

Read INE median completed dwelling sale value per m2 for a Portuguese municipality, with period, source and license. Not asking prices, rents, a valuation or forecast. Requires both district and municipality slugs.

Input Schema

{
  "type": "object",
  "properties": {
    "district": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160,
      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
    },
    "municipality": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160,
      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
    },
    "locale": {
      "default": "pt",
      "type": "string",
      "enum": [
        "pt",
        "en"
      ]
    }
  },
  "required": [
    "district",
    "municipality"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools