Platform

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

Claro AI · MCP tool

search_plots

Search commercial plots (Germany)

Germany, commercial plotsRead-only19 parameters

Call it as search_plots on the Claro AI MCP server, https://platform.casafari.com/mcp/claro (how to connect).

Over REST: POST /v1/plots/search (equivalent). MCP and REST compared.

What does Search commercial plots (Germany) do?

Find plots of land for sale or rent in Germany for a commercial building, from Casafari's property graph. Plots only, never premises: counts and results come from a separate set, one result per plot however many agencies advertise it (the others in also_listed_by). Criteria are data: Länder (regions), municipalities, postcodes, plot type, operation, plot area, sale price and price per m², keywords in the property's own words, and commercial_use, how far the property's own text says a commercial building can go on the plot. Levels: zoned_commercial (GE, GI, MK, MU stated), zoned_mixed_or_special (MI, SO, MD stated: check the plan), commercial_use_stated (commercial use stated as allowed or suitable, no class: read the quote), building_land_use_not_stated, residential_only_stated, zoned_leisure_special (SO for recreation), not_building_land_stated, not_stated. The default is the first three; send "all" or any list to widen it. Each result gives its level with the quote it rests on and, for a stated class, zoning_source (a Flächennutzungsplan is not binding), the facts read from the text (zoning class, serviced, B-Plan, §34/§35, building permit, GRZ, GFZ), an excerpt and the agency (agency.name) with its own page as agency.listing_url, null when it has none (never a property portal's page). Keywords are read in each plot's own text: a plot matches only where a sentence states the words without denying them ("KEIN Erbbaurecht!" is no match for Erbbaurecht), and each result gives that sentence per keyword in keyword_matches (evidence, and the words as written in matched); exclude_keywords leaves out a plot that states any of its words, never one that only denies them. The level is what the property's text says, not a zoning check; coordinates are approximate.

Which parameters does search_plots take?

criteriaobject
Criteria as data, every field optional (leave out or send {} for all plots): regions, municipalities, zipcodes, plot_types, operation, plot_area_min, plot_area_max, sale_price_min, sale_price_max, sale_price_m2_max, commercial_use, serviced, keywords, exclude_keywords.
14 properties
regionsstring[]
Länder by name or slug: "Bayern", "nordrhein-westfalen".
municipalitiesstring[]
Towns or cities as the property's data names them: "München", "Leipzig".
zipcodesstring[]
Postcodes or their first digits: "80331", "04".
plot_typesstring[]
building_plot (Grundstück) or rural_plot (agricultural, forest and other land).
building_plot rural_plot
operationstring
For sale, for rent, or either (default either).
sale rent either
plot_area_minnumber
m²; a plot that states no area is out.
plot_area_maxnumber
m²; largest plot area.
sale_price_minnumber
EUR total.
sale_price_maxnumber
EUR total; a plot that states no price is out.
sale_price_m2_maxnumber
EUR per m² of plot area.
commercial_usestring | string[]
Levels to keep; default zoned_commercial, zoned_mixed_or_special, commercial_use_stated.
servicedboolean
true: drop plots whose text says they are not serviced (unerschlossen); plots that do not say stay.
keywordsstring[]
Words or phrases the property's text must state, all of them, as whole words: "Gleisanschluss", "Erbbaurecht". A mention the text denies (kein, keine, nicht, ohne, nie, weder before it; nicht, nie, nein, ausgeschlossen right after) does not count; the sentence that states each is in keyword_matches.
exclude_keywordsstring[]
Leave out plots whose text states any of these. A plot that only denies one stays: exclude "Erbbaurecht" keeps a plot saying "kein Erbbaurecht".
limitinteger
Results per page.
1–50default 20
offsetinteger
Results to skip, for the next page.
≥ 0default 0
sortstring
commercial_use: strongest commercial-use level first; newest: latest on the market; price_asc: lowest sale price; area_desc: largest plot; price_m2_asc: lowest sale price per m².
commercial_use newest price_asc area_desc price_m2_asc
default "commercial_use"
langstring
Language of the text the answer writes (titles, notes, labels, reasons, error messages): en (default) or de (German). Place names, agency names, property titles and quotes from a property's own text stay as written.
en de
default "en"

How do I call search_plots?

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": "search_plots",
    "arguments": {
      "criteria": {
        "regions": [
          "…"
        ]
      }
    }
  }
}

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