Skip to main content
Glama

Server Details

Free, no key. US commercial real estate: FHA/CMBS maturities, LIHTC/HUD expiries, bank CRE exposure.

Ownership verified
Status
Healthy
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

B3.4/5.0

Scored across 84 tools

Disambiguation3/5

Most tools target distinct resources, and the long descriptions usually separate them, but the 84-tool surface contains several easily confused clusters: multiple *_changes feeds, multiple maturity/credit searches, and three find_pe_* matcher directions. An agent would need to read descriptions carefully to avoid selecting the wrong one.

Naming Consistency3/5

The dominant pattern is snake_case verb_noun (search_*, get_*, find_*, resolve_*), which is good, but there is a mix of retrieval verbs and a number of non-verb noun/imperative names (changes_since, dfx_coverage, relationship_path, why_now, who_should_care). The set is readable but not uniform enough for reliable pattern-based selection.

Tool Count1/5

At 84 tools this is far beyond a well-scoped MCP server; even a broad 'intelligence' domain would struggle to justify this many entry points. The count creates a heavy navigation burden and exceeds the threshold where an agent can reliably select the right tool.

Completeness4/5

The surface is unusually broad: resolution, search, detail views, change feeds, match computation, verification and coverage checks exist across real estate, private credit, private equity, venture, RIA and allocator domains. Minor gaps remain, such as limited CRE debt coverage outside BDC schedules, but most realistic workflows have a path through the available tools.

Available Tools

84 tools
changes_sinceWhat DFX has learned since your last callA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 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.
sinceNoOpaque cursor from a previous call. Unset on the first call, which establishes a position and returns no events by design.
stateNoTwo letter state code
dfx_idNoWith `domain`: watch one entity (dfx:fo:, dfx:isi: or dfx:vc: id).
domainNoAn intelligence domain instead of real estate; with it, `since` is an ISO timestamp.
event_typeNoOne served event family.
place_dfx_idNoWatch one property or parcel

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive, so the bar is met by adding non-obvious behavior: the first cursorless call returns ZERO events by design, learn-time ordering means old facts arrive in today's delta, and full pages set complete:false. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core concept and cursor behavior, and every sentence carries information. The all-caps emphasis block is slightly shouty and partially repeats the learn-time-ordering point made in the opening sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter read feed with no output schema, the description covers cursor lifecycle, ordering semantics, pagination, cost, and the historical-backfill gotcha — everything an agent needs to call it correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter descriptions are unusually rich (cursor semantics, pagination, complete:false). The description's 'filter by event type, state, or a specific property or parcel id' only restates what the schema already documents, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and mechanism ('a feed of what is NEW since a cursor, ordered by when DFX learned it') and explicitly contrasts it with the search-style siblings ('It answers what is new, not what exists'). An agent can distinguish it from search_events/search_property_events 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: first call without a cursor, subsequent calls with the returned cursor, and that frequent polling is cheap ('Deterministic and indexed'). The 'new, not what exists' line functions as an implicit when-not, but no sibling is named as the explicit alternative for state queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

debt_maturity_scheduleConfirmed commercial mortgage maturities for one stateA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum loans, up to 200.
stateYesTwo letter state code. Required.
within_daysNoForward window from today. Default 548, eighteen months.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 notA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoTwo letter state code. Optional: narrows the answer to this state.
event_typeNoOptional: narrows the answer to this served event family.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, it discloses that the call is free, queries no underlying data, and derives its verdict from a coverage registry so NOT_COVERED is measured rather than inferred. This is meaningful behavioral context, though return formatting/pagination is not covered (and no output schema exists).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the two operating modes and reasonably tight, with no wasted sentences. It is somewhat dense (registry explanation, empty-vs-absent distinction) but each sentence carries value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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: it explains the grid shape and the single-slice verdict plus its basis. Adequate for a free, read-only lookup, though slightly more on the exact verdict payload would be ideal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are already documented in the schema. The description only restates that state/event_type narrow the answer to a single slice, adding the verdict semantics but no new syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: it reports measured coverage of served sources, object types and gaps, returning a grid or a COVERED/NOT_COVERED/UNKNOWN verdict. It is clearly differentiated from search-type siblings, though it does not explicitly contrast with the similarly-named 'what_can_dfx_answer'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage modes: no arguments returns the full grid, while state/event_type yields a direct verdict on one slice. It also implies when to prefer this over searching ('separates an empty result from an absent market', 'queries no data'), but names no explicit alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_matchWhy these two fit, and why notA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_id_aYesA 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_bYesA 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

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish safety (read-only, idempotent, non-destructive), so the bar is lower. The description adds meaningful behavior: it accepts the two IDs in either order, returns the computed match only conditionally ('if the graph has one'), includes a confidence label, and explicitly commits to returning facts rather than a score. No statement contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description wastes no words; the opening scope clause is front-loaded and the enumerated sections carry the burden of explaining outputs. The ALL-CAPS headings are slightly telegraphic but each item adds a distinct piece of information, and the closing one-liner reinforces the tool's nature.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 return-value burden, and it does: it names all major output sections and even supplies sub-details such as 'dated investments in the same sector, with sources' and 'a path on the graph if one exists.' It doesn't cover edge cases (e.g., invalid pairings) or the exact shape of the computed match/confidence label, but those are minor against the level of detail provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the ID formats for both parameters, so baseline is 3. The description adds semantic value by assigning roles (one is an investor, the other an opportunity) and by stating that order does not matter. This is information the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description defines the tool's scope precisely: it takes an investor-opportunity pair and enumerates the exact content returned — match reasons, blockers, supporting observations, comparable history with dates and sources, relationships, recent events, computed match (when present), and confidence label. The phrase 'Facts, not a score' clarifies what the tool deliberately does not provide. Though the verb is implied by the name/title rather than written out, the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to choose this tool over the many related siblings, such as relationship_path, get_capital_paths, or find_opportunities_for_capital. The intended use is strongly implied by the title and parameter semantics ('for an investor and an opportunity'), but the description doesn't state exclusions or alternatives. This keeps it at implied rather than explicit guidance.

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 thisA
Read-onlyIdempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
stageNo
stateNoTwo-letter US state code.
dfx_idNoA 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.
sectorNo
controlNo
verticalNo
asset_classNo
deal_size_usdNo
check_size_usdNo
investor_typesNoDefault: 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_involvedNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds meaningful behavioral detail beyond that: results are not paired or ranked, company-to-sponsor pairs are withdrawn, first-time capital providers are not recommended, and every row carries a basis label (observed_behaviour, computed_match, observed_investments, derived). This gives an agent useful expectations about output semantics and limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded, opening with the core 'Investors for a company or described opportunity' framing. Every sentence adds distinct information: investor types, exclusion criteria, and row basis. It is long but not bloated; a slightly more structured layout could improve scannability, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter tool with no output schema, the description covers the main use cases, result types, output row semantics, and a key exclusion (no first-time capital providers). It does not explain all optional parameters and does not explicitly differentiate from inverse siblings like find_opportunities_for_capital, but the core information needed to invoke the tool correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description must compensate. It does map several parameters (sector, state, deal_size_usd, stage, control) to the concept of a 'described opportunity' and partially explains investor_types via the listed investor categories. However, it leaves other parameters unexplained: vertical, asset_class, check_size_usd, sponsor_involved, and limit. The compensation is partial, not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact purpose: find investors for either a company (dfx_id) or a described opportunity (sector, state, deal size, stage, control). It enumerates the investor types returned and distinguishes itself from siblings by noting that sponsors are 'listed, not paired or ranked' and that company-to-sponsor pairs are withdrawn. This makes the tool's job unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when you need investors for a company or an opportunity described by sector/state/deal size/stage/control. It explains which investor types appear and in what circumstances, such as venture firms 'when the opportunity is venture-shaped.' It does not explicitly name alternatives or exclusions, but the guidance is concrete enough to route an agent correctly.

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 oneA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
lienNoA unitranche is filed as first lien.first_lien
limitNo
sinceNoISO date; comparables entered on or after it. Default 24 months ago.
statesNoTwo-letter borrower headquarters states, e.g. ["TX","FL"]. Thins the universe to borrowers with a known state.
industryYesA word from the filer-written industry: health, software, industrial, business services, consumer, education.
band_max_usdNo
band_min_usdNoThe financing's own size band, for the size-fit factor; defaults to size_min_usd.
size_max_usdNo
size_min_usdNoSmallest comparable facility (lower bound) to count.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavioral context well beyond the readOnly/idempotent annotations: the exact scoring weights (comparables 35%, recency 20%, etc.), refusal conditions (stale comparable, book under 0.85, passive holds under $2M), size semantics ('lower bounds... never the commitment'), and the data-coverage caveat on state filtering ('about one comparable in six today'). No contradiction with annotations — the readOnly and idempotent hints are consistent with a deterministic ranked computation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place — core ranking logic first, then scoring weights, refusal rules, caveats, and routing. It front-loads the essential mechanism before nuances and uses compact formatting (backticks, parentheticals) to pack operational detail without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with a weighted scoring model, refusal conditions, and data-quality caveats, this description is remarkably complete. It covers ranking basis, score composition, exclusions, size semantics, state-filter behavior, the geo_coverage output signal, and sibling routing. With no output schema, the only minor gap is the literal shape of the ranked list, but the scoring model makes the output predictable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema coverage, the description meaningfully deepens several parameters: industry is 'as the filer wrote it' with concrete example terms, states is explained as DFX-held GLEIF headquarters with a coverage caveat, and size parameters are clarified as lower bounds never the commitment. However, limit, size_max_usd, and band_max_usd receive no added meaning in either schema or description, leaving a modest residual gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — 'Lenders ranked on the comparable facilities they CURRENTLY HOLD on BDC schedules' — and gives a concrete scenario it answers ('find lenders for a $60M unitranche for a sponsor-backed healthcare services business'). It explicitly differentiates from the sibling search_private_credit by naming it and describing the difference in industry-filter semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'This is the answer to... use it before search_private_credit, whose industry filter lists borrowers.' This both names the alternative and states the ordering between the two tools, 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.

find_opportunities_for_capitalWhat this investor should be looking atA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dfx_idYesA 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

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful output behavior: computed matches with reasons and blockers, transition-signal companies, sponsors seeking capital, raising companies, and the behavior it reasoned from. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The audience and core behavior are front-loaded, and each clause contributes a distinct output category or constraint. However, the first sentence is long and run-on, and the 'then' sequence could be misinterpreted as temporal ordering rather than additional categories.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 what is returned: matches with reasons/blockers, transition-signal companies, sponsors seeking capital, raising companies, and the behavior reasoned from. It stops short of describing result shape, pagination, or how limit applies, but the key essentials for a read-only discovery tool are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-level meaning. The schema documents dfx_id's accepted ID formats well, and limit has numeric bounds/default, but with 50% schema coverage the description does not compensate for the limit parameter's missing semantic description. Still, the schema provides enough for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's direction: for an investor entity, return opportunities DFX knows that fit the entity's demonstrated behavior, with specific output categories. It is distinguishable from inverse sibling tools like find_capital_for_opportunity and find_pe_buyers_for_company, though it does not explicitly name a sibling or alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'For a family office, sponsor, capital provider or venture firm' gives an explicit audience and use context, reinforced by dfx_id's accepted graph types. It does not explicitly explain when to prefer this tool over alternatives or state exclusions, but the intended use case is clear enough for correct 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 companyA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dfx_idYesA 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

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint, idempotentHint, and non-destructive annotations, the description adds meaningful behavior: the matches are computed, the matcher fields are returned verbatim, and NOT_COVERED is explicitly explained as meaning the matcher scored nothing, not that no add-on fits. This is valuable context that annotations do not provide and prevents misinterpretation of empty or sparse results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core purpose is stated first, followed by the output contents and the critical NOT_COVERED caveat. There is no filler or redundancy, and every sentence adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description does a strong job of enumerating the returned fields and explaining the one tricky result state (NOT_COVERED). It also identifies the required input and its source. For a read-only computed lookup, this is complete enough for an agent to select and call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds useful meaning to dfx_id by specifying it is a platform company id from search_pe_platforms. However, the optional limit parameter is not described beyond its schema default/min/max, and schema coverage is only 50%. The description partially compensates but does not fully explain both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: it returns computed add-on matches for a single platform company, listing the candidate, matcher's reasons, blockers, why_now, comparable add-ons, owner, score, confidence, and computed date. It also names the expected input source (a dfx:pe: company id from search_pe_platforms), which distinguishes it clearly from sibling tools that handle buyers, firms, or funds.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: use it for one platform company identified by a dfx:pe: id from search_pe_platforms. It does not explicitly enumerate alternatives or exclusions, but the input source and singular-platform scope make the intended use reasonably obvious. The NOT_COVERED caveat also helps the agent interpret empty results correctly.

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 companyA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dfx_idYesA company id: dfx:pe:<uuid>, dfx:isi:<uuid> or dfx:vc:<uuid>.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description's additional behavior details are valuable. It discloses that results are precomputed matcher output, lists exactly which fields are returned verbatim, and explains the NOT_COVERED sentinel with population count.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences each carry distinct and necessary information: what is returned, what NOT_COVERED means, and which sibling tool to use instead. The main functional statement is front-loaded, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since there is no output schema, the description carries the full burden of explaining return values. It enumerates the returned fields, including reasons, blockers, why_now, comparable transactions, score, confidence, and model version, and explains the special NOT_COVERED case. Nothing an agent needs to interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents dfx_id fully, including the allowed namespaces, and limit has default/min/max constraints. The description reinforces the id format but adds nothing about the limit parameter or how it shapes results. It is adequate but does not meaningfully compensate for the 50% schema coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it returns computed buyer_for_company matches from the private equity matcher for one company, with exact accepted id namespaces (dfx:pe:, dfx:isi:, dfx:vc:). The title further clarifies the direction of the match — PE firms that could buy this company — making it easy to distinguish from reverse or adjacent search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly gives an alternative: 'For sponsors, family offices and capital providers as well, use find_capital_for_opportunity.' It also clarifies when the result is NOT_COVERED: 'that means DFX has not computed buyers for it, never that no buyer exists,' preventing a critical misinterpretation.

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 atA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dfx_idYesA 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

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description reveals that results are pre-computed matches, enumerates the returned fields (reasons, blockers, why_now, comparables, score, confidence, computed date), and gives the critical NOT_COVERED caveat that absence of scores is not a claim that nothing fits. This adds real behavioral context and prevents an agent from overinterpreting the sentinel.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states action, scope, and return content, and the second sentence clarifies a semantically important sentinel. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description successfully carries the burden of explaining return values: it lists the per-company fields and the NOT_COVERED sentinel. It also identifies the required identifier type. It could mention ordering or default limit behavior, but those are minor given the schema already covers the limit bounds.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents dfx_id's format and domain, and limit's bounds and default. The description reinforces the dfx:pe form but does not add meaningful semantics for limit, such as ordering or pagination behavior. Since schema coverage is partial and the description compensates only slightly, a mid-range score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Computed company_for_buyer matches for one private equity firm.' It clearly distinguishes this tool from inverse or sibling tools like find_pe_buyers_for_company by stating it returns companies for a buyer, and it names the required identifier domain (dfx:pe: id).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly scopes the tool to one private equity firm and explains the NOT_COVERED condition, which is important for interpreting empty or absent scores. It does not explicitly name alternatives or state when not to use this tool, but the scope is clear enough for selection.

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 fullA
Read-onlyIdempotent
Inspect

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 consultant: client counts on the tape and its ADV institutional numbers. For a manager or fund: which public LPs back 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesAn allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this a safe read-only, idempotent operation. The description adds meaningful caveats beyond the annotations: that estimates are labelled, nothing predictive is published, and reported figures must not be conflated with approvals or approvals. This warns an agent against misinterpreting overlapping dollar figures or targets, which is valuable behavioral and output-interpretation context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense: the main content is front-loaded and organized by entity type, and every clause adds a specific data category or caveat. It is structured enough for the tool's breadth, though the first sentence is heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 full burden of explaining return values. It covers the return categories for allocators, consultants, managers, and funds, names get_entity for same_as links, and adds data-quality caveats about estimates and estimates. The description is complete enough for an agent to understand what the call returns and how to interpret its contents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, dfx_id, has a complete schema description including the ID format and search sources. The tool description adds little beyond the schema's own parameter documentation, so with 100% coverage the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool as returning a full profile for an allocator, consultant, manager, or fund and enumerates the major data categories returned for each. It is specific and unambiguous, and it names get_entity for same_as links, though it does not explicitly differentiate get_allocator from related sibling getters like get_entity or get_pe_firm.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful context about what data is included for each entity type, so an agent can infer when a full-entity lookup is appropriate. It does not state explicit when to use this tool versus alternatives or which sibling to choose for narrower lookups, leaving the choice mostly implicit.

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 endA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
as_ofNoA quarter end (YYYY-MM-DD) on the BDC's tape; default the latest.
limitNo
cursorNonext_cursor from a previous page of this tool, unchanged.
dfx_idYesA dfx:pc:<uuid> BDC id or a CIK.
include_equityNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the description doesn't repeat those. It adds useful behavioral context beyond annotations: default 'debt only' (interpretable as include_equity=false), pagination at 25 items, and the default quarter-end selection. It also notes figures are 'in the filer's own figures,' which is non-standard but valuable. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core function ('Every position a BDC tagged at one quarter end') and packs the returned fields into a clear list. It is efficient with no filler or repetition of schema details (like types or defaults). The structure lets an agent quickly grasp the tool's output and key behaviors.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters with 50% schema description coverage and no output schema, the description provides a strong foundation: it lists all returned fields, mentions default quarter-end, pagination, and debt-only default. It does not explicitly describe sort options or the exact format of as_of (though schema covers that), and it omits any note about error handling or rate limits. Still, for a read-only portfolio tool, this is quite complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (dfx_id, as_of, cursor have descriptions; sort, limit, include_equity lack them). The description compensates for some gaps: it clarifies as_of's default, mentions pagination (implicitly covering limit and cursor semantics), and hints at include_equity via 'Debt only by default.' However, it does not explain the 'sort' parameter or its enum values, and the relationship between limit and pagination is only partially addressed. Overall, partial compensation but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('get') and resource ('BDC portfolio'), then enumerates the exact fields returned (borrower, instrument, kind, lien, principal, fair value, etc.). It also clarifies scope ('one quarter end') and default behavior ('latest unless as_of is given'). This clearly distinguishes it from sibling tools like get_borrower_capital_structure or get_credit_facility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. Among many sibling tools (get_borrower_facilities, get_credit_facility, etc.), the description does not provide a comparison or exclusions. The only contextual hint is 'Debt only by default,' which is a behavioral note, not a usage guide. An agent has to infer when this is the right tool.

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 itA
Read-onlyIdempotent
Inspect

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 and default are not on the tape and are never inferred.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations already mark it as read-only and idempotent, the description adds crucial interpretive guardrails: fact classes are explained, marks are not impairments, maturity changes are not amendments, and non-accrual/default are never inferred. This goes well beyond the annotations and prevents misreading of sensitive fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and run-on, but every clause contributes meaningful constraints or clarifications. It is front-loaded with the main return scope before moving into fact-class semantics and caveats. Slight structural improvement would be easier scanning as separate sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 conveying the shape and semantics of results. It specifies every data category, the meaning of fact classes, and explicit boundary conditions. An agent has enough context to call this tool and interpret its output correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, dfx_id, is fully documented in the schema with format and provenance guidance. The description adds no additional parameter semantics, but since schema description coverage is 100%, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description precisely enumerates what the tool returns: the borrower group, facilities, BDC pieces, tape, sponsor attributions, and events. It clearly distinguishes this from sibling tools like get_borrower_facilities by signaling it is the full consolidated capital-structure view from BDC lenders' perspective.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The title and description make it clear this is for the comprehensive borrower capital structure as BDC lenders see it, including derived, carried, and inferred data. It does not explicitly name alternatives or say when not to use it, but the scope is strongly implied by the exhaustive component list.

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 eachA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dfx_idYesA private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities).
held_onlyNoFacilities still on a schedule at the latest quarter end.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/non-destructive annotations, the description discloses important caveats: principal is only the sum of BDC pieces and a lower bound, never the commitment, and lenders that file no schedule are omitted. It also signals historical holdings via 'quarters it held,' giving realistic expectations about data completeness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the core resource and contains no filler; every clause carries output or caveat information. It could be restructured into a clearer list, but it remains appropriately sized for the breadth of returned fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 explaining return values and does so thoroughly: facility fields, lender-level fields, historical quarters, credit manager, and principal semantics. The remaining defaults and id source are already supplied by the input schema, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents dfx_id and held_only, covering two of three parameters, but the prose adds no parameter-level meaning and the limit parameter still has no description beyond its constraints. Since schema coverage is 67% rather than high, the description neither fully compensates nor needs to for the tool to be usable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and perspective: every facility a borrower group has on the BDC tape, with the lender group on each. It clearly differentiates this from sibling entity-lookup and capital-structure tools by naming the data source and the lender-group detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope is unambiguous: use this for a single borrower group's BDC-tape facilities and the lenders on each, including historical holders. It does not name alternatives or exclusions, but the context is clear enough for an agent to select it without being misled.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_capital_pathsHow capital reaches this institution, and where it goes nextA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoOne path kind as the summary names it (for example ALLOCATOR_TO_PE_FUND_TO_MANAGER).
limitNo
dfx_idYesA 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

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral detail beyond the read-only/idempotent annotations: paths are built only from identity-grade or measured links, candidate links carry confidence below 0.5, and NOT_COVERED specifically means the layer has not computed the path rather than no relationship existing. This clarifies result semantics and data quality expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose, then detailing path components and finally clarifying confidence and NOT_COVERED semantics. It is dense but each sentence earns its place, and the structure flows logically from function to interpretation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 path components, confidence, data quality, and the critical NOT_COVERED interpretation. It does not explicitly explain limit behavior or ordering, but overall it provides sufficient context for an agent to invoke the tool and interpret results correctly for a read-only operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% with descriptions for dfx_id and kind; limit has constraints but no description. The description reinforces the kind concept through examples but does not enumerate valid values or explain how limit affects result pagination, so it adds only marginal value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool publishes capital flow paths through one institution and gives three concrete scenarios (allocators, lenders, properties). This distinguishes it from siblings like relationship_path by focusing on capital flows with specific path components and confidence, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when the agent needs to trace capital flows through a specific institution, but it never explicitly contrasts with similar sibling tools like relationship_path or search_relationships, nor does it provide when-not conditions. The context 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.

get_commitmentsWho committed to this manager or fund, or what this allocator committed toA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dfx_idYesAn allocator (dfx:al:), or a manager or fund on the allocator, private equity, venture or real estate fund graph.
include_holdingsNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and idempotent, and the description adds substantial behavioral context: default dated commitments, the include_holdings toggle for value-only holdings, and the important caveat that commitments are the plan's number and repeat across reports. This goes well beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the core purpose, and every clause carries useful information. It is somewhat long with nested parentheticals, but the detail is necessary for domain-specific semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description enumerates the key returned fields and clarifies the distinction between dated commitments and holdings, which is enough for most calls. The only notable gap is the undocumented limit parameter and lack of explicit pagination or result-shape details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description needs to compensate. It adds meaningful semantics for dfx_id ('any id they reference') and include_holdings ('value-only holdings... only with include_holdings'), but it does not explain the limit parameter beyond what the schema already provides through constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns commitment tapes for an allocator or manager/fund, with specific fields and scope. It is more specific than a simple restatement, but it does not explicitly distinguish itself from the sibling search_allocator_commitments, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool returns and how parameters behave, but it gives no explicit guidance on when to choose this tool over alternatives such as search_allocator_commitments. There are no stated exclusions or conditions for using this versus a sibling tool.

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 historyB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA dfx:pc:<uuid> facility id from get_borrower_capital_structure, search_credit_maturities or an event.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context: it explains that size is 'the sum of BDC pieces with its basis, pricing modal and ranged across pieces, maturity with basis', and that the lender group includes 'every BDC that holds or held a piece, each row the lender's own figures, plus lenders named on a deal'. This goes beyond the annotations by clarifying the aggregation and scope semantics, though it does not describe return format or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that packs in a lot of information, but it is somewhat run-on and could be better structured. It front-loads the core definition ('one borrower group in one instrument class') and then lists components, but the long parenthetical chain makes it harder to parse than necessary. It earns its place but could be split into clearer sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with 100% schema coverage and no output schema, the description is fairly complete. It explains what the facility is, how size is computed, what the lender group includes, and that history is covered. The main gap is that it doesn't explicitly describe the return shape, but with no output schema and a read-only annotation, the description carries enough context for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 the dfx_id parameter. The description adds context by specifying the id format ('dfx:pc:<uuid>') and valid sources (get_borrower_capital_structure, search_credit_maturities, or an event), which is useful. However, the description itself does not explain the parameter beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('get') and resource ('one facility') and enumerates the content: size, pricing, maturity, lender group, and history. It distinguishes itself from siblings like get_borrower_facilities and get_borrower_capital_structure by focusing on a single facility with lender group and history, though it does not explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call this when you need a single facility's full detail including lender group and history. It does not explicitly state when to use it versus alternatives like get_borrower_facilities or search_credit_maturities, but the input schema's dfx_id description references get_borrower_capital_structure, search_credit_maturities, or an event, providing some routing context.

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 fullB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA dfx:pc:<uuid> provider or BDC id, or a BDC CIK number as a string.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds data provenance context (10-K, Form ADV) but does not describe response structure, pagination, or other runtime behavior; there is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense with relevant detail and every clause contributes information, but it is structured as one long run-on paragraph with no bullet points or clear visual separation between the two entity types. It is effective but not well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 explaining the return contract, and it does so by enumerating fields for both credit managers and BDCs plus accepted identifiers. A few terms such as 'classes with basis' could be clearer, but the essential information for invoking the tool is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter dfx_id is fully documented in the schema (100% coverage) with the accepted formats. The description repeats the same identifier forms without adding meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies both supported resources (a credit manager and a BDC) and enumerates what is returned for each, plus the accepted identifier forms. It does not explicitly contrast with focused siblings such as get_bdc_portfolio, but the content makes the 'full record' purpose evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 comprehensive profile of a credit provider or BDC, which implies when to use it. However, it does not explicitly state when to prefer this over more targeted sibling tools, nor does it mention any exclusions or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_entityEverything DFX knows about one idA
Read-onlyIdempotent
Inspect

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA 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.
includeNoDefault: relationships, events, evidence, same_as. Add name_candidates to also search the other graphs by name (slower; candidates only).
event_limitNo
evidence_limitNo
relationship_limitNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/non-destructive annotations, the description reveals what the response contains: published relationships with sources and dates, evidence rows, cross-graph same_as links by shared identifier, candidate matches on other graphs, and pointers to deeper views. That is meaningful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence, but each clause adds a distinct data category and the tool's purpose is front-loaded. It could be split for readability, but there is no filler or redundant restating of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 explaining the return contents and does so at a category level. It is missing details on limit semantics and how the 'deeper views' are referenced, but it is adequate for a broad lookup tool whose annotations already cover safety and idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The dfx_id format and the include choices are documented, and the description maps to those categories. However, schema coverage is only 40% and three limit parameters (event_limit, evidence_limit, relationship_limit) have no defaults or behavioral notes beyond their names, so the description only partially compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool's scope: one DFX id and the complete set of data DFX holds about it—card, relationships, events, evidence, same_as links, and name candidates. It distinguishes itself from the many narrow get_* and search_* siblings by framing it as 'One answer to show me everything on X'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the entry condition ('For any DFX id') and the intended use case ('show me everything on X'). It does not explicitly name alternatives or say when to prefer a specialized search/get tool, but the use case is clear enough for an agent to route general entity lookups here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_family_officeOne family office in fullA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA 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

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful detail beyond those flags: financial figures are kept separate with as-of dates, contact points are deliberately withheld, and same_as links are based on shared CRD/CIK/EIN identifiers. This is valuable behavioral context for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense, front-loaded with 'full card', and organizes a long list of return sections with commas. The opening phrase restates the title somewhat, but overall the length is justified by the amount of content the tool returns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description inventories the response sections and explicitly notes an important omission (contact points). The small mismatch between the description's ID scope and the schema's accepted ID scope is a minor gap, but an agent can still invoke and interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter dfx_id is fully documented in the schema with 100% coverage, listing all accepted ID prefixes. The description only adds 'Accepts dfx:fo: ids', which is narrower than the schema's broader list and adds no new meaning, so the schema carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb-resource pair: 'full card for one family office' and enumerates the returned content (profile, AUM/RAUM/13F, people, investments, relationships, events, links). It is specific, but it does not explicitly differentiate itself from sibling get_* or search_family_offices tools beyond the singular 'one' and the ID hint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you have a known DFX ID and want the complete family-office record. It also gives an exclusion ('Contact points are withheld over MCP'), but it never names alternatives such as search_family_offices or search_family_office_investments, nor states when those should be preferred.

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 fullA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA 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

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds substantial behavioral context by detailing the output contents: verification status, counts, reasons, transactions, capital relationships, fund size, SBIC status, strategy, transition signals, and more. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but dense and well-structured, front-loading the main purpose ('The full card for any entity on the sponsor graph') followed by specific entity details in parentheses. Every sentence provides relevant information, and the structure aids readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with no output schema, the description covers the output scope comprehensively, listing entity types and included fields. It lacks error behavior or pagination details, but these are less critical for a read tool with a clear id input. Overall adequate for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter dfx_id, which is fully documented. The description's mention of 'Accepts dfx:isi: ids' is redundant with the schema and adds no new meaning. Baseline 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'the full card for any entity on the sponsor graph' and enumerates three entity types (sponsor, capital provider, private company) with specific details for each. It distinguishes itself from search_independent_sponsors (search vs get) and get_entity (specific vs generic) by scope and content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by mentioning it accepts dfx:isi: ids and is for the sponsor graph, but it does not explicitly state when to use it over alternatives like get_entity or search_independent_sponsors. No exclusions or alternative conditions are provided, leaving the agent to infer the context.

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 operatesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoMunicipality. The parcel key includes it, so an address without a city resolves poorly.
limitNoMax rows. A large building can disclose several tenants.
stateNoTwo-letter US state code.
dfx_idNoA 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.
addressNoStreet address for the one-claim check. Used together with `company`.
companyNoCompany name, for the one-claim check. Used together with `address`; a company name alone is refused.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 fullA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA 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

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: it returns a comprehensive card, accepts multiple id types, and separates stated criteria from observed behavior. It does not mention pagination or response size, but the annotations carry the main safety burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense, and the main purpose is front-loaded. Every clause adds a distinct piece of content about the card's sections. It could be slightly tightened, but the length is justified by the tool's broad scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with one well-documented parameter and no output schema, the description covers the input format, accepted id types, and the full scope of the returned card. It does not describe the output structure, but the absence of an output schema and the tool's read-only nature make this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter dfx_id is well described in the schema. The description adds value by specifying the accepted id forms (dfx:pe:<uuid>) and the source tools that return such ids, which goes beyond the schema's generic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('The full card for a private equity firm') and enumerates the card's sections in detail. It also explicitly states that it accepts person, fund, or company ids and returns the same card, which distinguishes it from sibling get_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the input requirement (a dfx:pe: id as returned by specific search tools) and the accepted id types. It does not explicitly say when to prefer this over get_pe_fund or get_entity, but the detailed scope and the id-source note provide enough context for an agent to select it.

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 fullA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA 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

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds substantial beyond-annotation context: the tool refuses non-fund ids, clarifies that adv_gross_asset_value is reported gross assets rather than fund size or dry powder, and notes LP commitments are only included where disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense, front-loaded sentence conveys the full data scope, followed by one sentence covering refusal behavior and the sibling alternative. Every item earns its place and there is no repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with no output schema, the description thoroughly enumerates content categories, data semantics, caveats, and sibling routing. An agent has enough context to call it correctly and interpret what comes back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a precise dfx_id format and source tools listed. The description adds the acceptance constraint that the id must be a fund and reinforces the manager-vs-fund distinction, slightly extending the schema's meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with 'One fund:' and enumerates exactly what is returned: manager, vintage, basis, Form ADV reporting tape, LP commitments, relationships, events and evidence. It also distinguishes itself from get_pe_firm by explicitly refusing non-fund ids, making tool selection unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly frames the use case as retrieving a single private equity fund in full. It states an explicit exclusion ('Refuses an id that is not a fund') and routes manager lookups to 'get_pe_firm', naming the relevant sibling alternative.

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 parcelA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA 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

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_fund_managerOne real estate fund manager in fullA
Read-onlyIdempotent
Inspect

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, 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 tape runs 2011 to 2024, so a first report is a first sighting and nothing here is a 2025 fact. Holdings, properties and loans appear only where a binding passed its blind labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA dfx:ref:<uuid> manager id, or the manager's CRD as a string.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent), the description discloses important behavioral and data semantics: GAV is defined as assets on a filing date and excludes fund size/commitments/dry powder, quarantined readings are omitted, data only covers 2011–2024 so no 2025 facts exist, and holdings/properties/loans appear only when a binding passed blind labels. These are nontrivial caveats that help the agent interpret results and avoid mis-calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense single paragraph; the first sentence is a very long enumeration of contents separated by commas, which is hard to scan. Though every sentence carries relevant information (input format, GAV definition, temporal range, filtering), the structure could be improved with bullets or shorter sentences. It is not excessively long, but not well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool returning a large aggregate with no output schema, the description covers the input options, the major data components, key definitions, the data time range, and filtering constraints. It doesn't explicitly mention return format or error behavior, but given the annotations already establish safety and the description is detailed, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes dfx_id as 'A dfx:ref:<uuid> manager id, or the manager's CRD as a string' with 100% coverage. The description simply repeats this in prose ('Accepts a dfx:ref: id or the manager's CRD') without adding examples, value formats, or additional parameter nuances, so it stays at the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear, specific verb-and-resource: it returns the complete record for a real estate fund manager, enumerating the manager card, vehicles, family, bindings, properties, loans, events, Schedule A, and cross-graph records. The title 'One real estate fund manager in full' and the comprehensive enumeration distinguish it from siblings like get_re_fund_vehicle and search_re_fund_managers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage via its comprehensive scope and the acceptances of dfx:ref id or CRD, and it adds temporal guidance ('sworn tape runs 2011 to 2024'). However, it does not explicitly name alternatives, state when not to use this tool, or contrast with search_re_fund_managers or get_re_fund_vehicle, leaving usage guidance partly implicit.

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 fullA
Read-onlyIdempotent
Inspect

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 tape runs 2011 to 2024, so a first report is a first sighting and nothing here is a 2025 fact. Holdings, properties and loans appear only where a binding passed its blind labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA dfx:ref:<uuid> vehicle id, an 805- ADV fund id, or an 021- Form D file number.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true and idempotent=true, but the description goes far beyond them by disclosing non-obvious behavioral semantics: a gap is non-reporting, never zero assets; GAV is filing-date assets, never fund size, commitments, or dry powder; quarantined readings add no sum; nothing reflects 2025 facts; and holdings appear only when a binding passed blind labels. These are exactly the kind of traps an agent would otherwise fall into.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although the description is longer than average, every sentence earns its place: the first sentence front-loads the return contents, then each subsequent sentence clarifies a distinct interpretation risk (gaps, GAV, tape range, holdings visibility). There is no filler or repetition of annotation data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description is responsible for explaining return values, and it does so thoroughly: reporting history, family sequence, commitment disclosures, holdings, events, accepted id types, data coverage period, and caveats. An agent has enough information to call the tool and correctly interpret the response for a read-only lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the schema already documents dfx_id as accepting a dfx:ref:<uuid> vehicle id, an 805-ADV fund id, or an 021-Form D file number. The description merely repeats these accepted id forms without adding syntax details, constraints, or examples beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'The vehicle card with its reporting history year by year' and then enumerates the exact contents: GAV, owners, minimum investment, fund type/name, family sequence, public plan commitments, validated holdings, and events. This clearly distinguishes get_re_fund_vehicle from siblings like search_re_fund_vehicles and get_re_fund_manager by naming a specific resource and its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful context—accepted identifier formats, the 2011–2024 tape range, and the meaning of gaps—but it never explicitly tells an agent when to choose this tool over alternatives such as search_re_fund_vehicles or get_re_fund_trends. There is no when-to-use / when-not-to-use guidance, leaving the routing decision partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ria_advisorOne registered advisor in fullA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA dfx:ria:<uuid> advisor id, or the individual's CRD number (IAPD id) as a string.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnlyHint/idempotentHint annotations by disclosing exactly what is included, how employment history is ordered, how firm changes are represented, and what is withheld (book size, disclosure flags, outside business text, street addresses). It also states a plain factual limitation: no book size is public or estimated. This is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause carries information: return fields, ordering rules, inclusions, exclusions, and accepted input. It is front-loaded with the core subject and content list, then caveats, then parameter guidance. No filler or repetition; the length is justified by the lack of an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 value, and it does so thoroughly. It covers the main fields, the unusual employment-history formatting, labeling of bulk re-registrations and departures, team movement, and data exclusions. Nothing critical is missing for an agent to understand what it will get and what it will not get.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents the single dfx_id parameter. The description repeats the same accepted-id formats without adding examples, formatting rules, or clarifications beyond the schema. This meets the baseline but adds little parameter-level value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieving one IAPD-registered advisor with the full set of returned fields. It distinguishes itself from sibling firm-level or search tools by emphasizing 'one' advisor and listing the exact record contents. An agent can tell this is the dedicated advisor-detail tool without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool to get a complete profile for a single advisor, and the input requirement is explicit — a dfx:ria id or individual CRD number. It does not explicitly name alternatives or exclusion criteria relative to search_ria or resolve_ria_advisor, but the intent is unambiguous enough for correct selection.

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 fullA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesAn 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

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent, non-destructive, closed world), the description adds substantial behavioral caveats: fact classes (reported vs derived), RAUM double counting affiliates, survivor bias before 2026-09-15, and 'Nothing here is predictive.' This is exactly the kind of disclosure that 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but extremely information-dense and each sentence contributes a distinct fact: content overview, page-per-section behavior, fact-class semantics, known data quirks, and input format. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with no output schema, the description covers the return structure at the necessary level, communicates important data caveats, and explains what the tool is not (non-predictive). There are no obvious gaps that would prevent correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the parameter at 100%, so baseline is 3. The description adds value by specifying both accepted forms (dfx:ria:<uuid> or CRD string) and by naming the source tools that produce valid ids, which helps the agent construct a correct call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb and resource: returning 'the full card for one registered investment adviser' and enumerates the exact content sections (people flows, growth, offices, owners, affiliates, funds, teams, events, same_as links). This distinguishes it clearly from sibling tools like get_ria_trends or get_ria_practice by emphasizing completeness for a single firm.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the acceptable inputs (dfx:ria ids or CRD) and even tells the agent where those ids come from ('from search_ria, resolve_name or search_entities'). It implies usage when a full RIA firm record is needed, but it does not explicitly contrast with alternative tools or state when not to use it.

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 pathA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesAn 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

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it explains that anomalies are 'a place to look, never a conclusion', that data quality rows are kept apart, that book size and revenue are never estimated, and that each derived metric comes with its formula. It also discloses the source, date, and rights class for contact data. This is substantial behavioral transparency, though it doesn't describe pagination or output size limits, which would be the only remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and front-loaded with the core purpose, but it is a single very long sentence (over 150 words) that packs many items into a comma-separated list. It is not poorly structured, but it would benefit from breaking the content into a short summary sentence followed by a bulleted list of what is included. Every item earns its place, but the lack of visual structure makes it harder for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-parameter tool with no output schema, the description is remarkably complete: it enumerates the full set of returned content categories, explains the derivation of metrics, flags data quality handling, and specifies input formats. The only missing context is the output shape (e.g., whether results are returned as a single object or a nested structure) and any pagination behavior, but with no output schema and a single id input, the description covers nearly everything an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 the single parameter dfx_id with its format and examples. The description adds value by explaining that the id can be either a dfx:ria:<uuid> or a CRD number as a string, and by naming the source tools (search_ria, resolve_name, search_entities) that produce valid ids. This goes beyond the schema's basic type/description, though the schema itself is already quite clear, so a 4 is appropriate rather than a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, specific verb phrase ('What a practice looks like from what it filed') and enumerates the exact resource: one adviser's practice profile built from Form ADV fields, derived metrics, archetypes, peer group, anomalies, offices, retention, and public contact path. It distinguishes itself from siblings like get_ria_firm, get_ria_advisor, and search_ria_practices by focusing on the single-practice profile with derived analytics and anomalies. The title reinforces the scope, and the description's specificity leaves no ambiguity about what the tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the input format explicitly ('Accepts a dfx:ria: id or a CRD') and names the source tools for obtaining that id ('from search_ria, resolve_name or search_entities'). It also clarifies what the tool is not for: it is a single-practice profile, not a search or a list tool, and it explicitly says advisor book size and revenue are marked UNKNOWN and never estimated, which prevents misuse. However, it does not explicitly name sibling alternatives or state when to prefer get_ria_firm vs get_ria_practice, 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.

get_sponsor_lendersWhich lenders finance this sponsor's borrowersB
Read-onlyIdempotent
Inspect

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 id, which is resolved through the credit graph's own cross-reference with its basis printed. A pair whose weakest basis is an inference is an inference.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoborrowers
limitNo
dfx_idYesA dfx:pc: sponsor id, or a dfx:pe: id the credit graph carries.
min_borrowersNo

TDQS

B3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnlyHint, idempotentHint, and destructiveHint, so the bar is lower. The description adds valuable behavioral context: the 'counted once per borrower held' deduplication, the resolution of PE ids through the credit graph's cross-reference, and the handling of inference-based attribution ('A pair whose weakest basis is an inference is an inference'). This goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with output metrics, but the opening sentence is a long run-on listing many fields with commas, making it harder to parse. It packs a lot of information into a few sentences, but a bulleted or more structured format would improve clarity without adding length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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 explain the return shape; it lists metrics but not their types, units, or how they relate to the parameters. It also omits semantics for 3 of the 4 parameters (sort, limit, min_borrowers). For a complex report tool with multiple configurable options, this leaves meaningful gaps for an agent trying to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only dfx_id receives meaningful description in the schema, but the tool description does mention it accepts 'a private credit sponsor id or a private equity id' and explains resolution. However, sort, limit, and min_borrowers have no description in either the schema or the tool description, and with only 25% schema coverage, the description fails to compensate for these undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool returns 'Sponsor by lender pairs counted once per borrower held' and lists the exact metrics (borrowers, facilities, principal, quarters, etc.), making the purpose clear. It does not explicitly distinguish itself from sibling tools like search_sponsor_lender, though the 'get' vs 'search' naming and the report-style output imply a distinct role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this tool over alternatives such as search_sponsor_lender or search_sponsor_capital_providers. The description focuses on accepted inputs ('private credit sponsor id or a private equity id') and internal resolution, but never states the use case or exclusions, so an agent must infer when this report is appropriate.

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 fullB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA 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

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry read-only and non-destructive signals, so the description adds useful behavioral/content context: 'all seven fund amounts kept apart and its lifecycle state', plus relationships, events, evidence, and cross-graph links. It does not contradict the annotations and does not need to repeat their safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main purpose is front-loaded and the parenthetical breakdown is dense but useful. The final 'Accepts dfx:vc: ids' sentence is short but redundant/conflicting with the schema, preventing a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema tool, the description does a good job enumerating the returned card sections and accepted id type. However, it leaves the input-scope mismatch unresolved and gives no guidance on behavior for invalid or non-venture ids.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the sole parameter thoroughly (100% coverage), so the baseline is 3, but the description asserts 'Accepts dfx:vc: ids' while the schema explicitly allows many graph id types. This contradicts rather than adds to the schema and could mislead an agent into rejecting valid inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: it retrieves 'the full card for any entity on the venture graph' and enumerates firm, person, fund, and portfolio company. This goes beyond the name and title, though it does not explicitly contrast with search/get siblings or resolve the dfx:vc-only scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when an agent has a dfx:vc id and needs the full entity card, and enumerates what that card contains. It never names alternatives or gives a when-not-to-use condition, which matters given the large sibling set of singular getters and search tools.

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 connectedB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_hopsNo
to_dfx_idYesA 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_idYesA 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

B3.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description directly contradicts the openWorldHint=false annotation. The annotation indicates a closed-world assumption, meaning 'no result' is definitive, but the description says 'NO_MATCH means no observed path within budget, not that they are unconnected,' which is an open-world caveat. This inconsistency could mislead the agent about the certainty of negative results, making the tool's behavior unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: three sentences that front-load the core purpose, then provide hop-level details, and conclude with result interpretation. Each sentence adds distinct value without redundancy. There is no filler, and the most important information (purpose and scope) appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a graph-path tool with no output schema, the description covers the essential behavioral aspects: hop types, search direction, depth limit, and the meaning of NO_MATCH. However, it does not specify the exact return structure (e.g., ordered list of nodes/edges, whether multiple paths are returned, how sources are attributed). The absence of an output schema means the description should include more detail about the response format, but the given information is largely sufficient for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides detailed descriptions for from_dfx_id and to_dfx_id (covering the DFX graph types), and max_hops has default/min/max constraints. The description adds minimal meaning by clarifying that max_hops is the search depth ('Bidirectional search up to max_hops') and reiterating the default value, but it does not substantially enhance understanding of the parameters beyond the schema. With 67% schema coverage, the description partially compensates but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: finding an evidence-backed path between two DFX IDs across all graphs. It specifies the hop types (published relationships with sources, SAME_AS identity links) and mentions the bidirectional search, which distinguishes it from siblings like search_relationships (which likely returns relationships for a single entity) and get_capital_paths (which focuses on capital flows). The verb and resource are specific and the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (finding connectivity between two known DFX IDs) and provides interpretation guidance for the NO_MATCH result. However, it does not explicitly mention alternatives or conditions for choosing this tool over siblings, nor does it state when not to use it. There is no exclusion or comparison with tools like search_relationships or verify, leaving the agent to infer when this tool is appropriate.

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 parcelA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity 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`.
limitNoMax 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.
stateNoTwo letter state code
addressYesStreet address including the house number, for example '100 Binney St'

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 graphA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name, or a word of it (Blackstone, Horowitz, Thoma).
limitNo
domainNoComma-separated: family_office, independent_sponsor, venture_capital, private_equity, ria, allocators, private_credit, real_estate_funds. Default: all.
entity_typeNoComma-separated graph types: organization, office, sponsor, capital_provider, fund, person, company.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description need not repeat those. It adds valuable behavioral context: ranking order (exact, prefix, word match), one row per entity, typical sub-200ms performance, and role consolidation across graphs. These details go beyond the annotations and help the agent anticipate results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but information-dense, with the core action front-loaded and supporting details (graphs, ranking, performance, alternative) following logically. Every sentence adds value, though it could be slightly tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a resolution tool with no output schema, the description covers the essential context: what it resolves, the graphs, ranking, performance, ordering vs get_entity, and the alternative for real estate. It doesn't describe the exact return structure, but that's acceptable given the absence of an output schema and the richness of other details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so most parameters have descriptions in the schema itself. The description adds minimal parameter-specific detail; it implies the 'name' parameter accepts partial words, but the schema already covers that. It does not explain 'limit' or enrich 'domain' beyond the schema's enum list. Baseline 3 is appropriate since the schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it resolves a firm, fund, person or company name to canonical dfx ids from a specific index, lists the covered graphs, and explicitly differentiates from resolve_organization for real estate. It names the resource (name to dfx ids) and the action (resolve), making it distinct from siblings like search_entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'The first call before get_entity', giving a clear ordering context, and names the alternative 'resolve_organization' for real estate. This provides both when-to-use and when-not-to-use guidance, leaving no ambiguity.

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 entityA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCompany 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.
limitNoMax 50. Every candidate is returned rather than a best guess, so a common name spends this whole budget.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 cardA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
crdNoThe individual's own CRD number (IAPD id); resolves directly.
firmNoThe firm's name or part of it (current or prior registration).
nameYesThe person's name or part of it.
limitNo
stateNoTwo-letter US state code.
firm_crdNoThe firm's CRD number; current registration only.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds substantial behavioral detail beyond those flags: name-only resolution produces labeled candidates with resolved=false, firm matching tries current registration before prior ones, and the returned card matches get_ria_advisor's summary. This clearly sets expectations for the operation's edge cases and return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and efficiently structured: it front-loads the primary purpose in the first sentence, then covers the critical caveat (name alone), the disambiguation order, and the relationship to get_ria_advisor. Every sentence adds value and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations and high schema coverage, the description covers all essential behaviors needed to call the tool correctly: the matching logic, the name-only failure mode, the returned card format, and how to get history. No output schema exists, but the description adequately explains the return concept and the alternative for deeper detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high at 83%, and the description adds meaningful interpretation of parameters: crd resolves directly, firm can be a name or CRD and is matched against current then prior registrations, and name alone is insufficient. This goes beyond the schema's short descriptions, though limit and state receive no additional clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: 'Resolve an advisor by name AND a firm ... or by individual CRD, to one person card.' It distinguishes itself from siblings by explicitly noting that a name alone is never resolved, and by tying the output to get_ria_advisor's summary card, so an agent can tell it apart from related search and resolve tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: it requires firm or CRD for one-person resolution and warns that name-only returns labeled candidates with resolved=false. It also recommends get_ria_advisor(dfx_id) for history, providing an alternative. It does not explicitly name sibling tools like resolve_name or search_people as alternatives, but the guidance is sufficient.

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 wordsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNoFund or manager name contains.
sinceNoISO date; effective date on or after.
bucketNo
cursorNonext_cursor from a previous page of this tool, unchanged.
statusNo
fund_dfx_idNoAn allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities).
re_ups_onlyNo
manager_dfx_idNoAn allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities).
first_time_onlyNo
allocator_dfx_idNoAn allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities).
consultant_dfx_idNoAn allocator graph id of the form dfx:al:<uuid> (from search_allocators, resolve_name or search_entities).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so safety is covered. The description goes far beyond that by disclosing qualitative behaviors: 'commitment dollars repeat across reports' (data duplication), 're-ups are the plan's own words' (subjective labeling), 'estimates are labelled' (data quality), and 'nothing predictive is published' (no forward-looking statements). It also explains status semantics (COMMITTED vs DISCLOSED_HOLDING) and that 'a target is never an actual' – all non-obvious traits an agent must know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense, with no filler. It front-loads the row contents and filters, then appends caveats. While it is a single run-on block rather than bulleted, every clause adds value. The structure is moderately scannable for an agent, though it could be split into short sections for clarity. Given the amount of domain-specific detail, this is appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 return contents comprehensively, all key filters, sort options, and critical data-quality caveats. It explains status semantics and the meaning of 're-up' and 'first-time'. Pagination (cursor, limit) is only in the schema, but that's acceptable since it's a mechanical detail. The description sufficiently equips an agent to select and call the tool correctly, including knowing what factors to be cautious about when interpreting results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 54%, so many parameters lack inline descriptions. The description compensates by enumerating all filter dimensions (allocator, manager, fund, consultant, status, bucket, re-ups only, first-time only, since date) and clarifies semantics that the schema leaves ambiguous, e.g., manager is 'who backs this manager', and statuses carry specific date meanings. It also explains the sort options. Though it doesn't mention every parameter (limit, cursor) explicitly, it gives enough context that an agent can map its listed filters to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise enumeration of what each row contains ('allocator, fund as printed, manager and fund resolved to the pe / vc graphs...'), the statuses and their meanings, and the filterable dimensions. It clearly identifies the tool as returning raw commitment rows from plan disclosures, distinguishing it from aggregated commitment tools like get_commitments. The verb 'search' plus resource 'allocator commitments' is explicit and matches the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists many filter options and explicitly states the data granularity ('One row per line of a plan's own disclosure'), but it never says 'use this when...' or names an alternative (e.g., get_commitments for aggregated totals). The sibling tool get_commitments likely provides aggregate commitments, but no explicit 'instead of' guidance is given. The caveats at the end ('A target is never an actual...') are more about data interpretation than usage conditions.

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 fundsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNoName contains, or an alias (CalPERS, a Census spelling).
stateNoTwo-letter US state code.
cursorNonext_cursor from a previous page of this tool, unchanged.
entity_typeNo
with_policyNo
min_assets_usdNo
allocator_classNo
with_consultantNo
consultant_classNo
with_commitmentsNo
include_componentsNoAlso list units that are components of a larger system (a division, a plan an office invests for).
min_private_markets_target_pctNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnly, idempotent, and non-destructive hints, and the description adds valuable behavioral caveats: 'a target is never an actual, a disclosed holding is never an approval, commitment dollars repeat across reports... nothing predictive is published.' This materially informs the agent about data reliability and interpretation, going well beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not bloated; every sentence contributes, with the core dataset definition front-loaded and entity_type behavior following naturally. It is long for a tool description, but the complexity of the tool warrants it, and the later caveat sentence earns its place by conveying important data-provenance warnings.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 14 parameters and no output schema, the description is notably complete: it names the result shape (compact cards with dfx:al: ids, assets, funded status, targets, commitment counts), explains default query behavior, and warns about data semantics. It does not explain sort options, pagination, or filter behavior beyond entity_type, but those are partially self-evident from the schema and sibling patterns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 29% schema description coverage ablutions, the description compensates for the most important parameter, entity_type, by explaining the semantic difference between consultant, manager, and fund modes, and for query via alias-aware search. However, it leaves many other parameters (sort, state, allocator_class, with_policy, min_assets_usd, etc.) without added meaning, so the description only partially covers the parameter space.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a search across the 'capital-owner graph' and explicitly enumerates the entity types it covers: allocators, consultants, managers, and funds. It goes beyond the tool name by specifying data sources (Census, Form 5500, IRS) and the meaning of each entity_type mode, making it immediately distinguishable from siblings like get_allocator or search_entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear internal routing guidance: it defines what happens with a bare query versus each entity_type value, so an agent knows which mode to choose. It does not explicitly contrast this tool with sibling search/get tools, but the entity_type distinctions supply strong contextual direction.

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 concentrationA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring of the institution name, case-insensitive, e.g. 'riverhills'.
sortNoDescending on the named measure. Default cre_to_equity.
limitNoRows to return, 1 to 50. `matched` states the true total regardless.
stateNoTwo-letter US state, district or territory code of the bank's home office. Unknown codes are refused, not searched.
above_guidanceNotrue: only banks whose total CRE exceeds 300% of equity (the guidance line, on a proxy denominator). false: only banks under it.
min_assets_usdNoFloor on total assets in dollars, e.g. 1000000000 for $1B.
min_noncurrent_pctNoFloor on the CRE noncurrent ratio in percent.
max_cre_to_equity_pctNoCeiling on the same ratio.
min_cre_to_equity_pctNoFloor on total CRE as a percent of equity, e.g. 300.

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_capital_changesWhat changed on the allocator, private credit and real estate fund graphsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
graphYesal (allocators), pc (private credit), ref (real estate funds).
limitNo
sinceYesISO date or timestamp; rows first seen after it.
dfx_idNoAn id on that graph; rows where it is the subject or the related entity.
event_typeNo
include_seededNoAlso rows seeded when the arm was created (the history, not this week's change).

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive. The description adds valuable behavior: the 'first sight' ordering semantics, the exclusion of seeded rows unless include_seeded=true, and the use of next_since for polling. This goes beyond the annotations and clarifies the pagination model, which is essential for correct usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is verbose with a long list of example change types ('Commitments and re-ups...', 'facilities marked down...') which adds color but is not essential for calling the tool. The core concept is front-loaded in the first sentence, but the subsequent examples and caveats could be trimmed. It's structured but not tightly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 should explain the return value. It mentions 'next_since' and lists change types, but does not describe the response structure (e.g., fields per row, pagination format). It also doesn't clarify the event_type parameter's allowed values or the limit's effect. For a tool with 6 parameters and no output schema, the description is moderately complete but leaves some operational details uncovered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 4 of 6 parameters (graph, since, dfx_id, include_seeded), but limit and event_type lack descriptions. The tool description does not explain these parameters either, so the gap remains. The description mentions next_since but doesn't map it to the since parameter. Since the schema covers the main parameters and the description adds no new parameter semantics, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the tool as a change tape for three specific capital graphs (allocators, private credit, real estate funds) and explains it returns rows by first-seen date. This clearly distinguishes it from general search tools, though the purpose is implied rather than stated as a direct verb like 'retrieves changes'. The resource and scope are explicit, but it doesn't explicitly say 'returns a list of changes'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context for polling ('Poll with the next_since the answer returns') and notes that seeded rows are excluded by default. However, it does not compare this tool to sibling alternatives like search_private_credit_changes or changes_since, nor does it state when NOT to use it. The usage is implied for polling changes on these graphs, but lacks explicit routing guidance.

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 windowA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNoISO date; default today.
lienNo
limitNo
cursorNonext_cursor from a previous page of this tool, unchanged.
monthsNo
sponsor_dfx_idNoA private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities).
min_principal_usdNo

TDQS

A4.4/5.0
Behavior4/5

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 meaningful behavioral context: it explains that principal held is a lower bound, that a BDC tagging no maturity contributes nothing, and that results are ordered by date. It also discloses the default window. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that front-loads the core purpose and default window, then lists output fields and filters. Every sentence earns its place: no filler, no repetition of schema details, and the key behavioral caveats (lower bound, no-maturity exclusion) are included without bloating the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search tool with 7 optional parameters and no output schema, the description covers the essential semantics: what is searched, what is returned, the default window, and the filters. It does not describe pagination behavior or the exact format of the cursor, but those are standard and the schema covers cursor. The main gap is that it doesn't explicitly state the relationship to debt_maturity_schedule, but the description is otherwise complete enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 43%, so the description must compensate for undocumented parameters. It does: it explains the window concept (months, from), the filters (sponsor, lien, minimum principal), and the meaning of the output fields. It does not explicitly explain cursor or limit, but those are pagination parameters whose semantics are standard and partially covered by the schema (cursor has a description). The description adds real meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('search') and resource ('debt facilities on a BDC schedule whose maturity falls inside a window'), and clearly distinguishes it from siblings like debt_maturity_schedule by focusing on facilities still on a BDC schedule with tagged or written maturity. It also names the default window and the output fields, so an agent can tell exactly what this tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: when you need facilities maturing inside a window, with filters by sponsor, lien, and minimum principal. It does not explicitly name alternatives or exclusions, but the sibling list includes debt_maturity_schedule and get_borrower_facilities, and the description's specificity about 'still on a BDC schedule' and 'tagged or written maturity' gives enough context to select it. A clear when-not-to-use statement would push this to 5.

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 onceA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
sortNo
limitNo
queryNoA name (contains).
stageNo
stateNoTwo-letter US state code.
cursorNo
domainNoComma-separated: real_estate, family_office, independent_sponsor, venture_capital, private_equity, ria, allocators, private_credit, real_estate_funds. Default: all.
sectorNo
verticalNo
active_onlyNo
asset_classNo
entity_typeNofamily_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_usdNo
has_real_estateNo
min_opportunityNo
invests_directlyNo
recent_activity_daysNo
has_sponsor_relationshipsNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns compact cards with stable dfx ids and a per-domain coverage note, and it trades depth for breadth. It doesn't disclose pagination or default sort behavior, but the schema covers limit/cursor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense paragraph that front-loads the core value proposition and then lists the filter categories. It is slightly long but every sentence adds context about scope, output, or trade-offs. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a broad search tool with 19 optional parameters and no output schema, the description gives a good sense of scope and output format, but it doesn't explain the semantics of the many optional filters or the pagination/response shape. The annotations cover safety, and the schema covers parameter names, but the description doesn't fully compensate for the 21% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 21%, so the description must compensate. It does mention the key filter categories (entity_type, domain, state, sector) and the name query, but it doesn't explain the meaning of many other parameters (min_aum_usd, recent_activity_days, has_sponsor_relationships, etc.). The description adds some value by framing the filter groups, but the low coverage leaves a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('search') and resource ('every DFX domain at once'), enumerates the domains covered, and explicitly contrasts itself with the per-domain searches. This clearly distinguishes it from the many sibling search_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys when to use this tool: when you want breadth across all domains in one query. It also notes the trade-off ('fewer per-domain filters than the domain searches'), which implies when not to use it. It doesn't explicitly name a sibling alternative, but the contrast with 'domain searches' is sufficient.

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 domainsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNoISO date; events that occurred on or after.
stateNoTwo-letter US state code.
dfx_idNoA 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.
domainNo
event_typeNo
within_daysNo
signal_familyNo
exclude_routineNo
min_significanceNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate read-only, idempotent, and non-destructive behavior, so the description only needs to add context. It usefully adds that results are "Ordered and windowed by when events occurred" and that "Routine 13F position and fund-reporting noise is excluded unless asked for," which clarifies how the exclude_routine filter behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one dense sentence but front-loads the core identity and uses the long list of event types to convey real scope. Every clause adds information; it is slightly list-like but not padded. It earns a high score because the detail replaces the missing output schema context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and 10 parameters, so the description carries a heavy burden. It provides a solid orientation and covers most filter dimensions, but it omits value formats, event_type enumerations, output shape, and pagination behavior. It is adequate for initial selection but not fully complete for nuanced invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 compensate. It does map several parameters semantically — "domain, subject dfx_id, event_type, state, significance and window" — and the event-type list gives meaning to event_type. However, signal_family is never explained, and min_significance and window are only hinted at rather than precisely defined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource: "Dated events across family offices, sponsors, venture, private equity and real estate" and enumerates concrete event types. It distinguishes itself from the many domain-specific sibling change tools by emphasizing the cross-domain "change tape" scope and by noting the ability to filter by domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies broad usage: this is the general cross-domain event search, and it says "Filter by domain, subject dfx_id, event_type, state, significance and window." However, it never tells an agent when to prefer this over domain-specific siblings like search_private_credit_changes or search_capital_changes, and it offers no explicit when-not-to-use guidance.

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 investmentsA
Read-onlyIdempotent
Inspect

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNoISO date.
stateNoTwo-letter US state code.
sectorNo
asset_classNo
office_dfx_idNoA 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_kindNoportfolio_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_candidatesNoWithout 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

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond that: the data is 'observed' and 'dated', amounts are 'where disclosed (with basis)', and results include source quotes. It also warns that this is evidence-based rather than exhaustive. This context helps an agent calibrate reliability of results, which is valuable on top of the annotation safety flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first defines the payload, the second lists filters, the third states the value proposition. The structure front-loads the core meaning. It is slightly list-heavy but not bloated; each field named is substantive. It could be tightened by trimming redundant filter names, but overall it is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search/read tool with 8 optional parameters and no output schema, the description covers what an agent needs: it names the return fields (target, sector, asset class, structure, control, lead, amounts, board seats, exits, source quote), the filters, and the caveat on disclosed amounts. The schema fills in parameter details (enum options, id formats, include_candidates behavior), so the combination is sufficient to invoke correctly. It does not mention pagination or default limit, but those are minor for this tool type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 63%, so the schema already documents several parameters (since, state, office_dfx_id, investment_kind enum values, include_candidates behavior). The description reinforces the mapping by listing 'sector, asset class, state, kind or since-date' as filter options, which helps connect natural-language filter concepts to parameters. However, it adds little beyond the schema: 'limit' is unexplained (though self-evident) and no new semantics are introduced for the more opaque parameters like asset_class or sector.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Dated investments family offices have been observed making' and then enumerates the data dimensions (target, sector, asset class, structure, control, lead/participant, amounts, board seats, exits, source quote). This clearly distinguishes it from siblings like search_family_offices (which would return office records) and search_vc_investments (venture-specific). The closing phrase 'The evidence behind "this office backs X"' crystallizes the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than explicit: the description tells you what filters exist ('Filter by office, sector, asset class, state, kind or since-date') and the use case ('evidence behind this office backs X'), but it never states when to choose this tool over alternatives like search_vc_investments or search_allocator_commitments, nor does it mention exclusions or prerequisites. That is adequate but leaves the agent to infer the decision boundary from resource names.

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 officesA
Read-onlyIdempotent
Inspect

Family offices as compact cards: class (single, multi, embedded...) with confidence, whether they invest directly, sectors and asset classes on record, check size where stated, direct investment count, latest deployment, and counts of people, sponsor and real estate relationships. Filter by state, sector, direct investing, recent activity or AUM. Returns dfx:fo: ids. People and individual investments are not on these cards.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
sortNo
classNoThe classifier's verdict. A CANDIDATE is a name, never a class. NOT_FAMILY_OFFICE rows are excluded unless asked for.
limitNo
queryNoName contains.
stateNoTwo-letter US state code.
cursorNo
sectorNoA sector on the office's record, e.g. industrial services, healthcare, real estate.
asset_classNo
min_aum_usdNo
has_real_estateNoOffices 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.
invests_directlyNo
recent_activity_daysNo
has_sponsor_relationshipsNoOffices 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

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read-only, idempotent, non-destructive profile. With no output schema, the description carries the return-value burden and does so by enumerating the card fields and the dfx:fo: id format, plus disclosing the exclusion of people and individual investments. It stops short of describing pagination or limit behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is dense but front-loaded: card contents first, then filters, then the return id convention, then the exclusion. The card-field enumeration is long but earns its place given the absent output schema; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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, the description gives an adequate picture of returns and filters but leaves several filter parameters (cursor, sort, limit, asset_class) unexplained and does not address pagination. It is workable but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 43% across 14 parameters, so the description should compensate, and it partly does by naming the filterable axes (state, sector, direct investing, recent activity, AUM). But it omits city, sort, class, limit, cursor, query, asset_class, has_real_estate, and has_sponsor_relationships, leaving roughly half the parameters documented only in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (US family offices) and specifies exactly what the tool returns — compact cards with class/confidence, direct-investing flag, sectors, check size, deployment, and relationship counts. It also implicitly separates itself from siblings by stating 'People and individual investments are not on these cards,' though it never names the alternative tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It lists the usable filters (state, sector, direct investing, recent activity, AUM) and draws one negative boundary by excluding people and individual investments, which hints at routing. However, it never names alternatives such as search_family_office_investments, search_people, or get_family_office, so the when-to-use guidance stays 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_independent_sponsorsSearch independent sponsorsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
kindNo
sortNo
limitNo
queryNo
stateNoTwo-letter US state code.
sectorNoFree 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_confidenceNo
include_unverifiedNotrue returns the research list instead: unverified Form D filing groups and candidates, never paired with companies. Default false.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to repeat safety. However, it adds behavioral context about the output format (compact cards, labelled research list), how unverified firms are handled, and the special behavior with 'sector' (observed deals first). It doesn't disclose potential latency or pagination, but the extra context justifies a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not overly long. It front-loads the core purpose and output format, then covers edge cases. The sentences are packed with information, but every part is relevant. Minor redundancy with annotations (readOnly) but no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with no output schema, the description gives a rich picture of what is returned: fields like verification status, classification, mandate summary, principals, vehicle count, and similarity counts. It also explains the behavior with unverified and sector. The remaining gap is not explaining the 'sort' parameter's effect on relevance, but overall it is complete enough for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description carries extra weight. It explains the meaning of the 'sector' parameter (maps to eight verticals, falls back to mandate summary), 'include_unverified' (returns research list), and 'kind' (though not fully detailed). This adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for verified independent sponsor firms, with a specific resource type and scope. It distinguishes itself from siblings by explicitly excluding capital providers and target companies, and by mentioning the 'dfx:isi:' id prefix, which helps differentiate from other entity-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool: for verified sponsors, and when to use the research list (with include_unverified). It also clarifies that capital providers and target companies are not included, which prevents misuse. However, it doesn't explicitly name alternatives like get_independent_sponsor or search_sponsor_deals for more specific queries.

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 valueA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 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.
stateNoTwo letter state code
land_useNoAssessor land use code, for example 'R3' for a three family dwelling
tax_exemptNotrue for the institutional universe (churches, universities, authorities), false for the taxable one
built_afterNoExclusive lower bound on year built
built_beforeNoExclusive upper bound on year built
max_assessedNoMaximum assessed total, in dollars
min_assessedNoMinimum assessed total, in dollars
municipalityNoCity or town, for example 'Boston'
owner_occupiedNotrue for owner-occupied, false for investor or institutionally held. Parcels whose roll does not state it are excluded either way.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 firmsA
Read-onlyIdempotent
Inspect

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, class, class_state, size_band, state or minimum transactions in 36 months. 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNotransactions (default): most deals in 36 months; gav: reported PE gross assets; recent: latest event; funds: private equity fund count.
classNoThe 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.
limitNo
queryNoFirm name contains, e.g. 'Audax'. Punctuation is ignored.
stateNoTwo-letter US state code.
cursorNonext_cursor from a previous page of this tool, unchanged.
size_bandNoLOWER_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_stateNoHow settled the class is. confirmed means evidence the classifier treats as decisive; probable is a strong inference.
min_transactions_36mNoAt least this many transactions as sponsor, buyer, co-investor or minority investor announced in the last 36 months.

TDQS

A4.3/5.0
Behavior4/5

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 clear. The description adds critical behavioral context: it explains what is NOT included (funds, people, transactions, scores with components) and clarifies that reported gross assets are NOT fund size or dry powder, preventing misinterpretation. It also mentions the classifier's state and confidence, which is useful behavioral nuance. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that is front-loaded with the key information (what the cards contain) and then covers filtering and exclusions. It is comprehensive but not overly long; the structure could be improved with separators, but the content is necessary and efficient. A 4 is warranted because it says a lot without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters, many enums) and no output schema, the description is fairly complete: it explains the card contents, the filter options, the meaning of size bands and class states, and directs to get_pe_firm for deeper data. However, a few details are absent: it doesn't explain the 'basis' for size band, the confidence details of the classifier, or the exact format of the return (e.g., pagination via cursor). But the description handles the most critical usage scenarios. A 4 is fair.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 89%, which is high, so the schema already documents most parameters. The description does not add much beyond the schema, but it does clarify the meaning of size_band (UNSIZED means no evidence, not 'small') and that class CANDIDATE_PE is not yet ruled on. Since coverage is high, a baseline of 3 is appropriate; the description adds marginal value but does not duplicate the schema extensively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches private equity firms and returns compact cards with specific fields. It explicitly distinguishes from get_pe_firm (for funds, people, transactions) and names alternative tools for family offices, independent sponsors, and venture firms. The verb 'Search' plus the resource 'private equity firms' is specific and differentiates it from sibling search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: it is for private equity firms (management companies and advisers), not for family offices, independent sponsors, or venture firms, for which it names alternative tools. It also clarifies the scope of returns (cards, not funds/people/transactions) and directs to get_pe_firm for deeper data. This is exemplary usage guidance.

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 amountsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNoFund name contains, e.g. 'Fund IV'.
cursorNo
max_vintageNoFour-digit year.
min_vintageNoFour-digit year.
adv_fund_typeNoThe fund type the adviser swore on Form ADV Schedule D.
lifecycle_stateNo
min_adv_gav_usdNoMinimum reported Form ADV gross asset value in US dollars (reported gross assets, not fund size).
organization_dfx_idNoA 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

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry read-only, idempotent, and non-destructive hints, so the safety profile is established. The description adds a meaningful behavioral caveat: that the Form ADV gross asset value is the reported gross assets and not fund size, commitments, or dry powder, which prevents misinterpretation of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of three sentences, front-loaded with scope and then enumerating return fields and filter criteria. It is efficient, though the field list is dense and some repetition of filter concepts exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Whttps://annotations already cover safety, and the description explains the key return fields and their semantics, which matters because there is no output schema. It doesn't mention pagination, cursor, or default sorting, but these are standard search parameters likely implied by the schema. The description is sufficiently complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already contains descriptions for 6 of 10 parameters (60% coverage), so the description doesn't need to fully compensate. It repeats the filter list (name, manager, ADV fund type, vintage, lifecycle, minimum GAV) but provides little additional param-level semantics beyond what the schema gives. It also mentions 'manager' which isn't a defined parameter, adding slight ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('search'), the resource ('Funds on the private equity graph'), and the core output (amounts under their own names and bases). It lists concrete return dimensions and filter types, which distinguishes it from related siblings like search_pe_firms or search_vc_funds.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this tool targets private equity graph funds and enumerates the available filters and fields. It does not explicitly name alternatives or exclusion criteria, but the scoping is specific enough for an agent to select it over VC funds or firm search tools.

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 changesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoAn evidence tag, e.g. OPERATOR_CHANGE_PENDING, PORTFOLIO_BATCH, HUD_FHA_EXPOSURE, PLANNED_CLOSE_PASSED.
viewNoopen
limitNo
queryNoMatches facility, current or proposed operator, or real estate owner.
stateNo
changed_sinceNoYYYY-MM-DD: return change alerts observed on or after this date.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring readOnlyHint, idempotentHint, and destructiveHint false, the description adds genuine behavioral detail: 'returns what changed instead' when changed_since is used, 'Not predictions', and the important caveat that proposed owners and percentages are not returned as fact. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that leads with the core purpose and states, then enumerates the output fields and caveats. Every clause carries meaning, but the long enumeration makes it slightly less scannable than a more structured list; still compact with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description carries the burden of return format and it does so well: fields, record classes, state stages, and source. It also tells the agent what is not returned. The gaps are semantic explanations for the 'view' enum and the 'limit' parameter, which are either self-evident or and supplied by schema defaults. Overall it is complete for a niche search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers tag, query, and changed_since with descriptions, while view and state have enums without descriptive text. The description enriches changed_since by explaining the return-mode shift and lists the states, but it does not explain the 'view' enum (what 'effective' vs 'withdrawn' means) or limit behavior. Given 50% schema coverage this partial compensation lands at a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 official state records of pending skilled nursing facility ownership changes before they take effect. It names the states, enumerates the return fields (facility, CCN, beds, operators, record class, dates, evidence tags), and explicitly disclaims predictions, clearly distinguishing it from any generic search tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is given: use it for official pending ownership-change records in Kentucky, New York, Rhode Island, New Jersey, and Maine. The 'With changed_since...' clause explains a different invocation mode, and 'Not predictions' sets expectations. However, no sibling is explicitly called out as an alternative and no 'when-not-to-use' guidance is given, which prevents 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 graphsA
Read-onlyIdempotent
Inspect

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. At least one of query, 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; the site publishes them per office.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNofamily_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.
limitNo
queryNoA person's name (contains).
domainNo
current_onlyNo
cross_graph_onlyNoOnly 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_idNoA 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_responsibilityNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the bar for behavioral disclosure is lower. The description adds meaningful context: it notes that 'Contact points are withheld over MCP; the site publishes them per office' and that calls with missing required parameters are refused with INVALID_ARGUMENT. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with the core subject first, followed by filtering optionsabbruch, a special-use example, and error behavior. Each sentence contributes meaningful information, and there is no fluff. It is slightly longer than necessary but remains focused and ordered logically from general to specific.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with 8 parameters, no output schema, and rich annotations, the description covers the core usage patterns, required parameter constraints, error behavior, and a special cross-graph capability. It explains what data is returned and from which sources, and even discloses contact-point withholding. Missing details like limit defaults and current_only semantics are available in the schema, so the description is sufficiently complete for an agent to formulate valid calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, with limit, current_only, and investment_responsibility lacking in-schema descriptions. The tool description partially compensates by explaining the 'at least one required' rule and the cross_graph_only semantics, but it does not clarify the meaning or acceptable values for current_only or investment_responsibility. The parameter names are somewhat self-explanatory, but the description does not fully bridge the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states that it searches for people (investment professionals, principals, family office staff) with rich attributes: 'names with titles, roles, seniority, investment responsibility, organisation and tenure' and that it covers family office, sponsor, venture, private equity, and RIA domains. It clearly distinguishes this from sibling entity-search tools like search_family_offices and search_ria_firms by focusing on people rather than organizations, and by explicitly mentioning filtering by name, organization_dfx_id, or role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: search by name, organization_dfx_id, or role, and describes the cross_graph_only scenario ('answers which venture people are connected to family offices in one call'). It also explicitly states that at least one of query, organization_dfx_id, role, investment_responsibility, or cross_graph_only is required and that calls with none are rejected with INVALID_ARGUMENT. However, it does not explicitly mention when NOT to use this tool compared to alternative search tools, which keeps it from a 5.

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 companiesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNoCompany name contains.
stateNoTwo-letter US state code.
sectorNoIndustry contains, e.g. 'healthcare', 'software', 'distribution'.
owner_dfx_idNoA dfx:pe: firm id; only platforms it owns or has owned.
min_add_ons_24mNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful return-value context by listing fields like 'add-on counts (total and last 24 months)' and clarifies the output is dfx:pe: company ids, but it does not disclose pagination, sort behavior, or any edge cases beyond what is already in 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient, packing the definition, returned fields, filters, and the downstream cross-reference into a compact structure. The key concept 'platform companies as a sponsor's platform investment, or a company that has made add-ons' is front-loaded before the detail list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 explaining return values, and it does cover most of what an agent needs: the result fields and the filterable attributes. It is missing clarity on what the sort modes ('add_ons', 'recent', 'activity') mean, which is relevant for selecting the right call behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 57%, so the description must add meaning for parameters lacking schema descriptions. It does map filters to concepts like 'name' for query, 'industry text' for sector, 'minimum add-ons in 24 months' for min_add_ons_24m, and 'owner firm' for owner_dfx_id. However, it does not explain the semantics of the sort enum values or limit beyond what the schema's enum/default already provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the resource: private equity 'platform' companies, including what qualifies as a platform and the key data returned (add-on counts, owners, scores). It also distinguishes the tool from the sibling find_pe_addons_for_platform by stating it returns dfx:pe: company ids for that downstream workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by enumerating filters: 'Filter by name, state, industry text, minimum add-ons in 24 months or owner firm.' It also hints at a workflow by saying returns IDs 'for find_pe_addons_for_platform.' However, it does not explicitly state when to prefer this tool over alternatives such as search_private_companies or search_pe_transactions.

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 transactionsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoTarget company name contains.
sinceNoISO date; transactions announced on or after.
stateNoTwo-letter US state code of the target.
add_on_onlyNo
firm_dfx_idNoA dfx:pe: firm or person id; returns transactions where it is any party (sponsor, buyer, seller, co-investor, lender, adviser, deal partner).
target_dfx_idNoA 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_statusNo
platform_dfx_idNoA 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_typeNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses important data-behavior rules: amounts are shown 'ONLY where disclosed', and 'An undisclosed amount is absent, never estimated.' It also explains that every party is returned with role, side, and attribution, and that add-on identification includes its basis. This is rich behavioral context well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense single paragraph but every clause adds information: deal types, returned fields, the disclosure caveat, and filters. It is slightly run-on and could benefit from bullet points, but it is not padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters and no output schema, the description does a good job enumerating returned fields (type, status, dates, target, control, parties, money) and the major filter dimensions. It omits limit/pagination expectations, but the schema documents the limit default and maximum, so the remaining gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%, and the description compensates partially by mapping filters to concepts: 'firm (any party)' clarifies firm_dfx_id, 'target name' for query, 'target state' for state, and 'add-ons only' for add_on_only. It does not describe the limit parameter or enumerate transaction_type/control_status values, but the enum schemas fill some of that gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as private equity transactions and enumerates the deal types covered (acquisitions, add-ons, recapitalisations, carve-outs, etc.). It is specific and substantive enough that an agent can distinguish it from related tools like search_pe_firms or search_sponsor_deals without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists the available filters: firm, target, platform, type, target state, since-date, add-ons only, control, and target name. This provides clear context for when and how to use the tool. It does not name alternative tools or state when not to use it, but the filter list itself is practical usage guidance.

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 an ownership transition comingA
Read-onlyIdempotent
Inspect

US private companies whose filings (Form 5500 plan history, final filings, ownership changes) show a transition: vertical, plan participants as a size proxy, EBITDA band where derivable, and scores 0 to 100 for opportunity, dealability, transition readiness and urgency, each backed by observations. Filter by vertical, state, NAICS prefix, size and minimum opportunity. Returns dfx:isi: ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
sortNo
limitNo
queryNo
stateNoTwo-letter US state code.
verticalNoOne of business_services, industrial_manufacturing, industrial_services, healthcare_services, consumer_services, specialty_distribution, transportation_logistics, tech_enabled_services (free text is mapped onto these).
subsectorNoFree text on the subsector (slower).
naics_prefixNo
record_statusNo
min_opportunityNo0 to 100; the median company scores 21 and the top decile above 28.
max_participantsNo
min_participantsNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, openWorldHint=false, idempotent, non-destructive, so the safety profile is covered. The description adds useful behavioral context: scores are 0–100, backed by observations, and it returns dfx:isi: ids. But it omits pagination, result ordering behavior, or score semantics beyond the filter threshold.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is essentially one dense but well-structured sentence listing what is returned and how to filter. It is appropriately sized and front-loaded with the core signal, though the run-on structure slightly reduces clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 12 parameters, no output schema, and many undocumented fields in the schema, the description does a good job explaining the core output (scores, observations, ids) and the main filter families. It stops short of describing every parameter, leaving some gaps for the lower-value fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, so the schema leaves many parameters (city, sort, limit, query, naics_prefix, record_status, max_participants, min_participants) undocumented. The description compensates by grouping filters and naming vertical, state, NAICS prefix, size and minimum opportunity, though it doesn't explain individual undocumented params like sort or city.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (US private companies) and the distinctive signal: an ownership transition evidenced by filings. It clearly distinguishes itself from sibling search tools like search_entities or search_vc_firms because it targets transitioning private companies with scores.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives the domain and filters (vertical, state, NAICS prefix, size, minimum opportunity), implying when to use it. But it never names alternatives or states when not to use this tool (e.g., search_entities for non-transition companies). Usage is implied, not explicit.

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 fundsA
Read-onlyIdempotent
Inspect

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 and default are not on the tape and are never inferred.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
classNoProvider class (probable or confirmed).
limitNo
queryNo
stateNoTwo-letter US state code.
cursorNonext_cursor from a previous page of this tool, unchanged.
industryNoIndustry as a filer wrote it (contains).
held_onlyNo
entity_typeNoDefault: any type with a query; providers without one. borrower lists exclude grade C groups.
min_lendersNoBorrowers held by at least this many BDCs.
sponsor_dfx_idNoA private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities).
maturity_beforeNoISO date: borrowers whose next dated maturity is on or before it.
bdc_advisers_onlyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe-read, idempotent, closed-world profile, so the description's job is to add interpretive context—and it excels. It discloses the fact-class taxonomy (filed vs derived vs carried vs inferred) with the lower-bound caveat for summed pieces, and it pre-empts misreading with explicit guardrails: a mark below cost is not an impairment, a moved maturity is not an amendment, and non-accrual/default are never present. This directly prevents an agent from drawing false conclusions from result rows.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, each earning its place: scope and provenance first, then query-vs-filter mechanics, then fact-class semantics and interpretive guardrails. The density is justified given 13 parameters, no output schema, and high misinterpretation risk; nothing is fluff and the most critical caveats are saved for the end where they reinforce rather than distract.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool this complex—13 params, no output schema, ambiguous query resolution—the description covers the data provenance, mode selection, fact classes, and interpretive guardrails well. What is missing is the result shape (row fields, pagination/next_cursor behavior beyond the schema's one-liner) and the semantics of `sort` and `held_only`. Since there is no output schema, the description carries more of the return-value burden than it fully discharges.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 62%, so the schema handles roughly half the parameters. The description compensates where it matters most: `query` has no schema description but gets rich semantics here (trigram matching across names/aliases, distinct rows for adviser/BDC/ticker). It also explains how the filter parameters divide into provider-listing vs borrower-listing modes. Gaps remain for `sort`, `held_only`, and `limit`, which are neither described in the schema nor the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (the private-market capital structure graph) and the data source (every BDC's schedule of investments since 2022), and states the tool searches lenders, BDCs, borrowers, sponsors, and credit funds. It distinguishes itself from siblings through its provenance and its query-vs-filter mechanics, though it never names a sibling it is not, so differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear within-tool usage context: `query` is for name resolution (with trigram/alias semantics), and without a query, filters list either providers (class, state, BDC advisers only) or borrowers (sponsor, industry, minimum BDC lenders, maturity before, sort). It does not, however, name alternative sibling tools or state when to prefer them over this one, so cross-tool routing is left to the agent.

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 tapeA
Read-onlyIdempotent
Inspect

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, 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
byNoeffective
limitNo
sinceYesISO date or timestamp.
untilNo
cursorNonext_cursor from a previous page of this tool, unchanged.
dfx_idNoA dfx:pc: id; events where it is the subject or related.
event_typeNo
include_routineNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the readOnly/idempotent hints: it distinguishes 'effective' vs 'observed' dates, clarifies that term changes are 'observed term changes, not amendments,' and notes routine changes only appear with include_routine. This explains semantics that annotations alone do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the core behavior (dated changes, two modes) and then lists the covered change types in a compact list. No filler words; it is efficient and well-organized for the information it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 should hint at the return shape, but it does not mention pagination, cursor behavior, or result fields. It thoroughly covers scope and filtering semantics but omits output details, making it incomplete for an agent expecting to interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 38%, and the description compensates partially by explaining the 'by' parameter (effective vs observed) and the 'include_routine' flag, which lack schema descriptions. However, it does not elaborate on 'since', 'until', 'limit', 'cursor', 'dfx_id', or the event_type enum beyond what the schema already lists, leaving gaps for several parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool reports dated changes in private credit, enumerating specific types (new borrowers, lenders joining/leaving, markdowns, PIK, maturities, spreads, sponsor-lender pairs) and the two sorting modes (effective date or first-seen). It gives a precise scope but does not explicitly name sibling tools for contrast, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for private credit change queries and clarifies that routine changes require include_routine=true, but it does not explicitly differentiate from overlapping siblings like search_capital_changes or search_credit_maturities. There is no 'use this instead of X' guidance, so it relies on the reader to infer.

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 windowA
Read-onlyIdempotent
Inspect

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,395) now national rather than Massachusetts, CMBS distress and workout reporting (163 delinquency flags across 26 states, 123 foreclosures across 21), issued building permits and demolition filings (Boston only), and recorded sales (43,680, 2 states). 9,368 events fall inside the next 548 days, measured 2026-09-21. Filter by event type, state and days ahead. An unrecognised event type is REFUSED with the served vocabulary, never answered with an empty list. Free. ORDER: results are sorted by occurred_at. A family whose events lie AHEAD is returned soonest first, so the first row is the next thing to happen. A family whose events have already happened is returned NEWEST first, so the first row is the most recent thing that did. The tie-break is stable, so paging never reorders what you have already seen. FORWARD, soonest first: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. HISTORICAL, newest first: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED. Measured 2026-09-21. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 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.
stateNoTwo letter state code
cursorNoThe `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_typeNoONE 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_daysNoFORWARD 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-09-21, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED.
include_pastNoReturn 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.

TDQS

A3.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds excellent detail on sorting, tie-breaking, cursor validity, and refusal semantics, but it directly contradicts the `openWorldHint: false` annotation by stating that an empty result is not by itself evidence of an absent market. That is an open-world claim, so the description contradicts the annotation and this dimension must be scored 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope are front-loaded, and ORDER and PAGING sections keep a long text navigable. There is some redundancy—the 2026-09-21 measurement date and the forward/historical family lists appear more than once—so it is not maximally concise, but each major section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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, it explains the result traits (provenance, human-readable headline), sort direction, first-row semantics, stable paging, final-page detection, and error behavior, plus coverage caveats. An agent has enough to call, page, and interpret the tool, aside from the annotation contradiction already flagged.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though the schema covers all parameters, the prose adds cross-parameter meaning that cannot be inferred from individual fields: `within_days` only applies to the four forward families, historical families require it unset, `include_past` interacts with the default date floor, and a cursor is tied to the original sort and `event_type`. These interactions are essential for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise subject—'Dated events over US properties and parcels'—and immediately enumerates the covered families (LIHTC endings, HUD expiries, loan maturities, CMBS distress, permits/demolitions, sales). This establishes a specific verb, resource, and scope, and clearly separates it from generic siblings like search_events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives actionable when-to/when-not rules: use `within_days` only for forward-looking families, leave it unset to reach historical events, and treat unknown event types as refused rather than empty. It does not explicitly name an alternative sibling tool, but the parameter-level guidance is clear and explicit.

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 managersA
Read-onlyIdempotent
Inspect

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, strategy class, size band, operator model, gross asset value, vehicles, property type, holdings or public LPs. 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 tape runs 2011 to 2024, so a first report is a first sighting and nothing here is a 2025 fact. Holdings, properties and loans appear only where a binding passed its blind labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
crdNo
sortNo
limitNo
queryNoManager name contains, or a CRD.
stateNoTwo-letter US state code.
cursorNonext_cursor from a previous page of this tool, unchanged.
size_bandNo
max_gav_usdNo
min_gav_usdNo
min_vehiclesNo
property_typeNoA property type on the manager's own list (MULTIFAMILY, INDUSTRIAL, OFFICE, RETAIL, ...).
with_holdingsNoOnly managers with at least one validated property binding.
include_formerNoAlso managers whose latest filing no longer swears a real estate fund.
operator_modelNo
strategy_classNo
with_public_lpsNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark the tool read-only and idempotent, but the description adds critical interpretive caveats beyond that: GAV is defined precisely as assets on a filing date and not fund size/commitments/dry powder, quarantined readings are excluded, the data tape is 2011-2024 so no 2025 facts exist, and holdings/properties/loans appear only after blind-label validation. These materially shape how an agent should interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five dense sentences with no filler; every clause adds a needed constraint, definition, or caveat. It is appropriately sized for a complex tool, though the first sentence is overloaded and would benefit from structured formatting or splitting into clearer sub-clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, zero-required, no-output-schema search tool, this is unusually complete: it defines the entity, enumerates returned fields, lists all filter categories, and flags date and validation semantics. Combined with schema descriptions for cursor/limit/state, an agent can select and call this tool with high confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38%, so the description must compensate, and it does: it groups the filter surface (state, strategy class, size band, operator model, GAV, vehicles, property type, holdings, public LPs) and defines the core numeric concept behind min/max_gav_usd. Some parameters like sort, crd, and limit are left to the schema/enums, but the semantically loaded metrics are clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description defines the exact population (advisers swearing a Real Estate Fund vehicle on Form ADV Schedule D 7.B.(1)), enumerates the returned data fields, and lists the filter dimensions. This clearly distinguishes it from sibling tools like search_re_fund_vehicles and get_re_fund_manager without needing schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given about when to use this tool versus sibling search/get tools. It states what data is included and which filters exist, but never says when this tool is preferable to search_re_fund_vehicles, get_re_fund_manager, or when it should not be used. Usage context is only implied by the title and field list.

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 vehiclesA
Read-onlyIdempotent
Inspect

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. 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 tape runs 2011 to 2024, so a first report is a first sighting and nothing here is a 2025 fact. Holdings, properties and loans appear only where a binding passed its blind labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNoFund name contains, an 805- ADV fund id, or an 021- Form D file number.
stateNoTwo-letter organisation state of the vehicle.
cursorNonext_cursor from a previous page of this tool, unchanged.
manager_crdNo
min_gav_usdNo
vehicle_kindNo
vintage_yearNo
strategy_hintNoThe strategy read from the vehicle's own name (a hint, never a claim).
manager_dfx_idNoA 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_feedersNo
include_droppedNoAlso vehicles no longer reported on the latest filing.
with_public_lpsNo
first_reported_yearNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe-read profile is known. The description adds substantial behavioral context beyond those annotations: feeder assets are counted twice, GAV is never fund size/commitments/dry powder, a quarantined reading enters no sum, the tape only spans 2011-2024 so first reports are first sightings, and holdings appear only where binding passed blind labels. This rich caveat set fully discloses the tool's interpretation quirks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place: each caveat (feeder exclusion, GAV definition, date range, quarantine, blind labels) prevents a likely misinterpretation. It is front-loaded with the core enumeration and then layered with necessary caveats. No fluff or repetition, though it could be slightly tightened with bullet points without losing content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 15-parameter search tool with no output schema, the description covers a large share of the contextual burden: output fields, query formats, data vintage, feeder policy, GAV interpretation, and the limits of holdings data. Missing context includes pagination behavior (though cursor is self-described in schema) and explicit semantics for several sort/filter parameters, which prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description carries extra responsibility. It adds meaning for 'query' (already in schema) and clarifies the 'exclude_feeders' default and the GAV semantics that underlie 'min_gav_usd'. Yet many parameters—sort's enum values, limit, manager_crd, vehicle_kind, vintage_year, with_public_lps, first_reported_year—receive no added explanation beyond their raw type/enum, leaving a notable gap in a tool with 15 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Search') and resource ('real estate fund vehicles'), then enumerates the exact attributes returned (fund family, GAV, vintage, owners, Form D, lifecycle state, public plans). It also specifies the query formats (name, 805- id, 021- Form D), making the tool's scope unmistakable and clearly distinct from siblings like get_re_fund_vehicle or search_re_fund_managers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives operational guidance such as 'Feeders are excluded unless asked for' and clarifications about GAV semantics, which help the agent decide how to filter and interpret results. However, it never explicitly names alternatives like get_re_fund_vehicle for a single known vehicle or search_re_fund_managers for manager-focused queries, leaving the when-to-use-vs-sibling decision implicit.

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 entityA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dfx_idYesA 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_typeNo
current_onlyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only/idempotent/non-destructive; the description adds behavior beyond that by specifying it returns published relationships only, enumerates returned fields (role, dates, currency, confidence, evidence class, source) and includes same_as links across graphs. No contradictory claims.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the tool's purpose and followed by output content and same_as behavior. The relationship-type list and field list are substantive, not filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description suffices for basic invocation with the required dfx_id and gives a good picture of return content, but it leaves optional parameters (limit, rel_type, current_only) undocumented and has no output schema. For a 4-parameter tool this is a clear gap, though not fatal for the primary use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (dfx_id is documented). The description indirectly identifies dfx_id as the entity and lists example relationship types that may map to rel_type, but it does not explain limit, rel_type, or current_only semantics. With low schema coverage the description needed to compensate and only partially does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact operation ('search relationships'), the scope ('every published relationship touching one entity'), the relationship types, and the fields returned. It also notes same_as links, which distinguishes it from sibling search/get tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes a clear use case: retrieve all published relationships for one entity. It does not explicitly name alternatives like relationship_path or get_entity, so it falls short of the explicit when-not/alternative guidance needed for a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_riaSearch RIA firms, advisors and private fundsA
Read-onlyIdempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
sortNo
limitNo
queryNoName contains, or an identifier (firm CRD, 801- SEC number, individual CRD, 805- fund id).
stateNoTwo-letter US state code.
cursorNonext_cursor from a previous page of this tool, unchanged.
firm_crdNoFor advisors and funds: the adviser's CRD.
fund_typeNo
firm_classNoThe RIA lane's printed classification of the firm (wirehouses are curated, the rest are rules over Item 5.D shares).
entity_typeNofirm
wealth_onlyNoFirms in the six wealth management classes only.
max_raum_usdNo
min_advisorsNoAt least this many advisors on IAPD.
min_raum_usdNo
include_formerNoFirms include state-registered advisers, former SEC advisers and firms off the roster; default SEC-registered only.
private_funds_onlyNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses data quirks: 'RAUM double counts affiliates', 'no advisor book size exists or is estimated', 'the IAPD tape is survivor-biased before 2026-09-15', and 'Nothing here is predictive'. It also explains the fact class taxonomy (reported, fact_from_registration, derived), which is valuable behavioral context. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph but every sentence adds value: it covers purpose, input identifiers, filters, output format, data caveats, and exclusions. It is front-loaded with the main resources and output, then elaborates. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (16 params, 3 entity types, multiple data sources), the description is remarkably complete. It covers the search input semantics, filtering capabilities, output format, data quality caveats, and alternative tools. The lack of an output schema is mitigated by the explicit 'compact cards' mention and fact class explanation. Pagination is hinted via cursor in the schema, and the description's scope is sufficient for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 50% schema coverage, the description compensates thoroughly. It explains what `query` accepts (name, firm CRD, SEC file number, individual CRD, private fund id) and the entity_type dependency. It clarifies firm_class as 'the RIA lane's printed classification' and details how filters apply to different entity types (firms by state/class/RAUM, advisors by firm CRD/state, funds by firm CRD/type). This adds meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact resources (RIA firms, advisors, private funds) and the output format (compact cards with dfx:ria: ids). It explicitly distinguishes from siblings by naming search_pe_firms and search_vc_firms as not applicable and pointing to get_entity for cross-graph entities. This is a clear, specific verb+resource statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit routing guidance: it says 'Not for private equity or venture managers as investors (search_pe_firms, search_vc_firms)' and notes that the same adviser may appear on both graphs via get_entity same_as. It also clarifies what the tool is for (searching RIAs, advisors, funds) and what it is not for (predictive purposes). This gives clear when-to-use vs. when-not-to-use context.

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 datesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNoISO date; registration ended on or after.
untilNoISO date.
cursorNonext_cursor from a previous page of this tool, unchanged.
move_typeNo
to_dfx_idNoAn 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_idNoAn 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_bulkNo
advisor_dfx_idNoA dfx:ria: advisor id or an individual CRD.
include_departuresNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive; the description adds valuable interpretive caveats beyond those: a move is simply two IAPD dates, never a reason, and not a prediction. The explicit exclusion of bulk re-registrations and departures, with the 99,737-row example, prevents serious misreading of the data scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences front-load the result structure, then move to filters, exclusions, and semantic caveats. Every sentence adds information an agent needs, with no filler or repetition of structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter read-only search tool with no output schema, the description covers return fields, filter dimensions, default exclusion behavior, and domain interpretation. Remaining operational details such as cursor and limit handling are already present in the input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 60%, and the description compensates by explaining the meaning of include_bulk and include_departures and by mapping filterable entities to move types and date windows. It doesn't re-explain limit/cursor, but those are already covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a concrete action and resource: searching for advisors who left one firm and registered at another, and enumerates the returned fields. It clearly distinguishes this tool from generic search_* siblings by specifying move types, exclusions, and the registration-date basis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the filter dimensions and explains when to flip include_bulk and include_departures, so an agent knows how to include or exclude edge cases. It does not explicitly name sibling alternatives or provide a when-to-use-versus-other-tools rule, 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_anomaliesADV anomalies against comparable advisersA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
sinceNoFiling date on or after, ISO.
stateNoTwo-letter US state code.
cursorNonext_cursor from a previous page of this tool, unchanged.
familyNo
firm_crdNo
severityNo
firm_classNo
anomaly_typeNoOne anomaly type, e.g. RAUM_DOWN_25_PERCENT, ADVISOR_COUNT_DROP, VERY_HIGH_RAUM_PER_ADVISOR, ACQUIRED_ADVISORS_LEFT_WITHIN_A_YEAR.
min_raum_usdNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful behavioral context beyond annotations: DATA_QUALITY anomalies are excluded by default, robust deviations are floored, and there is intentionally no master score. This helps an agent set expectations and avoid over-interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely packed with useful output fields, family definitions, filters, and an interpretive caveat. It is front-loaded with the main purpose and avoids filler, though a paragraph break or bullet structure would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, no output schema, and many RIA-focused siblings, the description is remarkably complete: it enumerates return fields, explains each anomaly family, lists filters, and warns about interpretation. It lacks explicit sibling differentiation and a couple of parameter semantics, but an agent can invoke it correctly from this text.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 36%, so the description carries some burden. It compensates by naming the filter dimensions and explaining family semantics in detail, but it does not explain sort, limit, cursor, or the severity/class enums beyond what the schema already provides. The mapping from 'class', 'minimum RAUM', and 'date' to firm_class, min_raum_usd, and since is inferable but not explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: searching reported values and filing-to-filing changes that stand out against a peer group. It clearly differentiates the tool's purpose from the many get_/search_ RIA siblings by emphasizing peer-relative anomalies, output composition, and families.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys an implied use case: screening peer-relative outliers and caveats that results are 'a place to look, never a conclusion.' It does not explicitly state when to choose this over siblings like search_ria_changes or get_ria_firm, nor provide exclusions beyond DATA_QUALITY being excluded unless asked.

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 timestampA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceYesISO timestamp, exclusive lower bound on observed_at.
untilNo
cursorNonext_cursor from a previous page of this tool, unchanged.
dfx_idNoA dfx:ria: firm, advisor or fund id; events where it is the subject or the related entity.
event_typeNo
signal_familyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnly/idempotent annotations by explaining observation-time semantics, the occurred_at vs observed_at distinction, next_since-based polling, the historical backfill date, and the first-seen accrual behavior. This gives the agent critical behavioral context no annotation provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but purposeful: every clause adds either scope, field semantics, polling behavior, or filter options. It is longer than ideal, but for a tool with this many event varieties the detail is justified rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers the tool's scope, return fields, filter dimensions, polling mechanics, and backfill caveat, which is sufficient even without an output schema. The main gap is the ambiguous overlap between 'next_since' and the cursor-based paging mentioned in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 43%, and the description compensates well for 'since', event_type, signal_family, and subject id/dfx_id semantics. However, it does not clarify 'until', 'limit', or the relationship between 'next_since' and the schema's 'cursor'/'next_cursor' pagination, leaving some parameters under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact resource ('RIA event tape'), the organizing dimension ('by OBSERVATION time'), and the concrete event types it covers, from advisor departures to roster exits. This clearly differentiates it from generic search tools and sibling RIA-specific tools without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit polling guidance ('poll with the next_since the answer returns') and explains the backfill cutoff behavior for since values before 2026-09-15. It does not explicitly state when not to use this tool or name an alternative, 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_ria_fundsPrivate funds an adviser reports on Form ADVA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNoFund name contains, an 805- fund id, or a 021- Form D file number.
stateNoTwo-letter US state code.
cursorNonext_cursor from a previous page of this tool, unchanged.
statusNoreported: on the adviser's latest filing; dropped: no longer reported.
fund_typeNo
firm_dfx_idNoAn 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_usdNo
form_d_file_numberNo
include_custodiansNoAttach custodian rows to each fund on the page.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety via readOnlyHint, idempotentHint, and destructiveHint. The description adds meaningful domain behavior: GAV is reported gross assets with an as-of date, Form D numbers appear only 'where the adviser gave one,' and reporting after 2024-12-31 is roster counts only. These caveats go beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense and well organized: source, returned fields, custodial extension, filter options, then the data caveat. Every clause adds information, and the caveat about post-2024 reporting is placed at the end where it reads as an important limitation without detracting from the main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters and no output schema, the description covers both the input semantics and the expected return fields, including optional custodian details. It is missing only explicit pagination behavior and what happens with an empty query, but the cursor parameter and page language make these reasonably inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 55%, and the description partially compensates by mapping filter concepts to parameters: adviser (dfx:ria:UUID or CRD), name/805-id/021-Form D for query, type, status, state, Form D number, and min_gav_usd. It gives useful meaning for several parameters not described in the schema, though sort and limit remain without added explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource — private funds reported on Form ADV Schedule D 7.B.(1) — and enumerates the fields returned, from SEC fund ID to custodians. It also draws a clear boundary with 'reported gross assets, NOT fund size or commitments,' which distinguishes it from related fund concepts and sibling fund-search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear filtering dimensions (adviser, name, type, status, state, Form D number, minimum gross assets) and explains what data is included, so usage is strongly implied. However, it never explicitly says when to prefer this tool over siblings like search_pe_funds, search_vc_funds, or get_ria_firm, nor does it state any exclusions or alternative conditions.

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 factsA
Read-onlyIdempotent
Inspect

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. No press, no rumours, no predictions.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoall
limitNo
sinceNoISO date.
untilNo
cursorNonext_cursor from a previous page of this tool, unchanged.
target_crdNo
firm_dfx_idNoA dfx:ria: firm id or CRD on either side of the event.
acquirer_crdNo
min_advisorsNoAbsorbed only: at least this many advisors moved.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds valuable context beyond annotations: it explains the evidentiary basis of each kind (sworn on Form ADV Item 4, re-registration rule, SEC roster departure) and honestly discloses that roster_exit reasons are not stated. This is useful behavioral disclosure for a data-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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-efficient, front-loading the core distinction (three factual sources) before the filter options and exclusions. Each sentence earns its place, though it runs slightly long; the density justifies the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description carries the burden of explaining return values, and it does — listing target/acquirer dfx:ria ids, date, headline, magnitude, and source for each row. Combined with the filter list and the no-schema safety annotations, an agent has enough to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 44% (below the 50% threshold), so the description should compensate. It partially does: it explains the meaning of the kind values (which the schema only lists as an enum) and notes that min_advisors applies only to absorbed events and that magnitude is expressed as advisor count or RAUM. However, it does not add detail for parameters like limit, cursor, or firm_dfx_id beyond what the sparse schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (search) and resource (RIA M&A events) and enumerates the three factual sources (succession, absorbed, roster_exit) with precise definitions for each. It explicitly carves out what the tool is not — 'No press, no rumours, no predictions' — which distinguishes it from sibling search tools like search_ria and 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the filtering axes (kind, acquirer/target CRD, firm id, date window, minimum advisors) and defines the semantic of each kind. It conveys the intended use case — filed facts rather than news — via the 'No press, no rumours, no predictions' exclusion, giving clear context for when to prefer this tool even though it doesn't name sibling alternatives explicitly.

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 movementA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
stateNoTwo-letter US state code.
cursorNonext_cursor from a previous page of this tool, unchanged.
firm_crdNo
firm_classNo
min_advisorsNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds valuable behavioral context: 'street addresses are never read' (privacy guarantee) and the data source 'from branch city and state with registration dates.' This goes beyond annotations and helps an agent understand constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that packs a lot of information without redundancy. It is front-loaded with the core purpose (ranked offices) and then lists metrics and filters. It could be slightly restructured for readability but is efficient and every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 convey return content. It does mention 'advisors today and 12 and 36 month flows,' indicating the output includes these fields. It does not explicitly describe pagination or return structure, but the cursor parameter hints at that. For a search tool with this complexity, the description covers the essentials without being exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 29%, so the description must compensate. It does: it explains the sort options by listing the metrics ('departures, joins, net flow...') and clarifies 'breakaways in formation' with a parenthetical. It also maps filters (firm CRD, state, class, min advisors) to the schema parameters. It doesn't explain limit or cursor, but those are standard pagination params and the schema already describes cursor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('search' implied by tool name) and resource: offices (firm + IAPD branch city). It enumerates specific metrics (departures, joins, net flow, rate, team lift-outs, breakaways, size) and filters, making it unambiguous what the tool returns. This clearly distinguishes it from sibling tools like search_ria_advisor_moves 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (when you need ranked office-level movement data) but provides no explicit when-to-use vs alternatives or exclusions. It does not state when not to use it or point to a specific sibling for other cases, so guidance 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_ria_practicesScreen advisers by practice archetype, operating metrics and flagsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
wrapNo
limitNo
cursorNonext_cursor from a previous page of this tool, unchanged.
custodyNo
archetypeNo
pe_backedNo
bank_ownedNo
firm_classNo
max_raum_usdNo
min_advisorsNo
min_raum_usdNo
performance_feesNo
min_private_fundsNo
financial_planningNo
min_hnw_of_privateNo
min_raum_growth_1yNo0.2 means at least 20 percent.
pension_consultingNo
min_raum_per_advisorNo
min_private_client_shareNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, so the description's job is to add context. It does: only SEC-registered advisers are included, every metric is derived from filed fields, formulas live in get_ria_practice, and book size/revenue are explicitly unavailable. It does not describe pagination or response shape, but that is partially covered by the cursor and limit schema fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the operation and resource, then packs the filter dimensions into one dense sentence and closes with a valuable limitation. The complete archetype enum is redundant with the schema and adds token cost, but it is the only real inefficiency; otherwise the text is compact and purposeful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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, this is nearly complete: it names the target population, all screenable dimensions, sort options, data provenance, formula source, and two hard exclusions. It still relies on the schema for pagination and does not spell out units for share-type thresholds. Overall an agent has enough context to formulate a correct query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 10% schema description coverage, the description carries most of the semantic load by mapping each major filter group to a named metric or flag: RAUM band, growth, RAUM per advisor, private-client/HNW shares, private funds, custody, wrap, pension consulting, and financial planning. It also lists all sort keys and directs agents to get_ria_practice for exact metric formulas. It leaves units for share-based thresholds implicit, but the overall parameter meaning is far clearer than the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific operation ('screened'), a specific resource ('SEC-registered advisers on the practice layer'), and enumerates the screening dimensions: archetypes, class, RAUM bands, growth, flags, and sort orders. It also draws a boundary with 'no book size, no revenue,' which helps distinguish it from other RIA search tools. This is a clear, specific statement of what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use case is implied—screen advisers by practice-layer characteristics—and the description explicitly excludes book size and revenue. However, it never names a sibling alternative or states when to prefer search_ria_practices over search_ria or get_ria_practice. The only cross-reference, 'formula in get_ria_practice,' points to where formulas live rather than when to invoke this tool. Guidance is therefore mostly implicit.

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 togetherA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
sortNo
limitNo
sinceNoISO date; first departure on or after.
stateNoTwo-letter US state code.
untilNo
cursorNonext_cursor from a previous page of this tool, unchanged.
move_typeNo
to_dfx_idNoAn 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_idNoAn 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_membersNo
include_membersNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly and idempotent annotations, the description discloses important behavioral caveats: the share-left figure is an estimate on a survivor-biased tape, CHANNEL_CHANGE teams are excluded unless explicitly requested, and 'a team is a rule over dates, never a claim about intent.' This adds real behavioral context beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the core team definition, followed by output fields, kind rules, filters, and caveats. It earns its length given the conceptual complexity, though it is somewhat run-on and could benefit from clearer structural separation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description properly covers the main return concepts: member count, dates, spread, headcount, share left, succession, and kind. It also includes essential caveats about data bias and intent. Minor gaps remain around sort/pagination behavior, but the tool is otherwise sufficiently specified for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low at 42%, and the description partially compensates by summarizing the filter categories (from/to firm, kind, move type, state, minimum members, date) and explaining include_members. However, it does not add detail for parameters like sort, limit, until, or cursor, leaving some semantic burden unmet.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states precisely what the tool does: it finds clusters of advisors who left the same firm for the same firm from the same branch state within a 14-day chain. It also enumerates the team kinds and filter dimensions, making the tool's scope unmistakable and distinguishing it from sibling move/search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool—when the user wants advisor team clusters and can filter by firm, kind, move type, state, member count, or date. It does not explicitly name alternatives or say when not to use it, but the intended use case is strongly implied.

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 sponsorsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNo
stateNoTwo-letter US state code.
sectorNoFree text against the mandate, strategy and description.
provider_typeNosbic: 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_licensedNo
min_fund_size_usdNo
making_new_investmentsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnly/idempotent/non-destructive annotations already establish the safe-read profile, so the description only needs to add context beyond that. It contributes the notion that records are 'observed providing capital' and that fund size and average investment are 'kept apart', which hints at inferred/confidence-scored data, but it says nothing about result limits, ranking, or what confidence means despite a 'confidence' sort option.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph, front-loading source scope and record fields before the filter list. Nearly every clause carries information; the only mild waste is pairing 'mezzanine and private equity funds' without distinguishing them.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 enumerates the returned fields (provider type, strategy, fund style, fund size, average investment, vintage, SBIC licence, new-investment status, mandate summary), which is exactly what an agent needs for a read tool. The remaining gap is the semantics of sort/limit/query on a 9-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 does map several filters to meaning (state, provider type, sector-as-free-text, SBIC status, fund size), but leaves sort, limit, query, and making_new_investments entirely unaddressed, and adds nothing to the provider_type enum beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely (SBICs, mezzanine/PE funds, family offices that fund independent sponsors) and enumerates the attributes carried on each record, so an agent knows this is a filtered provider search rather than a deal or firm lookup. It stops short of explicitly contrasting itself with close siblings like search_sponsor_deals or search_family_offices, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the sentence 'Filter by state, type, sector text, SBIC status or fund size' tells the agent which filters exist, which indirectly signals when the tool is appropriate. There is no explicit when-to-use guidance, no statement of when another tool (e.g. find_capital_for_opportunity) is preferable, and no prerequisites.

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 transactionsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoMatches the sponsor's or the target's name.
sinceNo
stateNoTwo-letter US state code.
txn_typeNo
target_dfx_idNoA 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_idNoA 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

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established and the bar for the description is lower. The description adds useful behavioral context beyond that: results are restricted to announced deals, and enterprise value is included only 'where disclosed', signaling partial data coverage. It stops short of describing result limits or deduplication, but that is minor given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first defines the dataset and enumerates its returned fields, and the second lists every filter dimension. The most important scoping information (announced, by independent sponsors) is front-loaded. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 enumerating the returned fields (dates, enterprise value range, structure, parties, source), so an agent knows what to expect from results. The full filter surface, read-only profile, and open-world constraint are covered across the description and annotations. Minor gaps remain — default result size and value formatting are not mentioned — but nothing blocks a correct first invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 57%, leaving limit and since undocumented in the schema itself. The description's filter list maps semantic intents to parameters ('sponsor, target, type, state, since-date or name text'), which clarifies that query is name-based text matching and since is a date. It does not fully compensate for the undocumented limit parameter, but the default and bounds are present in the schema, so the combination is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource ('announced acquisitions, recapitalisations and exits by independent sponsors') with precise scope qualifiers that let an agent distinguish it from overlapping siblings such as search_pe_transactions, get_independent_sponsor, and search_sponsor_capital_providers without opening their schemas. The second sentence names the search/filter verb and the dimensions it operates on. This is a specific verb + resource with implicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use case is implied by the scope — use this when you need announced deal activity by independent sponsors — so an agent can infer when it applies. However, there is no explicit when-to-use/when-not-to-use guidance and no alternative tool is named, which is a real gap given 60+ siblings and the potential overlap with search_pe_transactions or search_events. The definition leaves routing decisions entirely to the agent.

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 sponsorsB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoborrowers
limitNo
cursorNonext_cursor from a previous page of this tool, unchanged.
lender_dfx_idNoA private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities).
min_borrowersNo
sponsor_dfx_idNoA private credit graph id of the form dfx:pc:<uuid> (from search_private_credit, resolve_name or search_entities).

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnly/idempotent annotations by revealing the exact counting rule (once per borrower held), the lender definition fallback, and the source of the new-borrower and attribution metrics. It does not mention pagination or output formatting, but the annotations already cover the safety profile, so the added methodology is meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence, but every clause adds a distinct piece of information about the pair metric or scope. It is front-loaded with the core resource definition and then lists metrics in order; splitting the metric list into bullets would improve readability but the current form is still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 six parameters, the description provides strong context for the pair definition and metrics, which is the hard part to infer. However, it omits the meaning of the sort enum and min_borrowers, and does not describe pagination or result shape, leaving a notable gap for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% and the description only mentions filtering by sponsor or lender id, which largely repeats what the schema already says for those two fields. The meanings of sort options, min_borrowers, limit, and cursor are left to inference, so the description does not compensate for the missing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool's output as sponsor × lender pairs aggregated per borrower, and enumerates the metrics returned, so an agent can tell what this produces. It lacks an explicit verb and does not draw boundaries against similar siblings such as get_sponsor_lenders, 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to choose this tool over get_sponsor_lenders, search_sponsor_capital_providers, or search_private_credit. The only usage hint is the closing line 'Filter by sponsor or lender id,' which is a parameter instruction, not a selection guideline.

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 listA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity as HUD records it, case-insensitive exact match, e.g. Akron.
limitNoRows to return, 1 to 50. `matched` states the true total regardless.
stateNoTwo-letter US state, district or territory code. Unknown codes are refused, not searched.
programNoSubstring of the HUD programme name, e.g. 'Public Housing' or 'Section 8'.
min_unitsNoOnly projects with at least this many units.
max_occupancyNoOccupancy percent ceiling, 0 to 100.
min_occupancyNoOccupancy percent floor, 0 to 100.
min_waiting_monthsNoOnly projects reporting a waiting list of at least this many months. Excludes projects that report none.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_firmsSearch venture capital firmsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
sortNo
limitNo
queryNo
stageNo
stateNoTwo-letter US state code.
sectorNoAgainst stated sectors, thesis, description and behaviour summary. Answers NOT_COVERED while no firm carries one (websites unread this cycle); firms remain reachable through the investors recorded on their portfolio companies.
active_onlyNoinvestments observed in the last 12 months
raising_onlyNoa fund with a Form D in the last 18 months
min_investmentsNo
emerging_managerNo
recent_activity_daysNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, so the bar is lower; the description adds real behavioural context beyond them, notably the data-coverage caveat that sector matching answers NOT_COVERED while websites are unread and that firms stay reachable via portfolio-company investors. It also discloses the return identity format (dfx:vc: ids). It does not mention pagination or sort semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what a card contains before moving to filters, and it ends with the key output contract and exclusion note. It is dense but mostly earns its words; the nested parenthetical listing is slightly hard to parse but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 sketches the return shape (compact cards, dfx:vc: ids) and the exclusion set. But for a 12-parameter tool with 0 required params it omits default/max behaviours (limit 25/50), sort modes, and several filters, so an agent still has to open the schema for several decisions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% across 12 parameters, so the description must carry weight; it does explain five filter axes (sector, stage, state, active/raising, emerging manager) and matches 'active or raising' to the boolean params. However, it says nothing about city, sort, limit (max 50), query, min_investments or recent_activity_days, leaving half the surface undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Venture firms as compact cards') and enumerates the card contents (stated sectors/stages/geography/check size plus observed behaviour, funds, people counts). It explicitly draws the boundary against siblings: 'Funds, people and individual deals are not on these cards,' separating it from search_vc_funds and search_vc_investments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear filtering context ('Filter by sector, stage, state, active or raising, emerging manager'), so the agent knows the axes for narrowing results. It also implicitly routes the agent elsewhere for funds/people/deals, but never states when to prefer get_vc_firm (single-firm lookup) over this search, so the routing is not fully explicit.

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 amountsB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNo
strategyNo
max_vintageNo
min_vintageNo
lifecycle_stateNoOnly WOUND_DOWN is assigned today; other funds carry null.
min_form_d_sold_usdNo
organization_dfx_idNoA 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

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only and idempotent, so the safety profile is covered. The description adds context about the richness of returned data (multiple amount fields, vintage, lifecycle status, counts) but does not disclose operational behaviors like pagination, default sorting, or parameter interactions. It does not contradict annotations, and the added context is useful but not extensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and reasonably concise, with the core subject front-loaded. The first sentence is a dense enumeration of data fields, which is slightly run-on but not overly verbose. It earns its length by listing what the tool returns, though a more structured list might aid readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters and no output schema, the description should explain the return shape and calling conventions more thoroughly. It does describe the data included and the main filters, but it does not mention default sorting or limit behavior, does not explain the organization_dfx_id filter, and does not differentiate from similar search tools. The description is adequate for a simple search but incomplete for optimal agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at only 22%, the description compensates by naming several filters (manager, lifecycle, vintage range, strategy, Form D sold) that map to parameters like query, lifecycle_state, min/max_vintage, strategy, and min_form_d_sold_usd. However, it omits explanation of the organization_dfx_id parameter (which has a complex format in the schema) and does not mention sort/limit semantics. The description adds meaning for the covered parameters but leaves gaps for others.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (venture funds) and the specific financial data returned (target, first close, final close, etc.), and states the filtering capabilities. It distinguishes itself from firm-level tools like search_vc_firms by focusing on fund-level amounts and characteristics. However, it does not explicitly say 'return a list of funds', relying on the title and context to imply a search operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists filters but gives no guidance on when to use this tool versus alternatives such as search_vc_firms or search_pe_funds. There is no mention of prerequisites, exclusions, or which sibling tools are better suited for specific use cases. The filters imply usage, but the description does not direct the agent toward or away from any alternatives.

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 participationsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoMatches the company's or the investor's name.
sinceNo
stageNo
stateNoTwo-letter US state code.
lead_onlyNo
company_dfx_idNoA 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_idNoA 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_idNoA 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

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral specifics, including attribution level, source quote, and the explicit clarification that amount means the round amount, never the check. This prevents a common misinterpretation of the returned data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: it front-loads the output fields and closes with the filter options. Every clause carries useful information, though splitting output and filtering into separate sentences would improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that no output schema exists, the description enumerates the key return fields and the main query dimensions. It leaves minor ambiguities such as whose state is being filtered, but it is adequate for a read-only search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 56% schema coverage, the description compensates by naming the otherwise undocumented filters: stage, since-date, and lead-only. It does not define accepted values or date formats, but for most parameters it adds meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the resource as investor-by-investor round participations and enumerates the specific output fields that distinguish it from sibling tools like search_vc_firms or search_vc_funds. The granularity and scope are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists filter dimensions such as investor, company, partner, stage, state, since-date, and lead only, but it never explains when to prefer this tool over alternatives like search_vc_funds or search_family_office_investments. No when-to-use, when-not-to-use, or comparison guidance is provided.

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 evidenceB
Read-onlyIdempotent
Inspect

SUPPORTED, PARTIALLY_SUPPORTED, CONTRADICTED or UNKNOWN for a claim, with the observations. Give a sentence ('Family Office X invested in Company Y in 2025', 'Z is a family office') or a structured subject / predicate / object / year. DFX contradicts only what its own record contradicts; absence of evidence is UNKNOWN, never CONTRADICTED. Its predicates cover investment, acquisition, co-investment, employment and identity claims; property facts are outside them.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
claimNo
objectNo
subjectNo
predicateNo
object_dfx_idNoA 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_idNoA 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

B3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description contradicts the annotation openWorldHint=false: the description explicitly states 'absence of evidence is UNKNOWN, never CONTRADICTED', which is open-world semantics, while the annotation declares closed-world behavior. This is a serious inconsistency that misleads an agent about how missing data is interpreted. Additionally, the description adds useful context about predicate scope, but the contradiction overrides that value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, with the key verdict types front-loaded and the input format described in a single sentence. It avoids redundancy and fits the essential information into two sentences without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description must explain what the tool returns, but it only says 'with the observations' without describing the structure of those observations. It also leaves the dfx_id parameters unexplained and fails to reconcile the open/closed-world contradiction. For a verification tool with no output schema and low parameter coverage, this is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 29% (2 of 7 parameters have descriptions). The description mentions 'structured subject / predicate / object / year', which maps to the claim, subject, predicate, object, and year fields, adding some meaning. However, it does not explain how to format the dfx_id parameters or how they relate to the structured fields, leaving most parameters under-documented despite the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb (check/verify) and resource (a claim against DFX's evidence), and enumerates the four possible verdicts. It is distinct from the many get/search siblings, which retrieve data rather than evaluate claims, so the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives some scoping context by listing the predicate categories covered and explicitly excluding property facts, which helps an agent know what it can verify. However, it does not explicitly say when to prefer this over a search_* or get_* tool, nor does it contrast with siblings like explain_match or what_can_dfx_answer. Usage 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.

what_can_dfx_answerAsk in plain language whether DFX can helpA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoA topic in your own words ('family office direct investing', 'venture fundraising'); answers with the domains that cover it.
domainNoOne domain's coverage and tools, answered instead of routing a real estate objective.
objectiveNoWhat 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.
constraintsNoStructured 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.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description still earns credit by clarifying the ledger implication ('the question itself is kept in DFX's own interaction ledger') and that unmet asks feed future builds, plus the behavioral promise of a free sample and an unambiguous 'no'. That extra context goes beyond what the annotations state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core behavior is front-loaded in the first sentence, and the second paragraph is short and non-redundant. The ledger sentence leans slightly toward promotional justification, but it maps to a real behavioral trait, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 it (verdict, tool name and arguments, free sample). Combined with 100% schema coverage on the four parameters, an agent has enough to invoke it correctly; only the multi-mode selection between topic/domain/objective is left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema itself documents the topic/domain/objective modes, the constraint precedence ('applied last so they outrank the prose'), and the event_type enum. The description adds no parameter meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+output: takes a natural-language objective and returns a can-help verdict, the tool name and arguments that answer it, and a free sample. It is self-evidently the router/entry point among otherwise concrete siblings like search_events or get_property_record, so an agent can place 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Accepts objectives that do not yet map to a specific query' gives a clear condition for choosing this over the many concrete siblings, and 'Says no clearly when the answer is no' sets expectations for the negative case. It stops short of explicitly naming an alternative or an exclusion (e.g., 'if you already know the tool, call it directly'), so it is clear context rather than full when/when-not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

who_should_careThe economic counterparties to an entity or eventA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dfx_idNoA 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_idNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive, so the description adds useful context beyond them: it describes entity-type-specific output and the rejection of id-less descriptions. It does not mention error handling, rate limits, or authentication, but the annotation coverage lowers the bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the core purpose and keeps examples compact. The final sentence restates the id requirement already implied earlier, causing minor redundancy, but overall every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with annotations and a helpful dfx_id schema, the description gives adequate context for calling it. However, there is no output schema and no guidance on behavior when neither id is supplied, both are supplied, or what limit controls. These are significant enough gaps to prevent a higher score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%: dfx_id is well-documented, but event_id and limit are not. The description reinforces that an id is required and maps entity types to expected outputs, which partially compensates. It still leaves event_id format and limit semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: given an entity or event id, return who is likely to care and why. Entity-specific examples (company transition, family office, venture firm, property) sharpen the scope. It does not explicitly differentiate itself from sibling relationship/find tools, but the purpose is still clearly distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit constraint: it requires an entity or event id and does not accept a description of a situation without an id. This is a useful when-not condition. However, it does not name alternative tools or explain when to prefer this over siblings like find_capital_for_opportunity or relationship_path.

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 nowA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dfx_idYesA 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_daysNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context: it lists the specific evidence categories, states that each is dated with its source, and crucially interprets an empty result ('empty means DFX observed no change, not that nothing is happening'). This goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose and evidence types, then a crucial clarification about empty results. No wasted words, perfectly sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with two parameters and no output schema, the description covers the key points: what it returns (types of evidence, each dated with source), how to interpret empty output, and implicitly the dfx_id parameter. It does not specify the return format in detail, but that is acceptable given the absence of an output schema and the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: dfx_id is described with its ID format, but within_days is not described at all (only has a default). The tool description references a 'window' but does not connect it to the within_days parameter, nor does it explain semantics like the default 180 days. The description does not compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to return evidence-backed reasons an entity is relevant now, listing specific event types. It distinguishes itself from generic get_entity or search_events by specifying the nature of the output. However, it does not explicitly name any sibling alternative, which would push it to a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this to understand why an entity matters now, with a list of event types. It also clarifies the meaning of an empty result. However, it does not explicitly state when NOT to use it or point to alternative tools like changes_since or search_events, leaving some ambiguity for an agent.

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. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous 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-09-20, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-21, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  2. 1 tool update
    • Changedfind_lenders_for_financing1 field changed
      • addedInput schema / properties / states
        Added value: +{
        +  "description": "Two-letter borrower headquarters states, e.g. [\"TX\",\"FL\"]. Thins the universe to borrowers with a known state.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  3. 1 tool update
    • Addedfind_lenders_for_financing
  4. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous 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-09-19, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-20, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  5. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous 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-09-18, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-19, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  6. 56 tool updates
    • Changedexplain_match2 fields changed
      • changedInput schema / properties / dfx_id_a / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
      • changedInput schema / properties / dfx_id_b / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedfind_capital_for_opportunity1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedfind_opportunities_for_capital1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Addedget_allocator
    • Addedget_bdc_portfolio
    • Addedget_borrower_capital_structure
    • Addedget_borrower_facilities
    • Addedget_capital_paths
    • Addedget_commitments
    • Addedget_credit_facility
    • Addedget_credit_provider
    • Changedget_entity1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedget_family_office1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedget_independent_sponsor1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Addedget_re_fund_manager
    • Addedget_re_fund_trends
    • Addedget_re_fund_vehicle
    • Addedget_ria_advisor
    • Addedget_ria_capital_links
    • Addedget_ria_firm
    • Addedget_ria_practice
    • Addedget_ria_trends
    • Addedget_sponsor_lenders
    • Changedget_vc_firm1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedrelationship_path2 fields changed
      • changedInput schema / properties / from_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
      • changedInput schema / properties / to_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedresolve_name1 field changed
      • changedInput schema / properties / domain / description
        Previous value: -"Comma-separated: family_office, independent_sponsor, venture_capital, private_equity. Default: all four."New value: +"Comma-separated: family_office, independent_sponsor, venture_capital, private_equity, ria, allocators, private_credit, real_estate_funds. Default: all."
    • Addedresolve_ria_advisor
    • Addedsearch_allocator_commitments
    • Addedsearch_allocators
    • Addedsearch_capital_changes
    • Addedsearch_credit_maturities
    • Changedsearch_entities2 fields changed
      • changedInput schema / properties / domain / description
        Previous value: -"Comma-separated: real_estate, family_office, independent_sponsor, venture_capital, private_equity. Default: all."New value: +"Comma-separated: real_estate, family_office, independent_sponsor, venture_capital, private_equity, ria, allocators, private_credit, real_estate_funds. Default: all."
      • changedInput schema / properties / entity_type / description
        Previous value: -"family_office, sponsor, capital_provider, company, vc_firm, pe_firm, platform, fund, person, property, organization."New value: +"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."
    • Changedsearch_events1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedsearch_family_office_investments1 field changed
      • changedInput schema / properties / office_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedsearch_people2 fields changed
      • changedInput schema / properties / domain / enum
        Previous value: -[
        -  "family_office",
        -  "independent_sponsor",
        -  "venture_capital",
        -  "private_equity"
        -]New value: +[
        +  "family_office",
        +  "independent_sponsor",
        +  "venture_capital",
        +  "private_equity",
        +  "ria",
        +  "allocators",
        +  "real_estate_funds"
        +]
      • changedInput schema / properties / organization_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Addedsearch_private_credit
    • Addedsearch_private_credit_changes
    • Addedsearch_re_fund_managers
    • Addedsearch_re_fund_vehicles
    • Changedsearch_relationships1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Addedsearch_ria
    • Addedsearch_ria_advisor_moves
    • Addedsearch_ria_anomalies
    • Addedsearch_ria_changes
    • Addedsearch_ria_funds
    • Addedsearch_ria_ma
    • Addedsearch_ria_offices
    • Addedsearch_ria_practices
    • Addedsearch_ria_teams
    • Changedsearch_sponsor_deals2 fields changed
      • changedInput schema / properties / sponsor_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
      • changedInput schema / properties / target_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Addedsearch_sponsor_lender
    • Changedsearch_vc_funds1 field changed
      • changedInput schema / properties / organization_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedsearch_vc_investments3 fields changed
      • changedInput schema / properties / company_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
      • changedInput schema / properties / investor_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
      • changedInput schema / properties / partner_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedverify2 fields changed
      • changedInput schema / properties / object_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
      • changedInput schema / properties / subject_dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedwho_should_care1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
    • Changedwhy_now1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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), or a bare real estate UUID."New value: +"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."
  7. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous 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-09-17, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-18, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  8. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous 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-09-16, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-17, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  9. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous 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-09-15, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-16, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  10. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous 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-09-14, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-15, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  11. 2 tool updates
    • Addedresolve_name
    • Addedsearch_pending_ownership_changes
  12. 29 tool updates
    • Changedexplain_match2 fields changed
      • changedInput schema / properties / dfx_id_a / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
      • changedInput schema / properties / dfx_id_b / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedfind_capital_for_opportunity3 fields changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
      • addedInput schema / properties / investor_types / description
        Added value: +"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)."
      • changedInput schema / properties / investor_types / items / enum
        Previous value: -[
        -  "independent_sponsor",
        -  "capital_provider",
        -  "family_office",
        -  "venture_capital"
        -]New value: +[
        +  "independent_sponsor",
        +  "capital_provider",
        +  "family_office",
        +  "venture_capital",
        +  "private_equity"
        +]
    • Changedfind_opportunities_for_capital1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Addedfind_pe_addons_for_platform
    • Addedfind_pe_buyers_for_company
    • Addedfind_pe_companies_for_buyer
    • Changedget_entity1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedget_family_office1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedget_independent_sponsor1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Addedget_pe_firm
    • Addedget_pe_fund
    • Changedget_vc_firm1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedrelationship_path2 fields changed
      • changedInput schema / properties / from_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
      • changedInput schema / properties / to_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedsearch_entities2 fields changed
      • changedInput schema / properties / domain / description
        Previous value: -"Comma-separated: real_estate, family_office, independent_sponsor, venture_capital. Default: all."New value: +"Comma-separated: real_estate, family_office, independent_sponsor, venture_capital, private_equity. Default: all."
      • changedInput schema / properties / entity_type / description
        Previous value: -"family_office, sponsor, capital_provider, company, vc_firm, fund, person, property, organization."New value: +"family_office, sponsor, capital_provider, company, vc_firm, pe_firm, platform, fund, person, property, organization."
    • Changedsearch_events1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedsearch_family_office_investments1 field changed
      • changedInput schema / properties / office_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedsearch_independent_sponsors1 field changed
      • addedInput schema / properties / include_unverified
        Added value: +{
        +  "description": "true returns the research list instead: unverified Form D filing groups and candidates, never paired with companies. Default false.",
        +  "type": "boolean"
        +}
    • Addedsearch_pe_firms
    • Addedsearch_pe_funds
    • Addedsearch_pe_platforms
    • Addedsearch_pe_transactions
    • Changedsearch_people3 fields changed
      • changedInput schema / properties / domain / enum
        Previous value: -[
        -  "family_office",
        -  "independent_sponsor",
        -  "venture_capital"
        -]New value: +[
        +  "family_office",
        +  "independent_sponsor",
        +  "venture_capital",
        +  "private_equity"
        +]
      • changedInput schema / properties / organization_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
      • changedInput schema / properties / role / description
        Previous value: -"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."New value: +"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."
    • Changedsearch_relationships1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedsearch_sponsor_deals2 fields changed
      • changedInput schema / properties / sponsor_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
      • changedInput schema / properties / target_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedsearch_vc_funds1 field changed
      • changedInput schema / properties / organization_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedsearch_vc_investments3 fields changed
      • changedInput schema / properties / company_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
      • changedInput schema / properties / investor_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
      • changedInput schema / properties / partner_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedverify2 fields changed
      • changedInput schema / properties / object_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
      • changedInput schema / properties / subject_dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedwho_should_care1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
    • Changedwhy_now1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id: dfx:fo:<uuid> (family office graph), dfx:isi:<uuid> (sponsor graph), dfx:vc:<uuid> (venture graph), or a bare real estate UUID."New value: +"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), or a bare real estate UUID."
  13. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous 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-09-13, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-14, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  14. 14 tool updates
    • Changedchanges_since4 fields changed
      • changedInput schema / properties / domain / description
        Previous value: -"Ask an intelligence domain instead of real estate; then `since` is an ISO timestamp."New value: +"An intelligence domain instead of real estate; with it, `since` is an ISO timestamp."
      • changedInput schema / properties / event_type / description
        Previous value: -"One family. Same vocabulary as search_property_events."New value: +"One served event family."
      • changedInput schema / properties / limit / description
        Previous value: -"Max 50. A full page sets `complete: false` in the envelope, which means the backlog was longer than one call: go again immediately with the returned cursor rather than waiting for your next poll interval. The cursor is the last row on the page, never the present moment, so nothing is skipped by doing so."New value: +"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."
      • changedInput schema / properties / since / description
        Previous value: -"Opaque cursor from a previous call. Omit on the first call to establish a position; that call returns no events by design."New value: +"Opaque cursor from a previous call. Unset on the first call, which establishes a position and returns no events by design."
    • Changeddebt_maturity_schedule3 fields changed
      • removedInput schema / properties / authorize
        Removed value: -{
        -  "description": "Omit to be quoted. Supply to be charged and served in one response.",
        -  "properties": {
        -    "max_price_usd": {
        -      "description": "YOUR ceiling, checked before ours. If the price exceeds it you are refused rather than charged.",
        -      "type": "number"
        -    },
        -    "quote_id": {
        -      "description": "from the PAYMENT_REQUIRED reply",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "quote_id",
        -    "max_price_usd"
        -  ],
        -  "type": "object"
        -}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum loans, up to 200. The price does not change with the row count."New value: +"Maximum loans, up to 200."
      • changedInput schema / properties / state / description
        Previous value: -"Two letter state code. Required: the schedule is priced per state."New value: +"Two letter state code. Required."
    • Changeddfx_coverage1 field changed
      • changedInput schema / properties / event_type / description
        Previous value: -"Optional: narrows the answer to this family. Same vocabulary as search_property_events."New value: +"Optional: narrows the answer to this served event family."
    • Removeddfx_payment_status
    • Removedfund_dfx_account
    • Changedget_occupancy3 fields changed
      • changedInput schema / properties / address / description
        Previous value: -"Street address for the one-claim check. Pass `company` with it."New value: +"Street address for the one-claim check. Used together with `company`."
      • changedInput schema / properties / company / description
        Previous value: -"Company name, for the one-claim check. Pass `address` with it."New value: +"Company name, for the one-claim check. Used together with `address`; a company name alone is refused."
      • changedInput schema / properties / dfx_id / description
        Previous value: -"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 you have to set."New value: +"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."
    • Changedget_property_record1 field changed
      • changedInput schema / properties / dfx_id / description
        Previous value: -"A DFX id for a property OR a parcel. Both work and both come back in full. Sources: `dfx_id` on any object from resolve_address, `dfx_id` on any row from search_parcels, or the `verify.dfx_id` handle carried on every event a search returns."New value: +"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."
    • Removedopen_dfx_account
    • Changedresolve_address2 fields changed
      • changedInput schema / properties / city / description
        Previous value: -"City or town, for example 'Cambridge'. Optional: a one-line address carrying its own city and state is split here, so pass the whole line rather than splitting it yourself. Given explicitly it wins over anything parsed out of `address`."New value: +"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`."
      • changedInput schema / properties / limit / description
        Previous value: -"Max 50. This is candidates for ONE address, not a page of a search. Raise it only when `address_group_size` on a result says several published records share the address."New value: +"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."
    • Changedresolve_organization1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"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 is expected to return several candidates and picking between them is yours to do."New value: +"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."
    • Changedsearch_people1 field changed
      • addedInput schema / properties / query / description
        Added value: +"A person's name (contains)."
    • Changedsearch_property_events4 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"Continue a previous page. Pass the `next_cursor` returned by the last call, with EVERY other argument identical, to get the rows after it. Repeat until `next_cursor` is null, which is the only signal that 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; do not construct or edit one. An unreadable cursor is REFUSED rather than ignored, so a caller can never be silently restarted at page one."New value: +"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."
      • changedInput schema / properties / event_type / description
        Previous value: -"ONE family per call. Omit it and every family is searched together, which mixes populations of very different sizes and is rarely what you want: name the family. The list is generated from what this server actually publishes today, so it grows without a release. Call dfx_coverage for how many of each family exist in a given state before reading an empty result as an absent market."New value: +"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."
      • changedInput schema / properties / limit / description
        Previous value: -"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`. Pass `include_past=true` for the full history."New value: +"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."
      • changedInput schema / properties / within_days / description
        Previous value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 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-09-13, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."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-09-13, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
    • Changedsearch_vc_firms1 field changed
      • changedInput schema / properties / sector / description
        Previous value: -"Against stated sectors, thesis, description and behaviour summary. Answers NOT_COVERED while no firm carries one (websites unread this cycle); find firms through their portfolio companies instead."New value: +"Against stated sectors, thesis, description and behaviour summary. Answers NOT_COVERED while no firm carries one (websites unread this cycle); firms remain reachable through the investors recorded on their portfolio companies."
    • Changedwhat_can_dfx_answer3 fields changed
      • changedInput schema / properties / constraints / properties / event_type / description
        Previous value: -"Same vocabulary as search_property_events"New value: +"One served event family"
      • changedInput schema / properties / domain / description
        Previous value: -"Ask about one domain's coverage and tools instead of routing a real estate objective."New value: +"One domain's coverage and tools, answered instead of routing a real estate objective."
      • changedInput schema / properties / objective / description
        Previous value: -"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, so name one."New value: +"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."
  15. 1 tool update
    • Changedsearch_family_office_investments3 fields changed
      • addedInput schema / properties / include_candidates
        Added value: +{
        +  "description": "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.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / investment_kind / description
        Previous value: -"portfolio_listing is a company named on the office's own portfolio page without a dated transaction."New value: +"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."
      • changedInput schema / properties / investment_kind / enum
        Previous value: -[
        -  "acquisition",
        -  "direct_equity",
        -  "venture",
        -  "growth",
        -  "portfolio_listing"
        -]New value: +[
        +  "acquisition",
        +  "direct_equity",
        +  "direct_investment",
        +  "round_participation",
        +  "recapitalization",
        +  "credit",
        +  "venture",
        +  "growth",
        +  "portfolio_listing"
        +]
  16. 1 tool update
    • Changedsearch_property_events1 field changed
      • changedInput schema / properties / within_days / description
        Previous value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 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-09-12, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 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-09-13, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LOAN_MODIFIED, PERMIT_ISSUED, PORTFOLIO_CONTRACTED, PORTFOLIO_EXPANDED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
  17. 1 tool update
    • Changedsearch_people1 field changed
      • addedInput schema / properties / cross_graph_only
        Added value: +{
        +  "description": "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.",
        +  "type": "boolean"
        +}
  18. 26 tool updates
    • Changedchanges_since2 fields changed
      • addedInput schema / properties / dfx_id
        Added value: +{
        +  "description": "With `domain`: watch one entity (dfx:fo:, dfx:isi: or dfx:vc: id).",
        +  "type": "string"
        +}
      • addedInput schema / properties / domain
        Added value: +{
        +  "description": "Ask an intelligence domain instead of real estate; then `since` is an ISO timestamp.",
        +  "enum": [
        +    "family_office",
        +    "independent_sponsor",
        +    "venture_capital"
        +  ],
        +  "type": "string"
        +}
    • Addedexplain_match
    • Addedfind_capital_for_opportunity
    • Addedfind_opportunities_for_capital
    • Addedget_entity
    • Addedget_family_office
    • Addedget_independent_sponsor
    • Addedget_vc_firm
    • Addedrelationship_path
    • Addedsearch_entities
    • Addedsearch_events
    • Addedsearch_family_office_investments
    • Addedsearch_family_offices
    • Addedsearch_independent_sponsors
    • Addedsearch_people
    • Addedsearch_private_companies
    • Addedsearch_relationships
    • Addedsearch_sponsor_capital_providers
    • Addedsearch_sponsor_deals
    • Addedsearch_vc_firms
    • Addedsearch_vc_funds
    • Addedsearch_vc_investments
    • Addedverify
    • Changedwhat_can_dfx_answer3 fields changed
      • addedInput schema / properties / domain
        Added value: +{
        +  "description": "Ask about one domain's coverage and tools instead of routing a real estate objective.",
        +  "enum": [
        +    "real_estate",
        +    "family_office",
        +    "independent_sponsor",
        +    "venture_capital"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / topic
        Added value: +{
        +  "description": "A topic in your own words ('family office direct investing', 'venture fundraising'); answers with the domains that cover it.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "objective"
        -]New value: +[]
    • Addedwho_should_care
    • Addedwhy_now

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Live 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
  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides live commercial real estate data (rates, demographics) and analysis tools (DCF, rent roll parsing, lease abstraction, IC memo generation) within Claude Desktop.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Recession probability, capital rotation, macro cascade analysis, and real-time economic data for Claude, ChatGPT, Cursor, and any MCP client.
    23
    26 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.