ISO 20022 doesn’t force every code in a message into a fixed, standard list. In a handful of specific places, it deliberately leaves the door open for a market infrastructure, a central securities depository, or an industry body to define its own proprietary codes instead. That mechanism is called a Data Source Scheme (DSS), and it’s tracked in its own registry by the ISO 20022 Registration Authority — separate from the main specification, and until now, separate from what our MCP server could tell you.
That’s changed. The MCP server now embeds the DSS registry directly and can answer, for a given context, exactly who’s allowed to issue proprietary codes there.
Why this matters
If you’re parsing an ISO 20022 message and hit a GenericIdentification field carrying something
like ECLR or DIFX — a code that clearly isn’t from a standard ISO code set — the DSS registry
is how you find out it isn’t a typo or an error. It’s a proprietary code, and the registry tells
you which organization is authorized to define codes in that particular slot, so you know whose
documentation to go find for the actual meaning of the value itself. (The DSS registry records
who’s allowed to issue codes where — not the code values themselves; those are maintained
separately by each issuer.)
What you can resolve now
The registry is organized by context — the specific spot in the message model where proprietary codes are permitted — and each context lists every issuer registered for it. A few examples, straight from the current registry (version 2025-12-12):
Long Number Identification (coupon, pool, lot numbers on a financial instrument) has 6 registered issuers, including exchanges and depositories you’d actually recognize:
| Issuer | Description | Country |
|---|---|---|
| XSWX | Swiss Exchange | CH |
| XVTX | Virt-x | GB |
| GCSD | Granite Central Securities Depository | ZA |
| STRA | Strate Limited | ZA |
| SMPG | Securities Market Practice Group | Global |
| REGL | Securities Market Practice Group | Global |
Proprietary Party identification is the largest context in the registry — 114 issuers, spanning national bank codes, central securities depositories, and exchanges worldwide:
| Issuer | Description | Country |
|---|---|---|
| DIFX | Dubai International Financial Exchange Ltd. | AE |
| ATAT | Austrian Bankleitzahl | AT |
| ACLR | Austraclear Limited | AU |
| ECLR | Euroclear Bank | BE |
| CAVL | Caja de Valores S.A. | AR |
Beyond those two, the registry covers 9 more contexts — proprietary indicator codes (52 issuers), reason codes (26), status codes (16), account types (17), place codes, quantity types, and a couple of narrower ones — 11 contexts in total, all drillable the same way.
How to explore it
It’s part of the same drill-down interface as our other supplementary reference documents:
get_reference_data("Data Source Schemes") → lists all 11 contexts
get_reference_data("Data Source Schemes", "Long Number Identification") → lists issuers for that context
Partial context names match, so you don’t need the full string verbatim — enough to disambiguate is
enough. Ask get_reference_data("__status__") at any time to see the registry’s current version
alongside our other reference documents.
This registry, like the rest of what our MCP server serves, is kept current against the source ISO 20022 publishes — not a stale copy from whenever we first built the feature.