{"servers": [{"name": "dfx-real-estate", "title": "DFX Intelligence", "description": "Machine readable United States real estate intelligence. NATIONAL: federal programme debt with maturity dates across 52 states, LIHTC compliance period endings, HUD subsidy contract expiries, distress and foreclosure flags, and commercial tenancy: who occupies a building, how much of it, and when the lease expires. MASSACHUSETTS ONLY: parcels, ownership and management relationships, and recorded sales. Building permits and certificates of occupancy are Boston only. Call dfx_coverage for the measured grid of every event family and the states each one covers.", "version": "0.15.0", "remotes": [{"type": "streamable-http", "url": "https://exchange-production-9123.up.railway.app/mcp"}], "capabilities": {"tools": {"listChanged": false}}, "tools": [{"name": "resolve_address", "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."}, {"name": "resolve_organization", "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."}, {"name": "get_occupancy", "description": "Two directions from one call. Pass a PROPERTY dfx_id and get the tenants observed at that building: tenant name and dfx_id, occupancy class, leased area, share of the property, and the lease expiration date where the source discloses one. Pass a COMPANY dfx_id and get where that company is observed to operate. Pass `company` with `address` (plus city and state) to have ONE claim checked: does DFX hold this company at this building. Every row carries its evidence tier and its freshness. Free.\nnot_observed IS NOT VACANT. The published tenancy sources name only the largest tenant of a building, so most real occupiers are outside the disclosure entirely and an absent row is an absent disclosure, never a statement about the space. Ids come from resolve_address, resolve_organization, or the `dfx_id` on any search_property_events row."}, {"name": "get_property_record", "description": "Given a DFX id, 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.\nTHIS IS ALSO THE PARCEL LOOKUP. The id can name a property or a parcel, and both come back in full: take one from resolve_address, or take the `dfx_id` off any row search_parcels returned."}, {"name": "search_property_events", "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, 11,956 of them), HUD subsidy contract expiries (4,721), scheduled loan maturities (3,422) now national rather than Massachusetts, CMBS distress and workout reporting (167 delinquency flags across 26 states, 128 foreclosures across 22), issued building permits and demolition filings (Boston only), and recorded sales (43,680, 2 states). 9,401 events fall inside the next 548 days, measured 2026-09-13. 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. ORDER: results are sorted by `occurred_at`. A family whose events lie AHEAD is returned soonest first, so the first row is the next thing to happen. A family whose events have already happened is returned NEWEST first, so the first row is the most recent thing that did. The tie-break is stable, so paging never reorders what you have already seen. FORWARD, soonest first: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. HISTORICAL, newest first: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED. Measured 2026-09-13. Passing `within_days` asks about a future whatever the family, so it sorts soonest first. PAGING: a full page carries `next_cursor`. Pass it back as `cursor` with every other argument unchanged to continue; `next_cursor` is null on the last page, and that is the only signal the traversal has ended. The cursor carries the sort it was issued under, so a cursor replayed against a different `event_type` is REFUSED rather than quietly paging you back through rows you have seen. The counts above are therefore all reachable."}, {"name": "search_bank_cre_exposure", "description": "Search 4,313 FDIC-insured banks by their commercial real estate book at the June 2026 call report: total CRE, construction and multifamily in dollars and against equity and assets, noncurrent and net charge-off ratios, ROA, and two screens against the 2006 Interagency CRE guidance (construction over 100%, total CRE over 300%). For 4,242 of them, UBPR's peer-group and national percentile RANKS on the same concentrations. Filter by state, name, CRE-to-equity range, guidance screen, minimum assets or minimum noncurrent ratio; sort by cre_to_equity (default), construction_to_equity, noncurrent, cre_total, assets or multifamily. Free.\nTHE GUIDANCE IS QUOTED, NOT APPLIED: it tests TOTAL RISK BASED CAPITAL; the ratios here are on equity and the ranks on Tier 1 plus the allowance, so above_*_guidance_on_equity is a screen against a proxy. Every row states its quarter. No person appears in this data."}, {"name": "search_subsidised_housing", "description": "Search HUD's project-level Picture of Subsidized Households: 29,455 subsidised projects nationally, one row per project and programme, with units AVAILABLE (HUD's subsidised units available, which excludes units offline for rehab or disposition; occupancy is measured against these, so 100% of 20 available can be 20 of 50 built), occupied units, occupancy percent, MONTHS ON THE WAITING LIST, average rent, average household income, average tenure and what HUD pays per unit per month. Filter by state, city, programme (Public Housing, Section 8 NC/SR, Section 236, 202/PRAC, 811/PRAC, Mod Rehab), minimum waiting list, occupancy range and minimum units. Ordered by waiting list, deepest queue first. Every row carries the property dfx_id for get_property_record. Free.\nONE ANNUAL CAPTURE, effective 2025-12-31, stated on every row: this is a snapshot of demand, not a change over time. A NULL waiting list is an absent disclosure (housing authorities report it, private owners under a HAP contract mostly do not), never an empty queue; min_waiting_months EXCLUDES such rows and the answer states how many projects in the same place report one. Tenant composition is not published here."}, {"name": "search_parcels", "description": "Search the assessor parcel layer with filters instead of one exact address. Filter by state, municipality, assessor land use code, owner-occupancy, tax-exempt status, year built and assessed value range; results carry assessed value, gross building area, assessed value per square foot, the annual tax and the year built. This is the only way to ask a QUESTION of the parcel layer: resolve_address needs an address you already have. Every answer states the true match count alongside the sample, and a search that matches nothing names the filter that emptied it rather than returning a bare empty list. At least one filter is required. Free.\nEVERY ROW CARRIES A `dfx_id` AND IT IS A HANDLE, NOT A LABEL. Pass it to get_property_record for that parcel's events, ownership, debt and recorded sales. That is the parcel-by-id lookup, and this is where the ids come from when you did not start with an address."}, {"name": "what_can_dfx_answer", "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. Call this first if you do not know what to ask for.\nREAD ONLY, and the annotation means it: nothing is created, nothing you or anyone else can read back is changed. The question itself is kept in DFX's own interaction ledger, as every call on this server is, and unmet asks are what decide what DFX builds next."}, {"name": "changes_since", "description": "Poll for what is NEW to you, ordered by when DFX learned it rather than by when it happened. TWO CALLS ARE REQUIRED BEFORE YOU SEE ANYTHING: the first, with no cursor, deliberately returns ZERO events and a starting position; the second, with that cursor, returns what DFX learned in between. If you want rows now rather than a subscription, call search_property_events instead. Filter by event type, state, or a specific property or parcel id. Deterministic and indexed, so it is cheap to call often. Free.\nHISTORICAL FAMILIES DO FLOW THROUGH HERE. `within_days` on search_property_events cannot reach the past, but this tool is ordered by when DFX LEARNED a fact, not when the fact happened, so a foreclosure that occurred months ago and was ingested today arrives in today's delta. A distress or sales feed built on this works."}, {"name": "debt_maturity_schedule", "description": "PAID: $1.00 USD per delivered schedule. This is the ONLY priced tool on this server. The other 38 are free, keyless and permanently so.\nReturns the LOAN rather than the event: for one US state and one forward window, up to 200 loans with maturity date, original and current principal, interest rate, lender name, instrument type, origination date and the secured property's address, deduplicated to one row per loan and ordered by maturity.\nEvery maturity_basis is 'confirmed': 19,881 of 19,881 loans carry a date filed with the SEC by a servicer or recorded by HUD, and none is estimated or inferred from a term length.\nHOW TO GET A PRICE, FREE: call this tool with no `authorize` argument and no credential. You are not charged and not refused. You receive a real quote for your exact arguments, the price, every field that would arrive, the known limits, and the number of rows your dollar would actually buy, so a filter that would deliver one row is visible before you spend anything.\nHOW TO ACTUALLY BE CHARGED: resend the identical call with `authorize` and an `X-DFX-Account` header holding a funded account key. THIS IS THE ONLY THING ON THIS SERVER THAT NEEDS A CREDENTIAL, and it is the reason the handshake's 'no signup' is about the free tier and not about this tool. To get one, call open_dfx_account on this same server; no human step is needed to open it, and a balance must be funded before it can spend. Everything else here, including the quote itself, needs no account at all.\nFREE ALTERNATIVE, AND IT IS A REAL ONE: search_property_events with event_type=LOAN_MATURITY_SCHEDULED returns up to 50 maturity EVENTS per page for the same state, dated and sourced, each carrying the loan's balance, rate and instrument, but no lender, no origination and no term. It is also a smaller population: an event has to be resolved to a single building, so a loan secured by several is in the paid tape and not in the free index. Use the free tool for timing and the numbers, this one for the whole state in one call with the lender named."}, {"name": "open_dfx_account", "description": "Creates an economic identity you control, with NO money in it. Free. No human approval, no email, no contract, no sales call.\nIt returns an account key ONCE. DFX stores only its digest and can never show it to you again, so store it before your next call.\nTHE ACCOUNT STARTS AT $0.00 AND CANNOT BUY ANYTHING. DFX mints identity and never credit: a balance moves only when Stripe confirms a payment and DFX re-reads that payment from Stripe. There is no argument anywhere on this server through which you can propose a balance.\nCall this only if you intend to buy a paid capability. Every discovery, coverage, resolution, property record and event search tool on this server is free, unauthenticated and does not need an account, permanently."}, {"name": "fund_dfx_account", "description": "Opens a Stripe payment for exactly one quote, into the account key you present, and returns the hosted payment URL and a payment id.\nTHE AMOUNT IS READ FROM THE QUOTE, SERVER SIDE. There is no field on this tool through which a price can be proposed, raised or lowered.\nA CARD MUST STILL BE AUTHORIZED. That is the card network's boundary and not a DFX design choice: show the URL and the price to your human, or present your own payment credential to Stripe. Everything either side of that step is callable by a machine.\nReturning to the success page is NOT a receipt. Poll dfx_payment_status until it reports PAID; that reads the DFX ledger, which advances only on a Stripe event DFX verified and re-read from Stripe.\nThis build collects Stripe TEST payments only. No real money moves."}, {"name": "dfx_payment_status", "description": "Reads the DFX payment ledger for one quote. Free.\nIt is the ONLY trustworthy answer to 'did my payment go through'. A browser redirect, a Stripe success page and a client's own belief are all not receipts. This reads DFX rows, which advance only on a Stripe event DFX verified against Stripe's signature and then re-read from api.stripe.com.\nAWAITING_PAYMENT means keep polling. PAID means your balance is funded and you may now repeat the paid call with `authorize`."}, {"name": "dfx_coverage", "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.\nCall it with NO arguments for the full grid: every event family, every state, measured. Call it with `state` and/or `event_type` for a direct verdict on that one slice (COVERED, NOT_COVERED or UNKNOWN) with the basis it was decided on, which is one small answer instead of a grid to parse. Free, and it queries no data: the verdict comes from a coverage registry, so a NOT_COVERED is measured rather than inferred from an empty search."}, {"name": "search_family_offices", "description": "Family offices as compact cards: class (single, multi, embedded...) with confidence, whether they invest directly, sectors and asset classes on record, check size where stated, direct investment count, latest deployment, and counts of people, sponsor and real estate relationships. Filter by state, sector, direct investing, recent activity or AUM. Returns dfx:fo: ids for get_family_office / get_entity. Not for people (search_people) or investments (search_family_office_investments)."}, {"name": "get_family_office", "description": "The full card for one family office: profile, AUM / RAUM / 13F value kept apart with their as-of dates, behaviour, the people who run it with roles, its observed investments, relationships, recent events, evidence rows and cross-graph links (same_as by shared CRD/CIK/EIN). Contact points are withheld over MCP. Same answer as get_entity for a dfx:fo: id."}, {"name": "search_family_office_investments", "description": "Dated investments family offices have been observed making: target, sector, asset class, structure, control or minority, lead or participant, amounts where disclosed (with basis), board seats, exits, and the source quote. Filter by office, sector, asset class, state, kind or since-date. The evidence behind 'this office backs X'."}, {"name": "search_independent_sponsors", "description": "Independent sponsors (deal-by-deal acquirers of lower middle market companies) as compact cards: classification with confidence, mandate summary, principals, vehicle count and latest vehicle, company match count. With `sector`, the answer is OBSERVED behaviour: sponsors ranked by the companies they matched in that vertical with sector evidence (vehicles filed there) first, then size/activity-only matches, each labelled. Returns dfx:isi: ids. Not for capital providers (search_sponsor_capital_providers) or targets (search_private_companies)."}, {"name": "get_independent_sponsor", "description": "The full card for any entity on the sponsor graph: a sponsor (with its computed company matches and announced transactions), a capital provider (with fund size, average investment, SBIC status, strategy, whether making new investments) or a private company (with its transition signals and sponsor matches). Plus relationships, events, evidence and cross-graph links. Same answer as get_entity for a dfx:isi: id."}, {"name": "search_sponsor_capital_providers", "description": "SBICs, mezzanine and private equity funds, and family offices observed providing capital to independent sponsors: provider type, strategy, fund style, fund size and average investment (kept apart), vintage, SBIC licence, whether making new investments, mandate summary. Filter by state, type, sector text, SBIC status or fund size."}, {"name": "search_private_companies", "description": "US private companies whose filings (Form 5500 plan history, final filings, ownership changes) show a transition: vertical, plan participants as a size proxy, EBITDA band where derivable, and scores 0 to 100 for opportunity, dealability, transition readiness and urgency, each backed by observations. Filter by vertical, state, NAICS prefix, size and minimum opportunity. Then find_capital_for_opportunity(dfx_id) for who should buy or fund it."}, {"name": "search_sponsor_deals", "description": "Announced acquisitions, recapitalisations and exits by independent sponsors: sponsor, target, dates, enterprise value range where disclosed, structure, parties and source. Filter by sponsor, target, type, state, since-date or name text."}, {"name": "search_vc_firms", "description": "Venture firms as compact cards: stated sectors, stages, geography and check size beside OBSERVED behaviour (investments in the last 6 and 12 months, lead count, behaviour summary and divergence from the stated thesis), funds with the latest vintage and Form D, people and partner counts. Filter by sector, stage, state, active or raising, emerging manager. Returns dfx:vc: ids. Not for funds (search_vc_funds), people (search_people) or deals (search_vc_investments)."}, {"name": "get_vc_firm", "description": "The full card for any entity on the venture graph: a firm (with recent investments, co-investors and funds), a person (with attributed investments and board seats), a fund (with all seven fund amounts kept apart and its lifecycle state) or a portfolio company (with its investors). Plus relationships, events, evidence and cross-graph links. Same answer as get_entity for a dfx:vc: id."}, {"name": "search_vc_investments", "description": "Investor-by-investor participations in rounds: investor, company, fund, the partner attributed (with attribution level), role (lead or participant), new or follow-on, board seat, round type, stage and amount (the round's, never the check), and the source quote. Filter by investor, company, partner, stage, state, since-date or lead only."}, {"name": "search_vc_funds", "description": "Funds with every amount under its own name (target, first close, final close, announced size, Form D offering and sold, ADV gross asset value), vintage and basis, lifecycle state, investor counts, LP count. Filter by manager, lifecycle, vintage range, strategy or Form D sold."}, {"name": "search_entities", "description": "One search across family offices, independent sponsors and their capital providers, private companies, venture firms and real estate organisations: by name, or by filters (entity_type, domain, state, sector, ...). Compact cards with stable dfx ids and a per-domain coverage note. Start here when you do not know which domain holds the answer; use the domain search tools when you do."}, {"name": "get_entity", "description": "For any DFX id: the full card, published relationships with sources and dates, recent events, evidence rows (the observation each fact traces to), cross-graph same_as links by shared identifier, same-name candidates on other graphs (labelled as candidates), and the tools that go deeper. The single call that answers 'show me everything on X'."}, {"name": "search_people", "description": "Investment professionals, principals and family office staff as names with titles, roles, seniority, investment responsibility, organisation and tenure, from public filings and firm pages. By name, or by organization_dfx_id, or by role. cross_graph_only=true answers 'which venture people are connected to family offices' in one call. Contact points are withheld over MCP; the site publishes them per office."}, {"name": "search_relationships", "description": "Every published relationship touching one entity (EMPLOYS, PRINCIPAL_OF, INVESTED_IN, CO_INVESTED_WITH, MANAGES, OWNS, BOARD_MEMBER_OF, VEHICLE_OF, ...), each with role, dates, currency, confidence, evidence class and source. Plus same_as links to the same entity on other graphs."}, {"name": "relationship_path", "description": "An evidence-backed path between two DFX ids across every graph: each hop is a published relationship with its source, or a SAME_AS identity link by shared CRD/CIK/EIN. Bidirectional search up to max_hops (default 3). NO_MATCH means no observed path within budget, not that they are unconnected."}, {"name": "search_events", "description": "Dated events across family offices, sponsors, venture and real estate: investments announced, vehicles formed, Form D and ADV filings, people joining and leaving, funds raised, acquisitions, plan final filings, record departures, loan maturities. Filter by domain, subject dfx_id, event_type, state, significance and window. Routine 13F position and fund-reporting noise is excluded unless asked for. For 'what changed since T' use changes_since."}, {"name": "verify", "description": "SUPPORTED, PARTIALLY_SUPPORTED, CONTRADICTED or UNKNOWN for a claim, with the observations. Give a sentence ('Family Office X invested in Company Y in 2025', 'Z is a family office') or a structured subject / predicate / object / year. DFX contradicts only what its own record contradicts; absence of evidence is UNKNOWN, never CONTRADICTED. For a property fact use get_property_record."}, {"name": "find_capital_for_opportunity", "description": "Ranked investors for a company (dfx_id) or a described opportunity (sector, state, deal size, stage, control): independent sponsors from the computed match plane with its reasons and blockers, capital providers whose mandate names the sector and who are making new investments, family offices with observed investments or stated sectors in it, venture firms when the opportunity is venture-shaped. Every row says its basis (computed_match, observed_investments, derived). No unexplained scores."}, {"name": "find_opportunities_for_capital", "description": "For a family office, sponsor, capital provider or venture firm: the opportunities DFX knows that fit its DEMONSTRATED behaviour: computed matches where the graph has them (with reasons and blockers), then private companies with transition signals in the sectors it has actually invested in, sponsors seeking capital, companies raising in its stated sectors. Returns the behaviour it reasoned from."}, {"name": "explain_match", "description": "For an investor and an opportunity (either order): MATCH REASONS, BLOCKERS, SUPPORTING OBSERVATIONS, COMPARABLE HISTORY (the investor's dated investments in the same sector, with sources), RELATIONSHIPS (a path on the graph if one exists), RECENT EVENTS on both, the computed match if the graph has one, and a confidence label. Facts, not a score."}, {"name": "why_now", "description": "Evidence-backed reasons an entity matters now: recent filings, vehicles formed, deployments, people moves, fundraising, transition signals, loan maturities, each dated with its source. Empty means DFX observed no change in the window, not that nothing is happening."}, {"name": "who_should_care", "description": "Given an entity or an event id: who is likely to care and why. A company transition names sponsors, capital providers and family offices with the observed reason; a family office names its co-investors and fitting opportunities; a venture firm names its co-investors; a property names its owner, lender and the next query for exposed lenders and real estate offices. Needs an id: if you only have a description of the situation, call find_capital_for_opportunity with it instead."}]}]}