DFX Real Estate Intelligence
Server Details
Free, no key. US commercial real estate: FHA/CMBS maturities, LIHTC/HUD expiries, bank CRE exposure.
- Status
- Healthy
- Uptime
- 99.3% over 41 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Capital-W-Holdings/us-property-parcel-real-estate-debt
- GitHub Stars
- 2
- Server Listing
- DFX Real Estate Intelligence
TDQS
Scored across 125 tools
With 125 tools, many search_* variants (e.g., search_private_credit vs search_credit_stress vs search_credit_maturities) and overlapping get_* cards (get_entity vs domain-specific get_pe_firm, get_vc_firm, etc.) create unclear boundaries. Descriptions are detailed but an agent must parse long text to avoid misselection, and several tools appear to address similar data from different angles.
Most tools follow a consistent snake_case verb_noun pattern (search_*, get_*, find_*, rank_*). A few outliers break the pattern (who_should_care, why_now, changes_since, debt_maturity_schedule), but overall naming is predictable and readable.
125 tools is far beyond the 50+ threshold for extreme mismatch. Even for a broad data platform, this volume is overwhelming and makes the server difficult to navigate, with many tools that could be consolidated or split across focused servers.
The tool surface covers an enormous breadth of domains (real estate, PE, VC, RIA, family offices, private credit, allocators) with fine-grained operations like property records, CMBS loans, fund trends, and contact recommendations. While some potential gaps exist (e.g., no direct create/update operations, which is appropriate for a read-only intelligence service), coverage is extensive and mostly complete for its broad scope.
Available Tools
129 toolschanges_sinceWhat DFX has learned since your last callRead-onlyIdempotentInspect
A feed of what is NEW since a cursor, ordered by when DFX learned it rather than by when it happened. The first call, made without a cursor, returns ZERO events and a starting position by design; a later call with that cursor returns what DFX learned in between. It answers what is new, not what exists. Filter by event type, state, or a specific property or parcel id. Deterministic and indexed, so frequent polling is cheap. Free. HISTORICAL FAMILIES DO FLOW THROUGH HERE. This feed 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 | Required | Description | Default |
|---|---|---|---|
| limit | No | Max 50. A full page sets `complete: false` in the envelope, which means the backlog was longer than one page and more rows are available immediately with the returned cursor. The cursor is the last row on the page, never the present moment, so nothing is skipped. | |
| since | No | Opaque cursor from a previous call. Unset on the first call, which establishes a position and returns no events by design. | |
| state | No | Two letter state code | |
| dfx_id | No | With `domain`: watch one entity (a dfx id on that domain's graph). | |
| domain | No | An intelligence domain instead of real estate; with it, `since` is an ISO timestamp. | |
| event_type | No | One served event family. | |
| place_dfx_id | No | Watch one property or parcel | |
| include_scheduled | No | With `domain`: also return rows whose occurrence date is after today (novelty SCHEDULED_FUTURE), such as an announced closing date. Default false. | |
| include_historical | No | With `domain`: also return rows DFX first saw in the window that occurred before it (novelty NEWLY_OBSERVED_HISTORICAL) and rows seeded when the domain's tape was created. Default false. Real estate rows are labelled with novelty but not filtered. |
debt_maturity_scheduleConfirmed commercial mortgage maturities for one stateARead-onlyIdempotentInspect
Free, keyless and unauthenticated. Returns 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. Every maturity_basis is 'confirmed': 19,821 of 19,821 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. Every response states how many loans DFX holds for the filter and whether the delivery is complete, so an answer capped at 200 rows is never presented as the whole population. Each row says whether a maturity event was published for the loan. A missing event does not mean the loan is defeased: loans filed as defeased (ABS-EE code F, or IP for a portion) are withheld, and code X means defeasance is not allowable, so an X loan must refinance or pay off at maturity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum loans, up to 200. | |
| state | Yes | Two letter state code. Required. | |
| within_days | No | Forward window from today. Default 548, eighteen months. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say read-only/non-destructive/idempotent. The description adds a large amount of valuable behavioral context: free keyless access, loan-level deduplication, ordering by maturity, confirmed maturity basis (19,821/19,821 from SEC/HUD filings), delivery-completeness reporting, and a principled treatment of defeasance codes (F, IP, X) and withheld loans. This far exceeds the annotation bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The paragraph is long, but each clause carries unique information such as authentication, dedup, data quality, completeness, and defeasance code interpretations. The access and 'loan rather than event' statement are front-loaded. It could be tightened slightly, but it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because no output schema exists, the description compensates by enumerating all the return fields (maturity date, principals, rate, lender, instrument, origination date, address), ordering/scoping, completeness reporting, and defeasance edge cases. An agent has everything needed to call the tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the state, limit, and within_days parameters are already documented. The description echoes 'one state', 'one forward window', and 'up to 200 loans,' but does not add new semantic meaning beyond what the schema already provides. The baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns'), a well-defined resource ('LOAN'), and exact scoping ('one US state and one forward window'), while explicitly distinguishing itself from the event-level tools. The mention of maturity, principal, lender, and secured property makes the tool concrete. It clearly is not a generic search or event tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context: it is for one-state, one-forward-window loan-level maturity data, is keyless/unauthenticated, and returns loans rather than events. It stops short of naming sibling tools or stating specific when-not-to-use conditions, but the core usage scenario is clearly inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dfx_coverageWhat DFX actually covers, and what it does notRead-onlyIdempotentInspect
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. It separates an empty result from an absent market.
With NO arguments: the full grid, every event family, every state, measured. With state and/or event_type: 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 | Required | Description | Default |
|---|---|---|---|
| state | No | Two letter state code. Optional: narrows the answer to this state. | |
| event_type | No | Optional: narrows the answer to this served event family. |
explain_matchWhy these two fit, and why notARead-onlyIdempotentInspect
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. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id_a | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| dfx_id_b | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, yet the description adds substantial behavior: entitlement gating (first 5 rows in full plus locked.count/locked.by_type), per-record truncation rules, and hard exclusions for contact values and decision-maker names. It even says where the withholding is reported (entitlement, locked), which an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Output list is front-loaded and dense, but the ALL-CAPS run-on enumeration plus the closing promotional sentence ('7 days free at https://...') bloat it. The access/withholding rules earn their place; the upsell and shouting do not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: sections, confidence label, and entitlement/locked withholding. Remaining gaps are minor, e.g. what a 'computed match' or confidence label actually looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the ID formats are already documented, but the description adds a genuine semantic fact the schema does not convey: the two IDs are order-independent ('either order'), which matters for a two-positional-ID tool. No further parameter nuance is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (explain a match between an investor and an opportunity) and enumerates the exact output sections: reasons, blockers, observations, comparable history, relationships, recent events, computed match, confidence. This is far more specific than the generic get_*/find_* siblings, and 'Facts, not a score' separates it from rank_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent the expected input pairing ('an investor and an opportunity (either order)') but never states when to reach for this versus relationship_path, find_opportunities_for_capital, or get_capital_paths. Usage is implied by the input shape rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_capital_for_opportunityWho could buy, fund or finance thisARead-onlyIdempotentInspect
Investors for a company (dfx_id) or a described opportunity (sector, state, deal size, stage, control): verified independent sponsors with observed acquisitions in the sector (listed, not paired or ranked; company to sponsor pairs are withdrawn), family offices with observed investments or stated sectors in it, venture firms when the opportunity is venture-shaped, and private equity matcher rows where that graph computes them. DFX does not recommend first-time capital providers. Every row says its basis (observed_behaviour, computed_match, observed_investments, derived). ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| stage | No | ||
| state | No | Two-letter US state code. | |
| dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| sector | No | ||
| control | No | ||
| vertical | No | ||
| asset_class | No | ||
| deal_size_usd | No | ||
| check_size_usd | No | ||
| investor_types | No | Default: independent_sponsor, capital_provider, family_office, venture_capital. private_equity adds the private equity matcher's computed buyers for a company id (always included for a dfx:pe: company). | |
| sponsor_involved | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description adds substantial non-obvious behavior: entitlement-gated truncation (first 5 rows plus locked.count/locked.by_type), per-record limits (first 3 related names), hard withholding of contact values and decision-maker names, basis labels on every row, and the entitlement/locked fields in the response. This is exactly the kind of context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the sentences are dense with real information about return shape and entitlement. The closing line ('Full access: DFX Intelligence, 7 days free at ...') is promotional filler rather than operational guidance, which slightly dilutes an otherwise tight block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, no-output-schema tool, the description does the heavy lifting: it explains the return shape (basis-labeled rows, entitlement and locked payloads) and the access constraints an agent must anticipate. It falls short only on the handful of unmentioned tuning parameters, which is a modest gap given the complexity covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 25% schema coverage the description must carry more of the load, and it does explain dfx_id (by describing the company-id mode), sector, state, deal size, stage, and control conceptually. However, it leaves limit, vertical, asset_class, check_size_usd, and sponsor_involved unexplained, so several parameters remain undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and enumerates the two input modes (a company dfx_id or a described opportunity via sector/state/deal size/stage/control). It also names the provider categories it returns (independent sponsors, family offices, venture firms, PE matcher rows), which separates it from siblings like find_pe_buyers_for_company and find_vc_investors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives conditions that select behavior ('venture firms when the opportunity is venture-shaped', 'DFX does not recommend first-time capital providers') and describes the access gating, but never explicitly routes the agent between this tool and near-neighbors such as find_lenders_for_financing, find_opportunities_for_capital, or find_pe_buyers_for_company. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_lenders_for_financingWhich lenders have funded deals like this oneARead-onlyIdempotentInspect
Lenders ranked on the comparable facilities they CURRENTLY HOLD on BDC schedules: same lien, a borrower industry containing the term (as the filer wrote it: health, software, industrial, business services), a facility size lower bound inside the band, entered since the window. Score = comparables 35%, recency 20%, size fit 15%, mark on the comparable book 15%, sponsors named 15%. Refuses one stale comparable, a book marked under 0.85 and passive holds under $2M. Sizes are lower bounds (BDC pieces), never the commitment. states filters on borrower headquarters where DFX holds one (GLEIF, about one comparable in six today); the answer reports geo_coverage, so say how many comparables carried a state. This is the answer to 'find lenders for a $60M unitranche for a sponsor-backed healthcare services business': use it before search_private_credit, whose industry filter lists borrowers. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| lien | No | A unitranche is filed as first lien. | first_lien |
| limit | No | ||
| since | No | ISO date; comparables entered on or after it. Default 24 months ago. | |
| states | No | Two-letter borrower headquarters states, e.g. ["TX","FL"]. Thins the universe to borrowers with a known state. | |
| industry | Yes | A word from the filer-written industry: health, software, industrial, business services, consumer, education. | |
| band_max_usd | No | ||
| band_min_usd | No | The financing's own size band, for the size-fit factor; defaults to size_min_usd. | |
| size_max_usd | No | ||
| size_min_usd | No | Smallest comparable facility (lower bound) to count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it a safe read; the description adds the scoring weights, refusal conditions (stale comparables, under-0.85 marks, passive holds under $2M), the lower-bound caveat on sizes, and a detailed access/entitlement model describing exactly what is withheld and what geo_coverage means. This is far beyond the annotation surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core ranking behavior and criteria, then the refusal rules and access model. Dense but almost every clause carries information; the only drag is the promotional plan URL, though the entitlement explanation around it is genuinely useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter ranking tool with no output schema, the description explains what an answer contains, what it withholds, how coverage is reported (geo_coverage, entitlement, locked), and the ranking logic. An agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; the description adds real meaning beyond the schema by clarifying that sizes are BDC lower bounds never the commitment, that `states` only matches where DFX holds a headquarters, and how `industry` terms are matched against filer-written values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rank lenders) on a specific resource (comparable facilities currently held on BDC schedules) and enumerates the exact matching criteria. It is unmistakably distinct from siblings like search_private_credit or find_real_estate_lenders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: gives a concrete example query ('$60M unitranche for a sponsor-backed healthcare services business') and says to use it before search_private_credit, explaining why the sibling differs. When-to-use and when-to-prefer-alternative are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_opportunities_for_capitalWhat this investor should be looking atCRead-onlyIdempotentInspect
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. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description goes well beyond them: it details exactly what a free tier returns (first 5 rows, locked.count/locked.by_type), what is never returned (contact values, decision-maker names), and that withholding is surfaced via `entitlement` and `locked`. That is genuinely useful behavioral context an agent cannot get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is a single sprawling, comma-heavy sentence followed by a dense access paragraph. The audience qualifier is front-loaded, but the matching logic is buried mid-sentence and the length is driven by entitlement boilerplate rather than tool-selection signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does carry return-value burden and explains the locked/entitlement envelope and 'returns the behaviour it reasoned from.' However, the actual match semantics (what counts as a match, how 'demonstrated behaviour' is derived) remain vague, leaving an agent without enough to predict results confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: dfx_id is documented in the schema, but `limit` is not explained anywhere. The description's audience list loosely hints at the dfx_id entity types but adds no constraint, default, or interaction detail for either parameter, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It identifies an audience (family office, sponsor, capital provider, venture firm) and describes matching opportunities from 'demonstrated behaviour,' which gives a general sense of a recommendation/match tool. But the core verb+resource is buried in a run-on sentence, and it does nothing to distinguish itself from close siblings like search_opportunities, search_forward_opportunities, search_isi_opportunities, or search_vc_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies context (an investor wants matched opportunities) but gives no explicit when-to-use or when-not-to-use guidance and names no alternative among the many overlapping opportunity-search siblings. The only routing-like content is the access/entitlement explanation, which is about output, not selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pe_addons_for_platformAdd-on candidates for a platform companyARead-onlyIdempotentInspect
Computed addon_for_platform matches for one platform (a dfx:pe: company id from search_pe_platforms): each candidate company with the matcher's reasons, blockers, why_now and comparable add-ons verbatim, the platform's owner, score, confidence and computed date. NOT_COVERED when the matcher has scored nothing for the platform, which is not a statement that no add-on fits. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dfx_id | Yes | A private equity graph id of the form dfx:pe:<uuid>, as returned by search_pe_firms, search_pe_funds, search_pe_platforms or search_entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description goes well beyond them with a detailed entitlement/paywall model: 5-row full lists with locked counts, per-record truncation to 3 related names, contact values and decision-maker names never returned, and the `entitlement`/`locked` disclosures. This is exactly the kind of behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause, and each subsequent block (result fields, NOT_COVERED, ACCESS) earns its place. The dense access sentence is long but information-dense rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the burden of describing return values, including the matcher fields, the entitlement/locked envelope, and truncation behavior. Nothing an agent needs to interpret or call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: dfx_id is documented in the schema, while `limit` is not. The description reinforces dfx_id's origin and format ('a dfx:pe: company id from search_pe_platforms') and hints at list-vs-record behavior, but adds nothing about the limit parameter or pagination. Baseline 3 is appropriate at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Computed addon_for_platform matches for one platform') and enumerates the returned fields (reasons, blockers, why_now, comparable add-ons, owner, score, confidence, computed date), so the agent knows exactly what it produces. It also names search_pe_platforms as the source of the required id. It stops short of explicitly distinguishing itself from the reverse-direction siblings (find_pe_buyers_for_company, find_pe_companies_for_buyer).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call it with a dfx:pe id from search_pe_platforms to get add-on candidates. It clarifies the NOT_COVERED case ('not a statement that no add-on fits'), which prevents misreading an empty result. However, it never states when to prefer this over alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pe_buyers_for_companyPrivate equity firms that could buy this companyARead-onlyIdempotentInspect
Computed buyer_for_company matches from the private equity matcher for one company (a dfx:pe:, dfx:isi: or dfx:vc: company id): each firm with the matcher's reasons, blockers, why_now and comparable transactions verbatim, the deal partner where attributed, score, confidence, model version and computed date. When the matcher has scored nothing for the company the answer is NOT_COVERED with the population count: that means DFX has not computed buyers for it, never that no buyer exists. For sponsors, family offices and capital providers as well, use find_capital_for_opportunity. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dfx_id | Yes | A company id: dfx:pe:<uuid>, dfx:isi:<uuid> or dfx:vc:<uuid>. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only/idempotent safety. The description goes well beyond: it discloses free-plan truncation (first 5 rows, locked.count/locked.by_type), that contact values and decision-maker names are never returned, and that every answer self-reports withholding in `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool returns, then the NOT_COVERED semantics, then access limits. Dense but every clause carries information, except the trailing promotional line about a free trial, which is sales copy rather than tool guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so thoroughly (reasons, blockers, why_now, comparables, deal partner, score, confidence, model version, computed date). Entitlement behavior and the NOT_COVERED edge case are both covered, leaving no material gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only dfx_id is documented in the schema, and the description merely restates its id prefixes without adding format or validation detail. The `limit` parameter (default 20, max 50) is undocumented in both the schema and the description, so the description fails to compensate for the 50% coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: computed buyer_for_company matches from the PE matcher for a single company id, and enumerates what each row contains. It is clearly distinguishable from the inverse sibling find_pe_companies_for_buyer and from the broader find_capital_for_opportunity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes adjacent use cases elsewhere ('For sponsors, family offices and capital providers as well, use find_capital_for_opportunity') and explains the negative-result case (NOT_COVERED means DFX hasn't computed, never that no buyer exists), which prevents a serious misread.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pe_companies_for_buyerCompanies a private equity firm should look atARead-onlyIdempotentInspect
Computed company_for_buyer matches for one private equity firm (dfx:pe: id): each company (on the private equity, sponsor or venture graph, with its dfx id) with the matcher's reasons, blockers, why_now and comparables verbatim, score, confidence and computed date. NOT_COVERED when the matcher has scored nothing for the firm, which is not a statement that nothing fits. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dfx_id | Yes | A private equity graph id of the form dfx:pe:<uuid>, as returned by search_pe_firms, search_pe_funds, search_pe_platforms or search_entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it explains the NOT_COVERED semantics (absence of scoring ≠ no fit), the free-tier truncation behavior (first 5 rows, locked.count/by_type), and the permanent withholding of contact values and decision-maker names, plus the entitlement/locked response fields. This is exactly the behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the important NOT_COVERED caveat, then the access rules. Dense but each clause carries real information; the trailing plan promotion and URL are the only slightly wasteful element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so: it lists the match fields returned and describes the entitlement/locked envelope for gated responses. Nothing an agent needs to call and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: dfx_id is documented in both schema and description (dfx:pe:<uuid> format), but the limit parameter is only defined by schema bounds/default. The description adds no syntax or format meaning beyond what the schema already carries, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: computed company_for_buyer matches for one PE firm, enumerating the returned fields (reasons, blockers, why_now, comparables, score, confidence, date). The direction (firm → companies) is unambiguous, though it never names the reverse sibling find_pe_buyers_for_company to sharpen the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the required dfx:pe: input and by the NOT_COVERED caveat, which tells the agent the empty-result case is meaningful. There is no explicit when-to-use-this-vs-an-alternative guidance, so the agent must infer routing from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_real_estate_lendersWhich lenders have made commercial real estate loans like this oneARead-onlyIdempotentInspect
Lenders ranked on the commercial real estate loans they ORIGINATED, from CMBS loan-level filings (SEC ABS-EE): same property type, loans in the states and city given, loans inside the size band nationally, recency and size fit. Each row names the lender (originator names normalised to the parent, a loan with several originators credits each), its local and national comparable counts and balances, the latest origination and three example loans with property, city, trust and the SEC filing. This is the answer to 'find lenders for a $100M hotel in Atlanta' or 'who lends on multifamily in Texas': use it, never find_lenders_for_financing, whose comparables are corporate BDC loans. A thin local market is carried by national comparables in the band and the envelope says how many were local. Conduit originators only: balance-sheet bank loans (most construction loans), debt funds and life companies are not on this tape, so pair it with search_bank_cre_exposure for local banks. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | The property's city, e.g. Atlanta. Counted within the states given. | |
| limit | No | ||
| since | No | ISO date; comparables originated on or after it. Default five years ago: conduit loans are 5 and 10 year paper, so five years of originations is the market active now. | |
| states | No | Two-letter states of the PROPERTY (not the lender), e.g. ["GA"]. | |
| band_max_usd | No | The financing's own size, high end. | |
| band_min_usd | No | The financing's own size, low end, for the size-fit factor. | |
| size_max_usd | No | Largest comparable loan. Default twice band_max_usd, else no ceiling. | |
| size_min_usd | No | Smallest comparable loan. Default half of band_min_usd, else no floor. | |
| property_type | Yes | The collateral. A hotel or resort is hotel. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld=false, but the description adds substantial uncovered behavior: the entitlement model (first 5 rows plus locked.count/locked.by_type, never full rows; contact values and decision-maker names withheld), the coverage boundary (conduit originators only; balance-sheet, debt funds, life companies absent), and how thin local markets fall back to national comparables.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and routing guidance, and almost every clause carries operational value. It is dense and runs long (entitlement detail plus a trailing promotional plan link), which costs a point on tightness, but nothing essential is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains the row shape in detail (lender name normalised to parent, local/national counts and balances, latest origination, three example loans with property/city/trust/filing). Combined with access limits, coverage gaps and alternatives, an agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so the schema already does most of the work and the baseline is 3. The description adds the interpretation layer the schema does not: the ranking factors (property type, states/city, size band, recency and size fit) and the band-vs-comparable-size framing that gives meaning to band_min/max versus size_min/max.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource: lenders ranked on the commercial real estate loans they ORIGINATED, sourced from CMBS loan-level SEC ABS-EE filings. It explicitly distinguishes itself from the closest sibling (find_lenders_for_financing) and states its scope restriction to conduit originators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use query examples ('find lenders for a $100M hotel in Atlanta'), an explicit exclusion ('use it, never find_lenders_for_financing, whose comparables are corporate BDC loans'), and a complementary sibling ('pair it with search_bank_cre_exposure for local banks'). When-not and alternatives are both covered with the reason why.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_vc_investorsVenture investors for a raise, exact and nearbyARead-onlyIdempotentInspect
Venture firms for a company raising a round, with HARD constraints (geography, sector, stage, amount_usd, active_only) kept apart from RANKING signals (observed entries at the stage, portfolio companies in the sector, investments in 12 months, recency, rounds led). Returns match=exact rows that meet every hard constraint, then match=relaxed rows that miss exactly ONE, each naming the criterion relaxed. Geography is the firm's headquarters: a city is its metro (Boston means the Boston area, the rest of Massachusetts is a relaxation). Each row carries its latest venture fund with lifecycle, vintage and fundraising state. Use for 'find investors for my Series A', 'Series A fintech investors in Boston', 'investors for a $7M AI infrastructure round'. Returns dfx:vc: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | A city or metro: Boston, New York, San Francisco, ... | |
| limit | No | ||
| stage | No | ||
| state | No | Two-letter US state code. | |
| sector | No | A sector word or phrase: fintech, ai, ai infrastructure, saas, biotech, healthcare, climate, defense, robotics, consumer, ... | |
| geography | No | Free text geography when unsure whether it is a city or state. | |
| amount_usd | No | The round being raised, in USD. | |
| active_only | No | Hard constraint: an investment observed in the last 12 months ('actively deploying'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: it discloses the hard-vs-ranking constraint split, the exact/relaxed return model, the geography relaxation rule, and, unusually, the entitlement behavior (5 rows in full plus locked.count/locked.by_type, contact values never returned). That is exactly the behavioral context an agent needs to set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core matching model and constraint taxonomy, then usage examples, then access rules. Dense and largely earning its length, though the trailing promotional sentence with the pricing URL is commercial noise rather than tool guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of explaining returns, and it does: match=exact vs match=relaxed rows, the named relaxed criterion, per-row venture fund lifecycle/vintage/state, and dfx:vc: identifiers. Combined with the entitlement/locked disclosure, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 75% schema coverage and 8 parameters, the description still adds real meaning: it enumerates which parameters are hard constraints (geography, sector, stage, amount_usd, active_only) versus ranking inputs, and clarifies geography semantics ('a city is its metro; Boston means the Boston area, the rest of Massachusetts is a relaxation') beyond the schema's terse field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find) and resource (VC investors) plus the exact scope: firms for a company raising a round, with hard constraints separated from ranking signals. It clearly distinguishes itself from the many search_vc_* siblings by describing the exact/relaxed matching model rather than a plain filtered search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation examples ('find investors for my Series A', 'Series A fintech investors in Boston', 'investors for a $7M AI infrastructure round') that make the intended use obvious. It does not, however, name or exclude any sibling tool, so the agent must infer when to prefer this over search_vc_firms or search_vc_raise_candidates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_allocatorOne allocator, consultant, manager or fund in fullARead-onlyIdempotentInspect
For an allocator: the card with reported assets and basis, funded status, the latest allocation policy rows (target, range, actual as printed with the subject's own label beside DFX's bucket), size and funding readings with source, investment staff and executives with the quote they were read from, plus relationships (advisers, managers, the systems an office invests for), events and same_as links through get_entity. For a Form 5500 plan: its service providers and investment entities as filed in the latest plan year (Schedule C with service codes and compensation, Schedule D with value). For a consultant: client counts on the tape, its ADV institutional numbers and the plans whose Form 5500 names it. For a manager or fund: which public LPs back it, the plans whose Form 5500 names it, and its pe / vc reference. A target is never an actual, a disclosed holding is never an approval, commitment dollars repeat across reports, re-ups are the plan's own words, estimates are labelled and nothing predictive is published. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | An allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description richly discloses access behavior: unentitled requests return only first 5 rows plus locked counts, records expose only first 3 related names per section, contact values and decision-maker names are withheld, and every answer reports withholding in entitlement and locked. It also clarifies data interpretation rules such as targets never being actuals and commitments repeating across reports.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core return profile for each entity type, followed by access constraints, so the most important content appears early. It is dense and runs long, but for a tool with this much varied output and entitlement behavior, most sentences carry relevant information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return-value burden, and it does so extensively across all four entity types. It also covers access tiers, withheld data, and what is reported in entitlement and locked, leaving no major contextual gap for an agent deciding whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single dfx_id parameter, including its format and source tools. The description adds no parameter-level syntax or usage detail beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool returns for each supported entity type: allocator card, Form 5500 plan filings, consultant details, and manager/fund backing. It names the resource and scope precisely, and references the sibling get_entity for same_as links, so an agent can distinguish it from search/list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear that this tool returns a full record once a dfx_id is known, and it enumerates entity types it covers. However, it never says when to use this versus search_allocators, search_entities, or get_entity, nor does it provide explicit exclusions or alternatives. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bdc_portfolioOne BDC's schedule of investments at a quarter endARead-onlyIdempotentInspect
Every position a BDC tagged at one quarter end (the latest unless as_of is given), each in the filer's own figures: borrower, instrument, kind, lien, principal, fair value, cost, spread, PIK, all-in rate, maturity, unfunded commitment. Debt only by default. Paged at 25. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| as_of | No | A quarter end (YYYY-MM-DD) on the BDC's tape; default the latest. | |
| limit | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| dfx_id | Yes | A dfx:pc:<uuid> BDC id or a CIK. | |
| include_equity | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent, non-destructive operation, and the description adds substantial behavioral context beyond them: plan-gated access, first-5-row truncation, locked count/by_type behavior, withheld contact and decision-maker data, and entitlement/locked disclosure. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loads the core retrieval scope and field list before access details. The access and entitlement sentences are dense but earn their place for a tool with real gating behavior; the promotional plan URL is the only slightly extraneous element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the returned fields, paging behavior, default debt-only filtering, access restrictions, and withheld-data disclosure in entitlement/locked. For a complex, gated BDC portfolio tool, this gives an agent enough to invoke and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, so the description must compensate. It adds useful meaning for as_of (latest quarter end), include_equity (debt only by default), and paging (25 rows), but it does not explain the sort parameter's meaning or the cursor beyond the schema's own description, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific retrieval verb and resource: every position a BDC tagged at one quarter end, with the exact fields returned. It distinguishes this from sibling tools by centering on one BDC's schedule of investments rather than sponsors, borrowers, or search endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to use the tool by describing its scope and default debt-only behavior, but it never names when to use it instead of alternatives such as search_private_credit or get_borrower_capital_structure. No explicit exclusions or routing guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_borrower_capital_structureOne borrower as its BDC lenders see itARead-onlyIdempotentInspect
The borrower group (its spellings and grade), every facility (kind, lien, principal held across lenders as a lower bound, mark, pricing, PIK, maturity with basis), every BDC piece at the latest quarter end, the borrower's tape quarter by quarter, every sponsor attribution with its basis and confidence, and the non-routine events. Every row names its fact class (filed: the BDC's own figure; derived: arithmetic over filed figures, a sum of pieces is a lower bound; carried: from another DFX graph with its source; inferred: an attribution by rule with confidence). A mark below cost is a mark, not impairment; a moved maturity is an observed term change, not an amendment. Non-accrual IS on the tape: each BDC's own schedule footnotes give NON_ACCRUAL_PLACED and RETURNED_TO_ACCRUAL events and a borrower's credit_status (search_credit_stress rolls them up); it is never inferred from a mark. Default, restructuring and covenants are not on the tape. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world, and the description adds substantial context on top: the fact-class taxonomy (filed/derived/carried/inferred), the semantics of 'lower bound' sums, mark-vs-impairment and moved-maturity-vs-amendment distinctions, where non-accrual data does and does not come from, and exactly what is withheld (contact values, decision-maker names) under entitlement/locked. This is unusually rich disclosure for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded with the returned sections before moving to fact classes and access rules, and nearly every sentence carries real information for an agent. It is still one dense paragraph, and the closing plan/pricing URL leans promotional rather than operational, keeping it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a complex, multi-section payload, the description carries the full burden and does so thoroughly: it enumerates every returned section, defines the fact-class provenance model, clarifies what signs do not mean (mark ≠ impairment, non-accrual not inferred from marks), and spells out entitlement/locked behavior and truncation limits. An agent has what it needs to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single dfx_id parameter and schema description coverage is 100%, including the id format and the sibling tools that supply it, so the baseline is 3. The description adds no further detail about the parameter itself, relying entirely on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource and then enumerates exactly what comes back: the borrower group, facilities, BDC pieces, tape by quarter, sponsor attributions, and non-routine events. It distinguishes itself partially by noting search_credit_stress handles credit-stress roll-ups, but it never contrasts itself with the near-identically-named sibling get_borrower_facilities, leaving that boundary to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated — the tool is clearly the per-borrower detail view, and search_credit_stress is named for roll-ups, but there is no explicit 'use this when / not when' guidance. Access-tier behavior is well covered, which helps an agent know what it will actually get, but not when to prefer a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_borrower_facilitiesOne borrower's facilities and the lender group on eachRead-onlyIdempotentInspect
Every facility a borrower group has on the BDC tape (kind, lien, principal held across lenders as a lower bound, mark on cost, pricing, PIK, maturity with its basis) with the lender group on each: every BDC holding or that held a piece, its own principal, fair value and spread, the quarters it held, and the credit manager behind it. Principal is the sum of BDC pieces: a lower bound, never the commitment, and a lender that files no schedule is invisible here. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| detail | No | compact: the id, name, type, up to five key facts with their citation and counts of the related rows by type, under 2 KB. research (the default): the full answer. | research |
| dfx_id | Yes | A private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities). | |
| held_only | No | Facilities still on a schedule at the latest quarter end. |
get_capital_pathsHow capital reaches this institution, and where it goes nextARead-onlyIdempotentInspect
Published capital flow paths through one institution: which allocators back this manager and through which fund, which lenders finance this sponsor's borrowers and on what facilities, which properties sit under this real estate manager where a binding is validated. Each path names every hop with its graph, id, type and role, the amount where one is disclosed, the as-of date, the bases the hops rest on and a confidence. Paths are built only from identity-grade or measured links; a candidate link is labelled and carries a confidence below 0.5. NOT_COVERED means the path layer has not computed this, never that no relationship exists. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | One path kind as the summary names it (for example ALLOCATOR_TO_PE_FUND_TO_MANAGER). | |
| limit | No | ||
| dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety (readOnly, idempotent, non-destructive, closed-world), yet the description discloses a rich behavioral profile beyond them: the per-path payload contents, the sub-0.5 confidence labelling of candidate links, and an unusually detailed entitlement model (5 free rows, locked.count/by_type, contact values withheld, disclosure mirrored in `entitlement`/`locked`). This is exactly the kind of context the agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Densely front-loaded: purpose first, then path payload, then epistemics, then access. Nearly every clause is load-bearing given the tool's complexity, though the closing promotional line ('7 days free at ...') is sales copy rather than invocation guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a fairly complex, multi-sectional return, the description carries the burden well by describing what each path contains, how confidence works, and what entitlement/locked will report. An agent can predict both the payload shape and its truncation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the dfx_id enumeration is already fully documented in the schema itself. The description adds nothing about `kind` naming conventions or `limit` interaction with the lock behavior, so it neither compensates for the coverage gap nor repeats the schema usefully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Published capital flow paths through one institution', then enumerates the three concrete shapes (allocator→manager, lender→borrower, properties under a RE manager). It is far more specific than a name restatement, but it never differentiates itself from the closest sibling, `relationship_path`, which also returns graph paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong interpretive guidance (NOT_COVERED means not computed, not 'no relationship'; paths built only from identity-grade or measured links), which implicitly frames when the result is trustworthy. However, it offers no explicit when-to-use versus `relationship_path` or the various `find_*` tools, and no stated prerequisites beyond the paywall note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commitmentsWho committed to this manager or fund, or what this allocator committed toARead-onlyIdempotentInspect
The commitment tapes, in one call, for any id they reference: the allocator tape (a public plan's own disclosure, with the plan, the fund as printed, the manager and fund resolved to the private equity, venture or real estate record, the amount, the status, the vintage, re-up and first-time-manager in the plan's words, the plan's own paid-in, distributed, remaining value, IRR and multiple, and the source with a quote) and the real estate fund LP tape. Dated commitments with an amount by default; value-only holdings (a line in a performance report, never an approval) only with include_holdings. A commitment is the plan's number, never the fund's size, and dollars repeat across successive reports of the same plan. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dfx_id | Yes | An allocator (dfx:al:), or a manager or fund on the allocator, private equity, venture or real estate fund graph, or a real estate fund manager's CRD. | |
| include_holdings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnlyHint, idempotentHint, non-destructive), and the description adds substantial behavior beyond them: the free-tier lock behavior (first 5 rows plus locked.count/locked.by_type), what is permanently withheld (contact values, decision-maker names), and the entitlement/locked self-reporting in every response. This is exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core scoping is front-loaded, but the first sentence is an overlong run-on enumerating a dozen tape fields, and the closing marketing CTA about the 7-day free trial does not help an agent invoke the tool. Structure is workable but padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden and does well: it describes the access model, withholding rules, and entitlement/locked fields. It stops short of describing pagination or how multiple committed entities are ordered, but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description must compensate. It does explain include_holdings well (holds that are performance-report lines, never approvals) and implies date/amount behavior for limit, but leaves the limit parameter's role and the accepted dfx_id prefixes largely to the schema. Partial compensation, so a baseline-adjacent 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: it returns 'the commitment tapes' for any referenced id, and names the two tapes it unifies (allocator disclosure tape and real estate fund LP tape). The purpose is clear, but it never names or contrasts against obvious siblings such as search_allocator_commitments or search_vc_lp_commitments, so an agent cannot easily tell which commitment tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete usage rule ('value-only holdings ... only with include_holdings') and clarifies the default (dated commitments with an amount). However there is no guidance on when to use this versus the many search_* commitment siblings, and no prerequisites for which ids qualify beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_coverageHow many companies exist in a NAICS code and state, and how many DFX holdsARead-onlyIdempotentInspect
The Census Bureau's count of firms (Statistics of US Businesses 2022, all firms and firms with 20 or more employees) in one NAICS code (2 to 6 digits) and one state or the nation, beside the number of companies DFX holds there (Form 5500 plan sponsors on the private company graph), how many of those are current with 20+ participants, and the coverage percentage. The answer to 'how many HVAC contractors are there in Ohio and how many do you cover'. A multi-state firm counts once in each state, as SUSB defines. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| naics | Yes | NAICS code, 2 to 6 digits, e.g. 238220. | |
| state | No | Two-letter state; omit for the United States. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent operation, but the description goes far beyond them: it discloses the access tier behavior (first 5 rows in full, rest locked by type, contact values and decision-maker names never returned), that every answer reports what was withheld in `entitlement` and `locked`, and the SUSB counting rule that multi-state firms count once per state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence and the access caveats are grouped afterward, so an agent can extract the essentials quickly. It is dense and the trailing plans/promo URL is borderline noise, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the response and does so: firm counts by size band, DFX-held count, current-with-20+-participants count, coverage percentage, plus the entitlement/locked withholding structure. Nothing needed to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning beyond the schema: it frames `naics` as a 2-to-6-digit code and `state` as either one state or the whole nation, and clarifies the multi-state counting semantics that the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource: a Census SUSB firm count for one NAICS code and one state/nation, paired with the number of DFX-held companies and a coverage percentage. The concrete example ('how many HVAC contractors are there in Ohio and how many do you cover') makes the output unambiguous without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example question and the 'count vs. list' framing clearly signal when to reach for this tool, and the access paragraph explains what you get back. It never explicitly contrasts itself with the sibling 'dfx_coverage' or other coverage tools, so the routing guidance stops short of full sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_facilityOne facility with its lender group and historyARead-onlyIdempotentInspect
A facility (one borrower group in one instrument class): size as the sum of BDC pieces with its basis, pricing modal and ranged across pieces, maturity with basis, the lender group (every BDC that holds or held a piece, each row the lender's own figures, plus lenders named on a deal), the facility through time, and every change at facility grain. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A dfx:pc:<uuid> facility id from get_borrower_capital_structure, search_credit_maturities or an event. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses a lot: entitlement gating on the vertical, the exact truncation rule (first 5 rows in full plus locked.count/locked.by_type for lists, first 3 related names for records), fields never returned (contact values, decision-maker names), and the entitlement/locked response fields that report withheld data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded — what the tool returns comes first, access/entitlement last — and every sentence carries information. The first sentence is a dense run-on listing many returned elements, which slightly hurts readability but does not waste space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema, single-param tool, the description covers returned contents, id provenance, and access restrictions thoroughly. It stops short of relating this tool to the closest sibling (get_borrower_facilities), leaving a small gap in routing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single dfx_id parameter is already documented with its provenance in the schema. The description adds no format or validation detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (one facility = one borrower group in one instrument class) and enumerates exactly what comes back: size, pricing, maturity, lender group, history, and changes at facility grain. It is clearly distinguishable from list-style siblings, though it never names a sibling directly (e.g. get_borrower_facilities) for contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent where the required dfx_id comes from (get_borrower_capital_structure, search_credit_maturities, or an event), which is genuine usage guidance. However, there is no explicit when-to-use/when-not-to-use versus other facility or capital-structure tools, so usage remains largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_providerOne credit provider or BDC in fullRead-onlyIdempotentInspect
A credit manager: its classes with basis, the BDCs it advises (from each BDC's own 10-K) with their latest schedules, its credit funds on Form ADV, its sponsor relationships ranked by borrowers financed, and its links to the RIA and private equity graphs by shared CRD or CIK. A BDC: its portfolio every quarter end (fair value, principal held, borrowers, mark on cost, PIK positions, average spread), its largest facilities held with the co-lenders, and the sponsors it finances. Accepts a dfx:pc: provider or BDC id, or a BDC's CIK. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | compact: the id, name, type, up to five key facts with their citation and counts of the related rows by type, under 2 KB. research (the default): the full answer. | research |
| dfx_id | Yes | A dfx:pc:<uuid> provider or BDC id, or a BDC CIK number as a string. |
get_entityEverything DFX knows about one idRead-onlyIdempotentInspect
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 pointers to deeper views. One answer to 'show me everything on X'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | compact: the id, name, type, up to five key facts with their citation and counts of the related rows by type, under 2 KB. research (the default): the full answer. | research |
| dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| include | No | Default: relationships, events, evidence, same_as. Add name_candidates to also search the other graphs by name (slower; candidates only). | |
| event_limit | No | ||
| evidence_limit | No | ||
| relationship_limit | No |
get_family_officeOne family office in fullARead-onlyIdempotentInspect
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. Accepts dfx:fo: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial behaviour beyond them: entitlement truncation rules for lists vs records, locked.count/by_type semantics, withheld contact values and decision-maker names, and the entitlement/locked response envelope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource contents, then the ACCESS block, so an agent can stop reading after sentence one. It is dense but a trailing pricing/promo URL is the one element that doesn't earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-shape burden and does so by enumerating profile, AUM/RAUM/13F, people, investments, relationships, events, evidence rows and cross-graph links, plus the entitlement/locked envelope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema description coverage, so the schema already documents the dfx id grammar fully. The description's "Accepts dfx:fo: ids" adds marginal value beyond the schema and doesn't explain error behaviour for wrong id types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific retrieval verb plus resource ("The full card for one family office") and enumerates the sections returned. It is clearly distinguishable from siblings like search_family_offices and rank_family_offices without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the correct usage context: pass a dfx:fo: id to fetch a single record, versus list/search tools that return collections. It never explicitly names an alternative or a when-not-to-use condition, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_forward_signal_ledgerHow each forward pattern was measuredARead-onlyIdempotentInspect
The ledger behind every forward claim: for each pattern, its definition, population, test period, base rate, rate among entities showing it, lift with its interval, median lead time, early and late halves (stability), precision at the top 1% against a conventional recency list at the same cut, the multiple-testing q value, and its status (VALIDATED, PRODUCTION, TESTING, PROSPECTIVE_ONLY, WEAK, REJECTED). Rejected patterns are listed on purpose: they are what DFX tested and found did not predict. Filter by vertical, status or signal key. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| status | No | ||
| vertical | No | ||
| signal_key | No | Exact signal key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring readOnlyHint, the description adds substantial behavioral context the annotations cannot: tiered access rules (first 5 rows plus a by-type count without a paid plan), what is never returned (contact values, decision-maker names), and the 'entitlement'/'locked' fields that disclose withholding. This is exactly the beyond-annotation disclosure the dimension asks for.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause, and the long field enumeration earns its place because there is no output schema. Sentences are dense and run long, and the entitlement/promotional tail ('7 days free at...') is the least essential part, but overall the content is proportionate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values, and it does so exhaustively—listing every metric per pattern and explaining the entitlement/locked withholding fields. For a 5-param, enum-rich read tool, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 40% and two filter params (status, vertical) carry enum values. The description adds meaning by naming which fields are filterable ('vertical, status or signal key'), compensating partially for the undocumented limit parameter. It adds little beyond confirming the filters and gives no syntax for cursor or limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: 'The ledger behind every forward claim,' followed by an enumeration of exactly what each record contains (definition, base rate, lift, lead time, q value, status). This distinguishes it from the opportunity-finding siblings and from search_signals. It stops short of naming a sibling to contrast against, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only operational guidance is 'Filter by vertical, status or signal key,' which describes parameters rather than when to choose this tool over search_forward_opportunities or search_signals. The note that rejected patterns are intentionally listed hints at a methodology-audit purpose but does not state when to reach for this versus the alternatives. No when-not or exclusion guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_independent_sponsorOne sponsor, provider or private company in fullARead-onlyIdempotentInspect
The full card for any entity on the sponsor graph: a sponsor (with its verification status, the companies resembling its observed deals as counted facts and reasons with no score, its announced transactions and its observed capital relationships), 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. Accepts dfx:isi: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a safe, idempotent, closed-world read. The description goes far beyond that: it discloses entitlement truncation (first 5 rows + locked.count/locked.by_type, never the rows), that contact values and decision-maker names are suppressed to types and counts, and that every response carries `entitlement` and `locked` keys. This is exactly the behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and the entitlement caveat is separated cleanly. The dense, deeply nested parenthetical that enumerates each entity type's sections is heavy, but every clause carries real information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully describes the return shape per entity type plus the relationship/event/evidence/cross-graph-link sections and the truncation metadata. An agent knows what it will receive and what will be withheld, leaving nothing essential unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents the full dfx id prefix vocabulary, so the description need not re-explain it. The description's 'Accepts dfx:isi: ids' adds only a scoping hint for this tool's graph, which is marginal value over the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'the full card for any entity on the sponsor graph', then enumerates the three subjects (sponsor, capital provider, private company) and the sections each returns. An agent can distinguish this detail lookup from list/search siblings like search_independent_sponsors without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Accepts dfx:isi: ids' note and the title imply this is the point-lookup companion to search_independent_sponsors, so usage is inferable. However, no explicit when-to-use, when-not-to-use, or named alternative is given; the ACCESS block is about plan entitlements, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_occupancyWho occupies a property, or where a company operatesARead-onlyIdempotentInspect
Two directions from one call. A PROPERTY dfx_id returns 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. A COMPANY dfx_id returns where that company is observed to operate. company with address (plus city and state) checks ONE claim: does DFX hold this company at this building. Every row carries its evidence tier and its freshness. Free.
not_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. Accepts the canonical property and company dfx_ids carried by address and name resolution results and by event rows.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Municipality. The parcel key includes it, so an address without a city resolves poorly. | |
| limit | No | Max rows. A large building can disclose several tenants. | |
| state | No | Two-letter US state code. | |
| dfx_id | No | A property dfx_id (returns its tenants) or a company dfx_id (returns its locations). The direction is read from the object, not from a flag. | |
| address | No | Street address for the one-claim check. Used together with `company`. | |
| company | No | Company name, for the one-claim check. Used together with `address`; a company name alone is refused. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly/idempotent/openWorld=false) by disclosing the critical epistemic caveat that 'not_observed IS NOT VACANT', that rows carry evidence tier and freshness, and that the tool is free. These are the exact behavioral traits an agent needs to avoid misinterpreting an empty result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the two-direction mental model, then the per-direction returns, then the one-claim check, then the caveat. Dense but every sentence carries load, including the one-word 'Free.' cost signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned fields (tenant name, dfx_id, occupancy class, leased area, share, lease expiration) plus evidence tier and freshness. With annotations covering safety, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: direction is inferred from the object rather than a flag, address and company must be used together, and a company name alone is refused. It adds actionable semantics beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource pattern ('Two directions from one call') and enumerates exactly what each direction returns (tenant name, dfx_id, occupancy class, leased area, share, lease expiration). An agent can distinguish this from get_property_record or resolve_address without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states when to use each mode: dfx_id for a property's tenants or a company's locations, and `company`+`address` for a single one-claim check ('company name alone is refused'). It gives strong in-tool routing but never names a sibling tool as the alternative when a different question is asked (e.g. get_property_record).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pe_firmOne private equity firm in fullARead-onlyIdempotentInspect
The full card for a private equity firm: identity (website, HQ, ADV filing dates), classification with basis and the size band's definition and evidence, classification history, stated criteria (sectors, EBITDA, EV, equity check, control) kept apart from observed behaviour, funds summary and its ten latest funds, team summary and current people with titles, portfolio summary with recent investments and transactions, top counterparties (lenders, advisers, placement agents, co-investors with shared-deal counts), every score WITH its components and missing_inputs, recent events, evidence, and same_as links to the family office, sponsor and venture graphs by shared identifier. Also accepts a dfx:pe: person, fund or company id and returns that card. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A private equity graph id of the form dfx:pe:<uuid>, as returned by search_pe_firms, search_pe_funds, search_pe_platforms or search_entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: it discloses the entitlement gating model (first 5 rows in full plus locked.count/locked.by_type, record names subject and 3 related names per section), that contact values and decision-maker names are suppressed to types and counts, and that entitlement/locked fields report what was withheld. This is exactly the kind of paywall, redaction, and return-shape behavior an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is largely substantive, but it is packed into one enormous run-on sentence that is not front-loaded: the reader must reach the middle to learn what the card actually contains. The enumeration is dense and could be grouped or bulleted, so structure is a clear weakness even though little is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return-value burden, and it does so exhaustively: it lists every section returned, the entitlement behavior, the locked/withheld reporting, and the cross-graph same_as links. For a complex, high-fanout entity tool, nothing an agent needs to call it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is well documented, so the baseline is 3. The description adds value by specifying that the id is polymorphic (person, fund, or company) and that the returned card matches that subject, which is meaning beyond the schema's simpler 'private equity graph id' phrasing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (retrieve the full card for a private equity firm) and enumerates the exact contents: identity, classification, funds, team, portfolio, counterparties, scores, events, and same_as links. It also carves out a distinct scope from siblings by naming the family office, sponsor, and venture graphs it links to, so an agent can tell it apart from get_family_office, get_pe_fund, or search_pe_firms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes it also accepts a dfx:pe person, fund, or company id, which is a partial usage hint, and implies it is the single-entity counterpart to the search_ tools. But it never states when to use this versus search_pe_firms, get_pe_fund, or get_sponsor_portfolio, nor any prerequisites for choosing it. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pe_fundOne private equity fund in fullARead-onlyIdempotentInspect
One fund: manager, vintage and basis, every amount kept apart with its basis (adv_gross_asset_value is reported gross assets, not fund size or dry powder), the year-by-year Form ADV reporting tape (gross assets, owners, minimum investment, ownership percentages), LP commitments where disclosed, relationships (placement agents, auditors, principals), events and evidence. Refuses an id that is not a fund; use get_pe_firm for the manager. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A private equity graph id of the form dfx:pe:<uuid>, as returned by search_pe_firms, search_pe_funds, search_pe_platforms or search_entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, and the description adds a great deal beyond them: entitlement gating behavior (list returns first 5 rows plus locked.count/locked.by_type, never full rows), record-level truncation to 3 related names per section, hard exclusions (contact values and decision-maker names never returned, only types/counts), and that every response reports what was withheld via `entitlement` and `locked`. That is exactly the kind of non-obvious behavior an agent must know before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, which is good, but the description is a dense run-on sentence stuffed with parentheticals, followed by a long ACCESS block that is part behavioral disclosure and part promotional copy ending in a pricing URL ('7 days free at https://dfxintel.com/data-factory/plans'). The entitlement explanation earns its place; the sales pitch does not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description has to describe return shape, and it does reasonably well (list vs. record behavior, locked counts, per-section name truncation, entitlement metadata). It stops short of describing the exact field set or grain of the reporting tape, but an agent can call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single dfx_id parameter is fully specified in the schema (format dfx:pe:<uuid> plus the search tools that produce it). The description adds no further syntax or format detail beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (retrieve one PE fund) and enumerates the payload: manager, vintage and basis, per-amount bases, Form ADV reporting tape, LP commitments, relationships, events and evidence. It explicitly distinguishes itself from the sibling get_pe_firm ('use get_pe_firm for the manager') and from the search tools by declaring it 'refuses an id that is not a fund'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing guidance: use get_pe_firm for the manager, and the id must be a real fund id (reinforced by the schema's note that ids come from search_pe_firms/search_pe_funds). It does not, however, state when to prefer a search_* tool over this one or what to do on a refused id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_property_recordEverything DFX holds about one property or parcelARead-onlyIdempotentInspect
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.
THIS IS ALSO THE PARCEL LOOKUP. The id can name a property or a parcel, and both come back in full, including the dfx_id carried on every address resolution object and every parcel search row.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A DFX id for a property OR a parcel. Both work and both come back in full. Accepted forms: the `dfx_id` on an address resolution object, the `dfx_id` on a parcel search row, or the evidence `dfx_id` handle carried on every returned event. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds genuine domain behavior beyond that: sales carry BOTH the instrument total and this parcel's allocated share, and it explains why (a deed repeats its full price on every parcel it covers), which warns the agent against double-counting. It does not describe output shape or failure behavior for an invalid id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and payload are front-loaded, and the parcel-lookup clarification is emphasized where it matters. It is slightly padded — the standalone 'Free.' fragment and repeated restatement of the property/parcel duality both in the description and schema — but no sentence is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so well by enumerating every result category. The one-parameter, read-only shape is fully covered; only edge cases such as an unrecognized id are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already spells out both accepted forms and the property-or-parcel duality, so the tool description largely restates it ('both come back in full'). Baseline 3 is appropriate when the schema does the heavy lifting; the description adds little new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific input (a DFX id) and enumerates the concrete payload: current state, dated events, ownership/management relationships, debt with maturity dates, recorded sales with consideration and registry book/page, plus provenance. It also explicitly resolves ambiguity against sibling tools by declaring 'THIS IS ALSO THE PARCEL LOOKUP', which separates it from search_parcels and search_property_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use — fetch by id after obtaining a dfx_id from an address resolution object or a parcel search row — and notes the call is free, which matters for selection. It stops short of explicitly naming the alternatives (search_parcels, resolve_address, search_property_events) or stating when not to use it, leaving some inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_re_debt_exposureCommercial real estate debt by sponsor, lender or servicer in a maturity windowRead-onlyIdempotentInspect
CMBS debt grouped by who carries it (latest reading per loan on the SEC ABS-EE tape): group=sponsor (the prospectus annex's sponsor or carve-out guarantor, by normalised name family), lender (the originator, folded to its parent where an SEC prospectus links them), servicer or special_servicer. Filters: within_months (default 24), property_type, state, distress (special_servicing, not_current, any), min_balance on the group's total, name (one family). Sorted by balance, with loans, properties, special servicing and the largest notes. A co-sponsored note counts in full to each named sponsor and is flagged. Conduit CMBS only. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | One sponsor or lender name family. | |
| group | No | sponsor | |
| limit | No | ||
| state | No | Two-letter US state code. | |
| distress | No | ||
| min_balance | No | USD floor on the group's total in the window. | |
| property_type | No | ||
| within_months | No |
get_re_fund_managerOne real estate fund manager in fullARead-onlyIdempotentInspect
The manager card, its ten largest vehicles and the whole family by vintage, validated property bindings with the rule and confidence behind each and the properties, loans and lenders underneath, its lenders by name with loans, principal and the last 24 months, its next ten loan maturities, property events attributed through those bindings, the public plans that disclosed commitments, the people on its Schedule A, recent events and the same institution's records on other graphs by shared identifier. Accepts a dfx:ref: id or the manager's CRD. Gross asset value is a fund's assets on a filing date: never fund size, never commitments, never dry powder, and a quarantined reading enters no sum. The sworn ADV tape starts in 2011 and runs through the latest monthly filings DFX has read (coverage_live on the answer gives the years and counts), so a first report in 2011 or 2012 is a first sighting, not a formation. Holdings, properties, loans and lenders appear only where a property binding passed its blind labels, which is a few hundred managers. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A dfx:ref:<uuid> manager id, or the manager's CRD as a string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far beyond the readOnly/idempotent annotations, it discloses the entitlement model in detail (5-row lists with locked.count/by_type, records naming only subject plus 3 related names per section, contact values and decision-maker names never returned), the GAV definition and its exclusions, the quarantined-reading rule, and the 2011-onward tape with coverage_live. This is exactly the extra context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first ~90 words are a single run-on sentence listing a dozen returned sections, so it is not front-loaded with purpose and is hard to scan. Most content does earn its place given the breadth of the payload and the access caveats, but the structure is weak rather than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a single documented parameter, the description carries the full burden and does so: it describes every returned section, the identifier forms, data-coverage limits, and the entitlement/locked contract for every answer. An agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single dfx_id parameter is already documented as a dfx:ref uuid or CRD string, so the description's restatement ('Accepts a dfx:ref: id or the manager's CRD') adds nothing new. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name and title establish this as a single-resource fetch for one real estate fund manager, and the description enumerates exactly what comes back (card, ten largest vehicles, family by vintage, bindings, lenders, maturities, Schedule A people, cross-graph records). It is distinguishable from the sibling search_re_fund_managers by being 'one ... in full', though the description never states that contrast explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the exhaustive content list implies 'call this when you have an identifier and want everything about one manager'. There is no explicit when-to-use/when-not, and no sibling (search_re_fund_managers, get_re_fund_vehicle, get_re_fund_trends) is named as an alternative. The coverage notes (2011 ADV tape, only a few hundred managers with passing bindings) do give useful interpretive context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_re_fund_trendsReal estate fund trends by yearARead-onlyIdempotentInspect
Derived series over the sworn tape, each with its population, derivation and caveat printed beside it: vehicles first reported by year (with the managers filing them), managers filing a real estate fund for the first time by year, reported gross asset value by year (feeders and quarantined readings excluded), vehicle vintages by year, vehicles that stopped being reported by year, and the largest managers by summed gross asset value. The tape starts in 2011 and runs through the latest monthly filings DFX has read, so the first years carry funds that already existed and the current year is partial. Nothing here is predictive. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | vehicles_by_year | |
| limit | No | ||
| min_gav_usd | No | top_managers only: a floor on summed gross asset value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond that: feeders and quarantined readings are excluded from GAV, the tape starts in 2011 with a partial current year, output is explicitly non-predictive, and the free-tier withholding rules (first 5 rows, count-only, contact values never returned, entitlement/locked reporting) are spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense and front-loads the series enumeration before the access caveats, so an agent gets the core purpose immediately. The entitlement/plan promotion at the end is somewhat long but is materially relevant to what data comes back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only 3 params, the description carries the return-shape burden well by explaining exclusions, date coverage, and locked/entitlement behavior. It does not explain the row/count semantics of limit or ordering of top_managers, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, but the description compensates by describing each view value in prose that maps to the enum (vehicles_by_year, managers_by_year, gav_by_year, vintages_by_year, drops_by_year, top_managers), and min_gav_usd is documented in the schema. The limit parameter (1-60) is not explained, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (derived real estate fund series by year) and enumerates the exact series produced: vehicles by year, first-time managers, GAV by year, vintages, drops, and top managers. This is clearly distinct from sibling record tools like get_re_fund_manager or get_re_fund_vehicle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool is for aggregate/trend views rather than individual records, and the enumerated series make that use case inferable. However, it never states when to pick this over get_re_fund_manager, search_re_fund_vehicles, or the other RE fund siblings, and gives no explicit exclusions or prerequisites for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_re_fund_vehicleOne real estate fund vehicle in fullARead-onlyIdempotentInspect
The vehicle card with its reporting history year by year as filed (gross asset value, owners, minimum investment, the fund type and name as filed that year), its family in sequence, the public plans that disclosed a commitment, any validated holdings, and its events. A gap in the history is a year the adviser did not report the vehicle, never a year of zero assets. Accepts a dfx:ref: id, an 805- ADV fund id or an 021- Form D number. Gross asset value is a fund's assets on a filing date: never fund size, never commitments, never dry powder, and a quarantined reading enters no sum. The sworn ADV tape starts in 2011 and runs through the latest monthly filings DFX has read (coverage_live on the answer gives the years and counts), so a first report in 2011 or 2012 is a first sighting, not a formation. Holdings, properties, loans and lenders appear only where a property binding passed its blind labels, which is a few hundred managers. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A dfx:ref:<uuid> vehicle id, an 805- ADV fund id, or an 021- Form D file number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial context beyond them: the gap-in-history semantics, the definition of gross asset value, the 2011 start of the ADV tape and quarantine rule, and the entitlement/locked withholding behavior. This is exactly the kind of behavioral detail annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The return content is front-loaded and most sentences carry real data semantics. However, the passage is very long and ends with promotional plan/pricing text ('7 days free at https://dfxintel.com/data-factory/plans') that does not help an agent invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the burden of describing return values, and it does so thoroughly: section contents, coverage caveats, quarantined readings, and the locked/entitlement withholding model. Nothing an agent needs to call this tool and interpret its output appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's accepted id formats are already documented in the schema. The description restates the same formats without adding syntax, validation, or format-specific behavior, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('the vehicle card with its reporting history year by year as filed') and enumerates the sections returned (owners, family, commitments, holdings, events). The phrase 'in full' for a single vehicle clearly separates it from the sibling search_re_fund_vehicles, which lists many.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent which identifier formats are accepted (dfx:ref, 805- ADV fund id, 021- Form D number), which is useful routing context. But it never states when to reach for this tool versus search_re_fund_vehicles, get_re_fund_manager, or get_re_fund_trends, leaving the selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_re_org_chainOne firm's real estate chain: funds, holdings, fund loans, CMBS sponsorships, owner LLCsRead-onlyIdempotentInspect
By the firm's name family: its real estate fund managers, vehicles by lifecycle, published holdings with basis and confidence, fund loans and lender groups, CMBS notes naming the family as sponsor or guarantor (with the lender and holder trust), and accepted owner chains. Lists where the chain breaks. At least 3 letters; GS is refused as ambiguous. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| limit | No |
get_re_property_chainOne building's financing and ownership chainRead-onlyIdempotentInspect
A building's recorded NYC mortgages, satisfactions and assignments (parties as filed), the sponsor resolved behind an owner of record when owner_ids are given, its CMBS notes (lender = originator, holder = the trust, special servicer, balance, maturity, status, the annex's borrower LLC and sponsor), its accepted owner chain with the basis's measured precision, fund holdings bound to it and fund loans on its address. property is the street address or building name; property_dfx_id comes from resolve_address. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| property | No | ||
| owner_ids | No | Owner of record dfx ids from get_property_record, to read the sponsor resolved behind each. | |
| property_dfx_id | No |
get_ria_advisorOne registered advisor in fullARead-onlyIdempotentInspect
One IAPD-registered advisor: name, current firm with class and tenure, employment history as dated registration spans in order (firm, begin, end, current), every firm change as two registration dates (bulk re-registrations and departures included and labelled), the teams the person moved with, exams, designations, industry start, and recent events. States plainly that no book size is public or estimated. Disclosure flags, outside business text and street addresses are withheld. Accepts a dfx:ria: id or the individual CRD number. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A dfx:ria:<uuid> advisor id, or the individual's CRD number (IAPD id) as a string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial behavioral context: freemium returns first 5 rows plus locked.count/locked.by_type counts, records name subject and 3 related names per section, contact values and decision-maker names are never returned, and every answer reports withholding in `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: return fields first, then limitations, then ID formats, then access tiers. Nearly every sentence carries information an agent needs, though the trailing promotional sentence with the free-trial URL is marketing rather than functional content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the burden of describing the return shape, the withheld fields, and the entitlement-dependent result structure. Nothing material to calling or interpreting the tool is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single dfx_id parameter is fully documented in the schema itself (uuid or CRD string). The description restates the same dual-acceptance rule without adding format, validation, or edge-case detail, so the schema does the work — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('One IAPD-registered advisor') and enumerates the exact fields returned — name, current firm with class/tenure, dated employment spans, firm changes, teams, exams, designations, industry start, events. This is clearly distinct from get_ria_firm and get_ria_practice, though it never names those siblings explicitly to route the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent how to call it (dfx:ria: id or CRD number) and extensively covers what happens at each entitlement tier, but gives no when-to-use guidance versus resolve_ria_advisor, search_ria, or get_ria_practice. Usage context is implied by the field list rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ria_capital_linksAn adviser's identifier links to the private capital graphsARead-onlyIdempotentInspect
For one RIA firm (or one private fund): every link to the private equity, venture, family office and sponsor graphs written on a shared identifier, with the basis printed on each link: the firm's own CRD or CIK, and each private fund of the firm that a private equity or venture graph row holds under the same SEC fund id (805-...). Answers 'which PE or VC graph entities hold vehicles this wealth manager advises'. The 200 largest funds are checked. A link is an identifier match; its precision by basis is not yet sampled, and a name is never a basis. Accepts a dfx:ria: firm or fund id, or a firm CRD. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dfx_id | Yes | An RIA graph id of the form dfx:ria:<uuid> (from search_ria, resolve_name or search_entities), or the firm's CRD number as a string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/no-side-effect annotations by disclosing that free-tier calls return only the first 5 rows plus locked.count/locked.by_type, that a record shows its subject and the first 3 related names, that contact values and decision-maker names are never returned, and that precision by basis is unsampled while a name is never a basis. This is exactly the kind of entitlement and edge-case context an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the routing question are front-loaded before the access caveats, and most sentences carry real information. It is dense and run-on in places, and the trailing promotional plan link is less essential, keeping it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema, the description covers the return shape (links with their printed basis), the identifier substrates, and the full entitlement/locking story. The only real gap is the limit parameter's semantics, which is minor against the otherwise thorough behavioral disclosure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%; the dfx_id schema already documents the dfx:ria:<uuid> and CRD forms the description repeats, adding little. The limit parameter is undocumented in both schema and description, though 'the 200 largest funds are checked' loosely hints at its ceiling. Baseline 3 for a half-covered schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns every link from an RIA firm (or one private fund) to the PE, VC, family office and sponsor graphs written on a shared identifier, and even names the question it answers. The scope is unusually precise, but it never explicitly names a sibling tool it should be chosen over.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Answers which PE or VC graph entities hold vehicles this wealth manager advises' implies a use case, and the accepted identifier forms (dfx:ria: firm or fund id, or a firm CRD) imply when the tool applies. There is no explicit when-not guidance or pointer to an alternative such as get_capital_paths or get_ria_firm.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ria_firmOne RIA firm in fullARead-onlyIdempotentInspect
The full card for one registered investment adviser plus its people flows (joins, departures, net, rates over 90 days, 12 and 36 months), growth between annual amendments (RAUM, employees, offices, funds one and three years back), offices (city, state, postal, employees), owners with control persons first (Schedule A and B), affiliates (Item 7.A related persons with roles), its ten largest private funds with the count still reported, teams that left or arrived, the latest departures and arrivals, recent events, and same_as links to the private equity, venture, family office and sponsor graphs by shared CRD, CIK or fund id. Every section is a page with its size stated. Every row names its fact class (reported: filed on Form ADV; fact_from_registration: IAPD registration dates; derived: a rule or arithmetic over filed inputs). RAUM double counts affiliates; no advisor book size exists or is estimated; the IAPD tape is survivor-biased before 2026-09-15. Nothing here is predictive. Accepts dfx:ria: ids or a CRD. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | An RIA graph id of the form dfx:ria:<uuid> (from search_ria, resolve_name or search_entities), or the firm's CRD number as a string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive profile, and the description adds substantial context beyond them: entitlement gating (first 5 rows, locked.count/locked.by_type, withheld contact values), data provenance classes (reported/fact_from_registration/derived), RAUM affiliate double counting, and survivor bias before 2026-09-15. These are genuinely useful caveats, though the framing is marketing-tinged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense and mostly earns its place, but it is delivered as one undifferentiated paragraph, and the closing sales pitch ('7 days free at https://dfxintel.com/...') is promotional rather than functional. A sectioned layout would serve the reader better.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and does so: it enumerates returned sections, explains pagination/entitlement behavior and locked structures, defines fact classes, and notes data-quality caveats. An agent knows what it will get and what may be withheld.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's id format (dfx:ria:<uuid> or CRD) is already documented in the schema. The description repeats the same id acceptance without adding syntax or resolution behavior, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (get one RIA firm's full card) and enumerates the exact sections returned: people flows, growth, offices, owners, affiliates, funds, teams, events, same_as links. That enumeration distinguishes it from siblings like get_ria_advisor, get_ria_practice and get_ria_trends without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies accepted identifiers ('dfx:ria: ids or a CRD') and implies this is the full-record counterpart to list/search tools, but it never states when to choose this over get_ria_advisor or search_ria, nor any exclusion conditions. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ria_outside_businessOne advisor's or one company's outside-business recordARead-onlyIdempotentInspect
With an advisor (dfx:ria: id or individual CRD): every reviewed outside-business entry, the measured dimensions (entrepreneurial, breadth, community, network, real estate, recent, independence) with the rule behind each, and dated changes (entry added or removed, a coworker disclosing the same company), plus a disclosure_status: DISCLOSED_OBA, NOT_IN_REVIEWED_RECORD (reviewed, no corresponding OBA located) or UNKNOWN (not reviewed). With a company_id (from search_ria_outside_business): the company, registry status and formation date where a state registry carries them, and every reviewed advisor disclosing a role in it. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | No | An advisor: dfx:ria:<uuid> or the individual CRD. | |
| company_id | No | An outside company id (uuid) from search_ria_outside_business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnly/idempotent/non-destructive, the description goes far beyond them: it discloses entitlement gating (first 5 rows in full plus locked.count/locked.by_type on the free tier), that contact values and decision-maker names are withheld and only typed/counted, and that every response reports its own withheld data via `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the two usage modes, then return shape, then access limits and the upsell line. Dense but each clause carries information; the trailing plans URL is slightly promotional but short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain returns, and it does thoroughly: entry types, dimensions, dated change kinds, disclosure_status semantics, registry fields, and entitlement-truncation behavior. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already defines both parameter formats, so the baseline would be 3. The description adds value by tying each parameter to a distinct result shape (advisor record vs company record) and by enumerating the disclosure_status values, clarifying what an agent gets from each identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and explicitly separates two modes: an advisor (dfx:ria id or CRD) returns reviewed outside-business entries, measured dimensions and dated changes, while a company_id returns the company, registry status and its disclosing advisors. An agent can distinguish this from sibling lookups like search_ria_outside_business without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It maps each input to a distinct use case and points to search_ria_outside_business as the source of a company_id, giving clear context for which identifier to supply. It does not state explicit when-not conditions or name a directly competing tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ria_practiceOne adviser's practice profile, anomalies, offices, retention and public contact pathARead-onlyIdempotentInspect
What a practice looks like from what it filed: reported Form ADV fields (RAUM, discretionary, accounts, employees, advisors, clients and RAUM by type, private funds, wrap, custody, compensation methods, advisory activities, affiliations, the Item 6.A, 8 and 9 answers by item number), derived operating metrics each with its formula (RAUM per advisor, clients per advisor, average HNW client, average account, discretionary and institutional shares, employees per advisor, advisors per office, one-year growth), the practice archetypes with the printed rule that admitted each (19 rules; a firm can carry several), the peer group, ADV anomalies against that peer group with the peer median, percentile and filing behind each (a place to look, never a conclusion; data quality rows kept apart), office-level movement, post-acquisition retention when the firm is an acquirer, and the public business contact path (principal office phone and website as filed on Form ADV, the firm's LinkedIn page, and what the firm publishes on its own site) with source, date and rights class. Advisor book size and revenue are marked UNKNOWN and never estimated. Accepts a dfx:ria: id or a CRD. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | An RIA graph id of the form dfx:ria:<uuid> (from search_ria, resolve_name or search_entities), or the firm's CRD number as a string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it discloses the entitlement model (first 5 rows plus counts when unentitled, only first 3 related names per section, contact values never returned), that anomalies are leads not conclusions with data-quality rows separated, and that book size/revenue are marked UNKNOWN and never estimated. These are exactly the behavioral traits an agent needs before relying on results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded but delivered as one enormous sentence with nested parenthetical inventories, and much of it is an item-by-item catalogue rather than decision-relevant guidance. It is information-dense yet hard to scan, so it is only moderately well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value disclosure and does so thoroughly: section-by-section contents, the entitlement/locked reporting contract, and the UNKNOWN policy. For a single-parameter read tool with annotations covering safety, nothing an agent needs to call and interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single dfx_id parameter, and the schema already documents the dfx:ria:<uuid> or CRD forms. The description repeats the accepted identifier types without adding format, validation or fallback semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and enumerates its contents precisely (Form ADV fields, derived metrics, archetypes, anomalies, retention, contact path) and names the accepted identifiers. It is clear what the tool returns for one practice, but it never distinguishes itself from close siblings like get_ria_firm, get_ria_advisor or search_ria_practices, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the content inventory and the note that it accepts a dfx:ria: id or CRD; there is no explicit 'use this when you need X, use Y otherwise' guidance and no alternatives named. The access-tier paragraph explains what happens on a free plan, which is helpful context, but it is not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ria_trendsRIA state statistics, advisor flows and firm growthARead-onlyIdempotentInspect
Three derived views from the RIA lane's aggregates: state_stats (SEC-registered firms, wealth firms, RAUM, private funds, advisors, joins, departures and new firms in the last year, by state); flows (firms ranked by departures, joins, net, departure rate or join rate over 12 months, with 90-day and 36-month counts, filter by state, class or size); growth (firms ranked by RAUM growth or decline between annual amendments, with employees, offices and fund counts one and three years back; under $100M RAUM excluded by default). Counts are over registration dates with bulk re-registrations excluded; RAUM sums double count affiliates. Nothing predictive. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| view | No | state_stats | |
| limit | No | ||
| state | No | Two-letter US state code. | |
| firm_class | No | ||
| wealth_only | No | ||
| min_advisors | No | ||
| min_raum_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only/idempotent/non-destructive. The description goes far beyond that: it explains entitlement gating (first 5 rows plus locked.count/locked.by_type without a paid plan), that contact values and decision-maker names are never returned, that counts exclude bulk re-registrations, and that RAUM sums double-count affiliates. This is exactly the behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the three view definitions, then layers the access/entitlement constraints. Dense but every sentence carries information an agent needs; the access and caveat clauses could be tightened slightly but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must describe returns, and it does: per-view contents, the entitlement/locked response shape, and the aggregate caveats. An agent has enough to call the tool and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13%, so the description must carry the load, and it substantially does: it maps the view enum, describes sort dimensions for flows/growth, and notes state, class and size filters. It leaves limit bounds and a few sort values (cagr_3y, employees, net_gain/net_loss) implicit, so it compensates well but not completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (derived views over the RIA lane's aggregates) and enumerates exactly what each of the three views — state_stats, flows, growth — contains, matching the view enum. An agent can tell this aggregate/trend tool apart from entity-level siblings like get_ria_firm or search_ria without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies what each view returns, which implicitly guides the view choice, but it never says when to use this tool versus the many sibling lookups (get_ria_firm, search_ria, rank_*). No when-not conditions or explicit alternative routing are provided, so selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_providerOne service provider's independent sponsor practiceARead-onlyIdempotentInspect
A law firm, bank, accounting or diligence firm as the independent sponsor graph sees it: deal counts and role mix, the sponsors it has served most (with deal counts and first and last deal), the capital providers it meets on the same deals, its professionals named on deals (title, practice, office, deals; no contact values), recent engagements with the deal, the side represented and the source that names it, and dated signals (a new sponsor relationship, a sector specialism, an activity surge). Give the dfx:isi: id from rank_service_providers or a name. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The firm's name, when no id is at hand. | |
| dfx_id | No | dfx:isi:<uuid> of the provider. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds substantial context beyond them: exactly what an unentitled caller sees (first 5 rows in full plus locked.count/locked.by_type, never the rows), how much of a record is exposed (subject plus first 3 related names per section), that contact values and decision-maker names are never returned, and that withheld material is reported in `entitlement` and `locked`. This is unusually thorough disclosure of a non-obvious access model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The resource identity is front-loaded, which is good, but the body is a single sprawling colon-delimited enumeration followed by a long ACCESS block and a promotional line with a signup URL. The content is useful, yet the wall-of-text form makes the key facts harder to scan than they need to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so: it lists each section returned, the entitlement-truncation behavior, and the fields that are always suppressed. For a two-parameter lookup tool, nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description adds provenance the schema lacks: the dfx_id is a dfx:isi:<uuid> sourced from rank_service_providers, and `name` is the fallback when no id is at hand. It does not say whether name is fuzzy-matched or what happens on ambiguity, so it is slightly above baseline rather than fully additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (a law firm, bank, accounting or diligence firm as seen through the independent sponsor graph) and enumerates exactly what the record contains: deal counts, role mix, served sponsors, capital providers, named professionals, engagements, and dated signals. An agent can distinguish this from rank_service_providers (a ranked list) and search_service_provider_sponsors without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent where the identifier comes from ('Give the dfx:isi: id from rank_service_providers or a name'), which is real routing guidance to a sibling tool. It does not state when to prefer this over search_service_provider_sponsors or what to do if multiple providers match a name, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sponsor_lendersWhich lenders finance this sponsor's borrowersARead-onlyIdempotentInspect
Sponsor by lender pairs counted once per borrower held: borrowers, facilities, principal held, first and latest quarter, new borrowers in the last four quarters against the prior four, quarters since the last new borrower, and the weakest sponsor attribution basis in the pair. Accepts a private credit sponsor id, or a private equity, independent sponsor or venture id, resolved to the credit sponsor carried from that same record (basis origin_record) with its basis printed. A pair whose weakest basis is an inference is an inference; deal_party means the lender was named on an announced deal, not read from a BDC schedule. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | borrowers | |
| limit | No | ||
| dfx_id | Yes | A dfx:pc: sponsor id, or a dfx:pe:, dfx:isi: or dfx:vc: id the credit graph carries. | |
| min_borrowers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, non-destructive, closed-world), while the description adds substantial behavioral detail: the basis-resolution via origin_record, that a pair inherits its weakest basis, the deal_party vs BDC-schedule distinction, and the exact free-tier truncation behavior (5 locked rows, count-only answers, withheld contact/decision-maker values surfaced in entitlement/locked). This is well beyond what the structured fields convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content mostly earns its place, but it is delivered as one dense run-on paragraph that mingles returned fields, input resolution, and access rules without clear structure. Front-loading is reasonable, though a bulleted separation would be more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so describing the returned metrics and the entitlement/locked structure is essential and mostly delivered. Combined with the read-only annotations, the definition is close to complete, with the main gap being the undocumented sort/limit/min_borrowers parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 25% (only dfx_id documented), so the description has to compensate. It does clarify dfx_id's accepted id forms and the resolution path, but says nothing about sort, limit, or min_borrowers, leaving three parameters undocumented except by their enum/defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (sponsor-by-lender pairs with borrowers, facilities, principal held and related stats), and the title reinforces what it returns, so an agent can tell it produces a ranked lender list for a sponsor. It never names the near-identical sibling search_sponsor_lender, so differentiation from alternatives must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains input id forms and entitlement behavior but gives no when-to-use guidance, no exclusions, and no routing to siblings like search_sponsor_lender or get_sponsor_portfolio. An agent gets no help deciding when this tool is the right call versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sponsor_portfolioA named sponsor's own holdings and what they say about its strategyARead-onlyIdempotentInspect
Every portfolio holding DFX has for one private equity or independent sponsor firm (current and exited): company, state, listed sector, fund, platform or add-on, control, entry and exit dates with their basis, and the source. Plus a fingerprint of the portfolio: counts by sector, state and control, how many are current. Give a dfx id (dfx:pe: or dfx:isi:, linked through the identity layer) or a firm name. The first read for 'which companies fit this sponsor's strategy': read what it owns before searching for lookalikes. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The firm's name, when no id is at hand. | |
| limit | No | ||
| dfx_id | No | dfx:pe:<uuid> or dfx:isi:<uuid>. | |
| status | No | any |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds substantial context beyond them: the entitlement-gated response shape (first 5 rows in full plus locked.count/locked.by_type), the guarantee that contact values and decision-maker names are never returned, and that every answer reports what it withheld via `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the field list and fingerprint lead, then usage, then access rules. Every sentence carries information, though the closing plan promotion is promotional filler rather than tool-relevant guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by describing the return payload (holdings, sector/state/control counts, current totals) and the gating. Combined with rich annotations, an agent has everything needed to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must carry weight, and it does for the two key inputs: it specifies the dfx id forms (dfx:pe:/dfx:isi:) and the identity-layer linkage, and the name alternative. The status and limit parameters are covered only implicitly by '(current and exited)', leaving the enum and cap undocumented in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource (a sponsor's current and exited portfolio holdings), enumerates the returned fields, and names the specific scenario it answers ('which companies fit this sponsor's strategy'). It is clearly distinguishable from siblings like get_pe_firm or search_sponsor_deals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames itself as 'the first read' and prescribes ordering ('read what it owns before searching for lookalikes'). This gives clear context for when to reach for it. It stops short of naming the specific alternative sibling tools to use afterward, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vc_firmOne venture firm, person, fund or company in fullARead-onlyIdempotentInspect
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. Accepts dfx:vc: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses free-tier truncation (first 5 rows, locked.count/locked.by_type), that contact values and decision-maker names are withheld as types/counts only, and that every answer reports what it withheld in `entitlement` and `locked`. This is unusually rich behavioral disclosure for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The return-content inventory is front-loaded and informative, but the entitlement paragraph is repetitive ('never the rows', 'are never returned') and the closing marketing line with a plans URL is promotional filler for a tool-selection document.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing returns, and it does so comprehensively: per-entity-type contents, related relationships/events/evidence/cross-graph links, plus truncation and withholding semantics. An agent knows what it will and will not get back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single required parameter, so the schema already documents the id format thoroughly. The description's 'Accepts dfx:vc: ids' adds nothing and is actually narrower than the schema, which accepts fo/isi/vc/pe/ria/al/pc/ref ids and bare UUIDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('the full card for any entity on the venture graph') and enumerates what each entity type returns (firm with investments/co-investors/funds, person with board seats, fund amounts, portfolio company investors). It does not, however, distinguish itself from sibling getters like get_pe_firm, get_family_office, get_ria_firm or get_entity, which appear to do the analogous thing for other graphs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains access/entitlement tiers at length but never says when to choose this over a sibling such as search_vc_firms, get_entity, or find_vc_investors, nor what prerequisite (a dfx:vc id obtained elsewhere) is required. Usage is only inferable from 'Accepts dfx:vc: ids'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_family_officesRank family offices against a buyer's criteriaARead-onlyIdempotentInspect
THE tool for any family office question with criteria (sector, check size, capital, sponsors, co-investors, recent events, geography, reachable people). Family offices ranked by a transparent weighted score over the criteria given. Each row carries reasons (what matched, citing card fields and dfx ids), failed (evaluated, did not match) and gaps (could not be evaluated: data missing, not a failure), plus capital band, last deal, top decision maker (name and title, no contact value) and signal. The envelope says per criterion how many candidates it could be evaluated on. Geography and class are hard filters; everything else is soft unless listed in require. Default: family capital only. Industries are canonical codes (industrial_services, manufacturing, financial_services:fintech, real_estate:multifamily, software:ai, healthcare_services...) or plain words. Returns dfx:fo: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| metro | No | ||
| cities | No | ||
| prefer | No | Make geography soft. | |
| stages | No | ||
| states | No | Two-letter codes. | |
| classes | No | ||
| control | No | Prefers offices with control or majority deals on record. | |
| regions | No | ||
| require | No | Criteria that must match (hard filters). | |
| industries | No | Canonical codes or words: industrial, fintech, healthcare, multifamily, oil and gas, AI... | |
| event_since | No | ISO date; default two years back. | |
| event_types | No | FAMILY_LIQUIDITY_EVENT, CIO_HIRED (a CIO or head of investments hire), NEW_INVESTMENT_VEHICLE, ... | |
| contact_tier | No | ||
| asset_classes | No | ||
| check_max_usd | No | ||
| check_min_usd | No | Stated check size, else the office's own disclosed checks, overlaps this range. | |
| invested_since | No | ISO date: a dated deal on or after it. | |
| capital_max_usd | No | ||
| capital_min_usd | No | Office investable capital band (else family wealth band) overlaps this range. | |
| co_invested_with | No | Firm names or dfx ids the office has co-invested with. | |
| counterparty_min | No | ||
| direct_investing | No | Prefers offices with direct deals on record (or a stated direct program). | |
| investment_types | No | ||
| event_within_days | No | ||
| sponsor_min_deals | No | Minimum sponsor-backed deals or sponsor relationships. | |
| counterparty_kinds | No | Kinds of co-investor: pe, vc, family_office, lender, independent_sponsor. | |
| single_family_only | No | Excludes multi-family offices. | |
| sponsor_industries | No | Sectors of the sponsor deals (defaults to industries). | |
| invested_within_days | No | ||
| allocates_to_managers | No | Prefers offices that commit to external funds or managers. | |
| min_identity_confidence | No | 0 to 100. | |
| backs_independent_sponsors | No | ||
| has_reachable_decision_maker | No | ||
| investment_decision_maker_only | No | Count only people with investment authority (CIO, head of investments), not any principal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, but the description adds substantial behavioral context beyond them: entitlement/locked gating (5-row lists, names/counts only, contact values never returned), the reasons/failed/gaps output structure, and the default 'family capital only' scope. This is exactly the extra disclosure annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and mostly dense with signal; the filter semantics and access rules each earn their sentence. The trailing sales line ('Full access: DFX Intelligence, 7 days free at...') is promotional filler that does not help an agent invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a highly complex 35-param tool with no output schema, the description supplies the missing return-value contract (reasons/failed/gaps, envelope coverage counts, entitlement/locked) and the filter model. An agent has what it needs to call it and interpret results without a schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 35 params at 54% schema coverage, the description compensates well conceptually: it explains require as hard filters, prefer as making geography soft, geography/class as default hard filters, and gives canonical industry codes. It still leaves a number of individual params (contact_tier, min_identity_confidence, counterparty_min) unexplained in prose, so it does not fully close the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource claim ('THE tool for any family office question with criteria') and enumerates the criteria dimensions it ranks on. It is clearly distinguishable from siblings like search_family_offices and get_family_office, which fetch rather than rank against a buyer's weighted criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the selection condition clearly ('any family office question with criteria') and defines the hard-vs-soft filter model plus the role of require and prefer. It does not explicitly name the alternative sibling tools (search_family_offices, explain_match) or state when NOT to use it, so it falls short of the full when/when-not/alternatives bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_service_providersLaw firms, investment banks, accountants and QoE firms ranked by independent sponsor dealsARead-onlyIdempotentInspect
Service providers on announced independent sponsor transactions, ranked over the whole graph: law firms (family legal), investment banks and M&A advisers (investment_banking), accounting firms (accounting), quality of earnings providers (qoe), commercial diligence, R&W insurance and brokers (insurance), debt advisers, technology diligence. Each row: independent sponsor deals, how many on the sponsor side, distinct sponsors served and how many more than once, deals in the last 6 and 12 months, first and last deal, the verticals and deal states, the role mix (buyer counsel, lender counsel, sell-side advisor, qoe...) and the sponsor it works with most. THE answer to 'top 10 law firms by independent sponsor deal count', 'which QoE providers work with independent sponsors', 'most active M&A advisers for sponsor deals in healthcare'. Not for capital providers or lenders: use rank_sponsor_capital. Returns dfx:isi: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | deals (default), sponsors (distinct served), repeat (sponsors served more than once), recent (last 12 months), last (latest deal). | deals |
| limit | No | ||
| query | No | Provider name contains. | |
| state | No | Two-letter state of a deal's target. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| family | No | legal = law firms; investment_banking = M&A advisers and bankers; qoe = quality of earnings; default every family. | |
| vertical | No | Providers with at least one deal in this vertical (sector of the target). | |
| min_deals | No | ||
| active_since | No | ISO date; last deal on or after. | |
| sponsor_focused_only | No | Only firms the graph classifies as sponsor-focused. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is free. The description goes well beyond that by disclosing the entitlement gating: unentitled lists return only 5 rows plus locked.count/locked.by_type, records expose only the first 3 related names per section, and contact values and decision-maker names are never returned. It does not describe pagination semantics for cursor beyond the schema, but the access disclosure is unusually rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and the row contents, then the trigger questions, then the exclusion and access terms. It is long, but nearly every clause carries load; the trailing plans/URL marketing sentence is the only filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining the return shape, and it does: it enumerates every row field (deal counts, sponsor-side counts, repeat sponsors, 6/12-month activity, first/last deal, verticals, states, role mix, top sponsor). It also documents the entitlement/locked response contract, which an agent needs to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so most parameters (sort, cursor, active_since, sponsor_focused_only, vertical, state) are already documented in the schema. The description's family glosses ('legal = law firms', 'qoe = quality of earnings') largely restate the enum descriptions, so it adds little meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rank) and resource (service providers on independent sponsor transactions) and enumerates the exact families covered, mapping each to its internal enum value. It explicitly distinguishes itself from rank_sponsor_capital, so an agent can separate it from its nearest sibling without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger questions ('top 10 law firms by independent sponsor deal count', 'which QoE providers work with independent sponsors') and an explicit exclusion with the correct alternative ('Not for capital providers or lenders: use rank_sponsor_capital'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_sponsor_capitalWho finances independent sponsor deals: ranked providers, repeat pairs, or the dealsARead-onlyIdempotentInspect
The capital parties named on announced independent sponsor transactions, aggregated. group=provider ranks lenders and equity providers by distinct deals and distinct sponsors financed, with how many sponsors they financed more than once, their roles, verticals and first and last deal. group=pair lists sponsor and provider pairs that repeat (min_deals, default 2) with the targets. group=deal returns the deal rows. role_class=debt keeps lenders, senior, mezzanine, unitranche and subordinated debt; equity keeps equity and co-invest. EBITDA filters use the TARGET's estimated EBITDA band (employees and sector ratios, confidence 0.45 to 0.55; no deal states EBITDA) and the answer says how many deals could not be sized. The answer to 'which capital providers are most active in independent sponsor deals', 'who lends to IS deals of $10M to $50M EBITDA' and 'which sponsors and lenders work together repeatedly'. DEALS LIKE ONE DEAL: give deal_sponsor and deal_company ("which lenders financed deals similar to Glen Oaks Capital's acquisition of StanChem Resins") and the deal itself is resolved, then providers on OTHER sponsors' deals in that deal's vertical since since (default 730 days ago) are ranked by distinct sponsors backed, each marked if it already backs this sponsor; the same comparable set the capital map letters use. A company that matches none of the sponsor's deals is DEAL_NOT_FOUND with the sponsor's deals listed, never a guessed sector. Returns dfx:isi: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | provider | |
| limit | No | ||
| since | No | ISO date; deals announced on or after. | |
| state | No | Two-letter state of the target company. | |
| vertical | No | ||
| min_deals | No | group=pair only. | |
| role_class | No | any | |
| deal_company | No | Deals like this one: the company it bought (a name fragment is enough). | |
| deal_sponsor | No | Deals like this one: the sponsor that made it (name or dfx:isi: id). | |
| ebitda_max_usd | No | ||
| ebitda_min_usd | No | ||
| sponsor_dfx_id | No | dfx:isi:<uuid> of a sponsor. | |
| provider_dfx_id | No | dfx:isi:<uuid> of a capital provider. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses a lot an agent would otherwise have to discover: entitlement truncation rules (first 5 rows plus locked.count/locked.by_type), permanent withholding of contact values and decision-maker names, EBITDA sizing confidence (0.45-0.55) and the fact no deal states EBITDA, DEAL_NOT_FOUND fallback behavior with no guessed sector, and the dfx:isi: return-id convention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The prose is dense and long, but it is front-loaded by group mode and every sentence carries a distinct rule (mode behavior, filter semantics, access limits, error handling). The trailing plans URL is the only clearly promotional, non-functional sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, output-schema-less tool with no required params, the description covers the three result shapes, the comparable-deal path, filter semantics, error mode, return identifiers, and access/entitlement behavior. An agent could invoke it correctly and interpret the locked/entitlement fields without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 54% across 13 params, and the description compensates substantially: it maps group enum values to their behaviors, explains min_deals is pair-only with default 2, defines what role_class=debt and equity include, clarifies that the EBITDA filters bind to the target's estimated band, and gives deal_sponsor/deal_company matching semantics. It leaves state, vertical, sponsor_dfx_id and provider_dfx_id to the schema, so it is not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb+resource (rank the capital parties named on announced independent sponsor deals, aggregated) and then enumerates the three output shapes (group=provider, group=pair, group=deal) plus the deals-like-one-deal variant. An agent can see exactly what this tool returns and how it differs from sibling search/get tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use examples: 'which capital providers are most active in independent sponsor deals', 'who lends to IS deals of $10M to $50M EBITDA', and 'which sponsors and lenders work together repeatedly', and it dictates when to pass deal_sponsor/deal_company. It does not explicitly name the sibling tools to use instead (e.g. search_sponsor_capital_providers or get_sponsor_lenders), so routing is strong but not fully disambiguated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relationship_pathHow two entities are connectedARead-onlyIdempotentInspect
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. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| max_hops | No | ||
| to_dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| from_dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe/idempotent read profile, yet the description adds substantial behavioral context: results are truncated by entitlement, lists return only first 5 rows plus locked.count/locked.by_type, records cap related names at 3 per section, and contact values/decision-maker names are never returned. It also names the fields that disclose what was withheld (entitlement, locked).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and hop/no-match semantics are well front-loaded, but the ACCESS paragraph is long and blends genuine withholding disclosure with a commercial upsell ('7 days free at https://...'), which does not help an agent decide or call the tool. It is informative but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by describing return structure (entitlement, locked, locked.count, locked.by_type) and result limits. Combined with the id-format detail in the schema, an agent has enough to call it correctly; only finer details like pagination or full field list are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with the two dfx_id parameters heavily documented in the schema itself (all graph prefixes and bare UUID). The description adds the meaning of max_hops (hop budget) and confirms the default, but max_hops has no schema description, and the description does not expand on hop semantics beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: an evidence-backed path between two DFX ids across every graph, with each hop defined as a published relationship or SAME_AS identity link. This is clearly distinguishable from the sibling search_relationships (which lists relationships rather than connecting two entities) and from the get_* entity tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the search is bidirectional and bounded by max_hops, and gives crucial interpretation guidance (NO_MATCH means no observed path within budget, not that they are unconnected). It does not, however, name an alternative tool or state explicit when-not-to-use conditions, so it stops short of the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_addressResolve a US street address to a property or parcelARead-onlyIdempotentInspect
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. The ids returned are the canonical property and parcel ids used across this server.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City or town, for example 'Cambridge'. Optional: a one-line address carrying its own city and state is accepted whole in `address` and split server side. A value given here takes precedence over anything parsed out of `address`. | |
| limit | No | Max 50. This is candidates for ONE address, not a page of a search. `address_group_size` on a result reports when several published records share the address. | |
| state | No | Two letter state code | |
| address | Yes | Street address including the house number, for example '100 Binney St' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/destructive/openWorld, and the description adds real value beyond them: it explains the returned object types, that match basis and ambiguity are surfaced, that property and parcel are barely-overlapping populations that may return one/both, and that the call is free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core action is front-loaded and sentences are dense and purposeful. There is mild redundancy between 'canonical DFX object ids' and the closing sentence restating that the ids are canonical across the server, but overall it reads tightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so well, naming the typed objects, the ambiguity signal, and the two populations. It stops short of describing no-match behavior or the shape of the ambiguity field, but is largely complete for a resolver.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents address, city, state, and limit in detail. The description adds nothing parameter-specific, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Turn a street address into canonical DFX object ids') and clarifies the two output populations (property vs parcel). It clearly separates this resolver from the search_* siblings by describing it as an address-to-id resolution step, though it never names a specific alternative tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case (given an address, get canonical ids) is implied clearly, and 'Free' signals cost. But there is no explicit when-to-use/when-not guidance or reference to alternatives like search_parcels, verify, or get_property_record, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_nameA name to DFX ids, fast, across every private capital graphARead-onlyIdempotentInspect
Resolve a firm, fund, person or company name to canonical dfx ids from the Data Factory's index of every published name and alias (former names, dbas, legal names) on the family office, sponsor, venture, private equity, RIA, allocator, private credit and real estate fund graphs as each graph is indexed. Each row carries the ROLES the institution holds across graphs where the identity layer publishes them, so one institution that is a private equity manager, a registered adviser, a private credit manager, a real estate fund manager and a manager holding allocator capital comes back as one identity with the id on each graph, never as five unrelated firms. Ranked exact, prefix, then word match; one row per entity; typically under 200 ms. The first call before get_entity. Real estate organisations are resolved by resolve_organization instead. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name, or a word of it (Blackstone, Horowitz, Thoma). | |
| limit | No | ||
| domain | No | Comma-separated: family_office, independent_sponsor, venture_capital, private_equity, ria, allocators, private_credit, real_estate_funds. Default: all. | |
| entity_type | No | Comma-separated graph types: organization, office, sponsor, capital_provider, fund, person, company. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial behavioral context beyond them: match ranking (exact, prefix, word), one-row-per-entity de-duplication, typical latency under 200ms, and a detailed entitlement model (5 rows + counts when locked, contact values withheld, entitlement/locked fields). The remaining gap is that the `locked`/`entitlement` return shape is asserted but not illustrated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior is front-loaded and dense, but the run-on identity sentence is hard to parse and the closing 'DFX Intelligence, 7 days free at https://...' line is promotional rather than operational, padding the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with no output schema, the description covers matching semantics, cardinality (one row per entity), roles, latency, and the full access/withholding model. An agent has everything needed to call it and interpret a truncated response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 75% schema coverage the baseline is already 3, and the description adds real meaning: `name` matches aliases/former names/dbas/legal names and accepts a partial word, `domain` enumerates the graph verticals, and the role-merging behavior explains why one entity may surface across graphs. Only `limit` goes unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Resolve a ... name to canonical dfx ids') and pins the scope to the Data Factory name/alias index across named graph verticals. It also pre-empts confusion with the nearest sibling by stating real estate organisations are resolved by resolve_organization instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions itself as 'the first call before get_entity' and routes a competing case (real estate organisations) to resolve_organization. That is a clear when-to-use plus an exclusion with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_organizationResolve a company name to a DFX entityARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| name | Yes | Company name as written anywhere: owner, manager, lender or servicer, for example 'KeyBank'. It is matched as a blocking key, so a partial or differently punctuated name returns several candidates rather than one chosen match. | |
| limit | No | Max 50. Every candidate is returned rather than a best guess, so a common name spends this whole budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world). The description adds value beyond them: it is free, it returns all candidates rather than a best guess, and it declines person lookup. Return-shape behavior is disclosed even without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core purpose, then the key semantic caveat, then cost and scope. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only 2-param resolver with no output schema, the description covers purpose, semantics, cost, and scope exclusions adequately. It leaves slight ambiguity about how it relates to search_entities for the same name-to-id task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are fully documented in the schema, so the baseline is 3. The description's blocking-key explanation largely restates what the schema already states for both 'name' and 'limit'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (resolve), resource (organization name), and output (canonical DFX entity ids), and explicitly distinguishes itself from person lookup. An agent can tell it apart from search_entities/get_entity without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use (owner, manager, lender or servicer names) and an explicit exclusion ('Person lookup is deliberately not offered'), which implicitly routes to search_people. It does not explicitly name when to prefer this over search_entities or get_entity, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_ria_advisorA person's name plus a firm to one advisor cardARead-onlyIdempotentInspect
Resolve an advisor by name AND a firm (name or CRD), or by individual CRD, to one person card. A name alone is never resolved to one person: 439,425 registrants share many names, so with only a name the answer lists labelled candidates and resolved is false. With a firm name, the current firm is tried first, then prior registrations with that firm. The card that comes back is the same as get_ria_advisor's summary; call get_ria_advisor(dfx_id) for the history. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| crd | No | The individual's own CRD number (IAPD id); resolves directly. | |
| firm | No | The firm's name or part of it (current or prior registration). | |
| name | Yes | The person's name or part of it. | |
| limit | No | ||
| state | No | Two-letter US state code. | |
| firm_crd | No | The firm's CRD number; current registration only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it a safe, idempotent read; the description adds the substantive behavior an agent cannot infer: name-only resolution never collapses to one person, entitlement gating truncates lists to 5 rows plus counts, records expose only 3 related names per section, and contact/decision-maker values are suppressed and only reported as types/counts via `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resolution rule, then behavior, then access limits — a good information hierarchy. The closing promotional block ('DFX Intelligence, 7 days free at https://...') does not help tool selection and is pure overhead, though it is short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so well by describing the card, candidate lists, and the entitlement/locked fields. The only unexplained surface is how `limit` interacts with the 5-row entitlement cap, which an agent might reasonably want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 83%, so the baseline is 3. The description lifts it by explaining the asymmetry the schema only hints at: a firm *name* searches current and prior registrations while firm_crd is current-only, and name-only input produces a candidate list rather than a record. It says nothing about `limit` or `state`, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (resolve), its exact inputs (name + firm name or CRD, or individual CRD) and its output unit (one person card). It explicitly contrasts its behavior with the sibling get_ria_advisor ('the same as get_ria_advisor's summary; call get_ria_advisor(dfx_id) for the history'), so an agent can pick between them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when/when-not guidance: a name alone is never resolved to one person and instead returns labelled candidates with `resolved` false, and the firm-then-prior-registration fallback order is spelled out. It also names the alternative tool and the exact argument (dfx_id) needed to reach it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_13f_sector_holdersFamily offices holding a sector in their 13FARead-onlyIdempotentInspect
Family offices (and, with family_capital_only false, every 13F filer on the family office graph) that hold public positions in a sector per their latest Form 13F: for each office, the value held in the sector, the number of positions, the sector's share of the office's 13F book, its top five positions (issuer, ticker, value, share of book), its class (single or multi family office) and state, and the 13F filing. Sectors are the SEC's own SIC codes on each issuer (CUSIP to ticker to SEC CIK to EDGAR SIC). Give SIC codes (3674 semiconductors, 6021/6022 banks, 1311 oil and gas, 2834 pharmaceuticals, 7372 software) or a sector word matched against the SEC description. A 13F lists US listed long equity positions only: private holdings are not on it. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sic | No | SEC SIC codes. | |
| limit | No | ||
| state | No | Two-letter state of the office. | |
| period | No | ISO quarter end; default the newest quarter on the tape. | |
| sector | No | A word in the SEC SIC description, e.g. semiconductor, bank, pharmaceutical, software, oil. | |
| family_capital_only | No | true: confirmed and probable single and multi family offices, family investment companies and vehicles. false: every 13F filer on the graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/non-destructive annotations by disclosing the entitlement model: free tier returns only the first 5 rows plus locked.count/locked.by_type, records name only their subject and first 3 related names, and contact values/decision-maker names are withheld but reported as types and counts. It also flags that 13F covers only US-listed long equity, so private holdings are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph, front-loaded with purpose and return fields, followed by input guidance and access constraints. Every sentence earns its place, though the trailing plan/pricing pitch is slightly promotional rather than functional.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so thoroughly (field-by-field), plus covers access restrictions and the 13F coverage limitation. For a 6-parameter, no-required, no-output-schema tool this is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), so the baseline is 3, but the description adds real meaning: it supplies example SIC codes (3674, 6021/6022, 1311, 2834, 7372), explains that a sector word is matched against the SEC SIC description, and clarifies the CUSIP→ticker→CIK→EDGAR SIC chain behind sector assignment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) plus resource (family office / 13F filers holding a sector) and enumerates exactly what is returned per office (value, positions, share of book, top five, class, state, filing). It also implicitly distinguishes itself from sibling list tools by scoping to sector holdings on the 13F graph.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the family_capital_only toggle and how to express a sector (SIC codes or a sector word), which is usage context, but it never names an alternative tool or states when to prefer search_family_offices / search_family_office_investments over this one. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_allocator_commitmentsThe commitment tape: who committed to which fund, when, in the plan's own wordsARead-onlyIdempotentInspect
One row per line of a plan's own disclosure: allocator, fund as printed, manager and fund resolved to the pe / vc graphs where the resolver matched, bucket, the plan's commitment amount, status (COMMITTED with the plan's closing date; DISCLOSED_HOLDING as of the report date), vintage, re-up / first-time-manager in the plan's words, the plan's own paid-in, distributed, remaining value, IRR and multiple where printed, and the source URL with a quote. Filter by allocator, manager (who backs this manager), fund, consultant, status, bucket, re-ups only, first-time only, since date; sort by date, amount or vintage. A target is never an actual, a disclosed holding is never an approval, commitment dollars repeat across reports, re-ups are the plan's own words, estimates are labelled and nothing predictive is published. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | Allocator, fund or manager name contains. | |
| since | No | ISO date; effective date on or after. | |
| bucket | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| status | No | ||
| fund_dfx_id | No | An allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities). | |
| re_ups_only | No | ||
| manager_dfx_id | No | An allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities). | |
| first_time_only | No | ||
| allocator_dfx_id | No | An allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities). | |
| consultant_dfx_id | No | An allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses substantial behavior: the tiered entitlement model (5 rows plus counts when unentitled), that contact values and decision-maker names are withheld, and that every answer reports withholdings in `entitlement` and `locked`. This is exactly the kind of access and data-suppression context an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The row definition is front-loaded and information-dense, and most clauses earn their place by adding field or filter semantics. It is a very long run-on construction with a trailing promotional line about the paid plan, which slightly hurts readability but does not bury the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on the burden of describing the returned row structure and the entitlement-suppression behavior, and it covers filter/sort semantics for a 13-param tool. Minor gaps remain around pagination/ordering defaults (only `cursor` is schema-described), preventing a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 54%, but the description compensates by mapping the lower-documented filters (bucket, status, re_ups_only, first_time_only, since, sort) to their meaning and by clarifying that status values COMMITTED vs DISCLOSED_HOLDING carry different semantics. The dfx_id params are already well described in the schema, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete definition: 'One row per line of a plan's own disclosure' and enumerates the returned fields (allocator, fund, manager, bucket, amount, status, vintage, etc.), making the resource and granularity unambiguous. It never explicitly names the sibling it is distinct from (get_commitments, search_vc_lp_commitments), so an agent must infer differentiation, keeping it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lists the filterable dimensions and sort keys, which implies when the tool is useful, and adds semantic guardrails ('a target is never an actual', 'a disclosed holding is never an approval'). However, it never states when to prefer this over get_commitments or the LP-commitment sibling, so usage selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_allocatorsSearch institutional allocators, consultants, managers and fundsARead-onlyIdempotentInspect
The capital-owner graph: public pensions (every Census unit), corporate and Taft-Hartley DB plans (Form 5500), endowments and foundations (IRS), state pools and investment offices, as compact cards with dfx:al: ids carrying reported assets and basis, funded status, policy targets, commitment counts and adviser counts. entity_type=consultant lists consultants and OCIOs by their own ADV filing with client counts on the tape; entity_type=manager lists managers by the public LPs that disclose a fund of theirs (who backs this manager); entity_type=fund lists funds by public LPs. A bare query with no entity_type runs the alias-aware search (CalPERS resolves). A target is never an actual, a disclosed holding is never an approval, commitment dollars repeat across reports, re-ups are the plan's own words, estimates are labelled and nothing predictive is published. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | Name contains, or an alias (CalPERS, a Census spelling). | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| entity_type | No | ||
| with_policy | No | ||
| min_assets_usd | No | ||
| allocator_class | No | ||
| with_consultant | No | ||
| consultant_class | No | ||
| with_commitments | No | ||
| include_components | No | Also list units that are components of a larger system (a division, a plan an office invests for). | |
| min_private_markets_target_pct | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the read-only annotations by disclosing access tiers, exactly what is withheld without a paid plan (locked counts, contact values, decision-maker names), and the entitlement/locked response fields. It also states important data caveats: targets are not actuals, disclosed holdings are not approvals, commitment dollars repeat, re-ups are the plan's own words, and estimates are labelled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loads what the graph contains, but it runs long and packs access restrictions, caveats, and a marketing URL into one paragraph. Much of the content is useful, yet the structure could be tighter and more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters, no output schema, and only partial schema coverage, the description provides strong context on data semantics, entity_type behavior, and access limitations. It still leaves several filter parameters unexplained, but the behavioral and entitlement coverage is unusually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low at 29%, so the description must compensate for many of the 14 parameters. It adds meaning for entity_type and query (alias-aware, CalPERS resolves), but most filters such as sort, state, min_assets_usd, with_policy, allocator_class, consultant_class, with_commitments, include_components, and min_private_markets_target_pct are not explained beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as the capital-owner graph and enumerates the allocator types it covers, along with how entity_type changes the target set. It distinguishes itself from sibling search tools by scope, though it does not explicitly use the verb 'search' in the description text itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how to use entity_type variants and what a bare query does, which implies when each mode is useful. However, it never names alternatives or states when not to use this tool versus siblings like get_allocator or search_entities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bank_cre_exposureFDIC-insured banks by commercial real estate concentrationARead-onlyIdempotentInspect
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. THE 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 | Required | Description | Default |
|---|---|---|---|
| name | No | Substring of the institution name, case-insensitive, e.g. 'riverhills'. | |
| sort | No | Descending on the named measure. Default cre_to_equity. | |
| limit | No | Rows to return, 1 to 50. `matched` states the true total regardless. | |
| state | No | Two-letter US state, district or territory code of the bank's home office. Unknown codes are refused, not searched. | |
| above_guidance | No | true: only banks whose total CRE exceeds 300% of equity (the guidance line, on a proxy denominator). false: only banks under it. | |
| min_assets_usd | No | Floor on total assets in dollars, e.g. 1000000000 for $1B. | |
| min_noncurrent_pct | No | Floor on the CRE noncurrent ratio in percent. | |
| max_cre_to_equity_pct | No | Ceiling on the same ratio. | |
| min_cre_to_equity_pct | No | Floor on total CRE as a percent of equity, e.g. 300. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, yet the description still adds substantial behavioral context beyond them: the guidance is 'QUOTED, NOT APPLIED' and uses an equity-based proxy rather than total risk-based capital, every row states its quarter, and 'no person appears in this data'. This discloses data provenance and proxy limitations the agent would otherwise misread.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose and dataset scope lead, then a separate paragraph for the critical proxy caveat. The first paragraph is a long run-on, but nearly every clause carries distinct information and the caveat paragraph earns its place given the ambiguity it resolves.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 optional parameters and no output schema, the description carries the full burden and meets it: it describes the returned fields, the 4,313 vs 4,242 coverage split, percentile rank availability, the proxy caveat, and that 'matched' reports the true total. An agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters. The description's filter list (state, name, CRE-to-equity, guidance screen, minimum assets/noncurrent) and its mention of the default sort largely restate what the schema provides, adding little beyond it. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (4,313 FDIC-insured banks by commercial real estate book) with the exact data vintage (June 2026 call report). It enumerates the measures returned (total CRE, construction, multifamily, noncurrent, charge-off, ROA, guidance screens) so an agent knows precisely what this resource covers and how it differs from the finance-domain siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing the available filters (state, name, CRE-to-equity range, guidance screen, minimum assets, minimum noncurrent) and sorting options, and flags that it is 'Free'. However, it never states when to prefer this over an alternative or any prerequisite/context for choosing it, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bdc_language_changeWhich BDCs changed what they say about a topic in their risk factors or MD&AARead-onlyIdempotentInspect
For a term (software, tariffs, AI, healthcare, energy, consumer, office, crypto or any word), every active BDC whose latest 10-K or 10-Q names it, compared sentence by sentence with the filing before: whether the language changed, how many sentences were added, removed or rewritten, and those sentences (clipped), with both filings cited. The answer to 'which BDCs added language about software risk this quarter'. A refreshed number is reported as numbers_updated, not as a change. For the passages themselves use search_documents. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | The topic, e.g. software, tariffs, ai. | |
| limit | No | ||
| section | No | Default both. | |
| filed_from | No | ISO date; only current filings filed on or after. | |
| changed_only | No | Only BDCs whose language changed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), but the description adds substantial non-obvious behavior: entitlement-gated returns (first 5 rows full, rest only as locked.count/locked.by_type), never-returned contact values and decision-maker names, and the `entitlement`/`locked` output fields. It also clarifies that a refreshed number surfaces as numbers_updated rather than as a change — a semantic caveat the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and return-shape content is front-loaded and dense with useful specifics, but the ACCESS paragraph plus the promotional plan link ('DFX Intelligence, 7 days free at...') is marketing filler that dilutes an otherwise efficient description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing returns: comparison verdict, added/removed/rewritten counts, clipped sentences, both filings cited, plus entitlement/locked metadata. Combined with the explicit hand-off to search_documents, an agent has enough to call and interpret it, though the exact response envelope is still only loosely specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents most parameters. The description adds some meaning for `term` ('software, tariffs, AI... or any word') and implies recency via 'latest 10-K or 10-Q', but does not explain section, filed_from, or changed_only behavior beyond what the schema states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: every active BDC whose latest 10-K/10-Q names a term, compared sentence-by-sentence against the prior filing, with added/removed/rewritten sentence counts. It also explicitly differentiates from the sibling search_documents ('For the passages themselves use search_documents'), so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use framing ('The answer to "which BDCs added language about software risk this quarter"') and routes passage retrieval to search_documents. It lacks explicit when-NOT-to-use conditions beyond that single alternative, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_borrower_sponsorsThe sponsor behind a private credit borrower, or a sponsor's borrowers with their marks, PIK and non-accrualARead-onlyIdempotentInspect
The borrower to sponsor chain: a BDC borrower, linked through a graded identity bridge to its company record, then to the private equity firms that invested (fund, entry and exit dates, whether the source states the investment is current, and the page that says so), beside the borrower's latest BDC picture: principal held across BDCs (a lower bound), fair value over cost, BDC count, credit status (PERFORMING, NON_ACCRUAL from the BDCs' own footnotes), and the dates PIK was first and last added or increased and non-accrual last placed. Give a borrower for its sponsors, a sponsor for its borrowers, or filters alone: pik_since='2026-01-01' with group='sponsor' answers 'which sponsors own portfolio companies where PIK was introduced in 2026'; on_non_accrual_now answers 'which sponsors have borrowers on non-accrual'. group='sponsor' ranks firms by matching borrowers over the whole chain. Coverage: about 2,150 borrowers and 880 firms carry a graded chain; a borrower without one is not 'unsponsored'. Returns dfx:pc: borrower ids and dfx:pe: sponsor ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | borrower | |
| limit | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| sponsor | No | Sponsor name, or a dfx:pe: / dfx:isi: id (matched through the identity canon). | |
| borrower | No | Borrower name, dfx:pc:<uuid> borrower id, or the linked company's dfx:pe: / dfx:isi: id. | |
| pik_since | No | ISO date: a PIK_ADDED or PIK_INCREASED event effective on or after it. | |
| current_only | No | Only investments the source states are current (or dated within five years). | |
| pik_added_only | No | With pik_since: count only PIK newly added (introduced), not increased. | |
| non_accrual_since | No | ISO date: a BDC placed the borrower on non-accrual on or after it. | |
| on_non_accrual_now | No | The borrower's latest BDC status is non-accrual. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and non-open-world behavior, but the description adds substantial context beyond that: DFX plan gating, first-5-row returns with locked counts, contact fields never returned, coverage limitations (~2,150 borrowers / 880 firms), and the entitlement/locked response fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and long, but it is front-loaded with the core chain and return values, and the access and coverage details are relevant for a 10-parameter tool. A wall of text costs a point, though there is little obvious filler beyond the access pitch.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 10-parameter schema, 80% schema coverage, no output schema, and annotations covering safety, the description fills the important gaps: return id formats, access tiers, withheld data, coverage caveats, and filter semantics. An agent has enough to call the tool correctly and interpret what it will and will not receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (80%), so the baseline is 3, but the description adds real meaning for group='sponsor' ranking behavior and demonstrates useful filter combinations like pik_since with group='sponsor'. It still does not explain every parameter beyond schema level, so it does not reach 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and relationship: the borrower-to-sponsor chain, with BDC portfolio metrics and identity bridging. It is clear enough to distinguish from generic company or credit searches, but it does not explicitly name sibling tools or state when to prefer this over e.g. search_private_credit or get_sponsor_portfolio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage examples: pass a borrower for sponsors, a sponsor for borrowers, or filters alone, and explains how pik_since with group='sponsor' and on_non_accrual_now answer specific questions. However, it never names alternative tools or explicitly states when not to use this search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_capital_changesWhat changed on the allocator, private credit and real estate fund graphsARead-onlyIdempotentInspect
The change tape for the three capital graphs by FIRST SIGHT: the day DFX first saw each row, which is the only order a poller can trust. Commitments and re-ups disclosed by public plans, allocation targets moved, consultants changed, new borrowers and lenders on the credit tape, facilities marked down, maturities moving, sponsor and lender pairs forming, vehicles reported and dropped. Rows that existed when the arm was created are excluded, so history never reads as this week. Poll with the next_since the answer returns. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| graph | Yes | al (allocators), pc (private credit), ref (real estate funds). | |
| limit | No | ||
| since | Yes | ISO date or timestamp; rows first seen after it. | |
| dfx_id | No | An id on that graph; rows where it is the subject or the related entity. | |
| event_type | No | ||
| include_seeded | No | Also rows seeded when the arm was created (the history, not this week's change). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description goes far beyond them: it discloses that seeded rows are excluded so history never reads as this week, describes entitlement truncation (first 5 rows plus locked.count and locked.by_type), and states that contact values and decision-maker names are never returned. This is rich behavioral context an agent could not get from the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the middle is an over-long run-on enumeration of change types (commitments, allocation targets, consultants, borrowers/lenders, markdowns, maturities, etc.) that could be trimmed. The closing promotional line ('7 days free at https://dfxintel.com/...') is not functional content and dilutes an otherwise informative description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so reasonably: it explains that every answer reports what it withheld via entitlement and locked, and that list responses degrade to counts by type. A few schema gaps (event_type, limit) remain, but the critical behavioral contract is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so graph and since are already documented. The description adds meaning for include_seeded (explaining 'seeded when the arm was created' as history vs this week) and references next_since for polling, but leaves limit and event_type undescribed. This is marginal value over the schema, consistent with the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (the change tape across the allocator, private credit and real estate fund graphs) and a distinctive ordering principle (FIRST SIGHT, the day DFX first saw each row). It enumerates the kinds of changes captured, so an agent can tell what it returns. However, it never names or contrasts with close siblings like changes_since or search_private_credit_changes, so differentiation must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete usage instruction — 'Poll with the next_since the answer returns' — and explains the access-tier behavior. But it offers no explicit when-to-use/when-not guidance relative to the many sibling change/search tools, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cmbs_loansCMBS loans with status, special servicing, DSCR, maturity and sponsorARead-onlyIdempotentInspect
Loans on the ACTIVE CMBS tape (SEC ABS-EE, each loan's latest monthly reading, read within 100 days of the newest period) with the servicer's own fields: payment status (current, 30/60/90 days, non performing matured balloon), special servicer and transfer date, whether it is in special servicing now, workout strategy, modification, current DSCR with its basis, occupancy, appraisal and LTV, balance, maturity, originator, and the sponsor as the prospectus annex discloses it (sponsor column, else carve-out guarantor, labelled). Each row carries the core property id where the building chain resolved it, for get_property_record. Filter by state, property type, maturity window, distress or sponsor text, or ask for ONE building with property (its name or street address, e.g. 'Park West Village', '1384 Broadway') or property_dfx_id (the id resolve_address or get_property_record gave). The answer to 'Texas multifamily loans maturing in 18 months that are in special servicing, and who sponsors them'. Conduit CMBS only: bank balance sheet, agency and debt fund loans are not on this tape. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| state | No | Two-letter state of the property. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| sponsor | No | Sponsor or guarantor name contains, as the annex prints it. | |
| distress | No | special_servicing: transferred and not returned; not_current: any payment status other than current; any: either. | |
| dscr_max | No | Only loans whose latest DSCR is strictly below this (the current filing, else the last DSCR reported within 12 months; each row prints the period it was reported for). 'DSCR under 1.2' is dscr_max 1.2. | |
| property | No | One building by its name or street address, as a buyer writes it: 'Renaissance Seattle Hotel', '225 & 233 Park Avenue South', 'One West 34th Street'. Matched on the tape's property name and address after normalising both (case, punctuation, & as and, Street as St); a single house number also finds a range address. Use this, not sponsor, for a building name. | |
| loan_keys | No | Specific loan keys (deal CIK:asset number) from a previous answer. | |
| maturity_to | No | ISO date. | |
| maturity_from | No | ISO date. | |
| property_type | No | ||
| property_dfx_id | No | A core property id (from resolve_address or get_property_record): the loans on that building, including its notes in other trusts. | |
| maturity_within_days | No | Loans maturing from today to today plus this many days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial behavior: the entitlement model (first 5 rows plus locked.count/locked.by_type without a paid plan), what is never returned (contact values, decision-maker names), and the fact that every answer reports withheld data in `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded with the returned fields, but it is delivered as one long run-on paragraph where the access/entitlement rules and the conduit-scope caveat are buried mid-block. Splitting into returned-fields / filtering / access sections would improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with no output schema, the description covers what is returned, the filtering surface, the tape boundary, and the access/entitlement behavior. An agent has everything needed to call it correctly and interpret a partial response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (85%), so the baseline is 3, but the description adds real semantics beyond the schema: dscr_max means strictly below the latest filing (else last DSCR within 12 months), property matching normalizes case/punctuation/&/Street, and property vs sponsor is disambiguated for building names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (loans on the ACTIVE CMBS tape) and enumerates the exact fields returned (payment status, special servicing, DSCR, occupancy, LTV, sponsor). It explicitly distinguishes itself from siblings by scope: 'Conduit CMBS only: bank balance sheet, agency and debt fund loans are not on this tape,' separating it from search_re_fund_loans and search_bank_cre_exposure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use conditions and a worked example ('Texas multifamily loans maturing in 18 months that are in special servicing, and who sponsors them'). It routes between filters explicitly — 'Use this, not sponsor, for a building name' — and names the upstream tools (resolve_address, get_property_record) that produce property_dfx_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cmbs_resolutionsCMBS loans that went to foreclosure, REO or deed in lieu, and how they endedARead-onlyIdempotentInspect
Every conduit CMBS loan whose servicer reported a foreclosure, REO or deed in lieu workout (SEC ABS-EE), with how it ended: resolved or still pending, the SEC liquidation code decoded (disposition/liquidation, discounted payoff, payoff, repurchase), the liquidation date, the balance before resolution, the last reported realized loss and loss severity, the special servicer, and the trust filing that reported the resolution. Plus a summary by resolution and the total loss reported. The answer to 'which CMBS loans went to foreclosure and how were they resolved'. A zero realized loss is stored as absent, so 'not reported' is never 'no loss'. For live loans and their current status use search_cmbs_loans. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ISO date; resolved (or entered distress, when pending) on or after. | |
| state | No | Two-letter state of the property. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| status | No | resolved: a liquidation code after the distress entry; pending: still in workout. | |
| resolution | No | Resolution text contains, e.g. 'liquidation', 'discounted payoff', 'payoff'. | |
| min_loss_usd | No | Only loans with a reported realized loss of at least this. | |
| property_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the read-only/idempotent safety profile, and the description goes well beyond that: it discloses the entitlement model (first 5 rows in full, locked.count/locked.by_type, contact values and decision-maker names withheld), the `entitlement`/`locked` response fields, and the critical semantic that a zero realized loss is stored as absent so 'not reported' is never 'no loss'. That is exactly the kind of non-obvious behavior an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and scope, and the returned-field list and access caveats are all load-bearing. The closing pricing/CTA sentence ('Full access: DFX Intelligence, 7 days free at ...') is promotional rather than operational, which slightly dilutes an otherwise dense, well-ordered description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return contract, and it does: it enumerates the per-loan fields, mentions the aggregate summary by resolution and total reported loss, notes pagination via next_cursor, and documents the degraded-entitlement response shape. Nothing an agent needs to call or interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the description adds meaning the schema lacks: it decodes the liquidation codes that the `resolution` filter matches ('disposition/liquidation, discounted payoff, payoff, repurchase') and clarifies that loss/severity figures are 'last reported realized losses'. It adds less for limit/cursor/state, but those are self-evident or already documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('every conduit CMBS loan whose servicer reported a foreclosure, REO or deed in lieu workout') with the source (SEC ABS-EE) and enumerates the returned attributes. It explicitly disambiguates from the sibling search_cmbs_loans, so an agent can pick correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative explicitly ('For live loans and their current status use search_cmbs_loans') and gives the selecting condition. The description also frames the tool as the answer to a specific question ('which CMBS loans went to foreclosure and how were they resolved'), which is a clear use trigger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_credit_maturitiesThe maturity wall: facilities maturing inside a windowARead-onlyIdempotentInspect
Debt facilities still on a BDC schedule whose tagged or written maturity falls inside the window (default the next 24 months from today), ordered by date: borrower, sponsor with basis, lien, principal held (a lower bound), mark on cost, the BDCs holding it. Filter by sponsor, lien and minimum principal. A BDC that tags no maturity contributes nothing here. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | ISO date; default today. | |
| lien | No | ||
| limit | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| months | No | ||
| sponsor_dfx_id | No | A private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities). | |
| min_principal_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the entitlement model: without a paid plan a list returns its first 5 rows plus locked.count and locked.by_type, records name a subject plus 3 related names per section, and contact values/decision-maker names are withheld as types and counts only. It also explains that every answer reports what it withheld via `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core content is front-loaded and the access paragraph earns its place by explaining withheld data, but the opening is a single overloaded run-on that embeds the entire return-field list, and the closing sales line with the plans URL is promotional filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of listing the returned fields and the entitlement/locked mechanics, which is what an agent needs for a read-only search. The remaining gap is pagination and `limit` semantics, but the tool is otherwise complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 43%, so the schema alone does not carry the parameters. The description maps the window semantics to `from`/`months` (default 24 months from today) and names the sponsor, lien and minimum-principal filters, but says nothing about `limit` or `cursor`, leaving pagination behavior undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('debt facilities still on a BDC schedule whose ... maturity falls inside the window'), the default scope (next 24 months from today), and the ordered return fields. It is clear on its own, but it never differentiates itself from the close sibling 'debt_maturity_schedule', leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the window defaults, the filter axes (sponsor, lien, minimum principal), and the note that 'a BDC that tags no maturity contributes nothing here' sketch the context. There is no explicit when-to-use statement and no named alternative to distinguish it from 'debt_maturity_schedule'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_credit_stressNon-accrual and PIK by BDC, by quarter or by borrowerARead-onlyIdempotentInspect
Credit stress on the BDC tape, counted over every event: NON_ACCRUAL_PLACED and RETURNED_TO_ACCRUAL (from each BDC's schedule of investments footnotes), PIK_ADDED and PIK_INCREASED (from the PIK rate each BDC tags). group='bdc' compares the latest quarter end with the one before for every BDC (events, change, borrowers, and each type), sort='change' for 'which BDCs increased non-accruals last quarter'. group='period' is the quarterly series ('is non-accrual rising'). group='borrower' lists the borrowers behind the events with the BDCs and the sponsor where the chain has one. Each event is one BDC and one borrower, per the BDC's own filing. For the individual dated events use search_private_credit_changes(event_type=...). ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | group=bdc: events this period (default) or change against the prior period. | period |
| group | No | bdc | |
| limit | No | ||
| since | No | ISO date; widens bdc and borrower groups to every period from it. | |
| period | No | ISO quarter end to read as 'this quarter'; default the newest on the tape. | |
| bdc_dfx_id | No | dfx:pc:<uuid> of one BDC. | |
| event_types | No | Default all four. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, it discloses nontrivial behavior: unentitled lists return only the first 5 rows plus counts by type (locked.count, locked.by_type) and never rows, contact values and decision-maker names are never returned, and every answer reports what it withheld in entitlement/locked. This is exactly the extra context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and group semantics are front-loaded, and each mode is defined in tight clauses. The entitlement paragraph is long and somewhat dense, but every sentence carries non-redundant information, so it stays proportionate to a 7-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing what is returned (events, change, borrowers, per-type counts) and how entitlement truncates results. The main residual gap is the limit/max-50 pagination behavior, which is left to the schema for a result-set tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, and the description adds real meaning for group and sort by explaining what each mode computes and returns (comparison vs series vs borrower list). It also confirms event_types defaults to all four. It does not clarify limit, since, or period behavior beyond the schema, so it is strong but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb+resource: credit stress on the BDC tape, enumerated over four named event types (NON_ACCRUAL_PLACED, RETURNED_TO_ACCRUAL, PIK_ADDED, PIK_INCREASED) and their sources. It also explicitly distinguishes itself from the sibling search_private_credit_changes for individual dated events, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditional usage: group='bdc' with sort='change' answers 'which BDCs increased non-accruals last quarter'; group='period' answers 'is non-accrual rising'; group='borrower' lists the borrowers behind the events. It also names the alternative (search_private_credit_changes) for a different need, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentsThe passage behind a fact, with its documentARead-onlyIdempotentInspect
Full-text search over DFX's document index: verbatim passages from the documents the graph already points at (SEC filings and BDC schedules of investments, public pension board minutes, ACFRs and investment reports, 990s, Form D, firm press and team pages). Each result is one passage with its document (URL, accession, CIK, type, rights class, publication and effective dates), the graph row it was read into, the dfx ids it names, and any claim it states (a commitment amount, an allocation target). Give dfx_id to see only passages naming that entity. Use for 'show me the filing / minutes / quote behind X'. Every row carries a citation; an answer that could not cite a row is refused, never returned. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Words to find, web-search syntax: quoted phrases, OR, -exclude. | |
| dfx_id | No | Only passages that name this entity (dfx:<graph>:<id>). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety (readOnly/idempotent/non-open-world); the description adds substantial behavioral context they cannot: the citation requirement and refusal behavior, the exact entitlement gating (5 rows in full plus locked counts, contact values never returned), and the entitlement/locked fields reporting withholdings. This is unusually rich disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and result shape are front-loaded, but the ACCESS block is dense and the closing promotional line ('Full access: DFX Intelligence, 7 days free at https://...') does not help an agent select or invoke the tool. The entitlement detail is useful; the ad copy is waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so concretely (passage + document metadata, graph row, dfx ids, stated claims). Access limits and withholding behavior are covered, so an agent knows what it will and won't get back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the schema already documents query syntax and the dfx_id format. The description restates the dfx_id filtering behavior but adds no new syntax, defaults, or limits (limit stays undocumented in both). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Full-text search over DFX's document index') and immediately scopes it as verbatim passages drawn from the document corpus the graph points at. This cleanly separates it from structured-entity siblings like search_entities or search_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger phrase — 'Use for show me the filing / minutes / quote behind X' — and explains the dfx_id narrowing case. It does not name a competing sibling or state when not to use it, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_entitiesSearch every DFX domain at onceARead-onlyIdempotentInspect
One search across family offices, independent sponsors and their capital providers, private companies, venture firms, private equity firms and funds, 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. Breadth across every domain in one query, with fewer per-domain filters than the domain searches. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| sort | No | ||
| limit | No | ||
| query | No | A name (contains). | |
| stage | No | ||
| state | No | Two-letter US state code. | |
| cursor | No | ||
| domain | No | Comma-separated: real_estate, family_office, independent_sponsor, venture_capital, private_equity, ria, allocators, private_credit, real_estate_funds. Default: all. | |
| sector | No | ||
| vertical | No | ||
| active_only | No | ||
| asset_class | No | ||
| entity_type | No | family_office, sponsor, capital_provider, company, vc_firm, pe_firm, platform, fund, person, property, organization, ria_firm, advisor, private_fund, allocator, consultant, manager, credit_provider, bdc, borrower, vehicle. | |
| min_aum_usd | No | ||
| has_real_estate | No | ||
| min_opportunity | No | ||
| invests_directly | No | ||
| recent_activity_days | No | ||
| has_sponsor_relationships | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the standard read-only/idempotent profile, and the description goes well beyond them: it discloses exactly what is withheld without a paid plan (first 5 rows in full, remainder only as locked.count/locked.by_type, never the rows), that contact values and decision-maker names are never returned, and that every response announces its restrictions in `entitlement` and `locked`. That is precisely the behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the what/where before the access caveats, and the entitlement paragraph is dense but earns its place for a data-licensing tool. The closing promotional URL sentence is slightly out of register, but overall the structure is sound and waste is minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers the return shape well ('Compact cards with stable dfx ids and a per-domain coverage note') plus the entitlement/locked fields, so an agent knows what comes back. The main residual gap is the parameter surface, which is more of a parameter-semantics issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 21% across 19 parameters, so the description carries the burden. It names entity_type, domain, state, sector and implies '...' more, but the bulk of filters (city, stage, vertical, active_only, asset_class, min_aum_usd, min_opportunity, invests_directly, recent_activity_days, has_sponsor_relationships, sort, cursor) remain undocumented in both places, leaving an agent guessing at boolean/range semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('One search across family offices, independent sponsors... private companies, venture firms, PE firms and funds, and real estate organisations') and explicitly positions itself against the sibling domain searches ('fewer per-domain filters than the domain searches'). An agent can immediately tell this is the cross-domain meta-search distinct from search_vc_firms, search_pe_firms, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use for breadth across every domain in one query, at the cost of fewer per-domain filters — which routes the agent toward the domain-specific siblings when deep filtering is needed. It stops short of naming specific alternatives or stating explicit when-not conditions, so it is a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsThe change tape across domainsARead-onlyIdempotentInspect
Dated events across family offices, sponsors, venture, private equity 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. Ordered and windowed by when events occurred. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ISO date; events that occurred on or after. | |
| state | No | Two-letter US state code. | |
| dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| domain | No | ||
| event_type | No | ||
| within_days | No | ||
| signal_family | No | ||
| exclude_routine | No | ||
| min_significance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations by disclosing the entitlement model in detail: free-tier lists return only 5 full rows plus locked counts, records expose subject plus 3 related names, contact values and decision-maker names are withheld as types/counts, and every response reports withholding via `entitlement` and `locked`. Ordering/windowing semantics are also stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and event taxonomy, then the filters, then the access model, which is a sensible order. It is dense and the trailing pricing CTA/URL is promotional, but the access paragraph carries genuine operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, no-output-schema, entitlement-gated search tool, the description covers the two riskiest unknowns: what gets withheld and how results are ordered/windowed. Missing event_type/domain value hints and per-parameter semantics for signal_family and the integer thresholds keeps it short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 30% schema coverage across 10 parameters, the description partially compensates by naming domain, dfx_id, event_type, state, significance and window as filters, and by explaining the default exclude_routine behavior. It leaves signal_family, limit, within_days (only as 'window'), and min_significance thresholds unexplained, and does not clarify valid event_type or domain values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (dated change events) and enumerates the concrete event types it covers across named domains, so an agent can tell it is a broad cross-domain activity tape rather than a single-entity lookup. It does not, however, distinguish itself from near-siblings such as changes_since, search_signals, or search_capital_changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers implied usage guidance: filter by domain/subject/event_type/state/significance/window, and a default exclusion of routine 13F and fund-reporting noise 'unless asked for.' But it never states when to prefer this tool over the many overlapping search_*_changes and signals tools, and gives no prerequisites for the dfx_id subject form.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_family_office_investmentsObserved family office investmentsARead-onlyIdempotentInspect
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'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ISO date. | |
| state | No | Two-letter US state code. | |
| sector | No | ||
| asset_class | No | ||
| office_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| investment_kind | No | portfolio_listing is a company named on the office's own portfolio page without a dated transaction; round_participation, direct_investment, recapitalization and credit come from dated press releases and the office's own news. | |
| include_candidates | No | Without an office id the tape covers family-capital offices only (confirmed and probable SFOs, confirmed MFOs, family investment companies and vehicles), the same rule as dfxintel.com. true widens to every classed office, candidates included; each row says its investor_class. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnly, idempotent, non-destructive), yet the description adds substantial behavioral context the annotations cannot: the paywall behavior (5 full rows plus locked.count/locked.by_type), per-record truncation to first 3 related names, permanent omission of contact values and decision-maker names, and the `entitlement`/`locked` report. This is exactly the kind of disclosure that changes how an agent frames results to a user.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and returned fields, then filters, then access caveats — a logical order with almost no filler. The closing plan-promotion sentence plus URL is the only slightly promotional element, but it is attached to a genuine entitlement caveat rather than being pure marketing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains both what a list returns (rows plus locked counts) and what a record returns, including the withholding markers in `entitlement` and `locked`. For an 8-parameter, zero-required search tool this covers everything an agent needs to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description enumerates the filter set (office, sector, asset class, state, kind, since-date) which maps to six of the eight parameters, but it adds no syntax or value guidance beyond the schema, and `limit` and `include_candidates` are absent from the description. With 63% schema description coverage, the schema carries most of the meaning, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource: 'Dated investments family offices have been observed making,' then enumerates the exact fields returned (target, sector, asset class, structure, control/minority, board seats, exits, source quote). The 'family offices' subject cleanly separates it from sibling searches like search_vc_investments, search_pe_transactions and search_family_offices, so an agent can route to it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('The evidence behind "this office backs X"') and lists the filter dimensions, which tells the agent when the tool applies. It stops short of naming alternatives or stating when NOT to use it (e.g. to find offices themselves use search_family_offices), so it is clear but not fully disambiguating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_family_officesSearch US family officesARead-onlyIdempotentInspect
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 investing activity (private or public 13F/13D), and counts of people, sponsor and real estate relationships. A list filter sorted by one column: for a ranked answer to a buyer's criteria use rank_family_offices. Filter by states or region, canonical industries, direct investing, manager allocation, recent activity, AUM, an event type since a date, or a named co-investor. Returns dfx:fo: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| sort | No | ||
| class | No | The classifier's verdict. A CANDIDATE is a name, never a class. NOT_FAMILY_OFFICE rows are excluded unless asked for. | |
| limit | No | ||
| query | No | Name contains. | |
| state | No | Two-letter US state code. | |
| cursor | No | ||
| region | No | ||
| sector | No | A sector word or canonical code (industrial, fintech, healthcare, real estate); matched on the canonical industries array. | |
| states | No | Two-letter codes, any of. | |
| industries | No | Canonical industry codes, any of. | |
| asset_class | No | ||
| event_since | No | ISO date for has_event_type; default two years back. | |
| min_aum_usd | No | ||
| has_event_type | No | Offices with one of these events since event_since. | |
| has_real_estate | No | Offices with a real estate relationship on the rollup. Answers NOT_COVERED while none carries one; asset_class='real_estate' reads the stated asset classes instead. | |
| co_invested_with | No | Firm names the office has co-invested with. | |
| invests_directly | No | ||
| counterparty_kind | No | ||
| recent_activity_days | No | ||
| allocates_to_managers | No | Offices with a manager or fund commitment on record, or a stated allocation. | |
| has_sponsor_relationships | No | Offices with a CO_INVESTED_WITH or capital-provider edge to the sponsor graph. Answers NOT_COVERED with the count while no office carries one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only/idempotent/non-destructive; the description goes well beyond them by disclosing the access model: unpaid lists return the first 5 full rows plus locked.count/locked.by_type, records expose only the subject and first 3 related names per section, and contact values and decision-maker names are masked to types and counts. It also tells the agent that every answer self-reports what it withheld via `entitlement` and `locked`, which is exactly the behavioral context the schema and annotations cannot supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the return shape before filters, alternatives and access rules, so the most important information lands first, and sentences are dense rather than padded. The closing plan/upsell sentence ('7 days free at https://...') is arguably promotional rather than definitional, which keeps it from being a clean 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 22 params, no output schema and only 55% schema description coverage, the description carries the burden well: it describes the returned card contents, the ID format, the filtering vocabulary, the sibling alternative, and the full entitlement/truncation model. An agent can predict both the request contract and the response shape without additional fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 55% schema coverage across 22 params, the description compensates by mapping filter phrases to parameters: 'states or region' (state/states/region), 'canonical industries' (sector/industries), 'direct investing' (invests_directly), 'manager allocation' (allocates_to_managers), 'recent activity' (recent_activity_days), 'AUM' (min_aum_usd), 'an event type since a date' (has_event_type/event_since) and 'a named co-investor' (co_invested_with). It adds the sorted-by-one-column semantics for `sort` too, but leaves query, city, counterparty_kind, limit and cursor untouched.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Family offices as compact cards') and enumerates the returned fields (class with confidence, direct investing, sectors, check size, activity, relationship counts) plus the ID namespace (dfx:fo:). It also names the sibling it is NOT ('for a ranked answer to a buyer's criteria use rank_family_offices'), so an agent can separate it from rank_family_offices and search_family_office_investments without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the ranked-answer use case to rank_family_offices, and enumerates the filter axes that this tool is for (states/region, industries, direct investing, manager allocation, activity, AUM, event-since, co-investor). Context is clear, but it never states when to prefer get_family_office for a single record or search_family_office_investments for deal-level data, so a full when/when-not matrix is not present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_forward_opportunitiesWhat is likely to happen next, with how well each pattern was measuredARead-onlyIdempotentInspect
Forward opportunities across DFX: an entity, the event a measured pattern points to (a borrower reaching non-accrual, a pension plan re-upping with a manager, an RIA entering succession, a nursing home closing), the horizon, the pattern's lift over its base rate with the lower bound of its interval and a band (BASELINE, ELEVATED, HIGHLY_ELEVATED, EXCEPTIONAL, cut on the lower bound), an economic range with its unit, dated why-now facts, the evidence labelled by kind, confidence by dimension, and whether a person is identified. Each row says whether it may be read as 'likely to' (a VALIDATED pattern) or only as an emerging indicator. The likelihood belongs to the pattern, never to the entity: do not restate a lift as the chance this entity acts. Filter by vertical, predicted event, persona, horizon, economic size, band, contact coverage or entity. Rows come ranked by the model's entity rank (rank.position, rank.family_percentile). Use FIRST for any question about what is likely, next, near-term, about to happen, or who shows indicators. Say which status each row has: VALIDATED may be described as a measured pattern; TESTING and PROSPECTIVE_ONLY are emerging indicators and must not be called predictions. An empty answer means no governed forward row matches, not that nothing is developing: then say plainly that DFX has no validated forward signal for it (get_forward_signal_ledger shows what was tested and failed), and never offer completed events (a move that happened, a completed succession) as a forecast. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| contact | No | actionable: a decision maker with a professional email, LinkedIn or direct line. any_person: a named decision maker at least. Flags only; no contact value is returned. | |
| persona | No | The reader the row was framed for (e.g. lend, acquire, serve, distribute, raise); matches the row's persona or any of its applicable_personas. | |
| evidence | No | validated: only patterns that may be read as 'likely to'. any: also emerging indicators, labelled. | any |
| min_band | No | ||
| vertical | No | ||
| within_days | No | Horizon ends on or before today plus this many days. | |
| max_economic | No | economic_low at most this, in the row's unit. | |
| min_economic | No | economic_high (or economic_low where no high) at least this, in the row's unit. | |
| entity_dfx_id | No | A DFX id (dfx:<graph>:<uuid>): forward rows about this entity. | |
| predicted_event | No | The event, as the ledger names it (e.g. NON_ACCRUAL, ADVISOR_MOVE); contains match. | |
| opportunity_type | No | Contains match on the opportunity type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only the read-only/idempotent safety profile, and the description adds substantial context beyond them: entitlement gating (first 5 rows plus locked.count/by_type, no contact values or decision-maker names), status semantics (VALIDATED vs TESTING/PROSPECTIVE_ONLY), the cardinal rule that likelihood belongs to the pattern not the entity, and default ranking by rank.position.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the body is a dense run-on covering row anatomy, status rules, empty-result handling, entitlement behavior and a plan URL, with repetition around what is withheld. It is informative but over-packed rather than tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, no-output-schema tool, the description covers the shape of returned rows, ranking, status labeling, empty-result meaning and entitlement withholding. It is nearly complete, though it leaves some filter parameters (limit, cursor, opportunity_type) to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 77%, so the schema carries most parameters, but the description adds real meaning: min_band is 'cut on the lower bound', economic filters are in the row's unit, and the filter surface (vertical, predicted event, persona, horizon, economic size, band, contact coverage, entity) is summarized. It does not explain limit/cursor or the exact enum semantics of min_band.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening ('Forward opportunities across DFX') states a clear resource, and the row-by-row enumeration makes the return semantics explicit. It distinguishes itself from siblings like search_opportunities and search_signals indirectly via the 'likely to happen next' framing, but never names them, so the sibling differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit routing rule ('Use FIRST for any question about what is likely, next, near-term, about to happen, or who shows indicators'), names the alternative for the negative case (get_forward_signal_ledger shows what was tested and failed), and states a hard exclusion (never offer completed events as a forecast).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_independent_sponsorsSearch independent sponsorsARead-onlyIdempotentInspect
Verified independent sponsor firms (deal-by-deal acquirers of lower middle market companies) as compact cards: verification status, classification, mandate summary, principals, vehicle count and latest vehicle, and how many companies resemble the sponsor's observed deals. Only firms whose identity evidence names them (eligibility VERIFIED_SPONSOR_FIRM) are returned unless include_unverified is true, which returns the unverified filing groups and candidates as a labelled research list. With sector, the answer is OBSERVED behaviour: verified sponsors with observed deals in that vertical first. Returns dfx:isi: ids. Capital providers and target companies are not in these results. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| kind | No | ||
| sort | No | ||
| limit | No | ||
| query | No | ||
| state | No | Two-letter US state code. | |
| sector | No | Free text mapped onto the eight verticals (business_services, industrial_manufacturing, industrial_services, healthcare_services, consumer_services, specialty_distribution, transportation_logistics, tech_enabled_services); text that maps to none is matched against the mandate summary. | |
| min_confidence | No | ||
| include_unverified | No | true returns the research list instead: unverified Form D filing groups and candidates, never paired with companies. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent, closed-world profile, yet the description adds substantial non-schema behavior: the entitlement/locked model (first 5 rows + counts, never the rest), that contact values and decision-maker names are never returned, and that every answer discloses withholding via `entitlement` and `locked`. This is far beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: entity definition first, then eligibility, then sector behavior, then access model. Nearly every sentence carries load, though the closing plan-promotion line is more pitch than agent-relevant signal and the paragraph is long for a single block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 9 optional params, the description does the heavy lifting on returns (compact cards, id format) and the access/withholding model. It is strong on behavioral completeness but light on the remaining query parameters, leaving a modest gap for an agent tuning a search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%), and the description only meaningfully elaborates `sector` (OBSERVED behaviour, vertical mapping) and `include_unverified` (research list semantics). Parameters like kind, sort, min_confidence, limit, city, and query receive no explanatory treatment, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and defines the entity precisely ("Verified independent sponsor firms (deal-by-deal acquirers of lower middle market companies)"). It also clarifies scope boundaries ("Capital providers and target companies are not in these results") and returns an id namespace (dfx:isi:), distinguishing it from get_independent_sponsor and the sponsor-deal siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use conditions: only verified firms are returned unless include_unverified is true, which switches to a labelled research list; with `sector` the result becomes OBSERVED behaviour ordering. It does not explicitly name sibling alternatives (e.g. search_isi_opportunities vs search_sponsor_deals), so routing between near-neighbors is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_isi_opportunitiesIndependent sponsor opportunities for capital providers and deal service firmsARead-onlyIdempotentInspect
ISI opportunities in the shared opportunity contract (rule isi-opp-1): deal_provider_gap (counsel, bank or accountant not on record for a recent sponsor deal), repeat_acquirer, active_capital_provider, and three types HELD by blind QA (deal_no_capital_partner_on_record, new_geography, repeat_capital_pair) which are returned only with status=held and their hold reason. Each row: what happened, why now, why it may matter, who it is relevant to, the firms on record, the roles not on record, people with a contact class (no contact value), the announcement URL. A deal DFX first held more than 90 days after it was announced is history and held. total is the full count. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ISO date; the deal on or after. | |
| state | No | Two-letter state. | |
| status | No | open | |
| persona | No | ||
| opportunity_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the readOnly/idempotent annotations by disclosing the entitlement gating model (first 5 rows plus locked.count and locked.by_type, never full rows), the fields every answer carries (entitlement, locked), the data never returned (contact values, decision-maker names), and the 90-day lifecycle rule for held deals. This is exactly the behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads useful content (types, then record fields, then access rules), but the single dense block mixes many concerns and ends with a promotional line about paid plans and a signup URL that does little for an agent. Information-dense yet somewhat overpacked.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and complex entitlement logic, the description covers row structure, withheld data, and the entitlement/locked reporting model well, which is what an agent needs. It stops short of fully documenting the filter parameters (limit, since, state, persona) that shape results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description must compensate. It adds real meaning for opportunity_type (enumerating all six values) and status (held behavior, 90-day rule), but says nothing about limit, since, state, or persona beyond what the thin schema already states. Partial compensation for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (ISI opportunities in the shared opportunity contract, rule isi-opp-1) and enumerates the six opportunity types, so an agent knows precisely what domain this covers. It differentiates from generic siblings somewhat via the ISI contract naming, but never explicitly contrasts with search_opportunities or search_forward_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides conditional guidance that the three HELD types are returned only with status=held, and explains what happens without a paid plan. However, it never states when to choose this over sibling tools like search_opportunities or find_opportunities_for_capital, leaving tool selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_opportunitiesOpportunities built from signalsARead-onlyIdempotentInspect
Opportunity summaries: the condition (credit deterioration, refinancing window, lender group change, capital raised, advisor movement, servicing distress ...), the subject with its dfx id, the signal families and published signals behind it, first and last observed dates, exposure with basis, the intelligence class (JOINED, INFERRED, DERIVED, DFX_EXCLUSIVE ...), beneficiary classes, and COUNTS of named and reachable beneficiaries. No contacts and no sales state. Filter by condition, class, subject id or minimum rank. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Subject name contains. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| family | No | A signal family the opportunity carries. | |
| min_rank | No | ||
| include_held | No | Also return private credit opportunities the shared contract HOLDS (a family that has not passed blind truth checks), each with its hold reason. Default: left out. | |
| condition_kind | No | ||
| subject_dfx_id | No | A DFX id (dfx:<graph>:<uuid>) or a bare real estate UUID. | |
| intelligence_class | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive). Description adds substantial context beyond annotations: entitlement/locked behavior, withholding of contact values and decision-maker names, first-5-rows limit for unpaid plans, and what is reported in entitlement and locked fields. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the returned fields, then filters, then access rules. Structure is logical. Includes some redundancy ('No contacts and no sales state' vs later contact values never returned) and a promotional URL, but the length is justified by complex access rules.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately describes return fields and access behavior. It covers filters and withholding. Missing detailed parameter semantics for some fields, but annotations and schema cover safety and some params. Complete enough for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56%. Description names filter fields (condition, class, subject id, min rank) and lists condition kinds and intelligence classes, adding meaning to those enums. However, it does not cover limit, cursor, include_held, query, or family beyond schema descriptions. Partial compensation for coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes a specific resource (opportunity summaries) and enumerates the fields returned, including condition types, intelligence class, and beneficiary counts. Distinguishes from contact/sales data by stating 'No contacts and no sales state.' Does not explicitly differentiate from sibling opportunity-search tools (e.g., search_forward_opportunities, search_vc_opportunities), so not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides filter options (condition, class, subject id, min rank) but no when-to-use guidance or alternatives among the many sibling opportunity-search tools. Access rules indicate context but not selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_parcelsFind parcels by place, use, tenure, vintage and assessed valueARead-onlyIdempotentInspect
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 way to ask a QUESTION of the parcel layer without an address in hand. 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.
EVERY ROW CARRIES A dfx_id AND IT IS A HANDLE, NOT A LABEL: the canonical parcel id this server uses for that parcel's events, ownership, debt and recorded sales.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max 50. This sizes the SAMPLE only: every answer states the true match count beside it, so a small limit never hides how big the result really is. | |
| state | No | Two letter state code | |
| land_use | No | Assessor land use code, for example 'R3' for a three family dwelling | |
| tax_exempt | No | true for the institutional universe (churches, universities, authorities), false for the taxable one | |
| built_after | No | Exclusive lower bound on year built | |
| built_before | No | Exclusive upper bound on year built | |
| max_assessed | No | Maximum assessed total, in dollars | |
| min_assessed | No | Minimum assessed total, in dollars | |
| municipality | No | City or town, for example 'Boston' | |
| owner_occupied | No | true for owner-occupied, false for investor or institutionally held. Parcels whose roll does not state it are excluded either way. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the readOnly/idempotent annotations: results always carry the true match count beside the sample, an empty result names the filter that emptied it, dfx_id is a cross-entity handle rather than a display label, and the call is free. These are non-obvious behaviors an agent could not infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then scope then behavioral guarantees, and every sentence carries information. The all-caps dfx_id paragraph is heavy-handed relative to its content, which costs it the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, no-output-schema tool, the description compensates by enumerating the returned fields (assessed value, gross building area, value per square foot, annual tax, year built) and the handle semantics. Nothing critical for correct invocation is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3; the description adds value by explaining that limit sizes only the SAMPLE while true match count is always reported, and by clarifying the dfx_id semantics and the owner-occupancy exclusion rule. It does not, however, add format or ordering detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (assessor parcel layer) and lists the exact filterable dimensions. Explicitly distinguishes itself from the address path (resolve_address) with 'instead of one exact address' and 'without an address in hand'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use rule ('the way to ask a QUESTION of the parcel layer without an address') and a hard precondition ('At least one filter is required'), plus 'Free'. It stops short of naming the sibling resolve_address outright as the alternative, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pe_firmsSearch private equity firmsARead-onlyIdempotentInspect
Private equity firms (management companies and advisers) as compact cards: the classifier's class with its state, confidence and basis; size band with the evidence it was sized on; fund counts, latest vintage and Form ADV gross assets reported for private equity funds since 2024 (reported gross assets, NOT fund size or dry powder); portfolio and transaction counts (36 and 12 months); team counts; acquisition appetite and investment velocity values. Filter by name, sector, class, class_state, size_band, state or minimum transactions in 36 months. A sector word (software, healthcare, industrials) goes in sector, never in query, which matches firm names only. Returns dfx:pe: ids. Funds, people, transactions, scores with their components and counterparties are on get_pe_firm, not on these cards. Not for family offices, independent sponsors or venture firms (search_family_offices, search_independent_sponsors, search_vc_firms). ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | transactions (default): most deals in 36 months; gav: reported PE gross assets; recent: latest event; funds: private equity fund count. | |
| class | No | The classifier's verdict. CANDIDATE_PE is a name on the universe that has not been ruled on; firms with no class yet are also candidates and are excluded by any class filter. NOT_PE rows are never published. | |
| limit | No | ||
| query | No | NAME FILTER ONLY: firm name contains, e.g. 'Audax'. Punctuation is ignored. Never a sector, strategy or place: 'software' here returns firms whose NAME contains software. | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| sector | No | A sector the firm states it invests in, from its own website criteria (about 2,100 firms state one): technology, software, financial_services, consumer, healthcare, infrastructure, energy, industrials, real_estate, business_services, manufacturing, media_telecom, environmental_services, transportation_logistics, distribution, life_sciences, food_beverage, education, building_products, agriculture, aerospace_defense, hospitality_leisure, franchising, safety_security, chemicals_materials, industrial_services, packaging, automotive, government_contracting, specialty_distribution. Plain words are mapped (saas to software, health to healthcare, fintech to financial_services). A firm that states no sectors is not returned by this filter. | |
| size_band | No | LOWER_MIDDLE_MARKET, MIDDLE_MARKET, UPPER_MIDDLE_MARKET, LARGE_CAP, or UNSIZED (no size evidence yet, not 'small'). Each card names the basis the band was assigned on. | |
| class_state | No | How settled the class is. confirmed means evidence the classifier treats as decisive; probable is a strong inference. | |
| min_transactions_36m | No | At least this many transactions as sponsor, buyer, co-investor or minority investor announced in the last 36 months. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, and the description adds substantial behavioral context beyond them: unentitled responses return first 5 rows plus locked.count/locked.by_type, records are truncated to 3 related names per section, contact values and decision-maker names are never returned, and every answer discloses withholding via `entitlement`/`locked`. This is unusually rich disclosure for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very dense and mostly front-loaded: identity and card contents come first, then filters, then entitlement. Some material (e.g. the parenthetical reminder about reported gross assets vs dry powder, and the promotional 'Full access: DFX Intelligence, 7 days free at...') is not strictly needed for correct invocation and slightly pads the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 10 parameters, the description carries the return-value burden and does so: it states the id format (dfx:pe: ids), which fields appear on cards, that funds/people/transactions/scores require get_pe_firm, and how entitlement degrades results. Nothing an agent needs to call or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 90%, so the baseline is 3, but the description adds genuine cross-parameter guidance the schema does not: the sector-vs-query boundary is restated and reinforced, size_band is explained as evidence-based rather than a proxy for 'small' (UNSIZED ≠ small), and min_transactions_36m spells out the roles counted (sponsor, buyer, co-investor, minority).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (search private equity firms) and enumerates exactly what a card contains: classifier class/state/confidence/basis, size band with evidence, fund counts, Form ADV gross assets, portfolio/transaction counts, team counts, appetite and velocity. It explicitly distinguishes itself from get_pe_firm (detail records) and from the family-office/independent-sponsor/VC siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not conditions ('Not for family offices, independent sponsors or venture firms') with named alternative tools, and steers input choice ('a sector word goes in `sector`, never in `query`'). It also clarifies that funds/people/transactions live on get_pe_firm rather than here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pe_fundsPrivate equity funds and their amountsARead-onlyIdempotentInspect
Funds on the private equity graph with every amount under its own name and beside its basis: target, first close, final close, announced size, Form D offering and sold, and the Form ADV gross asset value with its as-of date. adv_gross_asset_value is the gross assets the adviser REPORTED for the fund: it is not fund size, not commitments and not dry powder. Also vintage with basis, ADV fund type, lifecycle state, owner and LP counts. Filter by name, manager, ADV fund type, vintage range, lifecycle or minimum reported gross assets. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | Fund name contains, e.g. 'Fund IV'. | |
| cursor | No | ||
| max_vintage | No | Four-digit year. | |
| min_vintage | No | Four-digit year. | |
| adv_fund_type | No | The fund type the adviser swore on Form ADV Schedule D. | |
| lifecycle_state | No | ||
| min_adv_gav_usd | No | Minimum reported Form ADV gross asset value in US dollars (reported gross assets, not fund size). | |
| organization_dfx_id | No | A private equity graph id of the form dfx:pe:<uuid>, as returned by search_pe_firms, search_pe_funds, search_pe_platforms or search_entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral context: the entitlement/lock behavior of the free tier (first 5 rows, locked.count, locked.by_type), suppression of contact values and decision-maker names, the `entitlement` and `locked` fields in responses, and a clarification of adv_gross_asset_value semantics. This goes well beyond annotations, though it's interleaved with promotional content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the useful enumeration of return fields but then contains a lengthy run-on covering entitlement logic and a promotional URL ('7 days free at https://dfxintel.com/data-factory/plans'). The promotional sentence does not earn its place in a tool definition, and the entitlement paragraph, while relevant, is verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry return-value information — it does list the amount fields returned, which helps. However, it doesn't describe pagination behavior (cursor, limit max 25) or the structure of `locked`, and the promotional content dilutes the technical completeness. Adequate but with clear gaps for a 10-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so some parameters rely on the description. The description mentions the filter axes (name, manager, ADV fund type, vintage range, lifecycle, min gross assets) which maps to several params, and clarifies that adv_gross_asset_value is reported gross assets, not fund size — matching the schema's own description of min_adv_gav_usd. No new syntax or format detail is added for parameters like cursor or sort, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (private equity funds) and enumerates the amounts returned (target, first close, final close, announced size, Form D offering/sold, Form ADV GAV) plus vintage, ADV fund type, lifecycle, owner and LP counts. This is a specific verb-less but clearly scoped search, distinct from siblings like search_pe_firms or get_pe_fund. It doesn't explicitly contrast with those siblings, keeping it at 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Filter conditions are listed ('Filter by name, manager, ADV fund type, vintage range, lifecycle or minimum reported gross assets'), which implies when this tool is appropriate, but there is no explicit guidance on when to prefer get_pe_fund (single fund lookup) or search_pe_firms, nor exclusions. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pending_ownership_changesOfficial pending nursing home ownership changesARead-onlyIdempotentInspect
OFFICIAL state records that a skilled nursing facility's ownership, control or operator is changing, before the change takes effect (Kentucky, New York, Rhode Island, New Jersey, Maine): facility, CCN, beds, current and proposed operator, real estate owner where public, the state's own stage, record class (OFFICIAL_PENDING_FILING, DERIVED_STATUS, CONFIRMED_EFFECTIVE_CHANGE, WITHDRAWN_OR_DENIED), first public record date, days pending, planned close, evidence tags with their facts, source URL and last checked. With changed_since, returns what changed (new application, agenda, vote, withdrawal, effective) instead. Not predictions. Each state's audited fields are listed; proposed owners and percentages are not returned as fact. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | An evidence tag, e.g. OPERATOR_CHANGE_PENDING, PORTFOLIO_BATCH, HUD_FHA_EXPOSURE, PLANNED_CLOSE_PASSED. | |
| view | No | open | |
| limit | No | ||
| query | No | Matches facility, current or proposed operator, or real estate owner. | |
| state | No | ||
| changed_since | No | YYYY-MM-DD: return change alerts observed on or after this date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, yet the description adds substantial behavioral context: paywall gating (first 5 rows then locked.count/by_type), what is never returned (contact values, decision-maker names), and that every answer reports withholding in entitlement/locked. This is exactly the value-added disclosure annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, but the body is a dense run-on enumerating every returned field, and the trailing sales CTA ('7 days free at...') is promotional rather than functional. Several clauses could be trimmed without losing agent-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the return-shape burden by enumerating record fields, record classes, and the changed_since alternative output. Access/entitlement behavior is covered. It is nearly complete, though the sparse parameter coverage leaves view/limit semantics partly unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must compensate. It adds meaning for changed_since ('return change alerts observed on or after this date'), but view/tag/state largely restate enum values already in the schema, and limit is undocumented in the description. Partial compensation, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (search official state records of pending skilled-nursing ownership/operator changes) and scopes it to five named states. Explicitly excludes predictions, so the agent knows this is a records lookup, not a forecast, and can distinguish it from sibling search_signal/opportunity tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly frames when the tool applies (pre-effective ownership changes, real state filings) and offers an alternative mode via changed_since for 'what changed' queries. It does not explicitly route to a named alternative sibling or state when NOT to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_peoplePeople across the family office, sponsor, venture and private equity graphsARead-onlyIdempotentInspect
Investment professionals, principals and family office staff as names with titles, roles, seniority, investment responsibility, organisation and tenure, from public filings and firm pages; with domain=ria, IAPD-registered advisors by name or firm. 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. organization (a firm name) or organization_dfx_id returns everyone on record at that institution across every graph it is on (one institution is several ids) and every contact source. At least one of query, organization, organization_dfx_id, role, investment_responsibility or cross_graph_only is required; a call with none of them is refused with INVALID_ARGUMENT. Contact points are withheld over MCP; each card whose organisation is on a contact graph carries reachability booleans instead (a verified email or phone on record for that name at that organisation, never the value). ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | family_office: leadership, cio, direct_investments, operations, board, venture, real_estate, family_principal, other. venture_capital: managing_partner, general_partner, partner, principal, vice_president, venture_partner, operating_partner, platform, founder_executive, board, other. private_equity: managing_partner, partner, operating_partner, vice_president, business_development and the other categories on each card. | |
| limit | No | ||
| query | No | A person's name (contains). A firm name that matches no person is answered as the firm. | |
| domain | No | private_credit: officers and control persons of credit managers from their own Form ADV Schedule A. real_estate answers NOT_COVERED: the property graph publishes no people; real estate fund managers' Schedule A people are under real_estate_funds. | |
| current_only | No | ||
| organization | No | An organization's NAME (e.g. Akoya Capital Partners): resolved through the identity layer, and everyone on record there is returned from every graph it is on and every contact source, with route types (never values). | |
| cross_graph_only | No | Only people who are the same person on two graphs (a venture professional who is also on a family office's ADV Schedule A), linked by shared individual CRD; returns both cards. | |
| organization_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| investment_responsibility | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only covering safety (readOnly, idempotent, non-destructive), the description carries the real behavioral burden and does so richly: entitlement gating (first 5 rows + locked.count/locked.by_type without a paid plan), withholding of contact values and decision-maker names, the reachability boolean substitute, the INVALID_ARGUMENT refusal, and the real_estate NOT_COVERED response. None of this is inferable from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with what the tool returns, but the single run-on block packs filters, entitlement rules, and a marketing URL ('Full access: DFX Intelligence, 7 days free at...') into one paragraph. The required-argument rule and the entitlement behavior would be more usable as separate sentences or bullets rather than buried mid-paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, no-output-schema tool with an entitlement system, the description is nearly complete: it explains the returned card shape (subject names, first 3 related names per section, locked/entitlement fields) and the access tiers. Only minor gaps remain, such as the exact structure of a full-access response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds meaning where the schema is thin: domain=ria returns IAPD-registered advisors, organization resolves through the identity layer across every graph and contact source, cross_graph_only returns both cards via shared CRD, and the union-of-alternatives requirement for invocation. It leaves some params (limit, current_only, investment_responsibility) purely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (returns/searches) and resource (investment professionals, principals, family office staff) and enumerates the returned fields (names, titles, roles, seniority, investment responsibility, organisation, tenure). It also scopes the resource across graphs and the RIA/IAPD variant, so an agent can distinguish it from firm-level siblings like search_vc_firms or get_ria_firm.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete selection context: query by name, organization_dfx_id, or role, and explicitly says cross_graph_only=true answers 'which venture people are connected to family offices' in one call. It also states the argument requirement — 'At least one of query, organization, organization_dfx_id, role, investment_responsibility or cross_graph_only is required' — with the refusal behavior. It stops short of naming competing sibling tools (e.g., search_ria, resolve_ria_advisor) as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pe_platformsPrivate equity platform companiesARead-onlyIdempotentInspect
Companies that act as a platform (a sponsor's platform investment, or a company that has made add-ons): industry, add-on counts (total and last 24 months) and latest add-on date, current owners with role, status and dates, ownership since, and the platform acquisition activity and exit readiness scores. Filter by name, state, industry text, minimum add-ons in 24 months or owner firm. Returns dfx:pe: company ids for find_pe_addons_for_platform. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | Company name contains. | |
| state | No | Two-letter US state code. | |
| sector | No | Industry contains, e.g. 'healthcare', 'software', 'distribution'. | |
| owner_dfx_id | No | A dfx:pe: firm id; only platforms it owns or has owned. | |
| min_add_ons_24m | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only/idempotent/non-destructive; the description goes far beyond that, spelling out the entitlement model (first 5 rows in full vs locked.count/locked.by_type), the fields never returned (contact values, decision-maker names), and the `entitlement`/`locked` disclosure fields. This is exactly the behavioral disclosure the annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, return fields, filters and access rules are front-loaded in a logical order, but the ACCESS block is long and ends with a promotional plan URL ('7 days free at...'), which consumes space without helping an agent invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly takes on the burden of listing returned fields and the entitlement/withholding behavior. Sort and limit semantics go unexplained, but for a read-only search tool the essentials are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only ~57% schema description coverage and 7 params, the description compensates by naming the filterable dimensions (query, state, sector, min_add_ons_24m, owner_dfx_id) and describing returned metrics. It does not explain sort semantics or the 25-row limit behavior, so it stops short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a precise verb+resource and defines the concept ('a sponsor's platform investment, or a company that has made add-ons'), then enumerates the specific fields returned. It is distinguishable from adjacent tools, explicitly naming find_pe_addons_for_platform as the follow-up consumer of the dfx:pe: ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the available filter dimensions (name, state, industry text, min add-ons in 24 months, owner firm) and points to the sibling that consumes its ids, which gives clear usage context. It does not, however, state when to prefer this over search_pe_firms or get_sponsor_portfolio, so exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pe_transactionsPrivate equity transactionsARead-onlyIdempotentInspect
Acquisitions, add-ons, recapitalisations, carve-outs, secondary sales and exits on the private equity graph: type, status, announced and closed dates, target with industry and state, platform for an add-on (with the basis for calling it one), control, every party with role, side and attribution, and money (enterprise value, purchase price, equity value, target revenue and EBITDA) ONLY where disclosed, each beside its basis. An undisclosed amount is absent, never estimated. Filter by firm (any party), target, platform, type, target state, since-date, add-ons only, control or target name. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | NAME FILTER ONLY: the target's or any party's name contains. Never a sector or place; use sector and state. | |
| since | No | ISO date; transactions announced on or after. | |
| state | No | Two-letter US state code of the target. | |
| sector | No | The target's industry as the graph classified it (technology, industrials, healthcare, consumer, construction_engineering, business_services, energy, environmental, financial_services, education, transportation_logistics, home_services, aerospace_defense, automotive). Plain words are mapped (software to technology). About half of transactions carry an industry; one without is not returned by this filter. | |
| add_on_only | No | ||
| firm_dfx_id | No | A dfx:pe: firm or person id; returns transactions where it is any party (sponsor, buyer, seller, co-investor, lender, adviser, deal partner). | |
| target_dfx_id | No | A private equity graph id of the form dfx:pe:<uuid>, as returned by search_pe_firms, search_pe_funds, search_pe_platforms or search_entities. | |
| control_status | No | ||
| platform_dfx_id | No | A private equity graph id of the form dfx:pe:<uuid>, as returned by search_pe_firms, search_pe_funds, search_pe_platforms or search_entities. | |
| transaction_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the safety annotations by disclosing the entitlement model: unpaid access returns only the first 5 rows plus locked.count and locked.by_type, records name their subject and first 3 related names per section, and contact values and decision-maker names are withheld. It also promises every answer reports what it withheld in entitlement and locked, which is exactly the behavioral context an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and returned fields well, but the middle sentence is a long comma-spliced run-on that lists fields in prose form and is harder to scan than it needs to be. The ACCESS block is dense but earns its place; the marketing URL and free-trial pitch at the end is less clearly functional.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, no required params, no output schema, and partial schema coverage, the description covers what is returned, the entitlement ceiling, and the money-disclosure rule, which is most of what an agent needs. It could be more explicit about pagination, the limit cap of 25, and how locked results should be presented, but the core is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 64%, so some parameters rely on the description. The description adds real meaning: query is a name filter only (never sector/place), money fields are disclosed-only and never estimated, and platform includes the basis for the add-on call. It does not explain the since-date ISO format or the firm_dfx_id any-party semantics beyond the schema, so it is not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb and resource ('Acquisitions, add-ons, recapitalisations, carve-outs, secondary sales and exits on the private equity graph') and then enumerates the fields returned, including money only where disclosed. An agent can distinguish this from siblings like search_sponsor_deals or search_vc_exits by the PE-graph transaction scope and the disclosed-only money rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lists the filter facets (firm, target, platform, type, state, since, add-ons only, control, name), which tells an agent when this tool is the right one. It does not name an alternative sibling or state exclusions (e.g., when to use search_sponsor_deals instead), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_private_companiesPrivate companies with ownership-change filingsARead-onlyIdempotentInspect
US private companies whose filings (Form 5500 plan history, final filings, ownership changes) record a change: vertical, plan participants as a size proxy, EBITDA band where derivable, and rule scores 0 to 100 for opportunity, dealability, transition readiness and urgency, each backed by observations. The scores are NOT a prediction: replayed against later transactions (backtest 2026-09-13) the composite's top decile transacted at 0.94x the base rate at 24 months, so never present a high score as a company likely to sell or transact; present the filed changes as the evidence. Filter by vertical, state, NAICS prefix, size and minimum opportunity. Returns dfx:isi: ids. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| sort | No | ||
| limit | No | ||
| query | No | ||
| state | No | Two-letter US state code. | |
| vertical | No | One of business_services, industrial_manufacturing, industrial_services, healthcare_services, consumer_services, specialty_distribution, transportation_logistics, tech_enabled_services (free text is mapped onto these). | |
| subsector | No | Free text on the subsector (slower). | |
| naics_prefix | No | ||
| record_status | No | ||
| min_opportunity | No | 0 to 100; the median company scores 21 and the top decile above 28. | |
| max_participants | No | ||
| min_participants | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the read-only/idempotent annotations: the free-tier truncation model (first 5 rows plus locked.count/by_type), the suppression of contact values and decision-maker names, the entitlement/locked disclosure on every answer, and an explicit backtest caveat (0.94x base rate) warning against predictive framing. This is exactly the behavioral disclosure annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool returns, which is good, but then runs long with a dense backtest paragraph and a promotional pricing URL ('7 days free at https://dfxintel.com/...'). The entitlement detail is necessary; the marketing line is not, and the single-run-on structure makes it hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 12 parameters, the description does the heavy lifting: it describes returned fields, the dfx:isi: id format, and the entitlement/withholding contract. Only the filter parameters are underspecified, so it is largely complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% across 12 params, so the description must compensate. It covers vertical/state/NAICS/size/min-opportunity filters and explains plan participants as a size proxy, but leaves city, sort, limit, query, record_status, and min/max_participants unexplained beyond the schema. Partial compensation justifies a mid score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (US private companies with ownership-change filings) and enumerates the returned fields (vertical, participants, EBITDA band, rule scores), so an agent can tell it apart from the other search_* tools. It never names a sibling directly, but the 'ownership-change filings' scope is distinctive enough to be actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives filter guidance ('Filter by vertical, state, NAICS prefix, size and minimum opportunity') and a strong caveat about not treating scores as predictions, but never says when to prefer this over search_pending_ownership_changes, search_isi_opportunities, or search_opportunities. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_private_creditSearch lenders, BDCs, borrowers, sponsors and credit fundsARead-onlyIdempotentInspect
The capital structure graph behind private markets, built from every BDC's schedule of investments each quarter since 2022. query is a name (trigram matched across names and aliases: Ares, Ares Capital and ARCC resolve to the adviser, the BDC and its ticker as distinct rows); without a query, filters list providers (class, state, BDC advisers only) or borrowers (sponsor, industry, minimum BDC lenders, maturity before a date, sort). Every row names its fact class (filed: the BDC's own figure; derived: arithmetic over filed figures, a sum of pieces is a lower bound; carried: from another DFX graph with its source; inferred: an attribution by rule with confidence). A mark below cost is a mark, not impairment; a moved maturity is an observed term change, not an amendment. Non-accrual IS on the tape: each BDC's own schedule footnotes give NON_ACCRUAL_PLACED and RETURNED_TO_ACCRUAL events and a borrower's credit_status (search_credit_stress rolls them up); it is never inferred from a mark. Default, restructuring and covenants are not on the tape. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| class | No | Provider class (probable or confirmed). | |
| limit | No | ||
| query | No | ||
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| industry | No | Industry as a filer wrote it (contains). | |
| held_only | No | ||
| entity_type | No | Default: any type with a query; providers without one. borrower lists exclude grade C groups. | |
| min_lenders | No | Borrowers held by at least this many BDCs. | |
| sponsor_dfx_id | No | A private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities). | |
| maturity_before | No | ISO date: borrowers whose next dated maturity is on or before it. | |
| bdc_advisers_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations covering read-only/idempotent safety, the description adds substantial behavioral context beyond them: fact classes (filed/derived/carried/inferred) with their meanings, the mark vs impairment distinction, the presence of non-accrual events, explicit exclusions (defaults, restructurings, covenants not on tape), entitlement gating (first 5 rows, locked.count/by_type), and what is never returned (contact values, decision-maker names). This is genuinely useful for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loads the resource concept, but it is long and mixes usage, semantics, caveats, and access policy in one block. Some sentences earn their place (fact classes, non-accrual, entitlement), while the marketing CTA at the end is extraneous. It could be more skimmable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter search tool with no output schema, the description covers the key behavioral traits, data semantics, and access limitations. It does not explain return format or pagination beyond cursor mention in schema, but entitlement/locked fields are described. Complete enough for an agent to call correctly, though output shape remains implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 62%, leaving several parameters (query, sort, min_lenders, maturity_before, bdc_advisers_only, held_only, limit) without schema descriptions. The description compensates by explaining query behavior (trigram across names/aliases, distinct rows), what no-query filters do, and the meaning of several filters. Enum-based params like sort and class remain unexplained in text, but overall the description adds meaningful semantic grounding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource — the private credit capital structure graph built from BDC schedules of investments — and the tool title names the entity types (lenders, BDCs, borrowers, sponsors, credit funds). It does not explicitly route the agent away from similarly-named siblings like search_private_credit_changes or get_credit_provider, but the scope is specific enough to be useful.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the description of behaviors: with a query it name-matches, without a query it lists providers or borrowers via filters. However, it does not state when to use this tool versus siblings such as search_entities, resolve_name, get_credit_provider, or search_credit_stress. The agent must infer routing from the semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_private_credit_changesWhat changed on the private credit tapeARead-onlyIdempotentInspect
Dated changes by effective date (the quarter end where the change is visible) or by first-seen: new borrowers on any schedule, lenders joining and leaving facilities, facilities leaving every schedule, markdowns across lenders, PIK appearing or rising, a BDC placing a borrower on non-accrual or returning it to accrual (NON_ACCRUAL_PLACED, RETURNED_TO_ACCRUAL, from the BDC's own footnotes), maturities and spreads moving (observed term changes, not amendments), maturities approaching, sponsor x lender pairs forming and repeating. Routine changes (each new piece, increase, decrease, single-lender mark) only with include_routine. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | effective | |
| limit | No | ||
| since | Yes | ISO date or timestamp. | |
| until | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| dfx_id | No | A dfx:pc: id; events where it is the subject or related. | |
| event_type | No | ||
| include_routine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the full entitlement model: 5-row previews, locked.count/locked.by_type, redaction of contact values and decision-maker names, and the `entitlement`/`locked` fields echoed in every answer. This is unusually rich behavioral context that the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense and the access model is valuable, but the first sentence is a single sprawling run-on enumerating 23 event types, hurting scanability. Front-loading the scope is done reasonably, but the monolithic sentence structure undercuts it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param read tool with no output schema, the description covers what matters: what counts as a change, the routine-event gate, and what the response withholds. Paging semantics (limit/cursor interaction) and full output shape are the only notable omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 38% across 8 params, so the description must carry weight. It does explain the `by` parameter's semantics (effective date = quarter-end visibility vs first-seen) and implies include_routine's role, but since, until, limit, cursor, and dfx_id are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (dated changes on the private credit tape) and enumerates the exact change families it surfaces, so an agent knows precisely what it returns. It falls short of 5 because it never names or contrasts a sibling such as search_capital_changes, search_credit_stress, or changes_since, which an agent must disambiguate on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one real usage rule — routine changes are excluded unless include_routine is set — which is genuinely useful for invocation. However it offers no when-to-use-vs-alternative guidance against the many adjacent change/stress/capital tools, so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_property_eventsFind dated property events by type, state and time windowRead-onlyIdempotentInspect
Dated events over US properties and parcels, with provenance and a human-readable headline. Covers LIHTC compliance period endings (the Year 15 recapitalisation trigger, 11,956 of them), HUD subsidy contract expiries (4,721), scheduled loan maturities (3,298) now national rather than Massachusetts, CMBS distress and workout reporting (3,041 delinquency flags across 26 states, 123 foreclosures across 21), issued building permits and demolition filings (Boston only), and recorded sales (49,264, 4 states). 9,261 events fall inside the next 548 days, measured 2026-10-11. 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, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MATURED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT. Measured 2026-10-11. Passing within_days asks about a future whatever the family, so it sorts soonest first. PAGING: a full page carries next_cursor. Supplied as cursor with every other argument unchanged, it continues the traversal; 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 | Required | Description | Default |
|---|---|---|---|
| limit | No | Max 50. Results are ordered by occurred_at ASCENDING. For the expiry families (maturities, compliance periods, subsidy contracts, leases) a call with no `within_days` now returns events dated TODAY OR LATER, soonest first; the envelope reports this as `applied_date_floor`. `include_past=true` returns the full history. | |
| state | No | Two letter state code | |
| cursor | No | The `next_cursor` from a previous page. With EVERY other argument identical it returns the rows after that page. `next_cursor` is null only once the whole result set has been read: a short page is not the end, because a page can shrink when two sources publish the same event. Opaque, and not constructed or edited by hand. An unreadable cursor is REFUSED rather than ignored, so a traversal is never silently restarted at page one. | |
| event_type | No | ONE family per call. Left unset, every family is searched together, which mixes populations of very different sizes. The list is generated from what this server actually publishes today, so it grows without a release. An empty result for a family in a state is not by itself evidence of an absent market: coverage per family and state is measured and published separately. | |
| within_days | No | FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question ("recent sales", "foreclosures that already happened"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-11, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MATURED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT. | |
| include_past | No | Return the whole tape including events already past, instead of the default forward window applied to expiry families. Has no effect when `within_days` is given, which sets its own window, and none on historical families, which are never floored. |
search_re_fund_lendersWho lends to a real estate fund managerARead-onlyIdempotentInspect
Manager by lender pairs from the loans at the manager's validated holdings: the lender group, loans, principal, properties, property types and states, first and latest loan dates, new originations and refinancings in the last 24 months, the lender's share of the manager's loans, and the trend. Securitization trusts and trustees are not lenders and are left out. Give a manager (dfx id or CRD) for its lenders, or a lender name for the managers it finances. Use this for 'who financed ', not the corporate private credit tools. Gross asset value is a fund's assets on a filing date: never fund size, never commitments, never dry powder, and a quarantined reading enters no sum. The sworn ADV tape starts in 2011 and runs through the latest monthly filings DFX has read (coverage_live on the answer gives the years and counts), so a first report in 2011 or 2012 is a first sighting, not a formation. Holdings, properties, loans and lenders appear only where a property binding passed its blind labels, which is a few hundred managers. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | loans | |
| limit | No | ||
| query | No | Manager name contains. | |
| since | No | ISO date: latest loan on or after. | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| lender | No | Lender name contains. | |
| min_loans | No | ||
| property_type | No | ||
| manager_dfx_id | No | A real estate fund manager: a dfx:ref:<uuid> id or the manager's CRD. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description discloses substantial behavior: entitlement-gated results (first 5 rows plus locked.count/locked.by_type without a paid plan), fields never returned (contact values, decision-maker names), the 2011 ADV tape start and coverage caveats, quarantine handling, and the blind-label restriction on holdings. This is exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Returns are front-loaded, which is good, but the body is a dense run-on covering return fields, coverage history, ownership caveats, entitlement mechanics and a marketing CTA. The plan pitch URL is promotional rather than operational, and several sentences could be split or trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so field-by-field, and it explains access limits and data-coverage windows. What is missing is pagination behavior for the cursor parameter and how sort/limit interact with the entitlement row cap, leaving a small gap for correct multi-page use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the description must compensate, and it does add meaning for the two primary selectors: manager_dfx_id accepts a dfx:ref UUID or CRD, and lender matches by name, with the two input modes explained. It is thinner on cursor/limit/sort/min_loans/since, which fall back on the schema, so it improves on the schema without covering everything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific resource list ('Manager by lender pairs from the loans at the manager's validated holdings') and then names the exact output fields. It distinguishes the tool from siblings explicitly ('Use this for who financed <real estate manager>, not the corporate private credit tools') and notes the securitization/trustee exclusion. An agent can tell what this returns and what it is not without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear invocation modes ('Give a manager ... for its lenders, or a lender name for the managers it finances') and names exclusions (trusts/trustees, corporate private credit tools). However, it does not point to the closest named alternatives such as find_lenders_for_financing or find_real_estate_lenders, so routing among near-duplicate siblings still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_re_fund_loansLoans on real estate fund managers' holdings, with maturities and lendersARead-onlyIdempotentInspect
Loans bound to a real estate fund manager through a validated property binding: lender of record (labelled when it is the CMBS trust holding the note rather than the originator), instrument, amount with its basis, origination, recorded and maturity dates, whether still open, address, state and property type where recorded, and the source. Filter by manager (dfx id or CRD), a name in the manager, holding or address, lender, state, property type, instrument (cmbs, mortgage...), maturing within N days or a maturity range; open loans only by default. group_by=manager rolls the matched loans up per manager (loans, amount, next maturity, lenders): the answer to 'which managers have loans maturing in the next 24 months'. A manager without a validated holding has no loans here, which is coverage, not an absence of debt. Property type is recorded on a minority of CMBS rows. Gross asset value is a fund's assets on a filing date: never fund size, never commitments, never dry powder, and a quarantined reading enters no sum. The sworn ADV tape starts in 2011 and runs through the latest monthly filings DFX has read (coverage_live on the answer gives the years and counts), so a first report in 2011 or 2012 is a first sighting, not a formation. Holdings, properties, loans and lenders appear only where a property binding passed its blind labels, which is a few hundred managers. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | maturity | |
| limit | No | ||
| query | No | Manager, holding entity or address contains. | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| lender | No | Lender name contains. | |
| group_by | No | ||
| open_only | No | ||
| maturity_to | No | ||
| maturity_from | No | ||
| property_type | No | office, multifamily, industrial, retail, hotel (where recorded). | |
| manager_dfx_id | No | A real estate fund manager: a dfx:ref:<uuid> id or the manager's CRD. | |
| instrument_kind | No | ||
| maturing_within_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations covering the safety profile (readOnly, idempotent, non-destructive), the description adds rich behavioral context: coverage caveats (validated bindings, few hundred managers), data provenance (ADV tape from 2011, quarantined readings excluded from sums), and detailed access limits (first 5 rows without paid plan, withheld contact values). This goes far beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense wall of text with a long run-on first sentence listing returned fields, followed by filter guidance, data caveats, and access rules. While much of the information is valuable, some tangential details (e.g., gross asset value definitions) could be trimmed, and the structure is not optimally front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter tool with no output schema and modest schema description coverage, the description is remarkably complete: it covers coverage, data quirks, access restrictions, and the shape of returned fields. It leaves little ambiguity about what the tool does or how its results should be interpreted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 43%, so the description must compensate; it explains the semantics of many filters (manager accepts dfx id or CRD, name search across manager/holding/address, instrument kinds, maturity windows) and the group_by rollup. It omits meaning for sort, limit, and cursor, but these are generic and partially covered by schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (loans bound to a real estate fund manager via a validated property binding) and lists the exact fields returned, including the lender-of-record distinction between CMBS trust and originator. This scope differentiates it from sibling loan searches like search_cmbs_loans or search_re_fund_lenders, which lack the manager-holding binding requirement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context through filter descriptions and a concrete example ('which managers have loans maturing in the next 24 months'), and states the default of open loans only. However, it does not explicitly name alternative tools or state when not to use this one, leaving the agent to infer exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_re_fund_lpsWhich LPs committed to real estate fund managersARead-onlyIdempotentInspect
The public LP tape resolved to real estate fund managers and vehicles: the plan (allocator id), the manager and vehicle with the basis of each resolution, the fund as the plan printed it, the plan's commitment amount with its basis, status, commitment and approval dates, vintage, re-up, the plan's own paid-in, distributed, value, IRR and multiple where printed, and the source document with a quote. Filter by manager (dfx id or CRD), vehicle, allocator, a name, allocator state, commitment type, private real estate only, minimum amount, since. similar_to= reads the LPs of the managers with the same strategy class and a shared property type (the subject excluded): the answer to 'which LPs back managers like X'. group_by=allocator rolls the rows up per plan with the managers it backs. A commitment is the plan's number, never the fund's size; plans disclose on their own schedule, so absence is not evidence of no commitment. Gross asset value is a fund's assets on a filing date: never fund size, never commitments, never dry powder, and a quarantined reading enters no sum. The sworn ADV tape starts in 2011 and runs through the latest monthly filings DFX has read (coverage_live on the answer gives the years and counts), so a first report in 2011 or 2012 is a first sighting, not a formation. Holdings, properties, loans and lenders appear only where a property binding passed its blind labels, which is a few hundred managers. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | amount | |
| limit | No | ||
| query | No | Manager, vehicle or fund name as printed contains. | |
| since | No | ISO date: commitment dated on or after. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| group_by | No | ||
| allocator | No | Allocator name contains. | |
| similar_to | No | A real estate fund manager: a dfx:ref:<uuid> id or the manager's CRD. | |
| manager_dfx_id | No | A real estate fund manager: a dfx:ref:<uuid> id or the manager's CRD. | |
| min_amount_usd | No | ||
| vehicle_dfx_id | No | A real estate fund graph id of the form dfx:ref:<uuid> (from search_re_fund_managers, search_re_fund_vehicles, resolve_name or search_entities). | |
| allocator_state | No | Two-letter US state code. | |
| commitment_type | No | ||
| allocator_dfx_id | No | An allocator id (dfx:al:<uuid>). | |
| private_real_estate_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: entitlement gating (first 5 rows plus locked.count/locked.by_type), permanent withholding of contact values and decision-maker names, the 2011-onward ADV coverage window, and the rule that absence is not evidence of no commitment. It also heads off misreads (a commitment is the plan's number, not fund size; gross asset value is not fund size).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information density is high and the return fields are front-loaded before the caveats and access rules, so nothing critical is buried. It is long and the opening sentence is an unwieldy run-on, and the closing '7 days free' plan pitch is promotional filler that does not help an agent invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, no-output-schema tool, the description covers what the rows contain, how entitlement truncates results, what is always withheld, and the data provenance/coverage caveats. An agent has enough to call it correctly and to interpret an empty result without over-reading it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 60% schema coverage with 15 params, the description earns its keep by mapping filters to meaning (manager dfx id or CRD, vehicle, allocator, name, state, commitment type, private-real-estate-only, min amount, since) and by clarifying similar_to and group_by semantics. It leaves sort, limit and cursor behavior to the schema, which is a minor gap rather than a failure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the public LP tape of commitments to real estate fund managers and vehicles) and enumerates exactly what each row carries (plan, manager/vehicle, fund, commitment amount with basis, dates, paid-in/distributed/value/IRR). The 'real estate fund' scope cleanly separates it from siblings like search_vc_lp_commitments and search_allocator_commitments without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage context: 'similar_to=<manager>' is framed as the answer to 'which LPs back managers like X', and group_by=allocator is explained as rolling rows up per plan. The filter list tells the agent what selective dimensions exist, but it never explicitly states when to choose this tool over a sibling like search_allocator_commitments or get_commitments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_re_fund_managersSearch real estate fund managersARead-onlyIdempotentInspect
Advisers that swear a Real Estate Fund vehicle on Form ADV Schedule D 7.B.(1): one manager is one CRD, with its registration and latest filing, regulatory assets under management, the summed gross asset value of its non-feeder, non-quarantined real estate vehicles with its size band, vehicles current and ever, strategy class with its state and basis, operator model, property types and markets with their bases, validated property bindings and their loans, and the public plans that disclose commitments. Filter by state (the manager's headquarters), strategy class, size band, operator model, gross asset value, vehicles, property type, holdings or public LPs, and by ACTIVITY on its validated holdings: acquisitions or financings in the last 12 months, a loan maturing before a date, the latest vintage, the year of its first real estate vehicle (emerging managers). similar_to gives the managers with the same strategy class and a shared property type, the subject excluded. Sort by gav, acquisitions, financings, maturity, vintage, newest, loans, lps, recent. Every row carries its activity numbers. Gross asset value is a fund's assets on a filing date: never fund size, never commitments, never dry powder, and a quarantined reading enters no sum. The sworn ADV tape starts in 2011 and runs through the latest monthly filings DFX has read (coverage_live on the answer gives the years and counts), so a first report in 2011 or 2012 is a first sighting, not a formation. Holdings, properties, loans and lenders appear only where a property binding passed its blind labels, which is a few hundred managers. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| crd | No | ||
| sort | No | ||
| limit | No | ||
| query | No | Manager name contains, or a CRD. | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| size_band | No | ||
| similar_to | No | A real estate fund manager: a dfx:ref:<uuid> id or the manager's CRD. | |
| with_loans | No | Only managers with at least one loan on a validated holding. | |
| max_gav_usd | No | ||
| min_gav_usd | No | ||
| min_vehicles | No | ||
| property_type | No | A property type on the manager's own list: MULTIFAMILY, INDUSTRIAL, OFFICE, RETAIL, HOTEL, MIXED_USE, LAND, STUDENT_HOUSING, SENIOR_HOUSING, SELF_STORAGE, SINGLE_FAMILY_RENTAL, DATA_CENTER, HEALTHCARE, LIFE_SCIENCE, MANUFACTURED_HOUSING, NET_LEASE, OTHER (words such as 'apartments' or 'data centers' are folded). | |
| with_holdings | No | Only managers with at least one validated property binding. | |
| include_former | No | Also managers whose latest filing no longer swears a real estate fund. | |
| operator_model | No | ||
| strategy_class | No | VALUE_ADD, CORE, OPPORTUNISTIC, DEBT... (a word such as 'value add' is folded to the vocabulary). | |
| maturing_before | No | ISO date: the manager's next loan maturity falls between today and this date. | |
| with_public_lps | No | ||
| min_financings_12m | No | ||
| latest_vintage_from | No | Its newest vehicle's vintage is this year or later. | |
| min_acquisitions_12m | No | Acquisitions recorded at its validated holdings in the last 12 months, at least this many (1 = actively acquiring). | |
| first_vehicle_year_from | No | Its first real estate vehicle on the tape is this year or later (emerging managers; the tape starts 2011). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety and idempotency, but the description adds substantial behavioral context: entitlement limits (first 5 rows only without a paid plan, locked counts by type), what is never returned (contact values, decision-maker names), how withheld data is reported in `entitlement` and `locked`, the 2011 start of the sworn ADV tape, and the fact that holdings only appear when a property binding passed blind labels.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense, run-on paragraph of over 250 words with no bullet points or clear front-loading. Valuable information is buried in long clauses, making it hard for an agent to parse quickly. It is over-specified rather than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter search tool with no output schema, the description is largely complete: it explains what each row carries, how filtering and sorting work, the meaning of GAV, access restrictions, and coverage caveats. It omits some parameter details and pagination behavior, but the structured schema covers cursor and limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is moderate (57%) with 23 parameters. The description compensates by defining gross asset value (never fund size, commitments, or dry powder), clarifying that state means headquarters, explaining similar_to's behavior (same strategy class and shared property type, subject excluded), and describing activity filters like acquisitions, financings, and maturities. It does not cover every parameter (e.g., limit, cursor, min_vehicles), but adds meaningful semantics beyond the schema for several key filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the exact resource: advisers that swear a Real Estate Fund vehicle on Form ADV Schedule D 7.B.(1), with one manager equaling one CRD. This is a clear and specific entity, though it never explicitly distinguishes this tool from siblings like search_re_fund_vehicles or get_re_fund_manager.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lists many filters and sort options, and explains what similar_to does, so usage is implied. However, it never states when to choose this tool over the many sibling search tools, nor does it set exclusions or prerequisites beyond the filter mechanics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_re_fund_vehiclesSearch real estate fund vehiclesARead-onlyIdempotentInspect
Vehicles sworn as Real Estate Funds by their SEC fund id (805-...): the fund and its family and sequence, master, feeder or fund of funds, gross asset value latest, first and peak with the filing date, years reported, vintage with its basis, owners and minimum investment, the Form D file number, lifecycle state with the components behind it, and the public plans that disclosed a commitment. query takes a name, an 805- fund id or an 021- Form D number. lifecycle_state RAISING or FORMING is the vehicle raising or newly formed on its filings (the live fundraising read). Feeders are excluded unless asked for (a feeder's assets are its master's, counted twice). Gross asset value is a fund's assets on a filing date: never fund size, never commitments, never dry powder, and a quarantined reading enters no sum. The sworn ADV tape starts in 2011 and runs through the latest monthly filings DFX has read (coverage_live on the answer gives the years and counts), so a first report in 2011 or 2012 is a first sighting, not a formation. Holdings, properties, loans and lenders appear only where a property binding passed its blind labels, which is a few hundred managers. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | Fund name contains, an 805- ADV fund id, or an 021- Form D file number. | |
| state | No | Two-letter organisation state of the vehicle. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| manager_crd | No | ||
| min_gav_usd | No | ||
| vehicle_kind | No | ||
| vintage_from | No | ||
| vintage_year | No | ||
| strategy_hint | No | The strategy read from the vehicle's own name (a hint, never a claim): CORE, CORE_PLUS, VALUE_ADD, OPPORTUNISTIC, DEBT, DISTRESSED, DEVELOPMENT, LAND, REIT_SPONSOR, NET_LEASE, CORE_INCOME, MULTI_STRATEGY, SPECIAL_SITUATIONS, SECONDARIES, FUND_OF_FUNDS. A property word here (multifamily) is moved to property_type_hint. | |
| manager_dfx_id | No | A real estate fund graph id of the form dfx:ref:<uuid> (from search_re_fund_managers, search_re_fund_vehicles, resolve_name or search_entities). | |
| exclude_feeders | No | ||
| include_dropped | No | Also vehicles no longer reported on the latest filing. | |
| lifecycle_state | No | One or more lifecycle states, e.g. [RAISING, FORMING] for funds in market. | |
| with_public_lps | No | ||
| property_type_hint | No | The property type read from the vehicle's own name: MULTIFAMILY, INDUSTRIAL, OFFICE, RETAIL, HOTEL, MIXED_USE, LAND, STUDENT_HOUSING, SENIOR_HOUSING, SELF_STORAGE, SINGLE_FAMILY_RENTAL, DATA_CENTER, HEALTHCARE, LIFE_SCIENCE, MANUFACTURED_HOUSING, NET_LEASE, OTHER. | |
| first_reported_from | No | ISO date: first reported on the ADV tape on or after. | |
| first_reported_year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Substantial behavioral disclosure beyond the read-only/idempotent annotations: entitlement limits (first 5 rows full, locked.count and locked.by_type for the rest), record truncation to the subject plus 3 related names per section, permanent withholding of contact values and decision-maker names, the entitlement and locked fields in every answer, the ADV tape coverage window starting 2011, the caution that a 2011-2012 first report is a first sighting not a formation, the definition of gross asset value, and the feeder double-counting caution. This is exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded with the field enumeration and the key access caveat, but it is one dense run-on paragraph that mixes data-field listing, definitions, filters, coverage caveats, and entitlement rules. It is information-rich rather than padded, yet the lack of structure makes it harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter tool with 0% output schema, the description covers the unusual definitions (gross asset value, vintage basis, coverage window), the entitlement withheld-data behavior, and the feeder rule. The main gap is the unexplained half of the parameters; otherwise an agent has enough to call the tool without surprising failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 47%, so the description must compensate and partially does: it explains that query takes a name, an 805- fund id, or an 021- Form D number, and it defines lifecycle_state RAISING/FORMING as the live fundraising read plus the feeder exclusion rule. However, roughly half the parameters (sort, limit, state, cursor, manager_crd, min_gav_usd, vintage fields, first_reported fields, with_public_lps, include_dropped) receive no explanation in the description, so the gap is only partly filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens by specifying the verb and resource precisely: vehicles sworn as Real Estate Funds by SEC fund id. It enumerates the returned data fields, which makes the purpose concrete, but it does not explicitly distinguish itself from the closely named sibling get_re_fund_vehicle or search_re_fund_managers, leaving an agent to infer that this is the search/list variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the query semantics and the note that lifecycle_state RAISING or FORMING is the live fundraising read, plus the feeder exclusion default. There is no explicit when-to-use versus sibling tools like get_re_fund_vehicle or search_re_fund_managers, so an agent must infer the search/list role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_relationshipsPublished edges on one entityRead-onlyIdempotentInspect
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. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| detail | No | compact: the id, name, type, up to five key facts with their citation and counts of the related rows by type, under 2 KB. research (the default): the full answer. | research |
| dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| rel_type | No | ||
| current_only | No |
search_re_lps_by_managerWhich LPs committed to a real estate manager's funds, as pairsRead-onlyIdempotentInspect
Allocator x manager pairs from published LP commitments: distinct funds, total committed, first and latest commitment, re-up, the latest funds with their source. manager is a name family ('Blackstone') or a dfx:ref id; omit it with min_funds=2 for the LPs that repeatedly back the same manager. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| manager | No | ||
| min_funds | No |
search_riaSearch RIA firms, advisors and private fundsARead-onlyIdempotentInspect
Registered investment advisers (Form ADV: RAUM, clients by type, employees, advisors on IAPD, private funds, class such as INDEPENDENT_WEALTH or WIREHOUSE), registered advisors (IAPD: current firm, registration history counts, exams, designations) and the private funds advisers report, as compact cards with dfx:ria: ids. query takes a name, a firm CRD number, an SEC file number (801-...), an individual CRD (with entity_type=advisor) or an SEC private fund id (805-...). Filter firms by state, class, wealth managers only, RAUM band, advisor headcount or private funds; advisors by firm CRD or state; funds by firm CRD or type. Every row names its fact class (reported: filed on Form ADV; fact_from_registration: IAPD registration dates; derived: a rule or arithmetic over filed inputs). RAUM double counts affiliates; no advisor book size exists or is estimated; the IAPD tape is survivor-biased before 2026-09-15. Nothing here is predictive. Not for private equity or venture managers as investors (search_pe_firms, search_vc_firms), though the same adviser may appear on both graphs (get_entity same_as). ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| sort | No | ||
| limit | No | ||
| query | No | Name contains, or an identifier (firm CRD, 801- SEC number, individual CRD, 805- fund id). | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| firm_crd | No | For advisors and funds: the adviser's CRD. | |
| fund_type | No | ||
| firm_class | No | The RIA lane's printed classification of the firm (wirehouses are curated, the rest are rules over Item 5.D shares). | |
| entity_type | No | firm | |
| wealth_only | No | Firms in the six wealth management classes only. | |
| max_raum_usd | No | ||
| min_advisors | No | At least this many advisors on IAPD. | |
| min_raum_usd | No | ||
| include_former | No | Firms include state-registered advisers, former SEC advisers and firms off the roster; default SEC-registered only. | |
| private_funds_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly/idempotent/openWorld/non-destructive), it discloses substantial behavioral context: the entitlement gating (first 5 rows full, rest as locked.count/locked.by_type with no rows), that contact values and decision-maker names are never returned, that every answer reports withheld data in `entitlement` and `locked`, plus data caveats (RAUM double counts affiliates, IAPD survivor bias before 2026-09-15, nothing predictive).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense but front-loads the return shape and identifier format before the usage caveats, and the access boundary is stated crisply. It is a single unbroken block, and the trailing promotional sentence ('Full access: DFX Intelligence, 7 days free...') is not strictly definitional, which keeps it below a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, no-output-schema tool, the description is remarkably complete: it covers what is returned (compact cards with dfx:ria: ids), the fact-class provenance (reported/fact_from_registration/derived), entitlement/locked semantics, and the key data limitations an agent needs before trusting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema coverage, the description compensates well: it defines the accepted `query` formats (name, firm CRD, 801- SEC number, individual CRD with entity_type=advisor, 805- fund id) and groups the filters by entity type (firms by state/class/wealth_only/RAUM band/headcount/funds; advisors by firm CRD/state; funds by firm CRD/type). It does not address city, limit/sort/cursor, or every enum, so it stops short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (search RIA firms, advisors and private funds) and enumerates the concrete data classes returned (Form ADV RAUM, clients by type, IAPD registration history, private funds). It explicitly distinguishes itself from siblings by naming search_pe_firms and search_vc_firms as the tools for private equity/venture managers as investors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-not guidance ('Not for private equity or venture managers as investors (search_pe_firms, search_vc_firms)'), explains the overlap case ('the same adviser may appear on both graphs (get_entity same_as)'), and documents the accepted query input formats for routing among entity_type values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_advisor_movesAdvisor firm changes as registration datesARead-onlyIdempotentInspect
Advisors who left one firm and registered at another: the person, from and to firms with class, the registration end and begin dates, the gap, and the move type (WIREHOUSE_TO_RIA, IBD_TO_RIA, RIA_TO_RIA, ...). Filter by from firm, to firm, advisor, move type and date window. Bulk corporate re-registrations (an acquirer re-registering a roster on one day, 99,737 rows) are EXCLUDED unless include_bulk; departures with no registered destination are excluded unless include_departures. A move is two dates on IAPD, never a statement about why. Not a prediction of who will move. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ISO date; registration ended on or after. | |
| until | No | ISO date. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| move_type | No | ||
| to_dfx_id | No | An RIA graph id of the form dfx:ria:<uuid> (from search_ria, resolve_name or search_entities), or the firm's CRD number as a string. | |
| from_dfx_id | No | An RIA graph id of the form dfx:ria:<uuid> (from search_ria, resolve_name or search_entities), or the firm's CRD number as a string. | |
| include_bulk | No | ||
| advisor_dfx_id | No | A dfx:ria: advisor id or an individual CRD. | |
| include_departures | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses substantial behavior: default row exclusions (99,737-row bulk acquisitions, departures with no destination), the entitlement model (unpaid returns first 5 rows plus locked.count/locked.by_type counts, record pages name subject and only first 3 related names per section), and what is permanently withheld (contact values, decision-maker names). This is exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core what/fields come first, then filters, then exclusions, then access rules. The trailing promotional line ('Full access: DFX Intelligence, 7 days free at...') is the one sentence that does not help an agent invoke the tool, but everything before it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully covers the return shape (locked.count, locked.by_type, entitlement, per-record related-name truncation) and the access tiers that determine what an agent can actually expect back. For a 10-parameter, entitlement-gated tool this is complete enough to call correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the description meaningfully compensates: it explains from_dfx_id/to_dfx_id as the from/to firm filters, advisor_dfx_id, move_type (with concrete examples), and the date window. It does not clarify connected semantics such as limit being capped at 25 or how cursor interacts with since/until, leaving those to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource: advisors who left one firm and registered at another, and enumerates the exact fields returned (person, from/to firms with class, end/begin dates, gap, move type). It is clearly distinguishable from siblings like search_ria_move_indicators and search_ria_changes, and even states what it is not ('not a prediction of who will move').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the filterable dimensions (from firm, to firm, advisor, move type, date window) so an agent knows what queries this tool answers, and clarifies the default exclusion of bulk re-registrations and destination-less departures with the include_bulk/include_departures overrides. It does not explicitly name a sibling alternative for 'who might move next' beyond the negative 'not a prediction' phrasing, so routing guidance is clear but not fully enumerated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_anomaliesADV anomalies against comparable advisersARead-onlyIdempotentInspect
Reported values and filing-to-filing changes that stand out against a peer group (segment by RAUM band, 30 or more advisers), each with the metric, current and prior value, peer median, percentile, robust deviations (median absolute deviation, floored), the filing date, a sentence saying why it triggered, a confidence and a severity. Families: STATIC (2nd/98th percentile and 3 robust deviations), TEMPORAL (a change between the last two annual amendments beyond a base-size threshold and in the top or bottom decile of peer changes), COMBINATION (two changes together: RAUM down with advisors stable, a control person gone and departures doubled, a firm absorbed and its advisors gone within a year), DATA_QUALITY (likely filing errors, excluded unless asked for). Filter by family, anomaly_type, class, state, severity, minimum RAUM, firm CRD or date. A place to look, never a conclusion; there is no master score. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| since | No | Filing date on or after, ISO. | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| family | No | ||
| firm_crd | No | ||
| severity | No | ||
| firm_class | No | ||
| anomaly_type | No | One anomaly type, e.g. RAUM_DOWN_25_PERCENT, ADVISOR_COUNT_DROP, VERY_HIGH_RAUM_PER_ADVISOR, ACQUIRED_ADVISORS_LEFT_WITHIN_A_YEAR. | |
| min_raum_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, non-destructive, closed-world); the description goes well beyond by disclosing the entitlement model, the exact truncation behavior without a paid plan (first 5 rows plus locked.count/locked.by_type), and the fields permanently withheld (contact values, decision-maker names). It also explains that DATA_QUALITY rows are excluded unless requested. This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is largely front-loaded and purposeful, but it is delivered as one dense run-on passage mixing definition, family taxonomy, access rules and a promotional plan URL. The marketing sentence ('7 days free at https://...') and the sheer density reduce scannability for an agent trying to extract the call-relevant facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain returns, and it does: it enumerates the per-anomaly fields (metric, current/prior value, peer median, percentile, robust deviations, filing date, trigger sentence, confidence, severity). It also covers the locked/entitlement shape of every answer, leaving nothing essential for calling the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 36%, the description has to carry weight, and it does: it maps user intent onto family, anomaly_type, firm_class ('class'), state, severity, min_raum_usd ('minimum RAUM'), firm_crd and date, and explains what the family enum values mean. It does not cover the limit cap of 25 or the meaning of the sort options, which are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource (surfacing reported values and filing-to-filing changes that deviate from a peer group), names the peer-group composition rule (RAUM band, 30+ advisers), and enumerates the four anomaly families. This clearly distinguishes it from siblings like search_ria_changes and changes_since, which lack the peer-relative, outlier framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong operating context ('a place to look, never a conclusion; there is no master score') and lists the filterable dimensions (family, anomaly_type, class, state, severity, minimum RAUM, CRD, date). What it lacks is explicit routing to sibling tools for non-peer-relative change queries, so an agent gets clear context but no stated alternatives/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_changesWhat changed on the RIA graph since a timestampARead-onlyIdempotentInspect
The RIA event tape by OBSERVATION time: advisor firm changes and departures, team lift-outs and absorptions, successions, RAUM and headcount changes, control persons joining or leaving, first ADV filings, roster exits, each with occurred_at (the registration or filing date), observed_at (when DFX wrote it), fact class, magnitude, previous and new state, evidence and source. since is an ISO timestamp; poll with the next_since the answer returns. The historical backfill was written on 2026-09-15, so a since before that day returns history in bulk; the Data Factory's first-seen accrual for RIA begins when its event arm exists. Filter by event type, signal family (people, ownership, firm, consolidation) or subject id. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | Yes | ISO timestamp, exclusive lower bound on observed_at. | |
| until | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| dfx_id | No | A dfx:ria: firm, advisor or fund id; events where it is the subject or the related entity. | |
| event_type | No | ||
| signal_family | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safe-read profile, but the description goes well beyond: it discloses the free-tier truncation (first 5 rows, locked.count/by_type), that contact values and decision-maker names are never returned, and that every answer self-reports withholdings via `entitlement` and `locked`. It also states the observation-vs-occurrence time model and backfill accrual start.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose well, but the opening sentence is a dense run-on enumeration and the closing entitlement/promo sentence (free-trial URL) is commercial copy rather than operational guidance. It is serviceable but padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full return-value burden and does so: it names the fields (occurred_at, observed_at, fact class, magnitude, previous/new state, evidence, source), the pagination token `next_since`, and the entitlement/locked reporting. An agent has enough to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 43%, so the description must carry weight, and it does for `since` (observation-time lower bound plus backfill behavior) and the filter axes (event type, signal family, subject id). However it never clarifies `limit`, `until`, or `cursor`, leaving part of the low-coverage gap unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: an event tape of RIA graph changes keyed by observation time, and enumerates the event kinds (departures, lift-outs, successions, RAUM/headcount changes, control persons, first ADV filings). This clearly distinguishes it from narrower siblings like search_ria_advisor_moves and search_ria_ma.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage mechanics: `since` is an ISO timestamp, poll with the returned `next_since`, and a pre-2026-09-15 `since` returns bulk backfill. It also explains how to filter. It stops short of explicitly saying when to prefer this over the sibling `changes_since` or the narrower RIA-move tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_fundsPrivate funds an adviser reports on Form ADVARead-onlyIdempotentInspect
Private funds from Form ADV Schedule D 7.B.(1): fund name, SEC fund id (805-...), type, gross asset value with its as-of date (reported gross assets, NOT fund size or commitments), owners, minimum investment, ownership percentages, 3(c)(1) or 3(c)(7), master or feeder, first and last reported, status (reported or dropped) and the Form D file number where the adviser gave one. With include_custodians, each fund's custodians (question 25) with city, state, SEC number and LEI. Filter by adviser (dfx:ria: id or CRD), name, type, status, state, Form D number or minimum gross assets. Fund reporting after 2024-12-31 is roster counts only. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | Fund name contains, an 805- fund id, or a 021- Form D file number. | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| status | No | reported: on the adviser's latest filing; dropped: no longer reported. | |
| fund_type | No | ||
| firm_dfx_id | No | An RIA graph id of the form dfx:ria:<uuid> (from search_ria, resolve_name or search_entities), or the firm's CRD number as a string. | |
| min_gav_usd | No | ||
| form_d_file_number | No | ||
| include_custodians | No | Attach custodian rows to each fund on the page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: exactly what is withheld under the free tier (first 5 rows, locked counts, never contact values or decision-maker names), the `entitlement`/`locked` reporting, and the post-2024 reporting cutoff. This is exactly the extra behavioral detail annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well front-loaded: returned fields first, then filters, then access constraints. The closing marketing sentence and plan URL are the only padding, but they encode a real usage constraint for the free tier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing return values — and it does, listing every fund field plus the custodian rows. Combined with the entitlement rules and data cutoff, an agent has everything needed to call and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 55%, and the description compensates by clarifying the high-value filters: adviser id vs CRD, gross asset value meaning ('reported gross assets, NOT fund size or commitments'), status semantics, and include_custodians behavior. It does not explain sort, limit, or cursor, so it falls just short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (private funds from Form ADV Schedule D 7.B.(1)) and enumerates the returned fields, so it is immediately distinguishable from siblings like search_pe_funds, search_vc_funds, or get_ria_firm. An agent can tell what it retrieves and at what granularity without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete filter dimensions (adviser dfx id or CRD, name, type, status, state, Form D number, min gross assets) and a temporal caveat ('fund reporting after 2024-12-31 is roster counts only'), which frames when it is useful. It never names an alternative tool or a when-not condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_maRIA acquisitions and exits as filed factsARead-onlyIdempotentInspect
RIA M&A from three factual sources, each labelled: successions the acquirer swore on Form ADV Item 4 (succession); firms whose advisors re-registered whole at one other firm (absorbed, a rule over registration dates); and firms that left the SEC adviser roster (roster_exit; the reason is not stated). Each row carries the target and, where there is one, the acquirer as dfx:ria: ids, the date, headline, advisor count or RAUM as magnitude, and the source. Filter by kind, acquirer or target CRD, firm id, date window or minimum advisors. Absorbed also returns acquisitions measured from registration history (a succession, half the firm in one 14-day chain, or 25 or more advisors in one month) with the advisors transferred, how many are still registered through the acquirer at 30, 90, 182 and 365 days, and the pooled retention of similar-size deals. No press, no rumours, no predictions. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | all | |
| limit | No | ||
| since | No | ISO date. | |
| until | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| target | No | The acquired firm's name; every adviser CRD carrying it (whole words) is included. | |
| acquirer | No | The acquirer's name; every adviser CRD carrying it (whole words) is included. | |
| target_crd | No | ||
| firm_dfx_id | No | A dfx:ria: firm id or CRD on either side of the event. | |
| acquirer_crd | No | ||
| min_advisors | No | Absorbed only: at least this many advisors moved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive) and the description adds substantial behavior beyond them: entitlement-gated returns, the 5-row cap with locked.count/locked.by_type, redaction of contact values and decision-maker names, and the `entitlement`/`locked` withholding fields. This is exactly the kind of access/return behavior an agent needs and cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core facts are front-loaded and dense, appropriate for a complex 11-parameter tool, but the closing sales pitch ('Full access: DFX Intelligence, 7 days free at https://dfxintel.com/...') does not help an agent select or invoke the tool and the run-on sentences reduce scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema and 11 params, the description explains what each row carries (target/acquirer dfx:ria: ids, date, headline, advisor count or RAUM, source), what the absorbed kind additionally returns (transfer counts, retention at 30/90/182/365 days, pooled retention), and how entitlement alters results. An agent has enough to call it and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 55% schema coverage and 11 params, the description compensates by naming the filter dimensions (kind, acquirer/target CRD, firm id, date window, minimum advisors) and scoping min_advisors to 'Absorbed only'. It adds meaning beyond the schema but does not fully document every parameter (e.g. cursor semantics, target vs acquirer name matching).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (RIA M&A) and enumerates the three distinct factual kinds (succession, absorbed, roster_exit) with what each means, so an agent can tell it apart from siblings like search_ria_changes or search_ria_advisor_moves. It also explicitly delimits scope with 'No press, no rumours, no predictions.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when this applies (filed M&A facts, three source types) and an exclusion ('no press, no rumours, no predictions'), plus field-level scoping like 'Absorbed only' for min_advisors. It does not name a competing sibling tool or say when to prefer an alternative, so it stops short of the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_move_indicatorsAdvisors showing observed signs they might move, with what was observed and whenARead-onlyIdempotentInspect
The observed pre-move indicators DFX holds, per advisor: a prior co-move teammate or the team's senior member left the firm (with who and where to), a fifth or more of the advisor's branch or practice left in six months, a Series 65 or 63 added outside licensing classes, or the advisor owns part of a newly filed adviser. Each indicator is dated, names its source (IAPD registration spans or Form ADV) and carries the back-test that admitted it: the 365-day move rate with and without it, the lift with its 95% interval (only lower bounds of 1.15 or more are served) and the lift inside the move model's deciles. Filter by firm (dfx:ria: id, CRD or name; a name covers every CRD that carries it), advisor, office city, state, kind or date; firm-scoped answers add counts by office and kind. These are indicators, never a forecast that a person will move, and most advisors carrying one do not move within a year. Use this for 'who shows signs of moving', 'who else in that office or team might leave', 'flight risk'; use search_ria_advisor_moves for moves that already happened. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| firm | No | The firm's name or part of it; every adviser CRD with that name is included. | |
| kind | No | ||
| sort | No | rank: the recruiter queue's order (default); recent: latest indicator first. | |
| limit | No | ||
| since | No | ISO date; the latest indicator observed on or after. | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| office | No | Branch city, e.g. Providence or La Jolla. | |
| firm_dfx_id | No | A dfx:ria: firm id or the firm's CRD. | |
| advisor_dfx_id | No | A dfx:ria: advisor id or an individual CRD. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it discloses the entitlement gating (5-row preview plus locked.count/locked.by_type without a paid plan), permanently withheld fields (contact values, decision-maker names), the 95% lift threshold of 1.15, and that entitlement/locked fields report what was withheld. This is unusually rich operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: indicator taxonomy first, then filters, then the usage routing, then access limits. It is long, and the closing plan/pricing line reads as promotional, but nearly every sentence carries selection-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly supplies return-shape detail: dated indicators with sources and back-test stats, counts by office and kind for firm-scoped answers, and the locked/entitlement withholding structure. An agent can call this and interpret the response without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 80%, but the description adds real meaning: firm/name matching covers every CRD carrying that name, firm_dfx_id accepts dfx:ria: ids or CRDs, and the indicator kinds are given domain semantics that the bare enum cannot convey. Minor gap: office/state/since/cursor semantics rest on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (observed pre-move indicators) and enumerates each indicator type explicitly — teammate/senior departure, branch attrition, added Series 65/63, part-ownership of a newly filed adviser — so an agent knows exactly what is and isn't returned. It also explicitly distinguishes itself from the sibling search_ria_advisor_moves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering queries ('who shows signs of moving', 'flight risk', 'who else in that office might leave') and names the alternative tool for the adjacent task (search_ria_advisor_moves for completed moves). It also states the crucial framing caveat that these are indicators, not forecasts, which prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_officesBranch-level advisor movementARead-onlyIdempotentInspect
Offices (a firm and an IAPD branch city) ranked by departures, joins, net flow, departure rate, team lift-outs out or in, breakaways in formation (advisors at the office who own a newly registered adviser), or size, with advisors today and 12 and 36 month flows. Filter by firm CRD, state, class and minimum advisors. From branch city and state with registration dates; street addresses are never read. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| firm_crd | No | ||
| firm_class | No | ||
| min_advisors | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring this a safe read, the description adds substantial behavioral context beyond them: the entitlement model (first 5 rows then a count by type via locked.count/locked.by_type), field-level redaction (contact values and decision-maker names never returned, only types/counts), the guarantee that street addresses are never read, and the `entitlement`/`locked` self-disclosure. This is exactly the kind of access and data-exposure detail annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the resource and ranking options before the access caveats, and every clause carries information the schema lacks. The sentences are long and densely packed, which slightly hurts readability, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 7 loosely documented parameters, the description does the heavy lifting: it defines the record, the sort semantics, the filters, and the entitlement/redaction behavior. The main remaining gap is pagination mechanics (how `cursor` interacts with the 5-row lock), but overall it is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (29%), so the description must compensate, and it does: it enumerates the sort keys and, crucially, explains what they mean (departures, joins, net flow, departure rate, team lift-outs, breakaways in formation), which the bare enum does not. It also maps the firm CRD / state / class / minimum advisors filters. It omits any explanation of limit/cursor pagination, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource and defines the unit precisely as 'Offices (a firm and an IAPD branch city)', distinguishing branch-level granularity from the firm-level siblings like get_ria_firm. It lists the ranking dimensions, so an agent knows exactly what it returns. It stops short of naming a specific alternative to route away to, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Filter guidance is present ('Filter by firm CRD, state, class and minimum advisors'), which implies how to narrow results, but there is no explicit when-to-use vs when-not, and no routing to neighbors like search_ria_advisor_moves, search_ria_teams, or get_ria_trends. Usage is left to inference from the resource description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_outside_businessWhat advisors do outside their firmARead-onlyIdempotentInspect
Outside-business entries from the advisor's own Form U4 disclosure, reviewed extraction: the company, what it does and on what basis, the advisor's role (owner, director, partner...), ownership where stated, start and end dates, materiality and why it matters, and the advisor's own words as evidence, beside the advisor's name and current firm. Every row is disclosure_status DISCLOSED_OBA (a corresponding disclosed OBA was found); DFX never labels anything undisclosed. Served for the reviewed cohort (about 2,500 advisors), so a count is a count of that cohort, not of the industry. Filter by company name, category, category group, materiality, investment related, role, start date, current only, or the advisor's current firm CRD or branch state. Outside business does not predict a move in general; the caveats name the two measured exceptions. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| sort | No | ||
| limit | No | ||
| query | No | Company name contains. | |
| state | No | Two-letter US state code. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| category | No | ||
| firm_crd | No | The advisor's current firm CRD (or a dfx:ria: firm id). | |
| materiality | No | ||
| current_only | No | Only entries with no end date. | |
| started_since | No | ISO date; the disclosed start date on or after. | |
| category_group | No | ||
| investment_related | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations: it discloses the entitlement behavior in detail (unpaid callers get 5 full rows plus a locked count/by_type, never the rest), states that contact values and decision-maker names are never returned, explains that withholding is always reported in `entitlement` and `locked`, and declares that disclosure_status is uniformly DISCLOSED_OBA so nothing is ever labeled undisclosed. This is exactly the kind of operational context an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core content is front-loaded in the first sentence, but the description is a single dense block of run-on clauses, and the entitlement/plan pitch plus the 'does not predict a move' aside dilute the operational signal. Much of it earns its place, yet it could be restructured into scannable statements without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, no-output-schema search tool, the description covers the return shape (what each row contains), cohort scope, filter semantics, and entitlement limits, and the annotations already carry the safety profile. Remaining gaps are minor: pagination/sort behavior and the limit ceiling are only implicit, but nothing critical to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 46%, but the description compensates by naming nearly every filter parameter in plain language and giving each a meaningful mapping (company name contains, category, category group, materiality, investment related, role, start date, current only, current firm CRD or branch state). Sort, limit, and cursor are left to the schema alone, which is acceptable given the cursor is documented there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States precisely what the tool returns: outside-business entries from the advisor's own Form U4 disclosure, with the row fields enumerated (company, basis, role, ownership, dates, materiality, verbatim evidence, name and current firm). It implicitly separates itself from the single-record sibling by describing list-level behavior ('a list returns its first 5 rows', 'a record names its subject'). An agent knows this is the cohort-wide list/search of OBA entries, not a per-advisor lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description enumerates the available filter axes (company, category, category group, materiality, investment related, role, start date, current only, firm CRD, branch state), which implies how to narrow a search, and scopes the data to the ~2,500-advisor reviewed cohort. However, it never says when to reach for this tool versus siblings like get_ria_outside_business or search_ria_advisor_moves, and the cryptic aside that outside business 'does not predict a move in general; the caveats name the two measured exceptions' gestures at a distinction without resolving it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_practicesScreen advisers by practice archetype, operating metrics and flagsARead-onlyIdempotentInspect
SEC-registered advisers screened on the practice layer: by archetype (HNW_WEALTH_MANAGER, UHNW_PRIVATE_WEALTH, MASS_AFFLUENT_RIA, INSTITUTIONAL_ASSET_MANAGER, RETIREMENT_PLAN_ADVISER, MULTI_FAMILY_OFFICE_LIKE, RIA_WITH_PRIVATE_FUNDS, RIA_WITH_HEAVY_ALTERNATIVES, BANK_AFFILIATED, BROKER_DEALER_AFFILIATED, PE_BACKED, CONSOLIDATOR, INDEPENDENT_BOUTIQUE, MULTI_OFFICE_GROWTH_PLATFORM, SOLO_SMALL_TEAM, OCIO_INSTITUTIONAL_ADVISORY, DUAL_WEALTH_AND_ASSET_MANAGER, WRAP_PROGRAM_SPONSOR, PLANNING_LED_PRACTICE; each a printed rule), class, RAUM band, advisors, one-year RAUM growth, RAUM per advisor, private-client and HNW shares, private funds, and flags (PE owner on Schedule A, bank owner, custody, performance fees, wrap, pension consulting, financial planning), sorted by RAUM, growth, RAUM per advisor, advisors, clients per advisor, average HNW client or headcount growth. Every metric is derived from filed fields with its formula in get_ria_practice; no book size, no revenue. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| wrap | No | ||
| limit | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| custody | No | ||
| archetype | No | ||
| pe_backed | No | ||
| bank_owned | No | ||
| firm_class | No | ||
| max_raum_usd | No | ||
| min_advisors | No | ||
| min_raum_usd | No | ||
| performance_fees | No | ||
| min_private_funds | No | ||
| financial_planning | No | ||
| min_hnw_of_private | No | ||
| min_raum_growth_1y | No | 0.2 means at least 20 percent. | |
| pension_consulting | No | ||
| min_raum_per_advisor | No | ||
| min_private_client_share | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotent, non-destructive, closed-world), the description discloses substantial behavior: without a paid plan a list returns only the first 5 rows plus locked.count/locked.by_type, records expose subject plus 3 related names per section, and contact values and decision-maker names are never returned. It also states that every answer surfaces what was withheld via `entitlement` and `locked`, which is exactly the kind of entitlement/response context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the ACCESS block is well organized, but the description reprints all 19 archetype enum values that already exist verbatim in the schema, which is pure duplication. The result is a dense single block whose length is partly unearned. Structure is sensible (purpose -> metrics -> access) but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter screening tool with no output schema, the description covers a lot: what can be filtered, how results are sorted, and the shape of what comes back under both free and paid tiers. It stops short of describing record-level fields, but the entitlement/locked contract is clear enough for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 10% schema description coverage across 20 parameters, the description must carry the load, and it largely does: it maps categories to filters (archetype, class, RAUM band, advisors, growth, private funds, shares, and named flags such as PE owner on Schedule A, custody, wrap, performance fees, pension consulting, financial planning). It also constrains meaning ('no book size, no revenue') and notes each metric is filed-field derived. A few params (cursor, limit, min_hnw_of_private, min_private_funds) get no added detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('SEC-registered advisers screened on the practice layer') and enumerates the exact screening dimensions (archetype, class, RAUM band, advisors, growth, flags), making its scope unambiguous. It references the sibling get_ria_practice as the place where metric formulas live, giving partial sibling differentiation, though it never explicitly contrasts itself with search_ria or search_ria_teams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the enumeration of available screens and the pointer to get_ria_practice for formulas, so an agent can infer the tool is for practice-layer screening. However, there is no explicit when-to-use/when-not guidance against alternatives like search_ria or search_ria_teams. The detailed ACCESS paragraph is behavioral, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ria_teamsAdvisors who moved togetherARead-onlyIdempotentInspect
Teams: clusters of advisors who left the same firm for the same firm from the same branch state within a 14-day chain, with member count, dates, spread, the from firm's headcount that day and the share that left (an estimate on a survivor-biased tape), whether a succession was filed, and the kind as a printed rule: TEAM_LIFT_OUT (2 to 49), LARGE_TRANSFER (50 or more), FIRM_ABSORBED (half or more of the firm, or a succession naming it), CHANNEL_CHANGE (the two CRDs are one enterprise: same name, same 75%+ owner around the move, or one name a prefix of the other; enterprise_evidence says which; left out unless asked for by kind). Filter by from or to firm, kind, move type, state, minimum members or date; include_members lists the people. A team is a rule over dates, never a claim about intent. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| sort | No | ||
| limit | No | ||
| since | No | ISO date; first departure on or after. | |
| state | No | Two-letter US state code. | |
| until | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| move_type | No | ||
| to_dfx_id | No | An RIA graph id of the form dfx:ria:<uuid> (from search_ria, resolve_name or search_entities), or the firm's CRD number as a string. | |
| from_dfx_id | No | An RIA graph id of the form dfx:ria:<uuid> (from search_ria, resolve_name or search_entities), or the firm's CRD number as a string. | |
| min_members | No | ||
| include_members | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent profile, and the description layers substantial extra behavior on top: entitlement gating (first 5 rows plus locked.count/by_type without a paid plan), permanent withholding of contact values and decision-maker names, and the fact that every answer reports what it withheld in `entitlement` and `locked`. This is exactly the kind of context annotations cannot supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with the core definition, but the opening sentence is an extremely long run-on with nested parentheticals, and the access paragraph is dense. Most sentences carry real information, but the structure hurts readability and the density borders on unparseable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-param tool with no output schema and low schema coverage, the description carries the return-shape burden well, listing the fields a team carries (member count, dates, spread, headcount, share, succession, kind) and fully covering access limitations. It is nearly complete, with only pagination/sort behavior left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 42% schema description coverage across 12 params, the description compensates well: it explains the from/to firm filters, kind, move type, state, min members/date, and that include_members 'lists the people'. It leaves sort, limit and cursor unexplained, so it is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines the resource precisely ('clusters of advisors who left the same firm for the same firm from the same branch state within a 14-day chain') and enumerates the kind taxonomy, so an agent knows exactly what a 'team' is and that this is a rule over dates rather than a claim of intent. It never names a sibling (e.g. search_ria_advisor_moves or search_ria_move_indicators) to differentiate the unit of analysis explicitly, keeping it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives filtering guidance ('Filter by from or to firm, kind, move type, state, minimum members or date') and one behavioral routing rule ('left out unless asked for by kind'), which implies when to use it. But there is no explicit statement of when to prefer this over the many advisor-move/indicator siblings, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_service_provider_sponsorsWhich providers a sponsor uses, or which sponsors a provider servesARead-onlyIdempotentInspect
Provider and sponsor pairs from announced independent sponsor transactions. Give a sponsor (name or dfx:isi: id) to list the law firms, banks, accountants and QoE providers it has used, each with deals together, first and last deal and the roles; or give a provider to list the sponsors it has served. family narrows to one kind of provider (legal, investment_banking, accounting, qoe ...). rank_for_sponsor 1 means the provider is that sponsor's most used in the family. Returns dfx:isi: ids for both sides. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| family | No | ||
| sponsor | No | Sponsor name or dfx:isi:<uuid>. | |
| provider | No | Provider name or dfx:isi:<uuid>. | |
| min_deals | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds genuinely non-obvious behavior: unentitled access returns the first 5 rows plus locked.count/locked.by_type and never the rows, contact values and decision-maker names are stripped to types and counts, and every answer discloses withheld data in entitlement/locked. That is exactly the kind of behavioral disclosure structured fields cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior and the two query directions are front-loaded, and the scoping details are compact. The closing entitlement/pricing block is several sentences long and partly promotional, though it does carry real access constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so well: it states that dfx:isi: ids are returned for both sides and describes the shielded fields. Gaps remain around pagination (cursor/limit interplay, max 50) and the unexplained rank_for_sponsor reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the description covers sponsor/provider (name or dfx:isi: id), family values and the meaning of rank_for_sponsor. However, rank_for_sponsor does not appear in the input schema at all, and limit, min_deals and cursor get no explanation in either the description or the schema, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (provider↔sponsor pairs from announced independent sponsor transactions) and the two directions of the query, so an agent knows precisely what it returns. It stops short of differentiating against close siblings such as search_sponsor_capital_providers, rank_service_providers or get_service_provider, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the two invocation modes ('give a sponsor ... or give a provider ...') and how family and rank_for_sponsor qualify the result, which is clear contextual guidance. It never says when not to use it or which sibling to prefer, and with many overlapping sponsor/provider tools in the list that omission matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_signalsWhat matters now: the published signal cardsARead-onlyIdempotentInspect
The governed signal layer the site ranks by (actionable now, public or sellable only): each card names its family, the subject with its dfx id, what changed, why it matters, why now, the falsifier, the dates, the exposure in dollars with its basis, a rank, and the audience (who is affected and how) with their dfx ids. Reachability is a count only: how many named people are on the card and, for each organisation, whether a verified contact route exists and how many. Filter by family, domain, subject id, since date or minimum exposure. Not a prediction: every card names the observation it rests on. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Subject name contains. | |
| since | No | ISO date; signals that occurred on or after. | |
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| domain | No | ||
| family | No | A signal family key, e.g. credit.maturity_approaching_12m, credit.sponsor_lender_relationship, credit.tranche_markdown_5pt, credit.tranche_markdown_intensified, credit.pik_added_or_increased, debt.maturity_window_12m. | |
| subject_dfx_id | No | A DFX id (dfx:<graph>:<uuid>) or a bare real estate UUID. | |
| affected_dfx_id | No | A dfx id on the AUDIENCE side: signals where this entity is affected (a lender, sponsor, firm). | |
| include_audience | No | ||
| min_exposure_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only/idempotent/non-destructive; the description goes well beyond by disclosing entitlement truncation (first 5 rows in full plus locked.count and locked.by_type, never the rows), that contact values and decision-maker names are never returned, and that every answer reports what it withheld in `entitlement` and `locked`. This is exactly the kind of behavioural context structured fields cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the card definition, then filtering, then access rules, which is a sensible order. However, the card-contents enumeration is a long comma-chained list and the closing promotional line ('7 days free at https://...') does not help an agent invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, no-output-schema, complex tool, the description covers the return shape (card fields), the entitlement/locked contract, and the access tiers, which is what an agent most needs. It is only thin on how the audience-side parameter relates to the card's audience section.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so several parameters are self-documented (query, since, cursor, family, subject_dfx_id, affected_dfx_id). The description echoes the filterable dimensions but adds no syntax or format detail for limit, cursor, include_audience, or affected_dfx_id, so it neither compensates for the gap nor exceeds the schema meaningfully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('the governed signal layer the site ranks by', published signal cards) and enumerates what each card contains, so an agent can tell this is a signal-card search distinct from raw ledgers like get_forward_signal_ledger. It does not explicitly name a sibling to differentiate against, and the framing is heavy on domain jargon, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Filter by family, domain, subject id, since date or minimum exposure' tells the agent what it can narrow on, but never states when this tool should be chosen over near neighbours such as why_now, who_should_care, changes_since, or get_forward_signal_ledger. No when-not or alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sponsor_capital_providersCapital providers that fund independent sponsorsARead-onlyIdempotentInspect
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. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | ||
| state | No | Two-letter US state code. | |
| sector | No | Free text against the mandate, strategy and description. | |
| provider_type | No | sbic: SBA-licensed funds. family_office: providers that are the same entity as a family office on the family office graph (shared CRD, CIK or EIN), never a name match. | |
| sbic_licensed | No | ||
| min_fund_size_usd | No | ||
| making_new_investments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds substantial behavioral context they cannot convey: the exact entitlement model (first 5 rows plus locked counts by type without a paid plan, never the rows), what is never returned (contact values, decision-maker names), and the entitlement/locked fields on every answer. This is rich disclosure well beyond structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and returned fields, then the access/entitlement behavior, which is genuinely useful. The closing marketing line ("7 days free at...") and the redundant "Every answer says what it withheld in entitlement and locked" sentence cost a point but do not obscure the core.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by listing the fields returned and the entitlement/locked fields, plus the full access model. It is nearly complete for a 9-param optional-filter search; only sort/limit/query semantics are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% across 9 parameters. The description partly compensates by enumerating the filters (state, type, sector text, SBIC status, fund size) and noting that fund size and average investment are "kept apart," but sort, limit, query and making_new_investments receive no added meaning. Partial compensation warrants a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search capital providers that fund independent sponsors) and enumerates the entity types and returned fields, so the agent knows exactly what it will get. It does not explicitly name or route away from near siblings like search_independent_sponsors or rank_sponsor_capital, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Filter by state, type, sector text, SBIC status or fund size" implies when the filters are relevant, but there is no explicit when-to-use statement, no when-not-to-use, and no named alternative to route to. Usage is left to inference from the purpose sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sponsor_dealsAnnounced sponsor transactionsARead-onlyIdempotentInspect
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. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Matches the sponsor's or the target's name. | |
| since | No | ||
| state | No | Two-letter US state code. | |
| txn_type | No | ||
| target_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| sponsor_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the bar is lower, yet the description goes well beyond them: it discloses the entitlement model (first 5 rows plus locked.count/by_type without a paid plan, never the rows), the permanent withholding of contact values and decision-maker names, and the `entitlement`/`locked` response fields. This is exactly the kind of gating and data-withholding context an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the filter list, then the ACCESS caveat — a logical order with no filler. The entitlement sentence is dense but every clause (row caps, counts, withheld contact data, response fields) carries distinct operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, output-schema-less search tool, the description supplies what the structured data cannot: entitlement-gated return behavior, the shape of partial results, and the fields that signal withholding. An agent has enough to call it and to interpret the response without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 57%, so the schema documents some but not all parameters (e.g. since and txn_type carry no inline description). The description compensates by naming the filter dimensions the caller can use, mapping them to the query/state/txn_type/since parameters, though it adds no format or syntax detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (announced acquisitions, recapitalisations and exits by independent sponsors) and enumerates the returned facets (sponsor, target, dates, EV range, structure, parties, source), which cleanly separates it from siblings like search_pe_transactions and search_isi_opportunities. An agent can identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lists the filterable dimensions (sponsor, target, type, state, since-date, name text) which implies how to narrow a query, but never states when this tool should be chosen over adjacent ones such as search_pe_transactions or search_isi_opportunities, nor any exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sponsor_lenderWhich lenders finance which sponsorsARead-onlyIdempotentInspect
Sponsor x lender pairs counted once per borrower held (the lender is the adviser behind the BDCs, or the BDC where the adviser is not read): borrowers, facilities, principal held, first and latest quarter, new borrowers in the last four quarters against the prior four, quarters since the last new borrower, and the weakest sponsor attribution basis in the pair. Filter by sponsor or lender id. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | borrowers | |
| limit | No | ||
| cursor | No | next_cursor from a previous page of this tool, unchanged. | |
| lender_dfx_id | No | A private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities). | |
| min_borrowers | No | ||
| sponsor_dfx_id | No | A private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnly/idempotent annotations already covering safety, the description goes well beyond by detailing entitlement tiers: free access returns only 5 rows plus locked.count/locked.by_type, contact values and decision-maker names are never returned, and every answer reports withholding via `entitlement`/`locked`. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is a dense run-on enumerating eight metrics before stating the tool's purpose. The access block is justified but verbose; structure could front-load the core action and separate entitlement details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers return fields and access behavior thoroughly. The main gap is that the two undocumented 50% of parameters are not elaborated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, so half the parameters lack descriptions. The description only reinforces the sponsor/lender id filters and hints at sortable metrics; min_borrowers, limit, and cursor get no added explanation, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: sponsor x lender pairs with counted borrower/facility/principal metrics. However, it never distinguishes this from close siblings like get_sponsor_lenders or search_sponsor_capital_providers, leaving overlap ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says 'Filter by sponsor or lender id' but gives no explicit when-to-use vs alternatives or prerequisites. Usage is implied rather than stated, so an agent must infer the scenario from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_subsidised_housingHUD-subsidised projects by place, programme, occupancy and waiting listARead-onlyIdempotentInspect
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 canonical property dfx_id. Free. ONE 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 | Required | Description | Default |
|---|---|---|---|
| city | No | City as HUD records it, case-insensitive exact match, e.g. Akron. | |
| limit | No | Rows to return, 1 to 50. `matched` states the true total regardless. | |
| state | No | Two-letter US state, district or territory code. Unknown codes are refused, not searched. | |
| program | No | Substring of the HUD programme name, e.g. 'Public Housing' or 'Section 8'. | |
| min_units | No | Only projects with at least this many units. | |
| max_occupancy | No | Occupancy percent ceiling, 0 to 100. | |
| min_occupancy | No | Occupancy percent floor, 0 to 100. | |
| min_waiting_months | No | Only projects reporting a waiting list of at least this many months. Excludes projects that report none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive profile, and the description adds substantial non-redundant behaviour: a single annual capture dated 2025-12-31, the meaning of NULL waiting lists as absent disclosure rather than empty queues, the fact that min_waiting_months drops those rows, and the clarification that occupancy is measured against available (not built) units.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded and dense: the resource, row shape and field list come first, then filters, then the crucial snapshot/NULL caveats. Nearly every clause carries a distinct fact; only minor phrasing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description supplies the return fields, the canonical dfx_id join key, the ordering, the snapshot caveat, and the NULL-disclosure behaviour, plus how the answer reports nearby reporting projects. No output schema is needed given this coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% so the schema baseline is 3; the description adds interpretive value beyond it, notably the 'mean' of an occupancy figure (100% of 20 available can be 20 of 50 built) and the consequence of a NULL waiting list for min_waiting_months. It doesn't document every parameter's syntax, so it is an enrichment rather than a replacement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and a precise resource (HUD project-level Picture of Subsidized Households), enumerated with row granularity (one row per project and programme), scope (29,455 projects nationally), and the exact return fields. It is unmistakably distinct from every sibling in the list, none of which touch subsidised housing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operative context: the legal filters (state, city, programme, waiting list, occupancy, units), the sort order, and the free/snapshot nature. It also warns which rows the answer excludes and how the answer compensates. It stops short of naming an alternative tool or an explicit when-not-to-use, so it does not reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_coinvestorsWho a venture firm co-invests withARead-onlyIdempotentInspect
The firms that invest most often beside a named venture firm, from the rounds both were named on: shared portfolio companies, shared rounds, the last and first shared dates, stages of the shared rounds, who led, and sample shared companies. The firm is resolved to its firm group; its own funds, group members and aliases are excluded. Give the firm's name or its dfx:vc: id. Use for 'who co-invests with Bessemer', 'frequent co-investors of a16z'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| firm | No | The firm's name, e.g. 'Andreessen Horowitz'. | |
| limit | No | ||
| since | No | YYYY-MM-DD: keep pairs whose last shared round was observed on or after this date. | |
| dfx_id | No | A venture graph id of the form dfx:vc:<uuid>. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond that: entity resolution to the firm group, exclusion of the firm's own funds/group members/aliases, and a precise account of what a free-tier response withholds (locked.count, locked.by_type, contact values never returned) and where that is disclosed (entitlement, locked).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the returned content before the access caveats, and each clause is informative. The closing promotional line ('Full access: DFX Intelligence, 7 days free at ...') is partly justified as entitlement disclosure but is wordier than the functional content requires.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does so: shared portfolio companies, shared rounds, first/last shared dates, stages, leadership, sample companies, plus the locked/entitlement shape. An agent has enough to call it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents firm, dfx_id and since. The description's 'Give the firm's name or its dfx:vc: id' largely restates the schema descriptions and adds only the resolution-to-firm-group nuance; limit and since semantics are left entirely to the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and relationship ('firms that invest most often beside a named venture firm') plus the exact basis (rounds both were named on) and the fields returned. This is clearly distinct from siblings like search_vc_investments or find_vc_investors, which cover investments or investors rather than the co-investment pair relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation examples ('who co-invests with Bessemer', 'frequent co-investors of a16z') and input guidance ('Give the firm's name or its dfx:vc: id'). It does not say when NOT to use it or name a specific alternative sibling, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_emerging_managersEmerging venture managersARead-onlyIdempotentInspect
Venture managers with an emerging-manager score of 0.5 or more (few funds, recent first vintage, small reported assets), with the score, sector evidence, fund count and first vintage. Filter by sector, state or city, a fund launched since a date (launched_since), or first appearance on the SEC adviser roster since a date (new_adviser_since). Use for 'emerging managers investing in climate', 'emerging managers that launched funds this quarter', 'new venture managers in Massachusetts'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| limit | No | ||
| state | No | Two-letter US state code. | |
| sector | No | ||
| launched_since | No | YYYY-MM-DD | |
| new_adviser_since | No | YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the entitlement model: without a paid plan, lists return only the first 5 rows plus locked.count and locked.by_type, records name subjects and first 3 related names, and contact values/decision-maker names are never returned. It also explains that entitlements are surfaced in `entitlement` and `locked` fields. This is rich behavioral context the annotations cannot provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core definition and filter list are front-loaded and information-dense. The access paragraph is long but material to correct invocation; the trailing promotional URL and free-trial pitch are the one part that does not earn its place, slightly diluting conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description specifies the return contents (score, sector evidence, fund count, first vintage) and the entitlement/locked behavior that shapes responses. Nothing essential for calling the tool correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema coverage and 6 parameters, the description compensates by clarifying the semantics of the distinguishing filters: launched_since (a fund launched since a date) and new_adviser_since (first appearance on the SEC adviser roster since a date), plus sector/state/city filtering. Only `limit` is left undocumented, so coverage is good but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (venture managers) with a precise inclusion criterion (emerging-manager score >= 0.5, defined by few funds, recent first vintage, small reported assets). It also enumerates the returned fields, distinguishing it clearly from siblings like search_vc_firms or search_vc_investors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete example queries ('emerging managers investing in climate', 'emerging managers that launched funds this quarter', 'new venture managers in Massachusetts') that make the intended usage explicit. It does not, however, name an alternative tool or state when NOT to use this one versus sibling manager searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_exitsVenture portfolio exitsARead-onlyIdempotentInspect
Acquisitions, IPOs and listings of venture-backed companies, with the investor that reported it and the date's basis: occurred (a dated source) or observed (seen on a portfolio page, deal date unpublished). dated_only keeps only exits with a transaction date. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | ||
| limit | No | ||
| since | No | ||
| dated_only | No | ||
| within_days | No | ||
| investor_dfx_id | No | A venture graph id of the form dfx:vc:<uuid>. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld=false, but the description goes well beyond them by disclosing the entitlement model in detail: unpaid lists return only the first 5 rows plus locked.count and locked.by_type, records name a subject and only the first 3 related names per section, and contact/decision-maker values are never returned. It also names the response fields (`entitlement`, `locked`) that report what was withheld. This is exactly the behavioral context an agent needs to interpret partial results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The access/entitlement sentences are front-loaded and genuinely informative, but the final sentence is promotional copy ('7 days free at https://...'), which does not help an agent invoke the tool. The description is also long relative to the actual parameter guidance provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully describes what a result contains (subject plus 3 related names per section, entitlement/locked fields, locked counts by type), which is real value. It still leaves half the parameters undocumented, but for a read-only search tool the behavioral picture is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% (6 params, only investor_dfx_id documented in the schema), so the description must compensate. It does define dated_only and the occurred/observed semantics behind the kinds filter, but since, within_days, and limit are left entirely unexplained in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: 'Acquisitions, IPOs and listings of venture-backed companies' with the reporting investor. It maps cleanly onto the enum kinds (ACQUIRED, IPO, PUBLIC_LISTING, PORTFOLIO_EXITED) and distinguishes this from financing/investment search siblings. It doesn't explicitly name a contrasting sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the description explains what 'occurred' vs 'observed' means and that 'dated_only keeps only exits with a transaction date', which hints at when to set that flag. But there is no explicit guidance on when to use this tool versus search_vc_investments or search_vc_financings, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_financingsCompany financings, labelled round or Form DARead-onlyIdempotentInspect
Companies on the venture graph that raised since a date, each financing labelled an ANNOUNCED ROUND (press: round type, stage, amount where disclosed) or an SEC FORM D OFFERING (never called a round: no stage, lead or investors). sector is matched on the company's own words, every term required ('enterprise ai' needs both). debt_only keeps offerings that include debt securities. order_by=amount ranks by the financing's amount, largest first, one row per company: the read for 'largest venture rounds of 2026' (since=2026-01-01, order_by=amount) and 'biggest raises this quarter'. Use for 'which AI companies raised recently', 'companies that raised debt', 'Series A rounds in fintech this quarter'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| kind | No | ||
| limit | No | ||
| since | No | YYYY-MM-DD; default 180 days ago. | |
| state | No | Two-letter US state code. | |
| until | No | YYYY-MM-DD; financings on or before this date (order_by=amount). | |
| sector | No | ||
| order_by | No | date (default): most recent first. amount: largest first. | |
| debt_only | No | ||
| within_days | No | ||
| venture_backed_only | No | Keep companies with a venture investor on record (use when the question says venture-backed). | |
| include_out_of_scope | No | Default false: a manager's own fund raise, a fund vehicle's Form D, a public or holding company, a non-venture issuer or a large raise with no venture investor is left out and counted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/idempotent/openWorld=false, but the description discloses substantial behavior beyond them: entitlement gating (first 5 rows plus locked.count/locked.by_type without a paid plan), which fields are never returned (contact values, decision-maker names), and the semantics of round vs Form D labelling. This is exactly the extra behavioral context the annotations don't carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: scope, labelling, filter semantics, then the headline use cases, all before the access caveats. It is somewhat overloaded, and the trailing sales pitch ('Full access: DFX Intelligence, 7 days free at...') is promotional rather than functional, but nearly every other sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-param, no-output-schema, read-only tool, the description supplies the gating behavior, the row/record limits, the labelling model, and ordering semantics an agent needs. It is slightly incomplete on a few undocumented parameters (within_days) and does not describe pagination/limit behavior, but the important call-shaping context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 50% schema coverage the description must compensate, and it does for the load-bearing params: sector ('matched on the company's own words, every term required'), debt_only ('keeps offerings that include debt securities'), and order_by/amount ('ranks by financing amount, largest first, one row per company'). Gaps remain for within_days and city/state/kind, which are unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource and scope: companies on the venture graph that raised since a date, with each financing explicitly typed as an ANNOUNCED ROUND or an SEC FORM D OFFERING. It goes further by defining what a Form D is not (never a round; no stage/lead/investors), letting an agent distinguish the two result classes without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering queries ('largest venture rounds of 2026', 'biggest raises this quarter', 'which AI companies raised recently') and the parameter combos that serve them. However it never names a competing sibling (e.g. search_vc_investments, search_vc_raise_candidates) or states when NOT to use this tool, so routing against alternatives is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_firmsSearch venture capital firmsARead-onlyIdempotentInspect
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. Funds, people and individual deals are not on these cards. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| sort | No | ||
| limit | No | ||
| query | No | ||
| stage | No | ||
| state | No | Two-letter US state code. | |
| sector | No | A sector word (fintech, ai, biotech, climate, saas, ...): matched on the firm's OBSERVED industries (its portfolio companies' Form D industry groups) and its STATED sectors, thesis and description. For a ranked answer to a raise (stage, amount, geography), use find_vc_investors. | |
| active_only | No | investments observed in the last 12 months | |
| raising_only | No | a fund with a Form D in the last 18 months | |
| min_investments | No | ||
| emerging_manager | No | ||
| recent_activity_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/idempotent/non-destructive, which is the low bar; the description goes well past that by disclosing entitlement gating in detail: 5-row lists with locked.count/by_type, record-level truncation to 3 related names, permanent suppression of contact values and decision-maker names, and the presence of `entitlement`/`locked` in every answer. It also explicitly states what addresses. This is exactly the off-schema behaviour an agent needs to avoid misreading partial results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The card-contents and access paragraphs are dense and front-loaded, but the closing sales line ('Full access: DFX Intelligence, 7 days free at...') is promotional padding that does not help tool selection. The middle section is a run-on list that takes effort to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 12 parameters, the description compensates well on the response side by describing card fields, exclusions and entitlement truncation. It is thinner on the request side, never explaining sort, limit, min_investments or recent_activity_days, so it is strong but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 33% (city, sort, limit, query, min_investments, recent_activity_days and emerging_manager are undocumented). The description does map several filters (sector, stage, state, active/raising, emerging manager) and echoes the observed-vs-stated sector matching, but leaves sort, limit and min_investments semantics entirely to the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (search venture capital firms) and precisely enumerates what a result card carries: stated sector/stage/geography/check size, observed behaviour over 6/12 months, funds with vintage and Form D, people counts. It also draws a boundary ('Funds, people and individual deals are not on these cards'), which helps separate it from get_vc_firm and search_vc_funds. It stops short of naming siblings in the body text, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the filter list (sector, stage, state, active/raising, emerging manager) and one routing hint buried in the schema ('For a ranked answer to a raise... use find_vc_investors'). The description body never explicitly states when to choose this over search_vc_funds, search_vc_investments or find_vc_investors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_fundsVenture funds and their amountsARead-onlyIdempotentInspect
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. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| query | No | ||
| strategy | No | ||
| max_vintage | No | ||
| min_vintage | No | ||
| lifecycle_state | No | The read plane's lifecycle state, derived from filings. | |
| fundraising_state | No | ACTIVE_OFFERING_EVIDENCE means an open Form D offering: raising now. | |
| min_form_d_sold_usd | No | ||
| organization_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnlyHint, idempotentHint, non-destructive), and the description adds substantial context beyond them: the entitlement model (first 5 rows in full plus locked.count/locked.by_type, never the rows), the redaction rules (contact values and decision-maker names withheld, only types/counts returned), and the guarantee that every answer carries `entitlement` and `locked`. That is exactly the kind of output-shape and withholding disclosure an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the returned fields and filters before the long access/entitlement paragraph, so the core purpose lands first. It is dense but nearly every clause earns its place, with the only marginal cost being the trailing '7 days free at https://...' upsell line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the heavy lifting by specifying the returned amount fields and the shape of locking (`locked.count`, `locked.by_type`, `entitlement`), which is the hardest thing for the agent to guess. Gaps remain around pagination/limit behavior and sort semantics for a 10-parameter tool, but the return-value and withholding story is well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 30%, so the description must carry weight: it clarifies strategy, vintage range (min/max_vintage), lifecycle, and Form D sold, adding real meaning for the amount/lifecycle filters. It stays silent on sort, limit, query, fundraising_state (distinct from lifecycle), and organization_dfx_id, so roughly half the parameters remain undocumented, which is a partial rather than full compensation for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (venture funds) and enumerates the exact amount fields returned under each fund's name (target, first close, final close, announced size, Form D offering/sold, ADV gross asset value), which is concrete enough to separate it from search_vc_firms or search_vc_new_funds. It stops short of naming any sibling explicitly, so an agent must still infer the boundary rather than being routed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Filter by manager, lifecycle, vintage range, strategy or Form D sold' implicitly signals the query shapes this tool answers, which is useful implied usage. However, with many near-neighbor searches (search_vc_firms, search_vc_new_funds, search_vc_lp_commitments) there is no explicit when-to-use, when-not, or alternative routing, which is where the definition leaves the agent on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_investmentsVenture round participationsARead-onlyIdempotentInspect
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. Each row is one investor's participation, newest OBSERVED first: since is when DFX saw it, not when the round happened, and rows are never ranked by amount. For the largest rounds or raises in a period use search_vc_financings(since, order_by=amount). ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Matches the company's or the investor's name. | |
| since | No | ||
| stage | No | ||
| state | No | Two-letter US state code. | |
| lead_only | No | ||
| company_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| partner_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| investor_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/idempotent safety, and the description goes far beyond: it discloses the entitlement model (first 5 rows in full plus locked counts), field-level redaction (contact values and decision-maker names never returned), the OBSERVED-first ordering semantics, and that rows are never ranked by amount. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the row definition, then filters, then ordering semantics, then the sibling pointer, then access caveats. Dense and mostly earning its space, though the plan-promotion sentence and some access detail add length beyond the core selection need.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and nine loosely-described parameters, the description carries the full burden and delivers: row shape, ordering, filtering, entitlement limits, and redaction behavior are all covered. An agent can call and interpret this correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56%, so the description must compensate and largely does: it maps the filter set (investor, company, partner, stage, state, since-date, lead only) and crucially clarifies that `since` is the DFX observation date, not the round date. It leaves the DFX-id parameter family and limit/query syntax to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource (investor-by-investor participations in venture rounds) and enumerates the row contents (investor, company, fund, partner, role, new/follow-on, board seat, round type, stage, amount, source quote). It is unmistakably distinct from sibling list tools like search_vc_financings and search_vc_coinvestors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes to an alternative: 'For the largest rounds or raises in a period use search_vc_financings(since, order_by=amount).' It also names the filter conditions available, so an agent knows both when to pick this tool and when to pick the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_lp_commitmentsLP commitments to venture fundsARead-onlyIdempotentInspect
Disclosed LP commitments to venture funds from the LPs' own public reports (public pensions, endowments): LP, fund, manager, amount, date, fund number. group_by=lp ranks LPs by commitments. max_fund_number=2 keeps commitments to a manager's first or second fund; emerging_only keeps emerging managers. Use for 'LPs that back first-time venture managers', 'which allocators made venture commitments recently', 'who are this fund's LPs'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| lp | No | LP name contains. | |
| limit | No | ||
| since | No | YYYY-MM-DD | |
| group_by | No | ||
| emerging_only | No | ||
| max_fund_number | No | ||
| organization_dfx_id | No | A venture graph id of the form dfx:vc:<uuid>. | |
| venture_managers_only | No | Default true: keep managers the classifier calls venture (the LP tape also carries buyout and credit funds). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds substantial context beyond that: the exact locked-row behavior (first 5 rows, count of the rest), that contact values and decision-maker names are never returned, and the entitlement/locked response fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and parameter behavior, which is good, but the ACCESS block is long and includes a promotional URL and plan pitch that dilutes the definition. Reasonably structured but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description covers purpose, key parameter semantics, example queries, and the access/entitlement model. The main gap is lack of explicit sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%. The description meaningfully explains group_by=lp ranking, max_fund_number (first or second fund), and emerging_only, adding value over the schema. However, roughly half the parameters remain undocumented in both places, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: disclosed LP commitments to venture funds from LPs' own public reports. Clear enough to distinguish the domain, but it does not explicitly name the closely related siblings (search_allocator_commitments, get_commitments) to route the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit example queries ('LPs that back first-time venture managers', 'which allocators made venture commitments recently', 'who are this fund's LPs'), which give clear usage context. It stops short of stating when to prefer this over the near-identical sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_new_fundsVenture funds launched recently or raising nowARead-onlyIdempotentInspect
Venture vehicles launched since a date (first Form D sale or first Form ADV appearance), or with an open Form D offering (raising_now), one row per manager: fund, manager, vintage, fund number, lifecycle and fundraising state, Form D offered and sold. Filter by state or city, sector of the manager's portfolio, emerging managers only, fund number (max_fund_number=2 for Fund I and II). Use for 'funds raising now', 'managers that launched a new vehicle in the last 90 days', 'new venture funds likely needing an administrator'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| limit | No | ||
| since | No | YYYY-MM-DD; default 90 days ago. | |
| state | No | Two-letter US state code. | |
| sector | No | ||
| raising_now | No | ||
| within_days | No | ||
| all_vehicles | No | ||
| emerging_only | No | ||
| lifecycle_state | No | ||
| max_fund_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description goes well beyond them: it discloses exactly what a free tier withholds (first 5 rows, locked.count and locked.by_type, no contact values or decision-maker names), how records are truncated per section, and that every response carries `entitlement` and `locked`. This is unusually rich disclosure of a non-obvious access constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first two sentences are well front-loaded and dense with useful meaning, but the entitlement paragraph is long and ends with a promotional plan URL that reads as marketing rather than tool guidance. The access rules earn their place; the sales link and some redundancy ('never returned, only their types and counts') do not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, no-output-schema tool this covers the critical ground: what a row contains, what filtering is possible, and the entitlement/locked response contract. The main gap is that several parameters (limit, within_days, all_vehicles, lifecycle_state) are never explained in prose, so an agent must infer their effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 18%, so the description must compensate and largely does: it explains `since` (first Form D/ADV appearance), `raising_now` (open Form D offering), `emerging_only`, state/city, sector, and explicitly defines `max_fund_number=2` as 'Fund I and II'. It leaves `limit`, `within_days`, `all_vehicles`, and the `lifecycle_state` enum semantics unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and two distinct retrieval modes ('launched since a date (first Form D sale or first Form ADV appearance)' or 'open Form D offering'), plus the row grain ('one row per manager') and the fields returned. An agent can distinguish this from search_vc_funds, search_vc_next_funds, or search_vc_emerging_managers from the text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation triggers ('funds raising now', 'managers that launched a new vehicle in the last 90 days', 'new venture funds likely needing an administrator'), which is strong context. It never names a sibling tool or states when NOT to use this one, so it stops short of the 5-level bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_next_fundsManagers that launched their next numbered fundARead-onlyIdempotentInspect
Fund N+1: a known venture manager's next numbered fund (Fund III after Fund II), dated by its first Form D, with the previous fund, the years between them and the size against the prior fund on a stated basis (Form D offering or ADV GAV, never a close). Filter by since, the managers' portfolio sector, fund number. Use for 'which comparable managers recently launched another fund', 'who is raising their next fund'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | YYYY-MM-DD; default 90 days ago. | |
| sector | No | ||
| within_days | No | ||
| max_sequence | No | ||
| min_sequence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the read-only/idempotent safety profile, and the description goes well beyond them: it details entitlement gating (first 5 rows in full plus locked.count and locked.by_type without a paid plan), that contact values and decision-maker names are never returned, and that every answer reports what was withheld via `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded and information-dense, but the opening sentence is a run-on packing definition, dating method, comparison basis, and caveats together, and the trailing plan/promo URL adds promotional weight beyond pure tool guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, entitlement-gated search with no output schema, the description covers the access model, locked-field semantics, and withheld data well. The remaining gap is the undocumented parameters, which no schema coverage fills.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% across 6 parameters, so the description must compensate. It explains since, sector, and fund number conceptually, but leaves limit, within_days, max_sequence, and min_sequence undescribed and does not clarify the 'fund number' ↔ sequence mapping. Baseline-plus for partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise resource (a venture manager's next numbered fund, Fund N+1 after Fund N) and the discriminating detail (dated by first Form D, compared against the prior fund on a stated basis). This clearly separates it from siblings like search_vc_funds, search_vc_new_funds, and search_vc_emerging_managers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger questions ('which comparable managers recently launched another fund', 'who is raising their next fund') and names the filter dimensions. It stops short of naming the sibling alternatives (e.g., search_vc_new_funds) that an agent should choose between, so it falls below the top bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_opportunitiesVenture opportunities by family, provider type, persona and placeARead-onlyIdempotentInspect
The venture opportunity object: dated signals (fund formation, fund lifecycle, company capital, people movement, relationship change) each with why now, what happened, why it may matter, who could care, evidence, a categorical confidence and urgency, providers on record, provider roles not on record, and decision makers by name. Filter by family, opportunity types, provider_type (law, audit, admin, banking, lending, insurance, recruiting, placement, compliance, secondaries), persona (investor, founder, manager, lp, provider, advisor), provider_gap, state or city (a metro holds its cities), sector words and since. Counts first. Use for 'opportunities for a venture law firm in Boston', 'what should I look at this week as a seed investor', 'new funds with no auditor on record'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| type | No | ||
| limit | No | ||
| since | No | YYYY-MM-DD; default 90 days ago. | |
| state | No | Two-letter US state code. | |
| types | No | ||
| family | No | ||
| sector | No | ||
| persona | No | ||
| geography | No | ||
| within_days | No | ||
| provider_gap | No | ||
| provider_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, yet the description goes further and discloses the actual access model: unpaid vertical returns the first 5 rows in full plus locked.count/locked.by_type and never the rows; contact values and decision-maker names are never returned; withholding is reported in `entitlement` and `locked`. This is exactly the kind of non-obvious behavioral context the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but disciplined: the object shape, then the filters, then usage examples, then access limits — each block earns its place. The closing promotional line ('7 days free at https://dfxintel.com/data-factory/plans') is the one sentence that is marketing rather than operational guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, no-output-schema, low-coverage tool, the description supplies the return shape (counts first, locked.count/by_type, entitlement) and the withholding rules, which is the hard part. It omits semantics for a handful of lesser parameters (limit, within_days, geography, type vs types), so it is strong but not airtight.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 15%, so the description carries most of the burden and does so for the important filters: it enumerates all provider_type and persona values, names the five family values, explains provider_gap, and clarifies that state/city nest (metro holds its cities) and that sector is word-based. It leaves limit, within_days, geography, and the type/types distinction unexplained, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (venture opportunity object), enumerates the five signal families and the full filter vocabulary, so an agent knows exactly what is being searched and over what fields. It stops short of explicitly distinguishing itself from near-neighbors such as search_vc_service_opportunities, search_opportunities or search_forward_opportunities, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives three concrete usage examples ('opportunities for a venture law firm in Boston', 'what should I look at this week as a seed investor', 'new funds with no auditor on record') plus the rule that 'a metro holds its cities', which is real selection guidance. It never states when NOT to use this tool or which sibling to prefer instead, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_provider_callsWho a venture fund service provider should callARead-onlyIdempotentInspect
The call list for a fund administrator, auditor, custodian or placement agent: venture funds with no provider of that role on record (new fund Form D), next numbered funds, funds whose provider of that role changed (one row per adviser decision), managers growing quickly, and new managers on the SEC adviser roster. Each row: fund, manager, trigger and its date, why now, the provider on record (or none), what it replaced, a potential decision maker by name and title, contact CLASS only, confidence and urgency. Counts first (coverage.total). Use for 'new venture funds that may need administrators', 'which venture funds changed auditors', 'who should a fund custodian call'. Fund counsel is on no filing: use search_vc_opportunities(provider_type=law). ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| role | No | ||
| limit | No | ||
| since | No | YYYY-MM-DD; default 365 days ago. | |
| state | No | Two-letter US state code. | |
| trigger | No | ||
| triggers | No | ||
| geography | No | ||
| within_days | No | ||
| min_size_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnly, idempotent, non-destructive, closed-world), but the description goes well beyond them: it discloses the entitlement gating in detail (first 5 rows plus locked.count/locked.by_type without a plan, records truncated to subject + first 3 related names, contact values and decision-maker names never returned, only types and counts), and says every response reports withholding via `entitlement` and `locked`. This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense and front-loaded: purpose, row contents, counts, use cases, then access rules. Most sentences earn their place, though it is delivered as one long run-on and closes with a promotional plan/URL line that is tangential to invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema and thin schema descriptions, the description compensates well on the return shape (row fields, coverage.total first) and access/entitlement behavior. The remaining gap is the un-documented scope filters (geography, within_days, min_size_usd, city, limit), which an agent would have to guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20% across 10 parameters. The description does add real meaning to the two enum parameters by spelling out the roles (administrator, auditor, custodian, placement agent) and the trigger concepts (new fund Form D, next numbered funds, provider changed, growing manager, new manager). However, it says nothing about geography, within_days, min_size_usd, city, or limit, leaving half the filters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (call list) and resource (venture funds with service-provider triggers), enumerating exactly which triggers and roles qualify. It explicitly distinguishes itself from search_vc_opportunities(provider_type=law) for fund counsel, so an agent can route between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use queries ('new venture funds that may need administrators', 'which venture funds changed auditors') and states the alternative route for a different case (fund counsel -> search_vc_opportunities with provider_type=law). When and when-not are both covered explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_raise_candidatesPortfolio companies that may raise in the next 12 months (candidates by rule)ARead-onlyIdempotentInspect
Venture-backed companies that are CANDIDATES BY RULE to raise again: last dated financing 12 to 36 months ago and none since, no exit on record, still listed on an investor's portfolio page DFX read in the last 60 days. Never a prediction. Filter by sector words, state or city, stage of the last round, and the months-since window. Use for 'portfolio companies that may raise in the next 12 months', 'companies due for their next round'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| limit | No | ||
| stage | No | ||
| state | No | Two-letter US state code. | |
| sector | No | ||
| geography | No | ||
| max_months_since_financing | No | ||
| min_months_since_financing | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it details the entitlement-gating behavior (first 5 rows in full, counts only for the rest via locked.count/locked.by_type), that contact values and decision-maker names are never returned, and that every answer reports what it withheld in `entitlement`/`locked`. It also pre-empts misuse with 'Never a prediction'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the rule and use cases, then separates ACCESS details. Efficient overall, though the final promotional line with a pricing URL is marketing rather than task-relevant guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations covering data-return behavior, the description fills the gap: it defines the candidate rule, the filter axes, and the exact response shape under both entitled and locked states, so an agent knows what it will and won't get back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13% (just `state`), so the description must compensate. It does explain the semantics of the months-since window and the filter dimensions (sector, state/city, stage, window), but leaves `geography`, `limit`, and the interaction between the min/max month bounds unexplained. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search venture-backed companies) plus the exact inclusion rule: last dated financing 12-36 months ago, no exit, still on a DFX-read portfolio page. This sharply distinguishes it from siblings like search_vc_financings (raw financings) and search_vc_next_funds, and the title's 'candidates by rule' framing is reinforced in the body.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use-case phrasings ('portfolio companies that may raise in the next 12 months', 'companies due for their next round') and enumerates the filterable dimensions. It stops short of naming which sibling tool to use instead when the user wants raw financings or a predictive signal, so no explicit alternatives/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_repeat_foundersRepeat founders starting new companies (derived)ARead-onlyIdempotentInspect
People named as an executive officer on the Form D filings of two or more operating companies, listed by the NEW company with its first Form D date, the person, and the earlier companies (whether venture-backed). Derived, never filed: identity is inferred from the same name in the same state. Filter by since (the new company's first Form D), state or city, sector words on the new company, prior_venture_backed_only. Use for 'repeat founders who recently started companies', 'serial entrepreneurs raising again'. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| limit | No | ||
| since | No | YYYY-MM-DD; default 365 days ago. | |
| state | No | Two-letter US state code. | |
| sector | No | ||
| geography | No | ||
| within_days | No | ||
| include_out_of_scope | No | Default false: companies DFX flags as not a venture company are left out and counted. | |
| prior_venture_backed_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/idempotent safety; the description adds substantial unique behavior: the derived (never-filed) nature and same-name-same-state inference, the exact entitlement gating (first 5 rows plus locked counts, no contact values or decision-maker names), and the `entitlement`/`locked` disclosure fields. This is exactly the kind of behavioral context the structured fields cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition, then filters, then use cases, then access – a logical order. It is dense and long, and the trailing plan/URL sentence is promotional, but each block carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex derived-signal tool with 9 params, no output schema, and an entitlement gate, the description covers derivation logic, filters, and the shape of returned/locked data. It never states a concrete result schema, but the access paragraph substitutes well enough for a truncated-output description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description must compensate, and it does clarify `since` (the NEW company's first Form D) and the intent of `prior_venture_backed_only` and sector words. However it leaves `limit`, `geography`, and `within_days` unexplained, so the compensation is partial rather than complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource and mechanism: people named as executive officer on Form D filings of two or more operating companies, with the derived identity logic spelled out. An agent can immediately distinguish this from sibling search_people or search_vc_financings because it names the specific signal (repeat founders) and its source (Form D).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit trigger phrases ('repeat founders who recently started companies', 'serial entrepreneurs raising again') and enumerates the filter dimensions (since, state/city, sector, prior_venture_backed_only). It stops short of naming an alternative tool or when-not-to-use conditions, so it is strong but not complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vc_service_opportunitiesVenture triggers that create work for a service providerARead-onlyIdempotentInspect
Filed or announced triggers on the venture graph mapped to the service providers they create work for (admin, audit, law, placement, banking, lending, insurance, recruiting, compliance): new advisers, fund Form Ds, next funds, open offerings, harvest, company financings, partner departures. The need is inferred, never observed. Use for 'new venture funds likely needing administrators', 'companies that recently raised where venture debt may be relevant' (provider_type=lending, trigger_family=company_funding). ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| new_only | No | Leave out Form D amendments (default true for admin). | |
| within_days | No | ||
| trigger_kind | No | ||
| provider_type | No | ||
| min_amount_usd | No | ||
| trigger_family | No | ||
| venture_backed_only | No | Company triggers only for companies with a venture investor on record (default true for lending). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, and the description goes well beyond by disclosing the inference caveat ('The need is inferred, never observed') and detailed entitlement behavior: unentitled lists return only the first 5 rows plus counts, records name a subject and 3 related names per section, contact values are never returned, and withheld data is reported in `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then a labeled 'ACCESS' block that earns its length given the non-obvious entitlement model. However, the closing marketing line ('Full access: DFX Intelligence, 7 days free at...') is promotional and does not help the agent invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so reasonably, describing what a locked list returns (counts by type) and that answers self-report withheld data via `entitlement` and `locked`. It is close to complete for the access model, though the undocumented non-enum parameters leave some invocation uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 22% across 9 params, so the description must compensate. It does partially: it explains the trigger families via prose ('new advisers, fund Form Ds, next funds, open offerings, harvest...') and ties provider_type and trigger_family to an example. But limit, since, within_days, min_amount_usd, and trigger_kind remain unexplained in both schema and description, leaving meaningful gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a precise verb and resource: 'Filed or announced triggers on the venture graph mapped to the service providers they create work for,' then enumerates the provider types (admin, audit, law, placement...) and trigger kinds. This is specific enough that an agent can distinguish it from siblings like search_vc_opportunities or search_forward_opportunities on the basis of the trigger-to-provider mapping alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides concrete when-to-use examples tied to parameter combinations: 'new venture funds likely needing administrators' and 'companies that recently raised where venture debt may be relevant' (provider_type=lending, trigger_family=company_funding). Strong positive guidance, but it names no alternative sibling or when-not-to-use condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifyCheck a claim against DFX's evidenceRead-onlyIdempotentInspect
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 business development company', 'A is the investment adviser of BDC B', 'Pension P committed to Fund F') or a structured subject / predicate / object / year. SUPPORTED always carries at least one evidence row with a citation; a name resolves only to a record carrying that name, otherwise the answer is UNKNOWN with candidates. DFX contradicts only what its own record contradicts; absence of evidence is UNKNOWN, never CONTRADICTED. Its predicates cover investment, acquisition, adviser, commitment and identity claims (business development company, registered investment adviser, family office, venture capital, private equity); property facts are outside them. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| claim | No | ||
| object | No | ||
| subject | No | ||
| predicate | No | ||
| object_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| subject_dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. |
what_can_dfx_answerAsk in plain language whether DFX can helpRead-onlyIdempotentInspect
Takes an objective in natural language and returns whether DFX can help, the tool name and arguments that answer it, and a free sample of the result. Says no clearly when the answer is no. Accepts objectives that do not yet map to a specific query. READ 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 | Required | Description | Default |
|---|---|---|---|
| topic | No | A topic in your own words ('family office direct investing', 'venture fundraising'); answers with the domains that cover it. | |
| domain | No | One domain's coverage and tools, answered instead of routing a real estate objective. | |
| objective | No | What you are trying to do, in one sentence and in your own words, for example 'commercial real estate loans in Ohio maturing in the next year'. A place named in the sentence is what the free sample is drawn from. | |
| constraints | No | Structured overrides for what was parsed out of `objective`, applied last so they outrank the prose. ONLY `state`, `event_type`, `within_days` and `limit` are honoured; any other key is ignored without warning. |
who_should_careThe economic counterparties to an entity or eventARead-onlyIdempotentInspect
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 entity or event id; a description of a situation without an id is not accepted. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dfx_id | No | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| event_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the exact entitlement behavior: without a paid plan a list returns only its first 5 rows plus locked.count/locked.by_type, a record exposes its subject and first 3 related names per section, contact values and decision-maker names are never returned, and every answer reports what it withheld via `entitlement` and `locked`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the precondition, then the entitlement mechanics — a sensible order for a dense, high-complexity tool. It is long but mostly load-bearing, with the trailing paid-plan promo link being the one sentence that does not help an agent invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of explaining return shape (list vs record, per-section truncation, locked counts, entitlement reporting) and input requirements. It is close to complete, missing only guidance on the `limit` parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%; the description reinforces that an entity or event id is required and maps entity types to id families, though much of that already lives in the dfx_id schema description. The `limit` parameter and its default/max are never mentioned in the description, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific capability — given an entity or event id, return the economic counterparties likely to care and why — with per-entity-type examples (company → sponsors/capital providers/family offices; family office → co-investors; property → owner/lender). This operationally distinguishes it from siblings like relationship_path, who_to_contact, and who_should_provider_call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard precondition ('Needs an entity or event id; a description of a situation without an id is not accepted') and shows expected inputs and outputs per entity type. It does not, however, name sibling alternatives or state when a different tool would be the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
who_should_provider_callWhich independent sponsors a law firm, bank, accountant or capital provider should call, and why nowARead-onlyIdempotentInspect
The independent sponsor call list (rule isi-pcall-1, XV1 2026-10-02): one row per role family, trigger and sponsor over census-verified sponsor deals. Triggers are facts: recent_deal_role_not_on_record (a deal in the last 180 days with no firm in this role on record), repeat_acquirer (2 or more deals in 12 months), provider_change (the sponsor's latest deal used a different sponsor-side firm), first_time_sponsor (first observed deal in 12 months). Each row names the incumbent sponsor-side firm(s) or says none is on record, and up to three people at the sponsor with the CLASS of contact DFX holds (never a contact value). Give provider (a dfx:isi: id or name) to get that firm's own list: its role families, sponsors it does not already serve, ranked by sector and state match with its own deals. 'Not on record' never means the sponsor needs one. total is the full count before the limit. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| state | No | Two-letter state of the deal's target. | |
| trigger | No | ||
| provider | No | Provider name or dfx:isi:<uuid>; omit to list the whole call list. | |
| role_family | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only assert read-only/idempotent/no-destructive, yet the description adds substantial behavior: the entitlement gating (first 5 rows in full, then locked.count/locked.by_type), that contact values and decision-maker names are never returned (only types and counts), that 'not on record' never means the sponsor needs one, and that total is the pre-limit count. This is far beyond what the structured fields disclose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and trigger definitions are front-loaded, but the whole thing is a single dense block mixing rule IDs, dates, trigger semantics, access rules and a marketing URL instead of breaking the trigger set into readable units. Almost every clause carries information, yet the unbroken wall and the closing plan pitch cost it structure points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, zero-required tool with no output schema and only 40% schema coverage, the description is remarkably complete: it describes the returned row contents, the ranking logic for the provider-scoped view, the count semantics, and exactly what is withheld under the free tier. An agent has everything needed to call it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 40%, the description compensates well: it defines each trigger enum value semantically (e.g., recent_deal_role_not_on_record = a deal in the last 180 days with no firm in this role on record), explains that provider accepts a dfx:isi: id or name and changes the shape of the result, and clarifies limit via the total-vs-limit distinction. `role_family` and `state` are only lightly enriched, keeping it off a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific artifact (the independent sponsor call list, rule isi-pcall-1) and spells out its row structure: one row per role family, trigger and sponsor over census-verified sponsor deals. It also covers the second mode (pass `provider` to get that firm's own ranked list). It never explicitly distinguishes itself from near siblings like who_to_contact, why_now or search_vc_provider_calls, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'Give provider ... to get that firm's own list' and the explanation of when each trigger fires tell the agent what the data means, but there is no explicit when-to-use-this-vs-alternative guidance or prerequisite (e.g., when to reach for this instead of who_to_contact or why_now). A capable agent can infer the fit, but the definition does not do the routing work.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
who_to_contactThe one person most likely to own the decision, with distinct backups, why, route type and confidenceARead-onlyIdempotentInspect
For one organization (dfx_id, or its name in organization, resolved through the identity layer so every graph the institution is on is read) or one opportunity (opportunity_id from search_opportunities): ONE recommended person and up to two DISTINCT backups, ranked for a purpose (private_credit, advisor_recruiting, acquisitions, capital_raising, lending_desk, lp_fundraising ...). People come from every contact source DFX holds: the organization's own team pages, Form ADV Schedule A officers, sponsor and provider principals, private equity, venture, family office and allocator staff, and named contact routes. Each person carries title, role family, why they fit the purpose, decision authority (inferred from the title, or observed, labelled which), the contact route TYPES on record with their rights class (RESALEABLE, REVEALABLE, INTERNAL_USE) and verification, the kind and host of the evidence, and confidence by dimension. Never an email address, phone number or a person's page: routes are types only, and a person known only from a data provider is returned as a role with name null. If nobody on record holds a role that owns the purpose it says so and lists the roles that would; a generic inbox is never offered as a substitute. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dfx_id | No | A DFX id (dfx:<graph>:<uuid>) or a bare real estate UUID. | |
| purpose | No | What the caller wants to talk about; people are ranked for it. | |
| organization | No | The organization's name, when no dfx_id is at hand (e.g. 'Akoya Capital Partners'). | |
| opportunity_id | No | An opportunity id (opp_...) from search_opportunities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering the safety profile (readOnly, idempotent, non-destructive, closed-world), the description still adds substantial context: entitlement gating (first 5 rows plus locked counts without a paid plan), what is never returned (emails, phones, URLs, decision-maker names), role-with-null-name fallback for data-provider-only people, and the refusal to substitute a generic inbox. That is well beyond what structured fields convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior and scope before the access details, which is the right ordering. It is a dense single block with some promotional filler (the free-trial URL) that could be trimmed, but essentially every other sentence carries functional information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return contract, and it does: per-person fields (title, role family, why, decision authority with inferred/observed labelling), route types with rights class and verification, evidence kind/host, confidence dimensions, plus the entitlement/locked envelope. For a no-output-schema tool this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so most parameters are self-documented, but the description adds real meaning: dfx_id is resolved through the identity layer so every graph the institution is on is read, organization is a name fallback, and opportunity_id is sourced from search_opportunities. It only omits guidance on limit, which is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: returns ONE recommended person plus up to two DISTINCT backups for a named purpose, scoped to one organization or one opportunity. It clearly distinguishes itself from generic lookups like search_people by emphasizing a single ranked decision-owner rather than a list, and from who_should_care/who_should_provider_call by naming the exact subject type and output shape.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for use: one org (dfx_id or organization name) or one opportunity (opportunity_id), with an enumerated purpose vocabulary. However it never states when NOT to use it or names the obvious alternatives (search_people, who_should_care, who_should_provider_call), so routing between siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
why_nowWhy this entity is relevant nowARead-onlyIdempotentInspect
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. ACCESS: without a paid DFX plan on the vertical, a list returns its first 5 rows in full and a count of the rest by type (locked.count, locked.by_type), never the rows; a record names its subject and the first 3 related names per section; contact values (email, phone, profile URLs) and decision-maker names are never returned, only their types and counts. Every answer says what it withheld in entitlement and locked. Full access: DFX Intelligence, 7 days free at https://dfxintel.com/data-factory/plans.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), dfx:pe:<uuid> (private equity graph), dfx:ria:<uuid> (registered investment adviser graph), dfx:al:<uuid> (allocator graph), dfx:pc:<uuid> (private credit graph), dfx:ref:<uuid> (real estate fund graph), or a bare real estate UUID. | |
| within_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive, yet the description adds substantial behavioral context beyond them: the free-tier row cap (first 5 rows plus locked.count/locked.by_type), the record-level truncation (first 3 names per section), and the hard exclusion of contact values and decision-maker names. It also discloses how the tool reports its own withholding via entitlement and locked, which is exactly the kind of trait an agent needs to interpret a partial result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense but well front-loaded: the first sentence establishes purpose and scope before the access model. The trailing promo line ('Full access: DFX Intelligence, 7 days free at ...') is arguably not part of the tool's selection semantics and slightly dilutes an otherwise tight, information-dense description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of explaining the return shape (entitlement, locked, locked.count, locked.by_type) and the empty-result semantics, which is strong compensation. The main residual gap is the undocumented within_days semantics, so it is not fully complete for a two-parameter analytic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: dfx_id is thoroughly documented with its full id-prefix taxonomy in the schema, but within_days carries only a default and no stated meaning. The description references 'the window' and recent evidence but never explains what within_days controls or its units beyond the schema default, so it does not fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource and enumerates the concrete evidence types it returns (recent filings, vehicles formed, people moves, fundraising, transition signals, loan maturities), which lets an agent distinguish it from generic readers like get_entity. It never explicitly names a sibling tool to differentiate against, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied by the content list and by the note that an empty result means 'no observed change in the window,' which is a useful interpretation cue. But there is no explicit when-to-use statement and no guidance on choosing this over changes_since, search_signals, or who_should_care, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-10, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MATURED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-11, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MATURED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
10 tool updates
- Changed
changes_since4 fields changed- changed
Input schema / properties / dfx_id / descriptionPrevious value: -"With `domain`: watch one entity (dfx:fo:, dfx:isi: or dfx:vc: id)."New value: +"With `domain`: watch one entity (a dfx id on that domain's graph)." - changed
Input schema / properties / domain / enumPrevious value: -[ - "family_office", - "independent_sponsor", - "venture_capital" -]New value: +[ + "allocators", + "family_office", + "independent_sponsor", + "private_credit", + "private_equity", + "real_estate_funds", + "ria", + "venture_capital" +] - added
Input schema / properties / include_historicalAdded value: +{ + "default": false, + "description": "With `domain`: also return rows DFX first saw in the window that occurred before it (novelty NEWLY_OBSERVED_HISTORICAL) and rows seeded when the domain's tape was created. Default false. Real estate rows are labelled with novelty but not filtered.", + "type": "boolean" +} - added
Input schema / properties / include_scheduledAdded value: +{ + "default": false, + "description": "With `domain`: also return rows whose occurrence date is after today (novelty SCHEDULED_FUTURE), such as an announced closing date. Default false.", + "type": "boolean" +}
- Changed
get_borrower_facilities2 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "research", + "description": "compact: the id, name, type, up to five key facts with their citation and counts of the related rows by type, under 2 KB. research (the default): the full answer.", + "enum": [ + "compact", + "research" + ], + "type": "string" +} - changed
Input schema / properties / limit / defaultPrevious value: -25New value: +10
- Changed
get_credit_provider1 field changed- added
Input schema / properties / detailAdded value: +{ + "default": "research", + "description": "compact: the id, name, type, up to five key facts with their citation and counts of the related rows by type, under 2 KB. research (the default): the full answer.", + "enum": [ + "compact", + "research" + ], + "type": "string" +}
- Changed
get_entity1 field changed- added
Input schema / properties / detailAdded value: +{ + "default": "research", + "description": "compact: the id, name, type, up to five key facts with their citation and counts of the related rows by type, under 2 KB. research (the default): the full answer.", + "enum": [ + "compact", + "research" + ], + "type": "string" +}
- Added
get_re_debt_exposure - Added
get_re_org_chain - Added
get_re_property_chain - Added
search_re_lps_by_manager - Changed
search_relationships1 field changed- added
Input schema / properties / detailAdded value: +{ + "default": "research", + "description": "compact: the id, name, type, up to five key facts with their citation and counts of the related rows by type, under 2 KB. research (the default): the full answer.", + "enum": [ + "compact", + "research" + ], + "type": "string" +}
- Changed
verify1 field changed- changed
Input schema / properties / predicate / enumPrevious value: -[ - "INVESTED_IN", - "ACQUIRED", - "CO_INVESTED_WITH", - "WORKS_AT", - "IS_A" -]New value: +[ + "INVESTED_IN", + "ACQUIRED", + "CO_INVESTED_WITH", + "WORKS_AT", + "IS_A", + "ADVISER_OF", + "COMMITTED_TO" +]
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-09, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MATURED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-10, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MATURED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
4 tool updates
- Changed
changes_since1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEED_RECORDED", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "OWNERSHIP_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED", - "ZONING_EVENT" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEED_RECORDED", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURED", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "OWNERSHIP_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
- Changed
dfx_coverage1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEED_RECORDED", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "OWNERSHIP_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED", - "ZONING_EVENT" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEED_RECORDED", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURED", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "OWNERSHIP_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
- Changed
search_property_events2 fields changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEED_RECORDED", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "OWNERSHIP_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED", - "ZONING_EVENT" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEED_RECORDED", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURED", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "OWNERSHIP_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +] - changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-09, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-09, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MATURED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
- Changed
what_can_dfx_answer1 field changed- changed
Input schema / properties / constraints / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEED_RECORDED", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "OWNERSHIP_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED", - "ZONING_EVENT" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEED_RECORDED", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURED", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "OWNERSHIP_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-08, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-09, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
4 tool updates
- Changed
changes_since1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED", - "ZONING_EVENT" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEED_RECORDED", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "OWNERSHIP_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
- Changed
dfx_coverage1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED", - "ZONING_EVENT" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEED_RECORDED", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "OWNERSHIP_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
- Changed
search_property_events2 fields changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED", - "ZONING_EVENT" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEED_RECORDED", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "OWNERSHIP_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +] - changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-08, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-08, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEED_RECORDED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, OWNERSHIP_CHANGED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
- Changed
what_can_dfx_answer1 field changed- changed
Input schema / properties / constraints / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED", - "ZONING_EVENT" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEED_RECORDED", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "OWNERSHIP_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-07, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-08, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-06, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-07, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
9 tool updates
- Changed
get_commitments1 field changed- changed
Input schema / properties / dfx_id / descriptionPrevious value: -"An allocator (dfx:al:), or a manager or fund on the allocator, private equity, venture or real estate fund graph."New value: +"An allocator (dfx:al:), or a manager or fund on the allocator, private equity, venture or real estate fund graph, or a real estate fund manager's CRD."
- Added
search_isi_opportunities - Changed
search_opportunities1 field changed- added
Input schema / properties / include_heldAdded value: +{ + "default": false, + "description": "Also return private credit opportunities the shared contract HOLDS (a family that has not passed blind truth checks), each with its hold reason. Default: left out.", + "type": "boolean" +}
- Added
search_re_fund_lenders - Added
search_re_fund_loans - Added
search_re_fund_lps - Changed
search_re_fund_managers10 fields changed- added
Input schema / properties / first_vehicle_year_fromAdded value: +{ + "description": "Its first real estate vehicle on the tape is this year or later (emerging managers; the tape starts 2011).", + "type": "integer" +} - added
Input schema / properties / latest_vintage_fromAdded value: +{ + "description": "Its newest vehicle's vintage is this year or later.", + "type": "integer" +} - added
Input schema / properties / maturing_beforeAdded value: +{ + "description": "ISO date: the manager's next loan maturity falls between today and this date.", + "type": "string" +} - added
Input schema / properties / min_acquisitions_12mAdded value: +{ + "description": "Acquisitions recorded at its validated holdings in the last 12 months, at least this many (1 = actively acquiring).", + "type": "integer" +} - added
Input schema / properties / min_financings_12mAdded value: +{ + "type": "integer" +} - changed
Input schema / properties / property_type / descriptionPrevious value: -"A property type on the manager's own list (MULTIFAMILY, INDUSTRIAL, OFFICE, RETAIL, ...)."New value: +"A property type on the manager's own list: MULTIFAMILY, INDUSTRIAL, OFFICE, RETAIL, HOTEL, MIXED_USE, LAND, STUDENT_HOUSING, SENIOR_HOUSING, SELF_STORAGE, SINGLE_FAMILY_RENTAL, DATA_CENTER, HEALTHCARE, LIFE_SCIENCE, MANUFACTURED_HOUSING, NET_LEASE, OTHER (words such as 'apartments' or 'data centers' are folded)." - added
Input schema / properties / similar_toAdded value: +{ + "description": "A real estate fund manager: a dfx:ref:<uuid> id or the manager's CRD.", + "type": "string" +} - changed
Input schema / properties / sort / enumPrevious value: -[ - "gav", - "vehicles", - "raum", - "lps", - "recent", - "name" -]New value: +[ + "acquisitions", + "financings", + "gav", + "loans", + "lps", + "maturity", + "name", + "newest", + "raum", + "recent", + "vehicles", + "vintage" +] - added
Input schema / properties / strategy_class / descriptionAdded value: +"VALUE_ADD, CORE, OPPORTUNISTIC, DEBT... (a word such as 'value add' is folded to the vocabulary)." - added
Input schema / properties / with_loansAdded value: +{ + "description": "Only managers with at least one loan on a validated holding.", + "type": "boolean" +}
- Changed
search_re_fund_vehicles5 fields changed- added
Input schema / properties / first_reported_fromAdded value: +{ + "description": "ISO date: first reported on the ADV tape on or after.", + "type": "string" +} - added
Input schema / properties / lifecycle_stateAdded value: +{ + "description": "One or more lifecycle states, e.g. [RAISING, FORMING] for funds in market.", + "items": { + "enum": [ + "FORMING", + "RAISING", + "INVESTING", + "DEPLOYING", + "HARVESTING", + "MATURE", + "WINDING_DOWN", + "DROPPED", + "UNKNOWN" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / property_type_hintAdded value: +{ + "description": "The property type read from the vehicle's own name: MULTIFAMILY, INDUSTRIAL, OFFICE, RETAIL, HOTEL, MIXED_USE, LAND, STUDENT_HOUSING, SENIOR_HOUSING, SELF_STORAGE, SINGLE_FAMILY_RENTAL, DATA_CENTER, HEALTHCARE, LIFE_SCIENCE, MANUFACTURED_HOUSING, NET_LEASE, OTHER.", + "type": "string" +} - changed
Input schema / properties / strategy_hint / descriptionPrevious value: -"The strategy read from the vehicle's own name (a hint, never a claim)."New value: +"The strategy read from the vehicle's own name (a hint, never a claim): CORE, CORE_PLUS, VALUE_ADD, OPPORTUNISTIC, DEBT, DISTRESSED, DEVELOPMENT, LAND, REIT_SPONSOR, NET_LEASE, CORE_INCOME, MULTI_STRATEGY, SPECIAL_SITUATIONS, SECONDARIES, FUND_OF_FUNDS. A property word here (multifamily) is moved to property_type_hint." - added
Input schema / properties / vintage_fromAdded value: +{ + "type": "integer" +}
- Added
who_should_provider_call
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-05, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-06, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
4 tool updates
- Changed
changes_since1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
- Changed
dfx_coverage1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
- Changed
search_property_events2 fields changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +] - changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-05, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-05, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED, ZONING_EVENT."
- Changed
what_can_dfx_answer1 field changed- changed
Input schema / properties / constraints / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "LOAN_STATUS_CHANGED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED", + "ZONING_EVENT" +]
4 tool updates
- Changed
changes_since1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED" +]
- Changed
dfx_coverage1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED" +]
- Changed
search_property_events1 field changed- changed
Input schema / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED" +]
- Changed
what_can_dfx_answer1 field changed- changed
Input schema / properties / constraints / properties / event_type / enumPrevious value: -[ - "BANKRUPTCY_EVENT", - "CERTIFICATE_OF_OCCUPANCY", - "COMPLIANCE_PERIOD_ENDING", - "DEMOLITION_FILED", - "DISTRESS_FLAG_RAISED", - "FORECLOSURE_EVENT", - "FORECLOSURE_FILED", - "LEASE_EXPIRING", - "LOAN_MATURITY_SCHEDULED", - "LOAN_MODIFIED", - "PERMIT_ISSUED", - "PERMIT_STATUS_CHANGED", - "PORTFOLIO_CONTRACTED", - "PORTFOLIO_EXPANDED", - "PROPERTY_SOLD", - "SUBSIDY_CONTRACT_EXPIRING", - "TAX_LIEN_LISTED", - "USE_CONVERSION_PERMITTED", - "VACANT_FORECLOSURE_REGISTERED" -]New value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "FORECLOSURE_FILED", + "LEASE_EXPIRING", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "LOAN_STATUS_CHANGED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PORTFOLIO_CONTRACTED", + "PORTFOLIO_EXPANDED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "TAX_LIEN_LISTED", + "USE_CONVERSION_PERMITTED", + "VACANT_FORECLOSURE_REGISTERED" +]
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-04, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-05, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-03, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-04, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-02, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-03, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-01, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. A historical event fails every forward window, so any value here returns an empty list for a backward-looking question (\"recent sales\", \"foreclosures that already happened\"), which reads like an absent market; those events are reached with this argument unset. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-10-02, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, FORECLOSURE_FILED, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, TAX_LIEN_LISTED, USE_CONVERSION_PERMITTED."
Related MCP Connectors
Free CRE loan sizing, DSCR stress tests, payments, closing costs and cited lending knowledge.
Live CRE analysis: Federal Reserve rates, Census 1/3/5-mile demographics, DCF models, IC memos.
Free real-estate underwriting, no key or account. 6 strategies, stress tests, max offer.
US macro & Treasury data — FRED series, yield curve, auctions, and a macro dashboard.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceLive real estate market data for 895 US metros. Ask your AI assistant about home prices, rental yields, investment health scores, migration trends, and affordability. Free tier covers top 50 markets (no account needed). Premium tier unlocks all 895 markets, HUD Fair Market Rents, side-by-side market comparison, and filtered market search.MIT
- AlicenseAqualityDmaintenanceEnables pulling live Federal Reserve economic data (SOFR, Treasury yields, Fed funds rate, mortgage rates, CPI, PCE) for CRE capital markets analysis through an MCP client.6MIT
- AlicenseNot gradedqualityDmaintenanceProvides live commercial real estate data (rates, demographics) and analysis tools (DCF, rent roll parsing, lease abstraction, IC memo generation) within Claude Desktop.1MIT
- AlicenseAqualityCmaintenanceRecession probability, capital rotation, macro cascade analysis, and real-time economic data for Claude, ChatGPT, Cursor, and any MCP client.2332 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.