# bank statement [Health: Active]

**Category:** 💰 Finance & Fintech  
**Repository:** https://github.com/theluckystrike/mcp-bank-statement  
**GitHub Stars:** 0  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/bank-statement

## Description
Import a bank CSV export, categorise it, summarise it per currency, find recurring charges and reconcile it against your expense ledger. Everything stays on your machine.

## Tools
Capabilities this server exposes over MCP:

- **statement_import** — Read a bank CSV into the ledger. Detects the header row under any preamble, the date, description, amount (or debit and credit) and currency columns, the date order and the number locale. Reports what it detected, what it stored, how many lines were duplicates of what is already there, and every li…
- **transactions_list** — List transactions in a date range, filtered by account, category or `uncategorized`, with totals per currency
- **transactions_search** — Find transactions whose description, counterparty, category or account contains the query. Substring only, never a regex
- **category_rules** — Set or list the rules that categorise transactions. An empty match is refused, because it would stamp one category on the whole ledger. A plain match is a case-insensitive substring; `regex: true` compiles the pattern only if it cannot backtrack exponentially, and `(a+)+` is refused and used as a s…
- **transaction_categorize** — Set the category on transactions by id. Nothing changes unless every id exists
- **statement_summary** — Money in, money out and the net for a range, grouped by category, month, account or counterparty, always per currency
- **reconcile_expenses** — Match bank debits against the receipts in `mcp-expense-tracker`: same currency, same amount, within a date window. Reports matches, bank lines with no receipt, and receipts that never reached the bank. The expense ledger is only ever read
- **recurring_detect** — Find subscriptions and recurring charges: the same counterparty, an amount that barely moves, a steady cadence. Reports the cadence, the typical amount, the next expected date and the annualised cost. Two charges are one interval, so the yearly cost is withheld (`cadence_confirmed: false`) until a…
- **statement_export** — Write a range to csv or json and return the path. Written atomically, so a failure never leaves a half file. Replacing an existing file is allowed and reported (`overwrote_existing_file`)
- **accounts_list** — The imported accounts, with bank, currencies, transaction count, date range and last balance
- **license_status** — Show free or Pro mode
- **license_activate** — Activate a Pro key (verified offline)

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "bank-statement": {
    "command": "npx",
    "args": ["-y","@theluckystrike/mcp-bank-statement"]
  }
}
```

## Documentation

## What bank statement MCP server does

The bank statement MCP server turns exported bank CSV files into a ledger stored on the local machine. It can locate a header beneath introductory text, identify date, description, amount or debit-and-credit, and currency columns, and interpret common date and number formats. Supported input handling includes UTF-8 and UTF-16 files, common line endings, quoted fields, mixed currencies, accounting parentheses, and trailing minus signs.

Imported debits become negative values and credits become positive values. Each transaction receives a duplicate-detection hash based on its date, amount, currency, description, and occurrence index. This means repeated identical transactions remain separate, while importing the same statement again does not add another copy.

## How it works

Use `statement_import` to load a CSV and receive details about detected columns and formats, stored rows, duplicates, and skipped lines. A blank or dash amount is skipped instead of being treated as zero. If a date such as `03/04/2026` is ambiguous, the assumed order is reported.

After import, `transactions_list` reads a date range with optional account, category, or uncategorized filters. `transactions_search` performs substring matching across descriptions, counterparties, categories, and accounts; it does not interpret the query as a regular expression. `statement_summary` reports money in, money out, and net totals grouped by category, month, account, or counterparty, while keeping currencies separate.

The bank statement MCP server can apply categorisation rules or assign categories directly by transaction ID. Rules use case-insensitive substring matching by default. Regular expressions can be enabled, subject to a check that rejects patterns capable of exponential backtracking. `recurring_detect` identifies likely subscriptions and recurring charges from counterparty, amount stability, and cadence. It reports the typical amount, cadence, next expected date, and annualised cost; annualisation remains unconfirmed until three charges establish an interval.

## Setup and configuration

Three supported paths are available. A hosted streamable-HTTP endpoint accepts a bearer token, or the token can be included in the URL path for clients that cannot set headers. The bare hosted endpoint requires authentication for tool calls. For local use, download the `.mcpb` bundle and open it in Claude Desktop, or clone the source, install dependencies, and build it before pointing an MCP client at `dist/index.js`.

The repository states that the npm package is not yet published, so an `npx` configuration will not work until publication. Claude Desktop, Claude Code, and Cursor are named client options. Pro mode can be enabled by setting `MCP_LICENSE_KEY` in the client configuration or by calling `license_activate`; `license_status` reports the current mode.

## Tools and capabilities

- Import, list, search, categorise, summarise, and export transactions.
- Define or inspect category rules and apply categories by transaction ID.
- List imported accounts with bank, currencies, transaction count, date range, and last balance.
- Reconcile bank debits with receipts from `mcp-expense-tracker` using currency, amount, and a date window. The expense ledger is read-only to this tool.
- Export a selected range as CSV or JSON. Files are written atomically, and replacement of an existing file is reported.
- Use the `bank://month` resource for the current month's per-currency totals and the `monthly_review` prompt for a month-end review flow.

## Limitations and notes

The bank statement MCP server keeps its ledger in plain JSON files on the local machine, according to the provided documentation. Free mode limits accounts to two, read-back history to 12 months, and category rules to five. Free reconciliation is limited to 31 days at a time, while recurring detection covers the last three months and five charges. Pro mode removes those stated account, history, and rule limits and permits broader reconciliation and recurring-charge analysis.

The source mirror includes profiles for Revolut, Wise, mBank, PKO BP, ING, and N26, plus a generic header-based reader. Reconciliation depends on the separate `mcp-expense-tracker` ledger being available. The hosted option requires a token; local source builds do not require the npm package to be published.

_Full upstream README: https://allmcps.com/mcp/bank-statement/readme_

