Skip to main content
Glama

Server Details

Austrian property costs, buy-to-let underwriting, income tax and rent caps, cited to the statute

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
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

A4.4/5.0

Scored across 3 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
estimate_acquisition_costsAustrian property purchase costsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
brokerYesBroker commission, or "none" if the purchase is commission-free (provisionsfrei).
detailNoHow 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.
financingNoMortgage financing, if any. Adds the court fee for registering the mortgage.
assumptionsNoOverride default assumptions. Omit to use documented defaults.
purchasePriceYesPurchase price in EUR (the agreed price for the property), e.g. 249000.
valuationDateNoDate 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

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 assumptionsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
dateNoReturn the rules valid on this date, YYYY-MM-DD. Defaults to today (Vienna time).

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 purchaseA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
taxNoFacts for the income tax on rent and the depreciation (AfA). Omit to use flagged defaults (40% marginal rate, 40% land share).
rentYesExpected rent.
brokerYesBroker commission, or "none" if the purchase is commission-free (provisionsfrei).
detailNoHow 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.
propertyNoProperty facts. Pass what you know; missing facts are flagged.
financingNoMortgage financing. Omit for a cash purchase.
ownerCostsNoCosts the owner pays that cannot be passed on to the tenant.
assumptionsNoOverride default assumptions. Omit to use documented defaults.
purchasePriceYesPurchase price in EUR (the agreed price for the property), e.g. 249000.
valuationDateNoDate 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

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 2 tool updates
    • Changedestimate_acquisition_costs1 field changed
      • addedInput schema / properties / detail
        Added 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"
        +}
    • Changedunderwrite_property1 field changed
      • addedInput schema / properties / detail
        Added 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"
        +}
  2. 1 tool update
    • Changedunderwrite_property2 fields changed
      • addedInput schema / properties / property / properties / state
        Added 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"
        +}
      • addedInput schema / properties / rent / properties / fixedTerm
        Added value: +{
        +  "description": "Whether the lease is fixed-term (befristet). For rent-capped flats this lowers the cap by 25%. Omit if unknown.",
        +  "type": "boolean"
        +}
  3. 1 tool update
    • Changedunderwrite_property2 fields changed
      • addedInput schema / properties / assumptions / properties / marginalTaxRatePct
        Added value: +{
        +  "description": "Owner's marginal income tax rate in %, applied to the rental result. Default 40. Ignored when tax.otherTaxableIncome is given.",
        +  "type": "number"
        +}
      • addedInput schema / properties / tax
        Added 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"
        +}
  4. 3 tool updates
    • First observedestimate_acquisition_costs
    • First observedget_rules
    • First observedunderwrite_property

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.