Savings gap
What is my bank costing me?
Compare a balance with current market rates and quantify the annual gap.
SwitchWize for AI
Give agents live rates, savings-gap answers, card offer intelligence, and CD maturity rules through 15 read-only tools. Every response includes source, freshness, and attribution context.
Useful before technical
Savings gap
Compare a balance with current market rates and quantify the annual gap.
Best next move
Surface current rates and card offers with timestamps and source links.
Maturity decision
Explain rollover defaults, grace periods, and verified opt-out instructions.
Live playground
These examples call the same read-only tools available through our hosted MCP server. No account, API key, or financial credentials are required.
Choose a workflow
Tool call
get_bank_gap{
"name": "get_bank_gap",
"arguments": {
"bank": "Chase",
"balance": 25000
}
}Results include freshness, attribution, and source metadata so an agent can explain where its answer came from.
Copy-paste prompts
Paste any of these into an agent connected to the hosted MCP endpoint or npm package above. Each maps to one or two of the 15 tools.
“Compare the best current savings rates and tell me how fresh each observation is.”
“Estimate my annual loss from keeping $25,000 at Chase.”
“Which of my cards should I use for dining, groceries, and travel this week?”
“Show active transfer bonuses, but only make best-ever claims when enough history exists.”
“What happens if I let my CD renew automatically?”
Connect in minutes
The hosted endpoint is the no-setup path: rate-limited, no secrets, works for anyone. The stdio package and Claude Desktop config below are for running against your own SwitchWize checkout.
Hosted MCP
https://www.switchwize.com/api/mcpIn Claude, open Settings → Connectors → Add custom connector, then paste this URL. Tool discovery and calls use the standard Streamable HTTP transport.
Local clients
{
"mcpServers": {
"switchwize": {
"command": "npx",
"args": ["-y", "switchwize-mcp"]
}
}
}This runs the same tools against the database directly, so it needs its own DATABASE_URL (and optionally Upstash Redis credentials) in the environment it runs in. That makes it a fit for local development against your own SwitchWize checkout, not a plug-and-play path for an outside visitor. If you just want it working with no setup, use the hosted endpoint above instead.
Coding clients
// .cursor/mcp.json
{
"mcpServers": {
"switchwize": {
"url": "https://www.switchwize.com/api/mcp"
}
}
}Cursor connects directly to the hosted Streamable HTTP endpoint, no npm install needed. Other MCP-aware coding clients (Windsurf, Cline) use the same config shape.
OpenAI Responses API
const response = await client.responses.create({
model: "gpt-5",
tools: [{
type: "mcp",
server_label: "switchwize",
server_url: "https://www.switchwize.com/api/mcp",
require_approval: "never",
allowed_tools: ["get_bank_gap", "get_top_rates"]
}],
input: "What could $25,000 at Chase be missing each year?"
})The MCP tools are built on the public endpoints below. Use the REST API, datasets, spreadsheet integrations, or embeds directly with attribution as “SwitchWize (switchwize.com).” Commercial use is subject to our terms.
Top live rates as JSON. Auth-free, CORS-open, edge-cached (~1 hour). Categories: savings, cds, money-market, checking, mortgage. Optional ?limit= (1–25, default 8). The same contract is also available at /savings.json, /cds.json, /money-market.json, /checking.json, and /mortgage.json.
GET https://www.switchwize.com/api/public/rates/savings?limit=5
{
"schemaVersion": "2026-07-01",
"id": "rates:savings",
"category": "savings",
"rate_type": "APY",
"count": 5,
"asOf": "2026-07-02T14:31:00.644Z",
"generatedAt": "2026-07-02T14:58:28.955Z",
"freshnessStatus": "fresh",
"attribution": "SwitchWize (https://www.switchwize.com)",
"attributionDetails": {
"requiredText": "SwitchWize (switchwize.com)"
},
"sourceDetails": {
"method": "verified_observations"
},
"rates": [
{ "rank": 1, "institution": "...", "product": "...", "rate": 4.40, "rate_type": "APY", "fdic_insured": true }
]
}Pull live rates straight into a spreadsheet instead of copying numbers by hand. Both approaches call the same rates API above, so they stay live on every refresh.
Excel & Power BI (Power Query)
Data tab → Get Data → From Other Sources → Blank Query, then open the Advanced Editor and paste:
let
Source = Json.Document(Web.Contents("https://www.switchwize.com/api/public/rates/savings")),
rates = Source[rates],
Table1 = Table.FromRecords(rates)
in
Table1Swap savings for cds, money-market, checking, or mortgage. Set the query to refresh on open (Query Properties → Refresh data when opening the file) to keep it live.
Google Sheets (Apps Script)
Sheets’ built-in IMPORTDATA only reads flat CSV/TSV, not JSON, so this needs a short custom function instead. Extensions → Apps Script, paste this, save, then use =SWITCHWIZE_RATES("savings") in any cell:
function SWITCHWIZE_RATES(category, limit) {
var url = "https://www.switchwize.com/api/public/rates/" + category + "?limit=" + (limit || 5);
var data = JSON.parse(UrlFetchApp.fetch(url).getContentText());
var rows = data.rates.map(function(r) {
return [r.rank, r.institution, r.product, r.rate, r.rate_type];
});
return [["Rank", "Institution", "Product", "Rate", "Type"]].concat(rows);
}Agent-callable helper tools expose the same public data contracts. Tools are read-only and return freshness, source, and attribution metadata.
GET https://www.switchwize.com/api/public/tools
POST https://www.switchwize.com/api/public/tools/get_top_rates
{ "category": "savings", "limit": 5 }
POST https://www.switchwize.com/api/public/tools/compare_switch_savings
{ "currentApy": 0.01, "balance": 25000 }
POST https://www.switchwize.com/api/public/tools/get_bank_gap_index
{}
POST https://www.switchwize.com/api/public/tools/get_reality_score
{ "card": "platinum-card", "segment": "small-business-owner" }The same tools are also available as a hosted MCP (Model Context Protocol) server at https://www.switchwize.com/api/mcp — add it as a remote MCP server in any MCP-compatible client, no local setup required. For local clients, the repository also ships a stdio MCP server inpackages/mcp-server. Start it with npm run mcp:start and verify the protocol handshake with npm run mcp:smoke.
Drop a live rate table or index figure into any page with an iframe. Widgets are self-contained and carry a backlink to SwitchWize.
<!-- Top rates table -->
<iframe src="https://www.switchwize.com/embed/rates/savings"
width="440" height="320" style="border:0" loading="lazy"></iframe>
<!-- Index figure -->
<iframe src="https://www.switchwize.com/embed/indices/cd-spread"
width="440" height="200" style="border:0" loading="lazy"></iframe>
<!-- Optional: auto-fit iframe heights to their content -->
<script>(function(){window.addEventListener("message",function(e){if(e.origin!=="https://www.switchwize.com")return;var d=e.data;if(!d||d.type!=="sw-embed-resize")return;var f=document.getElementsByTagName("iframe");for(var i=0;i<f.length;i++){if(f[i].contentWindow===e.source){f[i].style.height=d.height+"px";break;}}});})();</script>Dated monthly time series for each SwitchWize index, as machine-readable JSON with Dataset schema. JSON datasets include schemaVersion, asOf, freshnessStatus, and a series array.
Current-state and event feeds for SwitchWize's tracked credit card catalog, refreshed hourly. Every row carries a real verification timestamp (verifiedAt or observedAt) and a sourceUrl.
What happens automatically at CD maturity, and which credit cards have a verified no-fee downgrade path — sourced directly from each institution's own disclosure, refreshed hourly. A field or card not listed has been checked and not confirmed, never assumed absent.
Rates are collected from official provider pages where available and cross-checked against trusted sources. Data is provided as-is for informational use; verify with the provider before acting. Questions: editorial@switchwize.com.