Sebastien Rousseau
Aerial view of illuminated financial district at night

ISO 20022 MCP Suite: tool reference.

Every server in the suite and the tools it exposes. Nine servers, one consistent contract: JSON in, validated JSON or XSD-checked XML out.

Every server speaks the same contract: JSON records in, validated JSON or XSD-checked XML out, with an {"error": …} payload rather than an exception when something is wrong. Below is what each exposes. New to the suite? Start with the quickstart.

9 servers · 87 tools. Every entry below is generated from a live tools/list capture over MCP stdio; nothing is hand-written.

iso20022-mcp · THE GATEWAY

One surface, all families.

Routes search, describe, validate, generate and parse to whichever family server the job needs.

7 tools · v0.0.3 · captured live over MCP stdio on 2026-07-16 with uvx --from "iso20022-mcp[all]" iso20022-mcp

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. No parameters

This tool takes no parameters.

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. No parameters

This tool takes no parameters.

describe Describe a message type: its required fields and input JSON Schema, resolved from the family's backing server. 1 parameter · 1 required
Parameters of describe
Parameter Type Required Description
message_type string Required ISO 20022 message type or family prefix, e.g. 'pacs.008' or 'camt.053'.
validate Validate records for a message type against its JSON Schema, via the family's backing server. 2 parameters · 2 required
Parameters of validate
Parameter Type Required Description
message_type string Required ISO 20022 message type or family prefix, e.g. 'pacs.008' or 'camt.053'.
records array of object Required List of record objects to validate or generate a message from.
generate 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. 2 parameters · 2 required
Parameters of generate
Parameter Type Required Description
message_type string Required ISO 20022 message type or family prefix, e.g. 'pacs.008' or 'camt.053'.
records array of object Required List of record objects to validate or generate a message from.
parse Parse an inbound ISO 20022 XML message into structured data. Supported for interbank (pacs) and statement (camt) families; initiation families return an explanatory error. 2 parameters · 2 required
Parameters of parse
Parameter Type Required Description
message_type string Required ISO 20022 message type or family prefix, e.g. 'pacs.008' or 'camt.053'.
xml string Required Raw ISO 20022 XML to parse.

pain001-mcp · INITIATE

Customer credit transfers.

pain.001 initiation: discovery, IBAN/BIC and XSD validation, generation, migration and MT101 conversion.

17 tools · v0.0.55 · captured live over MCP stdio on 2026-07-15 with uvx --from "pain001-mcp" pain001-mcp

list_message_types List every supported ISO 20022 pain message type and its human name. No parameters

Use this first, before any generation or validation call, to discover the exact message_type strings this server accepts. Do not use it to fetch a type's fields or schema - call get_required_fields or get_input_schema for that.

Returns a list of {"message_type": ..., "name": ...} dictionaries, one per supported message type (e.g. pain.001.001.09).

This tool takes no parameters.

get_required_fields List only the required input field names for a pain message type. 1 parameter · 1 required

Use this for a quick checklist of the mandatory columns before building records. When you need full type/format constraints (not just which fields are required), call get_input_schema instead.

Parameters of get_required_fields
Parameter Type Required Description
message_type string Required A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types). One of: pain.001.001.03 · pain.001.001.04 · pain.001.001.05 · pain.001.001.06 · pain.001.001.07 · pain.001.001.08 · pain.001.001.09 · pain.001.001.10 · pain.001.001.11 · pain.001.001.12 · pain.008.001.02.
get_input_schema Return the full JSON Schema for a message type's flat input record. 1 parameter · 1 required

Use this to learn every field, its type, and its constraints before assembling records, or to drive a form/UI. For just the required-field names use get_required_fields; to actually check records against this schema use validate_records.

Parameters of get_input_schema
Parameter Type Required Description
message_type string Required A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types). One of: pain.001.001.03 · pain.001.001.04 · pain.001.001.05 · pain.001.001.06 · pain.001.001.07 · pain.001.001.08 · pain.001.001.09 · pain.001.001.10 · pain.001.001.11 · pain.001.001.12 · pain.008.001.02.
validate_records Validate flat records against a message type's input JSON Schema. 2 parameters · 2 required

Use this before generate_message to catch structural/type errors per record and get a row-by-row error report. This checks JSON-Schema shape only; for payment-scheme rulebook checks (SEPA field lengths, charset, etc.) also run validate_payment_scheme.

Returns a report {"valid": bool, "total": int, "valid_count": int, "errors": [...]}.

Parameters of validate_records
Parameter Type Required Description
message_type string Required A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types). One of: pain.001.001.03 · pain.001.001.04 · pain.001.001.05 · pain.001.001.06 · pain.001.001.07 · pain.001.001.08 · pain.001.001.09 · pain.001.001.10 · pain.001.001.11 · pain.001.001.12 · pain.008.001.02.
records array of object Required One or more flat payment records to validate, each a dict of field name → value (see get_input_schema for the fields and get_required_fields for the mandatory ones).
validate_identifier Validate a single financial identifier (IBAN or BIC). 2 parameters · 2 required

Use this for a one-off identifier check with a clear pass/fail and reason. To validate identifiers embedded across a whole batch, prefer validate_records / validate_payment_scheme instead of calling this per field.

Returns {"kind": str, "value": str, "valid": bool, "error": str} (the error key is present only when valid is False).

Parameters of validate_identifier
Parameter Type Required Description
kind string Required Which identifier to validate: 'iban' or 'bic' (case-insensitive). Any other value returns an error.
value string Required The identifier string to check - an IBAN or BIC/SWIFT code matching the chosen kind.
generate_message Generate a validated ISO 20022 pain XML message from in-memory records. 2 parameters · 2 required

This is the primary generation tool: pass records you already hold in memory. Use generate_message_from_file when the data lives in a CSV on disk, and generate_message_async for very large batches you want to run off the event loop. The result is XSD-validated before return; no file is written.

Returns the validated XML document as a string, or a JSON-encoded {"error": ...} payload if generation fails.

Parameters of generate_message
Parameter Type Required Description
message_type string Required A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types). One of: pain.001.001.03 · pain.001.001.04 · pain.001.001.05 · pain.001.001.06 · pain.001.001.07 · pain.001.001.08 · pain.001.001.09 · pain.001.001.10 · pain.001.001.11 · pain.001.001.12 · pain.008.001.02.
records array of object Required One or more flat payment records (each a dict of field name → value) to render into the XML; validate them first with validate_records. See get_input_schema for the fields.
list_supported_formats List the on-disk data formats the pain001 loader can read. No parameters

Use this to tell a user which file types they may supply to generate_message_from_file. This lists data-source formats (CSV, SQLite, …); for the list of ISO 20022 message types call list_message_types instead.

Returns a list of {"id", "name", "extension"} dictionaries covering CSV, SQLite, JSON, JSONL, and Parquet (the last requires the pain001[parquet] extra).

This tool takes no parameters.

generate_message_async Generate validated pain XML off the event loop, for large batches. 2 parameters · 2 required

Behaves exactly like generate_message but runs the synchronous renderer in a worker thread so an agent can interleave a long generation with other tool calls. Use generate_message for small or interactive batches; use this only when the record count is large enough that blocking would matter.

Delegates to pain001.async_adapter.generate_xml_string_async. Returns the validated XML, or a JSON-encoded {"error": ...} payload.

Parameters of generate_message_async
Parameter Type Required Description
message_type string Required A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types). One of: pain.001.001.03 · pain.001.001.04 · pain.001.001.05 · pain.001.001.06 · pain.001.001.07 · pain.001.001.08 · pain.001.001.09 · pain.001.001.10 · pain.001.001.11 · pain.001.001.12 · pain.008.001.02.
records array of object Required One or more flat payment records (each a dict of field name → value) to render into the XML; use this async variant only when the batch is large. See get_input_schema.
generate_message_from_file Generate validated pain XML from a CSV file on the local disk. 2 parameters · 2 required

Use this when the records live in a CSV file rather than in memory; it reads data_file_path from the local filesystem, then delegates to generate_message. If you already have the records as dicts, call generate_message directly. Only CSV is supported today (JSON / JSONL / SQLite / Parquet are planned for a follow-up release).

Loads data_file_path via pain001.csv.load_csv_data.load_csv_data so the same path-safety guards apply as in the core library.

Parameters of generate_message_from_file
Parameter Type Required Description
message_type string Required A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types). One of: pain.001.001.03 · pain.001.001.04 · pain.001.001.05 · pain.001.001.06 · pain.001.001.07 · pain.001.001.08 · pain.001.001.09 · pain.001.001.10 · pain.001.001.11 · pain.001.001.12 · pain.008.001.02.
data_file_path string Required Local filesystem path to a CSV file with one payment record per row and a header matching the template columns (see inspect_template). Only CSV is supported today.
parse_camt053 Parse a camt.053 bank-statement XML file on disk into structured data. 2 parameters · 1 required

Use this to read a bank's account statement (the reply that confirms settlement) into a header + entry list. Reads xml_file_path from the local filesystem. For the payment-status reply (accepted/rejected per transaction) use parse_pain002 instead; to validate a camt.053 string you already hold, this is not it - this tool needs a file path.

Wraps pain001.parse_camt053_statement. When xsd_file_path is provided, the document is first validated against that XSD; on a schema or parse error the tool returns {"error": ...} rather than raising.

Parameters of parse_camt053
Parameter Type Required Description
xml_file_path string Required Local filesystem path to the camt.053 bank-statement XML file to parse.
xsd_file_path string, nullable Optional Optional local path to a camt.053 XSD; when given, the document is validated against it before parsing. Omit to skip schema validation.
parse_pain002 Parse a pain.002 payment-status report file on disk into structured data. 2 parameters · 1 required

Use this to read the bank's acknowledgement of a submitted pain.001 - the per-transaction accepted/rejected status and reason codes. Reads xml_file_path from the local filesystem. For the account statement that later confirms booked entries, use parse_camt053 instead.

Wraps pain001.parse_pain002_report. When xsd_file_path is provided, the document is first validated against that XSD; on a schema or parse error the tool returns {"error": ...} rather than raising.

Parameters of parse_pain002
Parameter Type Required Description
xml_file_path string Required Local filesystem path to the pain.002 payment-status report XML file to parse.
xsd_file_path string, nullable Optional Optional local path to a pain.002 XSD; when given, the document is validated against it before parsing. Omit to skip schema validation.
inspect_template Return the CSV column headers the message type's bundled template uses. 1 parameter · 1 required

Use this to see the exact column order for hand-building a CSV before generate_message_from_file. This returns column names from the bundled sample; for the typed JSON contract (types, required flags) use get_input_schema.

Mirrors the in-tree pain001.mcp.server.inspect_template tool so an agent can introspect the column layout before assembling rows.

Parameters of inspect_template
Parameter Type Required Description
message_type string Required A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types). One of: pain.001.001.03 · pain.001.001.04 · pain.001.001.05 · pain.001.001.06 · pain.001.001.07 · pain.001.001.08 · pain.001.001.09 · pain.001.001.10 · pain.001.001.11 · pain.001.001.12 · pain.008.001.02.
validate_payment_scheme Validate records against a payment-scheme rulebook (e.g. SEPA). 2 parameters · 1 required

Use this after validate_records to enforce scheme-specific business rules (SEPA field lengths, allowed characters, currency/BIC constraints) that JSON-Schema validation alone does not cover. validate_records checks structural shape; this checks rulebook compliance for one profile.

Delegates to pain001.validate_scheme. Supported profiles: sepa-sct, sepa-sdd, sepa-inst, xborder-ct.

Parameters of validate_payment_scheme
Parameter Type Required Description
records array of object Required Payment records as a list of flat dicts (field name → value) to check against the scheme rulebook.
profile string Optional The payment-scheme rulebook profile to enforce. One of 'sepa-sct', 'sepa-sdd', 'sepa-inst', or 'xborder-ct'. Defaults to 'sepa-sct'. Default: "sepa-sct".
migrate_records Migrate flat payment records between two pain.001 schema versions. 3 parameters · 3 required

Use this to upgrade/downgrade records when your bank requires a different pain.001 version than your source data uses (e.g. move .03 rows to .09); it reports which fields were renamed, derived, or dropped. This transforms records only - run validate_records afterwards, then generate_message to emit XML.

Wraps pain001.migration.VersionMapper. Returns the migrated rows plus a summary of which fields were renamed, derived, or dropped; {"error": ...} if either version is unsupported.

Parameters of migrate_records
Parameter Type Required Description
records array of object Required Flat payment records in the from_version shape, each a dict of field name → value, to transform to to_version.
from_version string Required Source pain.001 schema version the records currently use, e.g. 'pain.001.001.03' - see list_message_types.
to_version string Required Target pain.001 schema version to migrate the records to, e.g. 'pain.001.001.09' - see list_message_types.
validate_xml_against_schema Validate a raw pain.001 / pain.008 XML string against its official XSD. 2 parameters · 2 required

Use this to check XML you already have as a string (e.g. received from another system) without touching the filesystem. To validate records before they become XML, use validate_records; to parse a statement or status-report file, use parse_camt053 / parse_pain002.

Wraps pain001.xml.validate_via_xsd.validate_xml_string_via_xsd.

Parameters of validate_xml_against_schema
Parameter Type Required Description
xml_content string Required The full pain.001 / pain.008 XML document as a string, validated against the message type's official XSD.
message_type string Required A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types). One of: pain.001.001.03 · pain.001.001.04 · pain.001.001.05 · pain.001.001.06 · pain.001.001.07 · pain.001.001.08 · pain.001.001.09 · pain.001.001.10 · pain.001.001.11 · pain.001.001.12 · pain.008.001.02.
sanitize_to_iso20022_charset Sanitise one free-text field to the ISO 20022 Latin character set. 1 parameter · 1 required

Use this on a single free-text value (name, remittance info) to transliterate accents and drop unsupported symbols before placing it in a record, and to see whether the value changed. Operates on one string; to check a whole batch's rulebook compliance use validate_payment_scheme.

Wraps pain001.sanitize_to_charset. Transliterates accents (é -> e), removes unsupported symbols, and returns both the cleaned string and a flag for whether the original was already valid - useful for surfacing the change to the user before writing it back to a record.

Parameters of sanitize_to_iso20022_charset
Parameter Type Required Description
value string Required A single free-text field value (e.g. a name or remittance line) to transliterate to the ISO 20022 Latin character set.
convert_mt101 Convert a legacy SWIFT MT101 message into pain.001-ready records. 1 parameter · 1 required

Use this to bridge the Nov-2025+ SWIFT MT→MX migration: parse an MT101 (Request for Transfer) into the flat records the other tools consume - feed the result straight to validate_records / validate_payment_scheme and then generate_message to emit pain.001.001.09 XML. An MT101 can request many transfers (repeating sequence B), so this returns one record per transaction. Operates on the supplied text only; no file is read or written.

Wraps pain001_loader_mt101.loader.parse_mt101. Sequence-A ordering-customer / account-servicing fields apply to every transaction unless a sequence-B block overrides them; fields the MT101 does not carry are synthesised to schema defaults (payment_method "TRF", service_level_code "SEPA", etc.).

Parameters of convert_mt101
Parameter Type Required Description
mt101_text string Required A legacy SWIFT MT101 (Request for Transfer) message as text - a bare ':tag:' field list or a raw '{4:...-}' block-4 envelope. An MT101 may carry several sequence-B transfers; each becomes its own record.

pacs008-mcp · SETTLE

FI-to-FI transfers, returns, status.

pacs.008 interbank settlement plus pacs.004 returns, pacs.002 status, MT103 conversion and the structured-address toolkit.

15 tools · v0.0.4 · captured live over MCP stdio on 2026-07-15 with uvx --from "pacs008-mcp" pacs008-mcp

list_message_types List every supported ISO 20022 pacs message type and its human name. No parameters

Use this first, before any generation or validation call, to discover the exact message_type strings this server accepts (e.g. pacs.008.001.08 FI-to-FI Customer Credit Transfer). To learn a type's required fields or full schema, call get_required_fields or get_input_schema instead.

Returns a list of {"message_type": ..., "name": ...} dictionaries, one per supported message type.

This tool takes no parameters.

list_schemes List every registered scheme / usage-guideline profile. No parameters

Scheme profiles (CBPR+, HVPS+, Fedwire, CHAPS, T2 RTGS, SCT Inst, generic) layer rail-specific rules on top of base ISO 20022. Use this to discover the scheme names accepted by get_scheme and validate_scheme.

Registry aliases (e.g. cbpr+, cbprplus) collapse to their canonical profile, so each profile appears exactly once. Returns a list of {"scheme": ..., "name": ...} dictionaries.

This tool takes no parameters.

get_scheme Return the rule attributes of a scheme / usage-guideline profile. 1 parameter · 1 required

Use this to inspect a rail's constraints -- whether the UETR is mandatory, the permitted charge bearers, remittance-info length cap, per-message transaction cardinality, pinned message versions, and which parties must carry an LEI -- before assembling or validating a batch.

Parameters of get_scheme
Parameter Type Required Description
scheme string Required A registered scheme / usage-guideline profile name (case-insensitive), e.g. 'cbpr_plus', 'fedwire', 'chaps'. Must be one of: 'cbpr+', 'cbpr_plus', 'cbprplus', 'chaps', 'fedwire', 'generic', 'hvps+', 'hvps_plus', 'hvpsplus', 'sct-inst', 'sct_inst', 'sctinst', 't2_rtgs', 't2rtgs', 'target2' (see list_schemes). One of: cbpr+ · cbpr_plus · cbprplus · chaps · fedwire · generic · hvps+ · hvps_plus · hvpsplus · sct-inst · sct_inst · sctinst · t2_rtgs · t2rtgs · target2.
get_required_fields List only the required input field names for a pacs message type. 1 parameter · 1 required

Use this for a quick checklist of the mandatory columns before building payment records. For full type/format constraints (not just which fields are required), call get_input_schema instead.

Parameters of get_required_fields
Parameter Type Required Description
message_type string Required A supported ISO 20022 pacs message type, e.g. 'pacs.008.001.08' FI-to-FI Customer Credit Transfer. Must be exactly one of: 'pacs.002.001.12', 'pacs.003.001.09', 'pacs.004.001.11', 'pacs.007.001.11', 'pacs.008.001.01', 'pacs.008.001.02', 'pacs.008.001.03', 'pacs.008.001.04', 'pacs.008.001.05', 'pacs.008.001.06', 'pacs.008.001.07', 'pacs.008.001.08', 'pacs.008.001.09', 'pacs.008.001.10', 'pacs.008.001.11', 'pacs.008.001.12', 'pacs.008.001.13', 'pacs.009.001.10', 'pacs.010.001.05', 'pacs.028.001.05' (see list_message_types). One of: pacs.002.001.12 · pacs.003.001.09 · pacs.004.001.11 · pacs.007.001.11 · pacs.008.001.01 · pacs.008.001.02 · pacs.008.001.03 · pacs.008.001.04 · pacs.008.001.05 · pacs.008.001.06 · pacs.008.001.07 · pacs.008.001.08 · pacs.008.001.09 · pacs.008.001.10 · pacs.008.001.11 · pacs.008.001.12 · pacs.008.001.13 · pacs.009.001.10 · pacs.010.001.05 · pacs.028.001.05.
get_input_schema Return the full JSON Schema for a message type's flat input record. 1 parameter · 1 required

Use this to learn every field, its type, and its constraints before assembling records, or to drive a form/UI. For just the required-field names use get_required_fields; to check records against this schema use validate_records.

Parameters of get_input_schema
Parameter Type Required Description
message_type string Required A supported ISO 20022 pacs message type, e.g. 'pacs.008.001.08' FI-to-FI Customer Credit Transfer. Must be exactly one of: 'pacs.002.001.12', 'pacs.003.001.09', 'pacs.004.001.11', 'pacs.007.001.11', 'pacs.008.001.01', 'pacs.008.001.02', 'pacs.008.001.03', 'pacs.008.001.04', 'pacs.008.001.05', 'pacs.008.001.06', 'pacs.008.001.07', 'pacs.008.001.08', 'pacs.008.001.09', 'pacs.008.001.10', 'pacs.008.001.11', 'pacs.008.001.12', 'pacs.008.001.13', 'pacs.009.001.10', 'pacs.010.001.05', 'pacs.028.001.05' (see list_message_types). One of: pacs.002.001.12 · pacs.003.001.09 · pacs.004.001.11 · pacs.007.001.11 · pacs.008.001.01 · pacs.008.001.02 · pacs.008.001.03 · pacs.008.001.04 · pacs.008.001.05 · pacs.008.001.06 · pacs.008.001.07 · pacs.008.001.08 · pacs.008.001.09 · pacs.008.001.10 · pacs.008.001.11 · pacs.008.001.12 · pacs.008.001.13 · pacs.009.001.10 · pacs.010.001.05 · pacs.028.001.05.
validate_records Validate flat payment records against a message type's JSON Schema. 2 parameters · 2 required

Use this before generate_message to catch structural/type errors per record and get a row-by-row error report. This checks JSON-Schema shape only; to check a batch against a rail's usage guidelines use validate_scheme.

Returns a report {"is_valid": bool, "total": int, "valid": int, "errors": [...]}.

Parameters of validate_records
Parameter Type Required Description
message_type string Required A supported ISO 20022 pacs message type, e.g. 'pacs.008.001.08' FI-to-FI Customer Credit Transfer. Must be exactly one of: 'pacs.002.001.12', 'pacs.003.001.09', 'pacs.004.001.11', 'pacs.007.001.11', 'pacs.008.001.01', 'pacs.008.001.02', 'pacs.008.001.03', 'pacs.008.001.04', 'pacs.008.001.05', 'pacs.008.001.06', 'pacs.008.001.07', 'pacs.008.001.08', 'pacs.008.001.09', 'pacs.008.001.10', 'pacs.008.001.11', 'pacs.008.001.12', 'pacs.008.001.13', 'pacs.009.001.10', 'pacs.010.001.05', 'pacs.028.001.05' (see list_message_types). One of: pacs.002.001.12 · pacs.003.001.09 · pacs.004.001.11 · pacs.007.001.11 · pacs.008.001.01 · pacs.008.001.02 · pacs.008.001.03 · pacs.008.001.04 · pacs.008.001.05 · pacs.008.001.06 · pacs.008.001.07 · pacs.008.001.08 · pacs.008.001.09 · pacs.008.001.10 · pacs.008.001.11 · pacs.008.001.12 · pacs.008.001.13 · pacs.009.001.10 · pacs.010.001.05 · pacs.028.001.05.
records array of object Required One or more flat payment records, each a dict of field name -> value; validated against the message type's input JSON Schema (see get_input_schema / get_required_fields).
validate_scheme Validate payment records against a scheme's usage-guideline rules. 2 parameters · 2 required

Use this to check a batch against a rail's rulebook (CBPR+, HVPS+, Fedwire, CHAPS, T2 RTGS, SCT Inst) -- charge-bearer restrictions, UETR presence, remittance-info length, and per-message transaction cardinality. This is complementary to validate_records (JSON-Schema shape).

Returns {"scheme": str, "is_valid": bool, "total": int, "violations": [...]}.

Parameters of validate_scheme
Parameter Type Required Description
scheme string Required A registered scheme / usage-guideline profile name (case-insensitive), e.g. 'cbpr_plus', 'fedwire', 'chaps'. Must be one of: 'cbpr+', 'cbpr_plus', 'cbprplus', 'chaps', 'fedwire', 'generic', 'hvps+', 'hvps_plus', 'hvpsplus', 'sct-inst', 'sct_inst', 'sctinst', 't2_rtgs', 't2rtgs', 'target2' (see list_schemes). One of: cbpr+ · cbpr_plus · cbprplus · chaps · fedwire · generic · hvps+ · hvps_plus · hvpsplus · sct-inst · sct_inst · sctinst · t2_rtgs · t2rtgs · target2.
records array of object Required One or more flat payment records, each a dict of field name -> value; checked against the scheme's usage-guideline business rules (charge bearer, UETR, remittance length, per-message cardinality).
generate_message Generate a validated ISO 20022 pacs XML message from in-memory records. 2 parameters · 2 required

This is the primary generation tool: pass payment records you already hold in memory and receive an XSD-validated XML document; no file is written. Run validate_records first to surface record-level errors, and list_message_types to confirm the message_type string.

Returns the validated XML document as a string, or an {"error": ...} payload (serialized) if generation fails.

Parameters of generate_message
Parameter Type Required Description
message_type string Required A supported ISO 20022 pacs message type, e.g. 'pacs.008.001.08' FI-to-FI Customer Credit Transfer. Must be exactly one of: 'pacs.002.001.12', 'pacs.003.001.09', 'pacs.004.001.11', 'pacs.007.001.11', 'pacs.008.001.01', 'pacs.008.001.02', 'pacs.008.001.03', 'pacs.008.001.04', 'pacs.008.001.05', 'pacs.008.001.06', 'pacs.008.001.07', 'pacs.008.001.08', 'pacs.008.001.09', 'pacs.008.001.10', 'pacs.008.001.11', 'pacs.008.001.12', 'pacs.008.001.13', 'pacs.009.001.10', 'pacs.010.001.05', 'pacs.028.001.05' (see list_message_types). One of: pacs.002.001.12 · pacs.003.001.09 · pacs.004.001.11 · pacs.007.001.11 · pacs.008.001.01 · pacs.008.001.02 · pacs.008.001.03 · pacs.008.001.04 · pacs.008.001.05 · pacs.008.001.06 · pacs.008.001.07 · pacs.008.001.08 · pacs.008.001.09 · pacs.008.001.10 · pacs.008.001.11 · pacs.008.001.12 · pacs.008.001.13 · pacs.009.001.10 · pacs.010.001.05 · pacs.028.001.05.
records array of object Required One or more flat payment records, each a dict of field name -> value, from which the pacs XML is generated; run validate_records first to surface record-level errors.
validate_xml Validate a raw XML string against a message type's bundled XSD. 2 parameters · 2 required

Use this to check an externally produced XML document against the official ISO 20022 schema. To generate a document that is already XSD-validated, use generate_message instead.

Returns {"message_type": str, "is_valid": bool}.

Parameters of validate_xml
Parameter Type Required Description
message_type string Required A supported ISO 20022 pacs message type, e.g. 'pacs.008.001.08' FI-to-FI Customer Credit Transfer. Must be exactly one of: 'pacs.002.001.12', 'pacs.003.001.09', 'pacs.004.001.11', 'pacs.007.001.11', 'pacs.008.001.01', 'pacs.008.001.02', 'pacs.008.001.03', 'pacs.008.001.04', 'pacs.008.001.05', 'pacs.008.001.06', 'pacs.008.001.07', 'pacs.008.001.08', 'pacs.008.001.09', 'pacs.008.001.10', 'pacs.008.001.11', 'pacs.008.001.12', 'pacs.008.001.13', 'pacs.009.001.10', 'pacs.010.001.05', 'pacs.028.001.05' (see list_message_types). One of: pacs.002.001.12 · pacs.003.001.09 · pacs.004.001.11 · pacs.007.001.11 · pacs.008.001.01 · pacs.008.001.02 · pacs.008.001.03 · pacs.008.001.04 · pacs.008.001.05 · pacs.008.001.06 · pacs.008.001.07 · pacs.008.001.08 · pacs.008.001.09 · pacs.008.001.10 · pacs.008.001.11 · pacs.008.001.12 · pacs.008.001.13 · pacs.009.001.10 · pacs.010.001.05 · pacs.028.001.05.
xml string Required A raw ISO 20022 XML document to validate against the bundled XSD schema for the given message type.
parse_message Parse and classify an inbound ISO 20022 XML message. 1 parameter · 1 required

Use this on the receiving side to identify what a message is -- its msg_def_idr (e.g. pacs.002.001.10), family, version, and any Business Application Header -- before processing it. Handles both bare Document messages and BAH-wrapped envelopes.

Returns a dict with msg_def_idr, msg_family, version, root_local_name, namespace_uri, envelope_wrapped and bah.

Parameters of parse_message
Parameter Type Required Description
xml string Required A raw inbound ISO 20022 XML message (pacs.008 / pacs.002 / pacs.004, optionally BAH-envelope-wrapped) to classify.
convert_mt103 Convert a legacy SWIFT MT103 into pacs.008-ready flat records. 1 parameter · 1 required

This is the SWIFT MT-to-MX migration path (correspondent-banking MT103 coexistence with ISO 20022 ends November 2025): parse an MT103 text payload and get back the flat pacs.008 record(s) that can be fed straight into validate_records / generate_message. An MT103 carries exactly one transfer, so the records list always holds a single record. No file is read or written.

Returns {"message_type": "pacs.008.001.08", "records": [{...}]} with the parsed flat record, or an {"error": ...} payload if the MT103 is missing a mandatory field (:20:, :32A:, beneficiary) or malformed.

Parameters of convert_mt103
Parameter Type Required Description
mt103_text string Required A legacy SWIFT MT103 (single customer credit transfer) payload as text. A raw '{4:...-}' block-4 envelope, trailing whitespace and CRLF/LF differences are tolerated.
classify_address Classify a postal address as structured, hybrid, or unstructured. 1 parameter · 1 required

Use this to see where an address stands against the 14 November 2026 SWIFT cliff: structured (town + country + structured detail, no free-form lines), hybrid (town + country + 1-2 free-form adr_line lines, the minimum CBPR+ UG2026 bar), or unstructured (free-form only - rejected from the cliff date). To check acceptability under a policy use validate_address; to upgrade legacy lines use repair_address.

Returns {"classification": str, "is_structured": bool, "is_hybrid": bool, "is_unstructured": bool, "has_structured_fields": bool} or an {"error": ...} payload.

Parameters of classify_address
Parameter Type Required Description
address object Required An ISO 20022 PostalAddress27 as a dict of snake_case fields, e.g. {'strt_nm': 'High St', 'bldg_nb': '1', 'pst_cd': 'AB1 2CD', 'twn_nm': 'London', 'ctry': 'GB'} and optional 'adr_line' (list of free-form lines). 'ctry' must be ISO 3166-1 alpha-2.
validate_address Validate one postal address against an address policy. 2 parameters · 1 required

Use this to decide whether an address will clear a rail. The default hybrid_or_structured policy is the November 14, 2026 cliff rule (SWIFT CBPR+, HVPS+, T2 RTGS, CHAPS, Fedwire, Lynx): it rejects fully unstructured addresses. Findings mirror the library's pipeline severity (a policy rejection is a blocking finding).

Returns {"policy": str, "classification": str, "is_acceptable": bool, "findings": [{"severity": str, "message": str}, ...]} or an {"error": ...} payload.

Parameters of validate_address
Parameter Type Required Description
address object Required An ISO 20022 PostalAddress27 as a dict of snake_case fields, e.g. {'strt_nm': 'High St', 'bldg_nb': '1', 'pst_cd': 'AB1 2CD', 'twn_nm': 'London', 'ctry': 'GB'} and optional 'adr_line' (list of free-form lines). 'ctry' must be ISO 3166-1 alpha-2.
policy string Optional Postal-address validation policy. 'unstructured_ok' permits any form (pre-cliff / generic); 'hybrid_or_structured' rejects fully unstructured addresses (the SWIFT CBPR+ UG2026 default in force from 14 November 2026); 'structured_only' requires full structured form. Must be one of: 'unstructured_ok', 'hybrid_or_structured', 'structured_only'. One of: unstructured_ok · hybrid_or_structured · structured_only. Default: "hybrid_or_structured".
repair_address Upgrade legacy unstructured address lines toward hybrid/structured form. 2 parameters · 2 required

Experimental country-aware repair (GB, US, DE, FR, JP have dedicated heuristics; other countries get a best-effort pass promoting the last line to a town). Use this to lift pre-cliff data over the November 14, 2026 bar; audit the output before submitting, and keep both the original and derived address in your audit trail.

Returns {"address": {...}, "classification": str, "is_structured": bool, "is_hybrid": bool} (so you can see the unstructured -> hybrid / structured upgrade) or an {"error": ...} payload.

Parameters of repair_address
Parameter Type Required Description
lines array of string Required Legacy unstructured address lines (free-form). Empty or whitespace-only lines are skipped.
country string Required ISO 3166-1 alpha-2 country code (e.g. 'GB', 'US', 'DE', 'FR', 'JP') used to drive country-aware repair heuristics.
validate_addresses Batch-validate every party address across a list of payment rows. 2 parameters · 1 required

Use this before generate_message to catch addresses that will be rejected at the rail. The default hybrid_or_structured policy enforces the November 14, 2026 cliff. Each finding is reported per offending (row, party) pair.

Returns {"policy": str, "is_valid": bool, "total": int, "errors": [{"row": int, "party": str, "severity": str, "message": str, "classification": str}, ...]} or an {"error": ...} payload.

Parameters of validate_addresses
Parameter Type Required Description
addresses array of object Required Payment-row dicts. The pipeline scans each row for columns of the form '{party}_address_{field}' (party in debtor, creditor, debtor_agent, creditor_agent, ultimate_debtor, ultimate_creditor; field a snake_case PostalAddress field such as twn_nm/ctry/strt_nm or adr_line_0..adr_line_6) and validates each party's address.
policy string Optional Postal-address validation policy. 'unstructured_ok' permits any form (pre-cliff / generic); 'hybrid_or_structured' rejects fully unstructured addresses (the SWIFT CBPR+ UG2026 default in force from 14 November 2026); 'structured_only' requires full structured form. Must be one of: 'unstructured_ok', 'hybrid_or_structured', 'structured_only'. One of: unstructured_ok · hybrid_or_structured · structured_only. Default: "hybrid_or_structured".

camt053-mcp · READ STATEMENTS

Bank-to-customer statements.

camt.053/camt.052 parsing, entry queries, MT94x conversion, reversals and CBPR+ readiness.

21 tools · v0.0.12 · captured live over MCP stdio on 2026-07-15 with uvx --from "camt053-mcp" camt053-mcp

list_message_types List every supported ISO 20022 camt.05x message type and its name. No parameters

Use this first, before any validation or generation call, to discover the exact message_type strings this server accepts. For the return-reason codes rather than message types, call list_return_reasons instead.

Returns a list of {"message_type": ..., "name": ...} dictionaries, one per supported message type (e.g. camt.053.001.14).

This tool takes no parameters.

list_return_reasons List every known ISO external return reason code with its name. No parameters

Use this to discover the reason_code values that filter_entries and generate_reversal accept (e.g. AC04 Closed Account). For the supported message types rather than reason codes, use list_message_types.

Returns a list of {"code": ..., "name": ...} dictionaries (e.g. {"code": "AC04", "name": "Closed Account Number"}).

This tool takes no parameters.

get_required_fields List only the required input field names for a camt message type. 1 parameter · 1 required

Use this for a quick checklist of the mandatory columns before building reversing-entry records. When you need full type/format constraints (not just which fields are required), call get_input_schema instead.

Parameters of get_required_fields
Parameter Type Required Description
message_type string Required A supported ISO 20022 camt.05x message type string. Must be exactly one of: 'camt.052.001.14', 'camt.053.001.14', 'camt.054.001.14' (see list_message_types). One of: camt.052.001.14 · camt.053.001.14 · camt.054.001.14.
get_input_schema Return the full JSON Schema for a message type's flat input record. 1 parameter · 1 required

Use this to learn every field, its type, and its constraints before assembling records, or to drive a form/UI. For just the required-field names use get_required_fields; to actually check records against this schema use validate_records.

Parameters of get_input_schema
Parameter Type Required Description
message_type string Required A supported ISO 20022 camt.05x message type string. Must be exactly one of: 'camt.052.001.14', 'camt.053.001.14', 'camt.054.001.14' (see list_message_types). One of: camt.052.001.14 · camt.053.001.14 · camt.054.001.14.
validate_records Validate flat records against a message type's input JSON Schema. 2 parameters · 2 required

Use this on in-memory reversing-entry records to catch structural/type errors per row before generation. To validate a whole camt.05x document (XML) against its XSD instead, use validate_statement.

Returns a report {"valid": bool, "total": int, "valid_count": int, "errors": [...]}.

Parameters of validate_records
Parameter Type Required Description
message_type string Required A supported ISO 20022 camt.05x message type string. Must be exactly one of: 'camt.052.001.14', 'camt.053.001.14', 'camt.054.001.14' (see list_message_types). One of: camt.052.001.14 · camt.053.001.14 · camt.054.001.14.
records array of object Required One or more flat reversing-entry records (each a dict of field name to value) to validate row-by-row against the message type's input JSON Schema.
validate_identifier Validate a single financial identifier (IBAN, BIC, or LEI). 2 parameters · 2 required

Use this for a one-off identifier check with a clear pass/fail. To validate identifiers embedded across a whole batch of records, prefer validate_records rather than calling this per field.

Returns {"kind": str, "value": str, "valid": bool}.

Parameters of validate_identifier
Parameter Type Required Description
kind string Required The financial identifier type to validate (case-insensitive). Must be exactly one of: 'bic', 'iban', 'lei'. One of: bic · iban · lei.
value string Required The identifier value to check, matching the chosen kind (e.g. an IBAN, an 8- or 11-character BIC, or a 20-character LEI). Whitespace/case handling follows the underlying validator.
parse_statement Parse an incoming camt.05x statement XML string into structured data. 1 parameter · 1 required

Use this to turn a raw statement into a navigable dict (header, statements, accounts, balances, entries). To pull just the flat entry list use list_entries; to only check the document is schema-valid use validate_statement.

Returns the parsed document as a JSON-serialisable dict (group header plus statements, each with its account, balances, and entries), or an {"error": ...} payload if the XML cannot be parsed.

Parameters of parse_statement
Parameter Type Required Description
xml string Required The raw camt.05x statement XML document as a string, with its root camt <Document> element. Returned verbatim from the bank; no file path is accepted.
convert_mt940_to_camt053 Convert a legacy SWIFT MT940 statement into a camt.053 structure. 1 parameter · 1 required

Use this as the Phase-1 migration wedge: SWIFT MT940 customer statements retire in **November 2028**, so this tool bridges the gap by turning raw MT940 text into the same JSON-serialisable camt.053 document shape that parse_statement returns (group header plus statements, each with its account, balances, and entries). Downstream tools (list_entries, filter_entries, classify_entry, export_journal) then work on the result unchanged.

Wraps the camt053-loader-mt940 library's parse_mt940; the MT parsing itself is delegated (no MT grammar is reimplemented here). The resulting ParsedDocument is serialised with the same to_dict() the server's other parse tools use, so agents get a consistent structure. Nothing is read from or written to disk.

Returns the converted document as a JSON-serialisable dict, or an {"error": ...} payload if the MT940 text cannot be parsed (e.g. a missing :20: reference or a malformed balance / statement line).

Parameters of convert_mt940_to_camt053
Parameter Type Required Description
mt940_text string Required The raw legacy SWIFT MT940 statement text as a string (:20: / :25: / :28C: / :60F: / :61: / :86: / :62F: fields). Passed verbatim from the bank or ERP; no file path is accepted.
convert_mt942 Convert a legacy SWIFT MT942 interim report into a camt.052 structure. 1 parameter · 1 required

Use this as the Phase-1 migration wedge for intraday reporting: SWIFT MT94x messages retire in **November 2028**, so this tool bridges the gap by turning raw MT942 Interim Transaction Report text into the same JSON-serialisable camt.052 (Bank-to-Customer Account **Report**) document shape the server's parse tools return (group header plus statements, each with its account, balances, and entries). MT942 is the intraday sibling of MT940: where MT940 maps to camt.053 (end-of-day statement), MT942 maps to camt.052, so the resulting message_type is camt.052.001.08. Downstream tools (list_entries, filter_entries, classify_entry, export_journal) then work on the result unchanged.

Wraps the camt053-loader-mt942 library's parse_mt942; the MT parsing itself is delegated (no MT grammar is reimplemented here). The resulting ParsedDocument is serialised with the same to_dict() the server's other parse tools use, so agents get a consistent structure. Nothing is read from or written to disk.

**Documented model limitation.** The camt053 typed model is camt.053-statement-oriented: it has no dedicated field for camt.052's floor-limit (<Lmt>) or transaction-summary (<TxsSummry>) blocks. Rather than drop that data, the loader surfaces it on the balance list using clearly proprietary type_code values so consumers can recognise and filter them: :34F: floor limits become FLIMD / FLIMC balances, and :90D: / :90C: entry-count summaries become SUMD:<count> / SUMC:<count> balances (the ISO NbOfNtries count is encoded after the colon; the sum is the balance amount). See the loader's README.

Returns the converted document as a JSON-serialisable dict, or an {"error": ...} payload if the MT942 text cannot be parsed (e.g. a missing :20: reference or a malformed floor-limit / summary / statement line).

Parameters of convert_mt942
Parameter Type Required Description
mt942_text string Required The raw legacy SWIFT MT942 interim transaction report text as a string (:20: / :25: / :28C: / :34F: / :13D: / :61: / :86: / :90D: / :90C: fields). Passed verbatim from the bank or ERP; no file path is accepted.
validate_statement Validate an incoming camt.05x statement XML against its XSD schema. 1 parameter · 1 required

Use this to confirm a document is well-formed and schema-valid before processing it. This checks XSD conformance only; for the Nov 2026 CBPR+ business rules use check_cbpr_readiness, and to extract the data use parse_statement.

Detects the document's message type, validates it against the matching ISO 20022 schema, and returns a report {"valid": bool, "message_type": str, "errors": [...]}. A well-formed but schema-invalid document yields valid=False with a populated errors list (and the detected message_type); a valid one yields valid=True with no errors.

Returns an {"error": ...} payload instead if the XML cannot be parsed (e.g. it is malformed or is not a camt Document).

Parameters of validate_statement
Parameter Type Required Description
xml string Required The raw camt.05x statement XML document as a string, with its root camt <Document> element. Validated against the matching ISO 20022 XSD; no file path is accepted.
check_cbpr_readiness Check a camt.053 statement against the CBPR+ Nov 2026 acceptance rules. 1 parameter · 1 required

Use this to audit a statement for the business-rule changes (schema version, structured postal addresses) enforced from the Nov 2026 cutover. For plain XSD schema validity use validate_statement instead; for just the cutover date use get_cbpr_cutover_date.

A coordinated CBPR+ / Fedwire / CHAPS / T2 cutover lands on **14-16 November 2026**: unstructured-only postal addresses get rejected, camt.110/111 exceptions and investigations become mandatory, and T2S R2026.NOV upgrades camt.053 / 054 to schema revision MR2026.

This tool walks the supplied payload and reports every issue that will fail the Nov 2026 acceptance rules:

* **Schema version** vs the CBPR+ current set (camt.053.001.08 / camt.053.001.13); .02-.07 are flagged as deprecated warnings; unknown / non-camt.053 namespaces as errors. * **Postal addresses**: every <PstlAdr> is classified as fully structured, hybrid, or **unstructured-only** (<AdrLine> without <TwnNm> + <Ctry> siblings, the Nov 2026 reject case).

Returns a dictionary {"cbpr_ready": bool, "schema_version": str | None, "checked_at": ISO-8601 UTC, "cutover_date": "2026-11-16", "issues": [...], "summary": {...}}. cbpr_ready is True iff no severity="error" issue was raised. An {"error": ...} envelope is returned instead if the XML is malformed or refused by the hardened pre-flight (DOCTYPE / ENTITY / oversized payload).

Parameters of check_cbpr_readiness
Parameter Type Required Description
xml string Required The raw camt.05x statement XML document as a string, audited against the CBPR+ Nov 2026 acceptance rules (schema version and structured postal addresses). Rejected by the hardened pre-flight if it carries a DOCTYPE/ENTITY or is oversized.
get_cbpr_cutover_date Return the official CBPR+ / Nov 2026 cutover date as ISO 8601. No parameters

Use this to quote the enforcement date directly, without parsing a document. To actually audit a statement against the rules that take effect on that date, call check_cbpr_readiness instead.

The cutover (2026-11-16) is the date after which the rules checked by check_cbpr_readiness are enforced by the major clearing systems; payments that fail will be rejected at receive-time. Surfaced as a discrete tool so agents can quote it directly without having to call a readiness check first.

This tool takes no parameters.

cite_rulebook Return a curated payments-rulebook citation for a single clause. 3 parameters · 3 required

Use this to quote one specific rule (with its canonical source URL) once you know the scheme/version/clause. To discover which clauses exist first, call list_rulebook_clauses.

Looks up one well-known rule across the SEPA, CBPR+, and HVPS+ rulebooks and returns a short summary together with the canonical source URL so an agent can quote the rule and the operator can verify it against the official document.

The registry is a curated convenience layer, not a verbatim reproduction of copyrighted text. Always defer to source_url for authoritative wording before relying on a citation for compliance or contractual decisions; the returned disclaimer field repeats this for the calling agent.

Parameters of cite_rulebook
Parameter Type Required Description
scheme string Required The payments-rulebook scheme to cite (case-sensitive). Must be exactly one of: 'CBPR+', 'HVPS+', 'SEPA' (see list_rulebook_clauses). One of: CBPR+ · HVPS+ · SEPA.
version string Required The rulebook version, e.g. '2025' or '2026'. Use list_rulebook_clauses to see which versions exist per scheme.
clause string Required A kebab-case clause identifier (e.g. 'iban-only') as returned by list_rulebook_clauses for the chosen scheme and version.
list_rulebook_clauses List the curated rulebook clauses the server can cite, optionally filtered. 2 parameters · 0 required

Use this to browse the citation registry and pick a clause id; then pass that id to cite_rulebook to fetch the full summary and source URL.

Returns the full registry, optionally filtered by scheme and / or version. Use the resulting clause values as input to cite_rulebook.

Parameters of list_rulebook_clauses
Parameter Type Required Description
scheme string, nullable Optional Restrict the listing to one scheme. When given, must be exactly one of: 'CBPR+', 'HVPS+', 'SEPA'. None (the default) returns clauses for all schemes. One of: CBPR+ · HVPS+ · SEPA.
version string, nullable Optional Restrict the listing to one rulebook version, e.g. '2026'. None (the default) returns clauses for all versions.
export_journal Export a camt.053 statement as accounting-platform journal-entry payloads. 2 parameters · 1 required

Use this to reshape a statement's booked entries into ready-to-POST Xero or QuickBooks payloads (the tool builds the payloads only; it does not call any external API or write files). To discover the valid target values first, call list_export_journal_targets.

Parses the supplied statement and re-shapes every booked entry into a target-specific journal-entry payload ready for direct POST to the accounting platform's REST API.

Supported targets (see camt053_mcp.export_journal.SUPPORTED_TARGETS):

"xero" - returns a list of Xero BankTransactions payloads. Each entry maps to {Type, Reference, Date, BankAccount, Contact, LineAmountTypes, CurrencyCode, LineItems}; CRDT entries become Type=RECEIVE and DBIT entries Type=SPEND. "qbo" - returns a list of QuickBooks Online JournalEntry payloads. Each entry produces a balanced two-line journal (one to the bank account, one to a clearing account; sign flipped on debit entries).

Operator-specific values (account codes, contact identifiers, realm IDs) appear as "OPERATOR_FILL" placeholders so the operator knows exactly what still needs wiring. The response's placeholder_count field reports the total.

NetSuite + SAP S/4HANA targets are tracked as a follow-up in #17.

Parameters of export_journal
Parameter Type Required Description
xml string Required The raw camt.053 statement XML document as a string; its booked entries are reshaped into journal-entry payloads.
target string Optional The accounting platform to shape journal-entry payloads for. Must be exactly one of: 'qbo', 'xero' (see list_export_journal_targets). One of: qbo · xero. Default: "xero".
list_export_journal_targets List the accounting-platform targets the export_journal tool supports. No parameters

Use this to tell a user which target values export_journal accepts before invoking it. This lists export destinations only; for the LLM classifier's category vocabulary use list_classify_entry_categories.

Returns the sorted list of valid target arguments accepted by export_journal (["qbo", "xero"] today). NetSuite and SAP S/4HANA support is a tracked follow-up.

This tool takes no parameters.

classify_entry Classify one statement entry into a category via MCP LLM Sampling. 2 parameters · 1 required

Use this when you want a semantic, model-driven label for an entry (payroll, fee, refund, …) rather than a deterministic rule match. Because it delegates an LLM completion to the client it is open-world and non-idempotent; for the fixed candidate categories it chooses from, call list_classify_entry_categories first.

Uses the **MCP Sampling** protocol primitive: the server (this process) asks the client (the agent's host application) to perform an LLM completion on the server's behalf, then receives the model's structured response. Keeps every LLM call in the operator's existing model contract (privacy, billing, audit).

The model is asked to choose exactly one category from categories (or camt053_mcp.classify.DEFAULT_CATEGORIES if None is passed) and return a structured {category, confidence, explanation} payload.

Clients that do not support Sampling will get an {"error": "..."} envelope and can fall back to a rules-only classifier.

Parameters of classify_entry
Parameter Type Required Description
entry object Required A single statement entry dict, in the shape returned by parse_statement / list_entries, to classify into one category.
categories array of string, nullable Optional The candidate categories the model must choose exactly one from. None (the default) uses the built-in default list exposed by list_classify_entry_categories.
list_classify_entry_categories List the default candidate categories the classify_entry tool uses. No parameters

Use this to quote the built-in category vocabulary to a user before running the LLM classifier. This is a static list lookup (no model call); to actually classify an entry, call classify_entry.

Operators can override the list per call; this tool exposes the default the prompt template ships with so an agent can quote them to the user before invoking the classifier.

This tool takes no parameters.

list_entries List every booked entry across all statements in a camt.05x document. 3 parameters · 1 required

Use this to get the flat, paginable entry list from a statement. To keep only the entries carrying a given return-reason code use filter_entries; for the full nested document structure use parse_statement.

When limit is None (the default) the full list of entries is returned. When limit is given, a paginated envelope {"total", "offset", "limit", "entries"} is returned instead, exposing the offset:offset + limit slice. A negative offset or limit yields an {"error": ...} payload.

Parameters of list_entries
Parameter Type Required Description
xml string Required The raw camt.05x statement XML document as a string; every booked entry across all its statements is returned.
offset integer Optional Zero-based index of the first entry to return. Applies only when limit is given; must be non-negative. Defaults to 0. Default: 0.
limit integer, nullable Optional Maximum number of entries to return, starting at offset. None (the default) returns the full unpaginated list; a non-None value returns a {total, offset, limit, entries} envelope. Must be non-negative.
filter_entries List only the statement entries carrying a given return reason code. 4 parameters · 1 required

Use this to preview exactly which entries a reversal would touch before calling generate_reversal with the same reason_code. For every entry regardless of reason code use list_entries instead.

When limit is None (the default) the full list of matching entries is returned, preserving the behaviour expected by existing callers. When limit is given, a paginated envelope {"total", "offset", "limit", "entries"} is returned instead, exposing the offset:offset + limit slice. A negative offset or limit yields an {"error": ...} payload.

Parameters of filter_entries
Parameter Type Required Description
xml string Required The raw camt.05x statement XML document as a string; only its entries carrying the given return reason code are returned.
reason_code string Optional An ISO external return reason code, e.g. 'AC04' Closed Account. Must be exactly one of: 'AC01', 'AC02', 'AC03', 'AC04', 'AC06', 'AC13', 'AC14', 'AG01', 'AG02', 'AM01', 'AM02', 'AM03', 'AM04', 'AM05', 'AM06', 'AM07', 'AM08', 'AM09', 'BE01', 'BE05', 'CNOR', 'DNOR', 'DT01', 'ED01', 'ED05', 'FF01', 'MD01', 'MD06', 'MD07', 'MS02', 'MS03', 'NARR', 'NOAS', 'NOOR', 'RC01', 'RR01', 'RR02', 'RR03', 'RR04', 'SL01', 'TM01' (see list_return_reasons). One of: AC01 · AC02 · AC03 · AC04 · AC06 · AC13 · AC14 · AG01 · AG02 · AM01 · AM02 · AM03 · AM04 · AM05 · AM06 · AM07 · AM08 · AM09 · BE01 · BE05 · CNOR · DNOR · DT01 · ED01 · ED05 · FF01 · MD01 · MD06 · MD07 · MS02 · MS03 · NARR · NOAS · NOOR · RC01 · RR01 · RR02 · RR03 · RR04 · SL01 · TM01. Default: "AC04".
offset integer Optional Zero-based index of the first matching entry to return. Applies only when limit is given; must be non-negative. Defaults to 0. Default: 0.
limit integer, nullable Optional Maximum number of matching entries to return, starting at offset. None (the default) returns the full unpaginated list; a non-None value returns a {total, offset, limit, entries} envelope. Must be non-negative.
generate_reversal Generate a validated camt.053.001.14 reversal document from a statement. 2 parameters · 1 required

This is the headline one-shot workflow: pass an incoming statement and a return-reason code and get back the reversal XML (nothing is written to disk). Preview which entries will be reversed first with filter_entries using the same reason_code.

This is the headline one-shot workflow: parse the incoming camt.053, pick the entries with the requested return reason (e.g. AC04 Closed Account), and emit a validated camt.053.001.14 reversal statement.

Returns the validated XML document as a string, or an {"error": ...} payload (serialized) if generation fails.

Parameters of generate_reversal
Parameter Type Required Description
xml string Required The raw incoming camt.053 statement XML document as a string; the entries carrying reason_code are reversed into a new camt.053.001.14 document.
reason_code string Optional An ISO external return reason code, e.g. 'AC04' Closed Account. Must be exactly one of: 'AC01', 'AC02', 'AC03', 'AC04', 'AC06', 'AC13', 'AC14', 'AG01', 'AG02', 'AM01', 'AM02', 'AM03', 'AM04', 'AM05', 'AM06', 'AM07', 'AM08', 'AM09', 'BE01', 'BE05', 'CNOR', 'DNOR', 'DT01', 'ED01', 'ED05', 'FF01', 'MD01', 'MD06', 'MD07', 'MS02', 'MS03', 'NARR', 'NOAS', 'NOOR', 'RC01', 'RR01', 'RR02', 'RR03', 'RR04', 'SL01', 'TM01' (see list_return_reasons). One of: AC01 · AC02 · AC03 · AC04 · AC06 · AC13 · AC14 · AG01 · AG02 · AM01 · AM02 · AM03 · AM04 · AM05 · AM06 · AM07 · AM08 · AM09 · BE01 · BE05 · CNOR · DNOR · DT01 · ED01 · ED05 · FF01 · MD01 · MD06 · MD07 · MS02 · MS03 · NARR · NOAS · NOOR · RC01 · RR01 · RR02 · RR03 · RR04 · SL01 · TM01. Default: "AC04".

reconcile-mcp · RECONCILE

Statements against expected payments.

Explainable matching of observed statement entries against expected payments, with a zero-data sandbox.

7 tools · v0.0.1 · captured live over MCP stdio on 2026-07-15 with uvx --from "reconcile-mcp" reconcile-mcp

reconcile Reconcile expected payments against observed bank-statement entries, returning exact matches, short/over payments, split settlements (one-to-many), batch credits (many-to-one) and unmatched residuals, each with an explainable score and reasons. 3 parameters · 2 required
Parameters of reconcile
Parameter Type Required Description
expected array of object Required List of canonical records. Each is an object with 'id' (string) and 'amount' (number) required, plus optional 'currency' (ISO 4217), 'date' (ISO-8601), 'counterparty' (name), 'reference' (remittance/end-to-end id).
observed array of object Required List of canonical records. Each is an object with 'id' (string) and 'amount' (number) required, plus optional 'currency' (ISO 4217), 'date' (ISO-8601), 'counterparty' (name), 'reference' (remittance/end-to-end id).
options object, nullable Optional Optional tuning object: 'abs_tol'/'rel_tol' (amount tolerance), 'date_window_days', 'high_threshold', 'review_threshold', 'currency_strict', 'enable_one_to_many', 'max_combination'.
explain_match Score a single expected/observed pair and break down every signal (reference, amount, date, name). A tuning aid -- it explains the score even for pairs below the review threshold. 3 parameters · 2 required
Parameters of explain_match
Parameter Type Required Description
expected object Required One expected record.
observed object Required One observed record.
options object, nullable Optional Optional tuning object: 'abs_tol'/'rel_tol' (amount tolerance), 'date_window_days', 'high_threshold', 'review_threshold', 'currency_strict', 'enable_one_to_many', 'max_combination'.
normalize_pain001 Convert parsed pain.001 payment instructions into canonical expected records ready to reconcile. Accepts a list of transactions or a dict wrapping them under 'transactions'/'payments'/'records'. 1 parameter · 1 required
Parameters of normalize_pain001
Parameter Type Required Description
document any Required Parsed pain.001 document or transaction list.
normalize_camt053 Convert parsed camt.053 statement entries into canonical observed records ready to reconcile. Accepts a list of entries or a dict wrapping them under 'entries'/'transactions'/'statements'. 1 parameter · 1 required
Parameters of normalize_camt053
Parameter Type Required Description
document any Required Parsed camt.053 document or entry list.
list_sandbox_scenarios List the built-in sandbox scenarios (test-mode fixtures). Each demonstrates one reconciliation outcome so you can try the flow with zero real data. No parameters

This tool takes no parameters.

load_sandbox_scenario Return the expected/observed inputs for one named sandbox scenario, so you can inspect or edit the fixture before reconciling. 1 parameter · 1 required
Parameters of load_sandbox_scenario
Parameter Type Required Description
name string Required Scenario name, e.g. 'clean_match'.
run_sandbox_scenario Load a named sandbox scenario and immediately reconcile it -- the one-call way to see a full, explainable result with zero setup. Great for a first run or a smoke test. 2 parameters · 1 required
Parameters of run_sandbox_scenario
Parameter Type Required Description
name string Required Scenario name, e.g. 'month_end'.
options object, nullable Optional Optional tuning object: 'abs_tol'/'rel_tol' (amount tolerance), 'date_window_days', 'high_threshold', 'review_threshold', 'currency_strict', 'enable_one_to_many', 'max_combination'.

camt-exceptions · RESOLVE

Cancellation & investigation.

camt.056 payment cancellation and camt.029 resolution of investigation, XSD-checked.

4 tools · v0.0.2 · captured live over MCP stdio on 2026-07-15 with uvx --from "camt-exceptions" camt-exceptions-mcp

list_message_types List the supported ISO 20022 Exceptions & Investigations message types (e.g. camt.056 payment cancellation request) and their names. No parameters

This tool takes no parameters.

get_required_fields Return the required top-level fields for an E&I message type. 1 parameter · 1 required
Parameters of get_required_fields
Parameter Type Required Description
message_type string Required An E&I message type, e.g. 'camt.056.001.12' (see list_message_types).
generate_message Generate a validated ISO 20022 E&I XML message from a record. For camt.056, the record cancels/recalls a previously sent payment (assignment ids + agent BICs + a list of 'transactions' with the original payment references and a cancellation reason code). Output is validated against the bundled XSD before it is returned. 2 parameters · 2 required
Parameters of generate_message
Parameter Type Required Description
message_type string Required An E&I message type, e.g. 'camt.056.001.12' (see list_message_types).
record object Required Message fields; see get_required_fields.
validate_xml Validate raw ISO 20022 XML against an E&I message type's bundled XSD; returns is_valid plus any schema errors. 2 parameters · 2 required
Parameters of validate_xml
Parameter Type Required Description
message_type string Required An E&I message type, e.g. 'camt.056.001.12' (see list_message_types).
xml string Required Raw ISO 20022 XML to validate.

ap2-iso20022 · BRIDGE

Agent mandate to bank rail.

Normalises AP2/x402 agent mandates, checks guardrails, and emits pain.001/pacs.008-ready records. Never moves money.

5 tools · v0.0.1 · captured live over MCP stdio on 2026-07-15 with uvx --from "ap2-iso20022" ap2-iso20022-mcp

normalize_ap2 Normalise a Google AP2 (Agent Payments Protocol) mandate payload into a canonical mandate the other tools accept. 1 parameter · 1 required
Parameters of normalize_ap2
Parameter Type Required Description
payload object Required An AP2 mandate payload.
normalize_x402 Normalise a Coinbase x402 (HTTP-402) payment requirement/receipt into a canonical mandate the other tools accept. 1 parameter · 1 required
Parameters of normalize_x402
Parameter Type Required Description
payload object Required An x402 payment payload.
check_mandate Guardrail a mandate before it becomes a payment: check required fields, the spending cap (amount <= max_amount), expiry (when 'as_of' is supplied), and whether an authorisation proof is present. Returns ok plus any violations and warnings. Run this before converting. 2 parameters · 1 required
Parameters of check_mandate
Parameter Type Required Description
mandate object Required A canonical mandate object (see normalize_ap2/normalize_x402 output): payer_/payee_ name+account_iban, amount, currency, plus optional reference, execution_date, max_amount, expiry, proof_type/proof_value.
as_of string, nullable Optional ISO date/datetime to evaluate expiry against.
to_pain001 Convert a canonical mandate into a pain.001 record (customer credit transfer initiation) using the exact field names pain001 expects, so it feeds straight into pain001 generate_message for wire-valid XML. 1 parameter · 1 required
Parameters of to_pain001
Parameter Type Required Description
mandate object Required A canonical mandate object (see normalize_ap2/normalize_x402 output): payer_/payee_ name+account_iban, amount, currency, plus optional reference, execution_date, max_amount, expiry, proof_type/proof_value.
to_pacs008 Convert a canonical mandate into a pacs.008 record (FI-to-FI credit transfer) using the field names pacs008 expects, for interbank settlement of an agent-authorised payment. 1 parameter · 1 required
Parameters of to_pacs008
Parameter Type Required Description
mandate object Required A canonical mandate object (see normalize_ap2/normalize_x402 output): payer_/payee_ name+account_iban, amount, currency, plus optional reference, execution_date, max_amount, expiry, proof_type/proof_value.

acmt001-mcp · ACCOUNTS

Account management.

acmt.001 account opening, maintenance and verification, validated against the bundled schema.

6 tools · v0.0.5 · captured live over MCP stdio on 2026-07-15 with uvx --from "acmt001-mcp" acmt001-mcp

list_message_types List every supported ISO 20022 acmt message type and its human name. No parameters

Use this first, before any generation or validation call, to discover the exact message_type strings this server accepts (e.g. acmt.001.001.08 Account Opening Instruction). Do not use it to fetch a type's fields or schema -- call get_required_fields or get_input_schema for that.

Returns a list of {"message_type": ..., "name": ...} dictionaries, one per supported message type (e.g. acmt.001.001.08).

This tool takes no parameters.

get_required_fields List only the required input field names for an acmt message type. 1 parameter · 1 required

Use this for a quick checklist of the mandatory columns before building account records. When you need full type/format constraints (not just which fields are required), call get_input_schema instead.

Parameters of get_required_fields
Parameter Type Required Description
message_type string Required A supported ISO 20022 acmt message type, e.g. 'acmt.001.001.08' Account Opening Instruction. Must be exactly one of: 'acmt.001.001.08', 'acmt.002.001.08', 'acmt.003.001.08', 'acmt.005.001.06', 'acmt.006.001.07', 'acmt.007.001.05', 'acmt.008.001.05', 'acmt.009.001.04', 'acmt.010.001.04', 'acmt.011.001.04', 'acmt.012.001.04', 'acmt.013.001.04', 'acmt.014.001.05', 'acmt.015.001.05', 'acmt.016.001.05', 'acmt.017.001.05', 'acmt.018.001.05', 'acmt.019.001.04', 'acmt.020.001.04', 'acmt.021.001.04', 'acmt.022.001.04', 'acmt.023.001.04', 'acmt.024.001.04', 'acmt.027.001.06', 'acmt.028.001.06', 'acmt.029.001.06', 'acmt.030.001.04', 'acmt.031.001.06', 'acmt.032.001.06', 'acmt.033.001.02', 'acmt.034.001.06', 'acmt.035.001.02', 'acmt.036.001.01', 'acmt.037.001.02' (see list_message_types). One of: acmt.001.001.08 · acmt.002.001.08 · acmt.003.001.08 · acmt.005.001.06 · acmt.006.001.07 · acmt.007.001.05 · acmt.008.001.05 · acmt.009.001.04 · acmt.010.001.04 · acmt.011.001.04 · acmt.012.001.04 · acmt.013.001.04 · acmt.014.001.05 · acmt.015.001.05 · acmt.016.001.05 · acmt.017.001.05 · acmt.018.001.05 · acmt.019.001.04 · acmt.020.001.04 · acmt.021.001.04 · acmt.022.001.04 · acmt.023.001.04 · acmt.024.001.04 · acmt.027.001.06 · acmt.028.001.06 · acmt.029.001.06 · acmt.030.001.04 · acmt.031.001.06 · acmt.032.001.06 · acmt.033.001.02 · acmt.034.001.06 · acmt.035.001.02 · acmt.036.001.01 · acmt.037.001.02.
get_input_schema Return the full JSON Schema for a message type's flat input record. 1 parameter · 1 required

Use this to learn every field, its type, and its constraints before assembling records, or to drive a form/UI. For just the required-field names use get_required_fields; to actually check records against this schema use validate_records.

Parameters of get_input_schema
Parameter Type Required Description
message_type string Required A supported ISO 20022 acmt message type, e.g. 'acmt.001.001.08' Account Opening Instruction. Must be exactly one of: 'acmt.001.001.08', 'acmt.002.001.08', 'acmt.003.001.08', 'acmt.005.001.06', 'acmt.006.001.07', 'acmt.007.001.05', 'acmt.008.001.05', 'acmt.009.001.04', 'acmt.010.001.04', 'acmt.011.001.04', 'acmt.012.001.04', 'acmt.013.001.04', 'acmt.014.001.05', 'acmt.015.001.05', 'acmt.016.001.05', 'acmt.017.001.05', 'acmt.018.001.05', 'acmt.019.001.04', 'acmt.020.001.04', 'acmt.021.001.04', 'acmt.022.001.04', 'acmt.023.001.04', 'acmt.024.001.04', 'acmt.027.001.06', 'acmt.028.001.06', 'acmt.029.001.06', 'acmt.030.001.04', 'acmt.031.001.06', 'acmt.032.001.06', 'acmt.033.001.02', 'acmt.034.001.06', 'acmt.035.001.02', 'acmt.036.001.01', 'acmt.037.001.02' (see list_message_types). One of: acmt.001.001.08 · acmt.002.001.08 · acmt.003.001.08 · acmt.005.001.06 · acmt.006.001.07 · acmt.007.001.05 · acmt.008.001.05 · acmt.009.001.04 · acmt.010.001.04 · acmt.011.001.04 · acmt.012.001.04 · acmt.013.001.04 · acmt.014.001.05 · acmt.015.001.05 · acmt.016.001.05 · acmt.017.001.05 · acmt.018.001.05 · acmt.019.001.04 · acmt.020.001.04 · acmt.021.001.04 · acmt.022.001.04 · acmt.023.001.04 · acmt.024.001.04 · acmt.027.001.06 · acmt.028.001.06 · acmt.029.001.06 · acmt.030.001.04 · acmt.031.001.06 · acmt.032.001.06 · acmt.033.001.02 · acmt.034.001.06 · acmt.035.001.02 · acmt.036.001.01 · acmt.037.001.02.
validate_records Validate flat account records against a message type's input JSON Schema. 2 parameters · 2 required

Use this before generate_message to catch structural/type errors per record and get a row-by-row error report. This checks JSON-Schema shape only; to validate a single financial identifier in isolation use validate_identifier.

Returns a report {"valid": bool, "total": int, "valid_count": int, "errors": [...]}.

Parameters of validate_records
Parameter Type Required Description
message_type string Required A supported ISO 20022 acmt message type, e.g. 'acmt.001.001.08' Account Opening Instruction. Must be exactly one of: 'acmt.001.001.08', 'acmt.002.001.08', 'acmt.003.001.08', 'acmt.005.001.06', 'acmt.006.001.07', 'acmt.007.001.05', 'acmt.008.001.05', 'acmt.009.001.04', 'acmt.010.001.04', 'acmt.011.001.04', 'acmt.012.001.04', 'acmt.013.001.04', 'acmt.014.001.05', 'acmt.015.001.05', 'acmt.016.001.05', 'acmt.017.001.05', 'acmt.018.001.05', 'acmt.019.001.04', 'acmt.020.001.04', 'acmt.021.001.04', 'acmt.022.001.04', 'acmt.023.001.04', 'acmt.024.001.04', 'acmt.027.001.06', 'acmt.028.001.06', 'acmt.029.001.06', 'acmt.030.001.04', 'acmt.031.001.06', 'acmt.032.001.06', 'acmt.033.001.02', 'acmt.034.001.06', 'acmt.035.001.02', 'acmt.036.001.01', 'acmt.037.001.02' (see list_message_types). One of: acmt.001.001.08 · acmt.002.001.08 · acmt.003.001.08 · acmt.005.001.06 · acmt.006.001.07 · acmt.007.001.05 · acmt.008.001.05 · acmt.009.001.04 · acmt.010.001.04 · acmt.011.001.04 · acmt.012.001.04 · acmt.013.001.04 · acmt.014.001.05 · acmt.015.001.05 · acmt.016.001.05 · acmt.017.001.05 · acmt.018.001.05 · acmt.019.001.04 · acmt.020.001.04 · acmt.021.001.04 · acmt.022.001.04 · acmt.023.001.04 · acmt.024.001.04 · acmt.027.001.06 · acmt.028.001.06 · acmt.029.001.06 · acmt.030.001.04 · acmt.031.001.06 · acmt.032.001.06 · acmt.033.001.02 · acmt.034.001.06 · acmt.035.001.02 · acmt.036.001.01 · acmt.037.001.02.
records array of object Required One or more flat account records, each a dict of field name -> value; validated against the message type's input JSON Schema (see get_input_schema / get_required_fields).
validate_identifier Validate a single financial identifier (IBAN, BIC, or LEI). 2 parameters · 2 required

Use this for a one-off identifier check with a clear pass/fail. To validate identifiers embedded across a whole batch of account records, prefer validate_records rather than calling this per field.

Returns {"kind": str, "value": str, "valid": bool}.

Parameters of validate_identifier
Parameter Type Required Description
kind string Required The financial identifier scheme to validate against (case-insensitive). Must be exactly one of: 'bic', 'iban', 'lei'. One of: bic · iban · lei.
value string Required The identifier value to check, e.g. an IBAN, BIC/SWIFT code, or LEI; validated according to the given kind.
generate_message Generate a validated ISO 20022 acmt XML message from in-memory records. 2 parameters · 2 required

This is the primary generation tool: pass account records you already hold in memory and receive an XSD-validated XML document; no file is written. Run validate_records first to surface record-level errors, and list_message_types to confirm the message_type string.

Returns the validated XML document as a string, or an {"error": ...} payload (serialized) if generation fails.

Parameters of generate_message
Parameter Type Required Description
message_type string Required A supported ISO 20022 acmt message type, e.g. 'acmt.001.001.08' Account Opening Instruction. Must be exactly one of: 'acmt.001.001.08', 'acmt.002.001.08', 'acmt.003.001.08', 'acmt.005.001.06', 'acmt.006.001.07', 'acmt.007.001.05', 'acmt.008.001.05', 'acmt.009.001.04', 'acmt.010.001.04', 'acmt.011.001.04', 'acmt.012.001.04', 'acmt.013.001.04', 'acmt.014.001.05', 'acmt.015.001.05', 'acmt.016.001.05', 'acmt.017.001.05', 'acmt.018.001.05', 'acmt.019.001.04', 'acmt.020.001.04', 'acmt.021.001.04', 'acmt.022.001.04', 'acmt.023.001.04', 'acmt.024.001.04', 'acmt.027.001.06', 'acmt.028.001.06', 'acmt.029.001.06', 'acmt.030.001.04', 'acmt.031.001.06', 'acmt.032.001.06', 'acmt.033.001.02', 'acmt.034.001.06', 'acmt.035.001.02', 'acmt.036.001.01', 'acmt.037.001.02' (see list_message_types). One of: acmt.001.001.08 · acmt.002.001.08 · acmt.003.001.08 · acmt.005.001.06 · acmt.006.001.07 · acmt.007.001.05 · acmt.008.001.05 · acmt.009.001.04 · acmt.010.001.04 · acmt.011.001.04 · acmt.012.001.04 · acmt.013.001.04 · acmt.014.001.05 · acmt.015.001.05 · acmt.016.001.05 · acmt.017.001.05 · acmt.018.001.05 · acmt.019.001.04 · acmt.020.001.04 · acmt.021.001.04 · acmt.022.001.04 · acmt.023.001.04 · acmt.024.001.04 · acmt.027.001.06 · acmt.028.001.06 · acmt.029.001.06 · acmt.030.001.04 · acmt.031.001.06 · acmt.032.001.06 · acmt.033.001.02 · acmt.034.001.06 · acmt.035.001.02 · acmt.036.001.01 · acmt.037.001.02.
records array of object Required One or more flat account records, each a dict of field name -> value, from which the acmt XML is generated; run validate_records first to surface record-level errors.

bankstatementparser-mcp · PARSE STATEMENTS

Legacy statements, structured.

Format detection and parsing for camt.053, pain.001, MT940, CSV, OFX and QFX statements.

5 tools · v1.28.1 · captured live over MCP stdio on 2026-07-15 with uvx --from "bankstatementparser-mcp" bankstatementparser-mcp

list_supported_formats List every bank statement format the parser can read. No parameters

This tool takes no parameters.

detect_format Detect which statement format a payload is. 2 parameters · 1 required
Parameters of detect_format
Parameter Type Required Description
content string Required
filename string Optional Default: "statement.xml".
parse_statement Parse a statement into structured transactions and a summary. 4 parameters · 1 required
Parameters of parse_statement
Parameter Type Required Description
content string Required
filename string Optional Default: "statement.xml".
format string, nullable Optional
limit integer, nullable Optional
validate_statement Check whether a statement parses cleanly (a dry run). 3 parameters · 1 required
Parameters of validate_statement
Parameter Type Required Description
content string Required
filename string Optional Default: "statement.xml".
format string, nullable Optional
summarize_statement Return only the statement summary (no per-transaction rows). 3 parameters · 1 required
Parameters of summarize_statement
Parameter Type Required Description
content string Required
filename string Optional Default: "statement.xml".
format string, nullable Optional

CONSISTENT ACROSS ALL NINE SERVERS

Same contract, every server.

JSON in; validated JSON or XSD-checked XML out; a structured error rather than an exception. Read-only, idempotent, closed-world hints so your client can reason about safety.

See the recipes · Back to the suite