Skip to main content

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

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.13camt.056 + camt.029 generation + validation, 4 MCP tools over stdio, 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

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

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

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

Quick start — cancel a payment

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

Tools

Tool What it does
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

Message Name Status
camt.056.001.12 FI to FI Payment Cancellation Request
camt.029.001.14 Resolution of Investigation
camt.026 Unable to Apply planned
camt.027 Claim Non-Receipt planned
camt.087 Request to Modify Payment planned

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:

Development

git clone https://github.com/sebastienrousseau/camt-exceptions
cd camt-exceptions
python -m venv .venv && . .venv/bin/activate
pip install -e . && pip install pytest pytest-cov ruff black mypy
pytest                      # 100% branch coverage gate; output is XSD-validated
ruff check camt_exceptions tests && black --check camt_exceptions tests && mypy camt_exceptions

Licence

Code licensed under the Apache License, Version 2.0. 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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

camt_exceptions-0.0.13.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

camt_exceptions-0.0.13-py3-none-any.whl (25.8 kB view details)

Uploaded Python 3

File details

Details for the file camt_exceptions-0.0.13.tar.gz.

File metadata

  • Download URL: camt_exceptions-0.0.13.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for camt_exceptions-0.0.13.tar.gz
Algorithm Hash digest
SHA256 9f34d30ccfad605c32c93b79fdd2f0cd0934f4063af1e76fdd76108764a85649
MD5 a6600c07e376cce5f1c2e8afa9d5243d
BLAKE2b-256 7e778339ca7f9252dc760297dcaf80abd32b3f36eca78d1a0a4296159235da63

See more details on using hashes here.

Provenance

The following attestation bundles were made for camt_exceptions-0.0.13.tar.gz:

Publisher: release.yml on sebastienrousseau/camt-exceptions

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file camt_exceptions-0.0.13-py3-none-any.whl.

File metadata

File hashes

Hashes for camt_exceptions-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 81f0942ccb14c38c66a87359de5016855357af4ce02a1135a990105edfe1c1a2
MD5 4b88b53628034c5228eb0f92a938eca1
BLAKE2b-256 3f5f56d0a7c1a8d92263cfcbef1b874f877a9cbc03f8eb7d1ff7cdafed55ce5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for camt_exceptions-0.0.13-py3-none-any.whl:

Publisher: release.yml on sebastienrousseau/camt-exceptions

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.0.15

2 files

0.0.14

2 files

This release

0.0.13 This release

2 files

0.0.2

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page