OPEN SOURCE · APACHE-2.0 · ON PYPI + THE MCP REGISTRY
Let your AI agent make real bank payments.
Nine open MCP servers that turn plain language into validated ISO 20022 bank messages: initiate, settle, reconcile and resolve. Vendor-neutral, runs anywhere, installed in one line.
$ claude mcp add iso20022 -- uvx --from "iso20022-mcp[all]" iso20022-mcp$ claude mcp listiso20022 · connected$ claude> Generate a pain.001 credit transfer paying Acme GmbH EUR 4,200, executing Friday.generate · records validated against the official XSD✓ schema-valid pain.001.001.03 returned
9 servers, live on PyPI · 100% branch-tested · vendor-neutral, Apache-2.0
Read as…
FOR THE BOARD
Three questions, answered up front.
What agentic payments cost, what they risk and what they replace, before anyone books a meeting about it.
WHAT IT COSTS
Free. Apache-2.0.
No licence, no account, no procurement. The whole suite is open source on public PyPI, so adopting it is an engineering decision, not a contract negotiation.
WHAT IT RISKS
Money never moves without a human.
The servers generate and check messages; sending them stays behind your own approval wall, in your own systems. Every gateway tool is read-only and idempotent.
WHAT IT REPLACES
Bespoke ISO 20022 integration work.
The message generation, validation and reconciliation plumbing a team would otherwise build by hand against the schemas, maintained in the open instead.
WHAT YOU CAN DO
Payment operations, from a sentence.
Give an agent the jobs a treasury team does by hand. Every result is schema-valid before it is returned.
INITIATE
Pay from plain language.
“Pay this supplier €4,200” becomes a validated pain.001 or pacs.008, IBAN- and XSD-checked, ready for the rail.
RECONCILE
Match a statement in seconds.
Reconcile a camt.053 statement against what you expected, with an explainable reason for every match, partial and split payment.
MIGRATE
Get off SWIFT MT in time.
Convert MT103/MT101/MT94x to ISO 20022 and fix structured addresses before the 2026–2028 deadlines, one message at a time.
BRIDGE
Turn a mandate into a wire.
Take a signed AP2 or x402 agent mandate and produce a wire-valid pain.001, with spending-cap and expiry guardrails.
SEE IT WORK
From a sentence to a validated message.
Pick a real payment sentence and watch it become an exact MCP tool call and schema-valid ISO 20022 XML. Every transcript shown was captured from a live server, not mocked.
This interactive demo lets you pick a payment sentence and see the exact MCP tool call an assistant makes, plus the validated ISO 20022 XML the gateway returned, captured live over stdio. Enable JavaScript to explore the transcripts.
CAPABILITY, NOT BROCHURE
An MCP server that does the work, not just the docs.
Ask for a payment and get the validated message itself. These servers generate, validate, parse, convert and reconcile ISO 20022 on your machine; they do not stop at telling you how.
9
servers on PyPI
87
tools, captured live
0
outbound network calls
100%
branch coverage
Tool count computed at build time from the committed tools/list captures in this site's repository, recorded over stdio JSON-RPC from the running servers.
NEW TO MCP?
What is the Model Context Protocol?
MCP is an open standard that lets AI assistants use real tools safely, a universal port between an assistant and your systems.
THE PROBLEM
Agents talk, but can't act.
A model can describe a payment, but not produce the exact bank message that moves it. Every integration was bespoke glue code.
THE STANDARD
One protocol, any tool.
MCP gives assistants a common way to discover and call tools, from Claude, Cursor or your own agent. Build a capability once; every client can use it.
THIS SUITE
Payments as MCP tools.
These servers expose ISO 20022 as MCP tools. Ask in plain terms, get back XSD-validated messages. No translator between your systems and the rails.
THE OUTCOME
Build the next era of your enterprise.
Agents that act across your whole payment stack: initiate, reconcile, migrate and resolve, on an open, vendor-neutral standard you can run anywhere.
THE SUITE
Nine servers, one payment lifecycle.
Install the gateway and let it route, or install just the server for the job. Each is one pip install, on the MCP registry.
DISCOVER + GENERATE
The gateway.
One surface across pain, pacs, camt and acmt: search, generate XSD-valid XML, validate and parse, through seven meta-tools.
The servers produce and check messages. Sending them stays behind your approval, in your own systems.
01
Generate locally.
Your records become a pain.001 or pacs.008 on your own machine, over stdio. Nothing is uploaded anywhere.
02
Validate locally.
Output is checked against the bundled official XSD before it returns. Deterministic, offline, the same answer every run.
03Approval wall
A human approves.
Every meta-tool is annotated read-only and idempotent. The message is a file; a person decides whether it becomes a payment.
04
Your rails dispatch.
Submission to SWIFT, SEPA or FedNow happens in your own banking channel. The servers hold no credentials and never move money.
SECURITY POSTURE
Your payment data stays yours.
LOCAL-FIRST
Zero data retention.
The stdio servers run inside your environment and make no outbound network calls. Nothing is sent, nothing is stored, nothing phones home.
DETERMINISTIC
Validated on your machine.
Every generated message is checked against the bundled official ISO 20022 XSD locally, before you ever see it.
OPEN
Apache-2.0, in the open.
Every server is open source on PyPI and the official MCP registry. Read the code before you trust it.
TESTED
100% branch-tested.
Full branch coverage across the suite, so the paths an agent exercises are the paths the tests exercise.
FOR REGULATORS AND COMPLIANCE
Evidence a supervisor can check.
Tools that cite their sources, dates they enforce, and validation an auditor can rerun and get the same answer.
CITED, NOT ASSERTED
Rulebook clauses with sources.
cite_rulebook and list_rulebook_clauses return curated SEPA, CBPR+ and HVPS+ clauses, versioned, each with its canonical source URL, so a compliance claim can be traced to the official document.
THE 2026 CUTOVER
November 2026, encoded.
get_cbpr_cutover_date returns 2026-11-16, and check_cbpr_readiness audits a camt.053 statement against the CBPR+ acceptance rules that take effect at the 14-16 November 2026 cutover, structured postal addresses included.
STRUCTURED ADDRESSES
The address cliff, tool by tool.
classify_address, validate_address, repair_address and validate_addresses classify, police and repair party addresses against the 14 November 2026 rule that rejects unstructured-only addresses.
AUDIT EVIDENCE
Deterministic, offline validation.
Every generated message is checked against the bundled official XSD on your machine: same input, same answer, no network. A validation run can be reproduced by an auditor, line for line.
A note on DORA. This suite is not certified against DORA, and no such product certification exists. What the architecture offers is raw material for your own control mapping: local execution reduces reliance on external ICT providers for message validation, deterministic offline validation produces repeatable testing evidence, and open source means your auditors can read every line they depend on. Whether these properties satisfy your DORA obligations is your assessment to make.
TIMED, NOT ESTIMATED
Under a minute, with a stopwatch on it.
From a completely empty package cache to a schema-valid pain.001 in 17.5 seconds, downloads included. We measured it, on 16 July 2026, instead of promising it.
17.5s
cold cache to validated pain.001
1.5s
warm cache, same session
1
call, first try
0
accounts, keys or sign-ups
Method: stdio JSON-RPC client timestamps from process spawn: uvx --from "iso20022-mcp[all]" iso20022-mcp, initialize handshake, then one generate call returning a schema-valid pain.001.001.03 (gateway 0.0.4). Cold run used --cache-dir pointing at an empty directory, so the 17.5s includes resolving and downloading every package; the warm run reused the populated cache. Machine: Apple-silicon Mac (arm64 macOS), uv 0.11.21.
FREE, THREE WAYS
Free means free.
BOARDS
Free to adopt.
Nothing to procure: no licence, no contract, no vendor negotiation. Apache-2.0, tied to no balance sheet.
ENGINEERS
Free to run.
No account, no API key, no metering. One uvx command and the suite is running on your own machine.
REGULATORS
Free to audit.
Every line public on GitHub and PyPI. Read the exact code that validates the message before you rely on it.
WORKS WITH YOUR STACK
Works with every MCP client.
One standard stdio server, so the setup is one small block in your client's own config. Remote-first platforms connect to hosted MCP servers instead.
Claude Code
One command, from any directory.
claude mcp add iso20022 -- uvx --from "iso20022-mcp[all]" iso20022-mcp
The Agents SDK spawns the suite locally over stdio through its MCPServerStdio class, with the same command and args. ChatGPT connectors and the Responses API connect to remote MCP servers over Streamable HTTP or HTTP/SSE only, so they pair with a hosted deployment, not a local process.
async with MCPServerStdio(
name="iso20022",
params={
"command": "uvx",
"args": ["--from", "iso20022-mcp[all]", "iso20022-mcp"],
},
) as server:
...
Microsoft Copilot Studio
Adds MCP servers to agents as tools through Power Platform connectors, over the Streamable HTTP transport only; it does not run local stdio servers.
Zapier MCP
A Zapier-hosted remote MCP endpoint: you create a dedicated server at mcp.zapier.com and point your client at the generated URL. It connects clients to Zapier actions, not to local servers like this suite.
Config shapes checked against each client's official documentation, July 2026. Full per-client setup
INSTALL
Install it your way.
Run it with uvx and nothing to install, pin it with pip, or drop one block of JSON into Claude Desktop.
uvx --from "iso20022-mcp[all]" iso20022-mcp
No install, no account, no key. The [all] extra covers every family, bank statements included.
pip install "iso20022-mcp[all]"
iso20022-mcp
Installed with pip, the client config is just the iso20022-mcp command, no args.
.vscode/mcp.json, for GitHub Copilot. The top-level key is "servers", not "mcpServers".
async with MCPServerStdio(
name="iso20022",
params={
"command": "uvx",
"args": ["--from", "iso20022-mcp[all]", "iso20022-mcp"],
},
) as server:
...
The Python Agents SDK spawns the server itself over stdio through MCPServerStdio.
GET STARTED
Live in under a minute.
STEP 1
Run it, no install.
Start the gateway with one command, no account, no key: uvx --from "iso20022-mcp[all]" iso20022-mcp
STEP 2
Ask in plain terms.
Try search "cancel a payment" and it points you at the right message, then generate returns XSD-valid XML.
STEP 3
Connect your agent.
Add iso20022-mcp as a command in your MCP client (Claude Desktop, Cursor) and your assistant can pay, reconcile and migrate.
STEP 4
Keep humans in the loop.
The agent can search, generate and validate complex ISO 20022 XML, but by design it never moves money directly. Have it output the XSD-valid payload, or route it to your bank's SFTP, API gateway or treasury queue for final human approval and settlement. Generation stays separate from execution, so the AI can draft, reconcile and migrate with no risk of unauthorised funds leaving accounts.
Each prompt is limited to what the suite actually does, and each result excerpt is from a real tool session driven over stdio JSON-RPC. Paste the prompt into any connected client; the same ask becomes the same tool call.
Generate a SEPA pain.001.001.03 customer credit transfer paying Fournier Conseil SARL EUR 4,200.00 from Acme Treasury GmbH, IBAN DE89370400440532013000, executing 2026-07-17, invoice INV-2026-183. Validate the records first, then return the XML.
The gateway validated the record set, generated the document and checked it against the official XSD before returning. First call, no retry; isError false.
Which CBPR+ 2026 rule makes structured postal addresses mandatory? Cite it with the official source URL.
What came back
{
"scheme": "CBPR+",
"version": "2026",
"clause": "structured-address-mandate-nov-2026",
"title": "Structured postal addresses mandatory from 14-16 Nov 2026",
"summary": "From the Nov 14-16 2026 cutover, CBPR+ messages (pacs.008, pacs.009, camt.053, camt.054 and related) must carry structured postal addresses (TownName, Country, optionally PostCode) on debtor, creditor, and ultimate parties. Unstructured-only addresses (AdrLine without structured siblings) will be rejected at FINplus.",
"source_url": "https://www.swift.com/standards/iso-20022-programme/cbpr-plus",
"as_of": "2026-06-22"
}
The registry is a curated convenience layer; the tool's own disclaimer says to consult the official scheme document at the source URL before relying on it, and so do we.
A mixed month-end close on built-in fixtures: one exact match, one short payment with the delta reported, one invoice settled by two instalments, and one unexpected credit left unmatched, each with its reasons.
Excerpts are drawn from the committed capture file; elisions are marked with an ellipsis and nothing is reworded.
ZERO REAL DATA
Try it with zero real data.
reconcile-mcp ships deterministic sandbox fixtures: list_sandbox_scenarios shows the scenarios, load_sandbox_scenario opens one for inspection and run_sandbox_scenario reconciles it in one call. Watch a full, explainable reconciliation, exact matches, short payments, splits and unmatched residuals, before any real statement touches the tools.
Downloads: pypistats.org last-30-day counts for the nine suite packages, summed, fetched 16-17 July 2026. Registry: live listing count for this account on registry.modelcontextprotocol.io, checked 17 July 2026. No projections, no all-time totals.
THE GATEWAY, VERBATIM
Seven meta-tools, captured live.
Recorded from a running gateway over stdio JSON-RPC (tools/list), not written by hand. Expand a tool to see its real description and input schema.
searchSearch the ISO 20022 catalogue by use-case, message type or keyword (e.g. 'reconciliation', 'make a payment', 'pacs.008') and get the matching message types, their family, and which package provides them.
Search the ISO 20022 catalogue by use-case, message type or keyword (e.g. 'reconciliation', 'make a payment', 'pacs.008') and get the matching message types, their family, and which package provides them.
querystring, optionalUse-case, message type or keyword. Empty = all.
list_familiesList 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.
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.
Takes no arguments.
list_serversList 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.
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.
Takes no arguments.
describeDescribe a message type: its required fields and input JSON Schema, resolved from the family's backing server.
Describe a message type: its required fields and input JSON Schema, resolved from the family's backing server.
message_typestring, requiredISO 20022 message type or family prefix, e.g. 'pacs.008' or 'camt.053'.
validateValidate records for a message type against its JSON Schema, via the family's backing server.
Validate records for a message type against its JSON Schema, via the family's backing server.
message_typestring, requiredISO 20022 message type or family prefix, e.g. 'pacs.008' or 'camt.053'.
recordsarray, requiredList of record objects to validate or generate a message from.
generateGenerate a validated ISO 20022 XML message from records; the XML document is returned in the 'xml' key. Supported for initiation and interbank families (pain, pacs, acmt); statement families (camt) are inbound-only and return an explanatory error.
Generate a validated ISO 20022 XML message from records; the XML document is returned in the 'xml' key. Supported for initiation and interbank families (pain, pacs, acmt); statement families (camt) are inbound-only and return an explanatory error.
message_typestring, requiredISO 20022 message type or family prefix, e.g. 'pacs.008' or 'camt.053'.
recordsarray, requiredList of record objects to validate or generate a message from.
parseParse an inbound ISO 20022 XML message into structured data. Supported for interbank (pacs) and statement (camt) families; initiation families return an explanatory error.
Parse an inbound ISO 20022 XML message into structured data. Supported for interbank (pacs) and statement (camt) families; initiation families return an explanatory error.
message_typestring, requiredISO 20022 message type or family prefix, e.g. 'pacs.008' or 'camt.053'.
xmlstring, requiredRaw ISO 20022 XML to parse.
Captured from iso20022-mcp 0.0.2 on 15 July 2026. Every tool is annotated read-only, idempotent and closed-world.
SAFE BY DESIGN
Built to hand to an agent.
VALIDATED
Checked before it returns.
Every generator validates output against the official bundled XSD before handing it back. Malformed messages never leave the tool.
GUARDED
Never moves money.
The bridge only transforms and validates. Producing a message stays separate from sending it, so payment is a human-guarded step.
READ-ONLY
Read-only where it counts.
Reconciliation is pure matching, and every tool is marked read-only, idempotent and closed-world, so clients can reason about safety.
OPEN
Owned by no bank.
Apache-2.0, 100% branch-tested, on your own infrastructure, tied to no balance sheet.