Assetfy MCP-Server

Amtliche Grundstücks- und Immobiliendaten für Deutschland und Österreich in Ihrem KI-Assistenten: Flurstücke, Gebäude mit Geschossen und Höhen, Bebauungspläne, Bodenrichtwerte, tatsächliche Nutzung, Luftbilder und aktuelle Immobilienangebote.

Der Server spricht das Model Context Protocol und funktioniert mit jedem MCP-fähigen Client, etwa Claude, ChatGPT oder GitHub Copilot. Er bietet 34 Tools: 32 lesende und 2 schreibende, die nur im eigenen Assetfy-Konto anlegen.

Server-URL
https://mcp.assetfy.com/mcp
Transport
Streamable HTTP (JSON-RPC per POST), kein SSE
Protokollversionen
2025-06-18, 2025-03-26, 2024-11-05
Authentifizierung
OAuth 2.1 mit Dynamic Client Registration und PKCE (S256), Autorisierung über assetfy.com
Berechtigungen
mcp:read für alle lesenden Tools, mcp:write zusätzlich für die beiden Speicher-Tools
Zugang
Assetfy-Konto mit freigeschaltetem AI MCP-Zugang. Zugang anfragen: hallo@assetfy.com
Sprache
Die Tools beschreiben sich auf Englisch; der Assistent antwortet in der Sprache der Frage. Deutsche Fachbegriffe wie Flurstück, Gemarkung, Bebauungsplan, Bodenrichtwert, GRZ und GFZ bleiben als Rechtsbegriffe erhalten.

Verbinden

  1. Im KI-Assistenten einen Connector bzw. MCP-Server hinzufügen und die Server-URL https://mcp.assetfy.com/mcp eintragen. In Claude: Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen.
  2. Auf „Verbinden“ klicken. Es folgt eine Weiterleitung zu assetfy.com; dort mit dem Assetfy-Konto anmelden.
  3. Auf der Einwilligungsseite festlegen, ob der Assistent auch speichern darf. Ohne dieses Häkchen stehen alle lesenden Tools zur Verfügung, die Speicher-Tools werden nicht angeboten.
  4. Auf „Zulassen“ klicken. Die Verbindung steht; ein API-Key oder weitere Einstellungen sind nicht nötig.

Verbundene Assistenten lassen sich jederzeit im Assetfy-Konto unter Einstellungen → AI MCP-Zugang einzeln oder alle auf einmal trennen. Der Zugriff endet damit spätestens nach einer Minute.

Datenabdeckung

Datenabdeckung nach Datenart und Region
DatenDeutschlandÖsterreich
Flurstücke (Kataster)15 von 16 Ländern; Bayern gibt sein Kataster nicht als Daten frei, dort nur als Kartenbildja (BEV), Abfrage an einer Koordinate
Gebäude mit Geschossenja; die Geschosszahl ist amtlich oder aus der Gebäudehöhe geschätzt und dann als geschätzt markiert—
Trauf- und Firsthöhe über Grundaus den 3D-Gebäudemodellen (LoD2), wo das Land sie veröffentlicht, u. a. Bayern, Hessen, Berlin, Brandenburg, Sachsen (nur Traufhöhe)—
Tatsächliche NutzungLänder mit Nutzungsdaten; welche, meldet jedes Ergebnis selbst—
BebauungspläneLänder mit veröffentlichten Planregistern; Planunterlagen, wo die Gemeinde sie veröffentlicht—
Bodenrichtwertewo die Gutachterausschüsse sie als offene Daten veröffentlichen—
Luftbilderalle Länder, live von den Landesvermessungsämtern—
Immobilienangebotejaja

Die Standortsuche meldet in jedem Ergebnis, welche Länder sie geprüft hat und welche nicht. Eine bundesweite Suche ist deshalb nicht automatisch vollständig; das Ergebnis sagt, wo nicht gesucht werden konnte. Den aktuellen Stand je Land liefert assetfy_get_data_coverage.

Tool-Referenz

Alle 34 Tools mit ihrer Beschreibung und ihren Parametern, so wie der Server sie per tools/list ausliefert. Die Beschreibungen sind englisch, weil der Assistent sie liest.

Flurstücke & Kataster

Flurstücke nachschlagen: nach Koordinate, Adresse, Gemarkung/Flur/Flurstücksnummer oder Postleitzahl und Fläche — mit Größe, Umriss und Zuschnitt.

Find Parcels

assetfy_db_find_parcels
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Look up a parcel (Flurstück) from the Liegenschaftskataster / Flurkarte and its SIZE (Grundstücksgröße, Flurstücksfläche). This answers "how many m²/qm does Gemarkung X, Flur Y, Flurstück Z have" — the most common cadastral question — and returns area in m², coordinates, gml_id and the cadastral identity (Gemarkung, Flur, Flurstücksnummer). Also searches by postal code with an area range, or within a radius of a coordinate. Covers 15 of the 16 German states, including Brandenburg, Berlin, Bremen and Hamburg — only BAYERN is missing, because its cadastre is not openly licensed; a Bayern lookup answers "No parcel table for Bayern" and says what is available there instead. Do not confuse this coverage with assetfy_db_find_parcels_by_use, assetfy_db_find_industrial_sites or assetfy_db_screen_sites, which are limited to the states reporting the use attribute. Leading zeros are irrelevant: Flur "3" finds "003". A search by gemarkung is resolved through the precomputed Gemarkung index first and then runs geometrically around that Gemarkung — the result reports the zone and its suchradius_m, and an unknown name comes back with did_you_mean instead of a timeout. In the few states not yet in that index the name search still scans the state and can exceed the time limit; adding zip or lat/lon + radius_m avoids that.

Parameter
ParameterTypBeschreibung
bundesland string Bundesland key, e.g. berlin, nrw, bayern. Derived from zip or lat/lon when omitted.
lat number
lon number
radius_m number Radius around lat/lon in metres, max 5000.
gemarkung string Cadastral district name, case-insensitive, matched exactly (no wildcards). Resolved via the Gemarkung index, so a wrong name answers with did_you_mean rather than an empty result.
flur string
flurstuecksnummer string e.g. 71/14 or 458.
zip string Postal code, joined via de_zipcodes.
area_min_m2 number
area_max_m2 number
limit integer Standard: 50 · max. 200

Beispiel: Wie groß ist das Flurstück Gemarkung List, Flur 30, Flurstück 44/11 in Hannover?

Get Parcel at Coordinate

assetfy_get_parcel_at_coordinate
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Find the cadastral parcel (Flurstück) at a street address or coordinate — what the Flurkarte / Liegenschaftskarte (ALKIS-Kataster) shows there: Gemarkung, Flur, Flurstücksnummer, Grundstücksgröße in m² and the parcel outline. Takes the address directly; the tool resolves it itself.

Parameter
ParameterTypBeschreibung
lat number
lon number
address string Alternative to gml_id and lat/lon: a street address, e.g. "Rägeliner Straße 5, 12683 Berlin". Resolved server-side to the parcel at that address — no web search or external geocoder needed.

Beispiel: Welches Flurstück liegt an der Koordinate 48.1986, 16.3417 in Wien?

Get Parcel by GML ID

assetfy_get_parcel_by_gml_id
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Retrieve one cadastral parcel (Flurstück) by its ALKIS GML id: Gemarkung, Flur, Flurstücksnummer, Grundstücksgröße and outline, as in the Flurkarte / Liegenschaftskataster.

Parameter
ParameterTypBeschreibung
gml_id Pflicht string

Search Parcels by ZIP and Area

assetfy_search_parcels_by_zip_and_area
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Find cadastral parcels by postal code and plot area. Answers questions like "which parcels in ZIP 12683 have exactly 1026 m2". Use this to map an exposé without a street address to a concrete parcel. The ZIP is matched against the parcel polygons via de_zipcodes geometry, never by town name, and the Bundesland follows from the ZIP — no coordinates needed. Exact area first, then a small tolerance, because exposés round.

Parameter
ParameterTypBeschreibung
zip Pflicht string German postal code, e.g. 12683.
area_m2 Pflicht number Plot area in m2 as stated in the listing.
lat number Optional reference coordinate, used only to sort candidates by distance. Check coordinate_precision from assetfy_db_listing_details before trusting a listing coordinate.
lon number
location string Optional known location name. Only sorts the output — it never filters parcels.
enrich boolean Load the full overview for every candidate. Slower, but returns building and potential data per candidate. Standard: false

Get Parcel Geometry Metrics

assetfy_get_parcel_geometry_metrics
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Derive plot shape metrics from the parcel polygon: bounding rectangle (width x depth), all edge lengths, compactness and a street frontage estimate. Answers "Zuschnitt", "Grundstücksbreite/-tiefe", "Grundstücksform" and "erste Reihe / Strassenfront" questions.

Parameter
ParameterTypBeschreibung
gml_id string
lat number
lon number

Resolve Locations

assetfy_resolve_locations
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Resolve German place names or postal codes (Ort, Stadt, Gemeinde, PLZ) into search center points with a radius derived from the size of the place. Useful to check how a location will be interpreted before searching; assetfy_search_property_candidates does this resolution itself.

Parameter
ParameterTypBeschreibung
locations Pflicht string[]

Bebaubarkeit, Gebäude & Bodenwert

Was steht auf dem Flurstück, was darf dort stehen, was ist der Boden wert: Gebäude mit Geschossen und Höhen, Bebauungsplan, GRZ/GFZ, Bodenrichtwert.

Get Parcel Overview

assetfy_get_parcel_overview
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Full development fact sheet for one parcel in a single call: cadastral identity (Gemarkung/Flur/Flurstueck), area, actual land use (ALKIS), buildings with footprint, Geschosszahl, Gebäudehöhe, Traufhöhe and Firsthöhe über Grund (from LoD2 where available), GRZ/GFZ (Grundflächenzahl/Geschossflächenzahl) existing vs. neighbourhood percentiles, development potential traffic light (Bebauungspotenzial, Nachverdichtung, Aufstockung), B-plan hit, or Paragraph 34/35 BauGB where the municipality is covered by our B-plan data — where it is not (eckdaten.planungsrecht.regime "unbekannt", daten_vorhanden false), the planning law is unknown and no B-plan hit says nothing, Bodenrichtwert incl. zone GFZ, plus computed land value (Grundstückswert) and buildable-BGF (Bruttogeschossfläche) headroom, and Umgebungslärm from the strategic noise maps (umgebungslaerm). Preferred tool for "Eckdaten zur Bebaubarkeit", "was darf ich hier bauen", Baurecht, Baulücke and Innenbereich/Außenbereich. Parcel outline and building footprints as GeoJSON only on request (include_geometry).

Parameter
ParameterTypBeschreibung
gml_id string Parcel gml id, e.g. flurstuecke.DEBE10YYS0000M4x.
lat number Alternative to gml_id: latitude.
lon number Alternative to gml_id: longitude.
address string Alternative to gml_id and lat/lon: a street address, e.g. "Rägeliner Straße 5, 12683 Berlin". Resolved server-side to the parcel at that address — no web search or external geocoder needed.
include_geometry_metrics boolean Add plot shape, edge lengths and street frontage estimate. Standard: true
include_geometry boolean Add the raw geometries: parcel outline (flurstueck_geometrie) and building footprints (gebaeude_geojson) as GeoJSON. Off by default, because they are large and rarely needed for an answer — only when the shape itself matters, e.g. where on the plot the buildings stand. Standard: false

Beispiel: Erstelle mir einen Steckbrief zur Bebaubarkeit von Flurstück 44/11 in Hannover-List: GRZ, GFZ, Bodenrichtwert, Gebäude und Potenzial.

Get Parcel Profile

assetfy_get_parcel_profile
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Aggregated profile of one parcel (Flurstück): Kataster data, tatsächliche Nutzung / Grundstücksnutzung, Bodenrichtwert, development potential (Bebaubarkeit, GRZ/GFZ, Nachverdichtung) and every building (Gebäude) on it with function, Geschosszahl (oberirdisch/unterirdisch, flagged when estimated), Gebäudehöhe, Traufhöhe and Firsthöhe über Grund, Dachform, Baujahr, Grundfläche, BGF (Bruttogeschossfläche), Nutzfläche and Volumen, plus Umgebungslärm (noise) from the strategic noise maps. Heights come from the LoD2 3D building models where the state publishes them (e.g. Bayern, Hessen, Berlin, Brandenburg, Sachsen); where a source only has elevations above sea level (Niedersachsen) the fields stay empty.

Parameter
ParameterTypBeschreibung
gml_id string
lat number
lon number
address string Alternative to gml_id and lat/lon: a street address, e.g. "Rägeliner Straße 5, 12683 Berlin". Resolved server-side to the parcel at that address — no web search or external geocoder needed.
include_geometry boolean Standard: false

Beispiel: Welche Gebäude stehen auf Flurstück 44/11 in Hannover-List, mit Geschossen und Höhen?

Buildings (Gebäude)

assetfy_db_buildings
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Buildings (Gebäude) from the cadastre (ALKIS-Kataster) with their address (Adresse, Hausnummer), function (Gebäudefunktion, e.g. Wohnhaus, Garage, Lagerhalle), floors (Geschosse) and footprint (Gebäudegrundfläche). Either every building on one parcel (gml_id) or all buildings within a radius of a coordinate. Use this to confirm which parcel a listing refers to — the HTTP API does not return addresses. Floors here are the ALKIS attribute only, empty in several states; for Traufhöhe, Firsthöhe, Gebäudehöhe and the Geschosszahl derived from the LoD2 3D models use assetfy_get_parcel_profile or assetfy_get_parcel_overview.

Parameter
ParameterTypBeschreibung
gml_id string Parcel gml id — returns the buildings standing on that parcel.
lat number
lon number
radius_m number Search radius around lat/lon in metres, max 5000. Standard: 150
min_footprint_m2 number Ignore buildings below this footprint, useful to skip sheds and garages.
function_like string Substring of the ALKIS building function, e.g. "Versorgung", "Wohn", "Industrie". Works in every state: half of them store the function as a numeric ALKIS code, and the term is translated into the matching codes first. Search broadly — the cadastre classifies coarsely. A power substation is usually recorded as "Gebäude zur Versorgung" (2500), rarely as "Umspannwerk" (2522), so searching for the narrow term finds almost nothing.
limit integer Standard: 50 · max. 200

Planning Law at Point

assetfy_db_planning_at_point
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Bebauungsplan polygons covering a coordinate or a parcel, with plan name, type and date. It is built for the Bebauungsplan. Where a state register also carries the Flächennutzungsplan (e.g. NRW), it comes back as a hit with planart "Flächennutzungsplan"; most states do not publish the FNP as data, and there it is held by the Gemeinde. Use it to prove whether a parcel is governed by a B-plan (then its rules apply) or falls under §34/§35 BauGB — but only where our data covers the municipality: the result reports gemeinde_abdeckung, and where the state or the Gemeinde is not in our B-plan data, beurteilung says so and no hit is NOT evidence of §34. Hessen, Niedersachsen, Bremen, Saarland, Sachsen-Anhalt and Bayern have no B-plan data here at all. Every hit carries planunterlagen: the direct PDF links of that plan — Planzeichnung, textliche Festsetzungen, Begründung, taken from the source record or from the portal pages it links to, in the spelling the municipality publishes them. They belong to that plan. assetfy_get_plan_document returns the content of a document itself, as text and page images; a web fetch of these links is typically refused, as they appear only in a tool result. The links are not checked for reachability, so an occasional one is stale. The list can be empty even for a plan in force: not every municipality publishes its documents, and a few portals need a login. quelle_url is the link the state register itself carries — usually a portal page rather than a document — and is the fallback when planunterlagen is empty. datum belongs to the record, not necessarily to the plan: where the name marks an amendment ("Änderung Nr. 4 des Bebauungsplanes Ma 110", "2. Änderung"), it is the date that amendment took effect, and the original plan is usually older — in NRW it is missing from the register entirely for 5.341 of 6.254 amendments. The amendment date is therefore not the age of the planning law.

Parameter
ParameterTypBeschreibung
gml_id string
lat number
lon number

Beispiel: Gibt es für den Punkt 50.62618, 6.94504 in Rheinbach einen Bebauungsplan? Zeig mir die Planunterlagen.

Get Bebauungsplan Document

assetfy_get_plan_document
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Returns the content of one Bebauungsplan document — Planzeichnung, textliche Festsetzungen, Begründung — fetched by the Assetfy server as text and page images. The url is one from planunterlagen of assetfy_db_planning_at_point (or planzeichnung_pdf / document_links of the other tools), unchanged. Those links point to the municipality's server; a web fetch of a URL that appears only in a tool result is typically refused, while this tool delivers the document inside its result. Pages with a text layer come as text (text_layer: "included", "truncated" or "none"). Pages without one — most plans are scans — come as JPEG images to be read directly. A plan sheet larger than A3 comes as the whole sheet reduced, followed by overlapping tiles of about 1568 px in reading order, each announced with its row and column: the Nutzungsschablonen and printed Festsetzungen of an A0 sheet are legible only in the tiles. One call carries a limited number of images; pages_not_included and more name the pages left out, which a second call with pages returns. noise_mentions names the pages of the whole document whose text layer mentions noise requirements (Lärmpegelbereich, Emissionskontingent, dB(A), DIN 4109 …), with short excerpts, so those pages can be requested directly; pages_without_text_layer were not searched. Only documents Assetfy has on record can be opened, up to 20 MB.

Parameter
ParameterTypBeschreibung
url Pflicht string Document URL from planunterlagen, unchanged.
pages string Optional page selection such as "3", "2-5" or "1,4-6". Default: all pages, as far as one result holds them.

Land Values (Bodenrichtwerte)

assetfy_db_land_values
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Bodenrichtwert zones (BORIS, Gutachterausschuss) at a coordinate or parcel, including value per m2 (Bodenwert, Grundstückspreis pro Quadratmeter), reference date (Stichtag), permitted use (Art der Nutzung, e.g. Bauland, Wohnbaufläche, Gewerbe, Acker) and the zone GFZ used for the land value calculation.

Parameter
ParameterTypBeschreibung
gml_id string
lat number
lon number

Beispiel: Wie hoch ist der Bodenrichtwert für Flurstück 44/11 in Hannover-List?

Nutzung & Standortsuche

Flurstücke nach ihrer tatsächlichen Nutzung laut Kataster finden — einzeln oder mit mehreren Kriterien auf einmal (Anteil, Größe, Bebauungsgrad, Bebauungsplan, Autobahnnähe).

Screen Sites by Criteria

assetfy_db_screen_sites
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Find parcels (Flurstücke) by their actual cadastral use AND several further criteria AT ONCE — the multi-criteria variant of assetfy_db_find_parcels_by_use, and the tool for a site profile rather than a single lookup. Returns only the parcels that pass every criterion: the use, how much of the parcel that use covers, the parcel size, how densely it is already built (Bebauungsgrad), and whether a Bebauungsplan applies. Example: "Lagerflächen, die mindestens 80 % des Flurstücks einnehmen, 10.000 bis 100.000 m², 5 bis 30 % bebaut, mit B-Plan, deutschlandweit". It replaces chaining assetfy_db_find_parcels_by_use with per-parcel calls to assetfy_db_planning_at_point and assetfy_db_buildings: every criterion is evaluated in one database pass, so a nationwide screening costs one call per state instead of three per candidate — chaining is what exhausts the call budget before the last criterion is reached. Every hit reports the measured figures it passed on (nutzung_anteil_prozent, bebauungsgrad_prozent, the Bebauungsplan) so the numbers can be checked, plus assetfy_url. The distance to the nearest Autobahn junction is covered by max_autobahn_km and measured in the database; there is no need to query Overpass or another OSM service for it. Noise from the strategic noise maps is covered by max_laerm_lden_db / max_laerm_lnight_db, and every hit reports its loudest mapped band as umgebungslaerm. The criteria this tool does NOT cover — distance to a substation, to a railway line — apply to the RESULT, not to the search: screen here first, then check the few survivors, or use near_use in assetfy_db_find_parcels_by_use for a second cadastral use nearby. Coverage: the states with their own detailed land-use dataset (see the coverage note in the result); other states record only the coarse use category at the parcel and are reported as skipped rather than silently omitted.

Parameter
ParameterTypBeschreibung
nutzungsart Pflicht string The actual cadastral use the parcel must carry, e.g. "Lagerfläche", "Industrie", "Halde", "Tagebau", "Bahnverkehr". Matched against the official codelists, so a detailed designation works as well as a main category.
funktion string Optional second term narrowing the use further, e.g. "Umspannstation", "Versorgungsanlage". Both terms must match the same use entry.
min_nutzung_anteil number How much of the parcel the matching use must cover, in PERCENT (80 = at least 80 % of the parcel). This is what separates a parcel that IS a storage yard from one that merely contains a corner of one. Measured as the intersection of the use area with the parcel, against the official parcel area. min. 0 · max. 100
min_flaeche_m2 number Minimum total parcel area in m².
max_flaeche_m2 number Maximum total parcel area in m².
bebauungsgrad_min number Minimum share of the parcel already covered by buildings, in PERCENT — computed live from the ALKIS building outlines on the parcel, not from a stored value. A lower bound separates a developed site from bare land. min. 0 · max. 100
bebauungsgrad_max number Maximum share of the parcel covered by buildings, in PERCENT. An upper bound is how you find sites with room left for development. min. 0 · max. 100
bplan boolean true = only parcels where a Bebauungsplan is IN FORCE — the plan type must be a Bebauungsplan (a Flächennutzungsplan or a Satzung does not count) and its Rechtsstand must be in Kraft getreten or beschlossene Satzung, so drafts and Aufstellungsbeschlüsse are excluded. States that record neither is reported in skipped_states rather than answered on a weaker test. Omit to not filter on it — any plan found is reported either way, including an FNP or a draft, so leaving this out costs nothing and tells you more.
max_autobahn_km number Maximum straight-line distance to the nearest Autobahn junction (Anschlussstelle) in KILOMETRES — the decisive criterion for logistics and storage sites. Measured against the OSM motorway_junction nodes held in the database, so there is no need to query Overpass or the OSM API: this parameter covers that comparison. The distance is as the crow flies, not the driving distance; every hit reports it as autobahn_anschluss with the junction name.
max_laerm_lden_db number Noise ceiling, day-evening-night index Lden in dB(A): a parcel is excluded when any mapped 5-dB noise band starting at or above this value covers part of it — roads, rail, airports and industry together, from the strategic noise maps (EU Environmental Noise Directive, Runde 4, reference year 2021). 60 keeps parcels whose loudest mapped band is 55–59 or that have no band at all. Only major roads, major railways, large airports and agglomerations are mapped, from Lden 55: a parcel without a band is unmapped or below that threshold, not quiet. Every hit reports umgebungslaerm either way. min. 45 · max. 80
max_laerm_lnight_db number Noise ceiling for the night index Lnight (22–6 h) in dB(A), same logic as max_laerm_lden_db. Mapped from Lnight 50 (rail from 45). Decisive for residential use: the DIN 18005 guide value for a general residential area is 45 dB(A) at night. min. 40 · max. 75
bundesland string Restrict to ONE state, e.g. "nrw". Leave it out for a nationwide screening — one call then covers every state in a single pass. The states that cannot be screened are reported with their reason in skipped_states; asking for them one by one returns exactly the same reason.
zip string Restrict to a postcode area.
lat number
lon number
radius_m number Radius around lat/lon in metres. max. 50000
limit integer Maximum number of parcels returned. Default 25 for a nationwide search (no bundesland, zip or lat/lon), 50 within a region. Higher values are meant for explicit requests for more results — every row lands in the conversation, and a nationwide search queries the states one after another. min. 1 · max. 200

Find Parcels by Land Use

assetfy_db_find_parcels_by_use
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Search parcels by their ACTUAL cadastral use (ALKIS "tatsächliche Nutzung", also called Nutzungsart, Grundstücksnutzung or Flächennutzung), nationwide or within a region — cemeteries, quarries, sports grounds, landfills, allotments, power stations, industrial land, anything the cadastre records as a use. This is a discovery tool for sites matching a use profile; to look up ONE known parcel by Gemarkung/Flur/Flurstücksnummer or to get its size, use assetfy_db_find_parcels instead, which covers all states. Spelling differences between states are handled: the states write the same use as "Industrie- und Gewerbefläche", "Industrie Und Gewerbeflaeche", "IndustrieUndGewerbeflaeche" or "Industrie und Gewerbe", and any of those spellings finds all of them. Search broadly and with the stem of a word — "friedhof" also finds "Parkfriedhof" and "Historischer Friedhof". Note the coverage: NRW, Hessen, Brandenburg, Mecklenburg-Vorpommern and Baden-Württemberg are searched in their own ALKIS land-use datasets and carry the detailed designation (e.g. "Lagerfläche") plus further attributes such as Zustand; Niedersachsen, Hamburg, Saarland, Sachsen, Sachsen-Anhalt, Thüringen and (sparsely) Rheinland-Pfalz are searched through the coarser parcel attribute, which knows only the main category. Baden-Württemberg records Funktion and Vegetationsmerkmal but no Zustand. Bayern, Berlin, Bremen and Schleswig-Holstein are not covered: their land-use import has not landed yet, and in Schleswig-Holstein the parcel attribute is empty, so the state comes back in skipped_states rather than as an empty result. A nationwide search is therefore not exhaustive, and absence of a hit is not evidence of absence. This tool knows nothing about listings; for railway land that is for sale (Grundstücke mit Gleisanlagen zum Verkauf) use assetfy_db_rail_listings. SEVERAL CRITERIA AT ONCE — a use PLUS a share of the parcel ("must cover at least 80 % of the Flurstück"), a size window, a building coverage (Bebauungsgrad), or a Bebauungsplan — is covered by assetfy_db_screen_sites, which evaluates all of them in one database pass per state. Checking candidates from here one by one with assetfy_db_planning_at_point and assetfy_db_buildings runs out of calls before the last criterion is reached, which is the reason assetfy_db_screen_sites exists. This tool is for a single use as the question: which parcels carry it, where, and how large. If a nationwide search times out on a common use, split it by bundesland rather than retrying — and say in the answer which states you actually covered.

Parameter
ParameterTypBeschreibung
nutzungsart string The use to search for, e.g. "Friedhof", "Tagebau", "Sport", "Industrie", "Wohnbaufläche", "Halde", "Kleingarten". Matched as a substring, so a stem is usually the better choice. Omit to get every parcel that carries any use at all.
funktion string Optional second term, narrowing the use further, e.g. "Versorgungsanlage", "Umspannstation", "Lagerfläche", "Kläranlage". Both terms must match the same use entry. The cadastre classifies coarsely — a substation is usually recorded as "Versorgungsanlage", rarely as "Umspannstation".
min_teilflaeche_m2 number Minimum size of the matching sub-area in m². The cadastre records the area per use, so a 200 m² "Versorgungsanlage" on a 90.000 m² parcel is a substation, not a meter cabinet. Relevant whenever the question implies a share of the parcel: "the use must cover at least 80 % of a parcel of 10.000 m² or more" means a sub-area of at least 8.000 m² (0.80 × 10.000), and passing it is what keeps a nationwide search inside the time limit — it prunes the candidate areas before any intersection runs (measured on NRW/Lagerfläche at 8.000 m²: 12.271 candidate areas down to 1.877). Without it the same question times out.
min_flaeche_m2 number Minimum total parcel area in m².
max_flaeche_m2 number
bundesland string Restrict to one state, e.g. "nrw", "niedersachsen". Omit to search every covered state.
zip string Restrict to a postcode area.
lat number
lon number
radius_m number Radius around lat/lon in metres. max. 50000
near_use string Only return parcels that have ANOTHER parcel with this use nearby, and report the distance to it. This is how you find a site next to the scarce resource rather than the resource itself: near_use "Versorgungsanlage" with nutzungsart "Tankstelle" finds filling stations next to a substation — the classic charging-hub site. Distance is measured edge to edge, not centre to centre, so a directly adjoining parcel reports 0 m. Results are then sorted by that distance, nearest first.
near_max_distance_m number How far the near_use parcel may be, in metres. Only used together with near_use. Standard: 1000 · max. 5000
include_all_uses boolean Return the full list of uses per parcel instead of only the matching one. Off by default because parcels carry up to a dozen uses and the full lists crowd out the results themselves. Standard: false
limit integer Maximum number of parcels returned. Default 25 for a nationwide search (no bundesland, zip or lat/lon), 50 within a region. Higher values are meant for explicit requests for more results — every row lands in the conversation, and a nationwide search queries the states one after another. min. 1 · max. 200

Find Industrial Sites

assetfy_db_find_industrial_sites
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Search industrial and commercial parcels (Industriefläche, Gewerbegrundstück, Gewerbefläche, Logistikfläche) by their ACTUAL cadastral use — assetfy_db_find_parcels_by_use with the use preset to "Industrie". This is the entry point for finding sites for data centres, battery storage, solar or charging parks: a parcel whose use includes "Versorgungsanlage" or "Umspannstation" already carries grid infrastructure, which is the scarce resource. For any other use — cemeteries, quarries, sports grounds, allotments — use assetfy_db_find_parcels_by_use, which takes a free nutzungsart. Same coverage and same caveats as that tool.

Parameter
ParameterTypBeschreibung
funktion string Substring of the specific use within industrial/commercial land, e.g. "Versorgungsanlage", "Umspannstation", "Lagerfläche", "Kläranlage". Omit to get every industrial/commercial parcel.
min_teilflaeche_m2 number Minimum size of the matching sub-area in m². The cadastre records the area per use, so a 200 m² "Versorgungsanlage" on a 90.000 m² parcel is a substation, not a meter cabinet. Relevant whenever the question implies a share of the parcel: "the use must cover at least 80 % of a parcel of 10.000 m² or more" means a sub-area of at least 8.000 m² (0.80 × 10.000), and passing it is what keeps a nationwide search inside the time limit — it prunes the candidate areas before any intersection runs (measured on NRW/Lagerfläche at 8.000 m²: 12.271 candidate areas down to 1.877). Without it the same question times out.
min_flaeche_m2 number Minimum total parcel area in m².
max_flaeche_m2 number
bundesland string Restrict to one state, e.g. "nrw", "niedersachsen". Omit to search every covered state.
zip string Restrict to a postcode area.
lat number
lon number
radius_m number Radius around lat/lon in metres. max. 50000
near_use string Only return parcels that have ANOTHER parcel with this use nearby, and report the distance to it. For a charging park, battery storage or data centre this is the decisive filter: the grid connection is the scarce resource, so search the sites AROUND a "Versorgungsanlage" rather than the substation itself. Distance is measured edge to edge, so a directly adjoining parcel reports 0 m. Results are sorted by that distance, nearest first.
near_max_distance_m number How far the near_use parcel may be, in metres. Only used together with near_use. Standard: 1000 · max. 5000
include_all_uses boolean Return the full list of uses per parcel instead of only the matching one. Off by default because parcels carry up to a dozen uses and the full lists crowd out the results themselves. Standard: false
limit integer Maximum number of parcels returned. Default 25 for a nationwide search (no bundesland, zip or lat/lon), 50 within a region. Higher values are meant for explicit requests for more results — every row lands in the conversation, and a nationwide search queries the states one after another. min. 1 · max. 200

Bahnflächen

Bahnstrecken aus dem Infrastrukturregister, Flurstücke entlang einer Strecke und Angebote mit Gleisanlagen.

Rail Lines

assetfy_db_rail_lines
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Railway lines (Bahnstrecken, Gleise) of the German federal rail network from the Infrastrukturregister (ISR) of DB InfraGO: route number (Streckennummer), sections (Streckenabschnitt von–bis, km), number of tracks (eingleisig / zweigleisig), line speed, electrification, traffic type (Personenverkehr, Güterverkehr, S-Bahn), line class, ETCS and TEN classification — plus stations and junctions (Betriebsstellen: Bahnhof, Haltepunkt, Abzweig, Überleitstelle) and, on request, bridges and tunnels and the line geometry. Search by Streckennummer, by a station or section name, by Landkreis, bbox or around a coordinate. Answers "welche Bahnstrecken verlaufen durch X", "wie ist die Strecke 6088 ausgebaut", "wo ist die Strecke eingleisig". For the parcels along a line — the railway land itself and whether there is room for another track — use assetfy_db_rail_corridor_parcels.

Parameter
ParameterTypBeschreibung
landkreis string Landkreis or kreisfreie Stadt by name ("Oberhavel", "Landkreis Oberhavel", "Frankfurt am Main") or 5-digit AGS ("12065"). The search area is its official boundary.
lat number
lon number
radius_m number Radius around lat/lon in metres. max. 50000
bbox number[] Bounding box [west, south, east, north] in WGS84 degrees — the way to say "north of Berlin": a box from the city boundary northwards. genau 4 Werte
strecke_nr integer DB route number (Streckennummer, VzG), e.g. 6088 Berlin–Stralsund, 3900 Main-Weser-Bahn.
name string Substring of a section or station name, e.g. "Oranienburg", "Bad Vilbel".
include_betriebsstellen boolean Return stations, junctions and crossovers in the search area or on the route. Standard: true
include_bauwerke boolean Return railway bridges and tunnels (as far as the ISR lists them — large structures only). Standard: false
include_geometry boolean Return each section as simplified GeoJSON (tolerance ~10 m). Large — only when the course of the line is needed. Standard: false
limit integer Standard: 50 · min. 1 · max. 200

Rail Corridor Parcels

assetfy_db_rail_corridor_parcels
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Parcels (Flurstücke) along railway lines whose actual use (tatsächliche Nutzung) is "Bahnverkehr" — the railway land, as a rule owned by DB InfraGO — measured ACROSS the track: how wide that land is beside the outermost existing track, on each side. Answers "welche Bahngrundstücke sind breit genug für ein weiteres Gleis", "wo passt ein Überholgleis / eine Kreuzungsstelle / ein drittes Gleis", "wo reicht der Bahnkorridor für einen Gleisausbau". The line is sampled every step_m with a cross-section (Querprofil); in each, the existing tracks come from the ISR and the free width is the contiguous Bahnverkehr land beyond the outer track. Returns (1) abschnitte: continuous stretches where the free width on one side stays ≥ required_free_width_m for at least min_run_length_m — the candidate sites — with side (e.g. "östlich der Gleise"), length, free width, nearest station and the parcels involved; and (2) flurstuecke: those parcels with Gemarkung/Flur/Flurstück, area, Bahnverkehr share, free width and length along the track. Needs a region (landkreis, lat/lon + radius_m or bbox) and/or strecke_nr; at most 80 km of line per call — split by strecke_nr if the region holds more (the refusal lists the lines). The use comes from the parcel attribute where the state has it, otherwise from the state’s own land-use dataset (NRW, Hessen, Brandenburg, Mecklenburg-Vorpommern, Baden-Württemberg, Berlin, Bayern) and only then live from the state ALKIS WFS; where none exists the parcels the track runs over are used instead, and the result says so (tn_quelle). This is a screening, not a plan: the ISR draws double track schematically 6 m apart (real 4.0–4.5 m, so the real free width is about 1 m larger), station tracks and sidings are not in the ISR, and terrain, embankments, masts and buildings are not considered — check candidates with assetfy_db_buildings, the planning tools and assetfy_get_aerial_image (the start and ende of an abschnitt span its bbox).

Parameter
ParameterTypBeschreibung
landkreis string Landkreis or kreisfreie Stadt by name ("Oberhavel", "Landkreis Oberhavel", "Frankfurt am Main") or 5-digit AGS ("12065"). The search area is its official boundary.
lat number
lon number
radius_m number Radius around lat/lon in metres. max. 50000
bbox number[] Bounding box [west, south, east, north] in WGS84 degrees — the way to say "north of Berlin": a box from the city boundary northwards. genau 4 Werte
strecke_nr integer DB route number (Streckennummer, VzG), e.g. 6088 Berlin–Stralsund, 3900 Main-Weser-Bahn.
required_free_width_m number Width needed beside the outermost existing track, from its centreline to the edge of the railway land. Default 8 m ≈ 4.50 m track spacing (EBO for station tracks and new construction) + roughly 3.5 m from the new track centreline to the edge of the formation incl. walkway. Raise it for embankments, drainage or two new tracks. Standard: 8 · min. 2 · max. 40
min_run_length_m number Minimum continuous length of a stretch. Default 750 m: an Überholgleis for the 740 m freight train needs a usable length of about 750 m, plus the turnouts at both ends. 0 lists every stretch. Standard: 750 · min. 0 · max. 5000
tn_min_share number Minimum share of the parcel area with use Bahnverkehr for the parcel to count as railway land. Railway parcels often carry Gehölz or Unland on embankments besides Bahnverkehr. Standard: 0.2 · min. 0 · max. 1
step_m number Spacing of the cross-sections along the line. Standard: 25 · min. 10 · max. 100
search_width_m number Half length of each cross-section, measured from the line. Free widths reaching this edge are reported as "at least". Standard: 40 · min. 15 · max. 80
limit integer Maximum number of parcels returned. Standard: 50 · min. 1 · max. 200

Listings with Railway Land

assetfy_db_rail_listings
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Listings FOR SALE (zum Verkauf) — Grundstücke, Gewerbeobjekte, Häuser and BVVG land from the Assetfy listing stock (real_estates_*) — that involve railway land: alte Gleisanlagen, Gleise, Gleisanschluss, Anschlussgleis, Bahngelände, Bahnbrache, ehemaliger Güterbahnhof, Bahntrasse, Bahndamm, Stellwerk, Lokschuppen. This is the tool that joins the property market with railway and cadastral data; it answers "Grundstücke zum Verkauf mit alten Gleisanlagen", "Gewerbefläche mit Gleisanschluss kaufen", "ehemaliges Bahngelände zu verkaufen". Every hit carries its evidence: (1) the listing names railway facilities — the title, for BVVG also the description; "Bahnhofsnähe", "Bahnhofstraße" or "S-Bahn" do not count; (2) the parcel (Flurstück) under the listing coordinate has the actual use (tatsächliche Nutzung) Bahnverkehr — only where the coordinate is not a locality geocode shared with other listings, and checked against the advertised plot area; (3) the nearest operating line from the Infrastrukturregister (ISR) of DB InfraGO — railway land without an operating line within 100 m points to disused, dismantled, siding or station tracks, and the NRW cadastre adds the state "außer Betrieb, stillgelegt"; (4) where the listing has an exact address with house number (as for the exact markers on the Assetfy map, but not when the geocoder put a business or institution in front of the street — that is the address of a POI, not of the property), its distance to the nearest operating line counts by itself: up to 100 m "stark", up to 500 m "mittel" — proximity to a line, not proof of tracks on the plot. evidenz is "stark", "mittel" or "schwach"; "schwach" — a railway parcel at the coordinate that is much larger than the listing or cannot be compared because the listing states no plot area (usually a geocode on the neighbouring track), or a railway term only in a long BVVG description (usually the transport connection) — is left out unless include_weak is set. Nationwide by default, or within a Landkreis, bbox or radius. The cadastral check runs where the state cadastre in the database carries the actual use; elsewhere only the listing text counts, and the result lists which states were checked. No source says whether tracks are still on site — confirm with the exposé and the aerial image (assetfy_get_aerial_image at the listing coordinate). For railway land that is not on the market use assetfy_db_rail_corridor_parcels or assetfy_db_find_parcels_by_use with nutzungsart "Bahnverkehr".

Parameter
ParameterTypBeschreibung
types string[] Markets to search: landbuy (Grundstück), officebuy (Gewerbe/Büro), agriculture (BVVG land), housebuy (Haus). Apartments and garages have no plot of their own to check. Standard: ["landbuy","officebuy","agriculture"]
landkreis string Landkreis or kreisfreie Stadt by name ("Oberhavel", "Landkreis Oberhavel", "Frankfurt am Main") or 5-digit AGS ("12065"). The search area is its official boundary.
lat number
lon number
radius_m number Radius around lat/lon in metres. max. 50000
bbox number[] Bounding box [west, south, east, north] in WGS84 degrees — the way to say "north of Berlin": a box from the city boundary northwards. genau 4 Werte
evidence "any" | "text" | "cadastre" | "proximity" Which evidence a hit must have: text = the listing names railway facilities, cadastre = railway parcel under the listing coordinate, proximity = exact address within 500 m of an operating line, any = any of them. Standard: "any"
include_weak boolean Also return hits whose only evidence is weak: a railway parcel at the coordinate that is much larger than the listing or has no plot area to compare (mostly geocodes on a neighbouring track, occasionally a part of railway land being sold), or a railway term only in a BVVG description. Standard: false
price_max_eur number
plot_area_min_m2 number Minimum plot area of the listing (Grundstücksfläche).
plot_area_max_m2 number
limit integer Standard: 50 · min. 1 · max. 200

Immobilienangebote

Kaufangebote finden, bewerten und einem Flurstück zuordnen. Die Angebote liegen im Assetfy-Bestand; die Tools rufen kein Immobilienportal auf.

Search Property Candidates

assetfy_search_property_candidates
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Search Assetfy real estate listings around named places and rank them against structured criteria (price, plot and living area, rooms) — the tool for "finde mir eine Wohnung/ein Haus/ein Grundstück in X für unter Y". Takes place names or coordinates plus those criteria and returns a scored shortlist. The free-text query is only echoed back: it neither filters nor ranks, so words like "Gleisanschluss" or "Altbau" in it change nothing. Needs locations or center_points — without a place use assetfy_db_search_listings for the whole listing stock, and assetfy_db_rail_listings for listings involving railway land (alte Gleisanlagen, Gleisanschluss, Bahngelände). Covers listings for sale (Kaufangebote, Verkaufsangebote, Immobilien, Objekte): Wohnung/apartmentbuy, Haus/housebuy, Grundstück/Bauplatz/landbuy, Garage/Stellplatz/garagebuy, Gewerbe/Büro/officebuy, Zwangsversteigerung/official_foreclosure. This searches MARKETED PROPERTIES, not the cadastre: for parcels by Gemarkung/Flur/Flurstücksnummer use assetfy_db_find_parcels, and for parcels by their recorded use use assetfy_db_find_parcels_by_use — neither of those knows anything about prices or listings. Use assetfy_search_real_estates instead when you already have a coordinate and just want what is nearby, without ranking.

Parameter
ParameterTypBeschreibung
query string Original user search text. Echoed back in the response only — it neither filters nor ranks; express every criterion through the structured fields.
locations string[] Place names or postal codes, e.g. "München", "Rotenburg", "50667", "Berlin-Biesdorf". Resolved against the German postcode gazetteer, so any German town works; the search radius is derived from how large the place actually is.
center_points object[] Explicit search centers. Overrides or extends resolved locations.
types string[] Standard: ["housebuy","landbuy"]
price_max_eur number
plot_area_min_m2 number
plot_area_max_m2 number
living_area_min_m2 number
living_area_max_m2 number
rooms_min number
rooms_max number
max_results integer Standard: 12 · min. 1 · max. 50
enrich_top_n integer Standard: 5 · min. 0 · max. 10

Search Real Estate Listings

assetfy_search_real_estates
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Find real estate listings near a coordinate — Immobilien, Wohnungen, Häuser, Grundstücke, Garagen und Gewerbeobjekte zum Kauf (Kaufangebote, Verkaufsangebote, Inserate, Exposés) in der Umgebung eines Punktes. Returns the listings with price, area, rooms and platform URL. Types are apartmentbuy (Eigentumswohnung), housebuy (Haus), landbuy (Grundstück, Bauplatz), garagebuy (Garage, Stellplatz), officebuy (Gewerbe, Büro). Requires lat/lon and returns by distance, unranked — when the user describes what they want in words or names a town instead of a coordinate, use assetfy_search_property_candidates, which resolves places and scores the results. This tool covers the PROPERTY MARKET, not the cadastre: it does not find parcels by Gemarkung/Flur/Flurstücksnummer (assetfy_db_find_parcels) nor by their recorded use such as Industrie or Friedhof (assetfy_db_find_parcels_by_use), and those cadastral tools carry no prices.

Parameter
ParameterTypBeschreibung
lat Pflicht number
lon Pflicht number
limit integer Standard: 20 · min. 1 · max. 100
maxDistance number Maximum distance in km.
types string[] Assetfy real estate types, e.g. housebuy, landbuy.

Beispiel: Welche Wohnungen werden in der Nähe von 52.3906, 9.7517 in Hannover zum Kauf angeboten?

Search Listings

assetfy_db_search_listings
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Search real estate listings (Immobilien, Angebote, Inserate, Exposés) directly in the database with structured filters — the tool for "vermietete Wohnungen mit positivem Cashflow", "Zwangsversteigerungen im Raum X", "Garagen unter 20.000 €", "BVVG-Flächen", "Gewerbeobjekte", "Grundstücke ab 800 m²". Pick the market with `type`: housebuy (Haus), apartmentbuy (Eigentumswohnung), landbuy (Grundstück, Bauplatz), garagebuy (Garage, Stellplatz), officebuy (Gewerbe, Büro), agriculture (BVVG-Flächen, landwirtschaftliche Flächen der Bodenverwertungs- und -verwaltungs GmbH). Boolean filters cover the special cases: foreclosure for Zwangsversteigerungen, rented for vermietete Kapitalanlagen, private_offer for Angebote ohne Makler, price_reduced, leasehold for Erbbaurecht. Cashflow, gross yield and return on equity are returned for every hit where the platform reported them. Not every filter exists for every type — BVVG parcels carry no foreclosure or rented flag, only houses and apartments have rooms — and any filter that cannot apply is reported back in ignored_filters instead of being silently dropped. For prices per m² across a whole postcode area rather than single listings, use assetfy_db_price_heatmap; for cadastral parcels rather than marketed properties, use assetfy_db_find_parcels. For listings involving railway land — alte Gleisanlagen, Gleisanschluss, Bahngelände — use assetfy_db_rail_listings, which joins them with the cadastre and the rail network.

Parameter
ParameterTypBeschreibung
type "housebuy" | "apartmentbuy" | "landbuy" | "garagebuy" | "officebuy" | "agriculture" Which market to search. "agriculture" is the BVVG stock of agricultural land. Standard: "housebuy"
foreclosure boolean Only Zwangsversteigerungen (true) or only ordinary sales (false).
rented boolean Only let properties (vermietet) — the Kapitalanlage case, combine with min_cashflow_eur.
private_offer boolean Only offers from private sellers, i.e. without an agent (provisionsfrei).
price_reduced boolean Only listings whose price was reduced.
leasehold boolean Erbbaurecht: true for leasehold only, false to exclude it.
price_min_eur number
price_max_eur number
price_per_sqm_max number Maximum asking price per m².
living_area_min_m2 number Minimum living area (Wohnfläche). Not available for landbuy.
living_area_max_m2 number
plot_area_min_m2 number Minimum plot area (Grundstücksfläche). Available for housebuy, landbuy and agriculture.
plot_area_max_m2 number
rooms_min number Only housebuy and apartmentbuy carry a room count.
rooms_max number
construction_year_min number Earliest year of construction (Baujahr).
min_cashflow_eur number Minimum monthly cashflow as reported by the platform. May be negative; pass 0 to require a non-negative cashflow.
min_gross_return_pct number Minimum current gross yield (Bruttorendite) in percent.
zip string Exact postal code.
town string Town name, matched as a substring.
lat number
lon number
radius_km number Radius around lat/lon in kilometres.
only_active boolean Restrict to listings still online. Set false to include withdrawn ones. Standard: true
exclude_implausible boolean Drop listings whose price or cashflow is obviously wrong — a small share of the stock carries values off by a factor of 1000, and they dominate any sort by price or cashflow. Set false to inspect them. Standard: true
sort "newest" | "price_asc" | "price_desc" | "price_per_sqm_asc" | "cashflow_desc" | "area_desc" Standard: "newest"
include_description boolean Add the full exposé description text (Beschreibung) of every hit, typically 2–4k characters each — keep limit small (≤ 20) when setting it. Use it when the answer depends on details only the free text carries (outbuildings, Einliegerwohnung, renovation, rental situation, Denkmalschutz). For one listing, assetfy_db_listing_details returns the text too. Standard: false
limit integer Standard: 25 · min. 1 · max. 200

Get Real Estate Listing

assetfy_get_real_estate
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Retrieve one real estate listing (Immobilien-Inserat, Exposé, Angebot) from the Assetfy listing database by its platform URL, e.g. an ImmobilienScout24, Immowelt or Kleinanzeigen link — price, area, rooms, year built, condition, coordinates, images and the full exposé description text (expose.description) where the portal published one. The URL is only the lookup key: the tool never contacts the portal or a portal API, it calls the Assetfy API (GET https://assetfy.com/api/v1/real-estates/by-url), which searches the listings Assetfy has already collected. A listing that is not in that stock returns success false with the reason and the way to match it by its exposé facts instead.

Parameter
ParameterTypBeschreibung
url Pflicht string Platform URL of the listing, e.g. an ImmobilienScout24 exposé link.

Listing Details

assetfy_db_listing_details
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

All stored exposé attributes for a listing URL, including the ones the HTTP API drops: number of floors, construction year, condition, cellar, building type, private/agent offer — plus the platform image URLs. Use it when ZIP + plot area leave several candidate parcels: floors and construction year discriminate, and the images can be inspected for the building type described in the title. Also returns the exposé description text (Beschreibung) where the portal published one — outbuildings, renovation state, rental status, heating and plot details often appear only there. Not available for Zwangsversteigerungen.

Parameter
ParameterTypBeschreibung
url Pflicht string Platform URL of the listing, e.g. an ImmobilienScout24 exposé link.
include_images boolean Return the image URLs. They are publicly reachable and can be passed to a vision model. Standard: true

Evaluate Property Candidate

assetfy_evaluate_candidate
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Score a real estate candidate (Immobilienangebot, Exposé) against buyer criteria — Kaufpreis, Grundstücksgröße, Wohnfläche, Zimmer — and optionally enrich it with parcel data (Flurstück, Bodenrichtwert).

Parameter
ParameterTypBeschreibung
candidate Pflicht object Candidate object from search_real_estates or search_property_candidates.
criteria object Structured target criteria.
enrich_parcel boolean Standard: true

Resolve Listing Parcel

assetfy_resolve_listing_parcel
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Resolve a real estate listing (Immobilien-Inserat, Exposé) to the cadastral parcel (Flurstück) at the listing's coordinate and assess whether that match is plausible. Input is the listing's platform URL, e.g. an ImmobilienScout24, Immowelt or Kleinanzeigen link. The URL is only the lookup key — the tool never contacts the portal or a portal API. It calls the Assetfy API — GET https://assetfy.com/api/v1/real-estates/by-url for the listing (same lookup as assetfy_get_real_estate, so the listing must be in the Assetfy listing stock), then /api/v1/flurstueck and the /api/v1/grundstueck/{gml_id} endpoints for the parcel. The tool reads the listing coordinate, looks up the Flurstück there in the ALKIS cadastre and adds its parcel profile: area, GFZ/GRZ potential, Bodenrichtwert, buildings and actual land use. match_assessment returns status plausible_match, needs_review, unlikely_match or no_match with a confidence, from comparing the listed plot area with the parcel area and a house listing with the buildings on the parcel. Portal coordinates are often only approximate — when the status is not plausible_match, use assetfy_match_listing_to_parcel, which searches by ZIP and plot area instead.

Parameter
ParameterTypBeschreibung
url Pflicht string Platform URL of the listing, e.g. an ImmobilienScout24 exposé link.
include_geometry boolean Keep the raw geometries in the parcel profile: parcel outline and building footprints as GeoJSON. Off by default, because they are large and rarely needed for an answer. Standard: false

Match Listing to Parcel

assetfy_match_listing_to_parcel
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Match a real estate listing to the most plausible cadastral parcel and return the full development fact sheet for it. Give either a listing_url or the exposé facts (zip, plot area, living area, floors, building type). Step a) searches the cadastre for parcels with that plot area inside the ZIP polygon — exact area first, then a small tolerance, matched geometrically and never by town name. Coordinates are optional. Step b) runs only when a) leaves more than one candidate: it compares each candidate's buildings against the exposé, ranks them and explains why the others are ruled out. When several candidates still fit, the result says so — confirming the address from photos, public sources or the provider is then up to the caller.

Parameter
ParameterTypBeschreibung
listing_url string Platform URL. Coordinates, plot area and living area are taken from the listing when present.
zip string
plot_area_m2 number Plot area from the exposé, matched exactly against the cadastre.
living_area_m2 number Living area from the exposé, used for the building plausibility check.
floors number Number of floors / Etagen from the exposé.
building_type string e.g. Einfamilienhaus, EFH, Mehrfamilienhaus, unbebaut.
garden_area_m2 number Garden area from the exposé, if stated.
price_eur number Asking price, used for the land value comparison.
lat number
lon number
location string Known location name if no coordinates are available.

Price Heatmap

assetfy_db_price_heatmap
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Asking prices per m² for a postcode area — the data behind the price heatmap on the Assetfy map. Answers "was kostet der Quadratmeter in X", "Preisniveau PLZ Y", "ist das Angebot teuer für die Gegend": average, minimum and maximum €/m² plus the number of listings, separately for Häuser, Wohnungen, Grundstücke and Gewerbe, across roughly 8.000 postcode areas. Based on active portal listings from the last nine months with outliers removed, so it reflects what sellers currently ask, not what buyers paid and not the official land value. For the official Bodenrichtwert of the Gutachterausschuss use assetfy_db_land_values; for the individual listings behind these figures use assetfy_db_search_listings. Requires zip, ort or a coordinate.

Parameter
ParameterTypBeschreibung
zip string Exact postal code, e.g. "50667".
ort string Town name, matched as a substring.
lat number With lon: returns the postcode area containing this coordinate.
lon number
limit integer Standard: 25 · min. 1 · max. 200

Luftbild

Amtliche Orthofotos (DOP20, in NRW und Bremen DOP10) der Landesvermessungsämter, live abgerufen.

Aerial Image (Luftbild DOP20)

assetfy_get_aerial_image
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Aerial image (Luftbild, Luftaufnahme, Orthofoto — what users often call a Satellitenbild; digitales Orthophoto DOP20 — 20 cm ground resolution, Bremen and Nordrhein-Westfalen 10 cm) of a location in Germany, fetched live from the official WMS of the state survey office — the imagery of the aerial layer on the Assetfy map. Returns the image itself (JPEG, north up, true to scale) together with its footprint: bbox in WGS84, metres per pixel, state and the required attribution. Use it to check the results of the other tools by eye: whether tracks still lie on railway land from assetfy_db_rail_corridor_parcels or assetfy_db_rail_listings, whether the free strip beside the track is really free (embankment, trees, buildings, masts, roads, station tracks), whether a parcel is built on, what a site looks like. Give either lat/lon with size_m — a square centred on the coordinate — or a bbox [west, south, east, north], e.g. spanned by start and ende of a corridor abschnitt; a bbox is padded by 10 % (at least 25 m) and widened to an aspect ratio of at most 2:1 so the surroundings stay visible. Up to 3000 m edge length per image — split longer stretches. Keep size_m near 100–300 m to see tracks, masts and small buildings; above about 1000 m only the coarse layout remains. Parcel boundaries are not drawn in: relate them through the bbox. The imagery is the state's current flight, as a rule one to three years old; the service supplies no capture date.

Parameter
ParameterTypBeschreibung
lat number Latitude of the image centre (WGS84).
lon number Longitude of the image centre (WGS84).
size_m number Edge length of the square image on the ground, in metres. Ignored with bbox. Standard: 250 · min. 20 · max. 3000
bbox number[] Area [west, south, east, north] in WGS84 degrees instead of lat/lon — e.g. min/max of start and ende of a corridor abschnitt. Longest edge at most 3000 m. genau 4 Werte
width_px integer Pixels along the longer edge of the image. Standard: 1024 · min. 256 · max. 1536

Beispiel: Zeig mir ein Luftbild von 50.62618, 6.94504 in Rheinbach.

Datenstand & Abdeckung

Welche Daten es je Bundesland gibt und wie aktuell sie sind.

Get Data Coverage

assetfy_get_data_coverage
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Which data this server covers, per German state (Bundesland): Liegenschaftskataster/ALKIS (Flurstücke, Gebäude, tatsächliche Nutzung), Bebauungspläne, Bodenrichtwerte, Luftbilder and real estate listings.

Parameter
ParameterTypBeschreibung
scope string Standard: "production-api"

Data Freshness

assetfy_db_data_freshness
  • Nur lesen
  • Ändert und löscht nichts
  • Idempotent

Which datasets exist in the connected database and how current they are: row counts per category and Bundesland plus the latest import log entries. Mirrors assetfy.com/datenaktualitaet.

Parameter
ParameterTypBeschreibung
category "flurstuecke" | "gebaeude" | "gebaeude_lod2" | "bodenrichtwerte" | "bplaene" | "fnp" | "alle" Standard: "alle"

Mein Assetfy-Konto

Gespeicherte Orte und Favoriten des angemeldeten Nutzers lesen und neue anlegen. Es gibt kein Tool, das etwas ändert oder löscht.

My Places

assetfy_my_places
  • Nur lesen
  • Liest das eigene Konto
  • Ändert und löscht nichts
  • Idempotent

The signed-in user's own map markers ("Meine Orte") with their titles and notes — places the user pinned on the Assetfy map or saved with assetfy_my_places_add. Not the same as assetfy_my_favorites: favourites are saved listings, places are free coordinates. Use it when the user asks about "meine Orte", "meine Marker", what they noted at a place, or before saving a place, to see whether it is already there. Optional lat/lon + radius_m restricts to markers near a point. Identity comes from the access token; there is no way to query another account.

Parameter
ParameterTypBeschreibung
lat number With lon and radius_m: only markers near this point.
lon number
radius_m number Standard: 250 · min. 1 · max. 5000
limit integer Standard: 50 · min. 1 · max. 200

Beispiel: Welche Orte habe ich gespeichert?

My Favorites

assetfy_my_favorites
  • Nur lesen
  • Liest das eigene Konto
  • Ändert und löscht nichts
  • Idempotent

The signed-in user's saved properties ("Favoriten") with their private notes, enriched with the listing data. The notes are the user's own assessment of a property and exist nowhere else — use them when the user asks about "my" properties, what they noted, or wants their saved properties compared. To save a listing as a favourite use assetfy_my_favorites_add. Identity comes from the access token; there is no way to query another account.

Parameter
ParameterTypBeschreibung
limit integer Standard: 50 · min. 1 · max. 200
with_notes_only boolean Only return favourites the user wrote a note on. Standard: false
include_description boolean Add the full exposé description text of each listing (typically 2–4k characters each). Set it when comparing or assessing the saved properties; for a single listing assetfy_db_listing_details returns it as well. Standard: false

Beispiel: Welche Angebote habe ich als Favoriten gespeichert, und was habe ich dazu notiert?

Add to My Places

assetfy_my_places_add
  • Speichert im eigenen Konto · braucht mcp:write
  • Ändert und löscht nichts
  • Idempotent

Save a place with an optional note to the signed-in user's "Meine Orte" on the Assetfy map — a red marker the user sees in their own account. Writes only to the caller's own account and never changes or deletes anything. It is meant for explicit requests from the user to save something. Typical requests: "merk dir den Ort", "leg einen Marker an", "notier dir beim Flurstück …". Give lat/lon, or a gml_id — the marker is then set on the centre of that Flurstück. The title is what the marker is labelled with: use the Lagebezeichnung and/or the Flurstück (e.g. "Flurstück 377, Hauptstraße 12, Neustadt a. d. W."). The note is the user's text, verbatim. Calling it twice with identical input does not create a duplicate. For a listing (an exposé from a portal) use assetfy_my_favorites_add instead. The result carries assetfy_url, which opens the saved marker on the map.

Parameter
ParameterTypBeschreibung
title Pflicht string Label of the marker. Required. max. 1000 Zeichen
note string Optional note, verbatim as the user phrased it. Line breaks are kept. max. 10000 Zeichen
lat number Latitude (WGS84). Give lat and lon, or gml_id.
lon number Longitude (WGS84).
gml_id string ALKIS gml_id of a Flurstück. Used for the coordinate when lat/lon are missing, and selects the parcel in the returned link.

Beispiel: Speichere Flurstück 44/11 in Hannover-List in meinen Orten mit der Notiz „Besichtigung im Oktober“.

Add to My Favorites

assetfy_my_favorites_add
  • Speichert im eigenen Konto · braucht mcp:write
  • Ändert und löscht nichts
  • Idempotent

Save a listing to the signed-in user's favourites ("Favoriten", the heart on the Assetfy map), optionally with a note. The counterpart of assetfy_my_favorites. Writes only to the caller's own account. It is meant for explicit requests from the user to save something. Typical requests: "merk dir das Angebot", "pack das in meine Favoriten", "notier dir zu dem Exposé …". Identify the listing by listing_url — the portal link (platform_url) that the listing tools return or the user pasted — or by real_estate_id + real_estate_type as assetfy_my_favorites returns them. Only listings in the Assetfy database can be saved; an unknown URL is reported, not stored. An existing favourite is kept: a new note is APPENDED to the user's note, never replaces it, and an identical note is not added twice. For a free location without a listing use assetfy_my_places_add.

Parameter
ParameterTypBeschreibung
listing_url string Portal URL of the listing, e.g. an ImmobilienScout24 exposé link. Preferred.
real_estate_id string Internal listing id, together with real_estate_type.
real_estate_type string e.g. "de_real_estates_housebuy" or "de_zwangsversteigerungen".
note string Optional note, verbatim as the user phrased it. Line breaks are kept. max. 10000 Zeichen

Beispiel-Prompts

Geprüft gegen die Produktionsdaten.

Ergebnisse & Karten-Links

Flurstücke und Angebote in den Ergebnissen tragen assetfy_url, einen Link auf das Ergebnis in der Assetfy-Karte. Er zeigt, was eine Textantwort nicht zeigen kann: den Umriss des Flurstücks, den Bebauungsplan, die Gebäude und das Luftbild im räumlichen Zusammenhang.

In Bayern ist die Karte der einzige Weg zu sehen, auf welchem Flurstück ein Gebäude steht: Das Land gibt sein Kataster nicht als Daten frei, nur als Kartenbild (Parzellarkarte). Die Flurstücksgrenzen gibt es deshalb auf der Karte, aber nicht in den Tool-Ergebnissen.

Wo ein Ergebnis eine Einschätzung trägt — etwa die Evidenz eines Treffers, die Genauigkeit einer Koordinate oder einen Flächenabgleich — steht sie in der Zeile selbst. Bebaubarkeit und Potenzial sind eine datenbasierte Ersteinschätzung; verbindlich sind der geltende Bebauungsplan oder ein Bauvorbescheid.

Datenschutz & Sicherheit

  • Was der Server sieht: nur die Tool-Aufrufe des Assistenten mit ihren Parametern. Die Unterhaltung selbst, Dateien oder der Verlauf erreichen den Server nicht.
  • Lesen: Die lesenden Tools greifen über eine Datenbankrolle ohne Schreibrechte zu.
  • Schreiben: Die beiden Speicher-Tools legen nur im Konto des angemeldeten Nutzers an und brauchen die Berechtigung mcp:write, die der Nutzer bei der Einwilligung ausdrücklich erteilt. Sie ändern und löschen nichts. Die Nutzer-ID kommt aus dem Access-Token, nie aus den Parametern; ein anderes Konto ist nicht erreichbar.
  • Protokollierung: Für Betrieb und Fehleranalyse protokollieren wir je Tool-Aufruf Tool-Name, Aufruf-Parameter (gekürzt auf 1.000 Zeichen), Dauer, Antwortgröße, Fehler, die Client-ID und eine pseudonyme Nutzerkennung (gekürzter SHA-256-Hash). Die Protokolle liegen bei unserem Monitoring-Dienst Dash0.
  • Tokens: Access-Tokens werden bei jedem Aufruf gegen den Autorisierungsserver geprüft (höchstens 60 Sekunden zwischengespeichert). Ein Widerruf im Konto greift damit spätestens nach einer Minute.

Einzelheiten: Datenschutzerklärung · Impressum

Fehlerbehebung

Nach dem Login erscheint „AI MCP-Zugang nicht freigeschaltet“.
Das Konto hat noch keinen MCP-Zugang. Zugang anfragen unter hallo@assetfy.com; danach die Verbindung erneut herstellen.
Die Tools antworten nicht mehr oder der Assistent meldet einen Autorisierungsfehler.
Der Zugriff wurde widerrufen oder das Token ist abgelaufen. Den Connector im Assistenten trennen und neu verbinden.
Die Speicher-Tools fehlen.
Bei der Einwilligung wurde kein Schreibzugriff erteilt. Den Connector trennen, neu verbinden und auf der Einwilligungsseite das Häkchen für Schreibzugriff setzen.
Eine Flurstückssuche in Bayern liefert keine Treffer.
Bayern gibt sein Kataster nicht als Daten frei. Das Ergebnis erklärt, was dort stattdessen verfügbar ist; die Flurstücksgrenzen zeigt der Karten-Link.
Eine bundesweite Suche dauert lange oder bricht ab.
Suchen über alle Länder laufen Land für Land. Die Frage auf ein Bundesland, einen Landkreis oder einen Umkreis einschränken.
Ein Angebot per Portal-Link wird nicht gefunden.
Die Angebots-Tools durchsuchen den Assetfy-Bestand und rufen kein Portal auf. Ist ein Angebot nicht im Bestand, meldet das Tool das ausdrücklich.

Datenquellen & Lizenzen

  • Kataster, Gebäude, 3D-Gebäudemodelle, Bodenrichtwerte und Luftbilder: Vermessungs- und Geoinformationsverwaltungen der Länder (© GeoBasis-DE / jeweilige Landesbehörde; Datenlizenz Deutschland dl-de/by-2-0 bzw. dl-de/zero-2-0, CC BY 4.0). Jedes Luftbild nennt die erforderliche Namensnennung.
  • Kataster Österreich: Bundesamt für Eich- und Vermessungswesen (BEV).
  • Bebauungspläne: Planregister der Länder und Planportale der Gemeinden.
  • Bahnstrecken: Infrastrukturregister der DB InfraGO.
  • Autobahn-Anschlussstellen: © OpenStreetMap-Mitwirkende (ODbL).
  • Immobilienangebote: von Assetfy erfasster Angebotsbestand.

Kontakt

Fragen, Zugang und Support: hallo@assetfy.com · assetfy.com