Machine capability
Property sale and ownership data for AI agents
Recorded deeds with consideration, book and page, plus the assessor parcel layer behind them. This is DFX's DEEPEST data and its NARROWEST geography, and the two facts belong in the same sentence.
Short answer
What did this property sell for, and who owns it? Yes, for 2 states only: MA, NY. 43,680 published events, measured 12 September 2026. Free, with no API key and no signup. Call resolve_address at https://exchange-production-9123.up.railway.app/mcp.
What it returns
Per sale: the recorded date, the consideration as published, this parcel's allocated share of it, the allocation basis, how many parcels the instrument covered, and the registry book and page. Per parcel: assessed value, land use, gross building area, value per square foot, annual tax and year built.
Coverage, with the denominators
Coverage is uneven by family and stating it any other way would be the one failure that matters here. These are whole populations, not samples.
| Event family | Events | Where it is covered |
|---|---|---|
| PROPERTY_SOLD | 43,680 | 2 states only: MA, NYMA NY |
Why this is different from the alternatives
A deed repeats its full consideration on every parcel it covers, so summing the naive column multiplies a portfolio sale by the number of parcels in it. DFX carries the instrument total and the allocated share as separate fields and states which split is its own. Most sale feeds carry one number and do not say which one it is.
A real call, and the real response
Executed against production when this page was generated. The response below is what came back, truncated, not an illustration.
Recent recorded property sales in New York.
No within_days: a sale has already happened, and the filter looks forward.
curl -s https://exchange-production-9123.up.railway.app/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_property_events","arguments":{"event_type":"PROPERTY_SOLD","state":"NY","limit":3}}}'Response (truncated)
{
"dfx": {
"capability": "search_property_events",
"version": "0.3.0",
"answered_at": "2026-09-12T14:38:49.532684+00:00"
},
"ok": true,
"count": 3,
"results": [
{
"dfx_id": "77553afc-ebf2-4a4f-a84e-6e95f991b6b5",
"place_kind": "parcel",
"event_type": "PROPERTY_SOLD",
"occurred_at": "2026-07-29",
"in_days": -45,
"headline": "500 COLUMBUS AVENUE, New York NY sold for $28,000,000 on 2026-07-29 to 500 COLUMBUS SP LLC",
"address": "500 COLUMBUS AVENUE",
"city": "New York",
"state": "NY",
"unit_count": null,
"address_known": true,
"magnitude": 28000000.0,
"magnitude_unit": "USD",
"evidence_class": "VERIFIED",
"source": "nyc_acris",
"sources": [
"nyc_acris"
],
"verify": {
"capability": "get_property_record",
"dfx_id": "77553afc-ebf2-4a4f-a84e-6e95f991b6b5"
}
},
{
"dfx_id": "8aa0afbb-7d54-472a-ab10-c7ec7faa200b",
"place_kind": "parcel",
"event_type": "PROPERTY_SOLD",
"occurred_at": "2026-07-24",
"in_days": -50,
"headline": "153-15 CROSS ISLAND PARKWAY, New York NY sold for $56,000,000 on 2026-07-24 to BTF WHITESTONE REALTY LLC",
"address": "153-15 CROSS ISLAND PARKWAY",
"city": "New York",
"state": "NY",
"unit_count": null,
"address_known": true,
"magnitude": 56000000.0,
"magnitude_unit": "USD",
"evidence_class": "VERIFIED",
"source": "nyc_acris",
"sources": [
"nyc_acris"
],
"verify": {
"capability": "get_property_record",
"dfx_id": "8aa0afbb-7d54-472a-ab10-c7ec7faa200b"
}
},
{
"dfx_id": "6af85b7a-86fc-491c-8714-c7e8749a3144",
"place_kind": "parcel",
"event_type": "PROPERTY_SOLD",
"occurred_at": "2026-07-24",
"in_days": -50,
"headline": "165 EAST 64 STREET, New York NY sold for $18,000,000 on 2026-07-24 to an individual buyer",
"address": "165 EAST 64 STREET",
"city": "New York",
"state": "NY",
"unit_count": null,
"address_known": true,
"magnitude": 18000000.0,
"magnitude_unit": "USD",
"evidence_class": "VERIFIED",
"source": "nyc_acris",
"sources": [
"nyc_acris"
],
"verify": {
"capability": "get_property_record",
"dfx_id": "6af85b7a-86fc-491c-8714-c7e8749a3144"
}
}
],
"state": "OK",
"coverage": {
"verdict": "COVERED",
"refreshed_at": "2026-09-12T13:53:10.534838+00:00"
},
"searched": true,
"complete": false,
"no_match": null,
"roTurn a street address into a canonical id.
curl -s https://exchange-production-9123.up.railway.app/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"resolve_address","arguments":{"address":"100 Binney St","city":"Cambridge","state":"MA"}}}'Response
{
"dfx": {
"capability": "resolve_address",
"version": "0.3.0",
"answered_at": "2026-09-12T14:38:44.889396+00:00"
},
"ok": true,
"objects": [
{
"dfx_id": "90555f06-627e-4946-a97f-8397a7bf8726",
"type": "parcel",
"name": "100 BINNEY ST",
"city": "Cambridge",
"state": "MA",
"county": null,
"apn": null,
"land_use": null,
"assessed_total": 494419400.0,
"assessment_year": 2026,
"address_ambiguous": false,
"match": {
"key": "100 BINNEY ST, CAMBRIDGE MA",
"basis": "exact normalised address"
},
"verify": {
"capability": "get_property_record",
"dfx_id": "90555f06-627e-4946-a97f-8397a7bf8726"
}
}
],
"count": 1,
"ambiguity": "unique",
"caution": null,
"no_match": null,
"interpreted": null,
"latency_ms": 549,
"state": "OK"
}Connecting
One HTTPS endpoint speaking Model Context Protocol over JSON-RPC. No signup, no API key, no OAuth for anything free. A plain GET on the endpoint returns every tool schema, so you can evaluate the server without calling it.
Claude Code
one command, then it is available in every session
claude mcp add --transport http dfx-real-estate https://exchange-production-9123.up.railway.app/mcp
Claude Desktop
claude_desktop_config.json, then restart the app. It cannot reach a remote server directly, so this bridges through mcp-remote.
{
"mcpServers": {
"dfx-real-estate": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://exchange-production-9123.up.railway.app/mcp"
]
}
}
}Cursor, Windsurf, Cline and Zed
the mcp.json their settings panel writes
{
"mcpServers": {
"dfx-real-estate": {
"url": "https://exchange-production-9123.up.railway.app/mcp"
}
}
}VS Code
the servers key, which is spelled differently to everything above
{
"servers": {
"dfx-real-estate": {
"type": "http",
"url": "https://exchange-production-9123.up.railway.app/mcp"
}
}
}There is no signup, no API key and no OAuth for anything free, and eleven of the twelve tools are free. A plain GET on the endpoint returns every tool schema, so a client can be pointed at it and evaluated before it is trusted.
Registry entry io.github.Capital-W-Holdings/us-property-parcel-real-estate-debt. The full machine-readable capability catalog, including every tool schema, the measured coverage grid and the stated gaps, is at /ai/real-estate-mcp/catalog.json.
Where this does not help
Where it does not help
- Recorded sales carry a buyer and never a seller.
- The parcel and ownership layer is Massachusetts. Nothing here is national and it is not a national product with gaps; it is a state product.
- `within_days` looks FORWARD. A sale has already happened, so omit it.
State by state
One page per state, each carrying the dated rows themselves rather than a description of them. These are free to read and free to call.
- Massachusetts 29,878
- New York 13,802
The other capabilities on this server
- Which commercial real-estate loans mature in a given state and window? 3,422 events, 52 states and territories, effectively national.
- Which LIHTC properties are reaching the end of a compliance period? 11,956 events, 56 states and territories, effectively national.
- Which HUD-subsidised properties have contracts approaching expiry? 4,721 events, 54 states and territories, effectively national.
- Where is commercial real estate in distress, foreclosure or workout? 307 events, 28 states, broad but NOT national.
- Which commercial leases are approaching expiry, and who occupies a building? 3,966 events, 55 states and territories, effectively national.
Facts on this page were last checked against the running product on . Prices are read from the live billing configuration, so this page and your invoice cannot disagree. The machine-readable version of this record is at /ai/entity.json.