{
  "markdown": "<!-- SPDX-License-Identifier: Apache-2.0 OR MIT -->\n\n<p align=\"center\">\n  <img\n    src=\"https://cloudcdn.pro/bankstatementparser/v1/logos/bankstatementparser.svg\"\n    alt=\"bankstatementparser-mcp logo\"\n    width=\"120\"\n    height=\"120\"\n  />\n</p>\n\n<h1 align=\"center\">bankstatementparser-mcp</h1>\n\n<p align=\"center\">\n  <b>Model Context Protocol server exposing the bankstatementparser library as first-class agent tools for reading bank statements.</b>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://pypi.org/project/bankstatementparser-mcp/\"><img src=\"https://img.shields.io/pypi/v/bankstatementparser-mcp?style=for-the-badge\" alt=\"PyPI version\" /></a>\n  <a href=\"https://pypi.org/project/bankstatementparser-mcp/\"><img src=\"https://img.shields.io/pypi/pyversions/bankstatementparser-mcp.svg?style=for-the-badge\" alt=\"Python versions\" /></a>\n  <a href=\"https://pypi.org/project/bankstatementparser-mcp/\"><img src=\"https://img.shields.io/pypi/dm/bankstatementparser-mcp.svg?style=for-the-badge\" alt=\"PyPI downloads\" /></a>\n  <a href=\"https://github.com/sebastienrousseau/bankstatementparser-mcp/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/sebastienrousseau/bankstatementparser-mcp/ci.yml?branch=main&label=Tests&style=for-the-badge\" alt=\"Tests\" /></a>\n  <a href=\"https://github.com/sebastienrousseau/bankstatementparser-mcp/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/sebastienrousseau/bankstatementparser-mcp/ci.yml?branch=main&label=Coverage&style=for-the-badge\" alt=\"Coverage\" /></a>\n  <a href=\"#license\"><img src=\"https://img.shields.io/pypi/l/bankstatementparser-mcp?style=for-the-badge\" alt=\"License\" /></a>\n  <a href=\"https://glama.ai/mcp/servers/sebastienrousseau/bankstatementparser-mcp\"><img src=\"https://glama.ai/mcp/servers/sebastienrousseau/bankstatementparser-mcp/badges/score.svg\" alt=\"Glama MCP server score\" /></a>\n</p>\n\n---\n\n## Contents\n\n**Getting started**\n\n- [What is bankstatementparser-mcp?](#what-is-bankstatementparser-mcp) — the problem it solves\n- [The ISO 20022 MCP Suite](#the-iso-20022-mcp-suite) — the four coordinated servers and when to use each\n- [Install](#install) — PyPI, virtualenv, Docker\n- [Quick start](#quick-start) — register with Claude Desktop in 30 seconds\n\n**Library reference**\n\n- [Tools](#tools) — the five tools, one resource, one prompt\n- [Using the tools](#using-the-tools) — call them in-process from Python\n\n**Operational**\n\n- [When not to use bankstatementparser-mcp](#when-not-to-use-bankstatementparser-mcp) — honest boundaries\n- [Development](#development) — gates, make targets\n- [Security](#security) — sandboxing posture\n- [Documentation](#documentation) — examples, guides\n- [Contributing](#contributing) — how to get changes in\n- [License](#license) — Apache-2.0\n\n---\n\n## What is bankstatementparser-mcp?\n\nThe [Model Context Protocol](https://modelcontextprotocol.io) (MCP) is\nan open standard that lets AI agents discover and call external tools in\na uniform way. **bankstatementparser-mcp** is the MCP server that turns the\n[`bankstatementparser`](https://github.com/sebastienrousseau/bankstatementparser)\nlibrary into first-class agent tools — so an assistant can read,\nvalidate, and summarise **bank statements** in formats such as ISO 20022\nCAMT.053, SWIFT MT940, OFX/QFX, and CSV directly from a conversation.\n\nEvery tool is a thin wrapper over the `bankstatementparser` parser core\n(`create_parser`, `detect_statement_format`), so the results behave\nidentically to the CLI. Because an MCP client does not share the\nserver's filesystem, the tools take **inline statement content** (plus a\nfilename hint) and materialise it in a private temporary file for the\nduration of a single call. Tools return JSON-serialisable data.\n\n| Concern | How bankstatementparser-mcp handles it |\n| :--- | :--- |\n| Transport | stdio (FastMCP default); zero config beyond the client manifest |\n| Input model | Inline content + filename hint; no shared filesystem required |\n| Format fidelity | Tools delegate to `bankstatementparser`'s `create_parser` pipeline |\n| Format detection | `detect_format` mirrors the library's `detect_statement_format` |\n| Validation | `validate_statement` is a dry run that returns structured results |\n| Isolation | Each call writes to a private temp file that is deleted on exit |\n\n---\n\n## The ISO 20022 MCP Suite\n\n`bankstatementparser-mcp` is the **ingestion layer** of eight coordinated,\nvendor-neutral MCP servers that together cover the ISO 20022\nbank-statement workflow and the November 2026 structured-address\ncutover — statement depth, whole-catalogue routing, reconciliation,\nmulti-format ingestion, and address remediation. Dependency ranges are kept\naligned across the suite, so the servers co-install cleanly in a single\nPython environment: start with one, add the rest as your workflow grows.\n\n| Server | Scope | Surface | Install | Use it when |\n| :--- | :--- | :--- | :--- | :--- |\n| [`camt053-mcp`](https://github.com/sebastienrousseau/camt053-mcp) | ISO 20022 `camt.053`/`camt.052` bank statements: parse, validate, filter, reverse; MT940/MT942 migration; CBPR+ readiness; journal export | 22 MCP tools · 4 prompts · 3 resources | `pip install camt053-mcp` | You work with bank-to-customer statements end to end — the suite's flagship |\n| [`iso20022-mcp`](https://github.com/sebastienrousseau/iso20022-mcp) | Unified gateway: `search` / `describe` / `validate` / `generate` / `parse` meta-tools routed across the `pain` · `pacs` · `camt` · `acmt` families | 7 meta-tools | `pip install \"iso20022-mcp[all]\"` | You want one entry point to every message family |\n| [`reconcile-mcp`](https://github.com/sebastienrousseau/reconcile-mcp) | Matches expected `pain.001` payments against observed `camt.053` entries — exact, partial, one-to-many, many-to-one, every match scored and explained | 7 MCP tools | `pip install reconcile-mcp` | You need explainable statement/payment reconciliation |\n| [`bankstatementparser-mcp`](#install) | Multi-format statement ingestion: ISO 20022 CAMT.053 and pain.001, SWIFT MT940, OFX/QFX, CSV | 5 MCP tools · 1 prompt · 1 resource | `pip install bankstatementparser-mcp` | Your statements arrive in mixed or legacy formats — **this package** |\n| [`structured-address-fix-mcp`](https://github.com/sebastienrousseau/structured-address-fix-mcp) | ISO 20022 postal-address classification, assessment & remediation for the November 2026 structured-address cutover, plus a high-level orchestration layer — readiness scoring, clearing-profile linting, and audit evidence (`pacs.008` / `pain.001` debtor & creditor addresses) | 9 MCP tools | `pip install structured-address-fix-mcp` | You need debtor/creditor addresses cliff-ready ahead of 14 Nov 2026 |\n| [`iso20022-readiness-suite-mcp`](https://github.com/sebastienrousseau/iso20022-readiness-suite-mcp) | Orchestration gateway: detect → structurally validate → clearing-profile lint → readiness score, plus automated remediation and `pacs.002` bank-response simulation — a meta-client over the foundational servers | 4 MCP tools | `pip install iso20022-readiness-suite-mcp` | You want one high-level readiness / orchestration entry point over the suite |\n| [`iso20022-bank-profile-mcp`](https://github.com/sebastienrousseau/iso20022-bank-profile-mcp) | Manages, validates and serves bank-specific clearing profiles / rule packs (CBPR+, SEPA_Instant, FedNow, Generic); premium rule-pack entitlement gating | 4 MCP tools | `pip install iso20022-bank-profile-mcp` | You lint payments against your own institution's market practice |\n| [`iso20022-evidence-pack-mcp`](https://github.com/sebastienrousseau/iso20022-evidence-pack-mcp) | Compiles readiness findings, remediation diffs and simulated responses into a sealed, Ed25519-signable audit evidence pack | 6 MCP tools | `pip install iso20022-evidence-pack-mcp` | You need tamper-evident audit / certification artifacts |\n\nIn one line each: **`camt053-mcp`** is the bank-statement flagship\n(deepest camt.05x surface, stdio + authenticated streamable HTTP);\n**`iso20022-mcp`** is the generic message toolkit (a handful of verbs\nover the whole catalogue); **`reconcile-mcp`** is the reconciliation\nworkflow (did the money we expected actually arrive?);\n**`bankstatementparser-mcp`** is the ingestion layer (many formats in,\none transaction shape out); and **`structured-address-fix-mcp`** is the\npostal-address specialist (debtor/creditor addresses cliff-ready for the\nNov 2026 cutover).\n\n---\n\n## Install\n\n| Channel | Command | Notes |\n| :--- | :--- | :--- |\n| PyPI | `pip install bankstatementparser-mcp` | Pulls in `bankstatementparser >= 0.0.18` + MCP SDK |\n| Source | `git clone https://github.com/sebastienrousseau/bankstatementparser-mcp && cd bankstatementparser-mcp && poetry install` | For development |\n| Docker (GHCR) | `docker pull ghcr.io/sebastienrousseau/bankstatementparser-mcp:latest` | Multi-arch (linux/amd64, linux/arm64); runs `bankstatementparser-mcp` over stdio |\n\nRequires Python 3.10 or later. Works on macOS, Linux, and Windows.\n\n<details>\n<summary>Using an isolated virtual environment (recommended)</summary>\n\n```sh\npython -m venv venv\nsource venv/bin/activate        # macOS/Linux\nvenv\\Scripts\\activate           # Windows\npython -m pip install -U bankstatementparser-mcp\n```\n\n</details>\n\n---\n\n## Quick start\n\nRegister the server with any MCP client (Claude Desktop shown):\n\n```json\n{\n  \"mcpServers\": {\n    \"bankstatementparser\": { \"command\": \"bankstatementparser-mcp\" }\n  }\n}\n```\n\nThat's it. Restart the client and the tools are available to the agent.\n\nThe server speaks JSON-RPC over stdin/stdout — it is meant to be\nlaunched by an MCP client, not used interactively.\n\n---\n\n## Tools\n\nAll tools delegate to the `bankstatementparser` parser core, so they\nbehave identically to the library.\n\n- `list_supported_formats` — List every bank statement format the parser can read\n- `detect_format` — Detect which statement format an inline payload is\n- `parse_statement` — Parse a statement into structured transactions plus a summary\n- `validate_statement` — Dry-run check whether a statement parses cleanly\n- `summarize_statement` — Return only the statement summary (no per-transaction rows)\n\nPlus one resource and one prompt:\n\n- Resource `bankstatementparser://formats` — Read-only catalogue of supported formats and their file extensions\n- Prompt `analyze_statement` — Guided multi-step prompt that walks an agent through reading and reconciling a statement\n\nSupported formats: `camt` (ISO 20022 CAMT.053, `.xml`), `pain001`\n(ISO 20022 pain.001, `.xml`), `csv` (`.csv`), `ofx` (`.ofx`), `qfx`\n(`.qfx`), and `mt940` (SWIFT MT940, `.mt940` / `.sta`).\n\n---\n\n## Using the tools\n\nThe tools are plain functions on the `bankstatementparser_mcp.server`\nmodule, so you can call them in-process:\n\n```python\nfrom bankstatementparser_mcp.server import (\n    detect_format,\n    parse_statement,\n    summarize_statement,\n)\n\ncsv = (\n    \"date,description,amount,currency,balance\\n\"\n    \"2023-01-02,Salary,500.00,EUR,1500.00\\n\"\n    \"2023-01-03,Groceries,-40.50,EUR,1459.50\\n\"\n)\n\n# 1. Detect the format from the filename hint + content.\nprint(detect_format(csv, \"statement.csv\"))\n# -> csv\n\n# 2. Parse the statement into structured rows + a summary.\nparsed = parse_statement(csv, \"statement.csv\")\nprint(parsed[\"transaction_count\"], parsed[\"columns\"])\n\n# 3. Read just the opening/closing balances.\nprint(summarize_statement(csv, \"statement.csv\"))\n```\n\nThe resource and prompt are plain functions too: `formats_resource`\nbacks `bankstatementparser://formats`, and `analyze_statement` returns\nthe guided multi-step prompt.\n\n```python\nfrom bankstatementparser_mcp.server import (\n    analyze_statement,\n    formats_resource,\n)\n\nprint(formats_resource())          # the supported-formats catalogue\nprint(analyze_statement(\"statement.csv\"))  # the guided analysis prompt\n```\n\nSee the [`examples/`](examples/) folder for runnable walkthroughs,\nincluding [`04_resource_and_prompt.py`](examples/04_resource_and_prompt.py).\n\n---\n\n## When not to use bankstatementparser-mcp\n\n- **You're not driving an MCP-aware agent.** Use the\n  [`bankstatementparser`](https://pypi.org/project/bankstatementparser/)\n  CLI or library directly — it exposes the same surface with less\n  indirection.\n- **You need to parse files already on disk in bulk.** The library's\n  CLI reads paths directly and avoids the inline-content round-trip the\n  MCP tools use.\n\n---\n\n## Development\n\n`bankstatementparser-mcp` uses [Poetry](https://python-poetry.org/) and\n[mise](https://mise.jdx.dev/).\n\n```bash\ngit clone https://github.com/sebastienrousseau/bankstatementparser-mcp.git\ncd bankstatementparser-mcp\nmise install\npoetry install\n```\n\nA `Makefile` orchestrates the quality gates (kept in lockstep with CI):\n\n| Target | What it runs |\n| :--- | :--- |\n| `make check` | All gates (REQUIRED before commit) |\n| `make test` | `pytest --cov=bankstatementparser_mcp --cov-branch --cov-fail-under=100` |\n| `make lint` | `ruff check` + `black --check` |\n| `make type-check` | `mypy --strict` |\n| `make docs` | `interrogate --fail-under=100` (docstring coverage) |\n\nCurrent state (v0.0.19): **100% line + branch coverage** against a 100%\nenforced floor, mypy `--strict` clean, interrogate 100%.\n\n---\n\n## Security\n\n- **No persistent filesystem writes from tools.** Each call writes the\n  inline content to a private temporary file that is deleted as soon as\n  the call returns.\n- **Validation failures** from `validate_statement` are returned as\n  structured `{\"is_valid\": false, \"error\": ...}` payloads — never as\n  stack traces.\n- **Dependencies** are pinned via `poetry.lock` and audited by\n  `pip-audit` and Bandit in CI.\n\nTo report a vulnerability, please use\n[GitHub private vulnerability reporting](https://github.com/sebastienrousseau/bankstatementparser-mcp/security)\nrather than a public issue.\n\n---\n\n## Documentation\n\n- **Runnable examples:** [`examples/`](https://github.com/sebastienrousseau/bankstatementparser-mcp/tree/main/examples)\n- **Release history:** [CHANGELOG.md](https://github.com/sebastienrousseau/bankstatementparser-mcp/blob/main/CHANGELOG.md)\n- **MCP specification:** [modelcontextprotocol.io](https://modelcontextprotocol.io)\n\n---\n\n## Contributing\n\nContributions are welcome — see the\n[contributing instructions](https://github.com/sebastienrousseau/bankstatementparser-mcp/blob/main/CONTRIBUTING.md).\nThanks to all the\n[contributors](https://github.com/sebastienrousseau/bankstatementparser-mcp/graphs/contributors)\nwho have helped build `bankstatementparser-mcp`.\n\n---\n\n## Related MCP Servers\n\nThe four core servers of the **ISO 20022 MCP Suite** are compared in\n[The ISO 20022 MCP Suite](#the-iso-20022-mcp-suite) above. The wider\nfamily — open-source, Apache-2.0 licensed MCP servers for banking and\nfinancial-services AI agents — also includes:\n\n| Server | Purpose |\n|---|---|\n| [`pain001-mcp`](https://github.com/sebastienrousseau/pain001-mcp) | Generate & validate ISO 20022 pain.001 payment files (v03–v12, pain.008, SEPA) with rulebook checks |\n| [`pacs008-mcp`](https://github.com/sebastienrousseau/pacs008-mcp) | Generate, validate, parse & scheme-check ISO 20022 pacs.008 FI-to-FI credit transfers + Nov-2026 address linting |\n| [`acmt001-mcp`](https://github.com/sebastienrousseau/acmt001-mcp) | Generate & validate ISO 20022 acmt account-management messages |\n| [`noyalib-mcp`](https://github.com/sebastienrousseau/noyalib) | Lossless YAML 1.2 parsing, formatting & validation (Rust, 100% spec compliance) |\n\n---\n\n## MCP Registry\n\n`mcp-name: io.github.sebastienrousseau/bankstatementparser-mcp`\n\n---\n\n## Ecosystem\n\n`bankstatementparser` is part of a modular financial ecosystem. Optional companion packages provide specialized loaders, writers, AI agents, language servers, and transport protocol adapters:\n\n| Package | GitHub Repository | PyPI | Role | Description |\n| :--- | :--- | :--- | :--- | :--- |\n| **`bankstatementparser`** | [`sebastienrousseau/bankstatementparser`](https://github.com/sebastienrousseau/bankstatementparser) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser.svg)](https://pypi.org/project/bankstatementparser/) | Core Engine | Unified parser for CAMT (052/053), PAIN.001, CSV, OFX, QFX, MT940, and PDF statements |\n| **`bankstatementparser-mcp`** | [`sebastienrousseau/bankstatementparser-mcp`](https://github.com/sebastienrousseau/bankstatementparser-mcp) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-mcp.svg)](https://pypi.org/project/bankstatementparser-mcp/) | AI Protocol | Model Context Protocol (MCP) server exposing statement tools to LLMs & AI agents |\n| **`bankstatementparser-lsp`** | [`sebastienrousseau/bankstatementparser-lsp`](https://github.com/sebastienrousseau/bankstatementparser-lsp) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-lsp.svg)](https://pypi.org/project/bankstatementparser-lsp/) | Developer Tooling | Language Server Protocol (LSP) with live SWIFT MT940 statement validation & diagnostics |\n| **`bankstatementparser-transport-ebics`** | [`sebastienrousseau/bankstatementparser-transport-ebics`](https://github.com/sebastienrousseau/bankstatementparser-transport-ebics) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-transport-ebics.svg)](https://pypi.org/project/bankstatementparser-transport-ebics/) | Transport | Automated bank statement retrieval over EBICS 3.0 (`H005`) and 2.5 (`H004`) protocols |\n| **`bankstatementparser-writer-xlsx`** | [`sebastienrousseau/bankstatementparser-writer-xlsx`](https://github.com/sebastienrousseau/bankstatementparser-writer-xlsx) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-writer-xlsx.svg)](https://pypi.org/project/bankstatementparser-writer-xlsx/) | Output Writer | Formats and exports parsed banking transactions into styled Microsoft Excel (`.xlsx`) workbooks |\n| **`bankstatementparser-writer-qif`** | [`sebastienrousseau/bankstatementparser-writer-qif`](https://github.com/sebastienrousseau/bankstatementparser-writer-qif) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-writer-qif.svg)](https://pypi.org/project/bankstatementparser-writer-qif/) | Output Writer | Serializes transactions into standard Quicken Interchange Format (`.qif`) exchange files |\n| **`bankstatementparser-writer-ofx`** | [`sebastienrousseau/bankstatementparser-writer-ofx`](https://github.com/sebastienrousseau/bankstatementparser-writer-ofx) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-writer-ofx.svg)](https://pypi.org/project/bankstatementparser-writer-ofx/) | Output Writer | Serializes transactions into standard Open Financial Exchange (`.ofx`) XML/SGML files |\n| **`bankstatementparser-writer-swift`** | [`sebastienrousseau/bankstatementparser-writer-swift`](https://github.com/sebastienrousseau/bankstatementparser-writer-swift) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-writer-swift.svg)](https://pypi.org/project/bankstatementparser-writer-swift/) | Output Writer | Exports transactions to SWIFT MT940 customer statements and MT942 interim reports |\n| **`bankstatementparser-loader-bai2`** | [`sebastienrousseau/bankstatementparser-loader-bai2`](https://github.com/sebastienrousseau/bankstatementparser-loader-bai2) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-loader-bai2.svg)](https://pypi.org/project/bankstatementparser-loader-bai2/) | Input Loader | Parses BAI2 cash-management and account balance statements |\n| **`bankstatementparser-loader-mt942`** | [`sebastienrousseau/bankstatementparser-loader-mt942`](https://github.com/sebastienrousseau/bankstatementparser-loader-mt942) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-loader-mt942.svg)](https://pypi.org/project/bankstatementparser-loader-mt942/) | Input Loader | Parses SWIFT MT942 interim transaction reports with credit/debit summary reconciliation |\n| **`bankstatementparser-loader-cfonb`** | [`sebastienrousseau/bankstatementparser-loader-cfonb`](https://github.com/sebastienrousseau/bankstatementparser-loader-cfonb) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-loader-cfonb.svg)](https://pypi.org/project/bankstatementparser-loader-cfonb/) | Input Loader | Parses French CFONB 120 / AFB120 120-byte fixed-width banking statement files |\n| **`bankstatementparser-loader-camt054`** | [`sebastienrousseau/bankstatementparser-loader-camt054`](https://github.com/sebastienrousseau/bankstatementparser-loader-camt054) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-loader-camt054.svg)](https://pypi.org/project/bankstatementparser-loader-camt054/) | Input Loader | Ingests ISO 20022 CAMT.054 real-time debit/credit notification stream XML |\n| **`bankstatementparser-loader-sepa`** | [`sebastienrousseau/bankstatementparser-loader-sepa`](https://github.com/sebastienrousseau/bankstatementparser-loader-sepa) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-loader-sepa.svg)](https://pypi.org/project/bankstatementparser-loader-sepa/) | Input Loader | Ingests ISO 20022 SEPA PAIN.002 payment status reports and PAIN.008 direct debit mandates |\n| **`bankstatementparser-loader-bacs`** | [`sebastienrousseau/bankstatementparser-loader-bacs`](https://github.com/sebastienrousseau/bankstatementparser-loader-bacs) | [![PyPI](https://img.shields.io/pypi/v/bankstatementparser-loader-bacs.svg)](https://pypi.org/project/bankstatementparser-loader-bacs/) | Input Loader | Parses UK BACS Standard 18 / Faster Payments 106-byte fixed-width transmission files |\n\n---\n\n## License\n\nLicensed under the [Apache License, Version 2.0](https://opensource.org/license/apache-2-0/).\nAny contribution submitted for inclusion shall be licensed as above,\nwithout additional terms.\n\n---\n\n<p align=\"center\">\n  <a href=\"https://bankstatementparser.com\">bankstatementparser.com</a> ·\n  <a href=\"https://pypi.org/project/bankstatementparser-mcp/\">PyPI</a> ·\n  <a href=\"https://github.com/sebastienrousseau/bankstatementparser-mcp\">GitHub</a>\n</p>\n",
  "bytes": 21973,
  "sha": "5bad761626407ddc41e5e73638f71b902f0a2521ca3d8db5b5dfbde100b91007",
  "repo_slug": "sebastienrousseau/bankstatementparser-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sebastienrousseau_bankstatemen_73b1b66f/readme"
}