Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

RateAPI — live US mortgage, auto, HELOC, personal & deposit rates

REMOTE · MCP.RATEAPI.DEV · SCANNED SEP 21

Live US mortgage, auto, HELOC, personal & deposit rates with evidence, plus who can join each lender

Available components

+3 this week 83 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security78
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
  • HTTPS enforcement could not be verified: the plaintext port answered with HTTP 405, which proves neither a plaintext path nor enforcement. View diagnostics → Unverified
  • HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
  • DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
  • The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
Schema Quality & AI Usability79
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 21726 tokens (~188/item across 115 items; 89 tools + 26 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management80
  • Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 95% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 91 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28. See how to fix → Fail
  • Supports UI / widget rendering.Pass
Install

How do I install the RateAPI — live US mortgage, auto, HELOC, personal… MCP server?

RateAPI — live US mortgage, auto, HELOC, personal… is a hosted endpoint at https://mcp.rateapi.dev/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.rateapi.dev

# add to Claude Code
claude mcp add --transport http dev-rateapi-mcp 'https://mcp.rateapi.dev/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "dev-rateapi-mcp": {
      "url": "https://mcp.rateapi.dev/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "dev-rateapi-mcp": {
      "type": "http",
      "url": "https://mcp.rateapi.dev/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.dev-rateapi-mcp]
url = "https://mcp.rateapi.dev/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-rateapi-mcp": {
      "type": "remote",
      "url": "https://mcp.rateapi.dev/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add dev-rateapi-mcp --url 'https://mcp.rateapi.dev/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  dev-rateapi-mcp:
    url: "https://mcp.rateapi.dev/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "dev-rateapi-mcp": {
      "Transport": "http",
      "Url": "https://mcp.rateapi.dev/mcp"
    }
  }
}
# add to Vellum
assistant mcp add dev-rateapi-mcp -t streamable-http -u 'https://mcp.rateapi.dev/mcp'
// mcp.json
{
  "mcpServers": {
    "dev-rateapi-mcp": {
      "type": "http",
      "url": "https://mcp.rateapi.dev/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 +1
    • Resource “Quickstart: your first RateAPI call” was removed functional
    • New resource “Quickstart: choose the CLI, MCP, or REST” functional
  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

  • 8 Sept 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “get_eligibility_coverage” rewrote its description, which is the text the model reads security
    • Tool “search_eligibility_entities” rewrote its description, which is the text the model reads security
    • “search_eligibility_entities” reworded the description of “query” cosmetic
    • “search_eligibility_entities” made “query” optional cosmetic
  • 7 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “find_reachable_offers” rewrote its description, which is the text the model reads security
    • New tool “compare_personal_access_catalogs” functional
    • New tool “compare_reachable_offers” functional
    • New tool “evaluate_eligibility_cohort” functional
    • New tool “get_eligibility_changes” functional
    • New tool “get_personal_access_catalog” functional
    • New tool “get_product_access_envelopes” functional
    • New tool “resolve_eligibility_entities” functional
    • New tool “search_eligibility_entities” functional
    • “check_membership_eligibility” added an optional parameter “association_org_ids” cosmetic
    • “check_membership_eligibility” added an optional parameter “employer_org_ids” cosmetic
    • “check_membership_eligibility” added an optional parameter “relative_association_org_ids” cosmetic
    • “check_membership_eligibility” added an optional parameter “relative_employer_org_ids” cosmetic
    • “check_membership_eligibility” added an optional parameter “relative_school_org_ids” cosmetic
    • “check_membership_eligibility” added an optional parameter “school_org_ids” cosmetic
    • “check_membership_eligibility” added an optional parameter “worship_org_ids” cosmetic
    • “find_eligible_credit_unions” added an optional parameter “association_org_ids” cosmetic
    • “find_eligible_credit_unions” added an optional parameter “employer_org_ids” cosmetic
    • “find_eligible_credit_unions” added an optional parameter “relative_association_org_ids” cosmetic
    • “find_eligible_credit_unions” added an optional parameter “relative_employer_org_ids” cosmetic
    • “find_eligible_credit_unions” added an optional parameter “relative_school_org_ids” cosmetic
    • “find_eligible_credit_unions” added an optional parameter “school_org_ids” cosmetic
    • “find_eligible_credit_unions” added an optional parameter “worship_org_ids” cosmetic
    • “find_reachable_offers” reworded the description of “person” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Probed https://mcp.rateapi.dev/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=rateapi.dev CN=WE1,O=Google Trust Services,C=US 5 Sept 2026 4 Dec 2026 ECDSA 256 ECDSA-SHA256 a3bbdbbdf7ccbfc9131d75153aa5997b
SANs: rateapi.dev, *.rateapi.dev
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.rateapi.dev. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
dev. present 60074 8 Verified
rateapi.dev. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://mcp.rateapi.dev/.well-known/oauth-protected-resource"

Bearer resource_metadata="https://mcp.rateapi.dev/.well-known/oauth-protected-resource"

Protected resource metadata

Document https://mcp.rateapi.dev/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://mcp.rateapi.dev
Authorisation server https://mcp.rateapi.dev

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.rateapi.dev/mcp Verified 200
http (plaintext) http://mcp.rateapi.dev/mcp Inconclusive 405
MCP tools · 89 exposed · ~19,967 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
rate_sanity_check ~1,052

RECOMMENDED WHEN THE USER ALREADY HAS A QUOTE: answers "is this rate any good?" for a specific number a borrower was offered. Use this whenever someone says they were quoted / offered / approved at a rate and wants to know if it is fair, good, competitive, high, or a rip-off — e.g. "I got offered 6.9% on a 30-year in Ohio, is that fair?", "my dealer quoted 8.4% on a used car loan", "is 7.1% high for a HELOC in TX?". Given a product_type, state, and rate (and optional apr/fees/amount/term_months), returns the percentile of the quote within the live market distribution, a verdict (market_leading, plausible, suspicious_low, overpriced), whether it falls below the known product rate floor, and the market min/median/max with an as_of date. Prefer this over get_financing_decision for quote-in-hand questions: the user wants a verdict on THEIR number, not a list of other offers. Set include_better_offers=true to get named statewide lenders beating the quote. When the user provides a ZIP, set include_nearby_offers=true to pair product-matched rates with the closest credit unions by NCUA-reported branch location; distances are straight-line ZIP-center estimates, never driving distance. Every response also returns `share_url` — a link to this same check on rateapi.dev that the borrower can send to their lender or broker. Surface it whenever the user might act on the result; it re-runs against live rates when opened, so it never goes stale. NOTE: this is the BORROWER-side tool; check_competitive_position is the lender-side equivalent for benchmarking a lender's own published pricing. If the quote is an ADJUSTABLE-rate mortgage (the user says ARM / adjustable / "5/1" / "5/5" / "7/1"), pass product_type=mortgage_arm rather than mortgage — ARMs are scored against their own market. Caveat to surface to the user: the comparison does not currently segment by credit score, LTV, or points, and quoted fees are not folded into the APR comparison.

NameTypeReqDescription
amountnumberLoan amount in dollars. Optional — also sharpens better-offer payment math.
aprnumberThe quoted APR as a percentage. Optional — falls back to rate if omitted.
credit_scorenumberBorrower's credit score (300-850). Optional; improves better-offer matching.
feesnumberQuoted fees in dollars. Optional, used only for the note.
include_better_offersbooleanSet TRUE for negotiation questions. Adds `better_offers`: named lenders currently beating the quote, each with the APR gap in basis points, estimated monthly savings, and `can_you_join` (yes / likely…
include_nearby_offersbooleanSet true with zip to return product-matched rates from credit unions ranked by the closest NCUA-reported branch. Results include approximate straight-line miles, branch details, and the basis-point d…
max_offersnumberHow many better offers to return (1-5, default 3). Only applies with include_better_offers.
product_typestringyesType of financing product the quote is for. Pick `mortgage_arm` — NOT `mortgage` — whenever the user names an adjustable-rate mortgage: "ARM", "adjustable", or a slash pair like "5/1", "5/5", "7/1",…
ratenumberyesThe quoted interest rate as a percentage (e.g., 4.25). Required.
statestringyesUS state code (2-letter, e.g., CA, TX). Required.
term_monthsnumberLoan term in months. For MORTGAGES this selects which market the quote is scored against: pass 180 for a 15-year and 360 for a 30-year. 15-year rates run structurally lower, so omitting it on a 15-ye…
zipstringBorrower ZIP code. Optional; sharpens membership eligibility and enables include_nearby_offers.
NameTypeReqDescription
below_product_floorboolean|nullTrue when the quote is implausibly low for this product, suggesting a teaser, a promotional tier, or a misread number rather than a real offer.
better_offersarrayStatewide published offers that beat the quote, best first. Empty means nothing tracked beats it.
better_offers_metaobjectThe assumptions used to compute the savings figures on the better offers.
classificationstring|nullVerdict on the quote: 'market_leading', 'plausible', 'suspicious_low', 'overpriced', or 'unknown' when there is too little data to judge.
compared_againststring|nullThe market segment the quote was matched to, e.g. 'mortgage_30yr'. If this is not the borrower's actual product, the verdict does not apply.
marketobjectLive market distribution the quote was scored against.
nearby_offersarrayProduct-matched offers from credit unions with branches near the supplied ZIP, closest first. Included only when the caller asked for nearby offers.
nearby_offers_metaobjectContext and caveats for the nearby-offer list.
notestring|nullReady-to-quote sentence explaining the verdict in the borrower's terms.
percentilenumber|nullWhere the quote sits in the live market distribution, 0-100, lower being cheaper. 100 means every tracked offer is cheaper than this quote.
product_floornumber|nullLowest rate in percent considered plausible for this product; quotes under it trip below_product_floor.
product_typestring|nullLoan or deposit category this result covers, e.g. 'mortgage', 'auto_loan', 'heloc', 'savings'.
quoteobjectThe rate the borrower was quoted, echoed back as supplied.
share_urlstring|nullLink to this same check on rateapi.dev that the borrower can send to a lender or broker; it re-runs against live rates when opened, so it never goes stale.
statestring|nullTwo-letter US state code the result is scoped to (e.g. 'CA'). Null means the result was not filtered by state.

No examples provided.

refinance_break_even ~164

Tell a borrower whether refinancing is worth it. Compares their current rate against the best real market offer and returns monthly savings, lifetime savings, and break-even months. Use for 'should I refinance?' questions.

NameTypeReqDescription
balancenumberyesCurrent loan balance in dollars
closing_costsnumberLender fees / closing costs in dollars (default 0)
credit_scorenumberOptional borrower credit score
current_ratenumberyesBorrower's current interest rate, e.g. 7.25
product_typestringyesmortgage | auto | heloc | personal_loan | student_loan
statestringyesUS state code
term_monthsnumberyesRemaining or new term in months
NameTypeReqDescription
assumed_defaultsobjectInputs filled in because the caller did not supply them; the break-even is only as good as these.
best_lenderstring|nullCredit union publishing that best market rate.
best_market_ratestring|nullBest live published rate available for this product and state, as a percent string.
break_even_monthsnumber|nullMonths of savings needed to repay the closing costs. Refinancing only pays off if the borrower keeps the loan longer than this.
closing_costsstring|nullAssumed cost in dollars to close the refinance, as a formatted string.
current_monthly_paymentstring|nullPrincipal-and-interest payment in dollars on the existing loan, as a formatted string.
current_ratestring|nullThe borrower's existing rate as a percent string.
disclosuresarrayCaveats and assumptions that must accompany any answer built from this result; surface them rather than dropping them.
lifetime_savingsstring|nullTotal interest saved in dollars over the full term, before subtracting closing costs.
monthly_savingsstring|nullReduction in the monthly payment in dollars; the difference between the two payments above.
net_lifetime_savingsstring|nullLifetime savings after subtracting closing costs — the honest headline number.
new_monthly_paymentstring|nullPrincipal-and-interest payment in dollars after refinancing at the best market rate.
next_actionsarraySuggested follow-up tools that would deepen this answer; offer them as next steps, not as results.
product_typestring|nullLoan or deposit category this result covers, e.g. 'mortgage', 'auto_loan', 'heloc', 'savings'.
reasonstring|nullWhy refinancing is not worth it, present only when `refinance_worth_it` is false — e.g. 'No qualifying market offer beats the current rate.' Its absence means a viable refinance was found.
refinance_worth_itboolean|nullTrue when the refinance clears its costs on the assumptions shown; it does not account for how long the borrower actually plans to stay.
statestring|nullTwo-letter US state code the result is scoped to (e.g. 'CA'). Null means the result was not filtered by state.

No examples provided.

remove_campaign_recipient ~43

Remove one recipient from a campaign by recipient id.

NameTypeReqDescription
idstringyesCampaign id. Required.
recipient_idstringyesRecipient id. Required.
NameTypeReqDescription
successbooleanTrue when the request completed.

No examples provided.

resolve_eligibility_entities ~128

Resolve up to 50 typed organization names for canonical eligibility input. Only one exact normalized active-publication match with confidence of at least 0.8 is authoritative (`resolved`); a lower-confidence exact match remains `unresolved`, multiple exact matches are `ambiguous`, and prefix candidates are suggestions only. Never convert an unresolved, ambiguous, or suggested candidate into a person fact. Resolution identifies an organization and never establishes eligibility.

NameTypeReqDescription
candidate_limitintegerMaximum exact matches or prefix suggestions returned per input.
inputsarrayyesTyped values to resolve in stable input order.
NameTypeReqDescription
disclosurestring|nullRequired warning that resolution does not prove eligibility.
prefix_candidates_are_suggestionsboolean|nullTrue: prefix results must never be silently promoted to facts.
resolution_methodstring|nullAuthority rule: one normalized-exact match with confidence of at least 0.8.
resultsarrayOne resolution result per input in the same order.
semanticsstring|nullMachine-readable organization-resolution-not-eligibility contract.

No examples provided.

revoke_share ~57

Revoke a hosted shareable report link by its token. Once revoked, the public URL returns a 404 and no longer exposes the report. This action cannot be undone.

NameTypeReqDescription
tokenstringyesThe share token to revoke. Required.
NameTypeReqDescription
successbooleanTrue when the share was revoked.

No examples provided.

save_cohort ~121

Save a named cohort ("book of business") — a list of borrower scenarios you want to track and re-scan over time. Each member has a label and a scenario (product_type, state, intent, amount, term_months, optional credit_score and current_offer). Returns the created cohort. Use scan_portfolio later to re-price every member against the live market.

NameTypeReqDescription
membersarrayyesList of cohort members (max ~50).
namestringyesCohort name, e.g. "Q2 refi prospects". Required.
NameTypeReqDescription
createdAtstring|nullISO-8601 creation timestamp.
idstringCohort id — pass to scan_portfolio, get_cohort, schedule_digest.
lastScanobject|nullPrevious scan snapshot. Null on a newly created cohort.
membersarrayThe cohort members as supplied.
namestringCohort label.
updatedAtstring|nullISO-8601 last-modified timestamp.

No examples provided.

save_scenario ~111

Save a rate comparison for a named client so it can be recalled later (a lightweight CRM for loan officers). Pass the client label and the inputs/results you want to keep.

NameTypeReqDescription
client_namestringyesClient/scenario label, e.g. "Smith — $400k purchase, CA"
inputobjectyesThe scenario inputs (product, amount, state, term, etc.)
result_snapshotyesThe comparison result to store (object from get_financing_decision/compare_products)
NameTypeReqDescription
clientNamestringClient label for the scenario.
createdAtstring|nullISO-8601 creation timestamp.
idstringScenario id — pass to get_scenario, generate_share_link, or generate_client_report.
inputobject|nullThe decision inputs that produced the snapshot (product, amount, state, term).
resultSnapshotThe decision result captured at save time. Shape mirrors a /v1/decisions response.

No examples provided.

scan_portfolio ~108

Re-scan every member of a saved cohort against the live decision engine to find each member's current best offer. Returns a triage list (label, best lender, best APR, monthly payment, optional savings vs current) and a diff vs the previous scan (who's new, whose best lender changed, APR deltas). Persists the new snapshot. Use this to refresh a book of business and surface what changed.

NameTypeReqDescription
idstringyesCohort id to scan. Required.
NameTypeReqDescription
changedarrayMembers whose best offer moved since the previous scan.
scannednumberMembers evaluated (capped at 50).
triagearrayEvery member's current best offer.

No examples provided.

scan_savings ~132

Scan a list of existing debts and find, for EACH debt, the best qualifying market refinance offer. Returns a ranked "savings stack" with monthly and lifetime savings (net of typical closing costs) per debt plus whether refinancing is worth it, and overall totals. Use this to find refinance opportunities across a borrower's whole debt portfolio.

NameTypeReqDescription
credit_scorenumberBorrower's credit score (300-850). Recommended for accurate matching.
debtsarrayyesList of existing debts to evaluate for refinancing.
statestringyesUS state code (2-letter, e.g., TX). Required.
NameTypeReqDescription
stackarrayThe user's debts ordered by refinancing opportunity, biggest saving first.
statestring|nullTwo-letter US state code the result is scoped to (e.g. 'CA'). Null means the result was not filtered by state.
totalsobjectCombined opportunity across every debt in the stack.

No examples provided.

schedule_digest ~128

Set up a recurring digest: on a cadence (default weekly), automatically re-scan a saved cohort and EMAIL the loan officer a triage of which clients have a new opportunity (best lender changed, crossed a threshold). Turns a one-time portfolio scan into a standing operation. Requires a cohort_id (from save_cohort/list_cohorts) and a delivery email.

NameTypeReqDescription
cadencestringweekly (default) or daily.
cohort_idstringyesThe cohort to scan on a schedule (from list_cohorts).
emailstringyesWhere to send the digest.
NameTypeReqDescription
cadencestring'daily' or 'weekly'. Anything other than 'daily' is stored as 'weekly'.
cohort_idstringCohort the digest scans.
created_atstring|nullISO-8601 creation timestamp.
emailstringRecipient address.
enabledbooleanTrue on creation.
idstringDigest id — pass to delete_digest.

No examples provided.

search_docs ~188

DOCS: search the RateAPI documentation (authentication, rate limits and pricing, coverage, freshness, methodology, eligibility, endpoint map, product parameters, errors, the MCP server itself, and the rules for quoting the data). Use this whenever the question is about the API rather than about a rate — "how do I authenticate?", "what does rate_phase mean?", "which endpoint gives deposit APYs?", "how fresh is this?", "what does it cost?" — instead of guessing at parameters or inventing endpoints. Returns ranked pages with an excerpt; call get_doc for the full text. This tool NEVER returns rates.

NameTypeReqDescription
limitnumberMaximum pages to return (1-12). Defaults to 5.
querystringyesWhat you want to know about the API, in plain words (e.g. "oauth", "how fresh are rates", "429 error").
NameTypeReqDescription
countnumber|nullNumber of pages returned.
notestring|nullGuidance on what to do with these results.
querystring|nullThe query as received.
resultsarray|nullMatching documentation pages, best match first.

No examples provided.

search_eligibility_entities ~198

Browse or search canonical employers, associations, schools, or worship organizations that appear in positive conditions in current active eligibility publications. Omit query to browse by active-publication graph connectivity; that order is NOT popularity, quality, or a recommendation. With query, normalized exact matches rank before bounded prefix matches. A returned organization is a selectable fact, NOT proof that this person can join any credit union; use resolve_eligibility_entities for authoritative selection, then pass the returned org_id in the matching *_org_ids field to an eligibility tool. This authenticated discovery never loads a client-side corpus and accepts no personal profile.

NameTypeReqDescription
limitintegerMaximum results; the response discloses truncation.
querystringOptional organization name or prefix, 2-120 characters. Omit to browse by active-publication connectivity.
typesarrayExact public organization types to search. Omit for all four types.
NameTypeReqDescription
disclosurestring|nullRequired warning that organization discovery does not prove eligibility.
normalized_querystring|nullCanonical normalized text used for indexed exact and prefix matching.
querystring|nullTrimmed search text supplied by the caller.
query_truncatedboolean|nullWhether the accepted query text was truncated; currently always false because oversized input is rejected.
result_limitnumber|nullRequested result cap.
result_modestring|nullsearch for text-ranked results or most_connected for query-less graph-connectivity browse; neither is an eligibility verdict.
resultsarrayDeterministically ranked canonical entity matches; these do not imply personal eligibility.
results_truncatedboolean|nullTrue when more authorized matches existed than were returned.
semanticsstring|nullMachine-readable organization-discovery-not-eligibility contract.
typesarrayExact public entity types included in the search.

No examples provided.

send_campaign_now ~91

Send a campaign to ALL of its recipients immediately (one full send, the same path the daily cron uses). The campaign must be active. Honors suppressions and the per-org daily cap, resets the cadence clock (the next scheduled send counts from now), and is guarded against double-fires. Returns { run_id, sent, suppressed, failed }.

NameTypeReqDescription
idstringyesCampaign id. Required.
NameTypeReqDescription
failednumberRecipients the provider rejected.
run_idstring|number|nullId of the campaign run, for correlating with send history.
sentnumberEmails handed to the provider.
suppressednumberRecipients skipped because they had unsubscribed or were otherwise suppressed.

No examples provided.

send_test_campaign ~52

Send a one-off test render of a campaign (with live rates and the org's branding) to the organization owner's email. Does not affect the campaign schedule.

NameTypeReqDescription
idstringyesCampaign id. Required.
NameTypeReqDescription
messagestringConfirmation naming the address the test was sent to.
okbooleanTrue when the test email was accepted by the email provider.

No examples provided.

set_email_branding ~225

Set the organization's white-label email branding: display name (used as the From name and CAN-SPAM advertiser identity), brand color (#hex), default intro text, business_address (CAN-SPAM physical address — required before a campaign can be activated), and reply_to_email. Requires a Pro plan. (Logo upload is app-only — not available over MCP.)

NameTypeReqDescription
brand_colorstringAccent color as a #hex string (e.g. #00b368).
business_addressstringPhysical mailing address of the advertiser (CAN-SPAM).
display_namestringThe lender/brand name shown as the email sender and advertiser.
intro_textstringDefault intro paragraph for campaign emails.
logo_background_colorstringSolid backdrop behind the logo in the email header, as a 6-digit #hex (e.g. #0d1b2a). Useful when the logo is white. Omit or null for the white default.
reply_to_emailstringOptional Reply-To address for campaign emails.
NameTypeReqDescription
brandingobject|nullThe stored branding row.

No examples provided.

simulate_decision ~124

Run a what-if sweep over a financing decision. Holds a scenario fixed while sweeping one input (credit_score, down_payment_percent, or rate_shift_bps) across a from/to/step range, returning a grid of best_lender / best_apr / monthly_payment at each value plus any flip_points where the winning lender changes. Use this to show how rate eligibility or affordability changes with credit score, down payment, or a market rate shift.

NameTypeReqDescription
scenarioobjectyesThe fixed financing scenario.
sweepobjectyesThe input to sweep and its range.
NameTypeReqDescription
flip_pointsarrayValues of the swept input where the winning lender or recommended action changes. Empty means the outcome is stable across the whole sweep.
gridarrayOne row per swept value, showing how the outcome changes.
product_typestring|nullLoan or deposit category this result covers, e.g. 'mortgage', 'auto_loan', 'heloc', 'savings'.
statestring|nullTwo-letter US state code the result is scoped to (e.g. 'CA'). Null means the result was not filtered by state.
sweep_fieldstring|nullThe input that was varied across the grid, e.g. 'credit_score'.

No examples provided.

simulate_monitor ~136

Test a monitor with a simulated rate change to see if it would trigger. No webhook is sent. It is not a pure dry run: the simulation IS recorded, as a monitor_evaluations row (and a webhook audit row) flagged is_simulation = 1, so it appears in the monitor's history clearly marked as a simulation. It does not touch the monitor's cooldown or last_triggered_at. Use deliver_test_webhook to actually send a test webhook.

NameTypeReqDescription
monitor_idstringyesThe unique identifier of the monitor to simulate. Required.
rate_changeobjectyesThe simulated rate change event. Required.
NameTypeReqDescription
errorstring|nullPresent and set to 'not_found' when the monitor id does not exist.
evaluationobjectWhy the monitor did or did not fire.
rate_changeobjectThe simulated change, echoed back with rates pre-formatted as percent strings.
summarystringPlain-language verdict on whether the monitor would fire, or a not-found message.
would_triggerbooleanWhether the monitor's conditions are satisfied by the supplied change.

No examples provided.

subscribe_rate_alert ~284

Subscribe a consumer to an EMAIL rate alert: notify them when the live market meets their target (rate/apr/monthly_payment crossing a threshold). Consent-first — sends a double-opt-in confirmation email; the alert only activates after the recipient confirms. One-click unsubscribe in every email (CAN-SPAM). Stores only email + alert criteria. Provide exactly one of state, states, or region.

NameTypeReqDescription
amountnumberLoan amount in dollars. Optional.
credit_scorenumberCredit score (300-850). Optional.
emailstringyesConsumer email address to send the alert to. Required.
intentstringyesThe loan intent. Required.
product_typestringyesType of loan product. Required.
regionstringNamed region preset (e.g. east_coast); expands server-side to its member states.
statestringLegacy single US state code (2-letter, e.g., CA, TX, NY). Prefer states or region for multi-state alerts.
statesarray2-letter US state codes (up to 25) — best rates are ranked ACROSS all of them, not per state.
targetobjectyesThe condition that triggers the alert. Required.
term_monthsnumberLoan term in months (12-480). Optional.
NameTypeReqDescription
alert_idstringId of the created alert.
assumed_defaultsobjectLoan assumptions recorded with the alert; null where the caller supplied none.
disclosuresarrayConsent and CAN-SPAM disclosures for the subscription.
emailstringSubscriber address.
messagestringHuman-readable next step ('Check your inbox to confirm').
next_actionsarraySuggested follow-up tool names.
region_presetstring|nullRegion preset key when one was used, else null.
statestring|nullLegacy scalar state — the first entry of `states`.
statesarray|nullFull list of watched state codes. Regions are expanded to a fixed snapshot at subscribe time.
statusstringTypically 'pending_confirmation'.
targetobjectThe threshold that fires the alert.

No examples provided.

unsubscribe_rate_alert ~37

One-click unsubscribe via the per-alert token embedded in every email.

NameTypeReqDescription
tokenstringyesThe unsubscribe token from the email. Required.
NameTypeReqDescription
alert_idstringThe alert that was unsubscribed.
statusstring'unsubscribed' on success.

No examples provided.

update_email_campaign ~244

Update a campaign's name, geography, cadence, intro override, products, or status. products (if given) is the full replacement set (1-5, same union as create_email_campaign). Any geography field replaces the campaign's whole state selection. Set status 'active' to start sending (requires branding display_name + business_address) or 'paused' to stop. Provide exactly one of state_code, state_codes, or region.

NameTypeReqDescription
cadencestring
idstringyesCampaign id. Required.
intro_text_overridestring
namestring
productsarrayFull replacement product set (1-5, no duplicates); same shapes as create_email_campaign.
regionstringNamed region preset (e.g. east_coast); expands server-side to its member states.
state_codestringLegacy single 2-letter US state code. Prefer state_codes or region.
state_codesarray2-letter US state codes (up to 25) — best rates are ranked ACROSS all of them, not per state.
statusstring
NameTypeReqDescription
cadencestring|null'daily', 'weekly', or 'monthly'.
created_atnumber|nullEpoch-ms creation time.
idstringCampaign id.
intro_text_overridestring|nullPer-campaign intro override.
last_run_atnumber|nullEpoch-ms of the last send.
namestringCampaign label.
organization_idstringOwning organization.
product_categorystring|nullProduct family.
product_typestring|nullPrimary product type.
productsarray|nullParsed list of products the email covers.
region_presetstring|nullRegion preset key, or null.
state_codestring|nullLegacy scalar state — first entry of state_codes.
state_codesarray|nullFull list of covered state codes.
statusstring|null'draft', 'active', or 'paused'.
updated_atnumber|nullEpoch-ms last-modified time.

No examples provided.

update_monitor ~101

Update an existing monitor. Only provided fields will be updated.

NameTypeReqDescription
conditionsarrayNew array of conditions.
cooldown_hoursnumberNew cooldown period in hours (1-168).
monitor_idstringyesThe unique identifier of the monitor to update. Required.
namestringNew name for the monitor.
statusstringNew status for the monitor.
webhook_urlstringNew webhook URL.
NameTypeReqDescription
errorstring|nullPresent and set to 'not_found' when the monitor id does not exist.
monitorobjectThe monitor after the update. Absent when not found.
summarystringConfirmation naming the monitor and which fields changed, or a not-found message.

No examples provided.

Common questions

What is the RateAPI — live US mortgage, auto, HELOC, personal… MCP server?

RateAPI — live US mortgage, auto, HELOC, personal… is an MCP server listed in the public MCP registry as dev.rateapi/mcp. Live US mortgage, auto, HELOC, personal & deposit rates with evidence, plus who can join each lender. This page covers its hosted endpoint (https://mcp.rateapi.dev/mcp).

Is the RateAPI — live US mortgage, auto, HELOC, personal… MCP server safe to use?

RateAPI — live US mortgage, auto, HELOC, personal… scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the RateAPI — live US mortgage, auto, HELOC, personal… MCP server expose?

RateAPI — live US mortgage, auto, HELOC, personal… exposes 89 tools: get_financing_decision, list_credit_unions, find_credit_unions_near_zip, find_product_rates_near_zip, get_credit_union, and 84 more. Their descriptions and schemas cost roughly 19,967 tokens of context every time the server is loaded.

Does the RateAPI — live US mortgage, auto, HELOC, personal… MCP server require authentication?

Yes. RateAPI — live US mortgage, auto, HELOC, personal… asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the RateAPI — live US mortgage, auto, HELOC, personal… MCP server still maintained?

RateAPI — live US mortgage, auto, HELOC, personal… is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.