sebastienrousseau/camt053-mcp

๐Ÿ’ฐ Finance & Fintech
0 Views
0 Installs

๐Ÿ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - ISO 20022 bank-statement parsing + reversing entries (camt.053 Bank-to-Customer Statement). 19 tools + 3 resources + 4 guided prompts across message-type discovery, return-reason lookup, schema introspection, IBAN/BIC/LEI validation, camt.053 parsing + XSD validation, Nov 2026 CBPR+ cliff readiness check, curated SEPA / CBPR+ / HVPS+ rulebook citation lookup, accounting-platform journal export (Xero + QuickBooks Online), LLM-driven entry classification via MCP Sampling, entry listing/filtering, and one-shot validated reversing-entry XML generation. Built on the camt053 library (100% line + branch coverage, SLSA Build L3 + PEP 740 attestations, Apache-2.0). Install pip install camt053-mcp, run camt053-mcp.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "sebastienrousseau-camt053-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "sebastienrousseau-camt053-mcp"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

camt053-mcp: An MCP Server for ISO 20022 Bank Statements

camt053-mcp logo

PyPI Version Python Versions License Tests Quality OpenSSF Scorecard OpenSSF Best Practices Documentation

Glama MCP server score

A Model Context Protocol server that exposes the camt053 ISO 20022 Bank Statement library as tools for AI agents and assistants โ€” discover message types and return reasons, inspect input schemas, validate records and financial identifiers, parse incoming statements, and generate validated reversing-entry XML, all from your favourite MCP client.

Latest release: v0.0.14 โ€” OAuth 2.1 resource-server auth (RFC 9728) on the HTTP transport, Prometheus metrics, a tamper-evident audit chain, and real-HTTP load benchmarks; 22 MCP tools over stdio or authenticated streamable HTTP, all backed by the shared camt053.services layer, for Python 3.10+. See what's new โ†’

Contents

Overview

The Model Context Protocol (MCP) is an open standard that lets AI agents and assistants discover and call external tools in a uniform way. camt053-mcp is an MCP server that turns the camt053 library into a set of first-class agent tools, so an assistant can read and reverse ISO 20022 camt.05x cash-management messages โ€” the standardised bank-to-customer account reports, statements, and debit/credit notifications โ€” directly from a conversation.

The headline capability is the one-shot reversing-entry workflow: read an incoming camt.053 statement, find the entries carrying a return reason code (e.g. AC04 Closed Account), and emit a validated reversing entry.

Every tool is a thin, typed wrapper over camt053.services โ€” the single shared facade also used by the CLI and REST API โ€” so all interfaces behave identically. Tools return JSON-serialisable data; on an error they return an {"error": ...} payload rather than raising.

This package is part of the camt053 suite โ€” a set of independently installable packages that share the camt053.services layer:

  • camt053 โ€” the core library (CLI + REST API)
  • camt053-mcp โ€” this package, the Model Context Protocol server
  • camt053-lsp โ€” the Language Server Protocol server for editors
flowchart LR
    A["MCP client<br/>(Claude Desktop, IDE, agent)"] -->|stdio| B["camt053-mcp"]
    B -->|delegates to| C["camt053.services"]
    C -->|parse + reverse + validate| D["ISO 20022 camt.053 XML"]

The ISO 20022 MCP Suite

camt053-mcp is the bank-statement flagship of eight coordinated, vendor-neutral MCP servers that together cover the ISO 20022 bank-statement workflow and the November 2026 structured-address cutover โ€” statement depth, whole-catalogue routing, reconciliation, multi-format ingestion, and address remediation. Dependency ranges are kept aligned across the suite, so the servers co-install cleanly in a single Python environment: start with one, add the rest as your workflow grows.

ServerScopeSurfaceInstallUse it when
camt053-mcpISO 20022 camt.053/camt.052 bank statements: parse, validate, filter, reverse; MT940/MT942 migration; CBPR+ readiness; journal export22 MCP tools ยท 4 prompts ยท 3 resourcespip install camt053-mcpYou work with bank-to-customer statements end to end โ€” this package, the suite's flagship
iso20022-mcpUnified gateway: search / describe / validate / generate / parse meta-tools routed across the pain ยท pacs ยท camt ยท acmt families7 meta-toolspip install "iso20022-mcp[all]"You want one entry point to every message family
reconcile-mcpMatches expected pain.001 payments against observed camt.053 entries โ€” exact, partial, one-to-many, many-to-one, every match scored and explained7 MCP toolspip install reconcile-mcpYou need explainable statement/payment reconciliation
structured-address-fix-mcpISO 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 toolspip install structured-address-fix-mcpYou need debtor/creditor addresses cliff-ready ahead of 14 Nov 2026
iso20022-readiness-suite-mcpOrchestration gateway: detect โ†’ structurally validate โ†’ clearing-profile lint โ†’ readiness score, plus automated remediation and pacs.002 bank-response simulation โ€” a meta-client over the foundational servers4 MCP toolspip install iso20022-readiness-suite-mcpYou want one high-level readiness / orchestration entry point over the suite
iso20022-bank-profile-mcpManages, validates and serves bank-specific clearing profiles / rule packs (CBPR+, SEPA_Instant, FedNow, Generic); premium rule-pack entitlement gating4 MCP toolspip install iso20022-bank-profile-mcpYou lint payments against your own institution's market practice
iso20022-evidence-pack-mcpCompiles readiness findings, remediation diffs and simulated responses into a sealed, Ed25519-signable audit evidence pack6 MCP toolspip install iso20022-evidence-pack-mcpYou need tamper-evident audit / certification artifacts

In one line each: camt053-mcp is the bank-statement flagship (deepest camt.05x surface, stdio + authenticated streamable HTTP); iso20022-mcp is the generic message toolkit (a handful of verbs over the whole catalogue); reconcile-mcp is the reconciliation workflow (did the money we expected actually arrive?); bankstatementparser-mcp is the ingestion layer (many formats in, one transaction shape out); and structured-address-fix-mcp is the postal-address specialist (debtor/creditor addresses cliff-ready for the Nov 2026 cutover).

The suite also includes per-family servers โ€” pain001-mcp (credit transfer initiation), pacs008-mcp (FI-to-FI credit transfers), and acmt001-mcp (account management) โ€” reachable through the iso20022-mcp gateway.

Install

camt053-mcp runs on macOS, Linux, and Windows and requires Python 3.10+ and pip. It pulls in the core camt053 library and the MCP SDK automatically.

python -m pip install camt053-mcp
Using an isolated virtual environment (recommended)
python -m venv venv
source venv/bin/activate        # macOS/Linux
venv\Scripts\activate           # Windows
python -m pip install -U camt053-mcp

Quick Start

For the 10-minute install โ†’ MCP client config โ†’ first conversation tutorial, see docs/quickstart.md.

Launch the server over stdio (the FastMCP default transport):

camt053-mcp

Register it with any MCP client (e.g. Claude Desktop) by adding it to the client's configuration:

{
  "mcpServers": {
    "camt053": { "command": "camt053-mcp" }
  }
}

The agent can then call the tools below to parse incoming statements and generate validated reversing entries on demand.

For a shared, multi-tenant deployment, the server can also serve streamable HTTP with mandatory bearer-token auth and optional per-request Camt053-Account tenant scoping:

CAMT053_MCP_TOKEN=<secret> camt053-mcp --transport=http --bind=0.0.0.0:8080

See Multi-tenant HTTP deployment and the deployment cookbook.

Tools

All tools delegate to the shared camt053.services layer, so they behave identically to the CLI and REST API.

  • list_message_types โ€” List the 3 supported camt.05x message types
  • list_return_reasons โ€” List the ISO external return reason codes
  • get_required_fields โ€” Required input fields for a message type
  • get_input_schema โ€” Full input JSON Schema for a message type
  • validate_records โ€” Validate flat records against a message type
  • validate_identifier โ€” Validate an IBAN, BIC, or LEI
  • validate_statement โ€” Validate a statement against its XSD and detect its type
  • convert_mt940_to_camt053 โ€” MT940 โ†’ camt.053 migration: convert legacy SWIFT MT940 statement text into a camt.053 structure
  • convert_mt942 โ€” MT942 โ†’ camt.052 migration: convert legacy SWIFT MT942 interim transaction report text into a camt.052 structure
  • check_cbpr_readiness โ€” Flag CBPR+ Nov 2026 cliff issues in a statement
  • get_cbpr_cutover_date โ€” Return the official CBPR+ cutover date (2026-11-16)
  • cite_rulebook โ€” Quote a curated SEPA / CBPR+ / HVPS+ rulebook clause
  • list_rulebook_clauses โ€” List the available rulebook citations (optionally filtered)
  • export_journal โ€” Export statement entries as Xero BankTransactions or QBO JournalEntry payloads
  • list_export_journal_targets โ€” List the accounting-platform targets export_journal supports
  • classify_entry โ€” Classify a statement entry via MCP Sampling (uses the client's LLM)
  • list_classify_entry_categories โ€” List the default categories classify_entry uses
  • get_tenant_context โ€” Report the multi-tenant scope of the call (the Camt053-Account header on the HTTP transport; None over stdio)
  • parse_statement โ€” Parse an incoming camt.05x statement into data
  • list_entries โ€” List every entry across all statements (paginated)
  • filter_entries โ€” Return entries carrying a return reason code (paginated)
  • generate_reversal โ€” Generate a validated reversing-entry XML document

Pagination

list_entries and filter_entries accept optional offset (default 0) and limit (default None) parameters. When limit is omitted they return the full list, exactly as before. When limit is given they return a paginated envelope instead:

{"total": 42, "offset": 10, "limit": 5, "entries": [/* ... */]}

A negative offset or limit returns an {"error": ...} payload, consistent with the rest of the server's error convention.

Prompts

PromptPurpose
reversal_previewGuide an agent through a safe, confirm-before-generate reversal workflow
reconcile_against_pain001Match booked statement entries to the originating pain.001 batch on EndToEndId, surface exceptions
find_duplicate_entriesFlag exact + suspected duplicates on a statement with confidence and next-action hints
match_to_invoice_setMatch incoming credits to an AR invoice ledger (exact + remittance + partial / multi-invoice tiers)

reversal_preview takes an optional reason_code (default "AC04") and returns a four-step message template: parse the statement, preview the matching entries with filter_entries, confirm with the operator, then call generate_reversal. The other three prompts take no parameters and return a two-message user-prompt + assistant-walkthrough template the agent can replay verbatim.

Resources

Resources give an agent read-only reference context it can load without calling a tool. Each resource returns a JSON payload.

Resource URIContents
camt053://return-reasonsThe ISO external return-reason catalog โ€” a list of {"code", "name"}
camt053://message-typesThe supported camt.05x message types โ€” a list of {"message_type", "name"}
camt053://session/{session_id}/bank/{bic}Templated per-(session, bank) context: parsed BIC country/kind, recommended SEPA / CBPR+ / HVPS+ rulebook clauses, Nov 2026 cutover date

Both back onto the shared camt053.services layer, so they stay in sync with the equivalent list_return_reasons / list_message_types tools. On an error they return a serialised {"error": ...} payload.

Using the tools

You can invoke the tools in-process โ€” without a transport โ€” straight through the FastMCP instance. This mirrors what an agent receives over stdio. The runnable version of this snippet lives in examples/mcp_tools.py.

import asyncio

from camt053_mcp.server import server

# A complete camt.053 statement with one entry returned AC04 (Closed Account).
statement_xml = """<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.14">
  <BkToCstmrStmt>
    <GrpHdr><MsgId>STMT-MSG-0001</MsgId><CreDtTm>2026-06-15T08:00:00</CreDtTm></GrpHdr>
    <Stmt>
      <Id>STMT-0001</Id><CreDtTm>2026-06-15T08:00:00</CreDtTm>
      <Acct><Id><IBAN>GB29NWBK60161331926819</IBAN></Id><Ccy>EUR</Ccy></Acct>
      <Bal><Tp><CdOrPrtry><Cd>CLBD</Cd></CdOrPrtry></Tp>
        <Amt Ccy="EUR">10000.00</Amt><CdtDbtInd>CRDT</CdtDbtInd>
        <Dt><Dt>2026-06-15</Dt></Dt></Bal>
      <Ntry>
        <NtryRef>NTRY-0001</NtryRef>
        <Amt Ccy="EUR">1500.00</Amt><CdtDbtInd>CRDT</CdtDbtInd>
        <Sts><Cd>BOOK</Cd></Sts>
        <NtryDtls><TxDtls>
          <RtrInf><Rsn><Cd>AC04</Cd></Rsn></RtrInf>
        </TxDtls></NtryDtls>
      </Ntry>
    </Stmt>
  </BkToCstmrStmt>
</Document>"""


async def main() -> None:
    async def call(name, args):
        result = await server.call_tool(name, args)
        content = result[0] if isinstance(result, tuple) else result
        return content[0].text if content else ""

    # Validate an identifier.
    print(await call("validate_identifier",
                     {"kind": "bic", "value": "NWBKGB2LXXX"}))
    # -> {"kind": "bic", "value": "NWBKGB2LXXX", "valid": true}

    # Page through the matching entries (paginated envelope).
    print(await call("filter_entries",
                     {"xml": statement_xml, "reason_code": "AC04",
                      "offset": 0, "limit": 5}))
    # -> {"total": 1, "offset": 0, "limit": 5, "entries": [...]}

    # Generate a validated reversing-entry document for the AC04 entries.
    xml = await call("generate_reversal",
                     {"xml": statement_xml, "reason_code": "AC04"})
    print(xml[:46])  # -> <?xml version="1.0" encoding="UTF-8"?> ...


asyncio.run(main())

Run it directly:

python examples/mcp_tools.py

The camt053 suite

camt053-mcp is part of a set of independently installable packages built around the camt053 library โ€” pick whichever ones your stack needs:

PackageRole
camt053Core library + CLI + FastAPI REST API
camt053-mcpModel Context Protocol server (this package)
camt053-lspLanguage Server Protocol server (for editors)
camt053-writer-xlsxExcel .xlsx writer for parsed statements
camt053-loader-mt940SWIFT MT940 โ†’ camt.053 loader

Every tool here is a thin typed wrapper over camt053.services โ€” the same facade the CLI, REST API, and LSP use โ€” so all four interfaces behave identically.

When not to use camt053-mcp

  • You have no MCP client. This server only makes sense paired with an MCP-aware host (Claude Desktop, the IDE plugins, an agent framework). For scripted / CI use, the camt053 CLI and REST API cover the same ground without the stdio protocol overhead.
  • You need to run as a long-lived daemon without an MCP client. The server does run persistently over the streamable HTTP transport (--transport=http), but every consumer must still speak MCP JSON-RPC. For plain REST semantics, use the camt053 FastAPI service.
  • You need streaming responses. Tool calls return whole values, not streams. Large statements are paginated through the existing list_entries(xml, offset, limit) envelope, not chunked over multiple responses.
  • You need per-user OAuth flows brokered for you. The HTTP transport authenticates callers (OAuth 2.1 resource server with RFC 9728 metadata, or a static bearer token in dev mode) and scopes requests via the Camt053-Account tenant header, but it does not run an authorization server: bring your own IdP.
  • You need to generate pain.001 outbound payment files. Out of scope; use pain001-mcp.

Development

camt053-mcp uses Poetry and mise.

git clone https://github.com/sebastienrousseau/camt053-mcp.git && cd camt053-mcp
mise install
poetry install
poetry shell

A Makefile orchestrates the quality gates (kept in lockstep with CI):

make check        # all gates (REQUIRED before commit)
make test         # pytest
make lint         # ruff + black
make type-check   # mypy --strict

Security

camt053-mcp is a thin wrapper โ€” every tool delegates to camt053.services, where the defence-in-depth (defusedxml + xml_guard byte cap + DOCTYPE / ENTITY pre-flight) lives. Tools catch (ValueError, Camt053Error) and return an {"error": ...} envelope per the suite convention; they never propagate raw exceptions to the MCP client. Reporting practice, supported versions, and the full supply-chain posture are documented in SECURITY.md. Vulnerabilities go via GitHub Private Vulnerability Reporting, not public issues.

Documentation

Related MCP Servers

Part of the ISO 20022 MCP Suite โ€” open-source, Apache-2.0 licensed MCP servers for banking and financial-services AI agents:

ServerPurpose
pain001-mcpGenerate & validate ISO 20022 pain.001 payment files (v03โ€“v12, pain.008, SEPA) with rulebook checks
pacs008-mcpGenerate, validate, parse & scheme-check ISO 20022 pacs.008 FI-to-FI credit transfers + Nov-2026 address linting
acmt001-mcpGenerate & validate ISO 20022 acmt account-management messages
noyalib-mcpLossless YAML 1.2 parsing, formatting & validation (Rust, 100% spec compliance)

MCP Registry

mcp-name: io.github.sebastienrousseau/camt053-mcp


License

Licensed under the Apache License, Version 2.0. Any contribution submitted for inclusion shall be licensed as above, without additional terms.

Contributing

Contributions are welcome โ€” see the contributing instructions. Thanks to all contributors.

Acknowledgements

Built on the camt053 ISO 20022 Bank Statement library and the Model Context Protocol Python SDK.

Related MCP Servers

@agentfund/mcp

๐Ÿ“‡ โ˜๏ธ - Fundraising infrastructure for AI agents on Solana โ€” campaigns, x402 donations, and on-chain reputation. MCP tools for registering agents, creating campaigns, and donating via the x402 pay-to-call flow, backed by Anchor programs (agentregistry, escrow, reputation). npx -y @agentfund/mcp

๐Ÿ’ฐ Finance & Fintech1 views
@asterpay/mcp-server

๐Ÿ“‡ โ˜๏ธ - EUR settlement for AI agents via x402 protocol. Market data, AI tools, crypto analytics โ€” pay-per-call in USDC on Base. SEPA Instant EUR off-ramp.

๐Ÿ’ฐ Finance & Fintech1 views
@czagents/cnb

๐Ÿ“‡ โ˜๏ธ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - Czech National Bank (ฤŒNB) daily FX rates: fetch official CZK exchange rates, convert between currencies, fetch historical rates. Cached 10 min to ease upstream load. npm @czagents/cnb or HTTP at cnb.cz-agents.dev/mcp.

๐Ÿ’ฐ Finance & Fintech1 views
@arbitova/mcp-server

๐Ÿ“‡ โ˜๏ธ - Non-custodial on-chain escrow + AI dispute arbitration for agent-to-agent USDC payments on Base. Seven tools covering the full EscrowV1 contract surface: create escrow, mark delivered with on-chain content hash, confirm or dispute, arbiter resolves with signed verdict, cancel/escalate on timeout. npx @arbitova/mcp-server

๐Ÿ’ฐ Finance & Fintech0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Not checked yet

We have not completed a health check for this listing yet.

No check timestamp yet.

Unclaimed listing (imported or pending owner verification). Claim it โ†’
โ˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.