Somantic – German Real Estate Search
Search German property listings and estimate what any German address is worth.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"immobiliensuche": {
"url": "https://www.somantic.net/api/mcp/"
}
}
}远程端点
https://www.somantic.net/api/mcp/streamable-http它能做什么
工具清单
工具(3)
🟢search_listings(q, transaction, property, price_min, price_max, ...)
Search current real-estate listings in Germany, newest first. Returns listings with facts, Somantic's valuation (somantic_valuation_eur, price_vs_valuation_pct: negative means priced below it) and source_url, the original listing on the portal that carries the offer. `last_seen` is when Somantic last confirmed the offer as online. Listings no longer confirmed are usually removed from results after 3 days. One offer is often advertised on several portals at once. Those copies are collapsed to the newest, so a page can hold fewer than `per_page` listings and `total` counts the copies rather than the offers.
输入模式
{
"type": "object",
"properties": {
"q": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Where — a city (\"München\", \"Frankfurt am Main\") or a postcode (\"80331\")."
},
"transaction": {
"default": "kaufen",
"enum": [
"kaufen",
"mieten"
],
"type": "string",
"description": "\"kaufen\" to buy, \"mieten\" to rent."
},
"property": {
"default": "wohnung",
"enum": [
"wohnung",
"haus"
],
"type": "string",
"description": "\"wohnung\" (apartment) or \"haus\" (house)."
},
"price_min": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum price in EUR; monthly cold rent when transaction is \"mieten\"."
},
"price_max": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Maximum price in EUR; monthly cold rent when transaction is \"mieten\"."
},
"price_per_sqm_min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum price per m² in EUR; cold rent per m² when\ntransaction is \"mieten\"."
},
"price_per_sqm_max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Maximum price per m² in EUR; cold rent per m² when\ntransaction is \"mieten\"."
},
"size_min": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum living space in m²."
},
"size_max": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Maximum living space in m²."
},
"rooms_min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum number of rooms (German count, e.g. 2.5)."
},
"rooms_max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Maximum number of rooms."
},
"year_min": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Built in or after this year."
},
"year_max": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Built before this year."
},
"roi_min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum gross rental yield in percent, e.g. 5 for 5 %. Purchases only."
},
"price_below_market": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Only listings priced below Somantic's valuation."
},
"price_change": {
"anyOf": [
{
"enum": [
"reduced",
"increased",
"any"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only listings whose price changed while listed: \"reduced\",\n\"increased\" or \"any\"."
},
"vacant": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Only listings that are vacant (bezugsfrei)."
},
"renovation_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Only listings that need renovation (renovierungsbedürftig)."
},
"exclude_foreclosures": {
"default": false,
"type": "boolean",
"description": "Leave out foreclosure auctions (Zwangsversteigerungen)."
},
"exclude_erbbaurecht": {
"default": false,
"type": "boolean",
"description": "Leave out leasehold (Erbbaurecht) properties."
},
"features": {
"anyOf": [
{
"items": {
"enum": [
"balcony",
"garden",
"elevator",
"parking",
"kitchen",
"new_building"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Required amenities. \"new_building\" keeps only new builds\n(Neubau, Erstbezug, or built within the last 3 years)."
},
"energy_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Energy efficiency classes, e.g. \"A+,A,B\"."
},
"page": {
"default": 1,
"type": "integer",
"description": "Result page, starting at 1."
},
"per_page": {
"default": 20,
"type": "integer",
"description": "Results per page, at most 50."
}
},
"additionalProperties": false
}输出模式
{
"type": "object",
"additionalProperties": true
}🟢get_listing(id, property)
Details of one listing: facts, Somantic's valuation, and the link to the original. No description text: it is the advertiser's, at source_url. A withdrawn (inactive) listing is not returned: the call fails with "No listing", since the offer no longer exists. `image_urls` is always empty: Somantic passes on no photos. They are the advertiser's, at source_url.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The listing id from search_listings."
},
"property": {
"anyOf": [
{
"enum": [
"wohnung",
"haus"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "\"wohnung\" or \"haus\" if known; both are tried otherwise."
}
},
"required": [
"id"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"additionalProperties": true
}🟢estimate_value(street, postcode, city, living_space_sqm, property, ...)
Estimate what a German address is worth to buy and to rent. Works for any address, listed or not. The estimate comes from comparable listings around it, so `confidence` and `sample_size` say how much to trust it - a thin sample means a wide, weakly supported band. Returns `estimate` (point values, ranges and €/m² for price and rent) and `confidence`. A point estimate is absent when too few comparables back it; the €/m² band and `sample_size` still say what was found. This is a model output, not an appraisal, and no comparable listing is reproduced in it.
输入模式
{
"type": "object",
"properties": {
"street": {
"type": "string",
"description": "Street and house number, e.g. \"Marienplatz 1\". Required: without\nit the answer would silently describe the middle of the postcode."
},
"postcode": {
"type": "string",
"description": "Five-digit German postcode, e.g. \"80331\"."
},
"city": {
"type": "string",
"description": "City name, e.g. \"München\"."
},
"living_space_sqm": {
"type": "number",
"description": "Living area in m²."
},
"property": {
"default": "wohnung",
"enum": [
"wohnung",
"haus"
],
"type": "string",
"description": "\"wohnung\" (apartment) or \"haus\" (house)."
},
"rooms": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of rooms (German count, e.g. 2.5). Improves the estimate."
},
"year_built": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Year of construction. Improves the estimate."
},
"property_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A narrower type such as \"reihenhaus\" or \"etagenwohnung\";\nan unknown value is refused with the list of accepted ones."
},
"floor": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Floor the flat is on."
},
"features": {
"anyOf": [
{
"items": {
"enum": [
"balcony",
"basement",
"elevator",
"garden",
"kitchen",
"parking",
"terrace",
"new_building"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Equipment the property has. Only what it *has* - a feature\nleft out is treated as unknown, not as absent."
},
"rented": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "True values it as sold with a sitting tenant, False as sold\nbezugsfrei - in Germany the same flat is worth markedly less with\none. Leave it out unless you know which it is."
}
},
"required": [
"street",
"postcode",
"city",
"living_space_sqm"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"additionalProperties": true
}社区
证据