Skip to main content
Glama

German Real Estate Depreciation & Restnutzungsdauer

Calculate German property depreciation (AfA) & Restnutzungsdauer

calculate_property_depreciation
Read-onlyIdempotent

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
localeNoLanguage for upstream explanations; defaults to German.
taxRateNoPersonal marginal income tax rate as a decimal, e.g. 0.42. / Grenzsteuersatz.
landAreaNoLand area in square metres. / Grundstücksfläche.
floorAreaYesLiving or usable floor area in square metres. / Wohn- bzw. Nutzfläche.
propertyTypeYesGerman residential property category. CONDOMINIUM = Eigentumswohnung, ROW_HOUSE = Reihenhaus, SEMI_DETACHED = Doppelhaushälfte, APARTMENT_BUILDING = Mehrfamilienhaus, RESIDENTIAL_COMMERCIAL_BUILDING = Wohn- und Geschäftshaus.
modernizationNoKnown 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.
purchasePriceNoTotal purchase price in EUR. / Kaufpreis.
constructionYearYesOriginal year of construction. / Baujahr.
includedInventoryNoMovable inventory included in the purchase price, in EUR.
standardLandValueNoStandard land value in EUR per square metre. / Bodenrichtwert.
coreRenovationYearNoYear of a qualifying core renovation, if applicable. / Jahr einer Kernsanierung.
modernizationLevelNoCoarse modernization level used when detailed component data is unavailable.
purchaseRelatedCostsNoPurchase-related costs in EUR (land transfer tax, notary, land register, broker). / Kaufnebenkosten.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
metaYes
inputYes
resultsYes
disclaimerYes
assumptionsYes
attributionYes
calculationIdYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • changedInput schema / properties / constructionYear / description
      Previous value: -"Original year of construction."New value: +"Original year of construction. / Baujahr."
    • changedInput schema / properties / coreRenovationYear / description
      Previous value: -"Year of a qualifying core renovation, if applicable."New value: +"Year of a qualifying core renovation, if applicable. / Jahr einer Kernsanierung."
    • changedInput schema / properties / floorArea / description
      Previous value: -"Living or usable floor area in square metres."New value: +"Living or usable floor area in square metres. / Wohn- bzw. Nutzfläche."
    • changedInput schema / properties / landArea / description
      Previous value: -"Land area in square metres."New value: +"Land area in square metres. / Grundstücksfläche."
    • changedInput schema / properties / modernization / description
      Previous value: -"Known state of eight modernization components. Ask for all eight when possible."New value: +"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."
    • changedInput schema / properties / propertyType / description
      Previous value: -"German residential property category."New value: +"German residential property category. CONDOMINIUM = Eigentumswohnung, ROW_HOUSE = Reihenhaus, SEMI_DETACHED = Doppelhaushälfte, APARTMENT_BUILDING = Mehrfamilienhaus, RESIDENTIAL_COMMERCIAL_BUILDING = Wohn- und Geschäftshaus."
    • changedInput schema / properties / purchasePrice / description
      Previous value: -"Total purchase price in EUR."New value: +"Total purchase price in EUR. / Kaufpreis."
    • changedInput schema / properties / purchaseRelatedCosts / description
      Previous value: -"Purchase-related costs in EUR."New value: +"Purchase-related costs in EUR (land transfer tax, notary, land register, broker). / Kaufnebenkosten."
    • changedInput schema / properties / standardLandValue / description
      Previous value: -"Standard land value in EUR per square metre."New value: +"Standard land value in EUR per square metre. / Bodenrichtwert."
    • changedInput schema / properties / taxRate / description
      Previous value: -"Personal marginal tax rate as a decimal, e.g. 0.42."New value: +"Personal marginal income tax rate as a decimal, e.g. 0.42. / Grenzsteuersatz."
    • addedOutput schema / properties / results / properties / afaRatePerYear / description
      Added value: +"AfA rate per year from the estimated remaining useful life, as a decimal (0.0333 = 3.33 %)."
    • addedOutput schema / properties / results / properties / annualAfaAmount / description
      Added value: +"Annual AfA in EUR at afaRatePerYear."
    • addedOutput schema / properties / results / properties / annualTaxSavings / description
      Added value: +"Estimated income tax saved per year by annualAfaAmount at taxRate."
    • addedOutput schema / properties / results / properties / appraisalWorthwhile / description
      Added value: +"Whether the remaining-useful-life rate is high enough for a Restnutzungsdauergutachten to look worthwhile."
    • addedOutput schema / properties / results / properties / buildingValue / description
      Added value: +"Depreciable building value in EUR (excluding land)."
    • addedOutput schema / properties / results / properties / defaultAfaAmount / description
      Added value: +"Annual AfA in EUR at the statutory rate."
    • addedOutput schema / properties / results / properties / defaultAfaRatePerYear / description
      Added value: +"Statutory AfA rate under § 7 Abs. 4 EStG for comparison, as a decimal."
    • addedOutput schema / properties / results / properties / remainingUsefulLifeYears / description
      Added value: +"Estimated remaining useful life (Restnutzungsdauer) in years."
  2. Changed2 schema fields changed
    • removedOutput schema / properties / attribution / properties / provider / const
      Removed value: -"AfaMax"
    • addedOutput schema / properties / attribution / properties / provider / enum
      Added value: +[
      +  "AfaMax",
      +  "AfAMax"
      +]
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey the safe read-only, idempotent profile, and the description layers on substantive behavior: the output compares the RND rate against the statutory rate and yields annual/monthly AfA plus estimated tax savings, the omission of modernization components defaults to 'no modernization' and inflates the benefit, it returns a non-binding result that does not replace tax advice, and it mandates citing the attribution link as the source. This is far beyond what the annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and every subsequent sentence carries distinct content (usage triggers, building-vs-unit rule, modernization default, attribution requirement, disclaimer). It is a single dense block that would scan better segmented, which keeps it from a 5, but there is little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter domain calculator with an output schema, the description covers what an agent needs: when to invoke, the apartment-building input rule, the consequence of omitting customization data, the attribution-citation duty, and the non-binding nature of the result. Return values are also summarized despite the output schema existing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 and the schema does most of the work. The description still adds genuine semantic guidance: pass whole-building figures or compute units separately for apartment buildings, and supply all eight modernization component states because omission implies no modernization and produces the maximum RND benefit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource ('Calculate German property depreciation (AfA / Gebäudeabschreibung) and the building's remaining useful life (Restnutzungsdauer)') and scopes it to residential rental property through AfAMax. The purpose is unambiguous and readily separable from the unrelated siblings (appointments, price/product lookups), and even the adjacent real-estate calculator sibling covers a different calculation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Rich when-to-use triggers: calculating AfA, asking about faster-than-2% depreciation under § 7 Abs. 4 EStG, mentioning verkürzte Restnutzungsdauer, evaluating whether a Restnutzungsdauergutachten pays off, or just describing an old/unrenovated building and asking what is deductible. It lacks any explicit 'when not to use' or named alternative tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.