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
search
Search the ISO 20022 catalogue by use-case, message type or keyword (e.g. 'reconciliation', 'make a payment', 'pacs.008') and get the matching message types, their family, and which package provides them.
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string | Optional | Use-case, message type or keyword. Empty = all. |
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.
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.
This tool takes no parameters.
describe
Describe a message type: its required fields and input JSON Schema, resolved from the family's backing server.
| 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.
| 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.
| 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.
| 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.
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.
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.
| 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.
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.
| 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.
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": [...]}.
| 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).
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).
| 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.
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.
| 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.
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.
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.
| 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.
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.
| 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.
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.
| 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.
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.
| 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.
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.
| 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).
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.
| 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.
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.
| 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.
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.
| 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.
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.
| 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.
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.).
| 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.
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.
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.
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.
| 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.
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.
| 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.
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.
| 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.
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": [...]}.
| 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.
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": [...]}.
| 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.
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.
| 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.
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}.
| 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.
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.
| 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.
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.
| 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.
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.
| 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.
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.
| 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.
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.
| 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.
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.
| 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.
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.
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.
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.
| 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.
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.
| 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.
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": [...]}.
| 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).
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}.
| 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.
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.
| 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.
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).
| 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.
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).
| 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.
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).
| 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.
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).
| 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.
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.
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.
| 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.
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.
| 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.
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.
| 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.
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.
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.
| 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.
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.
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.
| 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.
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.
| 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.
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.
| 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.
| 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.
| 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'.
| 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'.
| 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.
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.
| 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.
| 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.
This tool takes no parameters.
get_required_fields
Return the required top-level fields for an E&I message type.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
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.
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.
| 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.
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.
| 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.
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": [...]}.
| 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).
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}.
| 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.
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.
| 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.
This tool takes no parameters.
detect_format
Detect which statement format a payload is.
| Parameter | Type | Required | Description |
|---|---|---|---|
content |
string | Required | |
filename |
string | Optional | Default: "statement.xml". |
parse_statement
Parse a statement into structured transactions and a summary.
| 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).
| 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).
| 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.