Skip to main content
Glama
vikramwish

mcp-uae-property

by vikramwish

mcp-uae-property: Model Context Protocol Server for UAE Real Estate Intelligence

CI License: MIT TypeScript Model Context Protocol

Production-ready Model Context Protocol (MCP) server providing Dubai Land Department (DLD) transaction fee calculations, rental yield formulas, off-plan property search, and mortgage affordability modeling for AI agents.

flowchart LR
    Client["AI Agent Client\n(Claude / Cursor / Antigravity)"]
    Transport["StdioServerTransport\n(JSON-RPC 2.0)"]
    Router["MCP Request Router\n(mcp-uae-property)"]
    Tools["Tools Engine\n• calculate_rental_yield\n• calculate_dubai_fees\n• calculate_mortgage_eligibility\n• search_offplan_developments\n• get_dld_area_analytics"]
    Resources["Resources\n• property://districts\n• property://golden-visa-rules"]
    Data["Curated UAE Datastore\n(DLD benchmarks & Emaar/Nakheel data)"]

    Client <-->|stdio| Transport
    Transport <--> Router
    Router --> Tools
    Router --> Resources
    Tools --> Data
    Resources --> Data

Why it exists

AI agents frequently produce hallucinations when answering questions about the UAE property market because transaction fee structures (DLD 4% transfer fees, registration trustee fees, Oqood), Central Bank LTV limits, and net rental yields follow strict local regulations. mcp-uae-property gives agents verified deterministic tools and structured resources to model Dubai property acquisitions with institutional rigor.

Related MCP server: MCP-Dubai

Features

  • Calculates gross and net rental yields: Computes developer service charges per sq.ft, maintenance reserves, vacancy buffers, and 5-year cumulative cash flow forecasts.

  • Audits Dubai Land Department transaction fees: Details the 4% transfer fee, AED 580 administrative cost, 2% broker commission (+ VAT), and trustee registration fees.

  • Evaluates UAE Golden Visa eligibility: Automatically flags whether a property valuation meets the AED 2,000,000 threshold for the 10-year investor residency visa.

  • Simulates Central Bank mortgage limits: Computes LTV caps (80% for expats up to AED 5M; 85% for UAE nationals), monthly amortization, stress-test interest buffers (+2%), and the 50% Debt-Burden Ratio (DBR) ceiling.

  • Queries curated off-plan developments: Filters premier off-plan launches across Downtown Dubai, Palm Jumeirah, Dubai Hills Estate, and Dubai Creek Harbour by developer, completion year, and payment plan.

  • Serves real-time district benchmarks: Returns average price per sq.ft, median 1-bed rentals, and 5-year historical capital appreciation across Dubai sub-markets.

Architecture

The server implements the Model Context Protocol over the standard input/output transport (StdioServerTransport), exposing:

  1. Tools: Callable functions backed by Zod runtime input validation schemas.

  2. Resources: Direct JSON and Markdown payloads accessible at property://districts and property://golden-visa-rules.

  3. Prompts: Reusable agent templates including dubai-investment-memo for automated memo generation.

Tech stack

Component

Technology

Rationale

Protocol SDK

@modelcontextprotocol/sdk

Official Anthropic & Linux Foundation MCP specification standard

Language

TypeScript 5.7 (ES2022 / NodeNext)

Type safety with strict null checking and declaration maps

Validation

Zod 3.24

Runtime schema parsing and descriptive JSON-RPC error generation

Test Framework

Vitest 3.0

Fast, concurrent unit and integration test runner

Transport

Stdio (Standard I/O)

Universally supported across Claude Desktop, Cursor, and Antigravity

Quick start

1. Installation & Local Build

git clone https://github.com/vikramwish/mcp-uae-property.git
cd mcp-uae-property
npm install
npm run build

2. Connect to Claude Desktop

Add this to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "uae-property": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/mcp-uae-property/dist/index.js"]
    }
  }
}

3. Connect to Cursor / Antigravity

Add this to your project .cursor/mcp.json or Antigravity configuration:

{
  "mcpServers": {
    "uae-property": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/mcp-uae-property/dist/index.js"]
    }
  }
}

Testing

The suite covers calculation edge cases, Central Bank LTV boundary conditions, Zod rejection of invalid types, and MCP JSON-RPC protocol round-trips.

npm test
✓ tests/calculations.test.ts (6 tests)
✓ tests/tools.test.ts (5 tests)
✓ tests/mcp-server.test.ts (3 tests)
Test Files  3 passed (3)
Tests       14 passed (14)

Roadmap

  • Direct integration with Dubai Pulse Open Data API for weekly transaction volume updates.

  • Multi-currency conversion tool (AED, USD, EUR, GBP, AUD) with live forex parity.

  • Support for Abu Dhabi (DMT) registration fee variants.

  • Standalone SSE / HTTP streaming transport for remote cloud agent access.

What I learned

  • Designed deterministic financial models under the Model Context Protocol standard, allowing LLMs to ground complex decisions in verified calculations.

  • Implemented comprehensive Central Bank of the UAE regulatory logic (stress testing, DBR caps, LTV tiers) in clean, modular TypeScript with 100% test coverage.

  • Structured agent prompts and resources to bridge real-world real estate domain knowledge directly into conversational AI environments.

Available Tools

5 tools
calculate_dubai_feesA

Calculates all official upfront purchase fees: Dubai Land Department (DLD) 4% transfer fee, administration fees, agency commission (2% + VAT), registration trustee fees, mortgage registration fees, and checks 10-year Golden Visa eligibility (>= 2,000,000 AED).

ParametersJSON Schema
NameRequiredDescriptionDefault
isOffPlanNoTrue if buying off-plan from developer; false for secondary market ready property
hasMortgageNoTrue if financing via mortgage
purchasePriceAEDYesAgreed purchase price in AED
mortgageAmountAEDNoMortgage loan principal in AED

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does usefully disclose conditional logic (Golden Visa eligibility at >= 2,000,000 AED) and the composition of the fee calculation, but it never states that this is a pure read-only computation with no side effects, nor how conditions like hasMortgage change which fees appear.

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?

A single dense sentence that front-loads the core purpose and then lists components. Every clause maps to a real output of the tool; the only minor cost is the long enumeration, which is dense but not wasteful.

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

Completeness4/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 must convey what is returned, and the fee enumeration plus the Golden Visa flag effectively does that. It falls short of describing the return structure (a breakdown object, currency, totals) but covers the substantive content an agent needs to select the tool.

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?

Schema description coverage is 100%, so the four parameters are already fully documented and the baseline is 3. The description adds limited incremental meaning: it implies mortgage registration fees depend on the mortgage parameters, but adds no format, unit, or interaction detail beyond what the schema already states.

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?

The description gives a specific verb (calculates) and enumerates the exact fee components produced: DLD 4% transfer fee, admin fees, agency commission, trustee fees, mortgage registration fees, plus a Golden Visa eligibility check. This is far more specific than its siblings (calculate_rental_yield, calculate_mortgage_eligibility), though it never explicitly contrasts itself with them, so an agent must infer the boundary.

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

Usage Guidelines3/5

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

It is clearly implied the tool applies to upfront purchase-fee scenarios, and the Golden Visa threshold hints at a secondary use case, but there is no statement of when to use this versus calculate_mortgage_eligibility or calculate_rental_yield. Usage must be inferred from the fee list rather than stated.

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

calculate_mortgage_eligibilityA

Calculates mortgage affordability per UAE Central Bank regulations: LTV caps for expats (80% / 70%) and UAE nationals (85% / 75%), monthly payment, stress-test interest rate buffer (+2%), and 50% Debt-Burden Ratio (DBR) cap.

ParametersJSON Schema
NameRequiredDescriptionDefault
isUAENationalNoTrue if borrower is UAE National; false for expats
loanTermYearsYesLoan tenor in years (max 25)
isFirstPropertyNoTrue if first residential property in UAE
monthlyIncomeAEDYesMonthly salary/income in AED
propertyPriceAEDYesProperty valuation/price in AED
otherMonthlyDebtsAEDNoExisting monthly debt commitments in AED
annualInterestRatePercentYesAnnual interest rate (e.g. 4.5)

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses the specific rules applied (LTV caps by nationality/first-property status, +2% stress-test buffer, 50% DBR cap). It does not explicitly state that the tool is a pure, side-effect-free computation, but 'Calculates' plus the regulatory detail makes the behavior largely transparent.

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?

A single dense sentence that front-loads the purpose and enumerates the rules computed; nothing is wasted. It is slightly packed for one sentence, but every clause carries regulatory information the agent cannot get from the schema.

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

Completeness4/5

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

For a 7-parameter computation tool with no output schema and no annotations, the description supplies the regulatory model needed to understand the inputs and infer the outputs (eligibility, monthly payment, DBR). It stops short of describing the return shape or edge-case handling, but is largely complete.

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?

Schema description coverage is 100%, so parameter meaning is already documented. The description adds domain context by tying nationality and first-property status to LTV cap tiers, but it does not explain how each input (e.g. otherMonthlyDebtsAED) feeds the DBR or stress-test computation, so it stays at the baseline for fully-covered schemas.

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 (Calculates) and resource (mortgage affordability/eligibility) and names the regulatory regime it implements. It is clearly distinguishable from siblings like calculate_rental_yield and calculate_dubai_fees, which address different financial questions.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance and no mention of alternative tools. The regulatory framing implies a use case, but the agent is given no routing criteria or prerequisites (e.g. that this is for new mortgage eligibility rather than refinancing).

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

calculate_rental_yieldA

Calculates Dubai gross and net rental yield percentages, accounting for developer service charges (AED/sq.ft), vacancy allowance, maintenance, and a 5-year cashflow projection.

ParametersJSON Schema
NameRequiredDescriptionDefault
propertySizeSqFtNoProperty built-up area in sq.ft (default: 850)
purchasePriceAEDYesTotal property purchase price in AED
vacancyWeeksPerYearNoEstimated vacancy allowance in weeks per year (default: 2)
annualMaintenanceAEDNoAnnual maintenance budget in AED (default: 2000)
managementFeePercentNoProperty management fee percentage (default: 5%)
expectedAnnualRentAEDYesProjected annual gross rent in AED
serviceChargePerSqFtAEDNoAnnual service charge in AED per sq.ft (default: 16)

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose the computational scope: it accounts for service charges, vacancy allowance, maintenance, and produces a 5-year cashflow projection in addition to gross/net yields. It does not discuss assumptions or edge cases (e.g., how defaults interact), but for a stateless calculator the behavior is well communicated.

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?

A single, front-loaded sentence that states the computation before listing the inputs it accounts for. Every clause earns its place; there is no filler or repetition.

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

Completeness4/5

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

There is no output schema, so the description usefully names the returns (gross and net yield percentages plus a 5-year cashflow projection). With 7 params fully covered by the schema and no annotations to compensate for, this is nearly complete; only assumption or edge-case detail is missing.

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?

Schema description coverage is 100%, so all seven parameters including defaults are already documented in the schema. The description echoes the same concepts (service charges AED/sq.ft, vacancy, maintenance) without adding format, range, or unit nuance beyond what the schema provides, so the baseline 3 applies.

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?

The description gives a specific verb and resource: 'Calculates Dubai gross and net rental yield percentages,' and enumerates the cost components it factors in. It is clearly distinct in domain from the other calculators (fees, mortgage eligibility), but it never names or contrasts those siblings explicitly, so it falls just short of a 5.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus calculate_dubai_fees, calculate_mortgage_eligibility, or get_dld_area_analytics, and no prerequisites or exclusions. The only usage signal is implied by the subject matter (Dubai property investment analysis), which is weak guidance.

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

get_dld_area_analyticsA

Retrieves district-level investment metrics including average price per sq.ft, median 1-bedroom rents, typical gross yields, and 5-year capital appreciation for Dubai sub-markets.

ParametersJSON Schema
NameRequiredDescriptionDefault
districtYesDistrict name or ID (e.g. "downtown-dubai", "Dubai Marina", "palm-jumeirah")

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. The verb 'Retrieves' implies a read-only lookup, which is useful, but nothing is said about data currency, coverage limits, behavior for an unrecognized district, authentication, or rate limits.

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?

A single dense sentence with the verb front-loaded and every clause carrying distinct content (the four metric families plus the geographic scope). Nothing is wasted, though the 'Dubai sub-markets' tail is close to redundant with the rest of the sentence.

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

Completeness4/5

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

With no output schema and only one parameter, the description correctly spends its words enumerating the returned metrics, which is the main thing an agent would otherwise lack. It is close to sufficient, missing only edge behavior for invalid districts and the granularity of the metrics returned.

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?

Schema description coverage is 100%, with the district parameter documented and exemplified ('downtown-dubai', 'Dubai Marina', 'palm-jumeirah'), so the baseline is 3. The description adds 'district-level' scoping but no extra parameter syntax or format detail beyond the schema.

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?

The description names a specific verb (Retrieves) and resource (district-level investment metrics), and enumerates the exact metrics returned (price per sq.ft, 1-bed rents, gross yields, 5-year appreciation). It implicitly separates itself from the calculation siblings by being a retrieval/lookup tool, but it never names an alternative, so sibling differentiation is left to inference.

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

Usage Guidelines3/5

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

Usage is only implied: the presence of a district parameter and the phrase 'for Dubai sub-markets' signals you call it to look up already-computed district analytics. There is no explicit when-to-use or when-not guidance, and no routing to or from siblings like calculate_rental_yield, which also concerns yields.

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

search_offplan_developmentsC

Searches curated premier Dubai off-plan developments by budget, district, developer (Emaar, Nakheel, Damac, Sobha, Ellington), and Golden Visa status.

ParametersJSON Schema
NameRequiredDescriptionDefault
districtNoDistrict name (e.g. Marina, Downtown, Palm)
developerNoDeveloper name (e.g. Emaar, Damac)
maxBudgetAEDNoMaximum budget in AED
minBudgetAEDNoMinimum price in AED
goldenVisaOnlyNoFilter only projects >= 2M AED

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It hints at a curated read-only catalog but says nothing about result count, pagination, sort order, whether all filters are optional, or what happens with no filters — meaningful gaps for a search endpoint.

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?

A single, front-loaded sentence that names the resource and its filterable facets with no filler. Efficient, though slightly dense with an enumerated developer list.

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

Completeness3/5

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

For a five-parameter, all-optional search with no output schema, the description should at least gesture at the shape or volume of returned results. It covers the input facets well but leaves the output side entirely to inference.

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?

Schema coverage is 100%, so all five parameters are already documented in the schema, establishing a baseline of 3. The description adds only marginal value by naming specific developers (Emaar, Nakheel, Damac, Sobha, Ellington), which slightly clarifies the valid developer domain, but adds nothing beyond what the schema describes.

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 ('searches') and resource ('curated premier Dubai off-plan developments') and enumerates the filterable dimensions, so the purpose is unmistakable. It doesn't explicitly contrast itself with the sibling calculators/analytics tools, but the search-vs-compute distinction is inferable.

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

Usage Guidelines2/5

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

No guidance on when to use this versus siblings like get_dld_area_analytics, nor any prerequisites or exclusions. Usage is only implied by the word 'searches'.

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. 5 tool updatesv1.0.0
    • First observedcalculate_dubai_fees
    • First observedcalculate_mortgage_eligibility
    • First observedcalculate_rental_yield
    • First observedget_dld_area_analytics
    • First observedsearch_offplan_developments

TDQS

A3.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a clearly distinct purpose: yield calculation, upfront fee calculation, mortgage eligibility, off-plan search, and district analytics. There is no meaningful overlap that could cause misselection.

Naming Consistency5/5

All five tools follow a strict snake_case verb_noun pattern (calculate_*, search_*, get_*). The convention is applied uniformly with no deviations.

Tool Count5/5

Five focused tools map neatly onto the discrete decision points of Dubai property investment (yield, fees, financing, discovery, market data). Each tool earns its place with no redundancy.

Completeness4/5

The surface covers the core investment decision workflow well, but lacks operations like comparing two developments, retrieving a specific property/unit's details, or saving/exporting results. These are minor gaps an agent can work around with repeated tool calls.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Open-source MCP server providing real estate regulatory intelligence (zoning, permits, entitlements, deal scoring) for US properties, enabling AI agents to access 10 callable tools.
    12
    9 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that provides AI agents with access to Dubai and UAE public data (prayer times, exchange rates, school ratings, etc.) and curated business setup knowledge for entrepreneurs.
    100
    33 PyPI
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive real estate market intelligence, property valuation, and investment analysis for AI agents. Unifies data from multiple sources like Zillow, Redfin, and public records into a single MCP interface.
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Verified Singapore property, tax, affordability, salary, and location data for AI agents. 17 MCP tools, x402 micropayments, source provenance on every response. Singapore live now, more markets coming. Categories: Finance, Real Estate, Data, Singapore, x402, Payments, Government Data
    17
    -