{"server": "dfx-real-estate", "title": "DFX Real Estate Intelligence", "transport": "streamable-http", "protocol": "Model Context Protocol", "protocol_versions": ["2026-07-28", "2025-11-25", "2025-06-18", "2025-03-26"], "authentication": "none", "price": "all capabilities are currently free", "note": "This endpoint speaks JSON-RPC over POST. This GET exists so a human or an agent can read the tool schemas before deciding to call anything.", "tools": [{"name": "resolve_address", "title": "Resolve a US street address to a property or parcel", "description": "Turn a street address into canonical DFX object ids, with the match basis and any ambiguity stated. Returns typed objects: a 'property' (national federal programme multifamily) and/or a 'parcel' (Massachusetts assessor and registry layer). These are separate populations that barely overlap, so an address may return one, the other, or both. Free. Start here, then call get_property_record with an id.", "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false}, "inputSchema": {"type": "object", "properties": {"address": {"type": "string", "description": "Street address including the house number, for example '100 Binney St'"}, "city": {"type": "string"}, "state": {"type": "string", "description": "Two letter state code"}, "limit": {"type": "integer", "default": 10}}, "required": ["address"]}}, {"name": "resolve_organization", "title": "Resolve a company name to a DFX entity", "description": "Turn an owner, manager, lender or servicer name into canonical DFX entity ids. A name is treated as a blocking key and never as an identity, so all candidates are returned rather than a guess. Free. Person lookup is deliberately not offered.", "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false}, "inputSchema": {"type": "object", "properties": {"name": {"type": "string"}, "limit": {"type": "integer", "default": 10}}, "required": ["name"]}}, {"name": "get_property_record", "title": "Everything DFX holds about one property or parcel", "description": "Given a DFX id from resolve_address, return current state, dated events, ownership and management relationships, debt with maturity dates and maturity basis, recorded sales with consideration plus registry book and page, and the provenance of each. Sales carry BOTH the instrument total and this parcel's allocated share, because a deed repeats its full price on every parcel it covers. Free.", "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false}, "inputSchema": {"type": "object", "properties": {"dfx_id": {"type": "string", "description": "id returned by resolve_address"}}, "required": ["dfx_id"]}}, {"name": "search_property_events", "title": "Find dated property events by type, state and time window", "description": "Dated events over US properties and parcels, with provenance and a headline you can show a person. Covers LIHTC compliance period endings (the Year 15 recapitalisation trigger, 13,549 of them), HUD subsidy contract expiries (4,721), scheduled loan maturities (282), issued building permits and demolition filings (Boston only), and recorded sales (30,055, Massachusetts only). 7,475 events fall inside the next 18 months. Filter by event type, state and days ahead. An unrecognised event type is REFUSED with the served vocabulary, never answered with an empty list. Free.", "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false}, "inputSchema": {"type": "object", "properties": {"event_type": {"type": "string", "enum": ["CERTIFICATE_OF_OCCUPANCY", "COMPANY_CONTRACTED", "COMPLIANCE_PERIOD_ENDING", "DEMOLITION_FILED", "LEASE_EXPIRING", "LEASE_TERM_REVISED", "LOAN_MATURITY_SCHEDULED", "PERMIT_ISSUED", "PERMIT_STATUS_CHANGED", "PROPERTY_SOLD", "SUBSIDY_CONTRACT_EXPIRING", "USE_CONVERSION_PERMITTED"]}, "state": {"type": "string", "description": "Two letter state code"}, "within_days": {"type": "integer"}, "limit": {"type": "integer", "default": 25}}}}, {"name": "what_can_dfx_answer", "title": "Ask in plain language whether DFX can help", "description": "Describe an objective in natural language and get back whether DFX can help, which tool to call, the arguments to call it with, and a free sample of the result. Says no clearly when the answer is no, and records what was asked so unmet demand shapes what DFX builds next. Call this first if you do not know what to ask for.", "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false}, "inputSchema": {"type": "object", "properties": {"objective": {"type": "string"}, "constraints": {"type": "object"}}, "required": ["objective"]}}, {"name": "changes_since", "title": "What DFX has learned since your last call", "description": "Poll for what is NEW to you, ordered by when DFX learned it rather than by when it happened. Call with no cursor to get a starting position, then call again with the cursor you were given to receive everything added in between. Filter by event type, state, or a specific property or parcel id. Deterministic and indexed, so it is cheap to call often. Free.", "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false}, "inputSchema": {"type": "object", "properties": {"since": {"type": "string", "description": "Opaque cursor from a previous call. Omit on the first call to establish a position."}, "event_type": {"type": "string"}, "state": {"type": "string", "description": "Two letter state code"}, "place_dfx_id": {"type": "string", "description": "Watch one property or parcel"}, "limit": {"type": "integer", "default": 50}}}}, {"name": "dfx_coverage", "title": "What DFX actually covers, and what it does not", "description": "Measured coverage, served sources, object types and the known gaps stated plainly, including where geography is a single state and where nothing carries a calibrated probability. Call this before concluding that an empty result means an absent market.", "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false}, "inputSchema": {"type": "object", "properties": {}}}], "coverage": {"geography": "United States", "served_sources": ["boston_assessing", "boston_permits", "fdic_financials", "ffiec_ubpr", "fhfa_pudb_mf", "hmda_lar", "hud_fha_multifamily", "hud_lihtc", "hud_multifamily_arcgis", "hud_psh", "massgis_l3", "nyc_acris", "sec_abs_ee"], "event_types": ["CERTIFICATE_OF_OCCUPANCY", "COMPANY_CONTRACTED", "COMPLIANCE_PERIOD_ENDING", "DEMOLITION_FILED", "LEASE_EXPIRING", "LEASE_TERM_REVISED", "LOAN_MATURITY_SCHEDULED", "PERMIT_ISSUED", "PERMIT_STATUS_CHANGED", "PROPERTY_SOLD", "SUBSIDY_CONTRACT_EXPIRING", "USE_CONVERSION_PERMITTED"], "object_types": {"property": "National. Federal programme multifamily: HUD, LIHTC and FHA.", "parcel": "Massachusetts. The municipal assessor and registry layer, carrying assessed value, land use and recorded sales.", "organization": "Owners, managers, lenders and servicers."}, "recorded_sales": {"geography": "Massachusetts only", "instruments": 80448, "parcel_links": 89191, "has_buyer": true, "has_seller": false, "note": "A deed repeats its full consideration on every parcel it covers, so allocated_consideration is carried separately from consideration and allocation_basis says when a split is ours."}, "known_gaps": ["Loan maturity coverage is federal programme lending only (FHA insured and agency backed). The Registries of Deeds are closed to automation, so conventionally financed property carries no debt record here. A property absent from a maturity search is NOT a property without debt.", "LIHTC compliance periods are statutory and every one falls on 31 December, so a count bucketed by day shows a December cliff that is an artefact of the statute rather than a market event.", "Permit and demolition coverage is the City of Boston only.", "No outcome has ever been observed for any prediction in this graph. Nothing served here carries a calibrated probability; every score is a ranked signal.", "One street address can carry several records. Measured across 5,807 such clusters: 2,685 agree on unit count and are plausibly one asset registered by more than one programme, while 3,122 report DIFFERENT unit counts and are probably genuinely different buildings at one address, such as a scattered-site development. DFX has merged none of them and resolve() says which case you are looking at rather than choosing.", "Property and parcel are separate populations that barely overlap: 661 clean one-to-one pairs out of roughly 100,000 each. An address may resolve to one, the other, or both, and they are returned as distinct typed objects rather than merged.", "PROPERTY RECORDS ARE NOT ONE ROW PER BUILDING. 90,278 published property records cover 83,664 distinct normalised addresses, so a total computed across them overstates by roughly 8%. 245 Park Avenue is one tower and thirteen records, because thirteen securitisation trusts each report it. Every row is individually true, which is why the distortion is invisible per row. Each record carries address_group_size so you can see it: 1 is unique, and above 1 you should deduplicate by address before summing anything. DFX has not merged them because thousands of these clusters carry different unit counts and are genuinely different buildings at one address rather than one building recorded twice.", "Recorded sales are Massachusetts only and carry no seller. Repeat-sale pairs and hold periods are therefore not derivable from this source at any volume, and no amount of further ingestion will change that."]}, "example": {"method": "tools/call", "tool": "resolve_address", "arguments": {"address": "100 Binney St", "city": "Cambridge", "state": "MA"}, "returns": "the parcel, its assessed value, and a dfx_id you can pass to get_property_record for its recorded sales, which for this address is a $1,020,000,000 sale"}}