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
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
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http dev-rateapi-mcp 'https://mcp.rateapi.dev/mcp'
{
"mcpServers": {
"dev-rateapi-mcp": {
"url": "https://mcp.rateapi.dev/mcp"
}
}
} {
"servers": {
"dev-rateapi-mcp": {
"type": "http",
"url": "https://mcp.rateapi.dev/mcp"
}
}
} [mcp_servers.dev-rateapi-mcp] url = "https://mcp.rateapi.dev/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"dev-rateapi-mcp": {
"type": "remote",
"url": "https://mcp.rateapi.dev/mcp",
"enabled": true
}
}
} openclaw mcp add dev-rateapi-mcp --url 'https://mcp.rateapi.dev/mcp' --transport streamable-http
mcp_servers:
dev-rateapi-mcp:
url: "https://mcp.rateapi.dev/mcp" {
"McpServers": {
"dev-rateapi-mcp": {
"Transport": "http",
"Url": "https://mcp.rateapi.dev/mcp"
}
}
} assistant mcp add dev-rateapi-mcp -t streamable-http -u 'https://mcp.rateapi.dev/mcp'
{
"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.
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
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 |
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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | Loan amount in dollars. Optional — also sharpens better-offer payment math. |
| apr | number | – | The quoted APR as a percentage. Optional — falls back to rate if omitted. |
| credit_score | number | – | Borrower's credit score (300-850). Optional; improves better-offer matching. |
| fees | number | – | Quoted fees in dollars. Optional, used only for the note. |
| include_better_offers | boolean | – | Set 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_offers | boolean | – | Set 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_offers | number | – | How many better offers to return (1-5, default 3). Only applies with include_better_offers. |
| product_type | string | yes | Type 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",… |
| rate | number | yes | The quoted interest rate as a percentage (e.g., 4.25). Required. |
| state | string | yes | US state code (2-letter, e.g., CA, TX). Required. |
| term_months | number | – | Loan 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… |
| zip | string | – | Borrower ZIP code. Optional; sharpens membership eligibility and enables include_nearby_offers. |
| Name | Type | Req | Description |
|---|---|---|---|
| below_product_floor | boolean|null | – | True 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_offers | array | – | Statewide published offers that beat the quote, best first. Empty means nothing tracked beats it. |
| better_offers_meta | object | – | The assumptions used to compute the savings figures on the better offers. |
| classification | string|null | – | Verdict on the quote: 'market_leading', 'plausible', 'suspicious_low', 'overpriced', or 'unknown' when there is too little data to judge. |
| compared_against | string|null | – | The 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. |
| market | object | – | Live market distribution the quote was scored against. |
| nearby_offers | array | – | Product-matched offers from credit unions with branches near the supplied ZIP, closest first. Included only when the caller asked for nearby offers. |
| nearby_offers_meta | object | – | Context and caveats for the nearby-offer list. |
| note | string|null | – | Ready-to-quote sentence explaining the verdict in the borrower's terms. |
| percentile | number|null | – | Where the quote sits in the live market distribution, 0-100, lower being cheaper. 100 means every tracked offer is cheaper than this quote. |
| product_floor | number|null | – | Lowest rate in percent considered plausible for this product; quotes under it trip below_product_floor. |
| product_type | string|null | – | Loan or deposit category this result covers, e.g. 'mortgage', 'auto_loan', 'heloc', 'savings'. |
| quote | object | – | The rate the borrower was quoted, echoed back as supplied. |
| share_url | string|null | – | Link 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. |
| state | string|null | – | Two-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.
| Name | Type | Req | Description |
|---|---|---|---|
| balance | number | yes | Current loan balance in dollars |
| closing_costs | number | – | Lender fees / closing costs in dollars (default 0) |
| credit_score | number | – | Optional borrower credit score |
| current_rate | number | yes | Borrower's current interest rate, e.g. 7.25 |
| product_type | string | yes | mortgage | auto | heloc | personal_loan | student_loan |
| state | string | yes | US state code |
| term_months | number | yes | Remaining or new term in months |
| Name | Type | Req | Description |
|---|---|---|---|
| assumed_defaults | object | – | Inputs filled in because the caller did not supply them; the break-even is only as good as these. |
| best_lender | string|null | – | Credit union publishing that best market rate. |
| best_market_rate | string|null | – | Best live published rate available for this product and state, as a percent string. |
| break_even_months | number|null | – | Months of savings needed to repay the closing costs. Refinancing only pays off if the borrower keeps the loan longer than this. |
| closing_costs | string|null | – | Assumed cost in dollars to close the refinance, as a formatted string. |
| current_monthly_payment | string|null | – | Principal-and-interest payment in dollars on the existing loan, as a formatted string. |
| current_rate | string|null | – | The borrower's existing rate as a percent string. |
| disclosures | array | – | Caveats and assumptions that must accompany any answer built from this result; surface them rather than dropping them. |
| lifetime_savings | string|null | – | Total interest saved in dollars over the full term, before subtracting closing costs. |
| monthly_savings | string|null | – | Reduction in the monthly payment in dollars; the difference between the two payments above. |
| net_lifetime_savings | string|null | – | Lifetime savings after subtracting closing costs — the honest headline number. |
| new_monthly_payment | string|null | – | Principal-and-interest payment in dollars after refinancing at the best market rate. |
| next_actions | array | – | Suggested follow-up tools that would deepen this answer; offer them as next steps, not as results. |
| product_type | string|null | – | Loan or deposit category this result covers, e.g. 'mortgage', 'auto_loan', 'heloc', 'savings'. |
| reason | string|null | – | Why 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_it | boolean|null | – | True when the refinance clears its costs on the assumptions shown; it does not account for how long the borrower actually plans to stay. |
| state | string|null | – | Two-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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Campaign id. Required. |
| recipient_id | string | yes | Recipient id. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| success | boolean | – | True 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.
| Name | Type | Req | Description |
|---|---|---|---|
| candidate_limit | integer | – | Maximum exact matches or prefix suggestions returned per input. |
| inputs | array | yes | Typed values to resolve in stable input order. |
| Name | Type | Req | Description |
|---|---|---|---|
| disclosure | string|null | – | Required warning that resolution does not prove eligibility. |
| prefix_candidates_are_suggestions | boolean|null | – | True: prefix results must never be silently promoted to facts. |
| resolution_method | string|null | – | Authority rule: one normalized-exact match with confidence of at least 0.8. |
| results | array | – | One resolution result per input in the same order. |
| semantics | string|null | – | Machine-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.
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | The share token to revoke. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| success | boolean | – | True 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.
| Name | Type | Req | Description |
|---|---|---|---|
| members | array | yes | List of cohort members (max ~50). |
| name | string | yes | Cohort name, e.g. "Q2 refi prospects". Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| createdAt | string|null | – | ISO-8601 creation timestamp. |
| id | string | – | Cohort id — pass to scan_portfolio, get_cohort, schedule_digest. |
| lastScan | object|null | – | Previous scan snapshot. Null on a newly created cohort. |
| members | array | – | The cohort members as supplied. |
| name | string | – | Cohort label. |
| updatedAt | string|null | – | ISO-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.
| Name | Type | Req | Description |
|---|---|---|---|
| client_name | string | yes | Client/scenario label, e.g. "Smith — $400k purchase, CA" |
| input | object | yes | The scenario inputs (product, amount, state, term, etc.) |
| result_snapshot | – | yes | The comparison result to store (object from get_financing_decision/compare_products) |
| Name | Type | Req | Description |
|---|---|---|---|
| clientName | string | – | Client label for the scenario. |
| createdAt | string|null | – | ISO-8601 creation timestamp. |
| id | string | – | Scenario id — pass to get_scenario, generate_share_link, or generate_client_report. |
| input | object|null | – | The decision inputs that produced the snapshot (product, amount, state, term). |
| resultSnapshot | – | – | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Cohort id to scan. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| changed | array | – | Members whose best offer moved since the previous scan. |
| scanned | number | – | Members evaluated (capped at 50). |
| triage | array | – | Every 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.
| Name | Type | Req | Description |
|---|---|---|---|
| credit_score | number | – | Borrower's credit score (300-850). Recommended for accurate matching. |
| debts | array | yes | List of existing debts to evaluate for refinancing. |
| state | string | yes | US state code (2-letter, e.g., TX). Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| stack | array | – | The user's debts ordered by refinancing opportunity, biggest saving first. |
| state | string|null | – | Two-letter US state code the result is scoped to (e.g. 'CA'). Null means the result was not filtered by state. |
| totals | object | – | Combined 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cadence | string | – | weekly (default) or daily. |
| cohort_id | string | yes | The cohort to scan on a schedule (from list_cohorts). |
| string | yes | Where to send the digest. |
| Name | Type | Req | Description |
|---|---|---|---|
| cadence | string | – | 'daily' or 'weekly'. Anything other than 'daily' is stored as 'weekly'. |
| cohort_id | string | – | Cohort the digest scans. |
| created_at | string|null | – | ISO-8601 creation timestamp. |
| string | – | Recipient address. | |
| enabled | boolean | – | True on creation. |
| id | string | – | Digest 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum pages to return (1-12). Defaults to 5. |
| query | string | yes | What you want to know about the API, in plain words (e.g. "oauth", "how fresh are rates", "429 error"). |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number|null | – | Number of pages returned. |
| note | string|null | – | Guidance on what to do with these results. |
| query | string|null | – | The query as received. |
| results | array|null | – | Matching 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum results; the response discloses truncation. |
| query | string | – | Optional organization name or prefix, 2-120 characters. Omit to browse by active-publication connectivity. |
| types | array | – | Exact public organization types to search. Omit for all four types. |
| Name | Type | Req | Description |
|---|---|---|---|
| disclosure | string|null | – | Required warning that organization discovery does not prove eligibility. |
| normalized_query | string|null | – | Canonical normalized text used for indexed exact and prefix matching. |
| query | string|null | – | Trimmed search text supplied by the caller. |
| query_truncated | boolean|null | – | Whether the accepted query text was truncated; currently always false because oversized input is rejected. |
| result_limit | number|null | – | Requested result cap. |
| result_mode | string|null | – | search for text-ranked results or most_connected for query-less graph-connectivity browse; neither is an eligibility verdict. |
| results | array | – | Deterministically ranked canonical entity matches; these do not imply personal eligibility. |
| results_truncated | boolean|null | – | True when more authorized matches existed than were returned. |
| semantics | string|null | – | Machine-readable organization-discovery-not-eligibility contract. |
| types | array | – | Exact 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 }.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Campaign id. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| failed | number | – | Recipients the provider rejected. |
| run_id | string|number|null | – | Id of the campaign run, for correlating with send history. |
| sent | number | – | Emails handed to the provider. |
| suppressed | number | – | Recipients 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Campaign id. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | Confirmation naming the address the test was sent to. |
| ok | boolean | – | True 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.)
| Name | Type | Req | Description |
|---|---|---|---|
| brand_color | string | – | Accent color as a #hex string (e.g. #00b368). |
| business_address | string | – | Physical mailing address of the advertiser (CAN-SPAM). |
| display_name | string | – | The lender/brand name shown as the email sender and advertiser. |
| intro_text | string | – | Default intro paragraph for campaign emails. |
| logo_background_color | string | – | Solid 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_email | string | – | Optional Reply-To address for campaign emails. |
| Name | Type | Req | Description |
|---|---|---|---|
| branding | object|null | – | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| scenario | object | yes | The fixed financing scenario. |
| sweep | object | yes | The input to sweep and its range. |
| Name | Type | Req | Description |
|---|---|---|---|
| flip_points | array | – | Values of the swept input where the winning lender or recommended action changes. Empty means the outcome is stable across the whole sweep. |
| grid | array | – | One row per swept value, showing how the outcome changes. |
| product_type | string|null | – | Loan or deposit category this result covers, e.g. 'mortgage', 'auto_loan', 'heloc', 'savings'. |
| state | string|null | – | Two-letter US state code the result is scoped to (e.g. 'CA'). Null means the result was not filtered by state. |
| sweep_field | string|null | – | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| monitor_id | string | yes | The unique identifier of the monitor to simulate. Required. |
| rate_change | object | yes | The simulated rate change event. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | string|null | – | Present and set to 'not_found' when the monitor id does not exist. |
| evaluation | object | – | Why the monitor did or did not fire. |
| rate_change | object | – | The simulated change, echoed back with rates pre-formatted as percent strings. |
| summary | string | – | Plain-language verdict on whether the monitor would fire, or a not-found message. |
| would_trigger | boolean | – | Whether 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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | Loan amount in dollars. Optional. |
| credit_score | number | – | Credit score (300-850). Optional. |
| string | yes | Consumer email address to send the alert to. Required. | |
| intent | string | yes | The loan intent. Required. |
| product_type | string | yes | Type of loan product. Required. |
| region | string | – | Named region preset (e.g. east_coast); expands server-side to its member states. |
| state | string | – | Legacy single US state code (2-letter, e.g., CA, TX, NY). Prefer states or region for multi-state alerts. |
| states | array | – | 2-letter US state codes (up to 25) — best rates are ranked ACROSS all of them, not per state. |
| target | object | yes | The condition that triggers the alert. Required. |
| term_months | number | – | Loan term in months (12-480). Optional. |
| Name | Type | Req | Description |
|---|---|---|---|
| alert_id | string | – | Id of the created alert. |
| assumed_defaults | object | – | Loan assumptions recorded with the alert; null where the caller supplied none. |
| disclosures | array | – | Consent and CAN-SPAM disclosures for the subscription. |
| string | – | Subscriber address. | |
| message | string | – | Human-readable next step ('Check your inbox to confirm'). |
| next_actions | array | – | Suggested follow-up tool names. |
| region_preset | string|null | – | Region preset key when one was used, else null. |
| state | string|null | – | Legacy scalar state — the first entry of `states`. |
| states | array|null | – | Full list of watched state codes. Regions are expanded to a fixed snapshot at subscribe time. |
| status | string | – | Typically 'pending_confirmation'. |
| target | object | – | The threshold that fires the alert. |
No examples provided.
unsubscribe_rate_alert ~37
One-click unsubscribe via the per-alert token embedded in every email.
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | The unsubscribe token from the email. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| alert_id | string | – | The alert that was unsubscribed. |
| status | string | – | '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.
| Name | Type | Req | Description |
|---|---|---|---|
| cadence | string | – | – |
| id | string | yes | Campaign id. Required. |
| intro_text_override | string | – | – |
| name | string | – | – |
| products | array | – | Full replacement product set (1-5, no duplicates); same shapes as create_email_campaign. |
| region | string | – | Named region preset (e.g. east_coast); expands server-side to its member states. |
| state_code | string | – | Legacy single 2-letter US state code. Prefer state_codes or region. |
| state_codes | array | – | 2-letter US state codes (up to 25) — best rates are ranked ACROSS all of them, not per state. |
| status | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cadence | string|null | – | 'daily', 'weekly', or 'monthly'. |
| created_at | number|null | – | Epoch-ms creation time. |
| id | string | – | Campaign id. |
| intro_text_override | string|null | – | Per-campaign intro override. |
| last_run_at | number|null | – | Epoch-ms of the last send. |
| name | string | – | Campaign label. |
| organization_id | string | – | Owning organization. |
| product_category | string|null | – | Product family. |
| product_type | string|null | – | Primary product type. |
| products | array|null | – | Parsed list of products the email covers. |
| region_preset | string|null | – | Region preset key, or null. |
| state_code | string|null | – | Legacy scalar state — first entry of state_codes. |
| state_codes | array|null | – | Full list of covered state codes. |
| status | string|null | – | 'draft', 'active', or 'paused'. |
| updated_at | number|null | – | Epoch-ms last-modified time. |
No examples provided.
update_monitor ~101
Update an existing monitor. Only provided fields will be updated.
| Name | Type | Req | Description |
|---|---|---|---|
| conditions | array | – | New array of conditions. |
| cooldown_hours | number | – | New cooldown period in hours (1-168). |
| monitor_id | string | yes | The unique identifier of the monitor to update. Required. |
| name | string | – | New name for the monitor. |
| status | string | – | New status for the monitor. |
| webhook_url | string | – | New webhook URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | string|null | – | Present and set to 'not_found' when the monitor id does not exist. |
| monitor | object | – | The monitor after the update. Absent when not found. |
| summary | string | – | Confirmation naming the monitor and which fields changed, or a not-found message. |
No examples provided.
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.