Heart Homes MCP
A public, read-only MCP server providing access to official Dubai Land Department (DLD) property data, including registered sale prices, rents, and market trends. It allows agents to search locations, get market overviews, check asking prices against registered records, and analyze community or building statistics without requiring authentication.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://heart.homes/mcpWhat its tools do
13 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to heart.homes ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for Dubai locations and communities
- Get market overviews and trend movers
- Check asking prices against registered DLD sales
- Retrieve building statistics and recent transactions
Source and maintenance
Protocol and capabilities
- Server
- heart-homes 1.0.2
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 13 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
13 advertised
search_locations — Search locations
Resolve a free-text Dubai location name (community, area, or building) to canonical slugs. Always call this first when the user names a place; other tools take the returned slugs.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"kind": {
"enum": [
"community",
"area",
"building"
],
"type": "string",
"description": "Restrict results to one kind"
},
"query": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "Location name to search for"
}
}
}{
"title": "Search locations",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_market_overview — Dubai market overview
City-wide Dubai sales KPIs over the last 12 months (transaction count, total value, median price, median price per sqm) plus data freshness. Good first call for broad questions.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"title": "Dubai market overview",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_location_stats — Location statistics
Headline stats for one community or area slug: 12-month sales volume, median price, price per sqm, 12-month trend, plus a property-class mix for sales and rents. When propertyClass is set for a community, also returns per-bedroom sales and rent breakdowns; rent bedroom coverage is partial and must be reported as approximate using rentBedroomCoveragePct and rentBedroomNote. Per-bedroom rent for a single building is not available.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Location slug (community or area) as returned by search_locations"
},
"propertyClass": {
"enum": [
"apartment",
"villa",
"building",
"land"
],
"type": "string",
"description": "When set, also return the per-bedroom sales breakdown and, where attributable, a per-bedroom rent breakdown with partial-coverage figure (communities only)"
}
}
}{
"title": "Location statistics",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_ready_vs_offplan — Ready vs off-plan (secondary market) split
Sales split between the secondary (ready / resale) market and the off-plan (pre-completion developer) market for one community or area over the last 12 months - transaction count, total value, and median price for each. "ready" = completed homes resold on the secondary market; "off-plan" = pre-completion developer sales. Property flipping, reselling, and "resale market" questions are READY / secondary-market questions: report the ready row here and do not present off-plan figures as flipping or resale figures. Optionally filter to one property class.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Location slug (community or area) as returned by search_locations"
},
"propertyClass": {
"enum": [
"apartment",
"villa",
"building",
"land"
],
"type": "string",
"description": "Property class filter"
}
}
}{
"title": "Ready vs off-plan (secondary market) split",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_price_history — Monthly price history
Monthly transaction counts and median prices for a community/area slug (or city-wide when slug is omitted), for sales or rents, optionally filtered to one property class. Rent medians are annual contract values in AED/year.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"sale",
"rent"
],
"type": "string",
"description": "'sale' = DLD sales transactions, 'rent' = Ejari rent contracts"
},
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Omit for city-wide history"
},
"months": {
"type": "integer",
"default": 24,
"maximum": 60,
"minimum": 3
},
"propertyClass": {
"enum": [
"apartment",
"villa",
"building",
"land"
],
"type": "string",
"description": "Property class filter"
}
}
}{
"title": "Monthly price history",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_building_stats — Building statistics
Stats for one building: 12-month sales, median price, trend, recent sales, property-type mix, and - where rent contracts can be attributed to the building - median annual rent and recent rent contracts, and a per-bedroom rent breakdown where enough contracts resolve a bedroom. Takes the communitySlug + buildingSlug pair returned by search_locations.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"communitySlug",
"buildingSlug"
],
"properties": {
"buildingSlug": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"communitySlug": {
"type": "string",
"maxLength": 120,
"minLength": 1
}
}
}{
"title": "Building statistics",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}rank_buildings — Rank buildings within a community
Buildings in one community ranked by 12-month median sale price or median annual rent - answers 'cheapest/most expensive buildings in X'. Rent coverage is partial: Ejari records carry no building name, so only buildings whose project name identifies them uniquely have rent stats. Buildings with fewer than 5 records are excluded.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"communitySlug",
"metric",
"order"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 15,
"minimum": 3
},
"order": {
"enum": [
"cheapest",
"most_expensive"
],
"type": "string"
},
"metric": {
"enum": [
"sale_price",
"annual_rent"
],
"type": "string"
},
"communitySlug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Community slug from search_locations"
}
}
}{
"title": "Rank buildings within a community",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}list_recent_transactions — Recent transactions
Most recent registered DLD sales or rent contracts for a community or area slug - real records to ground price talk in.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"kind"
],
"properties": {
"kind": {
"enum": [
"sale",
"rent"
],
"type": "string",
"description": "'sale' = DLD sales transactions, 'rent' = Ejari rent contracts"
},
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Location slug (community or area) as returned by search_locations"
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 15,
"minimum": 1
}
}
}{
"title": "Recent transactions",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}compare_buy_vs_rent — Buy vs rent comparison
Compare buying vs renting in one community or area: 12-month weighted median sale price, median annual rent, and the implied gross rental yield. Optionally filter to one property class.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Location slug (community or area) as returned by search_locations"
},
"propertyClass": {
"enum": [
"apartment",
"villa",
"building",
"land"
],
"type": "string",
"description": "Property class filter"
}
}
}{
"title": "Buy vs rent comparison",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}rank_communities — Rank communities by price or rent
Communities ranked by 12-month median sale price or median annual rent - the direct answer to 'cheapest areas', 'most expensive communities', 'most affordable rents'. Only communities with 30+ transactions are ranked; without a propertyClass filter, only residential classes (apartments + villas) count, so whole-building leases and land deals don't skew the medians.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"metric",
"order"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 15,
"minimum": 3
},
"order": {
"enum": [
"cheapest",
"most_expensive"
],
"type": "string"
},
"metric": {
"enum": [
"sale_price",
"annual_rent"
],
"type": "string",
"description": "Rank by sale prices or by annual rents"
},
"propertyClass": {
"enum": [
"apartment",
"villa",
"building",
"land"
],
"type": "string",
"description": "Property class filter"
}
}
}{
"title": "Rank communities by price or rent",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_trends_movers — Trending communities
Communities with the biggest 12-month price moves (direction 'up' = risers, 'down' = fallers). Only communities with 30+ sales are included, so thin-volume noise is excluded.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"direction"
],
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1
},
"direction": {
"enum": [
"up",
"down"
],
"type": "string"
}
}
}{
"title": "Trending communities",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}check_asking_price — Check an asking price
Is an asking price fair? Compares it against registered DLD sales of the same layout (bedroom count) in the same building over the last 24 months: verdict vs the median, approximate percentile, resale-only median, and recent sales. No verdict when fewer than 5 sales back it. A negotiation guide, not a valuation. Takes the communitySlug + buildingSlug pair returned by search_locations.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"communitySlug",
"buildingSlug",
"bedrooms",
"askingAed"
],
"properties": {
"bedrooms": {
"type": "integer",
"maximum": 7,
"minimum": 0,
"description": "Bedrooms: 0 = studio, 1-7 = that many bedrooms"
},
"askingAed": {
"type": "number",
"maximum": 10000000000,
"description": "Asking price in AED",
"exclusiveMinimum": 0
},
"buildingSlug": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"communitySlug": {
"type": "string",
"maxLength": 120,
"minLength": 1
}
}
}{
"title": "Check an asking price",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}check_asking_rent — Check a rent
Is a rent fair, and how much can a landlord raise it? Compares a quoted annual rent against registered Ejari contracts in the same building over the last 12 months (per bedroom where enough contracts resolve one), and estimates the maximum renewal increase under Dubai's rent-increase slabs (Decree 43 of 2013) from the current rent. Give quotedAnnualAed, currentAnnualAed, or both. No verdict when fewer than 5 contracts back it. Takes the communitySlug + buildingSlug pair returned by search_locations.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"communitySlug",
"buildingSlug"
],
"properties": {
"bedrooms": {
"type": "integer",
"maximum": 7,
"minimum": 0,
"description": "Bedrooms: 0 = studio, 1-7 = that many bedrooms"
},
"buildingSlug": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"communitySlug": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"quotedAnnualAed": {
"type": "number",
"maximum": 100000000,
"description": "Rent asked for a new lease or at renewal, AED per year",
"exclusiveMinimum": 0
},
"currentAnnualAed": {
"type": "number",
"maximum": 100000000,
"description": "Rent paid today, AED per year (renewal cap estimate)",
"exclusiveMinimum": 0
}
}
}{
"title": "Check a rent",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-06: 1 of 1 checks answered
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 767 ms
- 95th percentile latency
- 767 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 767 ms · metadata changed · 13 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http heart-homes-mcp https://heart.homes/mcpCodex
codex mcp add heart-homes-mcp --url https://heart.homes/mcpCursor
{
"mcpServers": {
"heart-homes-mcp": {
"url": "https://heart.homes/mcp"
}
}
}Cline
{
"mcpServers": {
"heart-homes-mcp": {
"type": "streamableHttp",
"url": "https://heart.homes/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"heart-homes-mcp": {
"type": "http",
"url": "https://heart.homes/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http heart-homes-mcp https://heart.homes/mcpClaude Desktop
https://heart.homes/mcpWindsurf
{
"mcpServers": {
"heart-homes-mcp": {
"serverUrl": "https://heart.homes/mcp"
}
}
}Let your agent find its tools
Find servers like Heart Homes MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run Heart Homes MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.