StatementKit - bank statement normalizer
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Normalize bank statements (CSV, camt, MT940, OFX, QIF) to JSON, analyze, export.
| Author | dev.workers.zenith-ops.statementkit |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2169 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"StatementKit - bank statement normalizer": {
"url": "https://statementkit.zenith-ops.workers.dev/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (5)
list_formatsread-onlyList the supported statement formats, CSV column synonyms, limits and prices. Free.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
parse_statement_demoread-onlyFree demo: parse a statement (max 24 KB) into normalized JSON; returns the first 100 transactions plus an analysis preview. Rate limited to 20 calls per hour.
Parameters:
content(required) — string — The statement file as text (UTF-8). PDF and scanned images are not supported.format— string — Skip auto-detection.columns— object — CSV: map field names (date, amount, description, ...) to exact header names.decimal— string — CSV decimal separator override.currency— string — Fallback ISO 4217 currency when the file has none, e.g. SEK.delimiter— string — CSV delimiter override: comma, semicolon, tab or pipe.dateFormat— string — CSV date order override for ambiguous dates.includeRaw— boolean — Add the raw source fields to every transaction.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
parse_statementread-onlyPaid ($0.005): Parses a bank statement (CSV from any bank, camt.052/053/054, MT940, OFX/QFX, QIF) into normalized JSON: accounts, balances and signed transactions with ISO dates, counterparty, reference and OCR number. Deterministic, no AI, nothing stored. JSON body up to 1000 KB. Failed calls (4xx/5xx) are not settled. Without a payment header the result is the x402 payment requirements.
Parameters:
content(required) — string — The statement file as text (UTF-8). PDF and scanned images are not supported.format— string — Skip auto-detection.columns— object — CSV: map field names (date, amount, description, ...) to exact header names.decimal— string — CSV decimal separator override.currency— string — Fallback ISO 4217 currency when the file has none, e.g. SEK.delimiter— string — CSV delimiter override: comma, semicolon, tab or pipe.dateFormat— string — CSV date order override for ambiguous dates.includeRaw— boolean — Add the raw source fields to every transaction.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
analyze_statementread-onlyPaid ($0.01): Parses a statement and adds analysis: monthly totals, top counterparties, recurring payments, suspected duplicates, largest transactions and balance reconciliation. Set include_transactions=false to receive only the analysis. JSON body up to 1000 KB. Failed calls (4xx/5xx) are not settled. Without a payment header the result is the x402 payment requirements.
Parameters:
content(required) — string — The statement file as text (UTF-8). PDF and scanned images are not supported.today— string — YYYY-MM-DD; flags recurring payments that stopped before this date.format— string — Skip auto-detection.columns— object — CSV: map field names (date, amount, description, ...) to exact header names.decimal— string — CSV decimal separator override.currency— string — Fallback ISO 4217 currency when the file has none, e.g. SEK.delimiter— string — CSV delimiter override: comma, semicolon, tab or pipe.dateFormat— string — CSV date order override for ambiguous dates.includeRaw— boolean — Add the raw source fields to every transaction.include_transactions— boolean — Default true. false returns only the analysis.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
convert_statementread-onlyPaid ($0.005): Parses a statement and exports it as normalized CSV, an hledger journal, a SIE4 file (experimental) or JSON. The converted file is returned as a string in the content field. JSON body up to 1000 KB. Failed calls (4xx/5xx) are not settled. Without a payment header the result is the x402 payment requirements.
Parameters:
content(required) — string — The statement file as text (UTF-8). PDF and scanned images are not supported.to(required) — string — Target format.format— string — Skip auto-detection.columns— object — CSV: map field names (date, amount, description, ...) to exact header names.company— string — Company name for the SIE4 header.decimal— string — CSV decimal separator override.currency— string — Fallback ISO 4217 currency when the file has none, e.g. SEK.delimiter— string — CSV delimiter override: comma, semicolon, tab or pipe.dateFormat— string — CSV date order override for ambiguous dates.includeRaw— boolean — Add the raw source fields to every transaction.bankAccount— string — Bank account number (SIE4, e.g. 1930) or ledger account (hledger).assetAccount— string — hledger asset account name.incomeAccount— string — Counter account for incoming money.expenseAccount— string — Counter account for outgoing money.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.