Cubi Estate
Search 2M+ live property listings for sale and rent across Europe: natural-language search, filters, listing details with source links and market stats. Read-only, no account.
Hosted MCP Server
npx add-mcp 'https://mcp.cubi.estate/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
Cubi Estate — MCP connector
We are creating a new, transparent, and hyper-personalized real estate market by addressing its shortcomings.
AI-native property search across 2.2M+ active listings in 17 European countries, in 7 languages. Read-only. Model Context Protocol over Streamable HTTP.
Endpoint
Transport: MCP Streamable HTTP (stateless). Auth: optional — anonymous, rate-limited read access, or OAuth 2.1 (PKCE S256, dynamic client registration, scopes search and offline_access; discovery via /.well-known/oauth-protected-resource). Tokens can be revoked per grant (RFC 7009) at https://mcp.cubi.estate/oauth/revoke.
Connect it
Claude
Listed in the Anthropic Connectors Directory as Cubi Estate — add it from there, or Settings → Connectors → Add custom connector with the URL above. No authentication step.
ChatGPT
Published in the ChatGPT app directory as Cubi Estate (6 October 2026) — open the app page and add it from there. Developers can also add it as a custom MCP connector with the URL above (OAuth per user, or None for anonymous, rate-limited access).
Perplexity
Add as a remote MCP connector with the URL above (paid plans). Choose OAuth to connect per user — dynamic client registration accepts the Perplexity callback — or None for anonymous, rate-limited access. A directory listing has been requested.
Gemini — API
Remote MCP is supported directly as a tool type. No registration or allowlisting is required.
tools=[{ "type": "mcp_server", "name": "cubi_estate", # snake_case; hyphens are rejected "url": "https://mcp.cubi.estate/mcp", "allowed_tools": ["search_properties", "get_listing"], # optional }]
Omit headers entirely — this server needs no credential. allowed_tools is optional but worth setting to the two you actually use.
Gemini — CLI
Add to ~/.gemini/config/mcp_config.json (global) or.agents/mcp_config.json (per workspace):
{ "mcpServers": { "cubi_estate": { "serverUrl": "https://mcp.cubi.estate/mcp" } } }
⚠️ The field is serverUrl here, but url in the API above — the two are not interchangeable, and using the wrong one fails silently with the server never being contacted.
Tools
| Tool | What it does |
|---|---|
| search_properties | Search Cubi Estate's live property listings across 17 European countries. |
| get_listing | Fetch one Cubi Estate listing's full details. |
| get_contact_options | How a buyer can reach the agent for one Cubi Estate listing. |
| filter_listings | Structured property filter — bypasses natural-language extraction. |
| compare_asking_prices | Compare one listing's asking price with comparable homes on Cubi. |
| compare_inventory | What a budget buys in 2-3 towns or cities: the share of each place's |
| find_similar_elsewhere | Homes like one listing, in another city, side by side with it. |
| find_similar_homes | Homes like one listing in its own market, picked by Cubi's similarity model. |
| get_price_history | Has this home's asking price changed? Every change Cubi observed. |
| corpus_stats | Day-by-day Cubi corpus activity — aggregate counts only, no listings. |
| data_layer_stats | Live coverage of Cubi's per-listing enrichment data layers. |
| get_daily_new_listing_stats | How many NEW listings Cubi added per day, by country and by source, |
All tools are read-only (readOnlyHint annotated); none mutates data.
Try these prompts
Find 2-bedroom apartments in Porto under €400k with a balcony.
How many new listings per day did Portugal add over the last two weeks, and how does that compare with Spain?
Show the full details of the cheapest sea-view villa you can find in the Algarve.
Service posture
| Data | Read-only; no tool mutates anything. |
|---|---|
| Latency | Per-call budget 25s; typical calls < 3s. Errors are returned in-band. |
| Freshness | Gathered from public property portals and agencies in the covered countries; each result shows the date its data last changed, and stats are computed live. |
| Coverage | Portugal, Spain, Italy, France, Germany, Belgium, Austria, Finland, Cyprus, Croatia, Slovakia, Malta, Greece, Czech Republic, Poland, Netherlands, Bulgaria. Listings outside these countries may appear in results but are not covered: their place names are not resolved by search. |
| Privacy | Each tool call is logged with its tool name, full arguments (including search text), the listings returned, timing, status, caller IP address and User-Agent, and the OAuth client id for signed-in clients — never tokens. Used to run and secure the connector (rate limiting, abuse prevention, service quality). Free-text search queries and network addresses are removed after 7 days; the record is deleted after 14 days. See the privacy policy. |
| Sources | Aggregated from public listing sites and partner agencies; each result links to its original source. |
Troubleshooting
| A search returns nothing | Broaden it: drop a filter, widen the price range, or use a larger place name (a region rather than a neighbourhood). Coverage is strongest in IT, PL, DE, ES, PT, BE, FR, FI. |
|---|---|
| The first search is slow | After a long idle period the first natural-language search can take up to 25s while caches warm, and returns a message saying so rather than hanging. Retry once — subsequent searches take a few seconds. |
| get_listing says not found | Pass the listing URL exactly as printed on a result card, or a source-prefixed id from a recent result (e.g. dils:23116569). Listings that have since been withdrawn are no longer retrievable. |
| Replies are too long | Pass limit to search_properties (1–10) or filter_listings (1–50) to get fewer, shorter results. |
| Daily quota message | Anonymous use has a daily budget, weighted by what each call costs to serve. Ordinary conversational use will not reach it; automated bulk use will. Write to support@cubi.estate if you need a higher allowance. |
| Data looks out of date | Results are served from our index, not fetched live from the source site at request time; the corpus refreshes daily. Follow the source link for the authoritative current state. |