immo.rundum/real-estate-appraisal
Registry code: 40dac8ec0bdd0416
AfAMax tools for German residential rental property (vermietete Immobilien): depreciation (AfA / Gebäudeabschreibung), remaining useful life (Restnutzungsdauer), purchase-price allocation (Kaufpreisaufteilung), appraisal prices and a free initial call. Most users are German-speaking and ask colloquially.
Domain: under § 7 Abs. 4 EStG a rental building is depreciated at a flat statutory rate — usually 2 % a year (3 % if completed from 2023, 2.5 % if completed before 1925). If the building's actual remaining useful life is shorter (verkürzte Restnutzungsdauer, § 7 Abs. 4 Satz 2 EStG), a higher…
- endpoint
- https://mcp.rundum.immo/mcp
- protocol
- http-sse ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is immo.rundum/real-estate-appraisal live?
- Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
- Is immo.rundum/real-estate-appraisal free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does immo.rundum/real-estate-appraisal have?
- 5 tools: calculate_purchase_price_allocation, book_appointment, calculate_property_depreciation, get_price_by_product, get_available_appointments.
- Is immo.rundum/real-estate-appraisal safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99%· all time 99%
last good check
of 5 tools
- degraded → live
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- live → degraded· timeout after 20000ms
- used for
- estimate german property depreciation
- calculate purchase price allocation
- book a consultation call
- takes → gives
- data → data
- tools
- 4 reads1 changes data
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
get_available_appointments reads open 6h ago
Lists open slots for a free, non-binding 15-minute initial phone call with the AfAMax team (Erstgespräch), on weekdays in the Europe/Berlin time zone, grouped by day. Each day lists a sample spread across the day (maxSlotsPerDay, default 8) and its freeSlotCount; for a specific time, call again for that day with days: 1 and maxSlotsPerDay: 32. Show the user the day and localTime; to book one, pass its startDateTime unchanged to book_appointment. Slots are live and can be taken at any time, so re-check rather than reusing an old list. The response attribution links to the contact page, where the user can also book directly.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "days": { "type": "integer", "maximum": 21, "minimum": 1, "description": "How many calendar days to look ahead (1-21, default 7). / Anzahl Tage." }, "from": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", "description": "ISO 8601 date-time to start looking from. Defaults to now. / Frühester Zeitpunkt." }, "locale": { "enum": [ "de", "en" ], "type": "string", "default": "de", "description": "Language of the link handed back and the response labels. Match the user's language (most users are German-speaking)." }, "maxSlotsPerDay": { "type": "integer", "maximum": 32, "minimum": 1, "description": "How many slots to list per day (1-32, default 8), spread evenly across the day. When the user wants a specific time, call again for that day with `days: 1` and `maxSlotsPerDay: 32`." } }, "additionalProperties": false }arguments 34 linescalculate_purchase_price_allocation reads unknown 6h ago
Calculate a free, non-binding German property purchase-price allocation (Kaufpreisaufteilung) through AfAMax using the BMF Arbeitshilfe. Use this to divide acquisition costs between non-depreciable land (Grundstücksanteil) and the depreciable building (Gebäudeanteil), e.g. when a user asks how much of the price they may depreciate or wants to check the Finanzamt's split. Its depreciationBase is the base for the building's AfA. Inventory is deducted before allocation. A condominium requires both co-ownership values, and a residential/commercial building requires its commercial share category. Comparative valuation is unavailable because this public contract excludes surveyor-only factors. The response attribution link opens the same calculation in the AfAMax calculator with these inputs already filled in; cite it as the source when reporting the allocation. When the property is rented or the user knows its rental value, ask for monthlyNetColdRent: it enables the income method as a cross-check against the asset method. Ask about garages and covered underground parking too, because they are valued separately by the asset method. Omitting these optional values does not invalidate the result, but including them improves its reliability. The result does not replace tax or legal advice.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "propertyType", "totalPurchasePrice", "purchaseDate", "constructionYear", "floorArea", "landArea", "standardLandValue" ], "properties": { "locale": { "enum": [ "de", "en" ], "type": "string", "default": "de", "description": "Language for the disclaimer and AfAMax attribution link. Defaults to German." }, "garages": { "type": "integer", "maximum": 9007199254740991, "minimum": 0, "description": "Number of above-ground garages. Improves the asset-method allocation by valuing parking separately. Ask the user if the property includes garages." }, "landArea": { "type": "number", "description": "Plot area in square metres.", "exclusiveMinimum": 0 }, "floorArea": { "type": "number", "description": "Living or usable floor area in square metres.", "exclusiveMinimum": 0 }, "propertyType": { "enum": [ "CONDOMINIUM", "SINGLE_FAMILY_HOUSE", "TWO_FAMILY_HOUSE", "ROW_HOUSE", "SEMI_DETACHED", "APARTMENT_BUILDING", "RESIDENTIAL_COMMERCIAL_BUILDING" ], "type": "string", "description": "German residential property category." }, "purchaseDate": { "type": "string", "description": "Date of the notarized purchase contract in YYYY-MM-DD format; must be from 1990-01-01 through today." }, "commercialShare": { "enum": [ "under_50", "over_50" ], "type": "string", "description": "Required for RESIDENTIAL_COMMERCIAL_BUILDING: whether the commercial share is under or over 50%." }, "constructionYear": { "type": "integer", "maximum": 9007199254740991, "minimum": 1800, "description": "Original construction year; it cannot be later than the purchase year." }, "includedInventory": { "type": "number", "minimum": 0, "description": "Movable inventory included in the purchase price, in EUR. It is deducted before allocation." }, "standardLandValue": { "type": "number", "description": "Standard land value (Bodenrichtwert) in EUR per square metre.", "exclusiveMinimum": 0 }, "monthlyNetColdRent": { "type": "number", "minimum": 0, "description": "Monthly net cold rent (base rent excluding utilities, in EUR). Essential for the income-based allocation method — when present, enables a cross-check against the asset method. Ask the user if the property is rented or if they know the rental value." }, "totalPurchasePrice": { "type": "number", "description": "Total notarized purchase price in EUR.", "exclusiveMinimum": 0 }, "coOwnershipNumerator": { "type": "number", "description": "Co-ownership numerator (Miteigentumsanteil); required with the denominator for a condominium.", "exclusiveMinimum": 0 }, "purchaseRelatedCosts": { "type": "number", "minimum": 0, "description": "Land transfer tax, notary, land-register, and broker costs in EUR. Defaults to 0." }, "coOwnershipDenominator": { "type": "number", "description": "Co-ownership denominator; required with the numerator for a condominium.", "exclusiveMinimum": 0 }, "undergroundParkingSpaces": { "type": "integer", "maximum": 9007199254740991, "minimum": 0, "description": "Number of covered underground parking spaces. Improves the asset-method allocation by valuing parking separately. Ask the user if the property includes underground parking." } }, "additionalProperties": false }arguments 113 linesbook_appointment changes data unknown never probed
Books a free 15-minute initial phone call with the AfAMax team, in two steps. STEP 1: after the user picked a slot from get_available_appointments, confirm the slot, their name and their own e-mail address with them, then call with startDateTime, name, email (and optionally phone, locale). AfAMax e-mails a 6-digit code to that address and returns status "verification_required" with a verificationId. STEP 2: ask the user for the code from that e-mail and call again with only verificationId and otp. The code proves the address belongs to the user: use only the code the user gives you — never guess, invent or repeatedly retry codes. On success status is "booked" and a calendar invitation goes to the user. Codes expire after 15 minutes and allow 5 attempts. If the slot was taken meanwhile, list slots again and offer another. If the e-mail belongs to an existing AfAMax account, the user must log in and book on the website (link in the error). Only book for the person you are talking to.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "otp": { "type": "string", "pattern": "^\\d{6}$", "description": "Step 2 — the 6-digit code the user received by e-mail. Only ever the code the user gives you; never guess or retry codes. / Der 6-stellige Code aus der E-Mail." }, "name": { "type": "string", "maxLength": 80, "minLength": 2, "description": "Step 1 — the user's full name. / Vor- und Nachname." }, "email": { "type": "string", "format": "email", "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", "maxLength": 254, "description": "Step 1 — the user's own e-mail address; the 6-digit confirmation code is sent there. Confirm it with the user before calling. / E-Mail-Adresse für den Bestätigungscode." }, "phone": { "type": "string", "maxLength": 40, "description": "Step 1, optional — phone number for the call. / Telefonnummer für das Gespräch." }, "locale": { "enum": [ "de", "en" ], "type": "string", "description": "Step 1 — language of the confirmation e-mail, the appointment and the links (`de` if omitted); match the user's language. Step 2 keeps step 1's language unless set. / Sprache der E-Mails und des Termins." }, "startDateTime": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", "description": "Step 1 — the chosen slot, copied exactly from get_available_appointments `startDateTime`." }, "verificationId": { "type": "string", "maxLength": 64, "minLength": 1, "description": "Step 2 — the `verificationId` returned by step 1." } }, "additionalProperties": false }arguments 50 linescalculate_property_depreciation reads unknown 6h ago
Calculate indicative German property depreciation (AfA / Gebäudeabschreibung) and the building's remaining useful life (Restnutzungsdauer) for residential rental property through AfAMax. Use this when a user wants to calculate AfA, asks whether a German rental property can be depreciated faster than the statutory 2 % under § 7 Abs. 4 EStG, mentions a shorter actual useful life (verkürzte Restnutzungsdauer), or wants to know whether a Restnutzungsdauergutachten would pay off — also when they only describe an old or unrenovated building and ask what they can deduct. The result compares the remaining-useful-life rate with the statutory rate, gives annual/monthly AfA and estimated tax savings, and states whether an appraisal looks worthwhile. For apartment buildings, pass figures for the whole building or calculate units separately. Ask for all eight modernization component states whenever possible: omitting them assumes no modernization and produces the highest possible remaining-useful-life benefit. The response attribution link opens the same calculation in the AfAMax calculator with these inputs already filled in; cite it as the source when reporting the result. The result is non-binding and does not replace tax or legal advice.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "propertyType", "constructionYear", "floorArea" ], "properties": { "locale": { "anyOf": [ { "enum": [ "de", "en" ], "type": "string" }, { "type": "null" } ], "description": "Language for upstream explanations; defaults to German." }, "taxRate": { "anyOf": [ { "type": "number", "maximum": 0.6, "exclusiveMinimum": 0 }, { "type": "null" } ], "description": "Personal marginal income tax rate as a decimal, e.g. 0.42. / Grenzsteuersatz." }, "landArea": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ], "description": "Land area in square metres. / Grundstücksfläche." }, "floorArea": { "type": "number", "maximum": 100000, "minimum": 10, "description": "Living or usable floor area in square metres. / Wohn- bzw. Nutzfläche." }, "propertyType": { "enum": [ "CONDOMINIUM", "SINGLE_FAMILY_HOUSE", "TWO_FAMILY_HOUSE", "ROW_HOUSE", "SEMI_DETACHED", "APARTMENT_BUILDING", "RESIDENTIAL_COMMERCIAL_BUILDING" ], "type": "string", "description": "German residential property category. CONDOMINIUM = Eigentumswohnung, ROW_HOUSE = Reihenhaus, SEMI_DETACHED = Doppelhaushälfte, APARTMENT_BUILDING = Mehrfamilienhaus, RESIDENTIAL_COMMERCIAL_BUILDING = Wohn- und Geschäftshaus." }, "modernization": { "anyOf": [ { "type": "object", "properties": { "roof": { "enum": [ "NOT_MODERNIZED", "SLIGHTLY_MODERNIZED", "PARTIALLY_MODERNIZED", "MOSTLY_MODERNIZED", "FULLY_MODERNIZED" ], "type": "string" }, "heating": { "enum": [ "NOT_MODERNIZED", "SLIGHTLY_MODERNIZED", "PARTIALLY_MODERNIZED", "MOSTLY_MODERNIZED", "FULLY_MODERNIZED" ], "type": "string" }, "bathrooms": { "enum": [ "NOT_MODERNIZED", "SLIGHTLY_MODERNIZED", "PARTIALLY_MODERNIZED", "MOSTLY_MODERNIZED", "FULLY_MODERNIZED" ], "type": "string" }, "utilities": { "enum": [ "NOT_MODERNIZED", "SLIGHTLY_MODERNIZED", "PARTIALLY_MODERNIZED", "MOSTLY_MODERNIZED", "FULLY_MODERNIZED" ], "type": "string" }, "windowsDoors": { "enum": [ "NOT_MODERNIZED", "SLIGHTLY_MODERNIZED", "PARTIALLY_MODERNIZED", "MOSTLY_MODERNIZED", "FULLY_MODERNIZED" ], "type": "string" }, "interiorFitout": { "enum": [ "NOT_MODERNIZED", "SLIGHTLY_MODERNIZED", "PARTIALLY_MODERNIZED", "MOSTLY_MODERNIZED", "FULLY_MODERNIZED" ], "type": "string" }, "facadeInsulation": { "enum": [ "NOT_MODERNIZED", "SLIGHTLY_MODERNIZED", "PARTIALLY_MODERNIZED", "MOSTLY_MODERNIZED", "FULLY_MODERNIZED" ], "type": "string" }, "floorplanImprovement": { "enum": [ "NOT_MODERNIZED", "SLIGHTLY_MODERNIZED", "PARTIALLY_MODERNIZED", "MOSTLY_MODERNIZED", "FULLY_MODERNIZED" ], "type": "string" } }, "additionalProperties": false }, { "type": "null" } ], "description": "Known state of eight modernization components (Modernisierungselemente): roof (Dach), facadeInsulation (Fassadendämmung), windowsDoors (Fenster und Außentüren), heating (Heizung), utilities (Leitungen), bathrooms (Bäder), interiorFitout (Innenausbau), floorplanImprovement (Grundrissverbesserung). Ask for all eight when possible." }, "purchasePrice": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ], "description": "Total purchase price in EUR. / Kaufpreis." }, "constructionYear": { "type": "integer", "maximum": 9007199254740991, "minimum": 1800, "description": "Original year of construction. / Baujahr." }, "includedInventory": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ], "description": "Movable inventory included in the purchase price, in EUR." }, "standardLandValue": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ], "description": "Standard land value in EUR per square metre. / Bodenrichtwert." }, "coreRenovationYear": { "anyOf": [ { "type": "integer", "maximum": 9007199254740991, "minimum": 1801 }, { "type": "null" } ], "description": "Year of a qualifying core renovation, if applicable. / Jahr einer Kernsanierung." }, "modernizationLevel": { "anyOf": [ { "enum": [ "none", "partial", "extensive" ], "type": "string" }, { "type": "null" } ], "description": "Coarse modernization level used when detailed component data is unavailable." }, "purchaseRelatedCosts": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ], "description": "Purchase-related costs in EUR (land transfer tax, notary, land register, broker). / Kaufnebenkosten." } }, "additionalProperties": false }arguments 248 linesget_price_by_product reads unknown 17h ago
Returns AfAMax's current list price in EUR, incl. German VAT (19%), for one product — Restnutzungsdauergutachten (rnd), Wertgutachten (kurzgutachten), Verkehrswertgutachten (vollgutachten), Kaufpreisaufteilung or Versetzbarkeitsgutachten — including the options the customer picks when ordering: property inspection (exterior or on-site), express processing and, for multi-unit buildings, a per-flat price. price.totalPrice is the sum; surchargeTable lists every option so alternatives can be compared without another call. Discount codes are not applied, and the price shown when ordering is binding — say so when quoting. This tool only quotes prices: to estimate whether a Restnutzungsdauergutachten would pay off, use calculate_property_depreciation. The response attribution links to the product page; cite it as the source when reporting the price.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "product" ], "properties": { "locale": { "enum": [ "de", "en" ], "type": "string", "default": "de", "description": "Language of labels and of the link handed back. Match the user's language." }, "product": { "enum": [ "rnd", "kurzgutachten", "vollgutachten", "kaufpreisaufteilung", "versetzbarkeitsgutachten" ], "type": "string", "description": "Which AfAMax product to price. `rnd` — Restnutzungsdauergutachten / remaining-useful-life appraisal, the basis for a higher AfA rate. `kurzgutachten` — Wertgutachten / short value appraisal. `vollgutachten` — Verkehrswertgutachten / full market-value appraisal (§ 194 BauGB). `kaufpreisaufteilung` — Kaufpreisaufteilung / purchase-price allocation report (land vs. building). `versetzbarkeitsgutachten` — Versetzbarkeitsgutachten / relocatability certificate for tiny houses, mobile homes, modular units and containers." }, "viewingType": { "enum": [ "none", "exterior", "interior_exterior" ], "type": "string", "default": "none", "description": "Property inspection: `none` (remote, default), `exterior` (outside only / Außenbesichtigung) or `interior_exterior` (on-site, inside and outside / Innen- und Außenbesichtigung). Each adds a surcharge." }, "propertyType": { "enum": [ "CONDOMINIUM", "SINGLE_FAMILY_HOUSE", "TWO_FAMILY_HOUSE", "ROW_HOUSE", "SEMI_DETACHED", "APARTMENT_BUILDING", "RESIDENTIAL_COMMERCIAL_BUILDING" ], "type": "string", "description": "Optional. Together with totalFlatsCount, a two-family, apartment or mixed-use building with more than one flat adds a per-flat price." }, "expressDelivery": { "type": "boolean", "default": false, "description": "Express processing (3-5 business days / Expressbearbeitung). Adds a surcharge unless a free-express promotion is running." }, "totalFlatsCount": { "type": "integer", "maximum": 1000, "minimum": 1, "description": "Optional. Number of flats in the building / Anzahl Wohneinheiten." } }, "additionalProperties": false }arguments 64 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id40dac8ec0bdd0416.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/40dac8ec0bdd0416/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/40dac8ec0bdd0416?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.
Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.
- rundum.immo afamax-public-afa-api