Austrian property costs, buy-to-let underwriting, income tax and rent caps, cited to the statute
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Calculate the one-off costs of buying residential property in Austria on top of the price (Kaufnebenkosten): real estate transfer tax (Grunderwerbsteuer), land-register court fees, broker commission with a check against the legal maximum, and lawyer/notary contract costs, each with VAT where it applies. Use when someone asks what buying a specific flat or house in Austria costs in total. The JSON lists the cited legal bases and sources once; pass detail "full" for every line item with its calculation and its own citations. Amounts in EUR. Not covered: bank or valuation fees, purchases within the family, exemptions for a primary residence.
Broker commission, or "none" if the purchase is commission-free (provisionsfrei).
Purchase price in EUR (the agreed price for the property), e.g. 249000.
How much of the result to return as JSON. "summary" (default) keeps the key figures, flags, assumptions, limitations and deduplicated citations (about 40% of the size for underwrite_property, 60% for estimate_acquisition_costs). "full" adds every line item with its calculation and citations, the tax years and the rules used. The readable text is the same in both.
Mortgage financing, if any. Adds the court fee for registering the mortgage.
Override default assumptions. Omit to use documented defaults.
Date whose rules apply, YYYY-MM-DD, usually today or the expected signing date. Defaults to today (Vienna time). Covered: 2025-04-01 to 2027-12-31.
Calculate the one-off costs of buying residential property in Austria on top of the price (Kaufnebenkosten): real estate transfer tax (Grunderwerbsteuer), land-register court fees, broker commission with a check against the legal maximum, and lawyer/notary contract costs, each with VAT where it applies. Use when someone asks what buying a specific flat or house in Austria costs in total. The JSON lists the cited legal bases and sources once; pass detail "full" for every line item with its calculation and its own citations. Amounts in EUR. Not covered: bank or valuation fees, purchases within the family, exemptions for a primary residence.
| Argument | Type | Description |
|---|---|---|
| broker* | any | Broker commission, or "none" if the purchase is commission-free (provisionsfrei). |
| detail | string | How much of the result to return as JSON. "summary" (default) keeps the key figures, flags, assumptions, limitations and deduplicated citations (about 40% of the size for underwrite_property, 60% for estimate_acquisition_costs). "full" adds every line item with its calculation and citations, the tax years and the rules used. The readable text is the same in both. |
| financing | object | Mortgage financing, if any. Adds the court fee for registering the mortgage. |
| assumptions | object | Override default assumptions. Omit to use documented defaults. |
| purchasePrice* | number | Purchase price in EUR (the agreed price for the property), e.g. 249000. |
| valuationDate | string | Date whose rules apply, YYYY-MM-DD, usually today or the expected signing date. Defaults to today (Vienna time). Covered: 2025-04-01 to 2027-12-31. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"purchasePrice",
"broker"
],
"properties": {
"broker": {
"anyOf": [
{
"type": "string",
"const": "none"
},
{
"type": "object",
"required": [
"commissionPct"
],
"properties": {
"commissionPct": {
"type": "number",
"description": "Buyer's broker commission in % of the price, EXCLUDING 20% VAT. Listings often say '3% zzgl. 20% USt' → 3."
},
"sellerPaysCommission": {
"type": "boolean",
"description": "Whether the seller also pays the broker. Affects the legal cap. Omit if unknown."
}
}
}
],
"description": "Broker commission, or \"none\" if the purchase is commission-free (provisionsfrei)."
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"description": "How much of the result to return as JSON. \"summary\" (default) keeps the key figures, flags, assumptions, limitations and deduplicated citations (about 40% of the size for underwrite_property, 60% for estimate_acquisition_costs). \"full\" adds every line item with its calculation and citations, the tax years and the rules used. The readable text is the same in both."
},
"financing": {
"type": "object",
"required": [
"loanAmount"
],
"properties": {
"loanAmount": {
"type": "number",
"description": "Loan amount in EUR."
},
"registeredMortgageAmount": {
"type": "number",
"description": "Mortgage amount registered in the land register, if known. Defaults to 1.3 × the loan."
}
},
"description": "Mortgage financing, if any. Adds the court fee for registering the mortgage."
},
"assumptions": {
"type": "object",
"properties": {
"contractFeePct": {
"type": "number",
"description": "Lawyer/notary contract and escrow fee, % of price excl. VAT. Default 1.5 (typical range 1–3)."
},
"grundbuchFiling": {
"enum": [
"electronic",
"paper"
],
"type": "string",
"description": "How the land-register application is filed. Default \"electronic\" (lawyer or notary)."
},
"grundbuchApplications": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of separate land-register applications. Default 1."
},
"mortgageRegistrationFactor": {
"type": "number",
"description": "Registered mortgage as a multiple of the loan. Default 1.3."
}
},
"description": "Override default assumptions. Omit to use documented defaults."
},
"purchasePrice": {
"type": "number",
"description": "Purchase price in EUR (the agreed price for the property), e.g. 249000."
},
"valuationDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date whose rules apply, YYYY-MM-DD, usually today or the expected signing date. Defaults to today (Vienna time). Covered: 2025-04-01 to 2027-12-31."
}
}
}List the statutory values the engine uses on a date (tax and fee rates, broker caps, minimum repair reserve, MRG cut-off dates, Richtwerte per state, AfA rates, land shares, income tax brackets), each with legal basis, source URL and the date it was last verified, plus the default assumptions and risk thresholds. Use to cite sources or to explain how a number was calculated.
| Argument | Type | Description |
|---|---|---|
| date | string | Return the rules valid on this date, YYYY-MM-DD. Defaults to today (Vienna time). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Return the rules valid on this date, YYYY-MM-DD. Defaults to today (Vienna time)."
}
}
}Analyse an Austrian residential property as a rental investment: acquisition costs, annuity loan payment, monthly cash flow before and after income tax, gross and net yield, cash-on-cash return, debt cover (DSCR), break-even rent, whether statutory rent caps (MRG) apply and the Richtwert cap, depreciation (AfA) with the legal land share, a 25-year Liebhaberei check, and risk flags. Use when evaluating whether a specific flat or house is a good buy-to-let deal. Inputs in EUR; rents and owner costs are monthly and net of VAT. Pass what you know: missing facts fall back to documented assumptions and are flagged. The JSON is compact by default (key figures, flags, citations); pass detail "full" for every line, the tax years and the rules used. Not covered: rent increases or interest-rate changes over time, tax credits, Richtwert surcharges and deductions (Zuschläge/Abschläge).
| Argument | Type | Description |
|---|---|---|
| tax | object | Facts for the income tax on rent and the depreciation (AfA). Omit to use flagged defaults (40% marginal rate, 40% land share). |
| rent* | object | Expected rent. |
| broker* | any | Broker commission, or "none" if the purchase is commission-free (provisionsfrei). |
| detail | string | How much of the result to return as JSON. "summary" (default) keeps the key figures, flags, assumptions, limitations and deduplicated citations (about 40% of the size for underwrite_property, 60% for estimate_acquisition_costs). "full" adds every line item with its calculation and citations, the tax years and the rules used. The readable text is the same in both. |
| property | object | Property facts. Pass what you know; missing facts are flagged. |
| financing | object | Mortgage financing. Omit for a cash purchase. |
| ownerCosts | object | Costs the owner pays that cannot be passed on to the tenant. |
| assumptions | object | Override default assumptions. Omit to use documented defaults. |
| purchasePrice* | number | Purchase price in EUR (the agreed price for the property), e.g. 249000. |
| valuationDate | string | Date whose rules apply, YYYY-MM-DD, usually today or the expected signing date. Defaults to today (Vienna time). Covered: 2025-04-01 to 2027-12-31. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"purchasePrice",
"broker",
"rent"
],
"properties": {
"tax": {
"type": "object",
"properties": {
"landSharePct": {
"type": "number",
"description": "Land share of the purchase in %, if proven (e.g. expert opinion). Otherwise presumed at 20, 30 or 40% by law."
},
"otherTaxableIncome": {
"type": "number",
"description": "Owner's other taxable income per year in EUR (e.g. gross salary minus social security). Enables the exact income tax tariff."
},
"averageLandPricePerM2": {
"type": "number",
"description": "Average price of building land in the municipality, EUR per m². Under 400 in a town under 100,000 inhabitants → 20% land share."
},
"municipalityInhabitants": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Inhabitants of the municipality (e.g. Vienna ≈ 2,000,000). Decides the presumed land share together with the land price."
}
},
"description": "Facts for the income tax on rent and the depreciation (AfA). Omit to use flagged defaults (40% marginal rate, 40% land share)."
},
"rent": {
"type": "object",
"required": [
"netColdMonthly"
],
"properties": {
"fixedTerm": {
"type": "boolean",
"description": "Whether the lease is fixed-term (befristet). For rent-capped flats this lowers the cap by 25%. Omit if unknown."
},
"netColdMonthly": {
"type": "number",
"description": "Monthly net cold rent (Hauptmietzins) in EUR, excluding operating costs and VAT."
},
"operatingCostsMonthly": {
"type": "number",
"description": "Monthly operating costs (Betriebskosten) in EUR, passed on to the tenant."
}
},
"description": "Expected rent."
},
"broker": {
"anyOf": [
{
"type": "string",
"const": "none"
},
{
"type": "object",
"required": [
"commissionPct"
],
"properties": {
"commissionPct": {
"type": "number",
"description": "Buyer's broker commission in % of the price, EXCLUDING 20% VAT. Listings often say '3% zzgl. 20% USt' → 3."
},
"sellerPaysCommission": {
"type": "boolean",
"description": "Whether the seller also pays the broker. Affects the legal cap. Omit if unknown."
}
}
}
],
"description": "Broker commission, or \"none\" if the purchase is commission-free (provisionsfrei)."
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"description": "How much of the result to return as JSON. \"summary\" (default) keeps the key figures, flags, assumptions, limitations and deduplicated citations (about 40% of the size for underwrite_property, 60% for estimate_acquisition_costs). \"full\" adds every line item with its calculation and citations, the tax years and the rules used. The readable text is the same in both."
},
"property": {
"type": "object",
"properties": {
"state": {
"enum": [
"burgenland",
"kaernten",
"niederoesterreich",
"oberoesterreich",
"salzburg",
"steiermark",
"tirol",
"vorarlberg",
"wien"
],
"type": "string",
"description": "Bundesland (ä → ae, ö → oe), e.g. \"wien\" for Vienna, \"steiermark\" for Graz. Needed for the Richtwert rent cap."
},
"ownership": {
"enum": [
"condominium",
"house",
"wholeBuilding"
],
"type": "string",
"description": "condominium = Eigentumswohnung (Wohnungseigentum); house = single-family house; wholeBuilding = entire rental building."
},
"buildingYear": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Year the building was completed (Baujahr). Used as an estimate if the permit date is unknown."
},
"livingAreaM2": {
"type": "number",
"description": "Usable floor area (Nutzfläche) in m²."
},
"publicFunding": {
"type": "boolean",
"description": "Whether the building was built with public funds (e.g. Wohnbauförderung)."
},
"unitsInBuilding": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of separate flats or business units in the building."
},
"buildingPermitDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of the building permit (Baubewilligung), YYYY-MM-DD. Decides whether MRG rent caps apply."
}
},
"description": "Property facts. Pass what you know; missing facts are flagged."
},
"financing": {
"type": "object",
"required": [
"loanAmount",
"ratePct",
"termYears"
],
"properties": {
"ratePct": {
"type": "number",
"description": "Nominal annual interest rate in %, e.g. 3.9. Treated as fixed for the whole term."
},
"termYears": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Loan term in whole years, e.g. 25."
},
"loanAmount": {
"type": "number",
"description": "Loan amount in EUR."
},
"registeredMortgageAmount": {
"type": "number",
"description": "Mortgage amount registered in the land register, if known. Defaults to 1.3 × the loan."
}
},
"description": "Mortgage financing. Omit for a cash purchase."
},
"ownerCosts": {
"type": "object",
"properties": {
"maintenanceMonthly": {
"type": "number",
"description": "Monthly maintenance budget in EUR; overrides maintenancePctPerYear."
},
"reserveFundMonthly": {
"type": "number",
"description": "The flat's monthly repair-reserve contribution (Rücklage) in EUR. Defaults to the legal minimum per m² for condominiums."
}
},
"description": "Costs the owner pays that cannot be passed on to the tenant."
},
"assumptions": {
"type": "object",
"properties": {
"vacancyPct": {
"type": "number",
"description": "Vacancy and rent loss, % of gross rent (rent + operating costs). Default 4."
},
"managementPct": {
"type": "number",
"description": "Letting/management fees paid by the owner, % of net cold rent. Default 0 (self-managed)."
},
"contractFeePct": {
"type": "number",
"description": "Lawyer/notary contract and escrow fee, % of price excl. VAT. Default 1.5 (typical range 1–3)."
},
"grundbuchFiling": {
"enum": [
"electronic",
"paper"
],
"type": "string",
"description": "How the land-register application is filed. Default \"electronic\" (lawyer or notary)."
},
"marginalTaxRatePct": {
"type": "number",
"description": "Owner's marginal income tax rate in %, applied to the rental result. Default 40. Ignored when tax.otherTaxableIncome is given."
},
"grundbuchApplications": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of separate land-register applications. Default 1."
},
"maintenancePctPerYear": {
"type": "number",
"description": "Owner's maintenance, % per year of price plus acquisition costs. Default 0.2."
},
"mortgageRegistrationFactor": {
"type": "number",
"description": "Registered mortgage as a multiple of the loan. Default 1.3."
}
},
"description": "Override default assumptions. Omit to use documented defaults."
},
"purchasePrice": {
"type": "number",
"description": "Purchase price in EUR (the agreed price for the property), e.g. 249000."
},
"valuationDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date whose rules apply, YYYY-MM-DD, usually today or the expected signing date. Defaults to today (Vienna time). Covered: 2025-04-01 to 2027-12-31."
}
}
}