Iso20022 Mcp

io.github.sebastienrousseau由 GitHub 帳號 sebastienrousseau 發布v0.0.18更新於 Oct 26, 2026

Unified ISO 20022 MCP gateway routing across the pain, pacs, camt and acmt message families.

已驗證STDIO僅桌面金融開發者工具

概覽

AI 產生的概覽

ISO 20022 閘道型 MCP 伺服器,讓助理在 pain、pacs、camt、acmt 各訊息家族中搜尋、描述、驗證、產生與解析訊息。

可以做什麼
  • 依關鍵字或訊息類型搜尋 ISO 20022 目錄,並列出訊息家族、後端套件與套件組合元件
  • 描述某訊息類型的必填欄位與輸入 JSON Schema
  • 在產生前依 Schema 驗證扁平記錄
  • 為 pain、pacs、acmt 及 camt.056/camt.029 產生經驗證的 ISO 20022 XML
  • 將入站的 pacs 與 camt XML 解析為結構化資料
適用情境
適合需要處理 ISO 20022 付款或銀行對帳單訊息的情境:找出合適的訊息類型、核對欄位、產生對外訊息,或讀取入站的 pacs/camt 文件,而不必逐一接上各訊息家族的伺服器。
執行需求
本機 Python 3.10 以上程序,從 PyPI 安裝 iso20022-mcp,需 mcp 1.30+ 或 2.2+;各訊息家族為選用附加套件(pain、pacs、camt、acmt 或 all),未安裝時 describe、validate、generate、parse 無法使用。預設為 stdio 傳輸;HTTP/SSE 預設綁定 127.0.0.1:8000。
安裝前請注意
HTTP 與 SSE 傳輸本身沒有身分驗證,應只綁定回環位址或置於可信任的閘道之後。產生的 XML 會回傳給助理,可能含付款資訊;伺服器不會向銀行送出任何內容。pain 與 acmt 僅支援對外,產生後再解析會失敗。專案仍在 1.0 之前,工具名稱與回傳結構可能變動。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Iso20022 Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[iso20022-mcp logo]

iso20022-mcp

One MCP server with seven meta-tools that route across every ISO 20022 message family.

[Build] [Registry] [Docs] [OpenSSF Scorecard] [License: Apache-2.0 OR MIT] [Python 3.10 or newer] [OpenSSF Best Practices] [Glama MCP score]

[iso20022-mcp demo: the command-line help, then list_families showing each family and whether its server is installed]


Contents

Getting started

  • Install — pip extras per family, uvx, MCP client config
  • Requirements — toolchain floor, platforms
  • Quick Start — search, describe, validate, generate and parse from one server

The iso20022-mcp ecosystem

Library reference

Operational


Install

As a Python library

sh
pip install "iso20022-mcp[all]"

Latest release: v0.0.18: 7 routing meta-tools over stdio, streamable HTTP or SSE (optionally over HTTPS), light core (only mcp), backing family servers as optional extras, actionable structured errors on every validate/generate failure, for Python 3.10+.

The core is light. Add the families you need as extras:

sh
pip install "iso20022-mcp[pacs,camt]" # just interbank + statementspip install iso20022-mcp              # core only; families report as not installeduvx --from "iso20022-mcp[all]" iso20022-mcp   # run without installing

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

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

Requirements

  • Python 3.10 or newer, tested in CI on 3.10, 3.11, 3.12, 3.13 and 3.14 on Linux (toolchain policy).
  • mcp 1.30 or newer on the 1.x line, or 2.2 or newer on the 2.x line. Releases affected by GHSA-84m7-p3x7-pcfv cannot be resolved.
  • The family servers are optional extras: pain, pacs, camt, acmt, or all.

Quick Start

text
search(query="reconciliation")  → [{ "message_type": "camt.053", "family": "camt", "package": "camt053-mcp" }]
describe(message_type="pacs.008")           # required fields + input schemavalidate(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 onceparse(message_type="camt.053", xml="<Document>…")  # parse covers pacs + camt only; pain and acmt are outbound-only

Start with search or list_families to find a message type, describe it for its required fields and input schema, then validate, generate or parse. Each call is routed to the family server for that message type's prefix.


The iso20022-mcp ecosystem

iso20022-mcp is the generic message toolkit of the ISO 20022 MCP Suite: eight coordinated, vendor-neutral MCP servers that cover the ISO 20022 bank-statement workflow and the November 2026 structured-address cutover, plus an orchestration layer for readiness scoring, clearing-profile linting and audit evidence. Dependency ranges are kept aligned across the suite, so the servers co-install cleanly in one Python environment: start with one, add the rest as your workflow grows.

ComponentPurposeUse case
camt053-mcpISO 20022 camt.053/camt.052 bank statements: parse, validate, filter, reverse; MT940/MT942 migration; CBPR+ readiness; journal export (24 tools, 4 prompts, 3 resources)You work with bank-to-customer statements end to end; the suite's flagship
iso20022-mcpUnified gateway: search / describe / validate / generate / parse meta-tools routed across the pain · pacs · camt · acmt families (7 meta-tools)You want one entry point to every message family: this package
reconcile-mcpMatches expected pain.001 payments against observed camt.053 entries: exact, partial, one-to-many, many-to-one, every match scored and explained (7 tools)You need explainable statement/payment reconciliation
bankstatementparser-mcpMulti-format statement ingestion: ISO 20022 CAMT.053 and pain.001, SWIFT MT940, OFX/QFX, CSV (5 tools, 1 prompt, 1 resource)Your statements arrive in mixed or legacy formats
structured-address-fix-mcpISO 20022 postal-address classification, assessment and remediation for the November 2026 structured-address cutover (9 tools)You need debtor/creditor addresses ready before 14 Nov 2026
iso20022-readiness-suite-mcpOrchestration: detect, validate, clearing-profile lint and readiness score, plus remediation and pacs.002 response simulation (4 tools)You want one high-level readiness entry point over the suite
iso20022-bank-profile-mcpManages, validates and serves bank clearing profiles and rule packs (CBPR+, SEPA_Instant, FedNow, Generic) (4 tools)You lint payments against your institution's market practice
iso20022-evidence-pack-mcpCompiles findings, remediation diffs and simulated responses into a sealed, Ed25519-signable audit evidence pack (6 tools)You need tamper-evident audit or certification artifacts
pain001-mcp, pacs008-mcp, acmt001-mcp, camt-exceptionsThe per-family servers this gateway routes to, installed as extrasInstalled for you by iso20022-mcp[all]; see Features

Capabilities at a glance

AreaCapabilityStatus
Discoverysearch, list_families, list_servers over the whole catalogueReleased; works with the core install
Schemasdescribe returns required fields and the input JSON SchemaReleased; needs the family's extra
Validationvalidate checks records against a message type's schemaReleased; every family
Generationgenerate builds validated XML for pain, pacs, acmt and camt.056/camt.029Released
Parsingparse reads inbound pacs and camt XMLReleased; pain and acmt are outbound-only
Transportsstdio, streamable HTTP and SSE, with optional HTTPSReleased; HTTPS since 0.0.18

Ecosystem comparison

The alternative to this gateway is connecting an agent to each family server directly. Measured over stdio with list_tools on 2026-10-20:

ProjectServers to configureTools the agent seesEstimated catalogue tokens
iso20022-mcp17~2,200
All four family servers directly473~36,400

See docs/COMPARISON.md for the evidence and complete matrix.


Benchmarks

Routing costs microseconds; the first call into a family pays its lazy import once per process. Measured with benches/bench_gateway.py --quick.

ScenarioResultEnvironment
family_for routing0.54 µsApple A18 Pro, Python 3.12.15, mcp 2.3.0
search_catalog7.29 µsApple A18 Pro, Python 3.12.15, mcp 2.3.0
First pain.001 call (cold import)528 msApple A18 Pro, Python 3.12.15, fresh interpreter
Later pain.001 call (warm)5.04 µsApple A18 Pro, Python 3.12.15

See docs/BENCHMARKS.md for methodology and full results.


Features

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

PrefixFamilyBacking servergenerateparse
painCustomer Credit Transfer Initiationpain001-mcp✅—
pacsFI-to-FI Customer Credit Transferpacs008-mcp✅✅
camtBank-to-Customer Statementcamt053-mcp—✅
acmtAccount Opening Instructionacmt001-mcp✅—
camt.056/camt.029Cancellation / 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.


Configuration

One command line, three transports:

CommandTransportEndpointProtocol revisions
iso20022-mcpstdiothe client spawns the process2026-07-28, 2025-11-25
iso20022-mcp --transport streamable-httpStreamable HTTPhttp://127.0.0.1:8000/mcp2026-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 sseHTTP+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). --ssl-certfile cert.pem --ssl-keyfile key.pem serves either HTTP transport over HTTPS instead, on mcp 1.x and 2.x alike. 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.

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

Run iso20022-mcp --help for every option.


Examples

  • examples/mcp_tools.py: discovery with the core install, then routed describe, validate, generate and parse calls (python examples/mcp_tools.py after pip install -e ".[all]").
  • benches/bench_gateway.py: what the gateway adds on top of each family server.
  • For the dedicated engine that matches camt.053 statements against expected pain.001 payments, see reconcile-mcp.

When not to use iso20022-mcp

  • You need a family's specialist tools. The gateway exposes the operations every family shares. camt053-mcp's MT940 migration or journal export, for example, are only on that server: connect it directly.
  • You need to round-trip pain or acmt. They are outbound-only here, with no parser.
  • You need a bank, a settlement engine or a payment approver. This routes and validates messages; it sends nothing anywhere and is not bank certification.
  • You need authentication on the HTTP transports. There is none built in; put an authenticating gateway in front.

Development

bash
git clone https://github.com/sebastienrousseau/iso20022-mcpcd iso20022-mcppython -m venv .venv && . .venv/bin/activatemake devmake check                         # lint, mypy strict, tests, version agreementpython benches/bench_gateway.py --quick

make check runs ruff, black, mypy in strict mode, pytest with a 100% line and branch coverage gate (backends faked), and the version-agreement check. CI also runs CodeQL, OpenSSF Scorecard, reuse lint, the MCP Inspector, Hypothesis property tests, and Atheris fuzzing of every tool (two minutes per change, 30 minutes weekly). See DEVELOPMENT.md and CONTRIBUTING.md.


Security

Tools are read-only, idempotent and closed-world: no tool opens a path, a URL or a socket, and every call is routed through one registry table, so no caller input reaches an import. Stdio is the default; the HTTP transports bind loopback, can serve HTTPS, and carry no authentication of their own. Releases are built reproducibly from a signed tag, with SLSA provenance and sigstore signatures you can verify. The threat model and evidence are in the assurance case and the security review. The project holds the OpenSSF Best Practices passing badge.

Report vulnerabilities according to SECURITY.md.


Documentation

User manual · API reference: the tools · Developer guide · Architecture · Family map · Changelog · Roadmap


Stability guarantees

The project is pre-1.0 and versions advance in 0.0.1 steps. The breaking axis is the MCP surface an agent sees: tool names, their arguments, and the shape of what they return, including the {"error": ...} payload. A change to any of these is breaking even when no Python signature moves, and is called out in the changelog. Generated XML comes from the family servers and follows their own stability rules. The Python floor moves only as described in the toolchain policy.


License

This project is dual-licensed under either:

at your option. Dependencies keep their own licences.

The logo is "Computer connected" by glyph.faisalovers from Noun Project, licensed under CC BY 3.0 and recoloured for light and dark themes.


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

來源:README.md,提交 83ab253

工具

7

list_families

List every ISO 20022 family the gateway routes to (pain, pacs, camt, acmt): its capabilities, backing package, and whether that package is installed in this environment. When to use: Use to check environment readiness and verify whether optional backing packages (pain001-mcp, pacs008-mcp, camt053-mcp, acmt001-mcp) are installed. Not for: Searching specific schemas; 'search' and 'describe' cover those. Behavior: Pure in-memory introspection; read-only and idempotent.

無需輸入參數。

list_servers

List the whole ISO 20022 suite the gateway knows: the message families (pain/pacs/camt/acmt), the Exceptions & Investigations messages (camt.056/camt.029), and the specialized servers (reconciliation, agent-payment bridge) with what each does. When to use: Use to discover available specialized servers across the suite and route cross-cutting payments workflows. Not for: Building or reading messages; the gateway tools 'generate', 'parse' and 'validate' do that. Behavior: Pure in-memory catalog listing; read-only and idempotent.

無需輸入參數。

describe

Describe a message type: its required fields and input JSON Schema, resolved from the family's backing server. When to use: After 'search', to obtain the schema and required field names for the flat records that 'validate' and 'generate' take. Not for: Raw XML payloads; 'parse' reads those. Behavior: Read-only, idempotent resolution from local schemas. Errors return a structured {'error': ...} payload rather than raising.

輸入參數message_type必填

validate

Validate records for a message type against its JSON Schema, via the family's backing server. When to use: Ahead of 'generate', to verify record field types, required fields, date formats (YYYY-MM-DD), and IBAN/BIC constraints without generating XML. Not for: Raw XML documents; the backing server's XSD validation tools and 'parse' handle those. Behavior: Pure deterministic validation; read-only and idempotent with zero network I/O.

輸入參數records必填message_type必填

generate

Generate a validated ISO 20022 XML message from records; the XML document is returned in the 'xml' key. On failure the 'error' value lists every missing or invalid field at once — fix them all and retry once. When to use: Outbound initiation and interbank messages (pain.001, pacs.008, acmt.001, camt.056). Not for: Inbound statements (camt.053); they have no generator and return an explanatory error. Behavior: Pure transformation; read-only and idempotent.

輸入參數records必填message_type必填

parse

Parse an inbound ISO 20022 XML message into structured data. Parse coverage is per-family: pacs (e.g. pacs.008) and camt (e.g. camt.053) only. The initiation families pain and acmt are outbound-only — they have NO parser here, so a generate→parse round-trip for pain.001 or acmt.001 fails; 'validate' or the backing server's XSD validation checks those instead. When to use: Use to extract structured transactions, entries, debtor/creditor data, and balances from inbound messages (pacs.008 customer credit transfers, camt.053 statements). Not for: Outbound initiation families (pain.001, acmt.001). Behavior: Pure in-memory XML parsing; read-only and idempotent.

輸入參數xml必填message_type必填

版本歷史

7
  1. v0.0.18最新Oct 26, 2026
  2. v0.0.17Oct 20, 2026
  3. v0.0.16Oct 19, 2026
  4. v0.0.14Oct 19, 2026
  5. v0.0.13Oct 4, 2026
  6. v0.0.12Oct 4, 2026
  7. v0.0.11Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分