Skip to main content
Glama
fukagawa-de

kontozack-mcp

by fukagawa-de

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 client.

Built by 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 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.

Related MCP server: mbank-parser-mcp

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):

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

Restart Claude Desktop afterwards.

Claude Code

claude mcp add kontozack -- npx -y kontozack-mcp

Cursor

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

{
  "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

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-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.

License

MIT — see LICENSE.

Available Tools

3 tools
export_bank_statement_csvExport a bank statement as German CSVA

Parses a German bank statement PDF (currently: SumUp) and writes all transactions to a German-style CSV file: semicolon separator, comma decimals, UTF-8 BOM (opens cleanly in German Excel; suitable as DATEV import basis). Returns the number of data rows and the output path.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the bank statement PDF
output_pathYesAbsolute path of the CSV file to create (will be overwritten)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does disclose real traits: the supported source is limited ('currently: SumUp'), the exact encoding conventions (semicolon separator, comma decimals, UTF-8 BOM), the intended use (German Excel, DATEV import basis), and the return values. It omits failure behavior for non-SumUp PDFs; the overwrite behavior is only in the schema, not the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense but well-formed sentence followed by a short returns clause; the format specifics are front-loaded and nothing is redundant filler. Slightly heavy parenthetical stacking, but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter export tool with no output schema, the description covers the source limitation, the output format, and the return values (row count and path). Gaps are minor: it doesn't restate the output-file overwrite risk or describe how unsupported statement formats fail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented in the schema (absolute PDF path, absolute output path with overwrite note), so the baseline of 3 applies. The description adds context about what the output file contains but no additional parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Parses a German bank statement PDF ... writes all transactions to a German-style CSV file') and names the concrete output format. It is distinguishable from a pure-parsing tool, but it never explicitly contrasts itself with the siblings parse_bank_statement and validate_bank_statement, leaving the routing implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the outcome ('writes ... to a CSV file'): an agent can infer you call this when you want a CSV export. There is no explicit when-to-use, when-not-to-use, or reference to the sibling tools that would tell an agent when to prefer parse_bank_statement or validate_bank_statement instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_bank_statementParse a German bank statement PDFA
Read-only

Parses a German bank statement PDF (currently: SumUp account statements) into structured transactions. Returns statement header data (IBAN, period, balances), the number of transactions, proof-calculation validation checks (parsed sums must match the statement's own header totals), and the transactions themselves (truncated above 500 – use export_bank_statement_csv for the full data). More bank formats: https://kontozack.de

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the bank statement PDF

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true. The description goes well beyond that by disclosing the 500-transaction truncation limit, the fact that parsed sums are proof-checked against the statement's own header totals, and the concrete shape of the return payload. These are exactly the behavioral traits an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and scope, then the return contents, then the truncation caveat and alternative. The trailing promotional URL for kontozack.de is the one sentence that does not earn its place for tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing return values and does so fully: header data (IBAN, period, balances), transaction count, validation checks, and the transactions themselves with a truncation caveat. Nothing needed to call or interpret the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter, and the schema already documents it as an absolute path to the PDF. The description adds no syntax or format detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (parses) and resource (German bank statement PDF) with an explicit current scope limitation (SumUp account statements). An agent immediately knows what it produces: structured transactions plus header data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to export_bank_statement_csv when the 500-transaction truncation is hit, which is a concrete when-to-use signal. It does not, however, differentiate itself from validate_bank_statement, leaving one sibling relationship unexplained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_bank_statementValidate a bank statement PDF (proof calculation)A
Read-only

Parses a German bank statement PDF (currently: SumUp) and runs only the proof-calculation checks: the sums of the parsed transactions must match the statement's own header totals (incoming, outgoing incl. fees, balance delta) and every row must carry a running balance. Use this to verify a statement was read completely and correctly.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the bank statement PDF

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds real behavioral context beyond that: the scope limit (only proof-calculation checks, not full validation), the supported document source (currently SumUp only, German statements), and the specific invariants checked. It stops short of saying what happens when a check fails or what the result looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what is parsed and which checks run, with the use case trailing at the end. Every clause carries information (source, checks, invariants), though the first sentence is dense with parentheticals and slightly harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should ideally describe the validation result shape (pass/fail, which invariants failed), but it only states what is checked. Everything else an agent needs to call it correctly — read-only nature, single file path, supported source — is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter and schema coverage is 100%, so the schema already documents file_path fully. The description adds only indirect guidance by specifying this must be a German SumUp statement PDF, which constrains the accepted input, but no path, format, or size details beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (parses + runs proof-calculation checks) on a specific resource (German bank statement PDF, currently SumUp) and enumerates exactly which checks run: sums vs header totals (incoming, outgoing incl. fees, balance delta) and per-row running balance. This is far more precise than the sibling parse_bank_statement would need, so an agent can distinguish validation from plain parsing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case: 'Use this to verify a statement was read completely and correctly,' and the 'only the proof-calculation checks' phrasing implies broader validation exists elsewhere. However, it never names parse_bank_statement or export_bank_statement_csv as the alternatives, so the routing decision is left partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedexport_bank_statement_csv
    • First observedparse_bank_statement
    • First observedvalidate_bank_statement

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Converts PDF bank statements into structured data (Markdown, JSON, CSV, JSONL) with verified transactions and balance checks, enabling agents to audit numbers.
    5
    3 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables parsing and filtering of mBank CSV operation exports locally. Supports data aggregation and querying through natural language, running entirely offline with no network calls.
    3
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Converts customer-supplied PDF bank statements into checked Excel, CSV, or JSON with balance validation. Runs locally with your own MainBook API key or against MainBook's hosted endpoint, and it never connects to bank accounts.
    5
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to parse and analyze PDF invoices, including text, field, and table extraction, OCR for scanned documents, ZUGFeRD support, compliance validation, and batch processing via MCP.
    -