Skip to main content
Glama

CMD+RVL Receipts

Server Details

Check claims against current public CMBS filings and NPORT-P coupons, with citations.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cmdrvl/mcp-servers
GitHub Stars
0

TDQS

A4/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have clearly distinct domains, such as loan-grain vs deal-grain verification, counterparty identity, status counts, and fund-holding coupon. Ambiguity remains because verify_ending_balance and verify_servicer are aliases, and verify_claims overlaps the individual verifiers, though the descriptions explicitly route users away from the aliases and toward single-value tools.

Naming Consistency4/5

The verification tools consistently follow a verify_<resource/field> pattern, which makes the core surface predictable. Meta/discovery tools such as coverage, quickstart, covered_deals, and find_deals deviate from this pattern but remain readable and contextually appropriate.

Tool Count4/5

At 14 tools, the count is within a reasonable range for a verification-oriented server covering multiple field families, bulk claims, counterparties, and discovery. The set is slightly padded by two alias tools and a deprecated alias, but overall each major operation has a plausible place.

Completeness4/5

The surface covers discovery, deal lookup, loan/deal field verification, bulk claim adjudication, counterparty checks, status counts, and specialized appraised-value/building-size checks. Minor gaps remain around aliases and tools that currently return UNVERIFIED pending upstream shards, but the core verification workflow is well represented.

Available Tools

14 tools
coverageCoverage — what this server can and cannot verifyA
Read-onlyIdempotent
Inspect

What this server covers: deals and loans against the universe, the field inventory with full bound definitions, counterparty roles, current-only scope, and dual-sourced agreement stats (single-source reported separately). Call before reading an UNVERIFIED as meaningful. Contact cairn@cmdrvl.com for deeper coverage, history, bonds, entitlements.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
bondsYes
dealsYescovered, named, fully_confirmed_ever, edgar_cmbs_universe.
loansYes
fieldsYesPer field: field, grain, receipts, field_definition (the full bound definition).
limitsYes
contactYes
temporalYes
securitiesYes
generated_atYes
coverage_sourceYes
counterparty_rolesYes
confirmation_breakdownYes
confirmation_statisticsYes
confirmation_breakdown_noteYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, closed-world behavior, so the bar is lower. The description adds valuable limits beyond annotations: current-only scope, dual-sourced agreement stats with single-source reported separately, and an explicit note that deeper coverage, history, bonds, and entitlements require contact. That is meaningful 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.

Conciseness4/5

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

The description is compact and front-loads the coverage scope before the call guidance. The list of covered domains is dense but each item earns its place; nothing is redundant. It is slightly terse in structure rather than wasteful.

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 this is a zero-parameter meta tool with an output schema, the description provides enough context to understand what the tool returns and when to invoke it. The main missing element is explicit sibling routing—telling the agent when to use verify_* instead—but the core completeness is strong.

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 zero parameters and 100% schema description coverage, there is no parameter semantics to document. Baseline for a no-parameter tool is 4, and the description correctly does not waste space on nonexistent 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 specific purpose—documenting what the server covers (deals, loans, field inventory, counterparty roles, agreement stats)—which is clearly distinct from the verify_* and find_* siblings. It does not explicitly name those siblings or say 'not for X', so it stops short of full differentiation.

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 an explicit usage trigger: 'Call before reading an UNVERIFIED as meaningful.' That is a clear when-to-use condition. It does not name alternatives or state when not to call it, but for a meta-coverage tool the primary routing instruction is present.

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

covered_dealsCovered dealsA
Read-onlyIdempotent
Inspect

List every deal this server can verify, with CIKs, aliases and filing periods. Use find_deals for a focused lookup.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
countYes
dealsYes
fieldYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered; the description adds the completeness claim ('every deal this server can verify'), which tells the agent this is the exhaustive enumeration path. It says nothing about result size or pagination, a mild gap for a full-list operation, but the presence of an output schema offsets that.

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 short sentences, zero waste, with the scope and returned fields front-loaded and the sibling redirect placed last.

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 params, full annotation coverage and an output schema that documents return values, the description covers what an agent needs to select and call it. The only missing nuance is expected result volume for an unbounded enumeration.

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 tool takes zero parameters, so there is nothing to document; the baseline for a no-param tool applies. The description correctly implies no filtering arguments exist and that filtering requires find_deals.

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 ('List every deal') plus the scope ('this server can verify') and names the returned fields (CIKs, aliases, filing periods). An agent can distinguish it from find_deals 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?

Explicitly routes focused lookups to find_deals, which is the nearest sibling and the main confusion risk. It lacks an explicit 'when not to use' beyond that, but the enumerate-vs-lookup split is clear.

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

find_dealsFind covered dealsA
Read-onlyIdempotent
Inspect

Search covered deals by id, trust name, CIK, alias, shelf, vintage or deal_ref. An EXACT query returns one dominant result: proceed. A fuzzy query returns a small ranked set with match reasons, periods and a suggested next call. Use covered_deals only when you need the full universe.

NameRequiredDescriptionDefault
limitNoMaximum ranked candidates to return (default 5; 10 on the builtin fallback; max 25).
queryYesDeal name, ticker-style id, CIK, alias, shelf/vintage fragment, or deal_ref to search.

Output Schema

NameRequiredDescription
countYes
limitYes
queryYes
matchesYesDeal id, cik, name, shelf, vintage, aliases, score.
messageYes
truncatedYes
next_actionsYes
total_matchesYes
search_backendNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, but the description adds genuine behavioral detail beyond them: the two result regimes (single dominant result vs. small ranked set) and what a fuzzy result carries (match reasons, periods, suggested next call). It does not describe no-match behavior or error conditions, which keeps it short of a 5 for a lookup tool.

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 short sentences, front-loaded with the searchable fields and followed by the exact/fuzzy outcome behavior and the sibling exclusion. No filler and no repetition of schema or annotation 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?

With an output schema present, return values need not be explained, and the description still adds the decision-relevant result-shape behavior and the sibling routing rule. It is essentially complete for a two-parameter read tool; only edge cases such as no-match or ambiguous multi-hit resolution are left unstated.

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 both parameters are already documented, including the limit default (5), fallback (10) and max (25). The description's list of searchable identifier types largely restates the schema's own query description and adds no syntax or format guidance beyond it, so the 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?

States a specific verb and resource ("Search covered deals") and enumerates the searchable identifier types (id, trust name, CIK, alias, shelf, vintage, deal_ref). It explicitly names the sibling covered_deals and the condition that distinguishes it, so an agent can tell the two apart 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 Guidelines5/5

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

Gives concrete routing rules: an exact query returns one dominant result and the agent should proceed; a fuzzy query returns a ranked set with match reasons and a suggested next call. It also states the exclusion for the alternative ("Use covered_deals only when you need the full universe"), so when-to-use and when-not-to-use are both covered.

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

quickstartQuickstart capability manifestA
Read-onlyIdempotent
Inspect

Compact capability manifest for clients: purpose, workflow, routing table, examples, vocabulary guard, scope caveats, next actions, and contact. Use when new or context is tight; call coverage for coverage facts.

NameRequiredDescriptionDefault
detailNoDefault summary. Use routing for tool selection guidance, examples for more call examples.

Output Schema

NameRequiredDescription
toolsYesRouting table: name, when_to_use, required_args, returns.
serverYes
caveatsYes
compactYes
contactYes
purposeYes
schemasYessf-receipt v0: profile, version, schema_uri, context_uri, human_docs.
examplesYesWorked calls: task plus {tool, arguments}.
workflowYes
vocabularyYesterm, meaning.
next_actionsYes
current_scopeYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered by structured data. The description adds that the payload includes 'scope caveats' and 'next actions', which hints at limitations being disclosed inside the response, but it does not say what those caveats are or how large the manifest is. Additional transparency is modest, not rich.

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?

Two sentences, front-loaded with what the tool is, followed by the when-to-use and the alternative. The middle section is a long comma-delimited inventory of sections ('vocabulary guard, scope caveats, next actions, and contact') that verges on listy, but every element is arguably meaningful to an agent deciding whether to call.

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?

This is a low-complexity, zero-required-parameter orientation tool with an output schema, so the description need not explain return values. It covers purpose, trigger, and sibling routing, which is most of what an agent needs. The only gap is that a reader cannot tell how much content each 'detail' mode yields.

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 single 'detail' enum is documented in-schema, including when to pick routing or examples. The description mentions the sections (routing table, examples) but adds no syntax or format detail beyond what the schema already states, so the baseline 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 names the resource precisely (a compact capability manifest for clients) and enumerates what it contains, so an agent knows it is an orientation/onboarding tool rather than a data query. It distinguishes itself from 'coverage' by assigning coverage facts to that sibling. The verb is implicit ('this is a manifest' rather than 'returns a manifest'), and internal jargon like 'vocabulary guard' is opaque, which keeps it off 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 Guidelines4/5

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

'Use when new or context is tight' gives an explicit trigger condition, and 'call coverage for coverage facts' names the alternative and the condition that routes away from this tool. It does not enumerate when-not-to-use beyond that single routing case, but the key selection decision is stated outright.

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

verify_appraised_valueVerify issuance appraised valueA
Read-onlyIdempotent
Inspect

Verify issuance appraised value (Annex A vs ABS-EE). Date/basis mismatches return DATE_INCOMMENSURATE or BASIS_INCOMMENSURATE, not CONFLICT/DENY. Until upstream shards exist, returns UNVERIFIED.

NameRequiredDescriptionDefault
dealYesDeal name or alias, e.g. 'WFCM 2020-C58'.
loan_idYesLoan / entity id within the deal, e.g. '25'.
claimed_basisNoOptional valuation basis.
claimed_valueNoClaim to receipt. Required.
claimed_value_dateNoOptional valuation date.

Output Schema

NameRequiredDescription
as_ofYes
claimYesAdjudication: claimed_value, tolerance_*, within_tolerance, rationale.
messageYes
receiptYessf-receipt 0.3; schema https://cmdrvl.com/schemas/sf-receipt/v0/schema.json; context https://cmdrvl.com/contexts/obs-receipt/v0/context.json
claim_verdictYesCaller-claim verdict; DENY only here.
resolved_dealYesDeal resolution: matched, id, cik, candidates.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent/closed-world profile, and the description adds genuinely non-obvious behavioral context: date or basis mismatches yield DATE_INCOMMENSURATE/BASIS_INCOMMENSURATE rather than CONFLICT/DENY, and results are UNVERIFIED until upstream shards exist. It does not explain what a CONFLICT/DENY outcome implies or what triggers it.

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 short sentences, purpose front-loaded, followed by result-code caveats and availability status. Dense and mostly waste-free, though the DATE_INCOMMENSURATE/BASIS_INCOMMENSURATE vs CONFLICT/DENY contrast is compressed without explaining the latter terms.

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 an output schema, full schema coverage, and annotations present, the description covers the essentials: what is compared, how mismatch outcomes are classified, and that results are currently UNVERIFIED. Domain terms (Annex A, ABS-EE) and sibling routing are left unexplained, which is a minor gap.

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 deal, loan_id, claimed_basis, claimed_value, and claimed_value_date; baseline 3 applies. The description adds no parameter-level meaning, and it does not resolve the schema's ambiguity where claimed_value is labeled 'Required.' but is absent from the required array.

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 the specific verb (verify) and resource (issuance appraised value) and names both data sources being reconciled (Annex A vs ABS-EE), which distinguishes it from generic siblings like verify_loan_field or verify_deal_field. It stops short of explicitly routing the agent away from any particular sibling.

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 by the resource ('verify issuance appraised value') and the 'Until upstream shards exist, returns UNVERIFIED' note usefully signals the tool is currently a no-op for real data. However, there is no explicit when-to-use/when-not guidance and no named alternative for verifying other loan attributes.

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

verify_building_sizeVerify issuance building sizeA
Read-onlyIdempotent
Inspect

Verify issuance building size (Annex A vs ABS-EE). Units matter: mismatched units return receipt status UNITS_INCOMMENSURATE, not CONFLICT/DENY. Until upstream shards exist, returns UNVERIFIED.

NameRequiredDescriptionDefault
dealYesDeal name or alias, e.g. 'WFCM 2020-C58'.
loan_idYesLoan / entity id within the deal, e.g. '25'.
claimed_unitNoOptional unit, e.g. square_feet or units.
claimed_valueNoClaim to receipt. Required.

Output Schema

NameRequiredDescription
as_ofYes
claimYesAdjudication: claimed_value, tolerance_*, within_tolerance, rationale.
messageYes
receiptYessf-receipt 0.3; schema https://cmdrvl.com/schemas/sf-receipt/v0/schema.json; context https://cmdrvl.com/contexts/obs-receipt/v0/context.json
claim_verdictYesCaller-claim verdict; DENY only here.
resolved_dealYesDeal resolution: matched, id, cik, candidates.

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing two non-obvious behaviors: a unit mismatch yields the distinct receipt status UNITS_INCOMMENSURATE rather than CONFLICT/DENY, and the tool currently returns UNVERIFIED until upstream shards are available. That is exactly the kind of degraded-state and return-semantics context an agent needs.

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

Conciseness5/5

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

Three compact sentences, each carrying distinct information: what is compared, the unit-status caveat, and the current UNVERIFIED limitation. No repetition of the name or schema.

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 4-param, closed-world read tool with an output schema and full schema coverage, the description supplies the key behavioral caveats (unit handling and temporary UNVERIFIED state). Only the absence of sibling routing keeps it short of 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 100%, so deal, loan_id, claimed_unit and claimed_value are already documented, and the baseline is 3. The note that 'units matter' adds a bit of meaning to claimed_unit's role, but deal/loan_id/claimed_value semantics get no elaboration 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+resource ('Verify issuance building size') and disambiguates the data sources compared ('Annex A vs ABS-EE'), which tells an agent exactly what is being checked. It is clearly distinct from siblings like verify_appraised_value or verify_loan_field.

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 verification use case and warns about unit mismatch, but never states when to use this tool versus the many sibling verify_* tools (e.g. verify_claims) or what prerequisites exist. Usage is inferable but not spelled out.

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

verify_claimsVerify every checkable claim in a text (bulk)A
Read-onlyIdempotent
Inspect

Bulk verifier: paste text, get per-claim statuses. ASSERTIONS ONLY: a QUESTION ('is it $9.4M?') binds nothing and returns total 0; route single-value questions to verify_loan_field / verify_deal_field. Deterministic grammar, four families: loan fields, pool fields, servicer identity, loan-status counts. Unparsed text is listed in unchecked_spans, never dropped. EXACT deal references (id, alias, CIK) work best; matching is never fuzzy. Statuses (verified / contradicted / insufficient_evidence / out_of_scope) are answers, not errors. Each claim has a claim_id, citations and a confidence.

NameRequiredDescriptionDefault
textYesThe paragraph / memo excerpt to check.
deal_hintNoFallback deal context when a sentence names no deal (exact resolution only).
period_hintNoYYYY-MM annotation only — latest-only server; a mismatch is noted and drops confidence one tier.
risk_toleranceNoDefault normal = max(ledger tolerance, stated precision); strict = ledger only; lenient = 2x stated precision. Counts and names are always exact.

Output Schema

NameRequiredDescription
claimsYesPer claim: normalized_claim, citations, notes, recommended_language.
summaryYesCounts: total, verified, contradicted, insufficient_evidence, out_of_scope.
tool_versionYes
search_backendYes
material_issuesYes
unchecked_spansYesText no grammar rule could check, with reason and hint.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond readOnly/idempotent annotations: unparsed text is surfaced in unchecked_spans and never silently dropped, statuses are answers rather than errors, and per-claim output includes claim_id, citations and confidence. The deterministic four-family grammar scope is also disclosed, which sets expectations for 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?

Front-loaded with the core capability, then the routing exclusion, then the grammar scope, then edge-case guarantees. Telegraphic but every clause carries a distinct operational fact; no filler.

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 4-param tool with an output schema, this covers everything an agent needs: what to pass (assertions, exact deal refs), what happens to garbage input (unchecked_spans), the four status values, and the shape of each result. Nothing material is left to inference.

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 each parameter already carries a description (including period_hint's confidence-dropping behavior and risk_tolerance's tolerance rules). The description adds only indirect guidance about exact deal references feeding deal_hint; it says nothing about period_hint or risk_tolerance that the schema doesn't already say. Baseline 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?

Opens with a specific verb+resource+mode: 'Bulk verifier: paste text, get per-claim statuses.' It then explicitly separates itself from the single-value siblings (verify_loan_field / verify_deal_field), so an agent can route 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 Guidelines5/5

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

States a hard exclusion ('ASSERTIONS ONLY'), explains the failure mode for violating it ('a QUESTION ... returns total 0'), and names the alternatives to use instead. Also gives a positive usage condition ('EXACT deal references work best') and warns matching is never fuzzy.

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

verify_counterpartyVerify a deal counterparty (roster)A
Read-onlyIdempotent
Inspect

Adjudicate 'who is the on deal X' against the SEC 10-D counterparty roster (today: master and special servicer). A SINGLE-SOURCE roster fact. Master is the roster party, NOT the ABS-EE tape's primary servicer. Pass claimed_name: CONFIRM/DENY under the ledger's name normalization, never fuzzy. Says WHO the party is, not that a loan is in special servicing. Unknown deal or role: UNVERIFIED.

NameRequiredDescriptionDefault
dealYesDeal name or alias, e.g. 'WFCM 2020-C58'.
roleNoDefault special_servicer. Full definitions ride each receipt's field_definition.
claimed_nameNoName to adjudicate (normalized comparison).

Output Schema

NameRequiredDescription
as_ofYes
claimYesAdjudication: claimed_value, tolerance_*, within_tolerance, rationale.
messageYes
receiptYessf-receipt 0.3; schema https://cmdrvl.com/schemas/sf-receipt/v0/schema.json; context https://cmdrvl.com/contexts/obs-receipt/v0/context.json
claim_verdictYesCaller-claim verdict; DENY only here.
resolved_dealYesDeal resolution: matched, id, cik, candidates.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare read-only, closed-world, idempotent, so the description correctly spends its words elsewhere: it discloses the single-source roster scope, the exact-match normalization rule, and the UNVERIFIED fallback for unknown inputs. It does not cover rate limits or caching, but for a read-only lookup that is minor.

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 adjudication purpose, then the disambiguation and fallback behavior in tight sentences; nothing is wasted. The telegraphic style ('A SINGLE-SOURCE roster fact') is dense but readable.

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?

An output schema exists, so the return values need not be explained, and the description still covers outcome vocabulary (CONFIRM/DENY/UNVERIFIED) and source scope. The one gap is what happens when claimed_name is omitted, given only deal is required.

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 baseline is 3, and the description goes beyond it: it explains that claimed_name is adjudicated under the ledger's name normalization and never fuzzily, and that role today covers master and special servicer with unknown role yielding UNVERIFIED. It also clarifies that 'master' means the roster party, not the tape's primary servicer, which changes how the role value should be interpreted.

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 ('Adjudicate') against a named, single-source resource ('SEC 10-D counterparty roster') for a specific question ('who is the <role> on deal X'). It explicitly draws the boundary against the ABS-EE tape's primary servicer, which distinguishes it from the sibling verify_servicer.

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 operating conditions: pass claimed_name to get CONFIRM/DENY, comparison is under the ledger's name normalization and never fuzzy, and unknown deal or role returns UNVERIFIED. It does not name the sibling tool to use for the tape-based servicer question, implying the handoff rather than stating it.

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

verify_deal_fieldVerify a deal-grain (pool) fieldA
Read-onlyIdempotent
Inspect

Verify one pool-level field of a deal: the ABS-EE loan-tape rollup against the 10-D trustee's reported fact. These are COLLATERAL (loan-pool) balances and flows, NOT bond or certificate balances, and SCHEDULED and ACTUAL are different fields. No loan_id. Always the CURRENT period. Pass claimed_value; no claim or an unknown deal or field: UNVERIFIED.

NameRequiredDescriptionDefault
dealYesDeal name or alias, e.g. 'WFCM 2020-C58'.
fieldYesThe deal-grain (pool) field to verify. One of (full definitions: coverage, or the receipt's field_definition): • beginning_scheduled_collateral_balance — pool SCHEDULED collateral balance at period start (not bond balance) • ending_scheduled_collateral_balance — pool SCHEDULED collateral balance at period end (not bond balance) • ending_actual_collateral_balance — pool ACTUAL (as-paid) collateral balance at period end • total_principal_collected — pool principal collected: scheduled plus unscheduled
claimed_valueNoClaim to receipt. Required: no claim = refusal, no value.

Output Schema

NameRequiredDescription
as_ofYes
claimYesAdjudication: claimed_value, tolerance_*, within_tolerance, rationale.
messageYes
receiptYessf-receipt 0.3; schema https://cmdrvl.com/schemas/sf-receipt/v0/schema.json; context https://cmdrvl.com/contexts/obs-receipt/v0/context.json
claim_verdictYesCaller-claim verdict; DENY only here.
resolved_dealYesDeal resolution: matched, id, cik, candidates.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, closed-world behavior, so the bar is lower. The description adds real behavioral context beyond that: it always reads the CURRENT period only, and it discloses the failure mode (no claim, unknown deal, or unknown field yields UNVERIFIED). It stops short of describing the pass/fail semantics or any comparison tolerance.

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?

Four dense sentences, each carrying distinct information: grain, source comparison, exclusions, and failure mode. The all-caps emphasis is functional but the grain/exclusion points overlap slightly ('pool-level' and 'No loan_id').

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 an output schema present, return values need not be explained, and the description covers input semantics, grain constraints, and the UNVERIFIED outcome. It leaves the actual match/mismatch result semantics and any tolerance logic to the output schema, which is acceptable but slightly under-explained.

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 a 3 is the baseline. The description exceeds it by clarifying that claimed_value must be passed even though it is absent from the schema's required list ('no claim = refusal, no value'), and by reinforcing that no loan_id exists at this grain.

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+resource with explicit grain: 'Verify one pool-level field of a deal' and names the source pair (ABS-EE loan-tape rollup vs 10-D trustee fact). It actively distinguishes itself from adjacent concepts by ruling out bond/certificate balances and clarifying SCHEDULED vs ACTUAL are distinct fields.

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?

'No loan_id' and 'COLLATERAL (loan-pool) balances ... NOT bond or certificate balances' route the agent away from loan-grain and bond-grain siblings without naming them explicitly. Clear context on when this applies (pool grain, current period only), but no explicit sibling callout such as verify_loan_field or verify_ending_balance.

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

verify_ending_balanceVerify loan ending balance (alias)A
Read-onlyIdempotent
Inspect

Alias for verify_loan_field with field='ending_balance': a loan's trust-level SCHEDULED ending balance, current period. Prefer verify_loan_field.

NameRequiredDescriptionDefault
dealYesDeal name or alias, e.g. 'WFCM 2020-C58' or 'Wells Fargo 2020-C58'.
loan_idYesLoan / entity id within the deal, e.g. '25'.
claimed_valueNoClaim to receipt. Required: no claim = refusal, no value.

Output Schema

NameRequiredDescription
as_ofYes
claimYesAdjudication: claimed_value, tolerance_*, within_tolerance, rationale.
messageYes
receiptYessf-receipt 0.3; schema https://cmdrvl.com/schemas/sf-receipt/v0/schema.json; context https://cmdrvl.com/contexts/obs-receipt/v0/context.json
claim_verdictYesCaller-claim verdict; DENY only here.
resolved_dealYesDeal resolution: matched, id, cik, candidates.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, closed-world behavior, so the bar is lower; the description still adds the meaningful qualifier that the balance is SCHEDULED (not actual) and scoped to the current period. It does not restate the refusal-on-no-claim behavior that lives in the schema, but that is already covered there.

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?

A single sentence, front-loaded with the alias equivalence and followed by the field's meaning and the sibling preference. Nothing is 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?

An output schema exists so return values needn't be explained, and all three parameters are documented in the schema. The only gap is why the alias exists and when it should still be used rather than the canonical 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 100%, so deal, loan_id, and claimed_value are fully documented in the schema, including the 'no claim = refusal, no value' rule. The description adds no parameter-level detail beyond the implicit field='ending_balance', so 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 states exactly what the tool verifies (a loan's trust-level SCHEDULED ending balance for the current period) and identifies itself as an alias for verify_loan_field with field='ending_balance'. That mapping makes it unambiguous against every sibling, including the parent 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?

"Prefer verify_loan_field" gives explicit routing away from this tool, which is the key selection decision. It stops short of saying when this alias is still appropriate (e.g. legacy callers), so the exclusion is one-sided rather than a full when/when-not rule.

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

verify_fund_holding_couponVerify NPORT cross-filer fund-holding couponA
Read-onlyIdempotent
Inspect

Verify the NPORT cross-filer annualized coupon rate (annualized_rate) for one security identifier. Security-grain, N-source receipt: citations are peer NPORT-P filings by registrant CIK, dissenters included. CURRENT-ONLY (latest NPORT period exported). Ticker matches are not unique: set require_hard_identifier=true when a claim needs ISIN, CUSIP or other hard identity.

NameRequiredDescriptionDefault
as_ofNoOptional NPORT period guard (YYYY-MM). The public corpus is latest-period-per-security, not historical.
identifierYesSecurity identifier to look up: ISIN, CUSIP, other identifier, or ticker.
claimed_valueNoClaim to receipt. Required: no claim = refusal, no value.
security_id_sourceNoOptional source filter. Default any. Use ticker only for ticker-sourced matches.
require_hard_identifierNoWhen true, exclude ticker-sourced matches because tickers are not unique hard identifiers.

Output Schema

NameRequiredDescription
as_ofYes
claimYes
messageYes
receiptYessf-receipt 0.3; schema https://cmdrvl.com/schemas/sf-receipt/v0/schema.json; context https://cmdrvl.com/contexts/obs-receipt/v0/context.json
claim_verdictYesCaller-claim verdict; DENY only here.
resolved_securityYesSecurity resolution: matched, security_id, hard_identifier, candidates.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover safety (readOnlyHint, idempotentHint, openWorldHint=false), and the description adds valuable context beyond them: N-source receipt from peer NPORT-P filings by registrant CIK with dissenters included, and the latest-period-only currency limitation. It stops short of describing failure/refusal outcomes outside the schema, so not a full 5.

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-loaded with verb and resource, then scoping facts (grain, receipt, currency) and the ticker caveat. Dense with domain jargon but every clause carries information an agent needs to select and call it correctly.

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 domain-specific verification tool with annotations and an output schema, the description covers grain, source behavior, currency limits, and identifier pitfalls. Nothing essential for correct invocation is missing; the refusal-on-no-claim rule is adequately captured in the 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 coverage is 100%, so baseline is 3; the description adds rationale beyond schema by explaining ticker non-uniqueness and the claim-driven condition for require_hard_identifier. This reinforces the why behind the flag rather than merely restating it.

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 (verify) and a specific resource (NPORT cross-filer annualized coupon rate, annualized_rate) at security grain for one identifier. It clearly distinguishes itself from siblings like verify_appraised_value or verify_building_size by naming the exact data point and grain.

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?

Explains conditions: CURRENT-ONLY with latest NPORT period, not historical, and directs the agent to set require_hard_identifier=true when a claim needs a hard identity, contrasting ticker vs ISIN/CUSIP. It gives clear context but does not explicitly name a sibling alternative or state exclusion boundaries.

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

verify_loan_fieldVerify a loan-grain fieldA
Read-onlyIdempotent
Inspect

Verify one loan-grain field of a CMBS loan against the SEC 10-D and ABS-EE filings. Values are TRUST-LEVEL (this trust's piece, not the whole loan). Always the CURRENT period; the receipt stamps its as-of. Pass claimed_value: you get CONFIRM / DENY / CONFLICT / UNVERIFIED plus an sf-receipt. No claim, or an unknown deal, loan or field: UNVERIFIED.

NameRequiredDescriptionDefault
dealYesDeal name or alias, e.g. 'WFCM 2020-C58' or 'Wells Fargo 2020-C58'.
fieldYesThe loan-grain field to verify. One of (full definitions: coverage, or the receipt's field_definition): • beginning_balance — trust-level SCHEDULED balance at period start • ending_balance — trust-level SCHEDULED balance at period end (not the actual/as-paid balance) • scheduled_principal — principal applied: scheduled amortization plus unscheduled (curtailments, payoffs) • scheduled_interest — scheduled interest, trust-level • note_rate — current note rate in percent (not origination rate, not pool WAC) • servicer_advances — Taxes & Insurance (escrow) advances outstanding, not P&I advances • paid_through_date — paid-through date (a date; exact match)
loan_idYesLoan / entity id within the deal, e.g. '25'.
claimed_valueNoClaim to receipt (number, or date string for paid_through_date). Required: no claim = refusal, no value.

Output Schema

NameRequiredDescription
as_ofYes
claimYesAdjudication: claimed_value, tolerance_*, within_tolerance, rationale.
messageYes
receiptYessf-receipt 0.3; schema https://cmdrvl.com/schemas/sf-receipt/v0/schema.json; context https://cmdrvl.com/contexts/obs-receipt/v0/context.json
claim_verdictYesCaller-claim verdict; DENY only here.
resolved_dealYesDeal resolution: matched, id, cik, candidates.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/closed-world, but the description adds real behavioral context: values are trust-level rather than whole-loan, the period is always current and stamped by the receipt, and the output is one of four verdicts plus an sf-receipt. It stops short of explaining what CONFLICT means operationally or how to resolve it.

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 dense sentences, front-loaded with the highest-value facts (grain, source, trust-level scope) before the verdict/fallback mechanics. No filler, no restatement of the title.

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?

Annotations carry the safety profile and an output schema exists, so the description focuses correctly on grain semantics, period semantics, and the refusal/UNVERIFIED path. Nothing an agent needs in order to call this correctly 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 meaning the schema does not: claimed_value is not in the schema's required list yet is semantically mandatory because omitting it yields a refusal rather than a lookup. It also clarifies the date-vs-number type split for paid_through_date, which the schema only hints at.

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 (verify), a specific resource (one loan-grain field of a CMBS loan) and names the authoritative sources (SEC 10-D and ABS-EE). The 'loan-grain' scoping implicitly separates it from deal-grain siblings such as verify_deal_field, but the overlap with verify_ending_balance (ending_balance is also a field here) is left unaddressed.

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 operating conditions: always the CURRENT period, as-of comes from the receipt, and passing claimed_value is what produces a verdict. Explicitly states the failure path (no claim, or unknown deal/loan/field → UNVERIFIED). No 'use X instead' routing to alternatives, which keeps it 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.

verify_loan_status_countsVerify a deal's loan-status counts (derived)A
Read-onlyIdempotent
Inspect

Verify count claims over loan status ('N in special servicing / paid off / defeased') for a deal. Counts are DERIVED from the ABS-EE tape, not reported by any filing. Three grains, never mixed: activity (active, resolved_paid_off, defeased); servicing: in_special_servicing = loans CURRENTLY with the special servicer (the count for 'N in special servicing'; it OVERLAPS active, never sum); resolution reason (resolved_via_special_servicing and other payoff reasons) = loans that already LEFT the pool, NOT current counts. Pass claimed for exact per-status adjudication. Uncovered deal: UNVERIFIED.

NameRequiredDescriptionDefault
dealYesDeal name or alias, e.g. 'WFCM 2020-C58'.
claimedNoOptional claimed per-status counts, e.g. {"in_special_servicing": 10, "defeased": 2}. Each is adjudicated by EXACT match against the derived count.

Output Schema

NameRequiredDescription
as_ofYes
messageYes
statusesYesPer status: status, grain, count, claimed, claim_verdict, receipt.
claim_verdictYes
resolved_dealYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, closed-world, so the bar is lower; the description still adds real value by disclosing the data provenance (ABS-EE tape), the exact-match adjudication rule, and the UNVERIFIED result for uncovered deals. It stops short of describing return shape, but an output schema exists so that is covered elsewhere.

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 and provenance, then the three grains, then the parameter hint. Dense with parentheticals and semicolons, which is efficient but makes it heavier to parse than a cleaner list of grains would.

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 two-parameter verification tool with a full output schema, the description covers what an agent needs: data source, the three mutually exclusive grains, overlap rules, the claimed-adjudication path, and the unverified fallback for unsupported deals.

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 an enumerated claim-key list, so the schema carries most weight. The description still adds meaning beyond it: 'Pass `claimed` for exact per-status adjudication' and the per-status semantics (overlap of in_special_servicing, post-pool nature of resolution reasons) that the enum alone cannot 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?

Starts with a specific verb+resource: verifying count claims over loan statuses for a deal, and immediately clarifies the counts are DERIVED from the ABS-EE tape rather than filed. That derivation point is exactly what separates it from generic siblings like verify_claims or verify_loan_field.

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?

Explicitly tells the agent which grain answers which sort of claim ('in_special_servicing' is the count for 'N in special servicing'), warns that grains are never mixed, that in_special_servicing OVERLAPS active and must never be summed, and that resolution-reason counts are loans that already left the pool. It also states the uncovered-deal outcome (UNVERIFIED).

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

verify_servicerVerify a deal's servicer (deprecated)A
Read-onlyIdempotent
Inspect

Deprecated alias of verify_counterparty (claimed_servicer = claimed_name).

NameRequiredDescriptionDefault
dealYesDeal name or alias.
roleNo
claimed_servicerNo

Output Schema

NameRequiredDescription
messageYes
claim_verdictYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description's only added behavioral fact is the delegation mapping (claimed_servicer = claimed_name), which is useful but thin; it says nothing about whether the call is a pure passthrough or adds validation.

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?

A single front-loaded sentence with the deprecation status first and the mapping in parentheses. Nothing is wasted and no reading further is required to act.

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?

An output schema exists, so return values need no explanation, and the deprecation notice is the essential fact. However, a 3-parameter tool with one undocumented enum still leaves an agent guessing about 'role' semantics.

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%, so the schema leaves 'role' and 'claimed_servicer' undocumented. The description compensates for the most confusing one by mapping claimed_servicer to verify_counterparty's claimed_name, but 'role' and its enum values remain unexplained in both places.

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 plainly that this is a deprecated alias of verify_counterparty and gives the parameter mapping, so an agent knows exactly what the call resolves to. It does not explain what 'verifying a servicer' means, but the equivalence to a named sibling removes ambiguity about behavior.

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 word 'deprecated' plus the pointer to verify_counterparty is an explicit steer toward the replacement tool. There is no explicit 'do not call' instruction or removal timeline, but the implied routing is clear.

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. 12 tool updates
    • Changedcoverage39 fields changed
      • addedOutput schema / properties / bonds / $ref
        Added value: +"#/properties/loans"
      • removedOutput schema / properties / bonds / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / bonds / properties
        Removed value: -{
        -  "covered": {
        -    "type": "number"
        -  },
        -  "note": {
        -    "type": "string"
        -  },
        -  "planned": {
        -    "type": "boolean"
        -  }
        -}
      • removedOutput schema / properties / bonds / required
        Removed value: -[
        -  "covered",
        -  "planned",
        -  "note"
        -]
      • removedOutput schema / properties / bonds / type
        Removed value: -"object"
      • changedOutput schema / properties / confirmation_statistics / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "all_receipts": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "total": {
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "total"
        -        ],
        -        "type": "object"
        -      },
        -      "denominator_note": {
        -        "type": "string"
        -      },
        -      "dual_sourced": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "total": {
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "total"
        -        ],
        -        "type": "object"
        -      },
        -      "single_source": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "total": {
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "total"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "all_receipts",
        -      "dual_sourced",
        -      "single_source",
        -      "denominator_note"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/properties/loans"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / contact / $ref
        Added value: +"#/properties/loans"
      • removedOutput schema / properties / contact / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / contact / properties
        Removed value: -{
        -  "inquiries": {
        -    "type": "string"
        -  },
        -  "note": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / contact / required
        Removed value: -[
        -  "inquiries",
        -  "note"
        -]
      • removedOutput schema / properties / contact / type
        Removed value: -"object"
      • changedOutput schema / properties / deals / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / deals / description
        Added value: +"covered, named, fully_confirmed_ever, edgar_cmbs_universe."
      • removedOutput schema / properties / deals / properties / covered
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / deals / properties / edgar_cmbs_universe
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "type": "string"
        -    },
        -    "count": {
        -      "type": "number"
        -    },
        -    "source": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "count",
        -    "source",
        -    "as_of"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / deals / properties / fully_confirmed_ever
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / deals / properties / named
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / deals / required
        Removed value: -[
        -  "covered",
        -  "fully_confirmed_ever",
        -  "edgar_cmbs_universe",
        -  "named"
        -]
      • addedOutput schema / properties / fields / description
        Added value: +"Per field: field, grain, receipts, field_definition (the full bound definition)."
      • addedOutput schema / properties / fields / items / $ref
        Added value: +"#/properties/loans"
      • removedOutput schema / properties / fields / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / fields / items / properties
        Removed value: -{
        -  "field": {
        -    "type": "string"
        -  },
        -  "field_definition": {
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "grain": {
        -    "type": "string"
        -  },
        -  "receipts": {
        -    "type": "number"
        -  }
        -}
      • removedOutput schema / properties / fields / items / required
        Removed value: -[
        -  "field",
        -  "grain",
        -  "receipts",
        -  "field_definition"
        -]
      • removedOutput schema / properties / fields / items / type
        Removed value: -"object"
      • addedOutput schema / properties / limits / $ref
        Added value: +"#/properties/loans"
      • removedOutput schema / properties / limits / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / limits / properties
        Removed value: -{
        -  "rate_cap": {
        -    "type": "string"
        -  },
        -  "unverified_semantics": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / limits / required
        Removed value: -[
        -  "rate_cap",
        -  "unverified_semantics"
        -]
      • removedOutput schema / properties / limits / type
        Removed value: -"object"
      • changedOutput schema / properties / loans / additionalProperties
        Previous value: -falseNew value: +true
      • removedOutput schema / properties / loans / properties / current_receipts
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / loans / properties / distinct_loans
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / loans / required
        Removed value: -[
        -  "current_receipts",
        -  "distinct_loans"
        -]
      • changedOutput schema / properties / securities / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "covered": {
        -        "type": "number"
        -      },
        -      "receipts": {
        -        "type": "number"
        -      }
        -    },
        -    "required": [
        -      "covered",
        -      "receipts"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/properties/loans"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / temporal / $ref
        Added value: +"#/properties/loans"
      • removedOutput schema / properties / temporal / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / temporal / properties
        Removed value: -{
        -  "historical": {
        -    "type": "string"
        -  },
        -  "period_max": {
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "period_min": {
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "scope": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / temporal / required
        Removed value: -[
        -  "scope",
        -  "period_min",
        -  "period_max",
        -  "historical"
        -]
      • removedOutput schema / properties / temporal / type
        Removed value: -"object"
    • Changedfind_deals27 fields changed
      • removedOutput schema / properties / count / description
        Removed value: -"Number of matches returned in this response after applying limit."
      • removedOutput schema / properties / limit / description
        Removed value: -"Maximum matches requested/returned."
      • addedOutput schema / properties / matches / description
        Added value: +"Deal id, cik, name, shelf, vintage, aliases, score."
      • changedOutput schema / properties / matches / items / additionalProperties
        Previous value: -falseNew value: +true
      • removedOutput schema / properties / matches / items / properties / aliases
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / matches / items / properties / cik
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / matches / items / properties / deal_ref
        Removed value: -{
        -  "description": "Canonical deal-registry URN (cmdrvl:DEAL-...), or null.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / matches / items / properties / id
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / matches / items / properties / match_reason
        Removed value: -{
        -  "description": "Why this candidate matched the query.",
        -  "type": "string"
        -}
      • removedOutput schema / properties / matches / items / properties / matched_on
        Removed value: -{
        -  "description": "The deal metadata field/value that produced the best match.",
        -  "type": "string"
        -}
      • removedOutput schema / properties / matches / items / properties / matched_via
        Removed value: -{
        -  "description": "Match provenance from the canon search-index backend, e.g. 'exact:alias-short', 'exact:cik-key', 'ranked:prefix'. Absent on the builtin fallback scorer.",
        -  "type": "string"
        -}
      • removedOutput schema / properties / matches / items / properties / name
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / matches / items / properties / num_loans_current
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / matches / items / properties / periods
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / matches / items / properties / score
        Removed value: -{
        -  "description": "Relative search score; higher is a stronger match.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / matches / items / properties / shelf
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / matches / items / properties / suggested_next_call
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "arguments": {
        -      "additionalProperties": {
        -        "type": "string"
        -      },
        -      "description": "Suggested arguments for that next tool.",
        -      "type": "object"
        -    },
        -    "note": {
        -      "description": "How to adapt the suggested call.",
        -      "type": "string"
        -    },
        -    "tool": {
        -      "description": "Advisory next MCP tool to call.",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tool",
        -    "arguments",
        -    "note"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / matches / items / properties / vintage
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / matches / items / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "cik",
        -  "deal_ref",
        -  "shelf",
        -  "vintage",
        -  "num_loans_current",
        -  "periods",
        -  "aliases",
        -  "match_reason",
        -  "matched_on",
        -  "score",
        -  "suggested_next_call"
        -]
      • addedOutput schema / properties / search_backend / $ref
        Added value: +"#/properties/matches/items"
      • removedOutput schema / properties / search_backend / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / search_backend / description
        Removed value: -"Provenance of the search backend that answered this find_deals call (bd-36t)."
      • removedOutput schema / properties / search_backend / properties
        Removed value: -{
        -  "backend": {
        -    "description": "Which search backend produced this result.",
        -    "enum": [
        -      "canon-search-index",
        -      "builtin"
        -    ],
        -    "type": "string"
        -  },
        -  "content_hash": {
        -    "description": "Content hash (blake3:…) of the index artifact; null on the builtin scorer.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "registry_version": {
        -    "description": "Canon deal-registry version from the index artifact's metadata; null on the builtin scorer.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / search_backend / required
        Removed value: -[
        -  "backend",
        -  "registry_version",
        -  "content_hash"
        -]
      • removedOutput schema / properties / search_backend / type
        Removed value: -"object"
      • removedOutput schema / properties / total_matches / description
        Removed value: -"Total matching covered deals before applying limit."
      • removedOutput schema / properties / truncated / description
        Removed value: -"True when more matches exist than were returned."
    • Changedquickstart27 fields changed
      • addedOutput schema / properties / examples / description
        Added value: +"Worked calls: task plus {tool, arguments}."
      • addedOutput schema / properties / examples / items / $ref
        Added value: +"#/properties/tools/items"
      • removedOutput schema / properties / examples / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / examples / items / properties
        Removed value: -{
        -  "call": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "arguments": {
        -        "additionalProperties": {
        -          "type": "string"
        -        },
        -        "type": "object"
        -      },
        -      "tool": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tool",
        -      "arguments"
        -    ],
        -    "type": "object"
        -  },
        -  "task": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / examples / items / required
        Removed value: -[
        -  "task",
        -  "call"
        -]
      • removedOutput schema / properties / examples / items / type
        Removed value: -"object"
      • changedOutput schema / properties / schemas / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / schemas / description
        Added value: +"sf-receipt v0: profile, version, schema_uri, context_uri, human_docs."
      • removedOutput schema / properties / schemas / properties / context_uri
        Removed value: -{
        -  "description": "Immutable canonical JSON-LD context URL for obs-receipt v0.",
        -  "format": "uri",
        -  "type": "string"
        -}
      • removedOutput schema / properties / schemas / properties / human_docs
        Removed value: -{
        -  "description": "Human-readable sf-receipt v0 reference page.",
        -  "format": "uri",
        -  "type": "string"
        -}
      • removedOutput schema / properties / schemas / properties / profile
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / schemas / properties / schema_uri
        Removed value: -{
        -  "description": "Immutable canonical JSON Schema URL for sf-receipt v0.",
        -  "format": "uri",
        -  "type": "string"
        -}
      • removedOutput schema / properties / schemas / properties / version
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / schemas / required
        Removed value: -[
        -  "profile",
        -  "version",
        -  "schema_uri",
        -  "context_uri",
        -  "human_docs"
        -]
      • addedOutput schema / properties / tools / description
        Added value: +"Routing table: name, when_to_use, required_args, returns."
      • changedOutput schema / properties / tools / items / additionalProperties
        Previous value: -falseNew value: +true
      • removedOutput schema / properties / tools / items / properties / name
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / tools / items / properties / required_args
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / tools / items / properties / returns
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / tools / items / properties / when_to_use
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / tools / items / required
        Removed value: -[
        -  "name",
        -  "when_to_use",
        -  "required_args",
        -  "returns"
        -]
      • addedOutput schema / properties / vocabulary / description
        Added value: +"term, meaning."
      • addedOutput schema / properties / vocabulary / items / $ref
        Added value: +"#/properties/tools/items"
      • removedOutput schema / properties / vocabulary / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / vocabulary / items / properties
        Removed value: -{
        -  "meaning": {
        -    "type": "string"
        -  },
        -  "term": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / vocabulary / items / required
        Removed value: -[
        -  "term",
        -  "meaning"
        -]
      • removedOutput schema / properties / vocabulary / items / type
        Removed value: -"object"
    • Changedverify_appraised_value23 fields changed
      • changedOutput schema / properties / claim / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / claim / description
        Previous value: -"Claim-adjudication detail."New value: +"Adjudication: claimed_value, tolerance_*, within_tolerance, rationale."
      • removedOutput schema / properties / claim / properties / abs_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / basis
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/properties/claim/properties/claimed_value/anyOf/0"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_basis
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_unit
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": [
        -        "number",
        -        "string"
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value_date
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / rationale
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / claim / properties / rel_bps_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_used
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / within_tolerance
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / required
        Removed value: -[
        -  "claimed_value",
        -  "tolerance_kind",
        -  "tolerance_used",
        -  "abs_diff",
        -  "rel_bps_diff",
        -  "within_tolerance",
        -  "basis",
        -  "rationale"
        -]
      • changedOutput schema / properties / resolved_deal / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / resolved_deal / description
        Added value: +"Deal resolution: matched, id, cik, candidates."
      • removedOutput schema / properties / resolved_deal / properties / candidates
        Removed value: -{
        -  "description": "Suggested deal ids when unmatched/ambiguous.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resolved_deal / properties / cik
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / matched
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_deal / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / resolved_deal / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "id",
        -  "name",
        -  "cik",
        -  "candidates"
        -]
    • Changedverify_building_size23 fields changed
      • changedOutput schema / properties / claim / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / claim / description
        Previous value: -"Claim-adjudication detail."New value: +"Adjudication: claimed_value, tolerance_*, within_tolerance, rationale."
      • removedOutput schema / properties / claim / properties / abs_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / basis
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/properties/claim/properties/claimed_value/anyOf/0"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_basis
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_unit
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": [
        -        "number",
        -        "string"
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value_date
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / rationale
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / claim / properties / rel_bps_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_used
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / within_tolerance
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / required
        Removed value: -[
        -  "claimed_value",
        -  "tolerance_kind",
        -  "tolerance_used",
        -  "abs_diff",
        -  "rel_bps_diff",
        -  "within_tolerance",
        -  "basis",
        -  "rationale"
        -]
      • changedOutput schema / properties / resolved_deal / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / resolved_deal / description
        Added value: +"Deal resolution: matched, id, cik, candidates."
      • removedOutput schema / properties / resolved_deal / properties / candidates
        Removed value: -{
        -  "description": "Suggested deal ids when unmatched/ambiguous.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resolved_deal / properties / cik
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / matched
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_deal / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / resolved_deal / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "id",
        -  "name",
        -  "cik",
        -  "candidates"
        -]
    • Changedverify_claims36 fields changed
      • addedOutput schema / properties / claims / description
        Added value: +"Per claim: normalized_claim, citations, notes, recommended_language."
      • changedOutput schema / properties / claims / items / additionalProperties
        Previous value: -falseNew value: +true
      • removedOutput schema / properties / claims / items / properties / citations
        Removed value: -{
        -  "items": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as_of": {
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      },
        -      "party": {
        -        "type": "string"
        -      },
        -      "receipt_sha256": {
        -        "type": "string"
        -      },
        -      "url": {
        -        "type": "string"
        -      },
        -      "value": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/properties/claims/items/properties/normalized_claim/properties/claimed_value"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "required": [
        -      "party",
        -      "value",
        -      "as_of",
        -      "label",
        -      "receipt_sha256",
        -      "url"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / claims / items / properties / normalized_claim
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "cik": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "claimed_value": {
        -      "type": [
        -        "number",
        -        "string"
        -      ]
        -    },
        -    "deal_ref": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "field": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "grain": {
        -      "enum": [
        -        "loan",
        -        "deal",
        -        "servicer",
        -        "status_count"
        -      ],
        -      "type": "string"
        -    },
        -    "loan_id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "stated_precision": {
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    },
        -    "status_key": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "unit": {
        -      "anyOf": [
        -        {
        -          "enum": [
        -            "usd",
        -            "percent",
        -            "count",
        -            "name"
        -          ],
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    }
        -  },
        -  "required": [
        -    "deal_ref",
        -    "cik",
        -    "grain",
        -    "field",
        -    "loan_id",
        -    "status_key",
        -    "claimed_value",
        -    "unit",
        -    "stated_precision"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / claims / items / properties / notes
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / claims / items / properties / receipt_conflict
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "abs_diff": {
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    },
        -    "parties": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "party": {
        -            "type": "string"
        -          },
        -          "value": {
        -            "anyOf": [
        -              {
        -                "$ref": "#/properties/claims/items/properties/normalized_claim/properties/claimed_value"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          }
        -        },
        -        "required": [
        -          "party",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "rel_bps_diff": {
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "abs_diff",
        -    "rel_bps_diff",
        -    "parties"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / claims / items / properties / recommended_language
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / claims / items / properties / span
        Removed value: -{
        -  "items": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "number"
        -    }
        -  ],
        -  "maxItems": 2,
        -  "minItems": 2,
        -  "type": "array"
        -}
      • changedOutput schema / properties / claims / items / required
        Previous value: -[
        -  "claim_id",
        -  "claim_text",
        -  "span",
        -  "normalized_claim",
        -  "status",
        -  "confidence",
        -  "citations",
        -  "notes"
        -]New value: +[
        +  "claim_id",
        +  "claim_text",
        +  "status",
        +  "confidence"
        +]
      • changedOutput schema / properties / material_issues / items / additionalProperties
        Previous value: -falseNew value: +true
      • removedOutput schema / properties / material_issues / items / properties / abs_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / material_issues / items / properties / claim_text
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / material_issues / items / properties / rel_bps_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / material_issues / items / properties / status
        Removed value: -{
        -  "enum": [
        -    "verified",
        -    "contradicted",
        -    "insufficient_evidence",
        -    "out_of_scope"
        -  ],
        -  "type": "string"
        -}
      • removedOutput schema / properties / material_issues / items / properties / summary
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / material_issues / items / required
        Removed value: -[
        -  "claim_text",
        -  "status",
        -  "abs_diff",
        -  "rel_bps_diff",
        -  "summary"
        -]
      • addedOutput schema / properties / search_backend / $ref
        Added value: +"#/properties/material_issues/items"
      • removedOutput schema / properties / search_backend / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / search_backend / description
        Removed value: -"Provenance of the search backend that answered this find_deals call (bd-36t)."
      • removedOutput schema / properties / search_backend / properties
        Removed value: -{
        -  "backend": {
        -    "description": "Which search backend produced this result.",
        -    "enum": [
        -      "canon-search-index",
        -      "builtin"
        -    ],
        -    "type": "string"
        -  },
        -  "content_hash": {
        -    "description": "Content hash (blake3:…) of the index artifact; null on the builtin scorer.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "registry_version": {
        -    "description": "Canon deal-registry version from the index artifact's metadata; null on the builtin scorer.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / search_backend / required
        Removed value: -[
        -  "backend",
        -  "registry_version",
        -  "content_hash"
        -]
      • removedOutput schema / properties / search_backend / type
        Removed value: -"object"
      • changedOutput schema / properties / summary / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / summary / description
        Added value: +"Counts: total, verified, contradicted, insufficient_evidence, out_of_scope."
      • removedOutput schema / properties / summary / properties / contradicted
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / summary / properties / insufficient_evidence
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / summary / properties / out_of_scope
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / summary / properties / total
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / summary / properties / verified
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / summary / required
        Removed value: -[
        -  "total",
        -  "verified",
        -  "contradicted",
        -  "insufficient_evidence",
        -  "out_of_scope"
        -]
      • addedOutput schema / properties / unchecked_spans / description
        Added value: +"Text no grammar rule could check, with reason and hint."
      • addedOutput schema / properties / unchecked_spans / items / $ref
        Added value: +"#/properties/material_issues/items"
      • removedOutput schema / properties / unchecked_spans / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / unchecked_spans / items / properties
        Removed value: -{
        -  "hint": {
        -    "description": "Routing pointer (bd-2f0): set only when nothing parsed and the text asks rather than asserts.",
        -    "type": "string"
        -  },
        -  "reason": {
        -    "enum": [
        -      "no_grammar_match",
        -      "unsupported_field"
        -    ],
        -    "type": "string"
        -  },
        -  "span": {
        -    "items": [
        -      {
        -        "type": "number"
        -      },
        -      {
        -        "type": "number"
        -      }
        -    ],
        -    "maxItems": 2,
        -    "minItems": 2,
        -    "type": "array"
        -  },
        -  "text": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / unchecked_spans / items / required
        Removed value: -[
        -  "text",
        -  "span",
        -  "reason"
        -]
      • removedOutput schema / properties / unchecked_spans / items / type
        Removed value: -"object"
    • Changedverify_counterparty23 fields changed
      • changedOutput schema / properties / claim / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / claim / description
        Previous value: -"Claim-adjudication detail."New value: +"Adjudication: claimed_value, tolerance_*, within_tolerance, rationale."
      • removedOutput schema / properties / claim / properties / abs_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / basis
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/properties/claim/properties/claimed_value/anyOf/0"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_basis
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_unit
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": [
        -        "number",
        -        "string"
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value_date
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / rationale
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / claim / properties / rel_bps_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_used
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / within_tolerance
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / required
        Removed value: -[
        -  "claimed_value",
        -  "tolerance_kind",
        -  "tolerance_used",
        -  "abs_diff",
        -  "rel_bps_diff",
        -  "within_tolerance",
        -  "basis",
        -  "rationale"
        -]
      • changedOutput schema / properties / resolved_deal / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / resolved_deal / description
        Added value: +"Deal resolution: matched, id, cik, candidates."
      • removedOutput schema / properties / resolved_deal / properties / candidates
        Removed value: -{
        -  "description": "Suggested deal ids when unmatched/ambiguous.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resolved_deal / properties / cik
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / matched
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_deal / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / resolved_deal / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "id",
        -  "name",
        -  "cik",
        -  "candidates"
        -]
    • Changedverify_deal_field24 fields changed
      • changedInput schema / properties / field / description
        Previous value: -"The deal-grain (pool) field to verify. One of:\n• beginning_scheduled_collateral_balance — Deal-level (pool) beginning SCHEDULED collateral balance for the period: the sum across every loan of its scheduled loan balance at the start of the period. A COLLATERAL (loan-pool) balance — NOT the outstanding bond/certificate balance. Reconciled as the ABS-EE loan-tape rollup (SUM of loan beginning scheduled balances) vs the 10-D trustee's directly-reported deal fact.\n• ending_scheduled_collateral_balance — Deal-level (pool) ending SCHEDULED collateral balance for the period: the sum across every loan of its ending scheduled (contractually amortized) balance. The SCHEDULED basis — distinct from the ACTUAL balance — and a COLLATERAL (loan-pool) balance, NOT the outstanding bond/certificate balance. ABS-EE rollup vs the 10-D directly-reported deal fact.\n• ending_actual_collateral_balance — Deal-level (pool) ending ACTUAL collateral balance for the period: the sum across every loan of its ending actual (as-paid, reflecting prepayments/shortfalls) balance. The ACTUAL basis — distinct from the SCHEDULED balance — and a COLLATERAL (loan-pool) balance, NOT the outstanding bond/certificate balance. ABS-EE rollup vs the 10-D directly-reported deal fact.\n• total_principal_collected — Deal-level (pool) total principal collected for the period: scheduled amortization PLUS unscheduled principal (curtailments, prepayments, payoffs), summed across the pool. Reconciled as the ABS-EE rollup (SUM scheduled + SUM unscheduled) against the 10-D 'Scheduled Principal Collections' + 'Unscheduled Principal Collections' facts (br-m04: the 10-D scheduled column commingles both, so only the composite total reconciles 1:1). A collateral cash-flow, NOT a bond principal distribution."New value: +"The deal-grain (pool) field to verify. One of (full definitions: coverage, or the receipt's field_definition):\n• beginning_scheduled_collateral_balance — pool SCHEDULED collateral balance at period start (not bond balance)\n• ending_scheduled_collateral_balance — pool SCHEDULED collateral balance at period end (not bond balance)\n• ending_actual_collateral_balance — pool ACTUAL (as-paid) collateral balance at period end\n• total_principal_collected — pool principal collected: scheduled plus unscheduled"
      • changedOutput schema / properties / claim / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / claim / description
        Previous value: -"Claim-adjudication detail."New value: +"Adjudication: claimed_value, tolerance_*, within_tolerance, rationale."
      • removedOutput schema / properties / claim / properties / abs_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / basis
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/properties/claim/properties/claimed_value/anyOf/0"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_basis
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_unit
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": [
        -        "number",
        -        "string"
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value_date
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / rationale
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / claim / properties / rel_bps_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_used
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / within_tolerance
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / required
        Removed value: -[
        -  "claimed_value",
        -  "tolerance_kind",
        -  "tolerance_used",
        -  "abs_diff",
        -  "rel_bps_diff",
        -  "within_tolerance",
        -  "basis",
        -  "rationale"
        -]
      • changedOutput schema / properties / resolved_deal / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / resolved_deal / description
        Added value: +"Deal resolution: matched, id, cik, candidates."
      • removedOutput schema / properties / resolved_deal / properties / candidates
        Removed value: -{
        -  "description": "Suggested deal ids when unmatched/ambiguous.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resolved_deal / properties / cik
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / matched
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_deal / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / resolved_deal / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "id",
        -  "name",
        -  "cik",
        -  "candidates"
        -]
    • Changedverify_ending_balance23 fields changed
      • changedOutput schema / properties / claim / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / claim / description
        Previous value: -"Claim-adjudication detail."New value: +"Adjudication: claimed_value, tolerance_*, within_tolerance, rationale."
      • removedOutput schema / properties / claim / properties / abs_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / basis
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/properties/claim/properties/claimed_value/anyOf/0"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_basis
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_unit
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": [
        -        "number",
        -        "string"
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value_date
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / rationale
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / claim / properties / rel_bps_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_used
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / within_tolerance
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / required
        Removed value: -[
        -  "claimed_value",
        -  "tolerance_kind",
        -  "tolerance_used",
        -  "abs_diff",
        -  "rel_bps_diff",
        -  "within_tolerance",
        -  "basis",
        -  "rationale"
        -]
      • changedOutput schema / properties / resolved_deal / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / resolved_deal / description
        Added value: +"Deal resolution: matched, id, cik, candidates."
      • removedOutput schema / properties / resolved_deal / properties / candidates
        Removed value: -{
        -  "description": "Suggested deal ids when unmatched/ambiguous.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resolved_deal / properties / cik
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / matched
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_deal / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / resolved_deal / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "id",
        -  "name",
        -  "cik",
        -  "candidates"
        -]
    • Changedverify_fund_holding_coupon20 fields changed
      • changedOutput schema / properties / claim / additionalProperties
        Previous value: -falseNew value: +true
      • removedOutput schema / properties / claim / properties / abs_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / basis
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/properties/claim/properties/claimed_value/anyOf/0"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": [
        -        "number",
        -        "string"
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / rationale
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / claim / properties / rel_bps_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_used
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / within_tolerance
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / required
        Removed value: -[
        -  "claimed_value",
        -  "tolerance_kind",
        -  "tolerance_used",
        -  "abs_diff",
        -  "rel_bps_diff",
        -  "within_tolerance",
        -  "basis",
        -  "rationale"
        -]
      • changedOutput schema / properties / resolved_security / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / resolved_security / description
        Added value: +"Security resolution: matched, security_id, hard_identifier, candidates."
      • removedOutput schema / properties / resolved_security / properties / candidates
        Removed value: -{
        -  "description": "Candidate security ids when the lookup cannot resolve exactly.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resolved_security / properties / hard_identifier
        Removed value: -{
        -  "description": "False for ticker-sourced matches; true for ISIN/CUSIP/other identifiers.",
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_security / properties / match_warning
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_security / properties / matched
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_security / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / resolved_security / properties / security_id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_security / properties / security_id_source
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_security / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "security_id",
        -  "security_id_source",
        -  "hard_identifier",
        -  "candidates",
        -  "match_warning"
        -]
    • Changedverify_loan_field24 fields changed
      • changedInput schema / properties / field / description
        Previous value: -"The loan-grain field to verify. One of:\n• beginning_balance — Beginning scheduled balance of this loan's securitized note in THIS trust at the start of the filing period, as reported in the cited 10-D remittance and ABS-EE tape (ABS-EE REPORTPERIODBEGINNINGSCHEDULELOANBALANCEAMOUNT vs the 10-D beginning-balance column). Trust-level, NOT whole-loan.\n• ending_balance — Ending SCHEDULED balance of this loan's securitized note in THIS trust for the filing period (ABS-EE REPORTPERIODENDSCHEDULEDLOANBALANCEAMOUNT vs the 10-D Mortgage Loan Detail ending-scheduled-balance column). The SCHEDULED basis, NOT the actual (as-paid) balance: the two diverge on distressed loans and the 10-D carries no actual column (br-3n91). Trust-level, NOT the whole-loan balance: pari passu companions, B-notes and mezz outside this trust are excluded.\n• scheduled_principal — Total principal APPLIED to this loan's securitized note in THIS trust for the period — scheduled amortization PLUS unscheduled principal (curtailments, prepayments, payoffs). Named 'scheduled_principal' for ledger stability, but the confirmation ledger composes ABS-EE SCHEDULEDPRINCIPALAMOUNT + UNSCHEDULEDPRINCIPALCOLLECTEDAMOUNT to match the single 10-D 'Scheduled Principal' column, which commingles both (br-m04). Trust-level, NOT whole-loan.\n• scheduled_interest — Scheduled interest on this loan's securitized note in THIS trust for the period, as reported in the cited 10-D remittance and ABS-EE tape (ABS-EE SCHEDULEDINTERESTAMOUNT vs the 10-D scheduled-interest column). Trust-level, NOT whole-loan.\n• note_rate — The current-period note (coupon) interest rate on this loan as reported for the filing period, in percent — NOT the origination rate and NOT the pool weighted-average coupon (WAC). Reconciled as ABS-EE REPORTPERIODINTERESTRATEPERCENTAGE (normalized to percentage scale) vs the 10-D note-rate column to an absolute tolerance of 0.001 percentage points. A rate, not a dollar amount.\n• servicer_advances — Outstanding servicer advances on this loan as reported for the period — specifically the Taxes & Insurance (escrow) advances balance, NOT principal-and-interest (P&I) advances. The confirmation ledger pairs ABS-EE TOTALTAXESINSURANCEADVANCESOUTSTANDINGAMOUNT against the 10-D servicer-advances column (verified dollar-exact against the T&I field); P&I advances are a separate bucket not reconciled here.\n• paid_through_date — The date through which this loan's payments are paid (the 'paid-through date') as reported in the cited 10-D remittance and ABS-EE tape for the period (ABS-EE PAIDTHROUGHDATE vs the 10-D paid-through-date column, matched exactly). A date, not a dollar amount."New value: +"The loan-grain field to verify. One of (full definitions: coverage, or the receipt's field_definition):\n• beginning_balance — trust-level SCHEDULED balance at period start\n• ending_balance — trust-level SCHEDULED balance at period end (not the actual/as-paid balance)\n• scheduled_principal — principal applied: scheduled amortization plus unscheduled (curtailments, payoffs)\n• scheduled_interest — scheduled interest, trust-level\n• note_rate — current note rate in percent (not origination rate, not pool WAC)\n• servicer_advances — Taxes & Insurance (escrow) advances outstanding, not P&I advances\n• paid_through_date — paid-through date (a date; exact match)"
      • changedOutput schema / properties / claim / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / claim / description
        Previous value: -"Claim-adjudication detail."New value: +"Adjudication: claimed_value, tolerance_*, within_tolerance, rationale."
      • removedOutput schema / properties / claim / properties / abs_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / basis
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/properties/claim/properties/claimed_value/anyOf/0"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_basis
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_unit
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": [
        -        "number",
        -        "string"
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / claimed_value_date
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / rationale
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / claim / properties / rel_bps_diff
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / tolerance_used
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / properties / within_tolerance
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim / required
        Removed value: -[
        -  "claimed_value",
        -  "tolerance_kind",
        -  "tolerance_used",
        -  "abs_diff",
        -  "rel_bps_diff",
        -  "within_tolerance",
        -  "basis",
        -  "rationale"
        -]
      • changedOutput schema / properties / resolved_deal / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / resolved_deal / description
        Added value: +"Deal resolution: matched, id, cik, candidates."
      • removedOutput schema / properties / resolved_deal / properties / candidates
        Removed value: -{
        -  "description": "Suggested deal ids when unmatched/ambiguous.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resolved_deal / properties / cik
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / matched
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_deal / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / resolved_deal / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "id",
        -  "name",
        -  "cik",
        -  "candidates"
        -]
    • Changedverify_loan_status_counts17 fields changed
      • removedOutput schema / properties / as_of / description
        Removed value: -"The as-of period the derived counts describe."
      • removedOutput schema / properties / claim_verdict / description
        Removed value: -"Overall: DENY if any claimed status mismatches; UNVERIFIED if uncovered; else CONFIRM."
      • removedOutput schema / properties / message / description
        Removed value: -"Human-readable summary."
      • changedOutput schema / properties / resolved_deal / additionalProperties
        Previous value: -falseNew value: +true
      • removedOutput schema / properties / resolved_deal / properties / candidates
        Removed value: -{
        -  "description": "Suggested deal ids when unmatched/ambiguous.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resolved_deal / properties / cik
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / matched
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resolved_deal / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / resolved_deal / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / resolved_deal / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "id",
        -  "name",
        -  "cik",
        -  "candidates"
        -]
      • changedOutput schema / properties / statuses / description
        Previous value: -"One entry per loan-status, each with its DERIVED receipt."New value: +"Per status: status, grain, count, claimed, claim_verdict, receipt."
      • addedOutput schema / properties / statuses / items / $ref
        Added value: +"#/properties/resolved_deal"
      • removedOutput schema / properties / statuses / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / statuses / items / properties
        Removed value: -{
        -  "claim_verdict": {
        -    "description": "Exact-match adjudication of `claimed` vs the derived `count` (CONFIRM/DENY/UNVERIFIED).",
        -    "enum": [
        -      "CONFIRM",
        -      "DENY",
        -      "CONFLICT",
        -      "UNVERIFIED"
        -    ],
        -    "type": "string"
        -  },
        -  "claimed": {
        -    "description": "The caller's claimed count for this status, if any.",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "count": {
        -    "description": "The DERIVED count for this status (null when uncovered).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "grain": {
        -    "description": "servicing_status (in_special_servicing) is CURRENT and overlaps active; resolution_reason is why a loan LEFT the pool.",
        -    "enum": [
        -      "activity_status",
        -      "servicing_status",
        -      "resolution_reason"
        -    ],
        -    "type": "string"
        -  },
        -  "receipt": {
        -    "additionalProperties": true,
        -    "description": "The per-status DERIVED_UNCONTESTED sf-receipt (derivation citation + derived_from). Canonical JSON Schema: https://cmdrvl.com/schemas/sf-receipt/v0/schema.json",
        -    "properties": {},
        -    "type": "object"
        -  },
        -  "status": {
        -    "description": "Loan-status key (active, defeased, in_special_servicing, …).",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / statuses / items / required
        Removed value: -[
        -  "status",
        -  "grain",
        -  "count",
        -  "claimed",
        -  "claim_verdict",
        -  "receipt"
        -]
      • removedOutput schema / properties / statuses / items / type
        Removed value: -"object"
  2. 3 tool updates
    • Changedcoverage2 fields changed
      • addedOutput schema / properties / counterparty_roles
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "deals": {
        +        "type": "number"
        +      },
        +      "role": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "role",
        +      "deals"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "deals",
        -  "loans",
        -  "bonds",
        -  "securities",
        -  "fields",
        -  "temporal",
        -  "confirmation_breakdown",
        -  "confirmation_statistics",
        -  "confirmation_breakdown_note",
        -  "limits",
        -  "contact",
        -  "coverage_source",
        -  "generated_at"
        -]New value: +[
        +  "deals",
        +  "loans",
        +  "bonds",
        +  "securities",
        +  "fields",
        +  "temporal",
        +  "counterparty_roles",
        +  "confirmation_breakdown",
        +  "confirmation_statistics",
        +  "confirmation_breakdown_note",
        +  "limits",
        +  "contact",
        +  "coverage_source",
        +  "generated_at"
        +]
    • Addedverify_counterparty
    • Changedverify_servicer10 fields changed
      • removedInput schema / properties / claimed_servicer / description
        Removed value: -"Optional: a servicer name to adjudicate against the roster value (normalized comparison)."
      • changedInput schema / properties / deal / description
        Previous value: -"Deal name or alias, e.g. 'WFCM 2020-C58'."New value: +"Deal name or alias."
      • removedInput schema / properties / role / description
        Removed value: -"The servicer role. Default special_servicer. • master_servicer — The deal's MASTER servicer (the lead servicer that services the pool day-to-day), as named in the cited 10-D counterparties/servicer roster exhibit (role_normalized='master_servicer' in wrgl_edgar_cmbs_confirmation__servicer_roster / stg_edgar_cmbs_10d__counterparties). DUAL-CONFIRMED when the ABS-EE loan tape's per-loan primaryServicerName matches this roster master (STATUS=CONFIRMED in the servicer-roster ledger); the string comparison is the ledger's own deterministic name normalization (SOURCE_*_NORM: strip legal suffixes/punctuation, upper-case), NEVER fuzzy matching. NOT the special servicer and NOT a sub-servicer. Role attribution comes from matching the roster exhibit, so a servicer transfer the roster snapshot has not yet caught surfaces as CONFLICT/SINGLE_SOURCE, not a silent confirm.\n• special_servicer — The deal's SPECIAL servicer (the party that takes over workout/resolution of loans transferred to special servicing), as named in the cited 10-D counterparties/servicer roster exhibit (role_normalized='special_servicer'). This is a SINGLE-SOURCE roster fact: the ABS-EE loan tape carries no special-servicer field, so there is no independent second source to confirm it against (confirmation SINGLE_SOURCE, reporting party SEC:10-D). It names WHO the deal's special servicer is; it does NOT assert that any particular loan is currently in special servicing (br-3ia: never infer special-servicing status from the tape's primary-servicer name)."
      • removedOutput schema / properties / as_of
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / claim
        Removed value: -{
        -  "additionalProperties": false,
        -  "description": "Claim-adjudication detail.",
        -  "properties": {
        -    "abs_diff": {
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    },
        -    "basis": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/properties/claim/properties/claimed_value/anyOf/0"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "claimed_basis": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "claimed_unit": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "claimed_value": {
        -      "anyOf": [
        -        {
        -          "type": [
        -            "number",
        -            "string"
        -          ]
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "claimed_value_date": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "rationale": {
        -      "type": "string"
        -    },
        -    "rel_bps_diff": {
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    },
        -    "tolerance_kind": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "tolerance_used": {
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    },
        -    "within_tolerance": {
        -      "type": [
        -        "boolean",
        -        "null"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "claimed_value",
        -    "tolerance_kind",
        -    "tolerance_used",
        -    "abs_diff",
        -    "rel_bps_diff",
        -    "within_tolerance",
        -    "basis",
        -    "rationale"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / claim_verdict / description
        Removed value: -"Caller-claim verdict; DENY only here."
      • removedOutput schema / properties / claim_verdict / enum
        Removed value: -[
        -  "CONFIRM",
        -  "DENY",
        -  "CONFLICT",
        -  "UNVERIFIED"
        -]
      • removedOutput schema / properties / receipt
        Removed value: -{
        -  "additionalProperties": true,
        -  "description": "sf-receipt 0.3; schema https://cmdrvl.com/schemas/sf-receipt/v0/schema.json; context https://cmdrvl.com/contexts/obs-receipt/v0/context.json",
        -  "properties": {},
        -  "type": "object"
        -}
      • removedOutput schema / properties / resolved_deal
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "candidates": {
        -      "description": "Suggested deal ids when unmatched/ambiguous.",
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "cik": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "matched": {
        -      "type": "boolean"
        -    },
        -    "name": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "query": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "query",
        -    "matched",
        -    "id",
        -    "name",
        -    "cik",
        -    "candidates"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "claim_verdict",
        -  "claim",
        -  "receipt",
        -  "resolved_deal",
        -  "as_of",
        -  "message"
        -]New value: +[
        +  "claim_verdict",
        +  "message"
        +]
  3. 13 tool updates
    • First observedcoverage
    • First observedcovered_deals
    • First observedfind_deals
    • First observedquickstart
    • First observedverify_appraised_value
    • First observedverify_building_size
    • First observedverify_claims
    • First observedverify_deal_field
    • First observedverify_ending_balance
    • First observedverify_fund_holding_coupon
    • First observedverify_loan_field
    • First observedverify_loan_status_counts
    • First observedverify_servicer

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to answer healthcare REIT portfolio questions with deterministic, provable answers grounded in Omega Healthcare 10-K filings and CMS nursing home data, including status, caveats, and provenance.
    9
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    Verifies claims with verdicts (supported/disputed/unverifiable), confidence scores, and cited sources by cross-referencing FoundryNet Data Network and web search.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.