Check claims against current public CMBS filings and NPORT-P coupons, with citations.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Coverage facts: CMBS universe denominators, field inventory with definitions, current-only temporal scope, bonds=0 planned, and denominator-safe confirmation stats. Agreement/conflict rates use dual-sourced receipts only; single-source share is separate. Call before interpreting UNVERIFIED. Contact [email protected] for deeper coverage/history/bonds/entitlements.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http receipts https://receipts.cmdrvl.com/mcp
Coverage facts: CMBS universe denominators, field inventory with definitions, current-only temporal scope, bonds=0 planned, and denominator-safe confirmation stats. Agreement/conflict rates use dual-sourced receipts only; single-source share is separate. Call before interpreting UNVERIFIED. Contact [email protected] for deeper coverage/history/bonds/entitlements.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List the deals this server can verify (Phase 0 scope) with their CIKs, aliases, and available filing periods. Call this when you need the full covered set; use find_deals for focused lookup.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Search covered deals by id, trust name, CIK, aliases, shelf, vintage, or deal_ref. An EXACT query (a deal id, short name, alias, or CIK that exact-matches the canon deal registry) returns a SINGLE dominant result — proceed without further disambiguation. Fuzzy queries return a small ranked recall set. Returns compact candidate metadata, match reasons/provenance, available periods, a suggested next verification call, and the search backend used. Use this for routine disambiguation; call covered_deals only when the full covered universe is needed.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum ranked candidates to return (default 5; 10 on the builtin fallback; max 25). |
| query* | string | Deal name, ticker-style id, CIK, alias, shelf/vintage fragment, or deal_ref to search. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Maximum ranked candidates to return (default 5; 10 on the builtin fallback; max 25)."
},
"query": {
"type": "string",
"description": "Deal name, ticker-style id, CIK, alias, shelf/vintage fragment, or deal_ref to search."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| detail | string | Default summary. Use routing for tool selection guidance, examples for more call examples. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"detail": {
"enum": [
"summary",
"routing",
"examples"
],
"type": "string",
"description": "Default summary. Use routing for tool selection guidance, examples for more call examples."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| deal* | string | Deal name or alias, e.g. 'WFCM 2020-C58'. |
| loan_id* | string | Loan / entity id within the deal, e.g. '25'. |
| claimed_basis | string | Optional valuation basis. |
| claimed_value | number | string | Claim to receipt. Required. |
| claimed_value_date | string | Optional valuation date. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal",
"loan_id"
],
"properties": {
"deal": {
"type": "string",
"description": "Deal name or alias, e.g. 'WFCM 2020-C58'."
},
"loan_id": {
"type": "string",
"description": "Loan / entity id within the deal, e.g. '25'."
},
"claimed_basis": {
"type": "string",
"description": "Optional valuation basis."
},
"claimed_value": {
"type": [
"number",
"string"
],
"description": "Claim to receipt. Required."
},
"claimed_value_date": {
"type": "string",
"description": "Optional valuation date."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| deal* | string | Deal name or alias, e.g. 'WFCM 2020-C58'. |
| loan_id* | string | Loan / entity id within the deal, e.g. '25'. |
| claimed_unit | string | Optional unit, e.g. square_feet or units. |
| claimed_value | number | string | Claim to receipt. Required. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal",
"loan_id"
],
"properties": {
"deal": {
"type": "string",
"description": "Deal name or alias, e.g. 'WFCM 2020-C58'."
},
"loan_id": {
"type": "string",
"description": "Loan / entity id within the deal, e.g. '25'."
},
"claimed_unit": {
"type": "string",
"description": "Optional unit, e.g. square_feet or units."
},
"claimed_value": {
"type": [
"number",
"string"
],
"description": "Claim to receipt. Required."
}
},
"additionalProperties": false
}Bulk claim-set verifier: messy text in, structured evidence + disagreement out. 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. Extraction is a DETERMINISTIC rule-based grammar — no model judgment. Checkable (four pattern families): (1) loan fields ('loan 25 ending balance is $9.4M'), (2) deal/pool fields, (3) servicer identity, (4) loan-status counts ('3 loans specially serviced'). Unmapped text is ENUMERATED in unchecked_spans, never silently dropped. EXACT deal references (id, alias, or CIK) adjudicate best — ranked/fuzzy resolution is never used. Statuses are ANSWERS (verified / contradicted / insufficient_evidence / out_of_scope); isError only on system failure. Each claim carries a stable claim_id, receipt-backed citations (label + receipt_sha256 + permalink URL), and evidence-calibrated confidence.
| Argument | Type | Description |
|---|---|---|
| text* | string | The paragraph / memo excerpt to check. |
| deal_hint | string | Fallback deal context when a sentence names no deal (exact resolution only). |
| period_hint | string | YYYY-MM annotation only — latest-only server; a mismatch is noted and drops confidence one tier. |
| risk_tolerance | string | Default normal = max(ledger tolerance, stated precision); strict = ledger only; lenient = 2x stated precision. Counts and names are always exact. |
Verify a DEAL-GRAIN pool-level dual-sourced field against the primary SEC filings — the ABS-EE loan-tape rollup (SUM across the pool) vs the 10-D trustee's directly-reported deal fact. These are COLLATERAL (loan-pool) balances/flows, NOT outstanding bond/certificate balances, and they distinguish SCHEDULED from ACTUAL. No loan_id (the subject is the whole deal; loan_id is null). Always serves the CURRENT period held for that deal/field (the deal-grain 10-D snapshot can trail the loan tape). Returns `claim_verdict` + an sf-receipt Observation Receipt (confirmation + bound definition + value_type). Unknown deal / field returns UNVERIFIED (honest-absent).
| Argument | Type | Description |
|---|---|---|
| deal* | string | Deal name or alias, e.g. 'WFCM 2020-C58'. |
| field* | string | The deal-grain (pool) field to verify. One of: • 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. • 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. • 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. • 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. |
Thin alias for verify_loan_field(field='ending_balance'): verify a CMBS loan's TRUST-LEVEL securitized ending balance — the balance of this loan's note in THIS trust as reported in the 10-D and ABS-EE. NOT the whole-loan balance. Always serves the CURRENT balance; the receipt STAMPS its as-of. Returns `claim_verdict` + an sf-receipt Observation Receipt. Prefer verify_loan_field for other fields; this alias is kept for compatibility.
| Argument | Type | Description |
|---|---|---|
| deal* | string | Deal name or alias, e.g. 'WFCM 2020-C58' or 'Wells Fargo 2020-C58'. |
| loan_id* | string | Loan / entity id within the deal, e.g. '25'. |
| claimed_value | number | string | Claim to receipt. Required: no claim = refusal, no value. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal",
"loan_id"
],
"properties": {
"deal": {
"type": "string",
"description": "Deal name or alias, e.g. 'WFCM 2020-C58' or 'Wells Fargo 2020-C58'."
},
"loan_id": {
"type": "string",
"description": "Loan / entity id within the deal, e.g. '25'."
},
"claimed_value": {
"type": [
"number",
"string"
],
"description": "Claim to receipt. Required: no claim = refusal, no value."
}
},
"additionalProperties": false
}Verify the NPORT cross-filer annualized coupon rate (`annualized_rate`) for one security identifier. The receipt is security-grain and N-source: citations are peer NPORT-P filings by registrant CIK, including dissenting parties and SEC accessions. Serving is CURRENT-ONLY: each public receipt is the latest NPORT period exported for that security. `security_id_source` may constrain the match to isin, cusip, other, ticker, or any; ticker-sourced matches join but are not unique, so set `require_hard_identifier=true` when a claim needs ISIN/CUSIP/other identity.
| Argument | Type | Description |
|---|---|---|
| as_of | string | Optional NPORT period guard (YYYY-MM). The public corpus is latest-period-per-security, not historical. |
| identifier* | string | Security identifier to look up: ISIN, CUSIP, other identifier, or ticker. |
| claimed_value | number | string | Claim to receipt. Required: no claim = refusal, no value. |
| security_id_source | string | Optional source filter. Default any. Use ticker only for ticker-sourced matches. |
| require_hard_identifier | boolean | When true, exclude ticker-sourced matches because tickers are not unique hard identifiers. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"identifier"
],
"properties": {
"as_of": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}$",
"description": "Optional NPORT period guard (YYYY-MM). The public corpus is latest-period-per-security, not historical."
},
"identifier": {
"type": "string",
"description": "Security identifier to look up: ISIN, CUSIP, other identifier, or ticker."
},
"claimed_value": {
"type": [
"number",
"string"
],
"description": "Claim to receipt. Required: no claim = refusal, no value."
},
"security_id_source": {
"enum": [
"isin",
"cusip",
"other",
"ticker",
"any"
],
"type": "string",
"description": "Optional source filter. Default any. Use ticker only for ticker-sourced matches."
},
"require_hard_identifier": {
"type": "boolean",
"description": "When true, exclude ticker-sourced matches because tickers are not unique hard identifiers."
}
},
"additionalProperties": false
}Verify a LOAN-GRAIN dual-sourced field of a specific CMBS loan against the primary SEC filings (10-D remittance + ABS-EE tape). All values are TRUST-LEVEL — this trust's securitized piece only, NOT the whole-loan balance (pari passu companions, B-notes, mezz outside the trust are excluded). Always serves the CURRENT period — the latest filing held for that deal/field; the receipt STAMPS its as-of. Returns `claim_verdict` (CONFIRM/DENY/CONFLICT/UNVERIFIED — any `claimed_value` adjudicated against the canonical value within the ledger tolerance; date fields match exactly) plus an sf-receipt Observation Receipt whose `confirmation` says whether the two filings agree, and whose subject carries the field's bound definition + value_type. Unknown deal / loan / field returns UNVERIFIED (honest-absent), never a guess.
| Argument | Type | Description |
|---|---|---|
| deal* | string | Deal name or alias, e.g. 'WFCM 2020-C58' or 'Wells Fargo 2020-C58'. |
| field* | string | The loan-grain field to verify. One of: • 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. • 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. • 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. • 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. • 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. • 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. • 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. |
Answer count-claims over loan status ('N in special servicing / paid off / resolved / defeased') for a deal. Returns per-status DERIVED counts, each a DERIVED_UNCONTESTED sf-receipt whose single derivation citation (party CMDRVL:derivation/loan_status_counts@v1, source_class 'derived') carries derived_from[] = the ABS-EE tape accessions consumed. These are COMPUTED classifications (int_cmbs_confirmation__asset_activity over the ABS-EE loan tape), not values any filing reports — so confirmation is DERIVED_UNCONTESTED (single lineage) and stage caps at 'cited'. THREE status grains, never mixed: activity (active / resolved_paid_off / defeased); servicing — in_special_servicing, loans CURRENTLY with the special servicer (CREFC: transfer date set, no later master return) — the count answering 'N in special servicing'. It OVERLAPS active; never sum them. And resolution reason, for loans that already LEFT the pool (resolved_via_special_servicing and the other payoff reasons) — subsets of resolved_paid_off, NOT current counts. Pass `claimed` to adjudicate exact counts per status (CONFIRM on exact match, DENY otherwise). Unknown / uncovered deal returns UNVERIFIED.
| Argument | Type | Description |
|---|---|---|
| deal* | string | Deal name or alias, e.g. 'WFCM 2020-C58'. |
| claimed | object | Optional claimed per-status counts, e.g. {"in_special_servicing": 10, "defeased": 2}. Each is adjudicated by EXACT match against the derived count. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal"
],
"properties": {
"deal": {
"type": "string",
"description": "Deal name or alias, e.g. 'WFCM 2020-C58'."
},
"claimed": {
"type": "object",
"description": "Optional claimed per-status counts, e.g. {\"in_special_servicing\": 10, \"defeased\": 2}. Each is adjudicated by EXACT match against the derived count.",
"propertyNames": {
"enum": [
"active",
"resolved_paid_off",
"defeased",
"in_special_servicing",
"resolved_via_special_servicing",
"voluntary_prepayment",
"payoff_unclassified",
"liquidated_loss",
"matured_balloon",
"repurchased"
]
},
"additionalProperties": {
"type": "number"
}
}
},
"additionalProperties": false
}Answer 'who is the <role> servicer on deal X' against the SEC servicer roster. Deal-grain, STRING-valued. role defaults to special_servicer (the most-asked question; the 10-D roster names it for as many deals as the master). BOTH roles are SINGLE-SOURCE roster facts (SINGLE_SOURCE, 1 citation: SEC:10-D). master_servicer is NOT confirmed against the ABS-EE tape: the tape names the PRIMARY servicer, and primary is not master (delegation/transfer), so that pair measures servicing structure, not accuracy — it rides the receipt data_note as a delegation signal. String comparison is the ledger's OWN name normalization (strip legal suffixes/punctuation, upper-case), NEVER fuzzy matching. Pass claimed_servicer to adjudicate a name (CONFIRM/DENY under that normalization). It names WHO the servicer is; it does NOT assert any loan is currently in special servicing. Unknown deal / role-not-on-roster returns UNVERIFIED (honest-absent).
| Argument | Type | Description |
|---|---|---|
| deal* | string | Deal name or alias, e.g. 'WFCM 2020-C58'. |
| role | string | 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. • 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). |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The paragraph / memo excerpt to check."
},
"deal_hint": {
"type": "string",
"description": "Fallback deal context when a sentence names no deal (exact resolution only)."
},
"period_hint": {
"type": "string",
"description": "YYYY-MM annotation only — latest-only server; a mismatch is noted and drops confidence one tier."
},
"risk_tolerance": {
"enum": [
"strict",
"normal",
"lenient"
],
"type": "string",
"description": "Default normal = max(ledger tolerance, stated precision); strict = ledger only; lenient = 2x stated precision. Counts and names are always exact."
}
},
"additionalProperties": false
}| claimed_value | number | string | Claim to receipt. Required: no claim = refusal, no value. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal",
"field"
],
"properties": {
"deal": {
"type": "string",
"description": "Deal name or alias, e.g. 'WFCM 2020-C58'."
},
"field": {
"enum": [
"beginning_scheduled_collateral_balance",
"ending_scheduled_collateral_balance",
"ending_actual_collateral_balance",
"total_principal_collected"
],
"type": "string",
"description": "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."
},
"claimed_value": {
"type": [
"number",
"string"
],
"description": "Claim to receipt. Required: no claim = refusal, no value."
}
},
"additionalProperties": false
}| loan_id* | string | Loan / entity id within the deal, e.g. '25'. |
| claimed_value | number | string | Claim to receipt (number, or date string for paid_through_date). Required: no claim = refusal, no value. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal",
"loan_id",
"field"
],
"properties": {
"deal": {
"type": "string",
"description": "Deal name or alias, e.g. 'WFCM 2020-C58' or 'Wells Fargo 2020-C58'."
},
"field": {
"enum": [
"beginning_balance",
"ending_balance",
"scheduled_principal",
"scheduled_interest",
"note_rate",
"servicer_advances",
"paid_through_date"
],
"type": "string",
"description": "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."
},
"loan_id": {
"type": "string",
"description": "Loan / entity id within the deal, e.g. '25'."
},
"claimed_value": {
"type": [
"number",
"string"
],
"description": "Claim to receipt (number, or date string for paid_through_date). Required: no claim = refusal, no value."
}
},
"additionalProperties": false
}| claimed_servicer | string | Optional: a servicer name to adjudicate against the roster value (normalized comparison). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal"
],
"properties": {
"deal": {
"type": "string",
"description": "Deal name or alias, e.g. 'WFCM 2020-C58'."
},
"role": {
"enum": [
"master_servicer",
"special_servicer"
],
"type": "string",
"description": "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)."
},
"claimed_servicer": {
"type": "string",
"description": "Optional: a servicer name to adjudicate against the roster value (normalized comparison)."
}
},
"additionalProperties": false
}