Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,545Letters: 14Defects: 1,324counted 4 min ago
teppi

Server definition

Hash
sha256:9f500eac7bc807980a108a5c47140fd59ae3988f8d6ab07483ea95a4533cb5d9
What it is
What a remote MCP server returned when asked what it offers: 10 tools

The blob, as servednamed by its sha256

{ "instructions": "1. Answer in the regulator's exact words: quote each relevant section verbatim with its section citation, not a paraphrase. Summary after, labeled as a summary.\n2. State any `currency` warning and which version.\n3. Use regulator vocabulary (\"debt-to-income\" not \"DTI\"). Titles don't fit: search again.\n4. A special program's rule applies only to that program: find the general rule.\n5. Still none: the corpus doesn't address it; say so, don't answer from memory.\n6. Read: find_in_section. Verify: verify_quote.\n\nNotice: every result carries a `notice` (research only, not legal advice). Mention it ONCE per conversation, in one short line, not under every answer.\nCite `canonical_citation`. Reading: find_in_section gives the paragraphs with your terms (check `heading_path` is the program meant); get_obligation pages the whole section: repeat with offset=next_offset until null. Don't say a section lacks something before reading every page; no find_in_section match doesn't mean the rule is silent. `figures` is a best-effort extraction; an empty or incomplete list is not evidence the text states no figure.\nTwo versions (an FHA section Update 18 revises; `version` in-force / update-18-optional): quote the one that applies. If you don't know whether the user has adopted Update 18, quote the in-force text and state what the revision changes, or ask.\nsuperseded-in-part: quote the Mortgagee Letter for the replaced provisions, this text for the rest.\nverify_quote quotes before presenting them. composed: check `omissions` (a dropped \"not\" changes meaning); not_found: not a quotation; superseded: only as the prior version; update-18-optional: as the Update 18 version; rescinded: never as current.\nlookup_citation \"ambiguous\": ask the user which. daily_capacity_reached: stop for today; don't answer from memory.\nPlaybooks (FNMA LL-2026-04 P&P review; FHA, VA, USDA loan-file QC): list_playbooks, then start_playbook; follow its instructions exactly. Playbook tools take only ids: the user's documents stay in their chat, never sent here.", "tools": [ { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "max_passages": { "maximum": 20, "minimum": 1, "type": "integer" }, "obligation_id": { "maxLength": 300, "minLength": 1, "type": "string" }, "terms": { "description": "1-6 short terms, e.g. [\"cash-out\", \"credit score\"]; not document text.", "items": { "maxLength": 60, "minLength": 1, "type": "string" }, "maxItems": 6, "minItems": 1, "type": "array" } }, "required": [ "obligation_id", "terms" ], "type": "object" }, "name": "find_in_section", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "find_in_section result.", "properties": { "alias_note": { "description": "Explains resolved_from_alias.", "type": "string" }, "authority": { "description": "The document and section title as published.", "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" ] }, "canonical_id": { "description": "Set when this register is a same-text copy of that register.", "type": "string" }, "chars_total": { "description": "The section's total length.", "type": "number" }, "content_hash": { "description": "Hash of the stored text.", "type": "string" }, "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." }, "effective_date": { "description": "Effective date, or null.", "type": [ "string", "null" ] }, "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "fetched_at": { "description": "When the source was retrieved.", "type": "string" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "matches_note": { "description": "How total_matches became passages_available.", "type": "string" }, "merged_into_lists": { "description": "Matching paragraphs merged into lists with their lead-in.", "type": "number" }, "merged_into_tables": { "description": "Matching paragraphs merged into whole tables.", "type": "number" }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "obligation_id": { "description": "The obligation (section) id.", "type": "string" }, "other_version": { "description": "On a dual-version section: the other version ({obligation_id, version, dates})." }, "passages": { "description": "Matching verbatim passages, in section order.", "items": { "additionalProperties": {}, "properties": { "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": { "description": "The passage's length.", "type": "number" }, "continues_at": { "description": "Offset where the table continues, when table_complete is false.", "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" ] }, "list_included": { "description": "The passage ends in a colon and includes the list it introduces.", "type": "boolean" }, "matched_terms": { "description": "The terms this passage matched.", "items": { "type": "string" }, "type": "array" }, "offset": { "description": "Where the passage starts in the section's text.", "type": "number" }, "table": { "description": "The passage is a whole table.", "type": "boolean" }, "table_complete": { "description": "false when the table may continue past the passage.", "type": "boolean" }, "table_layout": { "description": "\"flattened\": the source lost its table layout; cells may not line up.", "type": "string" }, "verbatim": { "description": "The regulator's exact text.", "type": "string" } }, "type": "object" }, "type": "array" }, "passages_available": { "description": "Passages the matches make (tables and lists merged).", "type": "number" }, "passages_returned": { "description": "Passages in this response.", "type": "number" }, "register_id": { "description": "The register (source document) id.", "type": "string" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "resolved_from_alias": { "description": "The retired obligation id requested; its text is now at obligation_id.", "type": "string" }, "section": { "description": "The section designation.", "type": "string" }, "snapshot_id": { "description": "The stored source snapshot.", "type": "string" }, "source_url": { "description": "The regulator's URL for the document.", "type": "string" }, "status": { "description": "E.g. current, superseded, unknown.", "type": "string" }, "superseded_by": { "description": "The replacing register, or null.", "type": [ "string", "null" ] }, "terms": { "description": "Per-term match counts.", "items": { "additionalProperties": {}, "properties": { "expanded_to": { "description": "Spellings and abbreviations it expanded to." }, "paragraphs": { "description": "Paragraphs containing it.", "type": "number" }, "term": { "description": "The term as given.", "type": "string" } }, "type": "object" }, "type": "array" }, "toc_omitted": { "description": "The section's table-of-contents line was omitted.", "type": "boolean" }, "total_matches": { "description": "Matching paragraphs.", "type": "number" }, "truncated": { "description": "More passages matched than were returned.", "type": "boolean" }, "version": { "description": "On a dual-version section: {label: in-force | update-18-optional, dates, note}." } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "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" }, "limit": { "description": "Max chars to return from offset (200-24000; default 24000).", "maximum": 24000, "minimum": 1, "type": "integer" }, "obligation_id": { "minLength": 1, "type": "string" }, "offset": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "obligation_id" ], "type": "object" }, "name": "get_obligation", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "get_obligation result.", "properties": { "alias_note": { "description": "Explains resolved_from_alias.", "type": "string" }, "authority": { "description": "The document and section title as published.", "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" ] }, "canonical_id": { "description": "Set when this register is a same-text copy of that register.", "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" }, "content_hash": { "description": "Hash of the stored text.", "type": "string" }, "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." }, "editorial": { "description": "Reserved; summary is null (the text is not summarized)." }, "effective_date": { "description": "Effective date, or null.", "type": [ "string", "null" ] }, "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "fetched_at": { "description": "When the source was retrieved.", "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.", "items": { "additionalProperties": {}, "properties": { "as_written": { "description": "The figure as written, when it differs.", "type": "string" }, "offset": { "description": "Position in this response's text.", "type": "number" }, "unit": { "description": "percent, percentage_point, currency, duration, ratio, fraction, age, day_of_period, time, count, number or temperature.", "type": "string" }, "value": { "description": "The figure as a number string, e.g. \"43\", \"50/50\".", "type": "string" } }, "type": "object" }, "type": "array" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "next_offset": { "description": "The next page's offset, or null when the section ends here.", "type": [ "number", "null" ] }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "obligation_id": { "description": "The obligation (section) id.", "type": "string" }, "other_version": { "description": "On a dual-version section: the other version ({obligation_id, version, dates})." }, "paging": { "additionalProperties": {}, "description": "Page N of M.", "properties": { "how": { "description": "The server's paging note.", "type": "string" }, "next_offset": { "description": "The next page's offset, or null at the end.", "type": [ "number", "null" ] }, "page": { "description": "This page's number, or null past the end.", "type": [ "number", "null" ] }, "pages": { "description": "Total pages at this page size.", "type": "number" } }, "type": "object" }, "register_id": { "description": "The register (source document) id.", "type": "string" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "resolved_from_alias": { "description": "The retired obligation id requested; its text is now at obligation_id.", "type": "string" }, "section": { "description": "The section designation.", "type": "string" }, "snapshot_id": { "description": "The stored source snapshot.", "type": "string" }, "source_url": { "description": "The regulator's URL for the document.", "type": "string" }, "started_mid_section": { "description": "Text before chars_offset is not in this response.", "type": "boolean" }, "status": { "description": "E.g. current, superseded, unknown.", "type": "string" }, "superseded_by": { "description": "The replacing register, or null.", "type": [ "string", "null" ] }, "truncated": { "description": "More text follows this response.", "type": "boolean" }, "verbatim": { "description": "The regulator's exact text, between <<<BEGIN VERBATIM>>> and <<<END VERBATIM>>>.", "type": "string" }, "version": { "description": "On a dual-version section: {label: in-force | update-18-optional, dates, note}." }, "version_changes": { "description": "With compare_versions: sentences Update 18 deletes and adds, or {error: \"single_version\"}." } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "id": { "description": "Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc.", "maxLength": 64, "pattern": "^[a-z0-9-]+$", "type": "string" }, "offset": { "description": "Row offset for the next page (the previous page's next_offset).", "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "get_playbook_kit", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "get_playbook_kit result.", "properties": { "areas": { "description": "For a corpus-register kit: its areas and registers." }, "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "how_to_read": { "description": "For a corpus-register kit: the server's reading note.", "type": "string" }, "id": { "description": "The playbook id.", "type": "string" }, "kit": { "description": "The kit's kind, source and version." }, "next_offset": { "description": "The next page's offset, or null when the kit is complete.", "type": [ "number", "null" ] }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "offset": { "description": "Where this page starts.", "type": "number" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "rows": { "description": "Kit rows: verbatim rule text with citations." }, "rows_returned": { "description": "Rows in this page.", "type": "number" }, "rows_total": { "description": "Rows in the kit.", "type": "number" }, "search_family": { "description": "For a corpus-register kit: its search family." }, "valid_ids": { "description": "On unknown_playbook: the valid ids.", "items": { "type": "string" }, "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "id": { "description": "Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc.", "maxLength": 64, "pattern": "^[a-z0-9-]+$", "type": "string" }, "name": { "description": "Reference name, one of the playbook's `references`.", "maxLength": 64, "pattern": "^[A-Za-z0-9-]+$", "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "name": "get_playbook_reference", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "get_playbook_reference result.", "properties": { "content": { "description": "The reference's content." }, "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "id": { "description": "The playbook id.", "type": "string" }, "name": { "description": "The reference name.", "type": "string" }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "valid_ids": { "description": "On unknown_playbook: the valid ids.", "items": { "type": "string" }, "type": "array" }, "valid_names": { "description": "On unknown_reference: the valid names.", "items": { "type": "string" }, "type": "array" } }, "type": "object" } }, { "description": "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`.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "register_id": { "minLength": 1, "type": "string" } }, "required": [ "register_id" ], "type": "object" }, "name": "get_reg", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "get_reg result.", "properties": { "also_at": { "description": "Same-text copies of this register.", "items": { "type": "string" }, "type": "array" }, "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" ] }, "canonical_id": { "description": "Set when this register is a same-text copy of that register.", "type": "string" }, "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." }, "effective_date": { "description": "Effective date, or null.", "type": [ "string", "null" ] }, "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "obligation_id": { "description": "Echoed on error.", "type": "string" }, "obligations": { "description": "The register's obligations (a manifest, not regulator text).", "items": { "additionalProperties": {}, "properties": { "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" }, "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." }, "mandatory_date": { "description": "On an Update 18 revision: when it becomes mandatory.", "type": "string" }, "obligation_id": { "description": "The obligation (section) id.", "type": "string" }, "other_version": { "description": "On a dual-version section: the other version's obligation_id.", "type": "string" }, "section": { "description": "The section designation or title.", "type": "string" }, "version": { "description": "On a dual-version FHA section: \"in-force\" or \"update-18-optional\".", "type": "string" }, "will_truncate": { "description": "The section exceeds one 24,000-char page.", "type": "boolean" } }, "type": "object" }, "type": "array" }, "register_id": { "description": "The register id.", "type": "string" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "status": { "description": "E.g. current, superseded, unknown.", "type": "string" }, "superseded_by": { "description": "The replacing register, or null.", "type": [ "string", "null" ] } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": {}, "type": "object" }, "name": "list_playbooks", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "list_playbooks result.", "properties": { "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "next": { "description": "The server's note on the next step.", "type": "string" }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "playbooks": { "description": "The available playbooks.", "items": { "additionalProperties": {}, "properties": { "id": { "description": "The playbook id.", "type": "string" }, "prompt": { "description": "The matching MCP prompt name.", "type": "string" }, "title": { "description": "The playbook's name.", "type": "string" }, "user_provides": { "description": "What the user supplies." }, "version": { "description": "The playbook's version." }, "what": { "description": "What it does.", "type": "string" }, "when": { "description": "When it applies.", "type": "string" } }, "type": "object" }, "type": "array" }, "privacy": { "description": "How user material is handled." }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "citation": { "minLength": 1, "type": "string" } }, "required": [ "citation" ], "type": "object" }, "name": "lookup_citation", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "lookup_citation result.", "properties": { "also_at": { "description": "Identical copies of the section (other register ids).", "items": { "type": "string" }, "type": "array" }, "also_at_note": { "description": "Explains also_at.", "type": "string" }, "candidates": { "description": "On ambiguous: the registers the citation could mean.", "items": { "type": "string" }, "type": "array" }, "canonical_id": { "description": "Set when the register is a same-text copy of that register.", "type": "string" }, "citation": { "description": "The citation as given (on unparsed).", "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "handbook": { "description": "When the citation names a whole handbook: its outline." }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "parsed": { "description": "The parse of the citation ({kind, canonical, ...})." }, "register_id": { "description": "The register the citation resolves to.", "type": "string" }, "related": { "description": "Documents that cite or amend the section ({register_id, relation}); not its text." }, "related_note": { "description": "Explains related.", "type": "string" }, "renumbered_from": { "description": "The old register, when the section was renumbered.", "type": "string" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "superseded_candidates": { "description": "Candidates dropped because a current register replaces them.", "items": { "type": "string" }, "type": "array" }, "superseded_register_id": { "description": "The register holding the prior text of this section.", "type": "string" }, "topics": { "description": "Topics under a structured citation." }, "truncated": { "description": "The candidate scan hit its limit.", "type": "boolean" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "currency_kind": { "description": "Restricts results to sections carrying this currency signal; \"any\" = any signal.", "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" }, "family": { "enum": [ "hud", "va", "fnma", "fhlmc", "gnma", "usda", "sba" ], "type": "string" }, "limit": { "maximum": 25, "minimum": 1, "type": "integer" }, "query": { "minLength": 1, "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search_regs", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "search_regs result.", "properties": { "cited": { "description": "When the query is a citation: {citation, register_ids}." }, "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "handbook": { "description": "When the query names a whole handbook: its outline." }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "reason": { "description": "With empty results: empty_query, no_match or no_match_above_threshold.", "type": "string" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "results": { "description": "Ranked sections, highest rank_score first (may be empty).", "items": { "additionalProperties": {}, "properties": { "also_at": { "description": "Same-text copies dropped from the list." }, "authority": { "description": "The document and section 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" ] }, "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." }, "excerpt": { "description": "A verbatim fragment near the match; not the whole rule.", "type": "string" }, "mandatory_date": { "description": "On an Update 18 revision: when it becomes mandatory.", "type": "string" }, "match": { "description": "all_terms or partial.", "type": "string" }, "missing_terms": { "description": "On partial: the query terms this section lacks.", "items": { "type": "string" }, "type": "array" }, "obligation_id": { "description": "The obligation (section) id.", "type": "string" }, "obligation_type": { "description": "note or index: not rule text.", "type": "string" }, "other_version": { "description": "On a dual-version section: the other version's obligation_id.", "type": "string" }, "rank_score": { "description": "The score results are ordered by.", "type": "number" }, "register_id": { "description": "The register id.", "type": "string" }, "section": { "description": "The section title.", "type": "string" }, "section_status": { "description": "\"deleted\": a deleted-section stub.", "type": "string" }, "section_status_date": { "description": "Date of section_status.", "type": "string" }, "special_program": { "description": "The special program this section belongs to (ranked x0.5).", "type": "string" }, "version": { "description": "On a dual-version FHA section: \"in-force\" or \"update-18-optional\".", "type": "string" } }, "type": "object" }, "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "id": { "description": "Playbook id: one of fnma-ai-lender-letter, fha-underwriting-qc, va-loan-qc, usda-loan-qc.", "maxLength": 64, "pattern": "^[a-z0-9-]+$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "start_playbook", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "start_playbook result.", "properties": { "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "id": { "description": "The playbook id.", "type": "string" }, "instructions": { "description": "The playbook's workflow instructions." }, "kit": { "description": "The rule kit ({kind, source, version, load_with})." }, "load_reference_with": { "description": "How a reference is loaded, or null when there are none.", "type": [ "string", "null" ] }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "privacy": { "description": "How user material is handled." }, "references": { "description": "The playbook's reference names.", "items": { "type": "string" }, "type": "array" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "stages": { "description": "The workflow's stages." }, "title": { "description": "The playbook's name.", "type": "string" }, "user_provides": { "description": "What the user supplies." }, "valid_ids": { "description": "On unknown_playbook: the valid ids.", "items": { "type": "string" }, "type": "array" }, "version": { "description": "The playbook's version." } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "register_id": { "type": "string" }, "text": { "minLength": 1, "type": "string" } }, "required": [ "text" ], "type": "object" }, "name": "verify_quote", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "description": "verify_quote result.", "properties": { "also_in_obligation_id": { "description": "On a match in an amending issuance: the amended obligation that also carries the text.", "type": "string" }, "checked_against": { "description": "Source documents checked (document, edition, retrieval date)." }, "checked_snapshot_ids": { "description": "Snapshot ids checked." }, "coverage": { "description": "Share of the text's words found in the source (0 to 1).", "type": "number" }, "differences": { "description": "On a near miss: {closest_source, missing_from_quote, extra_in_quote}." }, "elisions": { "description": "On composed: gaps (marked or not).", "type": "number" }, "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" }, "fallback": { "description": "On daily_capacity_reached: where the full corpus can be downloaded.", "type": "string" }, "furniture_ignored": { "description": "A page footer or running head was ignored.", "type": "boolean" }, "guidance": { "description": "On a refusal or empty search: the server's explanation.", "type": "string" }, "hint": { "description": "On an error: the server's explanation.", "type": "string" }, "limit": { "description": "On not_checked: the word limit.", "type": "number" }, "list_markers_ignored": { "description": "Added list markers were ignored.", "type": "boolean" }, "mandatory_date": { "description": "On an Update 18 revision: when it becomes mandatory.", "type": "string" }, "matched_against": { "description": "The checked document the text matched.", "type": "string" }, "matched_obligation_id": { "description": "The obligation whose stored text contains the passage.", "type": "string" }, "matched_register_id": { "description": "The register whose stored text contains the passage.", "type": "string" }, "matched_version": { "description": "current, superseded (a prior version) or update-18-optional.", "type": "string" }, "note": { "description": "A note on this result.", "type": "string" }, "notice": { "description": "Terms notice: research use only, not legal advice.", "type": "string" }, "omissions": { "description": "On composed: short source phrases skipped between pieces." }, "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.", "enum": [ "exact", "normalized", "composed", "not_found", "not_checked" ], "type": "string" }, "reason": { "description": "On not_checked: too_long.", "type": "string" }, "register_id": { "description": "Echoed on not_found.", "type": "string" }, "resets": { "description": "On daily_capacity_reached: when capacity resets (00:00 UTC).", "type": "string" }, "segments": { "description": "On composed: source pieces the text is assembled from.", "type": "number" }, "spacing_ignored": { "description": "Only spacing differs.", "type": "boolean" }, "superseded_by": { "description": "On superseded: the current register.", "type": [ "string", "null" ] }, "superseded_register_id": { "description": "On superseded: the register holding the prior text.", "type": "string" }, "typography_folded": { "description": "Matched after folding quotes and dashes.", "type": "boolean" }, "unsupported": { "description": "On not_found: spans with no source support." }, "words": { "description": "On not_checked: the word count.", "type": "number" } }, "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:9f500eac7bc807980a108a5c47140fd59ae3988f8d6ab07483ea95a4533cb5d9 | sha256sum