Domus Aedes

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

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.

Endpointhttps://ai.domusaedes.com/mcp
TransportMCP Streamable HTTP, stateless (POST only; GET/DELETE return 405)
AuthenticationNone. The portfolio is public; lead submission needs no account.
LanguagesEnglish, Spanish, French — pass language; labels, summaries and confirmations come back localised.
CurrencyBudgets are EUR. Prices are EUR (or MAD for some Moroccan listings, labelled as such).
Healthhttps://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

ToolWhat it doesAnnotations
search_propertiesThree best matches for a brief, total matches, refinement suggestions.read-only · idempotent
get_propertyFull 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_detailsSends 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.

ParameterTypeMeaning
intent requiredbuy · rent · stayPurchase · long-term monthly let · short-term stay with live availability.
locationstringCity, 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_maxinteger (EUR)Total price for buy · per month for rent · per night for stay. budget_max is inclusive.
bedrooms_minintegerMinimum bedrooms.
guestsintegerStay only; filters by maximum guests.
property_typeenumvilla flat penthouse townhouse country plot commercial studio riad
featuresarray of enumpool 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_outYYYY-MM-DDStay only. With both, each result carries availability (available, nights, total).
languageen · es · frDefault 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

ParameterTypeMeaning
ref requiredstringReference from a search result, e.g. DA-BELAIR (sales & rentals) or LG-815418 (stays). Case-insensitive.
languageenumAs above.
check_in / check_out / guestsStays 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

ParameterTypeMeaning
name requiredstring 2–120The person's name.
email requiredemailWhere the advisor replies.
phonestringOptional; enables a WhatsApp reply.
message requiredstring 2–2000What they want to know or do.
ref · intent · language · check_in · check_out · guestsContext 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.approx says 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:

  1. “Domus Aedes, find me a villa to buy in Marbella under €3M with sea views.” — expect three properties and an offer to narrow down.
  2. “Show me more.” — expect refinement options, not a longer list.
  3. “Domus Aedes, a stay in Marrakech for four guests, 12 to 19 October.” — expect availability and a total per property.
  4. “Tell me more about the first one.” — expect photos, description, map and the listing link.
  5. “Send my details to an advisor.” — the assistant asks for name and email, then confirms.

Plugin bundles

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