Skip to main content
Glama

C4C: Mortgage Industry Regulations

Look up citation

lookup_citation
Read-onlyIdempotent

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. A section the regulator renumbered returns kind "renumbered": register_id is the section under its new number, renumbered_from the old register, and no text is given under the old number.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
citationYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
hintNoOn an error: the server's explanation.
kindNo"renumbered": the regulator gave this section a new number; no text is given under the old one.
noteNoA note on this result.
errorNoPresent only on an error or refusal: not_found, ambiguous, unparsed, empty_terms, unknown_playbook, unknown_reference, offset_out_of_range, daily_capacity_reached.
noticeNoTerms notice: research use only, not legal advice.
parsedNoThe parse of the citation ({kind, canonical, ...}).
resetsNoOn daily_capacity_reached: when capacity resets (00:00 UTC).
topicsNoTopics under a structured citation.
also_atNoIdentical copies of the section (other register ids).
relatedNoDocuments that cite or amend the section ({register_id, relation}); not its text.
citationNoThe citation as given (on unparsed).
fallbackNoOn daily_capacity_reached: where the full corpus can be downloaded.
guidanceNoOn a refusal or empty search: the server's explanation.
handbookNoWhen the citation names a whole handbook: its outline.
page_urlNoThe section's page on claudeforcompliance.com (verbatim text, currency notices, link to the regulator).
truncatedNoThe candidate scan hit its limit.
candidatesNoOn ambiguous: the registers the citation could mean.
source_urlNoThe regulator's URL for the resolved section's document.
obligationsNoThe register's sections ({obligation_id, section}; when no text is inlined, `opening`: the first words of the section's verbatim text, cut and marked with ...).
register_idNoThe register the citation resolves to.
also_at_noteNoExplains also_at.
canonical_idNoSet when the register is a same-text copy of that register.
related_noteNoExplains related.
requested_idNoOn kind renumbered: the old id asked for.
text_changedNoOn kind renumbered: false when the text moved word for word.
renumbered_inNoOn kind renumbered: the regulator's posting that renumbered it.
renumbered_onNoOn kind renumbered: when (YYYY-MM).
renumbered_fromNoThe old register, when the section was renumbered.
superseded_candidatesNoCandidates dropped because a current register replaces them.
superseded_register_idNoThe register holding the prior text of this section.
renumbered_from_citationNoOn kind renumbered: the section's old citation.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedOutput schema / properties / kind
      Added value: +{
      +  "description": "\"renumbered\": the regulator gave this section a new number; no text is given under the old one.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / renumbered_from_citation
      Added value: +{
      +  "description": "On kind renumbered: the section's old citation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / renumbered_in
      Added value: +{
      +  "description": "On kind renumbered: the regulator's posting that renumbered it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / renumbered_on
      Added value: +{
      +  "description": "On kind renumbered: when (YYYY-MM).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / requested_id
      Added value: +{
      +  "description": "On kind renumbered: the old id asked for.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / text_changed
      Added value: +{
      +  "description": "On kind renumbered: false when the text moved word for word.",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changed
    • addedOutput schema / properties / obligations
      Added value: +{
      +  "description": "The register's sections ({obligation_id, section}; when no text is inlined, `opening`: the first words of the section's verbatim text, cut and marked with ...)."
      +}
  3. Changed2 schema fields changed
    • addedOutput schema / properties / page_url
      Added value: +{
      +  "description": "The section's page on claudeforcompliance.com (verbatim text, currency notices, link to the regulator).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / source_url
      Added value: +{
      +  "description": "The regulator's URL for the resolved section's document.",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$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"
      +}
  5. First observed

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/openWorldHint=false, so the safety profile is covered. The description goes well beyond that with genuine behavioral policy: no guessing on ambiguity, no near-match suggestions, related/also_at semantics, and renumbered sections returning no text under the old number. Some of this restates output fields the output schema likely already defines, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, but the remainder is a dense single paragraph of parentheticals mixing errors, handbook resolution, aliasing and renumbering. It is content-rich but not scannable; the error taxonomy in particular would earn more as discrete structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be re-explained, and the description still covers input formats, all three error modes, and tricky resolution cases (handbook outline, related/also_at, renumbered). Only the downstream relationship to get_reg/verify_quote is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% — the single `citation` parameter has no description in the schema. The description compensates strongly by enumerating accepted citation syntaxes ('4000.1 II.A.8.d', '38 U.S.C. 3737', 'HB-1-3555 11.3'), which is exactly the format information an agent needs to populate the field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolves) and resource (regulatory citation) with a concrete output (register_id), and gives eight example citation formats spanning HUD, Fannie, Freddie, VA, SBA and USDA. An agent can immediately distinguish this from siblings like get_reg (which takes an id) or search_regs (which takes free text).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples imply this is the citation-to-register_id front door of a pipeline, but the description never names an alternative or states when to use this versus get_reg/search_regs/find_in_section. Usage is inferred from the input shape rather than stated, and no preconditions or follow-on step are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.