Austria Property
Server Details
Austrian property costs, buy-to-let underwriting, income tax and rent caps, cited to the statute
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- mastalier1997/austria-property-mcp
- GitHub Stars
- 0
- Server Listing
- austria-property-mcp
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
The three tools have distinct primary purposes: one-off cost estimation, rule retrieval, and full investment underwriting. However, acquisition costs appear both as a standalone tool and as a component of underwriting, which could cause slight hesitation. Overall boundaries are clear.
All tool names follow a consistent snake_case verb_noun pattern (estimate_acquisition_costs, get_rules, underwrite_property). The generic verb 'get' is a minor stylistic choice but does not break the pattern.
Three tools is well within the ideal range and each earns its place for a focused property analysis server. No obvious redundancy or missing core function that would warrant more tools.
The server covers acquisition costs, statutory rules, and full investment underwriting, addressing the core buy-to-let workflow. Minor gaps exist (e.g., exit/sale costs, long-term rent growth), but the surface is largely complete for its stated scope.
Available Tools
3 toolsestimate_acquisition_costsAustrian property purchase costsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| broker | Yes | Broker commission, or "none" if the purchase is commission-free (provisionsfrei). | |
| detail | No | 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 | No | Mortgage financing, if any. Adds the court fee for registering the mortgage. | |
| assumptions | No | Override default assumptions. Omit to use documented defaults. | |
| purchasePrice | Yes | Purchase price in EUR (the agreed price for the property), e.g. 249000. | |
| valuationDate | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, and the description adds real behavioral context on top: the result deduplicates cited legal bases and sources, the broker commission is validated against the legal maximum, and detail='full' expands every line item with its own calculation and citations. It stops short of describing error behavior or how the legal-max check is reported when exceeded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the calculation scope, then usage, then output behavior, then exclusions. Every sentence carries information, though the cost-component enumeration and the detail explanation make it denser than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it says the JSON contains citations and legal bases, what 'full' adds, and that amounts are in EUR. Combined with the schema's documented defaults, covered date range, and assumption overrides, an agent has everything needed to invoke and interpret the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds meaning beyond it: it explains that detail='full' returns every line item with calculations and citations versus the deduplicated summary, and fixes the unit as EUR. It does not add anything for purchasePrice, financing, or assumptions, which rely entirely on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (calculate) and resource (one-off Austrian residential purchase costs) and enumerates the exact cost components: transfer tax, land-register fees, broker commission, notary/lawyer fees, each with VAT treatment. The scope is narrowed to Austria and residential, so an agent can distinguish it from a generic underwriting or rules tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use when someone asks what buying a specific flat or house in Austria costs in total') and an explicit exclusion list (bank/valuation fees, family purchases, primary-residence exemptions). It does not, however, name or contrast the sibling tools get_rules or underwrite_property, so the routing guidance is clear but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rulesStatutory rules and assumptionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Return the rules valid on this date, YYYY-MM-DD. Defaults to today (Vienna time). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, closed world), but the description adds substantive detail beyond them: each value ships with legal basis, source URL and last-verified date, plus default assumptions and risk thresholds, and results are scoped to a validity date. With no output schema, this return-shape disclosure is genuinely useful, though pagination/volume is unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and then the use case. The long parenthetical enumeration of rule categories is dense but every item earns its place by telling the agent what data is available.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup with no output schema, the description fully characterizes the response: values plus legal basis, source URL, verification date, and the accompanying assumptions and risk thresholds. An agent has everything needed to call it and to interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema already documents the YYYY-MM-DD format and the 'defaults to today (Vienna time)' behavior. The description only implies date-scoped validity ('the engine uses on a date'), which the schema states anyway, so it adds no meaning beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List the statutory values the engine uses') and enumerates the concrete domain content: tax and fee rates, broker caps, repair reserve, MRG cut-offs, Richtwerte, AfA rates, land shares, income tax brackets. This makes it unmistakably a reference/lookup tool, cleanly separable from the calculating siblings estimate_acquisition_costs and underwrite_property.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit positive triggers: 'Use to cite sources or to explain how a number was calculated.' This tells the agent when to reach for it (auditing/explaining results from the sibling calculators) but never states when not to use it or names the siblings it complements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
underwrite_propertyUnderwrite an Austrian buy-to-let purchaseARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| tax | No | Facts for the income tax on rent and the depreciation (AfA). Omit to use flagged defaults (40% marginal rate, 40% land share). | |
| rent | Yes | Expected rent. | |
| broker | Yes | Broker commission, or "none" if the purchase is commission-free (provisionsfrei). | |
| detail | No | 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 | No | Property facts. Pass what you know; missing facts are flagged. | |
| financing | No | Mortgage financing. Omit for a cash purchase. | |
| ownerCosts | No | Costs the owner pays that cannot be passed on to the tenant. | |
| assumptions | No | Override default assumptions. Omit to use documented defaults. | |
| purchasePrice | Yes | Purchase price in EUR (the agreed price for the property), e.g. 249000. | |
| valuationDate | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, yet the description adds real behavioral context: missing facts fall back to documented assumptions and are flagged, inputs are EUR with monthly net-of-VAT rents, and the JSON is compact by default unless detail='full'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the metric list, then usage, units, and limitations. The long output enumeration is dense but each element is load-bearing for an underwriting tool, and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter nested tool with no output schema, the description covers what is computed, the two output verbosity modes, default/fallback handling, units, and explicit scope limits — enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents every parameter, but the description still adds unit/semantic meaning ('Inputs in EUR; rents and owner costs are monthly and net of VAT') and the fallback behavior for omitted facts, going beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Analyse/underwrite') and resource (an Austrian residential buy-to-let) and enumerates the exact outputs computed (yields, DSCR, break-even rent, MRG caps, AfA, Liebhaberei check). The sibling estimate_acquisition_costs is only name-dropped inside the detail parameter, so the differentiation from siblings is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when evaluating whether a specific flat or house is a good buy-to-let deal' gives clear context, and the 'Not covered' clause (rent increases, interest-rate changes, tax credits, Richtwert surcharges/deductions) scopes it. However, it never says when to prefer the sibling estimate_acquisition_costs or get_rules instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
estimate_acquisition_costs1 field changed- added
Input schema / properties / detailAdded value: +{ + "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.", + "enum": [ + "summary", + "full" + ], + "type": "string" +}
- Changed
underwrite_property1 field changed- added
Input schema / properties / detailAdded value: +{ + "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.", + "enum": [ + "summary", + "full" + ], + "type": "string" +}
1 tool update
- Changed
underwrite_property2 fields changed- added
Input schema / properties / property / properties / stateAdded value: +{ + "description": "Bundesland (ä → ae, ö → oe), e.g. \"wien\" for Vienna, \"steiermark\" for Graz. Needed for the Richtwert rent cap.", + "enum": [ + "burgenland", + "kaernten", + "niederoesterreich", + "oberoesterreich", + "salzburg", + "steiermark", + "tirol", + "vorarlberg", + "wien" + ], + "type": "string" +} - added
Input schema / properties / rent / properties / fixedTermAdded value: +{ + "description": "Whether the lease is fixed-term (befristet). For rent-capped flats this lowers the cap by 25%. Omit if unknown.", + "type": "boolean" +}
1 tool update
- Changed
underwrite_property2 fields changed- added
Input schema / properties / assumptions / properties / marginalTaxRatePctAdded value: +{ + "description": "Owner's marginal income tax rate in %, applied to the rental result. Default 40. Ignored when tax.otherTaxableIncome is given.", + "type": "number" +} - added
Input schema / properties / taxAdded value: +{ + "description": "Facts for the income tax on rent and the depreciation (AfA). Omit to use flagged defaults (40% marginal rate, 40% land share).", + "properties": { + "averageLandPricePerM2": { + "description": "Average price of building land in the municipality, EUR per m². Under 400 in a town under 100,000 inhabitants → 20% land share.", + "type": "number" + }, + "landSharePct": { + "description": "Land share of the purchase in %, if proven (e.g. expert opinion). Otherwise presumed at 20, 30 or 40% by law.", + "type": "number" + }, + "municipalityInhabitants": { + "description": "Inhabitants of the municipality (e.g. Vienna ≈ 2,000,000). Decides the presumed land share together with the land price.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "otherTaxableIncome": { + "description": "Owner's other taxable income per year in EUR (e.g. gross salary minus social security). Enables the exact income tax tariff.", + "type": "number" + } + }, + "type": "object" +}
3 tool updates
- First observed
estimate_acquisition_costs - First observed
get_rules - First observed
underwrite_property
Related MCP Connectors
Austria — consolidated federal law and case law, from the Bundeskanzleramt's…
Sourced location reports for Austrian addresses: hazards, noise, transport, zoning, demographics.
UK buy-to-let maths: true net yield, cashflow, Section 24, stamp duty and area rental yields.
Rental property management for German landlords: properties, tenants, rent, loans, expenses
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to search and retrieve Austrian federal legislation, provisions, case law, and EU implementation data with verbatim source citations and currency validation.61 npmApache 2.0
- AlicenseAqualityCmaintenanceAustria's legal information system (RIS): federal & state law, case law, gazettes, change monitoring.1048 PyPI2Apache 2.0
- AlicenseAqualityAmaintenanceExact French real-estate legal calculations for AI agents: IRL rent revision, service-charge reconciliation, compliant rent receipts — legal basis included in every answer.41MIT
- AlicenseAqualityBmaintenanceEnables searching and retrieving Austrian federal legislation and case law from the official legal information system RIS, with verifiable ELI and ECLI identifiers.6Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.