Skip to content
MCPSTAMP

AnswerLive data

Can Claude reconcile bank statements?

Yes, for a one-off check. With code execution on (the default on Free, Pro and Max) Claude can compare an uploaded bank CSV with your expense list in its sandbox, and Claude Code can do it with files on your disk. Each month it writes the matching again, and the expense list has to come from somewhere. Connect the Bank Statement server (free token) and Claude imports the bank CSV into a saved ledger and matches each debit to an expense saved in the Expense Tracker server, by currency and exact amount within a few days. It lists what matched, bank lines with no expense and expenses that never hit the bank.

What Claude does alone, and what needs the server

Claude on its own

  • Compares two files you upload, in its sandbox, when code execution is on.
  • Explains why a bank balance and a ledger can differ.

With the Bank Statement server

  • A saved bank ledger that later months add to.
  • Matches against expenses you logged during the month.
  • A list of bank lines with no receipt behind them.

A real call to the live server

We sent this to the hosted server on 2026-11-05. The answer below is the server's own text, not a mock-up. Live values will differ when you ask.

You ask

Match my November bank debits against the expenses I logged.

Tool call

reconcile_expenses {"from":"2026-11-01","to":"2026-11-30"}

Server answer

{"window_days": 3, "matched": 2, "matches": [{"amount": "USD -59.99", "bank": {"id": "95bf4080", "date": "2026-11-03", "account": "checking", "counterparty": "ADOBE CREATIVE CLOUD"}, "expense": {"id": "081a1d06", "date": "2026-11-02", "merchant": "Adobe", "category": "software"}, "days_apart": 1}, {"amount": "USD -48.30", "bank": {"id": "f1ec6064", "date": "2026-11-04", "account": "checking", "counterparty": "SHELL OIL 5544"}, "expense": {"id": "b55afb5f", "date": "2026-11-03", "merchant": "Shell", "category": "travel"}, "days_apart": 1}], "unmatched_bank": [{"id": "dea664ca", "date": "2026-11-04", "amount": "USD -6.75", "counterparty": "BLUE BOTTLE COFFEE"}], "expenses_without_a_bank_line": [], "note": "Matching is by exact amount in the same currency within the date window; a bank line that bundles two receipts will not match either of them."}

A four-line bank CSV was uploaded with bank_upload and imported with statement_import first, and the two expenses were logged in the Expense Tracker server. The server answers in JSON. This is a shortened copy, and every field shown is unchanged.

You ask

Import checking-nov.csv as my checking account.

Tool call

statement_import {"path":"checking-nov","account":"checking","currency":"USD"}

Server answer

{"account": "checking", "columns": {"date": "Date", "description": "Description", "amount": "Amount", "debit": null, "credit": null, "currency": null, "balance": null, "counterparty": null}, "date_order": "ymd", "rows_read": 4, "imported": 4, "duplicates_skipped": 0, "date_range": {"from": "2026-11-03", "to": "2026-11-05"}}

The CSV was uploaded with bank_upload first. The server answers in JSON. This is a shortened copy, and every field shown is unchanged.

Connect it in 1 minute

Get a free token first. No account, 30 days, 600 calls an hour. Put it in the URL in place of <token>. In Claude.ai or Claude Desktop open Settings, then Connectors, then Add custom connector, and paste the URL.

1. Free token

curl -s -X POST https://mcp.zovo.one/mcp/token

Connector URL (replace <token>)

https://mcp.zovo.one/mcp/bank-statement/t/<token>

Claude Code

claude mcp add --transport http bank-statement https://mcp.zovo.one/mcp/bank-statement/t/<token>

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "bank-statement": {
      "url": "https://mcp.zovo.one/mcp/bank-statement/t/<token>"
    }
  }
}

VS Code (.vscode/mcp.json)

{
  "servers": {
    "bank-statement": {
      "type": "http",
      "url": "https://mcp.zovo.one/mcp/bank-statement/t/<token>"
    }
  }
}

All 10 tools, free and Pro limits and more prompts are on the Bank Statement MCP server page.

Questions

Can Claude reconcile bank statements?
Yes, for a one-off check. With code execution on (the default on Free, Pro and Max) Claude can compare an uploaded bank CSV with your expense list in its sandbox, and Claude Code can do it with files on your disk. Each month it writes the matching again, and the expense list has to come from somewhere. Connect the Bank Statement server (free token) and Claude imports the bank CSV into a saved ledger and matches each debit to an expense saved in the Expense Tracker server, by currency and exact amount within a few days. It lists what matched, bank lines with no expense and expenses that never hit the bank.
Can it read a PDF statement?
No. The upload has to be delimited text such as a CSV export, and a PDF statement is refused. Download the CSV from your online banking if it offers one.
What is free, and what does Pro add?
On the free tier a match covers up to 31 days per call, which fits one month, and the free tier reads the last 12 months of imported lines. Category rules are free up to 5. Pro is $19 once for the Bank Statement server, or $39 once for all 49 servers. It matches over any date range.
Is the server free?
The hosted Bank Statement server has a free tier. A free token lasts 30 days and allows 600 calls an hour, with no account. Some features are Pro, and the server page lists what is free and what is not.

More questions people ask Claude

All answers ยท All free servers

Get an email when a new free server ships

About once a month, one short email lists the free MCP servers and Can Claude answers we added since the last one. Your address is used for nothing else. We first send a link to confirm, and you are not on the list until you click it. Every email has an unsubscribe link. Details are on the privacy page.