Skip to main content

iso20022-mcp: The Unified MCP Gateway for ISO 20022

Build PyPI Glama MCP score OpenSSF Scorecard License: Apache-2.0 OR MIT Python 3.10+

iso20022-mcp Demo

One Model Context Protocol server, one small set of meta-tools — search, list_families, describe, validate, generate, parse — that route across every ISO 20022 message family (pain · pacs · camt · acmt). Install one thing, discover the whole suite: an agent sees a handful of verbs instead of the 60+ tools spread across five individual servers.

Latest release: v0.0.13: 7 routing meta-tools over stdio, streamable HTTP or SSE, light core (only mcp), backing family servers as optional extras, actionable structured errors on every validate/generate failure, for Python 3.10+. The front door to the ISO 20022 MCP Suite.

Why a gateway

The suite has a dedicated, best-in-class server per message family. That depth is the point — but an agent shouldn't have to know which of five servers and which of sixty tools it needs before it can act. iso20022-mcp is the thin routing layer on top: ask it in plain terms ("I need to reconcile a statement", "generate a credit transfer"), and it points you at — or executes against — the right family. Small tool surface, whole-suite reach.

The ISO 20022 MCP Suite

iso20022-mcp is the generic message toolkit of eight coordinated, vendor-neutral MCP servers that together cover the ISO 20022 bank-statement workflow and the November 2026 structured-address cutover, plus a high-level orchestration layer — readiness scoring, clearing-profile linting, and audit evidence — 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.

Server Scope Surface Install Use it when
camt053-mcp ISO 20022 camt.053/camt.052 bank statements: parse, validate, filter, reverse; MT940/MT942 migration; CBPR+ readiness; journal export 24 MCP tools · 4 prompts · 3 resources pip install camt053-mcp You work with bank-to-customer statements end to end — the suite's flagship
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 — this package
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
bankstatementparser-mcp 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
structured-address-fix-mcp ISO 20022 postal-address classification, assessment & remediation for the November 2026 structured-address cutover (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
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
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
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

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 gateway also routes to the per-family servers — pain001-mcp, pacs008-mcp, acmt001-mcp, and camt-exceptions — installed as extras (see Routing).

Install

The core is light. Add the families you need as extras (or [all]):

pip install "iso20022-mcp[all]"       # every family
pip install "iso20022-mcp[pacs,camt]" # just interbank + statements
pip install iso20022-mcp              # core only; families report as not installed
# or run without installing:
uvx --from "iso20022-mcp[all]" iso20022-mcp

MCP client config (e.g. Claude Desktop):

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

Transports

One command line, three transports:

Command Transport Endpoint Protocol revisions
iso20022-mcp stdio the client spawns the process 2026-07-28, 2025-11-25
iso20022-mcp --transport streamable-http Streamable HTTP http://127.0.0.1:8000/mcp 2026-07-28 (stateless, server/discover) and 2025-11-25 (initialize, Mcp-Session-Id) on the same endpoint; responses stream as server-sent events, GET opens the server-to-client stream
iso20022-mcp --transport sse HTTP+SSE (2024-11-05) http://127.0.0.1:8000/sse and /messages/ for clients that still expect the older transport

--host and --port change the bind address (defaults 127.0.0.1 and 8000). The HTTP transports carry no authentication of their own: bind loopback, or put the server behind a gateway you trust before binding a routable address. Every release is verified over streamable HTTP with passmcp in both protocol eras and over SSE with the MCP SDK client; see ADR 0001.

{
  "mcpServers": {
    "iso20022": { "url": "http://127.0.0.1:8000/mcp" }
  }
}

Tools

The 7 routing meta-tools:

  • search — Find message types by use-case / keyword ("reconciliation", "pacs.008"). (families: all — catalogue)
  • list_families — List families, their capabilities, and which backing packages are installed. (families: all)
  • list_servers — Full suite map: families + E&I messages + specialized servers (reconcile, agent-payment bridge). (families: all)
  • describe — Required fields + input JSON Schema for a message type. (families: all)
  • validate — Validate records against a message type's schema. (families: all)
  • generate — Generate a validated ISO 20022 XML message from records. (families: pain · pacs · acmt)
  • parse — Parse an inbound ISO 20022 XML message into structured data. (families: pacs · camt)

Operations are capability-aware: generate on a camt.053 statement (an inbound format) returns a clear, explanatory error rather than failing obscurely, and every "package not installed" case tells you exactly what to pip install.

Three ergonomics guarantees hold across the routed families:

  • Actionable structured errors. Any error a backing server raises — not just the ones it returns — reaches the agent as an {"error": "<Type>: <message>"} payload instead of an opaque tool-execution failure. For pain generation the error lists every missing or invalid field at once, so one fix-and-retry suffices.
  • Family aliases for message_type. Bare family names resolve to a concrete version via the backing server: pain.001 → pain.001.001.09, pain.008 → pain.008.001.02. Fully-versioned types are still preferred where you know them.
  • Per-family parse coverage, stated up front. parse covers the inbound families only: pacs (e.g. pacs.008) and camt (e.g. camt.053). The initiation families pain and acmt are outbound-only — they have no parser here, so don't attempt a generate→parse round-trip for pain.001 or acmt.001; use validate (or the backing server's XSD validation) instead.

Routing

Prefix Family Backing server generate parse
pain Customer Credit Transfer Initiation pain001-mcp ✅ —
pacs FI-to-FI Customer Credit Transfer pacs008-mcp ✅ ✅
camt Bank-to-Customer Statement camt053-mcp — ✅
acmt Account Opening Instruction acmt001-mcp ✅ —
camt.056/camt.029 Cancellation / Resolution (E&I) camt-exceptions ✅ —

generate("camt.056.001.12", …) routes to camt-exceptions. The gateway also surfaces the specialized servers — reconcile-mcp and ap2-iso20022 — via search and list_servers for discovery (they're invoked through their own tools).

The gateway imports each backing server lazily and optionally — the core depends only on mcp, and a family's server is loaded on first use. Message types are matched on their prefix (pacs.008.001.08 → pacs). The pain extra requires pain001-mcp >= 0.0.56, the release that carries the LLM-ergonomic generate surface (field aliases, computed nb_of_txs / ctrl_sum, all-at-once field errors) the gateway's guarantees build on.

Example

search(query="reconciliation")
  → [{ "message_type": "camt.053", "family": "camt", "package": "camt053-mcp" }]

describe(message_type="pacs.008")           # required fields + input schema
validate(message_type="pacs.008", records=[…])
generate(message_type="pain.001", records=[…])   # → { "xml": "<Document>…" }
  # bare "pain.001" resolves to pain.001.001.09; on failure the payload is
  # { "error": "Missing required fields for pain.001.001.09: …" } listing
  # every missing or invalid field at once — fix them all and retry once
parse(message_type="camt.053", xml="<Document>…")
  # parse covers pacs + camt only; pain and acmt are outbound-only

For the dedicated reconciliation engine that matches camt.053 statements against expected pain.001 payments, see reconcile-mcp.

Development

git clone https://github.com/sebastienrousseau/iso20022-mcp
cd iso20022-mcp
python -m venv .venv && . .venv/bin/activate
pip install -e . && pip install pytest pytest-cov ruff black mypy
pytest                      # 100% branch coverage gate (backends faked)
ruff check iso20022_mcp tests && black --check iso20022_mcp tests && mypy iso20022_mcp

License

This project is dual-licensed under either:

at your option.


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

Metadata

Release files for iso20022-mcp 0.0.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for iso20022-mcp 0.0.13
File Size Uploaded
iso20022_mcp-0.0.13.tar.gz 31.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for iso20022-mcp 0.0.13
File Interpreter ABI Platform
iso20022_mcp-0.0.13-py3-none-any.whl Python 3 none any Details

Total release size: 70.3 kB

Release files / iso20022_mcp-0.0.13.tar.gz

Download URL iso20022_mcp-0.0.13.tar.gz
Size 31.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5c0b951d9b234c318164687de98c40207455f6cbd56160ce5e00976d47346d23
BLAKE2b-256 checksum
How to use checksums
bbd1b0829abea085f729a5a4ea2525deba7f7e85f6eac06f106e4605cb1c7b29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / iso20022_mcp-0.0.13-py3-none-any.whl

Download URL iso20022_mcp-0.0.13-py3-none-any.whl
Size 39.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ba5d9e8ed97266f5d76193c5e7a1bf71d426efe0b554a76edd691a50812e16b
BLAKE2b-256 checksum
How to use checksums
a1fcb63df14a46c8f072006d9a3264bc05a54594c4ca2f33db91beee1e516bae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.13 This release

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page