Skip to main content
Glama
NG-Bullseye

FinTS-Finanzen

by NG-Bullseye

FinTS-Finanzen

Read-only MCP server for German banks via FinTS/HBCI — accounts, balances, and transactions over PIN/TAN.

To our knowledge, this is the only MCP server for the FinTS/HBCI protocol — the standard online-banking interface supported by virtually every German bank. It gives an LLM a safe, read-only window into your bank accounts: no transfer code exists anywhere in this codebase.

License: MIT Python 3.10+

🇩🇪 Deutsche Version

Features

MCP tools exposed over stdio (via FastMCP):

Tool

Description

accounts()

List all accounts (IBAN, account number, BIC)

balance(iban_or_account=None)

Current balance of one account (empty → first account)

transactions(days=30, account=None)

Transactions of the last days days

summary()

All accounts + balances in a single call

  • Strictly read-only — the wrapper around python-fints only implements account listing, balances, and transaction retrieval. There is no code for transfers or any other write operation.

  • Any FinTS bank — defaults to DKB (12030000), switchable to any other FinTS-capable bank via FINTS_BANK_CODE / FINTS_ENDPOINT.

  • Graceful errors — expected failure modes (not enrolled, missing master key, TAN required, bank/network errors) are returned as structured tool errors ({"ok": false, "error": "...", "message": "..."}), never as crashes.

  • ~90 days TAN-free reads — after a one-time interactive pushTAN enrollment, the persisted FinTS client state keeps read access TAN-free under the PSD2 SCA exemption (~90 days). When it expires, tools return a tan_required error and you simply re-run enroll.py.

Related MCP server: finance-reconcile-mcp

Installation

Requires Python 3.10+.

git clone https://github.com/NG-Bullseye/FinTS-Finanzen.git
cd FinTS-Finanzen
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

1. Generate a master key (one-time)

cp .env.example .env
.venv/bin/python -c "import crypto; print(crypto.generate_key())"
# put the output into .env as FINTS_MASTER_KEY

(enroll.py can also generate and display a key for you.)

2. Enroll (one-time, interactive)

set -a; . ./.env; set +a          # load FINTS_MASTER_KEY into the environment
.venv/bin/python enroll.py

The enrollment asks for your online-banking login name (not the account number) and PIN, walks through the bank's pushTAN flow (including decoupled app-based approval), and — only on success — stores the PIN encrypted plus the FinTS client state.

3. Register the MCP server

The server runs over stdio. Example MCP configuration (FINTS_MASTER_KEY must be set in the server's environment) — use absolute paths, MCP clients do not launch servers from the repo directory. Prefer exporting FINTS_MASTER_KEY in the client's environment over writing it into this file:

{
  "mcpServers": {
    "fints-finanzen": {
      "command": "/absolute/path/to/FinTS-Finanzen/.venv/bin/python",
      "args": ["/absolute/path/to/FinTS-Finanzen/mcp_server.py"],
      "env": {
        "FINTS_MASTER_KEY": "<base64-32-byte-key>",
        "FINTS_BANK_CODE": "12030000",
        "FINTS_PRODUCT_ID": ""
      }
    }
  }
}

Configuration

All configuration is via environment variables:

Variable

Default

Purpose

FINTS_MASTER_KEY

— (required)

Base64-encoded 32-byte AES-256-GCM key used to encrypt/decrypt the stored credentials

FINTS_BANK_CODE

12030000 (DKB)

Bank code (BLZ) of your bank

FINTS_ENDPOINT

https://fints.dkb.de/fints

FinTS endpoint URL of your bank

FINTS_PRODUCT_ID

public default from config.py

FinTS product ID. Empty uses a public ID reported working with DKB (python-fints#183). For a clean, permanent setup, register your own ID with the Deutsche Kreditwirtschaft (fints.org product registration)

Security model — honest description

How your bank credentials are actually handled (verifiable in crypto.py, config.py, fints_client.py):

  • Encryption at rest. Your login name and PIN are stored AES-256-GCM-encrypted (12-byte random nonce per encryption, prepended to the ciphertext) in ~/.config/fints-finanzen/credentials.enc. The FinTS client state (system ID, BPD/UPD) is stored alongside as fints_state.bin. Directory mode 0700, file mode 0600. Nothing sensitive is inside the repo directory, and .gitignore keeps .env out of git.

  • The key lives only in the environment. The AES key comes exclusively from the FINTS_MASTER_KEY environment variable — it is never written to disk by this project. Without it, the stored credentials are unreadable. Flip side, stated plainly: whoever has both the key (e.g. from your MCP config file or process environment) and credentials.enc can decrypt your PIN. Protect your MCP configuration accordingly.

  • PIN in memory at runtime. To talk to the bank, the server necessarily decrypts the PIN in process memory for each FinTS dialog. It is never logged or returned by any tool.

  • Read-only by construction. The FinTS wrapper implements only get_sepa_accounts, get_balance, and get_transactions. Even a fully compromised LLM session cannot initiate transfers through this server, because the code for it does not exist.

  • PIN entry only in enroll.py. The PIN is read via getpass (no echo) in the interactive enrollment; the MCP server itself never asks for or accepts credentials.

License

MIT

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A read-only MCP server that enables users to analyze their real bank, credit card, loan, and brokerage data through Plaid. It provides financial analysis tools for transactions, balances, investments, liabilities, and debt while keeping all access tokens and data locally stored.
    Last updated
    24
    MIT
  • F
    license
    -
    quality
    D
    maintenance
    Read-only MCP server for accessing personal finance data from Ogarni.AI, including receipts, categories, summaries, notifications, and more.
    Last updated
  • A
    license
    -
    quality
    B
    maintenance
    A read-only MCP server that provides filtered account and portfolio data from Portfolio Performance .portfolio files to generate reports.
    Last updated
    3
    MIT

View all related MCP servers

Related MCP Connectors

  • Read-only MCP server for ClassQuill, a tutoring-business-management platform.

  • Read-only MCP server for Robinhood Chain token discovery, research, and due diligence via GMGN.

  • Read-only MCP server for searching Japan government procurement bid information from the KKJ portal.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NG-Bullseye/FinTS-Finanzen'

If you have feedback or need assistance with the MCP directory API, please join our Discord server