{
  "markdown": "# iso20022-mcp: The Unified MCP Gateway for ISO 20022\n\n**One [Model Context Protocol][mcp] server, one small set of meta-tools —\n`search`, `list_families`, `describe`, `validate`, `generate`, `parse` — that\nroute across every ISO 20022 message family (`pain` · `pacs` · `camt` ·\n`acmt`).** Install one thing, discover the whole suite: an agent sees a handful\nof verbs instead of the 60+ tools spread across five individual servers.\n\n> **Latest release: v0.0.4** — 7 routing meta-tools over stdio, light core\n> (only `mcp`), backing family servers as optional extras, actionable\n> structured errors on every `validate`/`generate` failure, for Python 3.10+.\n> The front door to the [ISO 20022 MCP Suite](#the-iso-20022-mcp-suite).\n\n## Why a gateway\n\nThe suite has a dedicated, best-in-class server per message family. That depth\nis the point — but an agent shouldn't have to know *which* of five servers and\n*which* of sixty tools it needs before it can act. `iso20022-mcp` is the thin\nrouting layer on top: ask it in plain terms (\"I need to reconcile a\nstatement\", \"generate a credit transfer\"), and it points you at — or executes\nagainst — the right family. Small tool surface, whole-suite reach.\n\n## The ISO 20022 MCP Suite\n\n`iso20022-mcp` is the **generic message toolkit** of eight coordinated,\nvendor-neutral MCP servers that together cover the ISO 20022 bank-statement\nworkflow and the November 2026 structured-address cutover, plus a high-level orchestration layer — readiness scoring, clearing-profile linting, and audit evidence — statement depth,\nwhole-catalogue routing, reconciliation, multi-format ingestion, and address\nremediation. Dependency ranges are kept aligned across the suite,\nso the servers co-install cleanly in a single Python environment: start with\none, add the rest as your workflow grows.\n\n| Server | Scope | Surface | Install | Use it when |\n| --- | --- | --- | --- | --- |\n| [`camt053-mcp`][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`](#install) | 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** |\n| [`reconcile-mcp`][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`][bsp-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 |\n| [`structured-address-fix-mcp`][saf-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 |\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 (deepest\ncamt.05x surface, stdio + authenticated streamable HTTP);\n**`iso20022-mcp`** is the generic message toolkit (a handful of verbs over\nthe whole catalogue); **`reconcile-mcp`** is the reconciliation workflow\n(did the money we expected actually arrive?);\n**`bankstatementparser-mcp`** is the ingestion layer (many formats in, one\ntransaction shape out); and **`structured-address-fix-mcp`** is the\npostal-address specialist (debtor/creditor addresses cliff-ready for the\nNov 2026 cutover).\n\nThe gateway also routes to the per-family servers —\n[`pain001-mcp`][pain001-mcp], [`pacs008-mcp`][pacs008-mcp],\n[`acmt001-mcp`][acmt001-mcp], and [`camt-exceptions`][camt-exceptions] —\ninstalled as extras (see [Routing](#routing)).\n\n## Install\n\nThe core is light. Add the families you need as extras (or `[all]`):\n\n```sh\npip install \"iso20022-mcp[all]\"       # every family\npip install \"iso20022-mcp[pacs,camt]\" # just interbank + statements\npip install iso20022-mcp              # core only; families report as not installed\n# or run without installing:\nuvx --from \"iso20022-mcp[all]\" iso20022-mcp\n```\n\nMCP client config (e.g. Claude Desktop):\n\n```json\n{\n  \"mcpServers\": {\n    \"iso20022\": {\n      \"command\": \"iso20022-mcp\"\n    }\n  }\n}\n```\n\n## Tools\n\nThe 7 routing meta-tools:\n\n- `search` — Find message types by use-case / keyword (\"reconciliation\", \"pacs.008\"). *(families: all — catalogue)*\n- `list_families` — List families, their capabilities, and which backing packages are installed. *(families: all)*\n- `list_servers` — Full suite map: families + E&I messages + specialized servers (reconcile, agent-payment bridge). *(families: all)*\n- `describe` — Required fields + input JSON Schema for a message type. *(families: all)*\n- `validate` — Validate records against a message type's schema. *(families: all)*\n- `generate` — Generate a validated ISO 20022 XML message from records. *(families: pain · pacs · acmt)*\n- `parse` — Parse an inbound ISO 20022 XML message into structured data. *(families: pacs · camt)*\n\nOperations are capability-aware: `generate` on a `camt.053` statement (an\ninbound format) returns a clear, explanatory error rather than failing\nobscurely, and every \"package not installed\" case tells you exactly what to\n`pip install`.\n\nThree ergonomics guarantees hold across the routed families:\n\n- **Actionable structured errors.** Any error a backing server raises —\n  not just the ones it returns — reaches the agent as an\n  `{\"error\": \"<Type>: <message>\"}` payload instead of an opaque\n  tool-execution failure. For `pain` generation the error lists every\n  missing or invalid field at once, so one fix-and-retry suffices.\n- **Family aliases for `message_type`.** Bare family names resolve to a\n  concrete version via the backing server: `pain.001` →\n  `pain.001.001.09`, `pain.008` → `pain.008.001.02`. Fully-versioned\n  types are still preferred where you know them.\n- **Per-family parse coverage, stated up front.** `parse` covers the\n  inbound families only: `pacs` (e.g. `pacs.008`) and `camt` (e.g.\n  `camt.053`). The initiation families `pain` and `acmt` are\n  outbound-only — they have no parser here, so don't attempt a\n  generate→parse round-trip for `pain.001` or `acmt.001`; use `validate`\n  (or the backing server's XSD validation) instead.\n\n## Routing\n\n| Prefix | Family | Backing server | generate | parse |\n| --- | --- | --- | :---: | :---: |\n| `pain` | Customer Credit Transfer Initiation | [`pain001-mcp`][pain001-mcp] | ✅ | — |\n| `pacs` | FI-to-FI Customer Credit Transfer | [`pacs008-mcp`][pacs008-mcp] | ✅ | ✅ |\n| `camt` | Bank-to-Customer Statement | [`camt053-mcp`][camt053-mcp] | — | ✅ |\n| `acmt` | Account Opening Instruction | [`acmt001-mcp`][acmt001-mcp] | ✅ | — |\n| `camt.056`/`camt.029` | Cancellation / Resolution (E&I) | [`camt-exceptions`][camt-exceptions] | ✅ | — |\n\n`generate(\"camt.056.001.12\", …)` routes to `camt-exceptions`. The gateway also\nsurfaces the specialized servers — [`reconcile-mcp`][reconcile-mcp] and\n[`ap2-iso20022`][ap2-iso20022] — via `search` and `list_servers` for discovery\n(they're invoked through their own tools).\n\nThe gateway imports each backing server **lazily and optionally** — the core\ndepends only on `mcp`, and a family's server is loaded on first use. Message\ntypes are matched on their prefix (`pacs.008.001.08` → `pacs`). The `pain`\nextra requires `pain001-mcp >= 0.0.56`, the release that carries the\nLLM-ergonomic generate surface (field aliases, computed `nb_of_txs` /\n`ctrl_sum`, all-at-once field errors) the gateway's guarantees build on.\n\n## Example\n\n```\nsearch(query=\"reconciliation\")\n  → [{ \"message_type\": \"camt.053\", \"family\": \"camt\", \"package\": \"camt053-mcp\" }]\n\ndescribe(message_type=\"pacs.008\")           # required fields + input schema\nvalidate(message_type=\"pacs.008\", records=[…])\ngenerate(message_type=\"pain.001\", records=[…])   # → { \"xml\": \"<Document>…\" }\n  # bare \"pain.001\" resolves to pain.001.001.09; on failure the payload is\n  # { \"error\": \"Missing required fields for pain.001.001.09: …\" } listing\n  # every missing or invalid field at once — fix them all and retry once\nparse(message_type=\"camt.053\", xml=\"<Document>…\")\n  # parse covers pacs + camt only; pain and acmt are outbound-only\n```\n\nFor the dedicated reconciliation engine that matches `camt.053` statements\nagainst expected `pain.001` payments, see [`reconcile-mcp`][reconcile-mcp].\n\n## Development\n\n```sh\ngit clone https://github.com/sebastienrousseau/iso20022-mcp\ncd iso20022-mcp\npython -m venv .venv && . .venv/bin/activate\npip install -e . && pip install pytest pytest-cov ruff black mypy\npytest                      # 100% branch coverage gate (backends faked)\nruff check iso20022_mcp tests && black --check iso20022_mcp tests && mypy iso20022_mcp\n```\n\n## Licence\n\nLicensed under the [Apache License, Version 2.0](LICENSE).\n\n---\n\n`mcp-name: io.github.sebastienrousseau/iso20022-mcp`\n\n[mcp]: https://modelcontextprotocol.io\n[pain001-mcp]: https://github.com/sebastienrousseau/pain001-mcp\n[pacs008-mcp]: https://github.com/sebastienrousseau/pacs008-mcp\n[camt053-mcp]: https://github.com/sebastienrousseau/camt053-mcp\n[acmt001-mcp]: https://github.com/sebastienrousseau/acmt001-mcp\n[reconcile-mcp]: https://github.com/sebastienrousseau/reconcile-mcp\n[bsp-mcp]: https://github.com/sebastienrousseau/bankstatementparser-mcp\n[saf-mcp]: https://github.com/sebastienrousseau/structured-address-fix-mcp\n\n[camt-exceptions]: https://github.com/sebastienrousseau/camt-exceptions\n[ap2-iso20022]: https://github.com/sebastienrousseau/ap2-iso20022\n",
  "bytes": 11179,
  "sha": "0d593a3907621ed5a160322a00bde8e1b97c6253b0bb92a6caf10f33e0dcab42",
  "repo_slug": "sebastienrousseau/iso20022-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sebastienrousseau_iso20022_mcp_aab7f7ae/readme"
}