Skip to content
plugmcp
DirectorySkillsCategoriesBlog
EN/中文
Sign inSign up
Home/Servers/German Real Estate Depreciation & Restnutzungsdauer

German Real Estate Depreciation & Restnutzungsdauer

by immo.rundum

German property depreciation (AfA), Restnutzungsdauer, Kaufpreisaufteilung & appraisals via AfAMax

Power your agent

Add this server

The publisher's own URL. Not a PlugMCP endpoint.

Server URL
https://mcp.rundum.immo/mcp
Provider
Add in Claude

Claude opens with the name and URL filled in. You still confirm it there.

Claude Code
claude mcp add --transport http immo.rundum-real-estate-appraisal https://mcp.rundum.immo/mcp

Run in a terminal.

Claude Desktop
{
  "mcpServers": {
    "immo.rundum-real-estate-appraisal": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.rundum.immo/mcp"
      ]
    }
  }
}

claude_desktop_config.json

Step-by-step: add this in Claude

Remote URL or a command on your machine? How the two installs differ

Run on PlugMCP

Host a copy with our keys and logs.

A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.

Launch

Related MCP

View more
  • Firecrawl🔥 Official Firecrawl MCP Server - Adds powerful web scraping and search to Cursor, Claude and any other LLM clients.
  • N
    NotionToken-auth Notion MCP: pages, databases, blocks, comments, files. Runs headless in CI and agents.
  • Context7Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

Related skills

View all
  • reaReverse engineer anything with agents, from app behavior down to native binaries.
  • rea-changelog-updatePrepare or rewrite REA release changelogs and GitHub release notes from pinned Git history, with verified contributor thanks and Release Please synchronization.
  • rea-tool-designDesign or change REA investigation tools, CLI/MCP contracts, provider capabilities, and Evidence semantics.

Questions

How do I install German Real Estate Depreciation & Restnutzungsdauer?
Copy the http config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does German Real Estate Depreciation & Restnutzungsdauer need an API key?
No required environment variable is listed on this record.
What transport does German Real Estate Depreciation & Restnutzungsdauer use?
German Real Estate Depreciation & Restnutzungsdauer is reached over HTTP.
When was German Real Estate Depreciation & Restnutzungsdauer last checked?
Last checked 2026-10-21. German property depreciation (AfA), Restnutzungsdauer, Kaufpreisaufteilung & appraisals via AfAMax

German property depreciation (AfA), Restnutzungsdauer, Kaufpreisaufteilung & appraisals via AfAMax

Rundum Immo Real Estate Appraisal MCP

An open-source Model Context Protocol server for indicative German real-estate depreciation (AfA / Gebäudeabschreibung), remaining useful life (Restnutzungsdauer) and purchase-price allocation (Kaufpreisaufteilung). It helps answer questions such as whether a rental property can be depreciated faster than the statutory rate under § 7 Abs. 4 EStG, or whether a Restnutzungsdauergutachten would pay off. It exposes calculate_property_depreciation and calculate_purchase_price_allocation, delegating both calculations to the public AfAMax APIs, plus get_price_by_product, get_available_appointments, and book_appointment for AfAMax appraisal prices and free initial-call bookings. Proprietary appraisal formulas remain in AfAMax.

Hosted server

The public Streamable HTTP endpoint is:

https://mcp.rundum.immo/mcp

No end-user API key is required. Calls are subject to AfAMax per-client and service-wide rate limits and abuse protections.

Run from source over stdio

Node.js 22.12 or newer is required.

git clone https://github.com/Rundum-Immo/real-estate-appraisal-mcp.git
cd real-estate-appraisal-mcp
pnpm install --frozen-lockfile
pnpm build

Configure your MCP client to run the built server, replacing the path with the absolute path to your checkout:

{
  "mcpServers": {
    "rundum-real-estate-appraisal": {
      "command": "node",
      "args": ["/absolute/path/to/real-estate-appraisal-mcp/dist/transports/stdio.js"]
    }
  }
}

The stdio server calls the anonymous AfAMax API directly. Its public limits are 30 requests per minute and 500 requests per rolling day per IP; a tenant-wide ceiling may also apply. It writes protocol messages only to stdout and operational logs only to stderr.

Install from npm over stdio

Node.js 22.12 or newer is required. Configure your MCP client to launch the published package with npx:

{
  "mcpServers": {
    "rundum-real-estate-appraisal": {
      "command": "npx",
      "args": ["-y", "@rundum-immo/real-estate-appraisal-mcp"]
    }
  }
}

Tools

Property depreciation

calculate_property_depreciation accepts the complete public AfAMax request contract:

  • Required: property type, construction year, and floor area.
  • Optional: purchase price, land area, standard land value, inventory, purchase costs, core-renovation year, marginal tax rate, locale, coarse modernization level, and eight detailed modernization component states.
  • Results: annual and monthly AfA, comparison with statutory AfA, estimated tax savings, building-value assumptions, modernization points, and remaining useful life.

Omitting modernization data means AfAMax assumes no modernization, producing an upper-bound estimate. For multi-unit buildings, provide whole-building figures or calculate individual units separately. Results are indicative and do not replace tax, legal, or appraisal advice.

Example input:

{
  "propertyType": "CONDOMINIUM",
  "constructionYear": 1970,
  "floorArea": 85,
  "purchasePrice": 350000,
  "taxRate": 0.42,
  "locale": "en"
}

Purchase-price allocation

calculate_purchase_price_allocation divides acquisition costs between non-depreciable land and the depreciable building using the German Federal Ministry of Finance (BMF) method.

  • Required: property type, total purchase price, purchase date, construction year, floor area, land area, and standard land value.
  • Condominiums also require the numerator and denominator of the co-ownership share.
  • Mixed-use residential/commercial buildings also require whether the commercial share is under or over 50%.
  • Optional: purchase costs, included inventory, garage and underground-parking counts, monthly net cold rent, and locale.
  • Results: the applied method, meaningful alternatives, land/building shares and values, depreciation base, unavailable or unusable method reasons, and disclosed asset-method defaults.

Providing monthly net cold rent enables the income method as a cross-check against the asset method. Garage and covered underground-parking counts improve the asset method because those spaces are valued separately. Comparative valuation is unavailable because the public contract excludes surveyor-only factors. Results are indicative and do not replace tax or legal advice.

Example input:

{
  "propertyType": "CONDOMINIUM",
  "totalPurchasePrice": 500000,
  "purchaseRelatedCosts": 40000,
  "purchaseDate": "2024-06-15",
  "constructionYear": 1975,
  "floorArea": 75,
  "landArea": 1200,
  "standardLandValue": 2500,
  "coOwnershipNumerator": 75,
  "coOwnershipDenominator": 1000,
  "undergroundParkingSpaces": 1,
  "monthlyNetColdRent": 1400,
  "locale": "en"
}

Appraisal prices

get_price_by_product returns the current AfAMax list price in EUR, including German VAT, for one product: rnd (Restnutzungsdauergutachten), kurzgutachten, vollgutachten, kaufpreisaufteilung, or versetzbarkeitsgutachten.

  • Optional: property inspection (none, exterior, interior_exterior), express processing, and property type with flat count for the per-flat price of multi-unit buildings.
  • Results: the total with its breakdown, net price, a table of every surcharge for comparing options, and a source link to the product page.

Discount codes are not applied; the price shown when ordering is binding.

{ "product": "rnd", "viewingType": "interior_exterior", "expressDelivery": true, "locale": "en" }

Initial-call appointments

get_available_appointments lists open slots for a free, non-binding 15-minute phone call with the AfAMax team, on weekdays in Europe/Berlin, grouped by day. It looks up to 21 days ahead (default 7) and lists up to 32 slots per day (default 8), with each day's full free-slot count.

{ "days": 1, "maxSlotsPerDay": 32, "locale": "en" }

book_appointment books one of those slots in two steps, so a booking is confirmed only by someone with access to the given mailbox:

  1. Call with the slot's startDateTime, name, email (optionally phone, locale). AfAMax e-mails a 6-digit code and returns a verificationId.
  2. Call again with only verificationId and the otp the user read from the e-mail. The response confirms the booking and AfAMax sends a calendar invitation.

Codes expire after 15 minutes and allow 5 attempts. Refusals such as a slot taken meanwhile or an e-mail that belongs to an existing AfAMax account come back with what to do next and a link to continue on the AfAMax website.

Architecture

MCP client  ->  this public adapter  ->  AfAMax public HTTPS API

This repository contains transport, validation, error mapping, and presentation code only. It contains no appraisal formulas, databases, tenant logic, or report-generation internals. The transport-neutral server factory is shared by stdio and stateless Streamable HTTP.

Development

pnpm install
pnpm check
pnpm dev:stdio

Test with MCP Inspector

Build and launch the local stdio server through MCP Inspector:

pnpm build
npx -y @modelcontextprotocol/inspector \
  node --env-file-if-exists=.env dist/transports/stdio.js

Connect in the browser, open Tools, and call a calculation tool with its example input above. Successful responses contain a readable summary, structured output, disclosed assumptions/defaults, and a source link to the corresponding AfAMax calculator. The source link carries the submitted inputs so the calculator opens prefilled for refinement or documentation.

To inspect the registered tools from the command line:

npx -y @modelcontextprotocol/inspector \
  --cli \
  node --env-file-if-exists=.env dist/transports/stdio.js \
  --method tools/list

Develop the HTTP transport

cp .env.example .env
pnpm dev:http

AFAMAX_SERVICE_TOKEN is mandatory for HTTP mode. Trusted per-client rate limiting works only with a service credential issued by Rundum Immo and configured with the matching AfAMax backend value; arbitrary tokens do not enable trusted forwarding. HTTP mode forwards that token and the validated rightmost proxy client address in X-Afamax-Service-Token and X-Afamax-Client-IP. Never expose this token to MCP clients. Deploy behind a proxy that replaces, rather than blindly appends to, incoming forwarding headers.

Configuration:

VariableDefaultPurpose
AFAMAX_API_URLhttps://afamax.de/api/v1/afa-calculationPublic calculation endpoint
AFAMAX_KPA_API_URLhttps://afamax.de/api/v1/purchase-price-allocationPublic purchase-price allocation endpoint
AFAMAX_SERVICE_TOKEN—Required trusted-service credential in HTTP mode
AFAMAX_TIMEOUT_MS10000Upstream timeout
HOST0.0.0.0Listen address
PORT3000Listen port
PUBLIC_HOSTSmcp.rundum.immoComma-separated allowed Host header names
LOG_LEVELinfodebug, info, warn, or error

The HTTP server exposes /mcp and /health, limits request bodies to 64 KiB, validates Host and Origin syntax, and returns permissive CORS headers for anonymous browser clients.

Deploy with Docker

Production HTTP hosting is intended for Rundum Immo or explicitly authorized operators because it requires a matching AfAMax service credential. Public users can run the stdio transport without one.

docker build -t real-estate-appraisal-mcp .
docker run --rm -p 3000:3000 \
  -e AFAMAX_SERVICE_TOKEN='credential-issued-by-rundum-immo' \
  -e PUBLIC_HOSTS='localhost,mcp.rundum.immo' \
  real-estate-appraisal-mcp

The image runs as the non-root node user. Configure mcp.rundum.immo in Coolify and proxy it to port 3000.

Data and privacy

The adapter is stateless and does not persist tool inputs or raw client IP addresses. Calculation input and the client IP are sent to AfAMax, which uses the address for abuse prevention. AfAMax stores a salted hash of the address and limited usage metadata for 30 days; it does not store the raw address in its usage records. Avoid placing personal identifiers in calculation and price inputs. book_appointment necessarily sends the user's name, e-mail address, and optional phone number to AfAMax, which uses them to send the confirmation code and to hold the appointment; the adapter neither stores nor logs them. See AfAMax privacy information and SECURITY.md.

Roadmap

The repository can grow beyond its current calculation, pricing, and booking tools. Potential future capabilities include:

  • Property and market-value estimation
  • Appraisal and valuation-report workflows
  • Additional German real-estate tax and appraisal tools

Future tools will follow the same boundary: this repository contains the public MCP integration, while proprietary appraisal logic remains in AfAMax.

License

MIT

How do I install German Real Estate Depreciation & Restnutzungsdauer?
Copy the http config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does German Real Estate Depreciation & Restnutzungsdauer need an API key?
No required environment variable is listed on this record.
What transport does German Real Estate Depreciation & Restnutzungsdauer use?
German Real Estate Depreciation & Restnutzungsdauer is reached over HTTP.
When was German Real Estate Depreciation & Restnutzungsdauer last checked?
Last checked 2026-10-21. German property depreciation (AfA), Restnutzungsdauer, Kaufpreisaufteilung & appraisals via AfAMax

No tool list yet. Remote servers get one after the first health check.

plugmcp

Plug any tool into any agent. MCP servers for people who do not write servers. Gateway for volume, n8n for apps.

  • github.com/TODO
  • x.com/TODO
  • linkedin.com/company/TODO

PlugMCP, 2026

Product
  • Browse
  • Install
  • Host your own
  • Pricing
  • Voice mode
  • Browser
Directory
  • All MCP servers
  • MCP Apps
  • Tools
  • Agent skills
  • Categories
  • New
  • Voice
  • Submit a server
Developers
  • Docs
  • Blog
  • Club
  • Work with us
  • What is MCP
  • What is WebMCP
  • Status
Company
  • About
  • Contact
  • Terms
  • Privacy
  • DPA