C4C: Mortgage Industry Regulations

Verbatim U.S. mortgage regulatory text with citations and effective dates. Read-only, no sign-in.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
83%
命名品質
98%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~10,104Token(工具定義)
~9.5 KB典型回應大小
顯著的注意力影響(128k 上下文的 7.89%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "mortgage-regs": {
      "url": "https://mcp.claudeforcompliance.com/mcp"
    }
  }
}

遠端端點

https://mcp.claudeforcompliance.com/mcpstreamable-http

它能做什麼

工具清單

工具(10)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢get_obligation(obligation_id, offset, limit, compare_versions)

Returns one obligation's (section's) verbatim regulator text with provenance. Inputs: `obligation_id`; optional `offset`, `limit`, `compare_versions`. `verbatim` holds the text between <<<BEGIN VERBATIM>>> and <<<END VERBATIM>>>. `canonical_citation` is the section's citation in the regulator's style (e.g. "4000.1 II.A.5.d", "B3-3.3-07", "38 U.S.C. 3709(b)"), or null. Paging: at most 24,000 chars per response; `chars_offset` + `chars_returned` is the position within `chars_total`; `next_offset` is the offset of the next page, or null when the section ends in this response; `truncated` means more text follows; `started_mid_section` means text before `chars_offset` is not included; `paging` gives page N of M. `currency` is null or a version/status signal (dual-version, pending, revision-pending, superseded, expired...) with a one-line `headline`. An FHA 4000.1 section HUD's Update 18 revises has two obligations, the in-force text and the revision (`<id>::update-18`); `version` says which this is and `other_version` identifies the other. `compare_versions: true` adds `version_changes`, the sentences Update 18 deletes and adds. `figures` is a best-effort extraction of figures in the text; an empty or incomplete list is not evidence that the text states no figure. `canonical_id`, when set, is the register this one is a same-text copy of.

輸入結構描述

{
  "type": "object",
  "properties": {
    "obligation_id": {
      "type": "string",
      "minLength": 1
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Max chars to return from offset (200-24000; default 24000).",
      "type": "integer",
      "minimum": 1,
      "maximum": 24000
    },
    "compare_versions": {
      "description": "On an FHA section Update 18 revises: also return `version_changes`, the sentences Update 18 deletes and adds (verbatim units with offsets).",
      "type": "boolean"
    }
  },
  "required": [
    "obligation_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "register_id": {
      "description": "The register (source document) id.",
      "type": "string"
    },
    "obligation_id": {
      "description": "The obligation (section) id.",
      "type": "string"
    },
    "authority": {
      "description": "The document and section title as published.",
      "type": "string"
    },
    "section": {
      "description": "The section designation.",
      "type": "string"
    },
    "canonical_citation": {
      "description": "The citation in the regulator's style (e.g. \"4000.1 II.A.5.d\", \"B3-3.3-07\"), or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "source_url": {
      "description": "The regulator's URL for the document.",
      "type": "string"
    },
    "snapshot_id": {
      "description": "The stored source snapshot.",
      "type": "string"
    },
    "fetched_at": {
      "description": "When the source was retrieved.",
      "type": "string"
    },
    "content_hash": {
      "description": "Hash of the stored text.",
      "type": "string"
    },
    "effective_date": {
      "description": "Effective date, or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "status": {
      "description": "E.g. current, superseded, unknown.",
      "type": "string"
    },
    "superseded_by": {
      "description": "The replacing register, or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "coverage_tier": {
      "description": "How completely the corpus holds the document.",
      "type": "string"
    },
    "currency": {
      "description": "null, or a version/status signal {kind, headline, detail, effective_date, mandatory_date, expires_on, as_of, links}; kind e.g. dual-version, pending, revision-pending, superseded, superseded-in-part, modified-by, expired."
    },
    "canonical_id": {
      "description": "Set when this register is a same-text copy of that register.",
      "type": "string"
    },
    "version": {
      "description": "On a dual-version section: {label: in-force | update-18-optional, dates, note}."
    },
    "other_version": {
      "description": "On a dual-version section: the other version ({obligation_id, version, dates})."
    },
    "resolved_from_alias": {
      "description": "The retired obligation id requested; its text is now at obligation_id.",
      "type": "string"
    },
    "alias_note": {
      "description": "Explains resolved_from_alias.",
      "type": "string"
    },
    "chars_offset": {
      "description": "Where this response starts in the section's text.",
      "type": "number"
    },
    "chars_returned": {
      "description": "Characters of text in this response.",
      "type": "number"
    },
    "chars_total": {
      "description": "The section's total length.",
      "type": "number"
    },
    "truncated": {
      "description": "More text follows this response.",
      "type": "boolean"
    },
    "started_mid_section": {
      "description": "Text before chars_offset is not in this response.",
      "type": "boolean"
    },
    "next_offset": {
      "description": "The next page's offset, or null when the section ends here.",
      "type": [
        "number",
        "null"
      ]
    },
    "paging": {
      "description": "Page N of M.",
      "type": "object",
      "properties": {
        "page": {
          "description": "This page's number, or null past the end.",
          "type": [
            "number",
            "null"
          ]
        },
        "pages": {
          "description": "Total pages at this page size.",
          "type": "number"
        },
        "next_offset": {
          "description": "The next page's offset, or null at the end.",
          "type": [
            "number",
            "null"
          ]
        },
        "how": {
          "description": "The server's paging note.",
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "verbatim": {
      "description": "The regulator's exact text, between <<<BEGIN VERBATIM>>> and <<<END VERBATIM>>>.",
      "type": "string"
    },
    "figures": {
      "description": "Best-effort extraction of figures in the text; an empty or incomplete list is not evidence that the text states no figure.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "value": {
            "description": "The figure as a number string, e.g. \"43\", \"50/50\".",
            "type": "string"
          },
          "unit": {
            "description": "percent, percentage_point, currency, duration, ratio, fraction, age, day_of_period, time, count, number or temperature.",
            "type": "string"
          },
          "offset": {
            "description": "Position in this response's text.",
            "type": "number"
          },
          "as_written": {
            "description": "The figure as written, when it differs.",
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "editorial": {
      "description": "Reserved; summary is null (the text is not summarized)."
    },
    "version_changes": {
      "description": "With compare_versions: sentences Update 18 deletes and adds, or {error: \"single_version\"}."
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "get_obligation result."
}
🟢get_reg(register_id)

Returns a manifest of one register (source document): its provenance, `currency` (null or a version/status signal: dual-version, pending revision, superseded, expired...) and its obligations (sections), each with `obligation_id`, section, `canonical_citation`, `chars_total` and `will_truncate` (true when the section exceeds one 24,000-char page). The manifest contains no regulator text. A dual-version section lists both obligations, each with `version` ("in-force" or "update-18-optional") and `other_version`.

輸入結構描述

{
  "type": "object",
  "properties": {
    "register_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "register_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "register_id": {
      "description": "The register id.",
      "type": "string"
    },
    "canonical_id": {
      "description": "Set when this register is a same-text copy of that register.",
      "type": "string"
    },
    "also_at": {
      "description": "Same-text copies of this register.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "authority": {
      "description": "The document title.",
      "type": "string"
    },
    "canonical_citation": {
      "description": "The citation in the regulator's style (e.g. \"4000.1 II.A.5.d\", \"B3-3.3-07\"), or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "effective_date": {
      "description": "Effective date, or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "status": {
      "description": "E.g. current, superseded, unknown.",
      "type": "string"
    },
    "superseded_by": {
      "description": "The replacing register, or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "coverage_tier": {
      "description": "How completely the corpus holds the document.",
      "type": "string"
    },
    "currency": {
      "description": "null, or a version/status signal {kind, headline, detail, effective_date, mandatory_date, expires_on, as_of, links}; kind e.g. dual-version, pending, revision-pending, superseded, superseded-in-part, modified-by, expired."
    },
    "obligations": {
      "description": "The register's obligations (a manifest, not regulator text).",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "obligation_id": {
            "description": "The obligation (section) id.",
            "type": "string"
          },
          "section": {
            "description": "The section designation or title.",
            "type": "string"
          },
          "canonical_citation": {
            "description": "The citation in the regulator's style (e.g. \"4000.1 II.A.5.d\", \"B3-3.3-07\"), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "chars_total": {
            "description": "Length of the section's text in characters.",
            "type": "number"
          },
          "will_truncate": {
            "description": "The section exceeds one 24,000-char page.",
            "type": "boolean"
          },
          "version": {
            "description": "On a dual-version FHA section: \"in-force\" or \"update-18-optional\".",
            "type": "string"
          },
          "other_version": {
            "description": "On a dual-version section: the other version's obligation_id.",
            "type": "string"
          },
          "mandatory_date": {
            "description": "On an Update 18 revision: when it becomes mandatory.",
            "type": "string"
          },
          "currency": {
            "description": "null, or a version/status signal {kind, headline, detail, effective_date, mandatory_date, expires_on, as_of, links}; kind e.g. dual-version, pending, revision-pending, superseded, superseded-in-part, modified-by, expired."
          }
        },
        "additionalProperties": {}
      }
    },
    "obligation_id": {
      "description": "Echoed on error.",
      "type": "string"
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "get_reg result."
}
🟢lookup_citation(citation)

Resolves a regulatory citation (e.g. '4000.1 II.A.8.d', 'B3-4.3-04', 'Freddie Mac Guide 5306.1', '38 U.S.C. 3737', 'M26-7 Chapter 4 Topic 9', 'SBA Notice 5000-872764', 'SOP 50 10 8 B.Ch1.A.2', 'HB-1-3555 11.3') to a `register_id`. Errors: `not_found` (the cite parses but is not in the corpus; `parsed` shows the parse), `ambiguous` (it could mean several registers, listed in `candidates`; no guess is made), `unparsed` (not recognizable as a citation). Near matches are not suggested. A handbook section resolves to the handbook's own register; documents that cite or amend it (e.g. Mortgagee Letters) are listed in `related` and are not the section's text. Identical copies of a section resolve to one register and are listed in `also_at`. A whole-handbook name returns `handbook`, an outline of its parts.

輸入結構描述

{
  "type": "object",
  "properties": {
    "citation": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "citation"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "register_id": {
      "description": "The register the citation resolves to.",
      "type": "string"
    },
    "canonical_id": {
      "description": "Set when the register is a same-text copy of that register.",
      "type": "string"
    },
    "also_at": {
      "description": "Identical copies of the section (other register ids).",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "also_at_note": {
      "description": "Explains also_at.",
      "type": "string"
    },
    "candidates": {
      "description": "On ambiguous: the registers the citation could mean.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "superseded_candidates": {
      "description": "Candidates dropped because a current register replaces them.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "superseded_register_id": {
      "description": "The register holding the prior text of this section.",
      "type": "string"
    },
    "renumbered_from": {
      "description": "The old register, when the section was renumbered.",
      "type": "string"
    },
    "related": {
      "description": "Documents that cite or amend the section ({register_id, relation}); not its text."
    },
    "related_note": {
      "description": "Explains related.",
      "type": "string"
    },
    "parsed": {
      "description": "The parse of the citation ({kind, canonical, ...})."
    },
    "topics": {
      "description": "Topics under a structured citation."
    },
    "handbook": {
      "description": "When the citation names a whole handbook: its outline."
    },
    "citation": {
      "description": "The citation as given (on unparsed).",
      "type": "string"
    },
    "truncated": {
      "description": "The candidate scan hit its limit.",
      "type": "boolean"
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "lookup_citation result."
}
🟢search_regs(query, family, limit, currency_kind)

Full-text search of US mortgage regulator text (Fannie Mae, Freddie Mac, FHA, VA, USDA, Ginnie Mae, SBA, CFPB). Inputs: `query`; optional `family` (one agency), `limit` (1-25), `currency_kind` (only sections carrying that currency signal; "any" = any signal). Common abbreviations (DTI, LTV, IRRRL, W-2, VOE, PITI, BK...) are expanded to the regulator's terms. Each result is one section: title, `obligation_id`, `canonical_citation` (the citation in the regulator's style, or null) and `excerpt`, a verbatim fragment near the match, not the whole rule. `match` is "all_terms" or "partial"; a partial result lists the query words it lacks in `missing_terms`. Order: `rank_score`, highest first = text score (title-weighted) x term coverage x title fit, with superseded, pending, incorporated or expired text x0.2 (never above its replacement), a special program's section (`special_program`: Home Possible, HomeReady, 203(k), HECM...) x0.5 unless the query names the program, and `obligation_type` "note" (statutory source-credit and editorial notes) or "index" (a chapter heading) x0.2 unless the query asks for them. `section_status` "deleted" marks a deleted-section stub, ranked last. A query that is a citation ("38 U.S.C. 3737", "ML 2026-08") returns the cited section first and sets `cited`; a bare handbook name ("HUD 4000.1") adds `handbook`, an outline of its parts. `currency` is null or a version/status signal whose kinds include dual-version, pending, revision-pending, superseded, superseded-in-part (a Mortgagee Letter replaced some provisions, named in `headline`), modified-by (a later issuance changes it, optional until its mandatory date) and expired. `version` "in-force" or "update-18-optional" marks the two texts of an FHA section HUD's Update 18 revises (`mandatory_date` for the revision); `other_version` is the other text's obligation_id. Empty results carry `reason` (empty_query, no_match, no_match_above_threshold) and may carry `guidance` naming shorthand in the query.

輸入結構描述

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1
    },
    "family": {
      "type": "string",
      "enum": [
        "hud",
        "va",
        "fnma",
        "fhlmc",
        "gnma",
        "usda",
        "sba"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    },
    "currency_kind": {
      "description": "Restricts results to sections carrying this currency signal; \"any\" = any signal.",
      "type": "string",
      "enum": [
        "any",
        "dual-version",
        "revision-pending",
        "pending",
        "expires",
        "expired",
        "superseded",
        "predates-statute",
        "incorporated",
        "incorporated-update-18",
        "revised",
        "revised-this-update",
        "source-relocated",
        "proposed",
        "directive-watch",
        "vacated-watch",
        "superseded-in-part",
        "modified-by",
        "deleted",
        "optional-now",
        "amends",
        "time-limited",
        "note"
      ]
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "results": {
      "description": "Ranked sections, highest rank_score first (may be empty).",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "section": {
            "description": "The section title.",
            "type": "string"
          },
          "register_id": {
            "description": "The register id.",
            "type": "string"
          },
          "obligation_id": {
            "description": "The obligation (section) id.",
            "type": "string"
          },
          "version": {
            "description": "On a dual-version FHA section: \"in-force\" or \"update-18-optional\".",
            "type": "string"
          },
          "other_version": {
            "description": "On a dual-version section: the other version's obligation_id.",
            "type": "string"
          },
          "mandatory_date": {
            "description": "On an Update 18 revision: when it becomes mandatory.",
            "type": "string"
          },
          "excerpt": {
            "description": "A verbatim fragment near the match; not the whole rule.",
            "type": "string"
          },
          "match": {
            "description": "all_terms or partial.",
            "type": "string"
          },
          "canonical_citation": {
            "description": "The citation in the regulator's style (e.g. \"4000.1 II.A.5.d\", \"B3-3.3-07\"), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "missing_terms": {
            "description": "On partial: the query terms this section lacks.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "special_program": {
            "description": "The special program this section belongs to (ranked x0.5).",
            "type": "string"
          },
          "also_at": {
            "description": "Same-text copies dropped from the list."
          },
          "section_status": {
            "description": "\"deleted\": a deleted-section stub.",
            "type": "string"
          },
          "section_status_date": {
            "description": "Date of section_status.",
            "type": "string"
          },
          "obligation_type": {
            "description": "note or index: not rule text.",
            "type": "string"
          },
          "authority": {
            "description": "The document and section title.",
            "type": "string"
          },
          "rank_score": {
            "description": "The score results are ordered by.",
            "type": "number"
          },
          "currency": {
            "description": "null, or a version/status signal {kind, headline, detail, effective_date, mandatory_date, expires_on, as_of, links}; kind e.g. dual-version, pending, revision-pending, superseded, superseded-in-part, modified-by, expired."
          }
        },
        "additionalProperties": {}
      }
    },
    "reason": {
      "description": "With empty results: empty_query, no_match or no_match_above_threshold.",
      "type": "string"
    },
    "cited": {
      "description": "When the query is a citation: {citation, register_ids}."
    },
    "handbook": {
      "description": "When the query names a whole handbook: its outline."
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "search_regs result."
}
🟢find_in_section(obligation_id, terms, max_passages)

Returns only the verbatim paragraphs of one obligation (section) that contain the given terms. Inputs: `obligation_id`; `terms`, 1-6 short words or phrases ("cash-out", "credit score", "LTV"; abbreviations are expanded; numbers match as words or digits, so "five years" finds "five (5) years"); optional `max_passages`. Each passage has `verbatim` (the regulator's exact text), `offset` (its position in the section's text), `canonical_citation` (the pinpoint cite, where derivable) and `heading_path` (every heading above it, e.g. "vi. No Cash-Out Refinances > (A) Rate and Term > (i) Standard"). A match inside a table returns the whole table (`table: true`; `table_layout: "flattened"` when the source lost its layout and cells may not line up). A passage ending in a colon includes the list it introduces (`list_included: true`). `truncated` means more passages matched than were returned. No passages means no paragraph contains the terms as given; it is not a statement about the rule. `currency` is null or a version/status signal (dual-version, pending, revision-pending, superseded, expired...). On an FHA section HUD's Update 18 revises, `version` ("in-force" or "update-18-optional") says which text this is and `other_version` identifies the other.

輸入結構描述

{
  "type": "object",
  "properties": {
    "obligation_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 300
    },
    "terms": {
      "minItems": 1,
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 60
      },
      "description": "1-6 short terms, e.g. [\"cash-out\", \"credit score\"]; not document text."
    },
    "max_passages": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "required": [
    "obligation_id",
    "terms"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "register_id": {
      "description": "The register (source document) id.",
      "type": "string"
    },
    "obligation_id": {
      "description": "The obligation (section) id.",
      "type": "string"
    },
    "authority": {
      "description": "The document and section title as published.",
      "type": "string"
    },
    "section": {
      "description": "The section designation.",
      "type": "string"
    },
    "canonical_citation": {
      "description": "The citation in the regulator's style (e.g. \"4000.1 II.A.5.d\", \"B3-3.3-07\"), or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "source_url": {
      "description": "The regulator's URL for the document.",
      "type": "string"
    },
    "snapshot_id": {
      "description": "The stored source snapshot.",
      "type": "string"
    },
    "fetched_at": {
      "description": "When the source was retrieved.",
      "type": "string"
    },
    "content_hash": {
      "description": "Hash of the stored text.",
      "type": "string"
    },
    "effective_date": {
      "description": "Effective date, or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "status": {
      "description": "E.g. current, superseded, unknown.",
      "type": "string"
    },
    "superseded_by": {
      "description": "The replacing register, or null.",
      "type": [
        "string",
        "null"
      ]
    },
    "coverage_tier": {
      "description": "How completely the corpus holds the document.",
      "type": "string"
    },
    "currency": {
      "description": "null, or a version/status signal {kind, headline, detail, effective_date, mandatory_date, expires_on, as_of, links}; kind e.g. dual-version, pending, revision-pending, superseded, superseded-in-part, modified-by, expired."
    },
    "canonical_id": {
      "description": "Set when this register is a same-text copy of that register.",
      "type": "string"
    },
    "version": {
      "description": "On a dual-version section: {label: in-force | update-18-optional, dates, note}."
    },
    "other_version": {
      "description": "On a dual-version section: the other version ({obligation_id, version, dates})."
    },
    "resolved_from_alias": {
      "description": "The retired obligation id requested; its text is now at obligation_id.",
      "type": "string"
    },
    "alias_note": {
      "description": "Explains resolved_from_alias.",
      "type": "string"
    },
    "chars_total": {
      "description": "The section's total length.",
      "type": "number"
    },
    "terms": {
      "description": "Per-term match counts.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "term": {
            "description": "The term as given.",
            "type": "string"
          },
          "expanded_to": {
            "description": "Spellings and abbreviations it expanded to."
          },
          "paragraphs": {
            "description": "Paragraphs containing it.",
            "type": "number"
          }
        },
        "additionalProperties": {}
      }
    },
    "total_matches": {
      "description": "Matching paragraphs.",
      "type": "number"
    },
    "passages_available": {
      "description": "Passages the matches make (tables and lists merged).",
      "type": "number"
    },
    "passages_returned": {
      "description": "Passages in this response.",
      "type": "number"
    },
    "truncated": {
      "description": "More passages matched than were returned.",
      "type": "boolean"
    },
    "toc_omitted": {
      "description": "The section's table-of-contents line was omitted.",
      "type": "boolean"
    },
    "merged_into_tables": {
      "description": "Matching paragraphs merged into whole tables.",
      "type": "number"
    },
    "merged_into_lists": {
      "description": "Matching paragraphs merged into lists with their lead-in.",
      "type": "number"
    },
    "matches_note": {
      "description": "How total_matches became passages_available.",
      "type": "string"
    },
    "passages": {
      "description": "Matching verbatim passages, in section order.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "offset": {
            "description": "Where the passage starts in the section's text.",
            "type": "number"
          },
          "chars": {
            "description": "The passage's length.",
            "type": "number"
          },
          "heading": {
            "description": "The nearest heading above (verbatim), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "heading_path": {
            "description": "Every heading above, joined by \" > \", or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "canonical_citation": {
            "description": "The citation in the regulator's style (e.g. \"4000.1 II.A.5.d\", \"B3-3.3-07\"), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "matched_terms": {
            "description": "The terms this passage matched.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "table": {
            "description": "The passage is a whole table.",
            "type": "boolean"
          },
          "table_layout": {
            "description": "\"flattened\": the source lost its table layout; cells may not line up.",
            "type": "string"
          },
          "table_complete": {
            "description": "false when the table may continue past the passage.",
            "type": "boolean"
          },
          "continues_at": {
            "description": "Offset where the table continues, when table_complete is false.",
            "type": "number"
          },
          "list_included": {
            "description": "The passage ends in a colon and includes the list it introduces.",
            "type": "boolean"
          },
          "verbatim": {
            "description": "The regulator's exact text.",
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "find_in_section result."
}
🟢verify_quote(text, register_id)

Checks whether a passage appears in a regulator's source document; accepts text from any source. Inputs: `text` (up to 5,000 words); optional `register_id` (without it, up to 3 candidate documents are located by search). `outcome` is one of: exact (contiguous in the source, quote marks and dashes as the source writes them; a line break counts as a space); normalized (matches after folding quote and dash typography, `typography_folded`; ignoring page footers or running heads, `furniture_ignored`; spacing where the stored source splits or joins words, `spacing_ignored`; or added list markers, `list_markers_ignored`); composed (every word is in the source, in source order, but from non-contiguous pieces, as with an overview or an ellipsis; `omissions` lists the short source phrases skipped between pieces); not_found (no source support; `unsupported` lists the unsupported spans, and on a near miss `differences` gives the closest source text, the source words the text lacks and the words it adds); not_checked (over 5,000 words). `coverage` is the share of words found. `checked_against` names the documents checked (document, edition, retrieval date; ids in `checked_snapshot_ids`); `matched_against` names the one matched, `matched_register_id` / `matched_obligation_id` the stored text containing the passage. `matched_version` is current; superseded (the text is a prior version of the rule; `superseded_by` is the current register); or update-18-optional (HUD's Update 18 revision of an FHA 4000.1 section, optional until `mandatory_date`; `in_force_obligation_id` is the text in force by default). `obligation_currency` lists currency signals on the obligation holding the text (e.g. superseded-in-part). `rescinded: true` (with `rescinded_by`) means the passage is text a later issuance removed or replaced.

輸入結構描述

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "minLength": 1
    },
    "register_id": {
      "type": "string"
    }
  },
  "required": [
    "text"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "outcome": {
      "description": "exact: contiguous in the source; normalized: matches after typography, spacing, footer or list-marker folding; composed: all words in source order, non-contiguous; not_found: no source support; not_checked: over 5,000 words.",
      "type": "string",
      "enum": [
        "exact",
        "normalized",
        "composed",
        "not_found",
        "not_checked"
      ]
    },
    "coverage": {
      "description": "Share of the text's words found in the source (0 to 1).",
      "type": "number"
    },
    "unsupported": {
      "description": "On not_found: spans with no source support."
    },
    "omissions": {
      "description": "On composed: short source phrases skipped between pieces."
    },
    "differences": {
      "description": "On a near miss: {closest_source, missing_from_quote, extra_in_quote}."
    },
    "segments": {
      "description": "On composed: source pieces the text is assembled from.",
      "type": "number"
    },
    "elisions": {
      "description": "On composed: gaps (marked or not).",
      "type": "number"
    },
    "typography_folded": {
      "description": "Matched after folding quotes and dashes.",
      "type": "boolean"
    },
    "furniture_ignored": {
      "description": "A page footer or running head was ignored.",
      "type": "boolean"
    },
    "spacing_ignored": {
      "description": "Only spacing differs.",
      "type": "boolean"
    },
    "list_markers_ignored": {
      "description": "Added list markers were ignored.",
      "type": "boolean"
    },
    "checked_against": {
      "description": "Source documents checked (document, edition, retrieval date)."
    },
    "checked_snapshot_ids": {
      "description": "Snapshot ids checked."
    },
    "matched_version": {
      "description": "current, superseded (a prior version) or update-18-optional.",
      "type": "string"
    },
    "superseded_register_id": {
      "description": "On superseded: the register holding the prior text.",
      "type": "string"
    },
    "superseded_by": {
      "description": "On superseded: the current register.",
      "type": [
        "string",
        "null"
      ]
    },
    "matched_against": {
      "description": "The checked document the text matched.",
      "type": "string"
    },
    "matched_register_id": {
      "description": "The register whose stored text contains the passage.",
      "type": "string"
    },
    "matched_obligation_id": {
      "description": "The obligation whose stored text contains the passage.",
      "type": "string"
    },
    "also_in_obligation_id": {
      "description": "On a match in an amending issuance: the amended obligation that also carries the text.",
      "type": "string"
    },
    "mandatory_date": {
      "description": "On an Update 18 revision: when it becomes mandatory.",
      "type": "string"
    },
    "reason": {
      "description": "On not_checked: too_long.",
      "type": "string"
    },
    "words": {
      "description": "On not_checked: the word count.",
      "type": "number"
    },
    "limit": {
      "description": "On not_checked: the word limit.",
      "type": "number"
    },
    "register_id": {
      "description": "Echoed on not_found.",
      "type": "string"
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "verify_quote result."
}
🟢list_playbooks

Lists the guided compliance playbooks this server provides: the Fannie Mae AI lender letter (LL-2026-04) P&P review (AI inventory, AI governance policy, risk assessment, P&P updates, change log) and FHA, VA and USDA loan-file QC against the verbatim handbooks. Returns each playbook's id, what it does, when it applies and what the user provides. Playbook tools accept only ids and reference names, no document text; the user's P&Ps and loan files stay in their own chat.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "playbooks": {
      "description": "The available playbooks.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "description": "The playbook id.",
            "type": "string"
          },
          "title": {
            "description": "The playbook's name.",
            "type": "string"
          },
          "what": {
            "description": "What it does.",
            "type": "string"
          },
          "when": {
            "description": "When it applies.",
            "type": "string"
          },
          "user_provides": {
            "description": "What the user supplies."
          },
          "version": {
            "description": "The playbook's version."
          },
          "prompt": {
            "description": "The matching MCP prompt name.",
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "privacy": {
      "description": "How user material is handled."
    },
    "next": {
      "description": "The server's note on the next step.",
      "type": "string"
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "list_playbooks result."
}
🟢start_playbook(id)

Returns one playbook's full workflow instructions, its stages, the stage reference names and the rule-kit version: the Fannie Mae AI lender letter (LL-2026-04) P&P review, or FHA, VA or USDA loan-file QC. Input: the playbook `id`; an unknown id returns `unknown_playbook` with `valid_ids`. Playbook tools accept only ids and reference names, no document text; the user's P&Ps and loan files stay in their own chat.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^[a-z0-9-]+$",
      "description": "Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "description": "The playbook id.",
      "type": "string"
    },
    "title": {
      "description": "The playbook's name.",
      "type": "string"
    },
    "version": {
      "description": "The playbook's version."
    },
    "privacy": {
      "description": "How user material is handled."
    },
    "user_provides": {
      "description": "What the user supplies."
    },
    "kit": {
      "description": "The rule kit ({kind, source, version, load_with})."
    },
    "stages": {
      "description": "The workflow's stages."
    },
    "references": {
      "description": "The playbook's reference names.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "load_reference_with": {
      "description": "How a reference is loaded, or null when there are none.",
      "type": [
        "string",
        "null"
      ]
    },
    "instructions": {
      "description": "The playbook's workflow instructions."
    },
    "valid_ids": {
      "description": "On unknown_playbook: the valid ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "start_playbook result."
}
🟢get_playbook_reference(id, name)

Returns one stage reference document of a playbook (e.g. the FNMA playbook's DISCOVERY, RECONCILE, SYNTHESIS, PP-UPDATE, CHANGELOG or UPDATING stage). Inputs: `id`, `name` (one of the playbook's `references`). Playbook tools accept only ids and reference names, no document text; the user's P&Ps and loan files stay in their own chat.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^[a-z0-9-]+$",
      "description": "Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc."
    },
    "name": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9-]+$",
      "description": "Reference name, one of the playbook's `references`."
    }
  },
  "required": [
    "id",
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "description": "The playbook id.",
      "type": "string"
    },
    "name": {
      "description": "The reference name.",
      "type": "string"
    },
    "content": {
      "description": "The reference's content."
    },
    "valid_ids": {
      "description": "On unknown_playbook: the valid ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "valid_names": {
      "description": "On unknown_reference: the valid names.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "get_playbook_reference result."
}
🟢get_playbook_kit(id, offset)

Returns a playbook's rule kit. FNMA AI lender letter: the verbatim LL-2026-04, InfoSec Supplement and ECOA/Reg B/FCRA/AVM rows with citations, paginated; `next_offset` is the next page's offset, or null when the kit is complete. FHA/VA/USDA QC: the corpus registers each check area is grounded in. The kit block's fingerprint and dates identify its version. Playbook tools accept only ids and reference names, no document text; the user's P&Ps and loan files stay in their own chat.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^[a-z0-9-]+$",
      "description": "Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc."
    },
    "offset": {
      "description": "Row offset for the next page (the previous page's next_offset).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "description": "The playbook id.",
      "type": "string"
    },
    "kit": {
      "description": "The kit's kind, source and version."
    },
    "offset": {
      "description": "Where this page starts.",
      "type": "number"
    },
    "rows_returned": {
      "description": "Rows in this page.",
      "type": "number"
    },
    "rows_total": {
      "description": "Rows in the kit.",
      "type": "number"
    },
    "next_offset": {
      "description": "The next page's offset, or null when the kit is complete.",
      "type": [
        "number",
        "null"
      ]
    },
    "rows": {
      "description": "Kit rows: verbatim rule text with citations."
    },
    "how_to_read": {
      "description": "For a corpus-register kit: the server's reading note.",
      "type": "string"
    },
    "search_family": {
      "description": "For a corpus-register kit: its search family."
    },
    "areas": {
      "description": "For a corpus-register kit: its areas and registers."
    },
    "valid_ids": {
      "description": "On unknown_playbook: the valid ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "error": {
      "description": "Present only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.",
      "type": "string"
    },
    "hint": {
      "description": "On an error: the server's explanation.",
      "type": "string"
    },
    "guidance": {
      "description": "On a refusal or empty search: the server's explanation.",
      "type": "string"
    },
    "fallback": {
      "description": "On daily_capacity_reached: where the full corpus can be downloaded.",
      "type": "string"
    },
    "resets": {
      "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).",
      "type": "string"
    },
    "note": {
      "description": "A note on this result.",
      "type": "string"
    },
    "notice": {
      "description": "Terms notice: research use only, not legal advice.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {},
  "description": "get_playbook_kit result."
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本10 個工具
已驗證未記錄版本10 個工具