Camt Exceptions

io.github.sebastienrousseauPublished by GitHub account sebastienrousseauv0.0.20Updated Oct 24, 2026

Generate + XSD-validate ISO 20022 E&I camt messages (camt.056 cancellation, camt.029 resolution).

VerifiedSTDIODesktop onlyFinanceDeveloper Tools

Overview

AI-generated overview

Generates and XSD-validates ISO 20022 Exceptions & Investigations camt messages, such as camt.056 payment cancellation requests, for an AI assistant.

What you can do
  • List supported E&I message types and their names
  • Look up the required top-level fields for a message type
  • Generate an E&I XML message from a record, validated against the bundled XSD before it is returned
  • Validate raw XML against a message type's bundled XSD
When to use it
Useful when an assistant has to produce or check ISO 20022 exceptions and investigations messages, typically a camt.056 payment cancellation or recall request or a camt.029 resolution of investigation, and the output must be schema-valid.
Requirements
A local Python 3.10+ environment with the camt-exceptions package installed from PyPI, or run without installing via uvx. Runs over stdio by default; streamable HTTP and SSE transports are also available on a local bind address. No authentication or environment variables are declared.
Before you install
The HTTP transports carry no authentication of their own, so bind to loopback or place the server behind a trusted gateway before exposing a routable address. Generated messages describe payment cancellations and investigations, so review the output before sending it to a bank or counterparty.

Installation

In SourceWeft

  1. Open Camt Exceptions in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

camt-exceptions: ISO 20022 Exceptions & Investigations, generated + XSD-valid

[Build Status] [PyPI version] [Glama MCP server score] [OpenSSF Scorecard] [License] [Python Version]

[camt-exceptions Demo]

Generate and validate ISO 20022 Exceptions & Investigations (E&I) camt messages — with an MCP server. Starts with camt.056 (FI-to-FI Payment Cancellation Request): the message a bank sends to recall or cancel a payment it already dispatched — a duplicate, an erroneous amount, a fraud recall. Output is validated against the official bundled XSD before it's returned.

Latest release: v0.0.20: camt.056 + camt.029 generation + validation, 4 MCP tools over stdio, streamable HTTP or SSE, 100% branch coverage, for Python 3.10+. Part of the ISO 20022 MCP suite. Additional E&I messages (camt.029, camt.026, camt.027, camt.087) plug into the same engine.

Why E&I

When a payment goes wrong, the fix is an Exceptions & Investigations message — and these are the least tooled corner of ISO 20022. camt.056 alone covers the single most common need: "I need to cancel/recall that payment." This library makes it a one-call, schema-valid operation for an agent, with the same depth as the credit-transfer generators elsewhere in the suite.

Install

sh
pip install camt-exceptions# or run the MCP server without installing:uvx camt-exceptions

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

json
{  "mcpServers": {    "camt-exceptions": {      "command": "camt-exceptions-mcp"    }  }}

Quick start — cancel a payment

python
from camt_exceptions import generator as g
xml = g.generate_message("camt.056.001.12", {    "assignment_id": "CXL-001",    "assigner_agent_bic": "DEUTDEFF",    "assignee_agent_bic": "COBADEFF",    "creation_date_time": "2026-03-02T10:00:00",    "original_msg_id": "MSG-ORIG-001",    "original_msg_nm_id": "pacs.008.001.08",    "transactions": [{        "original_end_to_end_id": "E2E-001",        "original_interbank_settlement_amount": "1000.00",        "original_interbank_settlement_currency": "EUR",        "cancellation_reason_cd": "DUPL",       # duplicate payment    }],})assert g.validate_xml("camt.056.001.12", xml)["is_valid"]   # True

Transports

One command line, three transports:

CommandTransportEndpointProtocol revisions
camt-exceptions-mcpstdiothe client spawns the process2026-07-28, 2025-11-25
camt-exceptions-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
camt-exceptions-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). 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 scout in both protocol eras and over SSE with the MCP SDK client; see ADR 0001.

json
{  "mcpServers": {    "camt-exceptions": { "url": "http://127.0.0.1:8000/mcp" }  }}

Tools

  • list_message_types — List supported E&I message types and names.
  • get_required_fields — Required top-level fields for a message type.
  • generate_message — Generate a validated E&I XML message from a record (validated against the bundled XSD before return).
  • validate_xml — Validate raw XML against a message type's bundled XSD.

Supported messages

MessageNameStatus
camt.056.001.12FI to FI Payment Cancellation Request✅
camt.029.001.14Resolution of Investigation✅
camt.026Unable to Applyplanned
camt.027Claim Non-Receiptplanned
camt.087Request to Modify Paymentplanned

Each new message plugs into the same engine: bundle its official XSD + template.xml and register it in MESSAGE_TYPES. Generated output is always XSD-validated before return, so correctness is machine-checked, not asserted.

Note: the payment-status and return messages of the E&I family — pacs.002 (Payment Status Report) and pacs.004 (Payment Return) — are already generated, XSD-valid, by pacs008-mcp.

The suite

Part of a family of vendor-neutral, Python-native ISO 20022 MCP servers:

Documentation

Development

sh
git clone https://github.com/sebastienrousseau/camt-exceptionscd camt-exceptionspython -m venv .venv && . .venv/bin/activatepip install -e . && pip install pytest pytest-cov hypothesis ruff black mypy interrogate "mutmut>=3.7,<4"pytest                      # 100% branch coverage gate; output is XSD-validatedruff check camt_exceptions tests && black --check camt_exceptions tests && mypy camt_exceptionsinterrogate -c pyproject.toml camt_exceptions   # 100% docstring gatemutmut run && mutmut export-cicd-stats && python scripts/mutation_gate.py --floor 90

License

Licensed under the Apache License, Version 2.0 or the MIT License, at your option. Bundled ISO 20022 message schemas (*.xsd) are © ISO 20022 and redistributed under the ISO 20022 terms; they are the same schemas published at iso20022.org.


mcp-name: io.github.sebastienrousseau/camt-exceptions

Source: README.md at commit d1f1666

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

3
  1. v0.0.20LatestOct 4, 2026
  2. v0.0.19Oct 4, 2026
  3. v0.0.18Sep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts