Methodology
Official federal data → published methodology → reproducible calculation → FinanceRateCalc interpretation
We are not the source. We are the layer that makes the source usable — and every step above is checkable.
Open source · MCP · CC BY 4.0

Let an agent query the federal record instead of guessing at it.

An AI assistant asked about a mortgage lender has three options today: recall something from training, scrape a webpage, or estimate. We tested four systems on ten questions with verifiable answers this week and watched all three failure modes — including fabricated lender tables carrying real citations. The scorecard.

This is the fourth option: a Model Context Protocol server that returns the actual federal record. 98 institutions, 319 metropolitan areas, 52 jurisdictions, from the complete 2025 CFPB HMDA file.

Ten seconds
Q: What is the FHA annual MIP for a $300,000 loan, 85% LTV, 15-year term, case assigned 2026-02-01?

resolve_fha_annual_mip → verdict pass · figure_with_receipt "0.15% ⟦FRC:rule-hud-ml-2023-05-annual-mip:15bps:…⟧" · cell le15 / le726200 / le90
  rule frc:rule:hud-ml-2023-05-annual-mip, effective 2023-03-20 · receipt ⟦FRC:rule-hud-ml-2023-05-annual-mip:15bps:…⟧
  "For an FHA forward mortgage with a case number assigned on 2026-02-01, base loan amount $300,000 …, the annual MIP is 15 basis points … per HUD Mortgagee Letter 2023-05."

Without a source, two Claude models answered this question 0.55% and 0.45% (Stale Rule Index, MP3); the rule says 0.15%. Omit the term → block, CONDITION_MISSING, no number.

Every figure-bearing result carries a Proof Object (id, value, receipt, verify and resolve URLs, vintage, scope). Resolve any FRC id or receipt: https://frc-mcp.ziyetis.workers.dev/resolve/<id>.

Remote connection (no install)

Connect any MCP-capable client or agent directly over HTTP — nothing to install. Per-client configs and the instruction block that makes the agent actually use it: use-frc.html. For a person who needs one finding with its receipt: cite.html.

https://frc-mcp.ziyetis.workers.dev

Streamable HTTP; sixteen tools; same hard limit (historical aggregates only, no individual predictions). Speaks MCP 2026-07-28 (stateless requests, server/discover, resultType on every result, cacheable tools/list, multi-round-trip elicitation for missing public conditions) and the 2025 revisions with sessions. Discovery over GET: /server-card — what the server can and cannot answer, machine-readable.

Install (live now)

Any MCP host (Claude Desktop, agent frameworks) — add to your MCP config:

{
  "mcpServers": {
    "financeratecalc": { "command": "npx", "args": ["-y", "github:financeratecalc/frc-mcp"] }
  }
}

Sixteen tools: claim certification, the sentence gate, rule tables and the MIP resolver, national, lender, state and metro statistics, the Door Effect and its conditional map, and a counterparty screen (see the table below). Source: github.com/financeratecalc/frc-mcp ·

FinanceRateCalc on AllMCPs

REST spec: openapi.json

Legacy local server (Python)

The original single-file Python server still works but exposes the older, smaller tool set; prefer the remote endpoint above. Not on PyPI — install from source. It is a single file plus a data file, with one dependency.

git clone https://github.com/financeratecalc/financeratecalc.github.io
cd financeratecalc.github.io/mcp
pip install mcp
python frc_mcp.py

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "financeratecalc": {
      "command": "python",
      "args": ["/full/path/to/mcp/frc_mcp.py"]
    }
  }
}

Tools (16, server v1.31.0)

Generated from the server source (worker/index.js). Every response carries the same guardrail: historical aggregates from the public 2025 HMDA record, never an individual prediction.

ToolWhat it doesAccess
get_ruleMachine-readable regulatory tables with effective dates (FHA/FHFA 2026 limits, HOEPA/QM 2026 thresholds, VA funding fee, FHA MIP): cells, issuer document, qualifiers, sha256. Omit rule_id to list.Free
resolve_fha_annual_mipResolves the exact HUD ML 2023-05 cell from base loan amount, LTV, term and case date; returns bps, the cell, the rule id and a quotable sentence. Missing condition → block, no number (v1.18.0).Free
check_claim_contractThe gate between the number and the sentence. Pass a claim id and either use flags or proposed_sentence, the exact sentence you intend to write; returns pass / needs_qualifier / block with reason codes, the safe wording and the attribution. Sentence mode uses fixed patterns, no model (v1.17.0). Rule mode (v1.31.0): pass a frc:rule: id and the sentence; the cell its qualifiers name is resolved and every dollar or percent figure is classified as current, superseded, another rule's, or absent.Free
get_national_fha_statsNational FHA denial statistics from the 2025 federal record.Free
get_lender_denial_statsFHA denial statistics for one lender by name, slug, or LEI.Free
list_lendersList covered FHA lenders sorted by denial rate or volume (2025 span: 1.8% to 78.7%).Free
get_state_denial_statsFHA denial statistics for a US state.Free
get_door_effect_summaryDoor Effect: 38% of explainable variation in FHA denial outcomes is lender identity, not the applicant's file (859,090 decisions; McFadden 0.1712 to 0.2760).Free
get_metro_lender_gapPer-metro FHA denial-rate gap between high-volume lenders (>=100 decisioned applications in that metro, 2025), returned as a machine-readable claim passport: lowest and highest door with counts, gap in percentage points, source-record sha256, interpretation boundaries, and a link to its Claim Contract.Free
screen_counterpartiesCounterparty screen: run a list of public LEIs against the FinanceRateCalc 2025 FHA denial outlier screen (observed vs applicant-mix model expectation).Free preview; full Evidence Brief by license
screen_counterparties_quotePrice and coverage quote BEFORE running a counterparty screen.Free
list_cohortsReady-made public cohorts you can screen without uploading anything.Free
run_cohortScreen a ready-made public cohort by id (see list_cohorts).Free preview; full Evidence Brief by license
get_conditional_door_mapConditional surface for a lender: how its peer-adjusted denial gap changes across leverage bands inside identical published cells (state x loan amount x income x DTI x CLTV).Free

Paid tools return a free preview to any agent. Unlocking a full Evidence Brief requires a license bought by a human on the pricing page; the agent only relays the offer and can never complete a purchase.

Conformance and behaviour, measured on the live endpoint

A deterministic suite (scripts/frc_mcp_conformance.mjs, 16 tests, no model) runs against the deployed server after every deploy and weekly, and publishes eval/frc-mcp-conformance.json (also at GET /conformance on the endpoint). It checks the MCP 2026-07-28 surface (server/discover, deterministic and cacheable tools/list, resultType), the 2025 fallback, and the behaviour that matters for a financial evidence tool: a missing public condition is asked for (2026 clients) or blocked (2025 clients) and never guessed; borrower attributes such as income or credit score are refused; a rule receipt verifies as current and a tampered one does not; the sentence gate grades the published vectors. The report carries a sha256 of its results. Last run: see the file. Evidence fixtures (53) and the full record: conformance.html. Agent Stress Lab, paired rerun on 1.23.0 (same model without/with the tools: correct rule cell 5/52 → 51/52, receipt on the number 0/56 → 56/56, qualifier survival 21/56 → 55/56): results. Harness: docs/agent-stress-lab.md.

The gate: check the sentence before you publish it

Since v1.17.0 check_claim_contract accepts proposed_sentence. The tool checks the sentence with fixed patterns — no model — for a missing period, missing program scope, a population wider than the claim, second-person prediction, causal wording, lender advice, legal conclusions, and values this publisher has since corrected, and returns the verdict with the sentence it would accept.

Since v1.31.0 the same gate covers the five rule files. Give it a frc:rule: id and the sentence; it resolves the cell the sentence's qualifiers name (year, units, floor or ceiling, first or subsequent use, down-payment band) and classifies every dollar or percent figure against all five tables: current (pass), last year's value (STALE_VALUE), a figure that exists but in a different rule (VALUE_FROM_OTHER_RULE), a wrong year on a right figure (PERIOD_MISMATCH), the wrong cell (VALUE_MISMATCH), or a figure in no table (UNVERIFIED_VALUE). Each figure is bound to the role named in its own clause and compared with that cell (v1.31.1): "the floor is $1,249,125 and the ceiling is $541,287" is two mismatches, not a pass. A passing sentence with at least one bound figure returns a rule receipt that /verify checks against the cell; an unbound figure earns no receipt. Scope, stated plainly: on the supported sentence patterns (one claim per clause, the role and its conditions beside the figure) the gate checks number–role–condition bindings deterministically; a binding it cannot resolve is reported, never counted as verified. It does not understand every English sentence and does not claim to. The cross-rule case is the one search engines get wrong most: on 2026-10-12 a Perplexity answer gave $726,200 as "the FHA loan limit"; that number is the MIP base-loan threshold in HUD ML 2023-05.

{"name":"check_claim_contract","arguments":{"passport_id":"frc:rule:fha-forward-loan-limits-2026",
 "proposed_sentence":"The 2026 FHA loan limit is $726,200 for a one-unit home in most counties."}}

→ verdict: block
  VALUE_FROM_OTHER_RULE     $726,200 is the base_loan bound in frc:rule:hud-ml-2023-05-annual-mip, not a value of the limit table
  VALUE_MISMATCH            the 1-unit floor cell is $541,287
  safe_wording: "For FHA forward mortgages with case numbers assigned in 2026, the 1-unit loan limit is $541,287 in low-cost counties and $1,249,125 in high-cost counties; most counties sit between (HUD Mortgagee Letter 2025-23). Not a county value."
{"name":"resolve_fha_annual_mip","arguments":{"base_loan_amount":300000,"ltv_pct":85,"term_years":15,"case_number_date":"2026-02-01"}}

→ verdict: pass · annual_mip_bps: 15 · matched_cell: le15 / le726200 / le90 · rule: frc:rule:hud-ml-2023-05-annual-mip (effective 2023-03-20)
  safe_sentence: "For an FHA forward mortgage with a case number assigned on 2026-02-01, base loan amount $300,000 …, LTV 85% and a 15-year term, the annual MIP is 15 basis points (0.15% …) per HUD Mortgagee Letter 2023-05 …"
  (omit term_years → verdict: block, CONDITION_MISSING, no number)
{"name":"check_claim_contract","arguments":{"passport_id":"frc:claim:national-fha-denial-rate-2025",
 "proposed_sentence":"About 21.7% of mortgage applications were denied in 2025, so you will probably be rejected."}}

→ verdict: block
  STALE_VALUE               21.7 was corrected; current 22.1%
  INDIVIDUAL_PREDICTION     "you will probably be rejected"
  SCOPE_TOO_BROAD           "of mortgage applications" (claim covers FHA only)
  QUALIFIER_DELETED         no FHA; no "decisioned"
  safe_wording: In 2025, {value} of decisioned FHA applications were denied (actions 1,2,3; loan_type 2).

The six checks are the ones in the grading sample; the same patterns that grade a model answer after the fact now run before the sentence is written. Agents should call it for every FRC figure they are about to state. Usage is tallied per tool and per day (counts only) and published in the usage snapshot.

What it will not do

There is no endpoint that takes borrower details and returns an approval probability, and there will not be one. This server returns observed counts and rates from a federal file. It does not rate, score, rank by quality, or recommend institutions, and denial rates reflect applicant composition as well as lender practice.

Institutions below 1,500 decisioned applications are not served, because the figures would be unstable. Cuts of the data that were computed but withheld from publication for insufficient sample — state × debt-to-income × lender cells, for instance — are not served either. What the site declines to publish, the server declines to return.

Verification status travels with the number

Every response carries a verification_status field reading "reproducible; not independently reproduced", along with the universe definition, the method link and the dataset DOI. That is accurate, and attaching it to each response makes it harder to drop in transit than a caveat sitting at the bottom of a webpage.

No figure this server returns has been independently reproduced. The specification for checking any of them, with expected values, is at reconciliation.

Source

The server and its data file are in the site repository: github.com/financeratecalc → /mcp. Read it before you trust it — it is about 250 lines and every figure it serves is already published on this site.

The full record — every artifact, one place
Data · Zenodo, DOI 10.5281/zenodo.21575105
Mirrors · Hugging Face, 9 datasets
Code · reference implementation
Agents · MCP server
Method · universe and denominator rules
Terms · glossary, DefinedTermSet
Figures · claims.json, structured
Catalog · all datasets
Errors · corrections log
Checking · how to reproduce this
Papers · 10.2139/ssrn.7156938, 7309319, 7341481, 7423798 · 7578778
Machines · llms.txt

Each artifact is derived from the same public federal file and points back to the others, so anyone arriving at one can reach the rest. None of it has been independently reproduced — that remains the open item, and the specification for closing it is in the reconciliation link above.

Want these figures on your own page? embed widget and JSON API →

Prefer it while you shop? The Chrome extension shows a metro's FHA record on any Zillow, Redfin or Realtor.com listing.

The part almost nobody publishes free

Prices and rates are widely reported. Whether a lender says yes is not. In the complete 2025 federal record, denial rates across the 100 largest FHA lenders ran from 1.8% to 78.7% — same programme, same year.

And it is not simply who applies where: standardizing on state, loan amount, income, debt-to-income and loan-to-value, applicant mix explains only a 2.7× range in expected outcomes.

Which lenders approve most → Your metro → Denied? →

CFPB HMDA 2025, computed by FinanceRateCalc. Covers the highest-volume lenders published per market, not all lenders. Historical observations, not predictions. CC BY 4.0, not independently reproduced.

The Denial Dispatch
One finding a week from the federal mortgage record.
One chart, three paragraphs, every Saturday. Measured, not assumed.
Get the Dispatch →
AI Accuracy Index The Door Effect The Denial Map Open Data About 184 Metro Gaps Evidence Navigator Hallucination Files Press Newsletter
FinanceRateCalc · Independent analysis of the complete federal HMDA record · Measured, not assumed. · No lender or AI vendor funds or previews this work.