MCP 서버

C4C: Mortgage Industry Regulations

com.claudeforcompliance/mortgage-regs
지식 및 문서 법률 및 컴플라이언스 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Searches and quotes verbatim U.S. mortgage regulations, resolves citations, verifies quotations, and provides compliance playbook references.

find_in_section
Find in section
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['obligation_id', 'terms'], 'properties': {'terms': {'type': 'array', 'items': {'type': 'string', 'maxLength': 60, 'minLength': 1}, 'maxItems': 6, 'minItems': 1, 'description': '1-6 short terms, e.g. ["cash-out", "credit score"]; not document text.'}, 'max_passages': {'type': 'integer', 'maximum': 20, 'minimum': 1}, 'obligation_id': {'type': 'string', 'maxLength': 300, 'minLength': 1}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'error': {'type': 'string', '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.'}, 'terms': {'type': 'array', 'items': {'type': 'object', 'properties': {'term': {'type': 'string', 'description': 'The term as given.'}, 'paragraphs': {'type': 'number', 'description': 'Paragraphs containing it.'}, 'expanded_to': {'description': 'Spellings and abbreviations it expanded to.'}}, 'additionalProperties': {}}, 'description': 'Per-term match counts.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'status': {'type': 'string', 'description': 'E.g. current, superseded, unknown.'}, 'section': {'type': 'string', 'description': 'The section designation.'}, 'version': {'description': 'On a dual-version section: {label: in-force | update-18-optional, dates, note}.'}, '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.'}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'passages': {'type': 'array', 'items': {'type': 'object', 'properties': {'chars': {'type': 'number', 'description': "The passage's length."}, 'table': {'type': 'boolean', 'description': 'The passage is a whole table.'}, 'offset': {'type': 'number', 'description': "Where the passage starts in the section's text."}, 'heading': {'type': ['string', 'null'], 'description': 'The nearest heading above (verbatim), or null.'}, 'verbatim': {'type': 'string', 'description': "The regulator's exact text."}, 'continues_at': {'type': 'number', 'description': 'Offset where the table continues, when table_complete is false.'}, 'heading_path': {'type': ['string', 'null'], 'description': 'Every heading above, joined by " > ", or null.'}, 'table_layout': {'type': 'string', 'description': '"flattened": the source lost its table layout; cells may not line up.'}, 'list_included': {'type': 'boolean', 'description': 'The passage ends in a colon and includes the list it introduces.'}, 'matched_terms': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The terms this passage matched.'}, 'table_complete': {'type': 'boolean', 'description': 'false when the table may continue past the passage.'}, 'canonical_citation': {'type': ['string', 'null'], 'description': 'The citation in the regulator\'s style (e.g. "4000.1 II.A.5.d", "B3-3.3-07"), or null.'}}, 'additionalProperties': {}}, 'description': 'Matching verbatim passages, in section order.'}, 'authority': {'type': 'string', 'description': 'The document and section title as published.'}, 'truncated': {'type': 'boolean', 'description': 'More passages matched than were returned.'}, 'alias_note': {'type': 'string', 'description': 'Explains resolved_from_alias.'}, 'fetched_at': {'type': 'string', 'description': 'When the source was retrieved.'}, 'source_url': {'type': 'string', 'description': "The regulator's URL for the document."}, 'chars_total': {'type': 'number', 'description': "The section's total length."}, 'register_id': {'type': 'string', 'description': 'The register (source document) id.'}, 'snapshot_id': {'type': 'string', 'description': 'The stored source snapshot.'}, 'toc_omitted': {'type': 'boolean', 'description': "The section's table-of-contents line was omitted."}, 'canonical_id': {'type': 'string', 'description': 'Set when this register is a same-text copy of that register.'}, 'content_hash': {'type': 'string', 'description': 'Hash of the stored text.'}, 'matches_note': {'type': 'string', 'description': 'How total_matches became passages_available.'}, 'coverage_tier': {'type': 'string', 'description': 'How completely the corpus holds the document.'}, 'obligation_id': {'type': 'string', 'description': 'The obligation (section) id.'}, 'other_version': {'description': 'On a dual-version section: the other version ({obligation_id, version, dates}).'}, 'superseded_by': {'type': ['string', 'null'], 'description': 'The replacing register, or null.'}, 'total_matches': {'type': 'number', 'description': 'Matching paragraphs.'}, 'effective_date': {'type': ['string', 'null'], 'description': 'Effective date, or null.'}, 'merged_into_lists': {'type': 'number', 'description': 'Matching paragraphs merged into lists with their lead-in.'}, 'passages_returned': {'type': 'number', 'description': 'Passages in this response.'}, 'canonical_citation': {'type': ['string', 'null'], 'description': 'The citation in the regulator\'s style (e.g. "4000.1 II.A.5.d", "B3-3.3-07"), or null.'}, 'merged_into_tables': {'type': 'number', 'description': 'Matching paragraphs merged into whole tables.'}, 'passages_available': {'type': 'number', 'description': 'Passages the matches make (tables and lists merged).'}, 'resolved_from_alias': {'type': 'string', 'description': 'The retired obligation id requested; its text is now at obligation_id.'}}, 'description': 'find_in_section result.', 'additionalProperties': {}}
get_obligation
Get obligation
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['obligation_id'], 'properties': {'limit': {'type': 'integer', 'maximum': 24000, 'minimum': 1, 'description': 'Max chars to return from offset (200-24000; default 24000).'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'obligation_id': {'type': 'string', 'minLength': 1}, 'compare_versions': {'type': 'boolean', 'description': 'On an FHA section Update 18 revises: also return `version_changes`, the sentences Update 18 deletes and adds (verbatim units with offsets).'}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'error': {'type': 'string', '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.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'paging': {'type': 'object', 'properties': {'how': {'type': 'string', 'description': "The server's paging note."}, 'page': {'type': ['number', 'null'], 'description': "This page's number, or null past the end."}, 'pages': {'type': 'number', 'description': 'Total pages at this page size.'}, 'next_offset': {'type': ['number', 'null'], 'description': "The next page's offset, or null at the end."}}, 'description': 'Page N of M.', 'additionalProperties': {}}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'status': {'type': 'string', 'description': 'E.g. current, superseded, unknown.'}, 'figures': {'type': 'array', 'items': {'type': 'object', 'properties': {'unit': {'type': 'string', 'description': 'percent, percentage_point, currency, duration, ratio, fraction, age, day_of_period, time, count, number or temperature.'}, 'value': {'type': 'string', 'description': 'The figure as a number string, e.g. "43", "50/50".'}, 'offset': {'type': 'number', 'description': "Position in this response's text."}, 'as_written': {'type': 'string', 'description': 'The figure as written, when it differs.'}}, 'additionalProperties': {}}, 'description': 'Best-effort extraction of figures in the text; an empty or incomplete list is not evidence that the text states no figure.'}, 'section': {'type': 'string', 'description': 'The section designation.'}, 'version': {'description': 'On a dual-version section: {label: in-force | update-18-optional, dates, note}.'}, '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.'}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'verbatim': {'type': 'string', 'description': "The regulator's exact text, between <<<BEGIN VERBATIM>>> and <<<END VERBATIM>>>."}, 'authority': {'type': 'string', 'description': 'The document and section title as published.'}, 'editorial': {'description': 'Reserved; summary is null (the text is not summarized).'}, 'truncated': {'type': 'boolean', 'description': 'More text follows this response.'}, 'alias_note': {'type': 'string', 'description': 'Explains resolved_from_alias.'}, 'fetched_at': {'type': 'string', 'description': 'When the source was retrieved.'}, 'source_url': {'type': 'string', 'description': "The regulator's URL for the document."}, 'chars_total': {'type': 'number', 'description': "The section's total length."}, 'next_offset': {'type': ['number', 'null'], 'description': "The next page's offset, or null when the section ends here."}, 'register_id': {'type': 'string', 'description': 'The register (source document) id.'}, 'snapshot_id': {'type': 'string', 'description': 'The stored source snapshot.'}, 'canonical_id': {'type': 'string', 'description': 'Set when this register is a same-text copy of that register.'}, 'chars_offset': {'type': 'number', 'description': "Where this response starts in the section's text."}, 'content_hash': {'type': 'string', 'description': 'Hash of the stored text.'}, 'coverage_tier': {'type': 'string', 'description': 'How completely the corpus holds the document.'}, 'obligation_id': {'type': 'string', 'description': 'The obligation (section) id.'}, 'other_version': {'description': 'On a dual-version section: the other version ({obligation_id, version, dates}).'}, 'superseded_by': {'type': ['string', 'null'], 'description': 'The replacing register, or null.'}, 'chars_returned': {'type': 'number', 'description': 'Characters of text in this response.'}, 'effective_date': {'type': ['string', 'null'], 'description': 'Effective date, or null.'}, 'version_changes': {'description': 'With compare_versions: sentences Update 18 deletes and adds, or {error: "single_version"}.'}, 'canonical_citation': {'type': ['string', 'null'], 'description': 'The citation in the regulator\'s style (e.g. "4000.1 II.A.5.d", "B3-3.3-07"), or null.'}, 'resolved_from_alias': {'type': 'string', 'description': 'The retired obligation id requested; its text is now at obligation_id.'}, 'started_mid_section': {'type': 'boolean', 'description': 'Text before chars_offset is not in this response.'}}, 'description': 'get_obligation result.', 'additionalProperties': {}}
get_playbook_kit
Get playbook kit
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9-]+$', 'maxLength': 64, 'description': 'Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Row offset for the next page (the previous page's next_offset)."}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'The playbook id.'}, 'kit': {'description': "The kit's kind, source and version."}, 'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'rows': {'description': 'Kit rows: verbatim rule text with citations.'}, 'areas': {'description': 'For a corpus-register kit: its areas and registers.'}, 'error': {'type': 'string', '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.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'offset': {'type': 'number', 'description': 'Where this page starts.'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'valid_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'On unknown_playbook: the valid ids.'}, 'rows_total': {'type': 'number', 'description': 'Rows in the kit.'}, 'how_to_read': {'type': 'string', 'description': "For a corpus-register kit: the server's reading note."}, 'next_offset': {'type': ['number', 'null'], 'description': "The next page's offset, or null when the kit is complete."}, 'rows_returned': {'type': 'number', 'description': 'Rows in this page.'}, 'search_family': {'description': 'For a corpus-register kit: its search family.'}}, 'description': 'get_playbook_kit result.', 'additionalProperties': {}}
get_playbook_reference
Get playbook reference
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9-]+$', 'maxLength': 64, 'description': 'Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc.'}, 'name': {'type': 'string', 'pattern': '^[A-Za-z0-9-]+$', 'maxLength': 64, 'description': "Reference name, one of the playbook's `references`."}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'The playbook id.'}, 'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'name': {'type': 'string', 'description': 'The reference name.'}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'error': {'type': 'string', '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.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'content': {'description': "The reference's content."}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'valid_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'On unknown_playbook: the valid ids.'}, 'valid_names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'On unknown_reference: the valid names.'}}, 'description': 'get_playbook_reference result.', 'additionalProperties': {}}
get_reg
Get regulation
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['register_id'], 'properties': {'register_id': {'type': 'string', 'minLength': 1}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'error': {'type': 'string', '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.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'status': {'type': 'string', 'description': 'E.g. current, superseded, unknown.'}, 'also_at': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Same-text copies of this register.'}, '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.'}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'authority': {'type': 'string', 'description': 'The document title.'}, 'obligations': {'type': 'array', 'items': {'type': 'object', 'properties': {'section': {'type': 'string', 'description': 'The section designation or title.'}, 'version': {'type': 'string', 'description': 'On a dual-version FHA section: "in-force" or "update-18-optional".'}, '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.'}, 'chars_total': {'type': 'number', 'description': "Length of the section's text in characters."}, 'obligation_id': {'type': 'string', 'description': 'The obligation (section) id.'}, 'other_version': {'type': 'string', 'description': "On a dual-version section: the other version's obligation_id."}, 'will_truncate': {'type': 'boolean', 'description': 'The section exceeds one 24,000-char page.'}, 'mandatory_date': {'type': 'string', 'description': 'On an Update 18 revision: when it becomes mandatory.'}, 'canonical_citation': {'type': ['string', 'null'], 'description': 'The citation in the regulator\'s style (e.g. "4000.1 II.A.5.d", "B3-3.3-07"), or null.'}}, 'additionalProperties': {}}, 'description': "The register's obligations (a manifest, not regulator text)."}, 'register_id': {'type': 'string', 'description': 'The register id.'}, 'canonical_id': {'type': 'string', 'description': 'Set when this register is a same-text copy of that register.'}, 'coverage_tier': {'type': 'string', 'description': 'How completely the corpus holds the document.'}, 'obligation_id': {'type': 'string', 'description': 'Echoed on error.'}, 'superseded_by': {'type': ['string', 'null'], 'description': 'The replacing register, or null.'}, 'effective_date': {'type': ['string', 'null'], 'description': 'Effective date, or null.'}, 'canonical_citation': {'type': ['string', 'null'], 'description': 'The citation in the regulator\'s style (e.g. "4000.1 II.A.5.d", "B3-3.3-07"), or null.'}}, 'description': 'get_reg result.', 'additionalProperties': {}}
list_playbooks
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'next': {'type': 'string', 'description': "The server's note on the next step."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'error': {'type': 'string', '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.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'privacy': {'description': 'How user material is handled.'}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'playbooks': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'The playbook id.'}, 'what': {'type': 'string', 'description': 'What it does.'}, 'when': {'type': 'string', 'description': 'When it applies.'}, 'title': {'type': 'string', 'description': "The playbook's name."}, 'prompt': {'type': 'string', 'description': 'The matching MCP prompt name.'}, 'version': {'description': "The playbook's version."}, 'user_provides': {'description': 'What the user supplies.'}}, 'additionalProperties': {}}, 'description': 'The available playbooks.'}}, 'description': 'list_playbooks result.', 'additionalProperties': {}}
lookup_citation
Look up 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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['citation'], 'properties': {'citation': {'type': 'string', 'minLength': 1}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'error': {'type': 'string', '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.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'parsed': {'description': 'The parse of the citation ({kind, canonical, ...}).'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'topics': {'description': 'Topics under a structured citation.'}, 'also_at': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Identical copies of the section (other register ids).'}, 'related': {'description': 'Documents that cite or amend the section ({register_id, relation}); not its text.'}, 'citation': {'type': 'string', 'description': 'The citation as given (on unparsed).'}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'handbook': {'description': 'When the citation names a whole handbook: its outline.'}, 'truncated': {'type': 'boolean', 'description': 'The candidate scan hit its limit.'}, 'candidates': {'type': 'array', 'items': {'type': 'string'}, 'description': 'On ambiguous: the registers the citation could mean.'}, 'register_id': {'type': 'string', 'description': 'The register the citation resolves to.'}, 'also_at_note': {'type': 'string', 'description': 'Explains also_at.'}, 'canonical_id': {'type': 'string', 'description': 'Set when the register is a same-text copy of that register.'}, 'related_note': {'type': 'string', 'description': 'Explains related.'}, 'renumbered_from': {'type': 'string', 'description': 'The old register, when the section was renumbered.'}, 'superseded_candidates': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Candidates dropped because a current register replaces them.'}, 'superseded_register_id': {'type': 'string', 'description': 'The register holding the prior text of this section.'}}, 'description': 'lookup_citation result.', 'additionalProperties': {}}
search_regs
Search regulations
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 25, 'minimum': 1}, 'query': {'type': 'string', 'minLength': 1}, 'family': {'enum': ['hud', 'va', 'fnma', 'fhlmc', 'gnma', 'usda', 'sba'], 'type': 'string'}, 'currency_kind': {'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'], 'type': 'string', 'description': 'Restricts results to sections carrying this currency signal; "any" = any signal.'}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'cited': {'description': 'When the query is a citation: {citation, register_ids}.'}, 'error': {'type': 'string', '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.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'reason': {'type': 'string', 'description': 'With empty results: empty_query, no_match or no_match_above_threshold.'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'results': {'type': 'array', 'items': {'type': 'object', 'properties': {'match': {'type': 'string', 'description': 'all_terms or partial.'}, 'also_at': {'description': 'Same-text copies dropped from the list.'}, 'excerpt': {'type': 'string', 'description': 'A verbatim fragment near the match; not the whole rule.'}, 'section': {'type': 'string', 'description': 'The section title.'}, 'version': {'type': 'string', 'description': 'On a dual-version FHA section: "in-force" or "update-18-optional".'}, '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.'}, 'authority': {'type': 'string', 'description': 'The document and section title.'}, 'rank_score': {'type': 'number', 'description': 'The score results are ordered by.'}, 'register_id': {'type': 'string', 'description': 'The register id.'}, 'missing_terms': {'type': 'array', 'items': {'type': 'string'}, 'description': 'On partial: the query terms this section lacks.'}, 'obligation_id': {'type': 'string', 'description': 'The obligation (section) id.'}, 'other_version': {'type': 'string', 'description': "On a dual-version section: the other version's obligation_id."}, 'mandatory_date': {'type': 'string', 'description': 'On an Update 18 revision: when it becomes mandatory.'}, 'section_status': {'type': 'string', 'description': '"deleted": a deleted-section stub.'}, 'obligation_type': {'type': 'string', 'description': 'note or index: not rule text.'}, 'special_program': {'type': 'string', 'description': 'The special program this section belongs to (ranked x0.5).'}, 'canonical_citation': {'type': ['string', 'null'], 'description': 'The citation in the regulator\'s style (e.g. "4000.1 II.A.5.d", "B3-3.3-07"), or null.'}, 'section_status_date': {'type': 'string', 'description': 'Date of section_status.'}}, 'additionalProperties': {}}, 'description': 'Ranked sections, highest rank_score first (may be empty).'}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'handbook': {'description': 'When the query names a whole handbook: its outline.'}}, 'description': 'search_regs result.', 'additionalProperties': {}}
start_playbook
Start playbook
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9-]+$', 'maxLength': 64, 'description': 'Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc.'}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'The playbook id.'}, 'kit': {'description': 'The rule kit ({kind, source, version, load_with}).'}, 'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'error': {'type': 'string', '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.'}, 'title': {'type': 'string', 'description': "The playbook's name."}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'stages': {'description': "The workflow's stages."}, 'privacy': {'description': 'How user material is handled.'}, 'version': {'description': "The playbook's version."}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'valid_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'On unknown_playbook: the valid ids.'}, 'references': {'type': 'array', 'items': {'type': 'string'}, 'description': "The playbook's reference names."}, 'instructions': {'description': "The playbook's workflow instructions."}, 'user_provides': {'description': 'What the user supplies.'}, 'load_reference_with': {'type': ['string', 'null'], 'description': 'How a reference is loaded, or null when there are none.'}}, 'description': 'start_playbook result.', 'additionalProperties': {}}
verify_quote
Verify quote
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', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['text'], 'properties': {'text': {'type': 'string', 'minLength': 1}, 'register_id': {'type': 'string'}}}
출력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hint': {'type': 'string', 'description': "On an error: the server's explanation."}, 'note': {'type': 'string', 'description': 'A note on this result.'}, 'error': {'type': 'string', '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.'}, 'limit': {'type': 'number', 'description': 'On not_checked: the word limit.'}, 'words': {'type': 'number', 'description': 'On not_checked: the word count.'}, 'notice': {'type': 'string', 'description': 'Terms notice: research use only, not legal advice.'}, 'reason': {'type': 'string', 'description': 'On not_checked: too_long.'}, 'resets': {'type': 'string', 'description': 'On daily_capacity_reached: when capacity resets (00:00 UTC).'}, 'outcome': {'enum': ['exact', 'normalized', 'composed', 'not_found', 'not_checked'], 'type': 'string', '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.'}, 'coverage': {'type': 'number', 'description': "Share of the text's words found in the source (0 to 1)."}, 'elisions': {'type': 'number', 'description': 'On composed: gaps (marked or not).'}, 'fallback': {'type': 'string', 'description': 'On daily_capacity_reached: where the full corpus can be downloaded.'}, 'guidance': {'type': 'string', 'description': "On a refusal or empty search: the server's explanation."}, 'segments': {'type': 'number', 'description': 'On composed: source pieces the text is assembled from.'}, 'omissions': {'description': 'On composed: short source phrases skipped between pieces.'}, 'differences': {'description': 'On a near miss: {closest_source, missing_from_quote, extra_in_quote}.'}, 'register_id': {'type': 'string', 'description': 'Echoed on not_found.'}, 'unsupported': {'description': 'On not_found: spans with no source support.'}, 'superseded_by': {'type': ['string', 'null'], 'description': 'On superseded: the current register.'}, 'mandatory_date': {'type': 'string', 'description': 'On an Update 18 revision: when it becomes mandatory.'}, 'checked_against': {'description': 'Source documents checked (document, edition, retrieval date).'}, 'matched_against': {'type': 'string', 'description': 'The checked document the text matched.'}, 'matched_version': {'type': 'string', 'description': 'current, superseded (a prior version) or update-18-optional.'}, 'spacing_ignored': {'type': 'boolean', 'description': 'Only spacing differs.'}, 'furniture_ignored': {'type': 'boolean', 'description': 'A page footer or running head was ignored.'}, 'typography_folded': {'type': 'boolean', 'description': 'Matched after folding quotes and dashes.'}, 'matched_register_id': {'type': 'string', 'description': 'The register whose stored text contains the passage.'}, 'checked_snapshot_ids': {'description': 'Snapshot ids checked.'}, 'list_markers_ignored': {'type': 'boolean', 'description': 'Added list markers were ignored.'}, 'also_in_obligation_id': {'type': 'string', 'description': 'On a match in an amending issuance: the amended obligation that also carries the text.'}, 'matched_obligation_id': {'type': 'string', 'description': 'The obligation whose stored text contains the passage.'}, 'superseded_register_id': {'type': 'string', 'description': 'On superseded: the register holding the prior text.'}}, 'description': 'verify_quote result.', 'additionalProperties': {}}
변경됨
search_regs
2026년 10월 1일 2:42 AM
변경됨
get_playbook_kit
2026년 9월 29일 2:48 AM
변경됨
get_playbook_reference
2026년 9월 29일 2:48 AM
변경됨
start_playbook
2026년 9월 29일 2:48 AM
변경됨
list_playbooks
2026년 9월 29일 2:48 AM
변경됨
verify_quote
2026년 9월 29일 2:48 AM
변경됨
find_in_section
2026년 9월 29일 2:48 AM
변경됨
search_regs
2026년 9월 29일 2:48 AM
변경됨
lookup_citation
2026년 9월 29일 2:48 AM
변경됨
get_reg
2026년 9월 29일 2:48 AM
변경됨
get_obligation
2026년 9월 29일 2:48 AM
추가됨
get_playbook_kit
2026년 9월 27일 2:40 AM
추가됨
get_playbook_reference
2026년 9월 27일 2:40 AM
추가됨
start_playbook
2026년 9월 27일 2:40 AM
추가됨
list_playbooks
2026년 9월 27일 2:40 AM
추가됨
verify_quote
2026년 9월 27일 2:40 AM
추가됨
find_in_section
2026년 9월 27일 2:40 AM
추가됨
search_regs
2026년 9월 27일 2:40 AM
추가됨
lookup_citation
2026년 9월 27일 2:40 AM
추가됨
get_reg
2026년 9월 27일 2:40 AM
추가됨
get_obligation
2026년 9월 27일 2:40 AM