Documentation
Domus Aedes connector
A remote MCP server that puts the Domus Aedes portfolio inside ChatGPT, Claude and Claude Code. One endpoint, three tools, one interactive view.
- Overview
- Connect
- Tools
- search_properties
- get_property
- request_property_details
- Interactive view
- Data & freshness
- Test it
- Plugin bundles
- Support
Overview
The connector turns a natural-language brief (“a villa to buy in Marbella under €3M with sea views”) into a search over Domus Aedes’ own listings: properties for sale, long-term rentals and short-term stays across Spain and Morocco. It is deterministic — no model runs inside the server — and it never invents a property.
The product rule: every search returns the three best matches, the total number of matches, and up to four refinement suggestions. There is no pagination parameter. When a person wants more, the assistant offers to narrow down (budget, area, bedrooms, features) and searches again.
| Endpoint | https://ai.domusaedes.com/mcp |
|---|---|
| Transport | MCP Streamable HTTP, stateless (POST only; GET/DELETE return 405) |
| Authentication | None. The portfolio is public; lead submission needs no account. |
| Languages | English, Spanish, French — pass language; labels, summaries and confirmations come back localised. |
| Currency | Budgets are EUR. Prices are EUR (or MAD for some Moroccan listings, labelled as such). |
| Health | https://ai.domusaedes.com/health |
Connect
ChatGPT
Plugins → search “Domus Aedes” → Connect. Start your prompt with “Domus Aedes”. Developer mode: Settings → Security and login → Developer mode, then add the endpoint above as a public MCP server.
Claude
Settings → Connectors → Add custom connector → name “Domus Aedes”, URL https://ai.domusaedes.com/mcp. No OAuth.
Claude Code
/plugin marketplace add moss1337/domus-aedes-plugin
/plugin install domus-aedes@domus-aedes
Any other MCP client: add an HTTP server with the URL above.
Tools
| Tool | What it does | Annotations |
|---|---|---|
search_properties | Three best matches for a brief, total matches, refinement suggestions. | read-only · idempotent |
get_property | Full details for one reference: description, key facts, up to 12 photos, approximate location, listing page, live availability for stays with dates. | read-only · idempotent |
request_property_details | Sends name, email, optional phone and a message to a Domus Aedes advisor. | not read-only · non-destructive |
Every tool returns structuredContent (the JSON documented below) and a plain-text content block that says the same thing, so hosts without the interactive view still work.
search_properties
| Parameter | Type | Meaning |
|---|---|---|
intent required | buy · rent · stay | Purchase · long-term monthly let · short-term stay with live availability. |
location | string | City, area or country as the person says it: “Marbella”, “Puerto Banús”, “Golden Mile”, “Marrakech”, “Costa del Sol”, “Spain”. Accent- and case-insensitive. Unknown places widen to the country and add a note. |
budget_min / budget_max | integer (EUR) | Total price for buy · per month for rent · per night for stay. budget_max is inclusive. |
bedrooms_min | integer | Minimum bedrooms. |
guests | integer | Stay only; filters by maximum guests. |
property_type | enum | villa flat penthouse townhouse country plot commercial studio riad |
features | array of enum | pool indoor_pool jacuzzi sauna gym sea_view beachfront golf garden terrace garage lift furnished aircon new_build gated wifi bbq mountain_view pets — all listed features must be present. |
check_in / check_out | YYYY-MM-DD | Stay only. With both, each result carries availability (available, nights, total). |
language | en · es · fr | Default en. |
Result
{
"view": "results",
"intent": "buy",
"language": "en",
"query_summary": "Homes to buy in Marbella under €3M",
"total_matches": 12,
"results": [
{
"ref": "DA-CAMPANA",
"title": "Refurbished Penthouse with Jacuzzi & Terrace — La Campana",
"price_label": "€749,000",
"price_value": 749000,
"city": "Marbella", "area": "La Campana", "country": "ES",
"type": "penthouse", "bedrooms": 3, "bathrooms": 2, "built_area": 240, "max_guests": null,
"features": ["jacuzzi", "terrace", "garage"],
"summary": "…",
"image": "https://sales.domusaedes.com/uploads/yM22xXrcHG.webp?w=960",
"images": ["…"],
"url": "https://sales.domusaedes.com/sales/properties/DA-CAMPANA",
"location": { "lat": 36.4942, "lng": -4.9768, "approx": true }
}
],
"refinements": [
{ "label": "Under €2M", "params": { "budget_max": 2000000 }, "count": 5 },
{ "label": "Nueva Andalucía only", "params": { "location": "Nueva Andalucía" }, "count": 4 }
],
"notes": [],
"contact": { "phone": "+34 930 34 46 10", "whatsapp": "https://wa.me/34930344610", "email": "contact@domusaedes.com", "website": "https://domusaedes.com" },
"applied": { "intent": "buy", "location": "Marbella", "budget_max": 3000000, "language": "en" }
}
results is always ≤ 3. refinements is empty when total_matches ≤ 3; otherwise up to four, each with a count between 1 and total_matches − 1 and partial params to merge into the previous search. notes carries anything the person should hear — for example that a location was not recognised and the search was widened. When nothing matches exactly, filters are relaxed one step at a time (features → bedrooms → budget +25% → wider location) and the relaxation is noted; an empty result only happens when the intent has no listings at all.
get_property
| Parameter | Type | Meaning |
|---|---|---|
ref required | string | Reference from a search result, e.g. DA-BELAIR (sales & rentals) or LG-815418 (stays). Case-insensitive. |
language | enum | As above. |
check_in / check_out / guests | Stays only: adds live availability and a total. |
Returns { view: "detail", listing: {…card fields, description, plot_area, region, offers, is_direct, source, updated_at, images ≤ 12} }. An unknown reference returns a plain { view: "error", message } rather than a protocol error.
request_property_details
| Parameter | Type | Meaning |
|---|---|---|
name required | string 2–120 | The person's name. |
email required | Where the advisor replies. | |
phone | string | Optional; enables a WhatsApp reply. |
message required | string 2–2000 | What they want to know or do. |
ref · intent · language · check_in · check_out · guests | Context copied into the request so the advisor sees the same thing the person saw. |
Returns { view: "lead_confirmation", ok, message, ref, title, contact }. The request goes to the Domus Aedes CRM and the owning agent by email; nothing else is stored — see the privacy notice.
Interactive view
Hosts that support MCP Apps (and ChatGPT via the Apps SDK) render a Domus Aedes view instead of text: three cards with photo, price and key facts, a map, refinement chips, a detail page and the request form. The tools reference the resource ui://domus-aedes/app.html (text/html;profile=mcp-app). It loads images from sales.domusaedes.com and l.icdbcdn.com and map tiles from basemaps.cartocdn.com; it makes no other network requests. Preview it at /app.html?demo=search.
Data & freshness
- Sales and long-term rentals come from the Domus Aedes sales catalogue (sales.domusaedes.com), refreshed every 10 minutes. Only published listings are searchable.
- Stays come from the Domus Aedes booking system (stay.domusaedes.com), refreshed every 30 minutes; availability and totals are checked live when dates are given.
- Locations are approximate — an area or city centroid — unless the listing publishes its address.
location.approxsays which. - Prices, facts and amenities are returned exactly as listed. If a stay total cannot be computed, the result says so instead of guessing.
Test it
Initialize:
curl -s https://ai.domusaedes.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'
Then call a tool (send notifications/initialized first if your client expects a session; this server is stateless and accepts each request on its own):
{
"jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": {
"name": "search_properties",
"arguments": { "intent": "buy", "location": "Marbella", "budget_max": 3000000, "language": "en" }
}
}
Suggested reviewer prompts, in any of the three assistants:
- “Domus Aedes, find me a villa to buy in Marbella under €3M with sea views.” — expect three properties and an offer to narrow down.
- “Show me more.” — expect refinement options, not a longer list.
- “Domus Aedes, a stay in Marrakech for four guests, 12 to 19 October.” — expect availability and a total per property.
- “Tell me more about the first one.” — expect photos, description, map and the listing link.
- “Send my details to an advisor.” — the assistant asks for name and email, then confirms.
Plugin bundles
- GitHub: moss1337/domus-aedes-plugin (Claude Code marketplace + ChatGPT bundle).
- Claude marketplace manifest:
/plugin/.claude-plugin/marketplace.json· plugin:/plugin/claude/.claude-plugin/plugin.json· MCP config:/plugin/claude/.mcp.json - ChatGPT bundle:
/plugin/chatgpt/plugin.json - Skill (shared):
SKILL.md
Support
Technical and listing questions: contact@domusaedes.com. Advisors: +34 930 34 46 10 · WhatsApp. Terms: sales.domusaedes.com/sales/legal/terms. Privacy: https://ai.domusaedes.com/privacy.
Server version 0.1.0 · updated 13 September 2026