Generate, validate, parse & audit ISO 20022 pacs.008 FI-to-FI Customer Credit Transfer messages from Claude Desktop, Cursor & other MCP clients — 10 tools, scheme-aware CBPR+/HVPS+/Fedwire/CHAPS/T2/SCT-Inst rules. Part of the ISO 20022 MCP Suite.

pacs008-mcp: An MCP Server for ISO 20022 FI-to-FI Credit Transfers

pacs008-mcp banner

PyPI VersionPython VersionsPyPI DownloadsLicenceTestsQualityDocumentation

A Model Context Protocol server that exposes the pacs008ISO 20022 FI-to-FI Customer Credit Transfer library as tools for AI agents andassistants — discover message types and scheme profiles, validate recordsagainst the JSON Schema and against a rail's usage guidelines, generatevalidated XML, validate raw XML against the bundled XSD, and parse inboundmessages, all from your favourite MCP client.

Latest release: v0.0.2 — 14 MCP tools over stdio, all backed by thepacs008 library, for Python 3.10+. Adds the November 2026 structured-addresscliff tools.

Contents

  • Overview
  • Install
  • Quick Start
  • Tools
  • November 2026 structured-address cliff
  • Using the tools
  • Development
  • Licence
  • Contribution
  • Acknowledgements

Overview

The Model Context Protocol (MCP) is an open standard that lets AI agentsand assistants discover and call external tools in a uniform way. pacs008-mcpis an MCP server that turns the pacs008 library into a set offirst-class agent tools, so an assistant can generate, validate, and parseISO 20022 pacs.008 FI-to-FI Customer Credit Transfer XML messages — andthe related pacs.002/.004 status and return messages — directly from aconversation.

Every tool is a thin, typed wrapper over the pacs008 library — the samepackage used by the CLI and REST API — so all interfaces behave identically.Tools return JSON-serialisable data; on a validation error they return an{"error": ...} payload rather than raising.

flowchart LR
    A["MCP client<br/>(Claude Desktop, IDE, agent)"] -->|stdio| B["pacs008-mcp"]
    B -->|delegates to| C["pacs008 library"]
    C -->|render + validate| D["ISO 20022 pacs XML"]

Install

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

python -m pip install pacs008-mcp

Note: while the core pacs008 library is not yet on PyPI, install it fromsource first:

python -m pip install "git+https://github.com/sebastienrousseau/pacs008.git"
python -m pip install pacs008-mcp

Quick Start

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

pacs008-mcp

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

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

Tools

All tools wrap the pacs008 library, so they behave identically to the CLI andREST API.

Tool Purpose
list_message_types List the 20 supported ISO 20022 pacs message types
list_schemes List the registered scheme / usage-guideline profiles
get_scheme Inspect a scheme profile's rules
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's schema
validate_scheme Validate records against a scheme's usage guidelines
generate_message Generate a validated pacs XML message
validate_xml Validate a raw XML string against the bundled XSD
parse_message Parse & classify an inbound ISO 20022 message
classify_address Classify a postal address as structured / hybrid / unstructured
validate_address Validate one postal address against an address policy
repair_address Upgrade legacy unstructured address lines toward hybrid/structured form
validate_addresses Batch-validate every party address across payment rows

November 2026 structured-address cliff

On 14 November 2026, fully unstructured postal addresses are decommissionedacross SWIFT CBPR+, HVPS+, TARGET2 RTGS, CHAPS, Fedwire and Lynx — after thatdate, any cross-border or high-value payment carrying an unstructured-onlypostal address is rejected at the rail. The four address tools above wrapthe pacs008 library's standards.address module so an agent can get ahead ofthe deadline: classify_address shows where an address stands, validate_address/ validate_addresses enforce a policy (defaulting to the cliff rulehybrid_or_structured, which rejects unstructured addresses), andrepair_address runs country-aware heuristics (GB, US, DE, FR, JP,plus a best-effort fallback) to lift legacy address lines into hybrid form.The repair step is experimental — audit its output before submitting downstream.

Using the tools

You can invoke the tools in-process — without a transport — straight through theFastMCP instance. This mirrors what an agent receives over stdio. The runnableversion of this snippet lives in examples/mcp_tools.py.

import asyncio

from pacs008_mcp.server import server

record = [
    {
        "msg_id": "MSG001",
        "creation_date_time": "2026-01-15T10:30:00",
        "nb_of_txs": "1",
        "settlement_method": "CLRG",
        "interbank_settlement_date": "2026-01-15",
        "end_to_end_id": "E2E001",
        "interbank_settlement_amount": "1000.00",
        "interbank_settlement_currency": "EUR",
        "charge_bearer": "SHAR",
        "debtor_name": "Debtor Corp",
        "debtor_agent_bic": "DEUTDEFF",
        "creditor_agent_bic": "COBADEFF",
        "creditor_name": "Creditor Ltd",
    }
]


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 ""

    print(await call("list_schemes", {}))
    xml = await call("generate_message",
                     {"message_type": "pacs.008.001.08", "records": record})
    print(xml[:46])  # -> <?xml version="1.0" encoding="UTF-8"?> ...


asyncio.run(main())

Run it directly:

python examples/mcp_tools.py

Development

pacs008-mcp uses Poetry andmise.

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

This package depends on the core pacs008 library. Until it is on PyPI,install it from source first:pip install "git+https://github.com/sebastienrousseau/pacs008.git".

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

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:

Server Purpose
pain001-mcp Generate & validate ISO 20022 pain.001 payment files (v03–v12, pain.008, SEPA) with rulebook checks
camt053-mcp Parse & reconcile ISO 20022 camt.053 bank-to-customer statements — CBPR+/HVPS+ ready
acmt001-mcp Generate & validate ISO 20022 acmt account-management messages
bankstatementparser-mcp Parse bank statements (BAI2, MT940/MT942, CAMT.053, OFX, CSV) into structured transactions

MCP Registry

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

Licence

Licensed under the Apache Licence, Version 2.0. Any contribution submittedfor inclusion shall be licensed as above, without additional terms.

Contribution

Contributions are welcome — see the contributing instructions. Thanks toall contributors.

Acknowledgements

Built on the pacs008 ISO 20022 FI-to-FI Customer Credit Transferlibrary and the Model Context Protocol Python SDK.

MCP Server · Populars

MCP Server · New

    ROCTUP

    1C Metacode MCP Server

    MCP сервер с встроенным AI агентом для поиска по графу метаданных и кода конфигураций 1С

    Community ROCTUP
    nhevers

    r0x-os

    Official SDK, Claude Code plugin and facilitator docs for r0x, the x402 facilitator for Robinhood Chain.

    Community nhevers
    scarletkc

    Vexor

    A semantic search engine for files and code.

    Community scarletkc
    marmutapp

    SuperBased Observer

    Local-first cost & token tracking for Claude Code, Cursor, Codex & 23 more AI coding agents — proxy-accurate per-model spend, an MCP server your agent can query, and an opt-in team rollup. 100% local, no telemetry.

    Community marmutapp
    Intuition-Lab

    Persome

    Local-first macOS Runtime that turns cross-app activity into an inspectable personal model for MCP agents.

    Community Intuition-Lab