DFX Intelligence
io.github.Capital-W-HoldingsPublished by GitHub account Capital-W-Holdingsv0.16.0Updated Nov 5, 2026
Private credit: lenders, sponsor financing, credit facilities, BDC holdings, LP allocations. Cited.
Overview
DFX Intelligence is a remote MCP server for cited private-credit, private-markets and US real-estate research, answering questions from primary documents with…
- What you can do
- Ask one private-markets question and get a cited answer covering lenders, borrowers, loans, maturities, sponsors and LP commitments
- Resolve addresses and organizations to canonical IDs, then read property records, occupancy, parcels and dated property events
- Pull loan maturity tapes by state and window, bank CRE exposure screens and HUD-subsidised housing data
- Search and rank family offices, independent sponsors, venture funds, people and relationships, and trace how two entities connect
- Verify a claim against observations and check measured coverage before concluding a market is absent
- When to use it
- Useful when an agent needs evidence-backed answers about who lends to or owns what in US private credit, private markets or real estate, with a source and observation date on every row. It suits due-diligence, origination and research workflows that must distinguish a real no-match from missing coverage.
- Requirements
- A remote Streamable HTTP endpoint; no credentials, sign-up or OAuth for the 131 free read tools. Five watch tools need an account key sent as an Authorization bearer header or OAuth 2.1 member sign-in. Clients that only speak stdio need the provided Python bridge script.
Installation
In SourceWeft
- Open DFX Intelligence in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.Capital-W-Holdings%2Fus-property-parcel-real-estate-debt/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config.
{
"mcpServers": {
"dfx-intelligence": {
"type": "http",
"url": "https://exchange-production-9123.up.railway.app/mcp/core?c=reg"
}
}
}README
DFX Intelligence: MCP server
[DFX Intelligence MCP server: quality and maintenance score on Glama]
Private credit research for agents. Ask which lenders finance a company, which BDCs hold a borrower's loans and when they mature, which sponsors a lender backs, and which institutions allocate to private credit. Every answer is built only from cited claims read from primary documents (BDC schedules of investments filed with the SEC, Form ADV and IAPD, public pension commitment reports), with the source and the observation date on every row.
DFX Intelligence. Evidence-backed private capital intelligence platform for AI agents, 136 MCP tools across private credit, BDC portfolios and lenders; private equity firms, funds and deals; venture capital; family offices; RIAs and advisor moves; independent sponsors; allocators and LP commitments; real estate funds; US real estate debt and property records. Facts carry their source and observation date, and every answer states OK, NO_MATCH, NOT_COVERED or UNKNOWN rather than guessing. 131 of 136 tools are free to call with no key; 5 save an account's own research watches and need an account key. Without a DFX plan, list answers name the first rows and count the rest, and contact values are never returned. For agents: https://dfxintel.com/agents.
Connect
Endpoint (start here, anonymous): https://exchange-production-9123.up.railway.app/mcp/core?c=gh-repo
Member sign-in (OAuth 2.1): https://exchange-production-9123.up.railway.app/mcp/core/member
Full profile: https://exchange-production-9123.up.railway.app/mcp?c=gh-repo
Transport: Streamable HTTP
Auth: none for anonymous reads; OAuth 2.1 sign-in on dfxintel.com or a dfx_live_ account key for members
Registry: io.github.Capital-W-Holdings/dfx-private-credit-mcp
The core profile leads with research: one question, answered in one call, with the reads it composes.
The full profile lists research first too, then every read tool. Members sign in at the member URL (it is never tagged,
because the OAuth resource must match exactly), or send Authorization: Bearer dfx_live_... on either anonymous URL.
131 of 136 tools are free with no key, no sign-up and no OAuth. The other 5 (watch_cancel, watch_changes, watch_create, watch_list and watch_reevaluate) save an account's own research watches and need an account key. A list answer to an anonymous caller names its first 5 rows and counts the rest, and says what it withheld. Contact values are never returned.
Example call on the core profile:
Every number on this page is measured against production, not typed. Last measured 2026-10-30. Call
dfx_coveragefor the same grid at the moment you read it.
Beyond private credit: US real estate debt and property records
The other graphs (family offices, independent sponsors, venture capital) follow in Beyond real estate.
The real estate domain answers dated questions about two things: United States commercial and federal-programme real estate debt, where loan maturities are published across 52 state codes, compliance expiries across 56 and subsidy expiries across 54, and property records, where 2,479,346 New York, Ohio, Washington, Massachusetts and Illinois parcels carry ownership and assessed value and 95,616 recorded sale instruments cover the District of Columbia, Massachusetts, New York and Wisconsin. Call it when an agent needs to know who owns a specific building, what it last sold for, or which loans and subsidies come due in a given state and time window, with the source and the observation date attached to every claim.
Coverage is deliberately uneven and it is stated up front rather than discovered by trial.
United States, unevenly. NATIONAL: federal programme debt and maturities, LIHTC, HUD subsidy, distress and commercial tenancy. MASSACHUSETTS ONLY: parcels and ownership. RECORDED SALES: Massachusetts statewide, plus New York City deeds at or above $10m. BOSTON ONLY: permits and certificates of occupancy. coverage_by_event_type below is the measured grid, per event family, per state.
The measured per-type, per-state numbers are in
Event coverage, measured below, and dfx_coverage returns
the same grid at call time so an agent never has to guess from an empty result.
A tool that answers "no" clearly is worth more to an agent than one that answers an empty list, so this server refuses unknown arguments with the served vocabulary attached.
Read the schemas before you call anything
A plain GET on the full profile returns the full tool list, the coverage numbers and a
worked example. No handshake, no session, no initialize.
Then call a real estate tool over JSON-RPC (the real estate tools are on the full profile):
That address returns a parcel carrying a recorded sale, with the registry book and page it was recorded under.
If you are a harvester rather than a caller
The endpoint serves the discovery conventions from its own origin, so an index does not have to guess and does not have to be told:
agents.txt names no payment protocol because nothing on this server is priced.
The 136 tools
Start with what_can_dfx_answer if you do not know what to ask for. It says no
clearly when the answer is no, and it records the ask, so questions DFX cannot answer
shape what gets built next.
Beyond real estate: family offices, independent sponsors, venture capital
The same connection answers across three more DFX graphs, with one id scheme (dfx:fo:, dfx:isi:, dfx:vc:, and the real estate ids above), one response contract, and cross-graph identity by shared CRD, CIK or EIN only. A same-name entity on another graph is returned as a candidate, never merged.
Family offices. 2,577 offices on the graph (668 candidates, 162 confirmed multi-family, 342 probable single-family, 139 outsourced), 4,238 foundations, 748 offices with 13F positions, 424 with observed direct investments. A candidate is a name, never a class; AUM, RAUM and 13F value are three numbers and are never substituted for one another.
Independent sponsors. 4,210 sponsors, 10,827 capital providers, 97,310 private companies with Department of Labor plan-filing history of which 17,081 carry a transition signal, 317,710 computed company-to-sponsor matches with reasons and blockers, 2,476 announced transactions. A plan-filing signal is one year lagged.
Venture capital. 78,416 funds with every fund amount kept apart (55,599 with Form D sold), 363,331 people, 156,538 companies and 163,811 rounds. A round is never a check.
Across all of them: search_entities, get_entity (everything on one id: card, relationships, events, evidence, cross-graph links), search_people, search_relationships, relationship_path (how X connects to Y, every hop an evidenced edge), search_events, verify (SUPPORTED, PARTIALLY_SUPPORTED, CONTRADICTED or UNKNOWN, with the observations), and the economic tools find_capital_for_opportunity, find_opportunities_for_capital, explain_match (reasons and blockers, never a bare score), why_now and who_should_care.
Contact points are withheld over MCP on every graph. Call what_can_dfx_answer with domain set to any of family_office, independent_sponsor, venture_capital or real_estate for that domain's entity types, event families, rights, freshness and limitations.
What is actually in here (real estate)
Two populations that barely overlap, and conflating them is the most common way to misread this server.
An address may return one, the other, or both.
Recorded sales
the District of Columbia, Massachusetts, New York and Wisconsin: 95,616 instruments over 118,821 property links.
-
municipal recorder extract: deeds at or above $10,000,000 consideration. This is a deliberate cut by VALUE and not by date: a date cut would orphan the earlier leg of a repeat-sale pair. A smaller New York sale is outside the tranche, not absent from the city. -
municipal recorder extract: Fourteen same-day deeds between the same parties are ONE transaction with fourteen instrument ids preserved, and a 318-property deed is one transaction linked to 318 properties. Consideration is stated once per instrument and is never split across its properties. No natural person is named in an event headline, on either side. -
statewide assessor roster: An assessor roster carries the LAST sale, so repeat-sale pairs and hold periods are not derivable from it at any volume. 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.
Event coverage, measured
183,758 publishable events across 27 types, written by 30 sources on a published allowlist of 29.
ZONING_EVENT are the District of Columbia only. DISTRESS_STATUS_CHANGED are Illinois
only. USE_CONVERSION_PERMITTED are Massachusetts only. DEED_RECORDED,
OWNERSHIP_CHANGED, TAX_LIEN_LISTED are New York only. FORECLOSURE_FILED are
Pennsylvania only. SPECIAL_SERVICING_ENTERED are Texas only.
COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED,
PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, SUBSIDY_CONTRACT_EXPIRING are national.
Multi-state, with the number of states each reaches: DISTRESS_FLAG_RAISED (26),
LOAN_MATURED (25), FORECLOSURE_EVENT (21), LOAN_MODIFIED (5), BANKRUPTCY_EVENT
(4), PROPERTY_SOLD (4), CERTIFICATE_OF_OCCUPANCY (3), DEMOLITION_FILED (3),
PERMIT_ISSUED (3). LOAN_ASSIGNED, LOAN_STATUS_CHANGED, PERMIT_STATUS_CHANGED,
VACANT_FORECLOSURE_REGISTERED carries rows that resolve to no state at all, so a state
filter cannot reach it.
The loan tape: debt_maturity_schedule
Free with no key. For one US state and one forward window, up to 200 loans per call, one row per loan, ordered by maturity date:
maturity_dateandmaturity_basisoriginal_principal_usd,current_principal_usd,interest_rate_pct,origination_date,term_monthsinstrument_type- the lender's canonical name and DFX id where resolved
- the secured property: DFX id, street address, city, state, postal code, unit count, property type
- the
source_keyfor that row
Why the dates can be trusted. 23,825 loans carry a maturity date and 23,825 of
23,825 carry maturity_basis = 'confirmed'. Not one is estimated, inferred from a
term length, or carried forward from a stale reading. Every date was filed with the SEC
by a loan servicer or recorded by HUD, and then resolved to a specific building.
search_property_events returns the event: a date, a headline, an address. The loan
tape returns the loan: the principal, the lender, the instrument, deduplicated to one
row per loan, up to 200 rows instead of 50, with the population stated so you can tell a
complete answer from a truncated one. The two populations are different sizes on purpose
and both numbers are true: an event has to be promoted to a single place, a loan only has
to be filed, so the 23,825 loans on the tape are reached here while
3,298 maturity events are reachable through the event search.
How the loans spread. Of the 23,825 loans, 1,990 mature inside the default 548-day window, and they are not evenly spread. Measured 2026-10-30:
26 further states hold between 1 and 18 loans in that window; Montana and Wyoming hold
- Widen
within_daysto reach further out; each call returns up to 200 loans.
255 of those 1,990 carry no single state: a loan secured by several
buildings has no property anchor, so a state filter cannot reach it. Those are reached
through get_property_record.
What it does not cover, stated plainly. These are the gaps the server itself
reports through dfx_coverage, reprinted here so you do not have to call it to find
them:
-
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 6,114 such clusters: 2,764 agree on unit count and are plausibly one asset registered by more than one programme, while 3,350 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. 101,991 published property records cover 94,859 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.
-
The sale tape is two sources with different grain, and the difference decides which questions it can answer. MASSACHUSETTS is an assessor roster: statewide, one sale per parcel, buyer named and SELLER NEVER NAMED, so repeat-sale pairs and hold periods are not derivable from it at any volume and no further ingestion of it will change that. NEW YORK is a recorder extract: five boroughs, both parties named, every instrument dated, so repeat sales and hold periods ARE derivable, but only for deeds at or above $10,000,000. Neither one is a national sale tape and DFX does not have one.
Connect it
Any MCP client that speaks Streamable HTTP. No credentials for anonymous reads. The core profile is first; add the full profile too when you want the real estate tools by name.
In your editor
Cursor, one click:
VS Code (GitHub Copilot agent mode), from a terminal, or paste the vscode: link into a
browser's address bar:
Claude Code:
A member whose client cannot send a header (a Claude custom connector, ChatGPT developer
mode) adds https://exchange-production-9123.up.railway.app/mcp/core/member instead and signs in with OAuth 2.1.
Both the current protocol revision and the older initialize handshake are served,
because most deployed clients still send the latter.
From code: the dfx-intel SDKs
Python and TypeScript clients for research, verify and resolve_name on the core
profile, with no runtime dependencies. Anonymous by default; a member key is read from
DFX_API_KEY.
Runnable examples, each next to the real output of its last run against production, are in
examples/sdk/: anonymous research, printing the citation behind every
claim, error handling and retries, pagination, member access with a key from the
environment, and a short integration tutorial. Choosing between anonymous access, OAuth
sign-in and an account key, what each client supports, and troubleshooting:
docs/CONNECT.md.
Starting from an agent framework instead? examples/frameworks/
has one runnable example each for the Claude Agent SDK, the OpenAI Agents SDK, LangGraph
and the Vercel AI SDK, plus copy-paste MCP configs for Cursor, VS Code, Windsurf and
Claude Desktop, each with the recorded output of a run against production.
Attaching DFX as an MCP server from Python? examples/mcp/ has
runnable scripts for langchain-mcp-adapters, the OpenAI Agents SDK
(MCPServerStreamableHttp) and LlamaIndex (llama-index-tools-mcp), each asking one
real question and printing the cited answer, with the output of its last run beside it.
examples/quickstart.ipynb does the same in a notebook:
raw JSON-RPC over httpx, then the OpenAI Agents SDK.
If your client only speaks stdio
Some clients launch a subprocess and speak JSON-RPC over its pipes; they have no way to
reach a URL at all. bridge/dfx_mcp_stdio.py is the whole adapter for those: one file,
standard library only, no key, no state. It forwards each message to the endpoint above
and writes the answer back.
Use an absolute path. An MCP client launches the command from its own working directory, not yours, so a relative one will not find the file.
Use the URL directly if your client can. The bridge adds a process and a hop and buys
nothing when Streamable HTTP is available. It reads the tool list from the live server
on every tools/list, so an installed copy does not go stale when DFX publishes a new
event family; there is nothing in it that knows what a family is.
Questions this server is good at
- Which commercial mortgages in this state mature in the next 548 days, who lent, and against which building?
- What has DFX learned since I last asked? (
changes_since, cursor-based, ordered by when DFX came to know a fact rather than when the fact occurred.) - Which LIHTC compliance periods and HUD subsidy contracts are expiring, and where?
- What did this parcel last sell for, to whom, and under which book and page?
- Who owns, manages or lends against this building?
Three recipes, as an agent calls them
Each is one tool call, the arguments verbatim, and what came back when this page was generated. Paste the call; the numbers are the wire's, not this page's.
Where is the queue? Subsidised projects in Ohio with a waiting list of 24 months or more, deepest first.
Returns matched: 69 and ten rows, the longest at 85 months, each with units available, occupancy, rent, household income and what HUD pays per unit, and waiting_list_coverage saying how many projects in the state report a list at all. One annual capture (29,455 projects nationally), stated on every row. A NULL waiting list is an absent disclosure, never an empty queue.
Which banks are past the CRE guidance line? FDIC-insured banks in Ohio whose total CRE exceeds 300% of equity, most concentrated first.
Returns matched: 8 with each bank's CRE book against equity and assets, noncurrent and charge-off ratios and its UBPR peer and national percentile ranks. 626 of 4,313 banks nationally are over that line on this measure. The guidance tests total risk based capital and these ratios are on equity, so the row says "screen", not "finding".
What matures, and against which building? Securitised and FHA-insured loans on Texas property maturing inside a year, soonest first.
Returns 77 events (page with next_cursor), each with the building's dfx_id. Then, for any row, get_property_record with that id returns the loan itself free: current principal, interest rate, original principal, maturity and basis. debt_maturity_schedule is the same population as one deduplicated statewide list with the lender name and a completeness figure.
One page per question, with the measured coverage on it
- Which commercial real-estate loans mature in a given state and window?: 3,298 LOAN_MATURITY_SCHEDULED, 52 states and territories.
- Which LIHTC properties are reaching the end of a compliance period?: 11,956 COMPLIANCE_PERIOD_ENDING, 56 states and territories.
- Which HUD-subsidised properties have contracts approaching expiry?: 4,721 SUBSIDY_CONTRACT_EXPIRING, 54 states and territories.
- Where is commercial real estate in distress, foreclosure or workout?: 3,169 DISTRESS_FLAG_RAISED, 123 FORECLOSURE_EVENT, 31 LOAN_MODIFIED, 26 states.
- What did this property sell for, and who owns it?: 49,471 PROPERTY_SOLD, 4 states.
- Which commercial leases are approaching expiry, and who occupies a building?: 4,206 LEASE_EXPIRING, 56 states and territories.
Questions it is not good at, and will say so
- Anything about a person. Person lookup is deliberately not offered.
- Assessor and parcel data outside Massachusetts.
- Debt on conventionally financed property.
- Anything outside the United States.
Design notes an agent developer may care about
changes_sinceis ordered by when DFX learned a fact, not when the fact occurred. A deed signed in March is recorded in August. Polling a date filter would show you the same rows forever.- An unrecognised
event_typeis refused with the served vocabulary attached, never answered with an empty list, because an empty list reads as an absent market. - A name is a blocking key, never an identity.
resolve_organizationreturns all candidates rather than guessing one. - Every returned fact carries its provenance: the source, the evidence class, and for sales the registry book and page.
- Coverage is a tool, not a footnote. Call
dfx_coveragebefore concluding that an empty result means an absent market.
What is behind the rows
29 registered feeds pass the rights filter and serve this endpoint, in 5 families:
- County and municipal records (20): The property layer: assessment, recorded instruments, permits, code enforcement and tax status.
- Federal program and statistical data (4): Federal programme registers and statistical series: who is funded, insured, assisted or measured.
- Public records (3): Public records that do not sit in one of the families above.
- Federal regulator filings (1): What firms, funds and plans are required to tell a federal regulator, on the regulator's own schedule.
- Securitised debt reporting (1): Loan-level and servicer reporting on debt that has been securitised, month by month.
Every returned row names its own source, the date it was effective and the date DFX read it. Which individual feeds sit inside a family is not published.
Terms
The example code in examples/ is MIT licensed. The data served by the endpoint is
not: it is derived from public federal and municipal sources under DFX's own
processing, and is served for use, not for redistribution as a dataset. Ask if you
want something broader; the answer is often yes.
Operated by DFX Intelligence. Developer reference: https://dfxintel.com/ai/real-estate-mcp
Source: README.md at commit 2dc5ea7
Tools
0Version history
2- v0.16.0LatestOct 22, 2026
- v0.14.0Sep 16, 2026
Score
85% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listedRequired15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts