Platform
Get started

Casafari is the AI agent-native real estate data intelligence platform. The most complete property index in Europe: a deduplicated, cleaned property graph of residential and commercial property, for sale and for rent, in 16 countries.The most complete property index in Europe: a deduplicated, cleaned property graph.

How the graph is built

Property Sourcing · MCP tool

property-sourcing_search

Search homes for sale or rent

Read-only26 parameters

Call it as property-sourcing_search on the Property Sourcing MCP server, https://platform.casafari.com/mcp/property-sourcing (how to connect).

Over REST: POST /v1/property-sourcing/searches (equivalent). MCP and REST compared.

What does Search homes for sale or rent do?

Homes for sale or rent in one country, merged into one record per home across portals and agency websites. Give location_ids from locations_search, and optionally operation (sale or rent), types, ranges for price, price_per_sqm, bedrooms, bathrooms, living_area_sqm and plot_area_sqm ({"min", "max"}), features and exclude_features, sort and page_size. Each result has a prop_ id, type, asking price (and per square metre), bedrooms, living area, location and the date first seen; total is how many homes match. When next is not null, pass it to property-sourcing_next_page. There is no plain-language filter.

Which parameters does property-sourcing_search take?

location_idsinteger[]required
1 to 100 location ids, from locations_search (a city, district or neighbourhood).
1–100 items≥ 1
countrystring
ISO country code, e.g. "ES". Optional: the location ids say their country.
pattern ^[A-Za-z]{2}$
operationstring
Homes for "sale" (default) or for "rent".
sale rent
typesstring[]
Property types, lower case, e.g. ["apartment", "penthouse", "house", "villa"].
1–40 itemsat most 40 characterspattern ^[a-z][a-z_]*$
priceobject
Asking price in the country's currency (monthly rent when operation is rent): {"min": n, "max": n}, whole numbers from 1; either may be left out.
2 properties
mininteger
≥ 1
maxinteger
≥ 1
price_per_sqmobject
Asking price per square metre: {"min": n, "max": n}, whole numbers from 1; either may be left out.
2 properties
mininteger
≥ 1
maxinteger
≥ 1
bedroomsobject
Bedrooms: {"min": n, "max": n}, whole numbers from 0; either may be left out.
2 properties
mininteger
≥ 0
maxinteger
≥ 0
bathroomsobject
Bathrooms: {"min": n, "max": n}, whole numbers from 1; either may be left out.
2 properties
mininteger
≥ 1
maxinteger
≥ 1
living_area_sqmobject
Living area in square metres: {"min": n, "max": n}, whole numbers from 1; either may be left out.
2 properties
mininteger
≥ 1
maxinteger
≥ 1
plot_area_sqmobject
Plot area in square metres: {"min": n, "max": n}, whole numbers from 1; either may be left out.
2 properties
mininteger
≥ 1
maxinteger
≥ 1
featuresstring[]
Features every result must have.
balcony elevator garage garden parking storage swimming_pool terrace rental_license furniture no_elevator rented_out life_annuity business_transfer smoke_outlet
1–15 items
exclude_featuresstring[]
Features no result may have.
balcony elevator garage garden parking storage swimming_pool terrace rental_license furniture no_elevator rented_out life_annuity business_transfer smoke_outlet
1–15 items
sortstring
Order of the results. newest: most recently on the market first.
newest oldest recently_updated price_asc price_desc price_per_sqm_asc price_per_sqm_desc largest
page_sizeinteger
Results per page, 1 to 100 (default 25; the plan may allow fewer). Every page costs the same.
1–100

How do I call property-sourcing_search?

Required arguments only, with placeholder values. Your assistant fills them in from the parameters above.

JSON-RPC
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "property-sourcing_search",
    "arguments": {
      "location_ids": [
        1
      ]
    }
  }
}

Tip: add .md to any URL to read it as Markdown.