BankBridge, Your Bank Account For Your Agent

4 min readThings I Made, AI & Agents

Jake Marsh
In this post
  1. What You Can Ask
  2. The Tools
  3. Finding Recurring Charges
  4. Nothing Gets Stored
  5. When a Bank Needs Attention
  6. Slash Commands For Common Questions
  7. Trying It

I do most of my thinking with an agent open next to me now, and for a long time the one thing it couldn’t help with was money. I’d want to know how much we spent on food last month, or which subscriptions had quietly gone up, and the answer meant exporting CSVs from three different banks and pasting them in.

So I made BankBridge. It connects your agent to your bank with read-only access over MCP, and then you just ask. It launched today at bankbridge.money.

What You Can Ask#

These are the questions I kept wanting to type, and they work now:

  • “How much did I spend on food this month?”
  • “How much of travel last quarter was business?”
  • “List all of my recurring bills and subscriptions, and categorize them.”

The agent figures out which tools to call, pulls the transactions it needs, and does the math. Because it’s your normal agent, you can keep going in the same conversation: “ok, which of those went up this year?” or “draft a budget from the last three months.”

It works with Claude Code, Claude Desktop, Codex, Gemini CLI and anything else that speaks MCP. Clients that support it connect with OAuth (dynamic client registration plus PKCE), and everything else uses an API key.

The Tools#

BankBridge exposes a small set of tools, and each one does one job:

  • list_accounts and get_account for balances and account details
  • list_transactions, filtered by date, amount, category or account
  • search_transactions for finding a merchant or description
  • get_spending_summary, grouped by category, merchant, month or week
  • get_recurring_charges for subscriptions and bills
  • get_monthly_cashflow for money in versus money out
  • get_merchant_history for every charge from one place, with totals
  • list_categories
  • list_holdings and list_investment_transactions for brokerage accounts
  • connect_bank, which hands back a link for adding another bank

I spent a lot of time on the descriptions and arguments for these, since that’s the whole interface an agent sees. Amounts come back in dollars, spending is positive and income is negative, and every tool says so, so the agent doesn’t have to guess which way the signs go when it adds things up.

Finding Recurring Charges#

The recurring charges tool was one of the more fun ones to get right. Bank data doesn’t come labeled “subscription,” so BankBridge groups charges by merchant and looks at the gaps between them. It takes the median interval, allows some wiggle room around it, and only counts a merchant as recurring when most of its charges land on that rhythm:

mcp-server.tsTypeScript
const median = sortedIntervals[Math.floor(sortedIntervals.length / 2)];
const tolerance = Math.max(2, Math.round(median * 0.3));
const consistent = intervals.filter((i) => Math.abs(i - median) <= tolerance);
if (consistent.length / intervals.length < 0.7) continue;

const freq = classifyFrequency(median);
if (!freq) continue;

That median then gets classified as weekly, biweekly, monthly, quarterly or yearly. Using the median instead of the average means one late charge, or one month a bill posted on a weekend, doesn’t knock a real subscription off the list.

Nothing Gets Stored#

This was the design decision I cared about most. BankBridge doesn’t keep a copy of your financial data. Every tool call fetches live from your bank connection, does its filtering and grouping in memory, and returns. There’s no table of transactions or balances sitting in a database somewhere.

The database holds what it needs to run the service and nothing else: your login, your subscription, your API keys (stored only as SHA-256 hashes, so even I can’t see them after you’ve copied yours) and the encrypted credential for each bank connection. Every MCP request also gets its own server instance scoped to the signed-in user, so there’s no shared state where one person’s data could end up in someone else’s answer.

It’s read-only all the way down. BankBridge can’t move money, pay a bill or change anything about your accounts.

When a Bank Needs Attention#

Bank connections expire and need to be re-confirmed every so often, and banks have bad days. I didn’t want one flaky bank to break every answer, so tools return whatever they could get along with a warnings list written for the account owner. If one of your three banks needs to be reconnected, you still get answers from the other two, plus a plain note about the third with the link that fixes it. BankBridge also emails you ahead of time when a bank’s consent is about to expire, so it usually never gets that far.

Slash Commands For Common Questions#

There’s also a Claude Code plugin with 19 slash commands for the questions people ask over and over, and they’re exposed as MCP prompts too, so other clients can use them. A few I use a lot:

  • /bankbridge:monthly-report for a rundown of the month
  • /bankbridge:subscriptions for everything that renews
  • /bankbridge:price-creep, which finds recurring charges whose price went up over the last year
  • /bankbridge:duplicate-check, which flags the same merchant and amount twice within 48 hours
  • /bankbridge:tax-prep for pulling together the year

Each one is a short set of steps for the agent: which tools to call, what to compare and how to lay out the result. price-creep, for example, gets the recurring charges, pulls a year of history for each merchant, and only reports changes over 5% and over a dollar, so rounding noise stays out of it.

Trying It#

Sign up at bankbridge.money, connect a bank, and copy the setup line for your agent of choice. Then ask it something you’ve been meaning to figure out for a while. A good first one is “what am I paying for every month?”