Home · Guides

Reconciling a bank export in chat

The bank statement is the only complete record you have. Everything else is a record of what you remembered to write down, which is why reconciliation is the step that finds the missing paperwork rather than the step that confirms it is all there.

Import

Import ~/Downloads/revolut-main.csv as my main account.

Paste this into Claude with the server connected.

statement_import. It sniffs the delimiter and the header row, which is what makes an export from any bank work rather than one specific format. A run recorded in docs/USER_VALUE_R27.md on 2026-09-05 imported a 4,422-byte Revolut export and read 41 transactions, of which 33 were August debits.

One thing that trips people: hand it a local path. A bare http:// argument where a file is expected resolves as a relative filesystem path rather than being downloaded. That is recorded as defect D-R83 in the same document. Download first, then say the path.

Categorise once, not every month

Anything from Adobe is software, anything from PKP is travel, and anything from Zabka is subsistence.

Paste this into Claude with the server connected.

category_rules. Rules are matched on the merchant text and applied to new imports, so the second month is mostly automatic. Free tier holds 5 rules across 2 accounts with 12 months of transactions.

The call that earns its keep

Reconcile August against my logged expenses and tell me what has no receipt.

Paste this into Claude with the server connected.

reconcile_expenses. In that recorded run it returned EUR 1,283.73 unreceipted across the August debits. That number is the point of the exercise: it is the list of things you spent money on and never logged, sorted so you can work down it.

On the free tier reconciliation runs 31 days at a time. A year is twelve calls, which is tedious and works. Pro removes the window.

Find the subscriptions you forgot

What is recurring on this account?

Paste this into Claude with the server connected.

recurring_detect looks for repeated charges. Free covers the last 3 months and reports 5 charges, which in practice is enough to find the two you were not thinking about.

Matching money in against invoices

The bank server categorises and reconciles spending. For money coming in, the pairing is manual and deliberate: transactions_search finds the credit, and invoice_mark_paid on the invoice server records it in full or in part and reports the balance due. There is no automatic matcher, because a payment that is 3 EUR short of an invoice is either a bank fee or a dispute, and guessing which one costs more than asking.

Ten tools on this server, counted from data/tools.json. Free and Pro splits from data/facts.json.

Questions

Which banks does the CSV importer handle?

It is format-agnostic rather than bank-specific: it sniffs the delimiter and guesses the header row, then maps date, description and amount. Exports that split debit and credit into two columns, and exports that use a single signed column, both work. A format it cannot read fails loudly with the row it choked on rather than importing half a file.

Does anything get uploaded?

No. The server makes no network call at all. Transactions live under ~/.local/share/mcp-servers/bank-statement/ as plain JSON, and you can delete the folder to delete the data.

Can I import the same file twice?

Importing overlapping ranges is the normal case, since bank exports usually overlap at the edges. Check the imported count against the file's own row count on the first import so you know what a clean number looks like for your bank, then compare on later ones.

What does reconciliation actually compare?

Bank debits against expenses logged on the expense tracker over the same window, by amount and date proximity. What it returns is the unmatched side: debits with nothing logged against them. It does not create expenses for you, because a bank line has no VAT rate, no project and no billable flag, and inventing those is how a ledger stops being true.

Related

All MCP servers and prices · All guides · Buy the bundle $39