Skip to main content
Glama
fukagawa-de

kontozack-mcp

by fukagawa-de
README.md
# kontozack-mcp

MCP server that parses **German bank statement PDFs** into structured, validated
transaction data — right inside Claude Desktop, Claude Code, Cursor, or any other
[Model Context Protocol](https://modelcontextprotocol.io) client.

Built by [kontozack.de](https://kontozack.de), the German bank-statement converter.

> **Honest scope note:** this server currently supports **SumUp account statements**
> ("SumUp Account Kontoauszug"). More German bank formats are coming. Need another
> format today? The web version at [kontozack.de](https://kontozack.de) supports more.

## What it does

| Tool | Purpose |
| --- | --- |
| `parse_bank_statement` | Parse a statement PDF into header data (IBAN, period, balances) + structured transactions. Above 500 transactions the list is truncated (with `total_count`) — use the CSV export for everything. |
| `export_bank_statement_csv` | Write **all** transactions to a German-style CSV: semicolon separator, comma decimals, UTF-8 BOM (opens cleanly in German Excel, suitable as a DATEV import basis). |
| `validate_bank_statement` | Run only the proof-calculation checks: parsed sums must match the statement's own header totals, and every row must carry a running balance. |

Every parse is **validated by proof calculation** — the sums of all extracted
transactions must add up exactly to the totals printed on the statement itself
(incoming, outgoing incl. fees, opening/closing balance delta). If a check fails,
the tools tell you.

All processing happens **locally on your machine**. Your bank data never leaves
your computer.

## Requirements

- Node.js 18 or newer

## Installation & configuration

### Claude Desktop

Add to your `claude_desktop_config.json`
(macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`,
Windows: `%APPDATA%\Claude\claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "kontozack": {
      "command": "npx",
      "args": ["-y", "kontozack-mcp"]
    }
  }
}
```

Restart Claude Desktop afterwards.

### Claude Code

```bash
claude mcp add kontozack -- npx -y kontozack-mcp
```

### Cursor

Add to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` in your project:

```json
{
  "mcpServers": {
    "kontozack": {
      "command": "npx",
      "args": ["-y", "kontozack-mcp"]
    }
  }
}
```

## Usage examples

Ask your AI assistant things like:

- *"Parse the bank statement at /Users/me/Downloads/sumup-2025.pdf and summarize the biggest expenses."*
- *"Convert /Users/me/Downloads/sumup-2025.pdf to CSV at /Users/me/Desktop/buchungen.csv."*
- *"Validate whether /Users/me/Downloads/sumup-2025.pdf was read completely."*

File paths must be **absolute**. The server reads the PDF locally and never
uploads it anywhere.

## Development

```bash
npm install
npm run build       # compile TypeScript to dist/
npm run typecheck   # tsc --noEmit
npm test            # build + integration tests (needs a local test PDF, see tests/run-tests.mjs)
```

---

## Deutsch: Kontoauszüge für KI-Agenten

`kontozack-mcp` macht deutsche **Kontoauszug-PDFs** für KI-Assistenten lesbar —
als [MCP](https://modelcontextprotocol.io)-Server für Claude Desktop, Claude Code,
Cursor & Co.

- **`parse_bank_statement`** – liest den Auszug (aktuell: **SumUp-Kontoauszüge**)
  und liefert Kopfdaten (IBAN, Zeitraum, Salden) plus strukturierte Buchungen.
- **`export_bank_statement_csv`** – exportiert alle Buchungen als deutsches CSV
  (Semikolon, Komma-Dezimaltrennzeichen, UTF-8-BOM — öffnet sauber in Excel,
  geeignet als Basis für den DATEV-Import).
- **`validate_bank_statement`** – Beweisrechnung: Die Summen aller ausgelesenen
  Buchungen müssen exakt auf die im Auszug gedruckten Summen aufgehen.

Die Verarbeitung läuft **komplett lokal** — Ihre Bankdaten verlassen den Rechner
nicht. Weitere Formate und die Web-Version: **[kontozack.de](https://kontozack.de)**.

## License

MIT — see [LICENSE](LICENSE).

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation4/5

Each tool has a distinct primary outcome: structured parse, CSV export, and validation-only. However, parse_bank_statement already returns proof-calculation validation checks, so it partially overlaps with validate_bank_statement, and all three re-parse the same PDF, which could cause selection confusion.

Naming Consistency5/5

All three tools follow a clean verb_noun snake_case pattern: parse_bank_statement, export_bank_statement_csv, validate_bank_statement. The shared domain suffix makes the pattern predictable and readable.

Tool Count4/5

Three tools is on the lean side but each maps to a genuine need (parse, export, validate) for a narrow PDF-parsing domain. Nothing is redundant enough to warrant trimming, though the surface is thin.

Completeness3/5

The parse/export/validate lifecycle is covered, but only SumUp statements and only one export format (German CSV) are supported; no other bank formats, no alternate output formats, and no listing of supported statements despite the description pointing to more formats externally.

Maintenance

ActivityMaintained
ResponsivenessNo issues