Koskamo

CasaPrivat MCP

An official MCP server for CasaPrivat that allows AI agents to search for homes sold directly by private owners in Spain and France, retrieve specific property details, access search facets, and forward viewing requests to owners with buyer consent.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

CasaPrivat MCP logo, by Nukehive OÜVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Nukehive OÜ
MCP endpoint (Streamable HTTP)
https://casaprivat.com/mcp
Vendor documentation

What you can do with it

  • Search for homes by country, type, and price range
  • Retrieve detailed information for a specific home listing
  • Access search facets to refine property queries
  • Forward a buyer's message to a home owner for viewing

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
casaprivat 1.0.0
MCP protocol
2025-06-18
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Search homes for sale directly from private owners in Spain and France (search_homes, get_home, get_facets). request_viewing only forwards a question or viewing request to the owner; it does not book anything. Always tell the user that the owner will answer directly, and never ask anyone to pay money before a viewing. CasaPrivat is not an estate agent. Listings are published by private owners, who are responsible for their content. No commission. Report illegal listings at /en/report (Regulation (EU) 2022/2065, art. 16).

Tools

4 advertised

search_homes — Search homes for sale by owner
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search homes for sale directly by private owners (no agent, no commission) in Spain (ES) and France (FR). Returns public listing records incl. the mandatory energy rating.

search_homes input schema
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "description": "Substring match on city"
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    },
    "country": {
      "enum": [
        "ES",
        "FR"
      ],
      "type": "string"
    },
    "max_price": {
      "type": "number"
    },
    "min_price": {
      "type": "number"
    },
    "min_rooms": {
      "type": "number"
    },
    "min_area_m2": {
      "type": "number"
    },
    "property_type": {
      "enum": [
        "apartment",
        "house"
      ],
      "type": "string"
    },
    "include_examples": {
      "type": "boolean",
      "description": "Include fictional EXAMPLE listings (default true in the MVP)"
    },
    "min_energy_class": {
      "enum": [
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G"
      ],
      "type": "string",
      "description": "Only homes with this class or better (A best)"
    }
  },
  "additionalProperties": false
}
search_homes output schema
{
  "type": "object",
  "required": [
    "total",
    "items"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "items": {
      "type": "array"
    },
    "total": {
      "type": "integer"
    }
  }
}
search_homes annotations
{
  "title": "Search homes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_home — Get one home
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full public record of one published listing by id (e.g. EXAMPLE-ES-1 or ES-XXXXXXXX).

get_home input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_home output schema
{
  "type": "object",
  "required": [
    "home"
  ],
  "properties": {
    "home": {
      "type": "object"
    },
    "note": {
      "type": "string"
    }
  }
}
get_home annotations
{
  "title": "Get home",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_facets — Counts and filter values
Advertised by the server during the last successful anonymous check.
Advertised read-only

Counts of published listings by country, type and city, price range and valid filter values. No arguments.

get_facets input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_facets output schema
{
  "type": "object",
  "required": [
    "facets"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "facets": {
      "type": "object"
    }
  }
}
get_facets annotations
{
  "title": "Facets",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
request_viewing — Send a question or viewing request to the owner
Advertised by the server during the last successful anonymous check.

Forwards a question or viewing request from a buyer to the owner of a published home. It does NOT book a viewing and creates no offer or contract: the owner replies directly to the buyer's email. Requires the buyer's explicit consent to share their name and email with the owner.

request_viewing input schema
{
  "type": "object",
  "required": [
    "id",
    "buyer_name",
    "buyer_email",
    "message",
    "buyer_consent"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "kind": {
      "enum": [
        "viewing",
        "question"
      ],
      "type": "string"
    },
    "message": {
      "type": "string",
      "maxLength": 3000
    },
    "agent_name": {
      "type": "string",
      "maxLength": 80,
      "description": "Name of the AI agent or app sending this"
    },
    "buyer_name": {
      "type": "string",
      "maxLength": 80
    },
    "buyer_email": {
      "type": "string"
    },
    "buyer_phone": {
      "type": "string",
      "maxLength": 40
    },
    "buyer_consent": {
      "type": "boolean",
      "description": "true = the buyer agreed that their name, email and message are passed to the owner"
    },
    "preferred_times": {
      "type": "string",
      "maxLength": 300
    }
  },
  "additionalProperties": false
}
request_viewing output schema
{
  "type": "object",
  "required": [
    "request_id",
    "status"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "request_id": {
      "type": "string"
    }
  }
}
request_viewing annotations
{
  "title": "Request viewing (notifies owner only)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
3274 ms
95th percentile latency
3274 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 3274 ms · metadata changed · 4 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http casaprivat-mcp https://casaprivat.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add casaprivat-mcp --url https://casaprivat.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable casaprivat-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "casaprivat-mcp": {
      "url": "https://casaprivat.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "casaprivat-mcp": {
      "type": "streamableHttp",
      "url": "https://casaprivat.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start casaprivat-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "casaprivat-mcp": {
      "type": "http",
      "url": "https://casaprivat.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http casaprivat-mcp https://casaprivat.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "casaprivat-mcp": {
      "url": "https://casaprivat.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "casaprivat-mcp": {
      "serverUrl": "https://casaprivat.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like CasaPrivat MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run CasaPrivat MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing