What MCP now understands about bank transaction codes

Open a bank statement message — a camt.052, camt.053, or camt.054 — and every entry on it carries a BankTransactionCodeStructure: a compact classification of what kind of transaction it actually is. A SEPA credit transfer, an ACH debit, a card settlement, a standing order — each gets a specific code, not a free-text description. That classification scheme, the Bank Transaction Code (BTC) hierarchy, is maintained separately from the core ISO 20022 specification, and it’s now something our MCP server can resolve directly.

A three-level hierarchy

BTC codes aren’t one flat list — they’re three levels deep, and not every combination of levels is valid. A code is a Domain (the broad area — Payments, Securities, Foreign Exchange), narrowed to a Family within that Domain, narrowed again to a Sub-Family. The registry we’ve embedded covers all of it: 11 Domains, 104 Families, 284 Sub-Families, and 1,567 valid Domain/Family/ Sub-Family combinations — parsed directly from the ISO 20022 Registration Authority’s own codification spreadsheet.

The 11 Domains give a sense of the breadth involved:

Code Domain
ACMT Account Management
CAMT Cash Management
CMDT Commodities
DERV Derivatives
FORX Foreign Exchange
LDAS Loans, Deposits & Syndications
PMNT Payments
PMET Precious Metal
SECU Securities
TRAD Trade Services
XTND Extended Domain

A concrete example

PMNT (Payments) alone breaks into 19 Families — everything from issued cheques to card transactions to standing orders. Drill into its RCDT Family (Received Credit Transfers) and you land on 41 Sub-Families, and this is where the codes get genuinely recognizable if you’ve ever read a bank statement closely:

Code Sub-Family
ESCT SEPA Credit Transfer
ACDT ACH Credit
SDVA Same Day Value Credit Transfer
SALA Payroll/Salary Payment
STDO Standing Order
XBCT Cross-Border Credit Transfer
BOOK Internal Book Transfer

That’s the level of specificity BTC actually operates at — ESCT isn’t “a credit transfer,” it’s specifically a SEPA one; SDVA tells you same-day value was involved. It’s what lets downstream systems classify statement entries automatically instead of parsing free-text narrative.

How to explore it

It follows the same drill-down pattern as our other reference documents — three calls, each narrowing the path by one level:

get_reference_data("Bank Transaction Codes")              → lists all 11 Domains
get_reference_data("Bank Transaction Codes", "CAMT")       → lists Families in Cash Management
get_reference_data("Bank Transaction Codes", "CAMT/MCOP")  → lists Sub-Families for that Domain+Family

Sub-Family is the deepest level — what you get back at that point is the complete, authoritative list of valid combinations for that specific Domain/Family pair, not a guess. As always, get_reference_data("__status__") shows the registry’s current version alongside our other reference documents.