Skip to content
Dubai Wealth Index
Search
Search buildings, areas and projects by name.

The index as tools

Read-only tools over registered Dubai apartment prices, rents and returns. Free, and the same data the pages are built from.

Edition DWI-DOCS-MCP
Transport
Streamable HTTP
Rate limit
120/min

Everything these tools return is public. Authorisation is not gatekeeping — it makes the caller a real identity, which is what lets the endpoint be rate limited fairly and what lets one tool read the buildings you have saved.

Connecting

Give your client this URL. It discovers the authorization server from the endpoint’s protected-resource metadata, registers itself, and sends you here to sign in and approve.

https://dubaiwealthindex.com/api/mcp

For a client that takes a JSON config:

{
  "mcpServers": {
    "dubai-wealth-index": {
      "type": "http",
      "url": "https://dubaiwealthindex.com/api/mcp"
    }
  }
}

For a stdio-only client, bridge it: npx mcp-remote https://dubaiwealthindex.com/api/mcp.

Authorization

OAuth 2.1, following the MCP authorization specification. The endpoint is a resource server; this site is also the authorization server.

Discovery needs no token. A client may initialize and list the tools, resources and prompts anonymously, so it can see what this server offers before deciding whether to authorize. The first tools/call answers 401 with a WWW-Authenticate challenge naming the metadata document, which is where authorization starts. Registration is dynamic and open, so a client registers itself; the only human step is approving the consent screen.

Protected resource metadata
https://dubaiwealthindex.com/.well-known/oauth-protected-resource
Authorization server metadata
https://dubaiwealthindex.com/.well-known/oauth-authorization-server
Resource identifier
https://dubaiwealthindex.com/api/mcp

Scopes

mcp:read
Read the index. Look up buildings, areas, rankings and the methodology. Public data only — the same figures anyone can read on the site.
mcp:favorites
Read your saved buildings. See the buildings you have saved on this account, with their current figures. Read-only: it cannot save or remove anything.

Clients start with mcp:read and step up to favorites only if they call that tool. Revoke any connected application from your account.

Tools

fetchmcp:read
Retrieve a full document by the id a search hit returned, or by any canonical URL on this site. Returns the record as markdown — the same rendition the URL itself serves, so a quote from it and a quote from the page cannot differ. Use it after search when the question needs the whole record rather than one figure, and for the pages no typed tool covers: rankings, off-plan and short-let listings, the methodology and the prose pages. A retired building reports as retired with its area, never as a silent redirect.
idstring, 1–300 charsA search hit id, a site path such as "/sale/apartments/dubai/business-bay/vera-tower", or the full URL.
get_buildingmcp:read
The full record for one apartment building: median registered sale prices, registered rents, gross yield and the basis it was computed on, 12-month and multi-year growth, turnover upside, off-plan uplift, and the forward short-let rate curve where one exists — all by bedroom type. Figures are medians of registered Dubai Land Department sales and Ejari contracts, not asking prices. Identical to the site's public JSON record, so a citation from either resolves the same way.
areaslugArea slug from a canonical URL, e.g. "business-bay".
buildingslugBuilding slug, e.g. "vera-tower".
purpose"sale" | "rent"Which page's eligibility gate to apply. A building may publish one and not the other.
includeMonthlyboolean, default falseMonthly series. Long — omit unless the question is about a trend.
get_building_transactionsmcp:read
The individual registered transactions a building's medians rest on: ready resales, off-plan sales and Ejari contracts, with date, bedroom type, price and floor area. Use it to check whether a median rests on many comparable sales or a few scattered ones. Two caveats travel with every response and must be repeated when quoting: rent rows exist only where rent was measured at building grain, and transaction rows are not snapshot-versioned, so they can be one refresh ahead of the medians on the same building.
areaslugArea slug.
buildingslugBuilding slug.
windowMonths3 | 6 | 12, default 3Lookback. 3 is the default: a fair-price read wants the freshest evidence.
get_areamcp:read
One Dubai area: its own median yield, price per square foot, rent and 12-month growth, medians by bedroom type, and every building it publishes, ordered by gross yield with unpublishable yields last rather than hidden. Also lists buildings that trade but sit below the publication gate, so the set is never mistaken for the whole market.
areaslugArea slug.
purpose"sale" | "rent"Which market to read.
bedroom"all" | "studio" | "1br" | …"all" is the area hub; a specific bedroom is the category-page grain.
buildingLimit1–200, default 50The largest area publishes 362 buildings; uncapped this exhausts a context window.
get_villa_communitymcp:read
One Dubai villa community: median registered sale price or rent, price per square foot, gross yield with the rent grain it rests on, 12-month growth, and the same by bedroom count. Community grain only — the Land Department records no building for a villa, so nothing finer exists. search returns villa communities as hits of kind "villa".
communityslugCommunity slug, e.g. "arabian-ranches".
purpose"sale" | "rent"Which market to read.
get_city_overviewmcp:read
What the index rests on and what it says citywide: how many buildings, registered transactions and rent contracts, the median yield, price per square foot, rent and growth, and the same medians for every area ordered by how many buildings each publishes. Use it to pick an area before drilling in, or to state the index's coverage.
purpose"sale" | "rent"Which market to read.
bedroombedroom, default "all"Cut the whole city to one unit size.
get_rankingmcp:read
One ranking, citywide or for a single area: highest gross yields, fastest price growth, best off-plan resale returns, biggest turnover upside, or biggest short-let premium. Each list is ordered by exactly one published number, and the method behind that number is returned with it. A ranking exists only where at least ten buildings qualify — below that an ordering reads as generated rather than measured. Never present a ranking as exhaustive.
rankinghighest-yield-apartments | fastest-growing-apartments | best-offplan-returns | biggest-turnover-upside | best-short-let-premiumWhich list.
areaslug, optionalOmit for the citywide list.
limit1–50, default 25How many rows.
list_rankingsmcp:read
Every ranking this index publishes, with the exact method behind each and the areas an area-level version exists for. Read it before get_ranking to pick the right list, and to quote the method alongside any figure taken from one.
get_methodologymcp:read
How every figure on this index is defined and computed: the full glossary, the provenance of each source, and the short-let cost-model constants with their live values. Read it before quoting any figure. In particular: yields are gross, rents are registered rather than asking, and short-let occupancy is a stated modelling assumption — never a measurement.
termglossary key, optionalOne definition; omit for the whole glossary.
list_favoritesmcp:favorites
The buildings saved on the signed-in account, with their current figures. Buildings that have fallen below the publication gate since being saved are reported as such rather than dropped silently. This is the one tool that reads anything account-specific; everything else here is public data.

Resources

dwi://snapshot
The current data date and the headline counts behind it. The cheapest way to check whether the index has refreshed since you last read it.
dwi://methodology
Every definition and every short-let cost-model constant, as markdown.
dwi://data-dictionary
Every field in a record: unit, grain, definition and what an absent value means.
dwi://rankings/catalog
The ranking families with their method strings and area lists.
dwi://skill
When to reach for this index, how to call it, and the rules for quoting a figure.
dwi://area/{area}
An area's medians and published buildings. Listable: the area slugs are enumerated.
dwi://building/{area}/{building}
A building's full record. Not enumerated — roughly 4,700 buildings would make a resources/list response useless.

Prompts

evaluate_building
Reads the record, the transactions behind it and the method, then reports each figure with its bedroom type, unit, period, data date and evidence count.
area, building
compare_areas
Reads several areas on the same purpose and bedroom grain, and refuses to compare a sale figure against a rent one.
areas, purpose
find_high_yield
Works from the ranking catalogue rather than a scan, and states the floor and cap so the list is never presented as exhaustive.
area, bedroom
short_let_vs_lease
The highest-risk comparison on the site. Forces the occupancy assumption, the platform fee and the self-managed assumption to be stated before any premium is quoted.
area, building, bedroom
cite_figure
Emits the citation format this index publishes.
url

Rate limits and etiquette

120 requests per minute per account. Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset, so a well-behaved client throttles itself before it is ever refused. A refusal is a JSON-RPC error with Retry-After, not a bare 429 body, so it does not break a session.

This runs on one small server. The data changes roughly monthly and every payload states its date — cache accordingly rather than re-reading the same building every turn.

Quoting what it returns

The server sends its quoting rules as instructions at initialization, and every tool result repeats the ones that bear on it. The short version: carry the bedroom type, unit, period, data date and evidence count; yields are gross; rents are registered contracts; short-let occupancy is an assumption, not a measurement; a null is suppressed, not zero. In full at /skill.md.