Skip to main content
Glama

CMD+RVL Receipts

Verify a deal's loan-status counts (derived)

verify_loan_status_counts
Read-onlyIdempotent

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.

Input Schema

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

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed17 schema 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. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.