Skip to content

CMD+RVL Receipts

com.cmdrvl/receiptscmdrvl.comstreamable-httpv0.1.0Scanned

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

13 tools: 10 change things and 3 only read.

Tools: 0 delete, 0 irreversible, 10 write, 3 read.
  • Reads private data · 0
  • Reads text others write · 0
  • Can send data out · 0
  • No findings

Anlyon alternative

10 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

13 tools

Changes things 10Claude Code: ask
  • coverageCoverage facts: CMBS universe denominators, field inventory with definitions, current-only temporal scope, bonds=0 planned, and denominator-safe confirmation stats.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote 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 cairn@cmdrvl.com for deeper coverage/history/bonds/entitlements.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • quickstartCompact capability manifest for clients: purpose, workflow, routing table, examples, vocabulary guard, scope caveats, next actions, and contact.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_appraised_valueVerify issuance appraised value (Annex A vs ABS-EE).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_building_sizeVerify issuance building size (Annex A vs ABS-EE).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_claimsBulk claim-set verifier: messy text in, structured evidence + disagreement out.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_deal_fieldVerify 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 f…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_ending_balanceThin 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…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_fund_holding_couponVerify the NPORT cross-filer annualized coupon rate (`annualized_rate`) for one security identifier.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_loan_fieldVerify a LOAN-GRAIN dual-sourced field of a specific CMBS loan against the primary SEC filings (10-D remittance + ABS-EE tape).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_servicerAnswer 'who is the <role> servicer on deal X' against the SEC servicer roster.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
Only reads 3Show 3 read-only tools
  • covered_dealsList the deals this server can verify (Phase 0 scope) with their CIKs, aliases, and available filing periods.No findings

    Why it is in this group

    • The description's first verb is "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • find_dealsSearch covered deals by id, trust name, CIK, aliases, shelf, vintage, or deal_ref.No findings

    Why it is in this group

    • The name "find_deals" says "find": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • verify_loan_status_countsAnswer count-claims over loan status ('N in special servicing / paid off / resolved / defeased') for a deal.No findings

    Why it is in this group

    • The name "verify_loan_status_counts" says "status": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or untrusted-input or outbound.

Reads private data0
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write0
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

No check matched anything in these tool definitions. That is not a safety guarantee.

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 0.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http receipts https://receipts.cmdrvl.com/mcp
claude mcp add --transport http receipts https://receipts.cmdrvl.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__receipts__find_deals",
      "mcp__receipts__covered_deals",
      "mcp__receipts__verify_loan_status_counts"
    ],
    "ask": [
      "mcp__receipts__quickstart",
      "mcp__receipts__coverage",
      "mcp__receipts__verify_loan_field",
      "mcp__receipts__verify_deal_field",
      "mcp__receipts__verify_ending_balance",
      "mcp__receipts__verify_fund_holding_coupon",
      "mcp__receipts__verify_building_size",
      "mcp__receipts__verify_appraised_value",
      "mcp__receipts__verify_servicer",
      "mcp__receipts__verify_claims"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as receipts. Review it before you use it.

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/com.cmdrvl/receipts/verify?hash=79127f736579b062eba0a9f3a6534c3b46c9637ea2777236e24d90c9c70155f9" | jq -e '.changed == false'

Pinned hash 79127f736579, from Nov 2, 2026, 19:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/com.cmdrvl/receipts/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for com.cmdrvl/receipts
[![anlyon.dev](https://anlyon.dev/badge/com.cmdrvl/receipts.svg)](https://anlyon.dev/servers/com.cmdrvl/receipts)

Source: MCP Registry · repository. Synced Nov 2, 2026, 19:17 UTC.