Skip to main content
Glama
techybiky

swift-iso20022-mcp

by techybiky

swift-iso20022-mcp

An MCP (Model Context Protocol) server that gives any AI agent — Claude, ChatGPT, Cursor, Windsurf, or any other MCP-compatible client, local or remote — tools to validate SWIFT MT and ISO 20022 MX payment messages, check BIC/IBAN correctness, and map between MT and MX formats, without the agent hallucinating message-format rules.

Built from real SWIFT MT/ISO 20022 test-automation experience in banking and payments (SWIFT MT/MX, ACH, SEPA, RTGS, FEDWIRE).

Why this exists

Generic AI agents get SWIFT/ISO 20022 formatting wrong constantly — mandatory fields, BIC shape, IBAN checksums, charges codes, and (as of the SWIFT CBPR+ milestone in November 2026) structured vs. unstructured postal addresses. This server gives an agent ground truth instead of a guess.

Related MCP server: camt053-mcp

Two transports — this is what makes it "universal"

MCP itself is the cross-vendor standard (Anthropic, OpenAI, Google, and Microsoft all support it), but a server still has to expose the right transport to be reachable by every kind of client:

Transport

Entrypoint

Who connects this way

stdio

src/index.js

Local clients that spawn your process directly: Claude Desktop, Cursor, Windsurf, Cline

Streamable HTTP

src/http-server.js

Remote clients that connect over a URL: hosted connectors, web-based agents, anything that can't spawn a local process

Same tools, same logic (src/server-factory.js is shared by both) — only the wire format differs. Run whichever one matches where you want to be reachable, or both at once on different machines.

Tools exposed

Tool

What it does

validate_mt_message

Validates an MT103 or MT202 message body: mandatory fields, date/currency/amount format, BIC shape, IBAN checksum, charges code

validate_mx_message

Validates a pacs.008/pacs.009 XML message: MsgId presence, currency shape, BICFI validity, IBAN checksum, unstructured-address warning

validate_bic

Structural BIC/SWIFT code check (8 or 11 chars)

validate_iban

IBAN shape + ISO 7064 mod-97 checksum

convert_mt103_to_pacs008

Maps MT103 fields to pacs.008 (customer credit transfer, has Dbtr/Cdtr)

convert_mt202_to_pacs009

Maps MT202 fields to pacs.009 (bank-to-bank transfer, has InstgAgt/InstdAgt BICs instead of customer parties)

convert_pacs008_to_mt103

Reverse direction: maps pacs.008 XML back to MT103 field tags, for coexistence-period systems that still expect MT

Install & test

cd swift-mcp
npm install

There are three ways to verify it works, in order of speed:

1. Unit tests — checks the logic in isolation

npm test

Runs 18 assertions against swift-core.js directly. No MCP protocol involved — fastest signal that the validation/mapping logic is correct.

2. Manual protocol test — checks the stdio server

npm run test:manual

Spawns the actual stdio server and talks to it over real JSON-RPC (the same transport Claude Desktop uses), calling all 7 tools with realistic data.

You can also inspect either transport interactively with the official MCP Inspector:

npx @modelcontextprotocol/inspector node src/index.js

3. Manual test for the HTTP transport

npm run start:http
# in another terminal:
curl http://localhost:3000/health
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"validate_bic","arguments":{"bic":"DEUTDEFF"}}}'

4. Live test in a real client

Add the config below for whichever client you're using, and try prompts like:

"Validate this MT103: :20:REF123...\n:23B:CRED\n:32A:250115USD1000,00..." "Is DE89370400440532013000 a valid IBAN?" "Convert this MT202 to pacs.009: ..."

Watch for the tool-use block in the client's UI — that confirms it's calling your server instead of guessing.

Connect it — local clients (stdio)

Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "swift-iso20022": {
      "command": "node",
      "args": ["/absolute/path/to/swift-mcp/src/index.js"]
    }
  }
}

Cursor, Windsurf, and Cline use the same shape in their own MCP config files — just the command/args pair pointing at src/index.js.

Connect it — remote clients (Streamable HTTP)

Run the HTTP server:

npm run start:http    # listens on PORT env var, default 3000

Deploy it anywhere Node.js runs — Render, Railway, Fly.io, a VPS — and point any HTTP-based MCP client at:

https://your-deployed-host/mcp

Securing the public endpoint

Set MCP_API_KEY in the deployment environment to require a bearer token on every request. If it's unset, the endpoint stays open (fine for local/manual testing, not for a public deploy):

MCP_API_KEY=your-secret-key npm run start:http

Clients must then send:

Authorization: Bearer your-secret-key

This is what lets a client that can't spawn a local process (a hosted connector, a web app, a teammate who doesn't have your code checked out) reach the same tools. It runs statelessly — every request gets a fresh server instance, so there's no session state to lose on a restart, which also makes it trivial to run on serverless platforms.

Roadmap (next steps if you take this further)

  • MT202 -> pacs.009 mapping

  • Reverse MX -> MT mapping (pacs.008 -> MT103)

  • Streamable HTTP transport for remote/universal access

  • Reverse pacs.009 -> MT202 mapping (currently only pacs.008 -> MT103 exists)

  • Full XSD schema validation for MX messages (current MX check is structural, not schema-complete)

  • Auth (API key) on the HTTP endpoint via MCP_API_KEY — optional, off by default for local testing

  • Publish to npm as @bikramdas1/swift-iso20022-mcp so it can be installed with npx

  • Submit to the MCP server directory / registry once it has real usage

  • Wire this same src/swift-core.js logic into Coexist as a shared package, so the SaaS UI and the MCP server never drift apart

License

MIT

Available Tools

7 tools
convert_mt103_to_pacs008Convert MT103 to pacs.008 fieldsA

Parses a SWIFT MT103 message and maps its fields to the equivalent ISO 20022 pacs.008 fields (MsgId, IntrBkSttlmDt, IntrBkSttlmAmt, Ccy, ChrgBr, Dbtr/Cdtr name and account). Returns a simplified field map plus notes on anything that couldn't be confidently mapped — not a full XML generator, intended for agents that need a quick MT-to-MX field bridge.

ParametersJSON Schema
NameRequiredDescriptionDefault
raw_messageYesThe raw MT103 message body

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full transparency burden. It discloses that the output is a 'simplified field map plus notes on anything that couldn't be confidently mapped', setting honest expectations about output fidelity and partial mapping. It also discloses the scope limitation (not a full XML generator). This is solid behavioral disclosure, though it doesn't cover edge cases like malformed input handling or base64 requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-constructed sentence that front-loads the core action, enumerates mapped fields, discloses limitations, and notes intended use—all without redundancy. Slightly dense but efficient; no wasted words. Could arguably be split for readability, but it earns a 4 for packing value without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given it has only 1 parameter with 100% schema coverage, no output schema, and no annotations, the description provides a good overview: input type, mapped fields, output shape ('simplified field map plus notes'), and scope boundaries. It's reasonably complete for a low-complexity tool. Minor gaps include no mention of error behavior on malformed input or character encoding considerations, but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with only one 'raw_message' parameter described well ('The raw MT103 message body'). Although the description repeats that it parses an MT103, it adds context by implicitly framing the parameter as the raw message needing parsing. With a single self-explanatory parameter at full coverage, there's little additional semantic burden on the description to carry. A 4 is appropriate since the description contextually supports what the parameter represents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Parses'), resource ('SWIFT MT103 message'), and result ('maps its fields to the equivalent ISO 20022 pacs.008 fields'). It enumerates the specific fields mapped (MsgId, IntrBkSttlmDt, IntrBkSttlmAmt, Ccy, ChrgBr, Dbtr/Cdtr name and account), distinguishing it from sibling tools like convert_mt202_to_pacs009 and convert_pacs008_to_mt103 (reverse direction).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states what the tool does NOT do ('not a full XML generator') and its intended use case ('intended for agents that need a quick MT-to-MX field bridge'), which helps an agent decide when this is appropriate vs alternatives. However, it doesn't explicitly name sibling alternatives or state when-not-to-use conditions (e.g., when full XML output is needed).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_mt202_to_pacs009Convert MT202 to pacs.009 fieldsA

Parses a SWIFT MT202 (General Financial Institution Transfer) message and maps its fields to the equivalent ISO 20022 pacs.009 fields (MsgId, EndToEndId, IntrBkSttlmDt, IntrBkSttlmAmt, Ccy, InstgAgt/InstdAgt/IntrmyAgt1 BICs). Unlike MT103, MT202 moves money bank-to-bank so there is no customer-level Dbtr/Cdtr — only institution BICs. Returns notes on anything not confidently mapped.

ParametersJSON Schema
NameRequiredDescriptionDefault
raw_messageYesThe raw MT202 message body

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses that the tool 'returns notes on anything not confidently mapped,' which is valuable transparency about output behavior. It clarifies the semantics of what MT202 maps (institution BICs only, no Dbtr/Cdtr) which helps the agent understand edge cases. It doesn't mention error behavior or input validation requirements, but the core mapping behavior and its limitations (unmappable fields) are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two well-structured sentences that cover purpose, field mapping, the MT103 contrast, and the 'notes' return behavior. It's front-loaded with the primary action and resource. Slightly long but each component earns its place; no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 1 param, 100% schema coverage, and no output schema, the description provides strong context: what it maps, which fields, how it differs from MT103, and what it returns with unmappable data. For a single-input, mapping-type tool, this is reasonably complete. It could mention the output format (JSON structure of returned notes) but the essential context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (1 param fully described: 'The raw MT202 message body'), so the schema does the heavy lifting. The description's mention of 'Parses a SWIFT MT202' implies the input is a raw message body matching the schema's description. The description adds little beyond the schema for the single parameter, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('parses', 'maps') and specific resources (MT202 message → pacs.009 fields), and explicitly lists the target fields (MsgId, EndToEndId, IntrBkSttlmDt, etc.). It also distinguishes itself from sibling tools by contrasting MT202 vs MT103 and noting the absence of customer-level Dbtr/Cdtr in MT202. This is a specific, well-differentiated purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains when this tool is appropriate (bank-to-bank transfers where only institution BICs exist) and explicitly contrasts with MT103, implying the alternative convert_mt103_to_pacs008 tool is for customer-level data. It doesn't formally state 'use X instead when Y', but the behavioral contrast between MT103 and MT202 gives clear context. A dedicated when-not-to-use statement would push to 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_pacs008_to_mt103Convert pacs.008 to MT103 fields (reverse mapping)A

Parses an ISO 20022 pacs.008 XML message and maps its fields back to SWIFT MT103 field tags (:20:, :23B:, :32A:, :50K:, :59:, :71A:). Useful during the SWIFT MT/MX coexistence period when a downstream system still expects MT format. Deliberately conservative — only maps fields it can extract with confidence and flags the rest in the notes array rather than guessing.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlYesThe raw pacs.008 message as XML text

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure — and it delivers. It explicitly states the tool is 'deliberately conservative,' only maps fields it can extract 'with confidence,' and 'flags the rest in the notes array rather than guessing.' This is excellent disclosure of a safety-critical behavioral trait (no hallucinated mappings) that strongly aids agent decision-making.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact three-sentence block that efficiently covers purpose, use case, and behavioral traits. There is minimal waste. A small deduction because field tags enumeration and the behavior notes could arguably be trimmed, but overall this is tight and front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter conversion tool with no output schema, the description is reasonably complete. It covers what input is accepted, the direction of conversion, the use case, and the conservative mapping behavior. It doesn't explicitly describe the return shape (only mentions 'notes array' indirectly), but given no output schema and one param, this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (the single 'xml' parameter is fully documented as 'The raw pacs.008 message as XML text'), which sets the baseline at 3. The description adds meaningful context by clarifying the XML must be an ISO 20022 pacs.008 format message and that parsing is conservative, which helps the agent understand what input is expected. Slight bonus for this enrichment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (parses/maps), the resource (ISO 20022 pacs.008 XML), and the target output (SWIFT MT103 field tags). It enumerates the specific field tags being produced, which directly distinguishes it from sibling tools like convert_mt103_to_pacs008 (reverse direction) and convert_mt202_to_pacs009 (different message type).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for when to use: 'during the SWIFT MT/MX coexistence period when a downstream system still expects MT format.' This establishes the use case but doesn't explicitly name alternatives or state when NOT to use it. The sibling names imply the reverse mapping alternative, but the description doesn't explicitly reference it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_bicValidate BIC/SWIFT codeA

Checks whether a string is a structurally valid BIC (8 or 11 characters: 4-letter bank code, 2-letter country code, 2-char location code, optional 3-char branch code).

ParametersJSON Schema
NameRequiredDescriptionDefault
bicYesThe BIC/SWIFT code to validate, e.g. DEUTDEFF or DEUTDEFF500

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states it checks 'structural' validity, which conveys that it does not verify existence or authenticity. It also provides the exact character layout, adding behavioral detail beyond just 'validates BIC'. However, it does not mention return value format or case sensitivity, which are minor gaps given no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately says what the tool does, followed by the structural rule. Every word earns its place, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter validator with no output schema, the description provides sufficient context: the purpose, the accepted format, and implicit return behavior. It is fully complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the 'bic' parameter with examples, and the description adds the full structural breakdown (4-letter bank, 2-letter country, etc.), giving semantic richness beyond the schema. With 100% schema coverage, this added detail lifts it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Checks whether' plus the resource 'BIC/SWIFT code' and clearly defines the valid structure (8 or 11 characters with bank/country/location/branch codes). This distinguishes it from sibling validators like validate_iban and validate_mt_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates the tool's scope (BIC validation) through the title and format explanation, giving clear context for when to use it. It does not explicitly name alternatives or exclusion criteria, but the self-contained nature of the tool makes the intended use obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_ibanValidate IBANA

Checks whether a string is a structurally valid IBAN and passes the ISO 7064 mod-97 checksum.

ParametersJSON Schema
NameRequiredDescriptionDefault
ibanYesThe IBAN to validate, e.g. GB29NWBK60161331926819

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool is a validation/read operation ('Checks whether') which is a non-destructive check. However, it doesn't disclose what the return value looks like (boolean? result object?), error behaviors for malformed input, or any edge-case behavior. It's adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One efficient sentence communicates the full purpose: what is checked (structural validity) and the specific algorithm (ISO 7064 mod-97 checksum). Zero wasted words, no redundancy with the schema. The example in the schema complements this nicely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has minimal complexity (1 param) and 100% schema coverage, so the description is reasonably complete. However, with no annotations and no output schema, the description doesn't explain return semantics — whether it returns a boolean, a status object with error messages, or whether it throws on invalid input. For a validation tool, return-format expectations matter significantly to an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — the schema already documents the single iban parameter with a concrete example ('GB29NWBK60161331926819'). The description adds that the IBAN must be validated for structural validity and mod-97 checksum, which reinforces the parameter's semantic usage. At 100% schema coverage, baseline 3 is appropriate and the description meets it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Checks whether a string is a structurally valid IBAN') and clearly specifies what the tool verifies: structural validity AND the ISO 7064 mod-97 checksum. It distinguishes from siblings, which all deal with MT/PACS message conversions/formats, whereas this handles IBAN validation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (to validate an IBAN), which is reasonably clear given the domain context. However, it doesn't explicitly state when NOT to use it or name alternatives, and there's no guidance on what the function returns beyond stating it performs a check. No exclusions or alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_mt_messageValidate SWIFT MT messageA

Validates a SWIFT MT103 (customer credit transfer) or MT202 (FI transfer) message body against mandatory-field rules, field-format rules (dates, currency, BIC, charges code), and IBAN checksums. Use this before submitting or forwarding an MT message, or when an agent needs to check a message it generated or received is well-formed.

ParametersJSON Schema
NameRequiredDescriptionDefault
raw_messageYesThe raw MT message body with SWIFT field tags, e.g. ':20:REF123\n:23B:CRED\n:32A:...'
message_typeYesThe MT message type, e.g. MT103 or MT202

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of disclosure. The description enumerates rule categories (mandatory fields, format rules, IBAN checksums) which surfaces behavioral scope. However, it does not disclose what happens on validation failure (return format, error granularity), whether it only checks or also modifies anything, or whether there are rate/input-size limits. Given zero annotations, this leaves notable gaps but the rule catalog is genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero wasted words. Front-loads the purpose and scope immediately, then gives concrete usage context. The sentence about rules is dense but every clause contributes information. No redundancy with larger framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has moderate complexity (two message types, multiple validation rule categories, 2 simple parameters, no output schema). The description covers purpose, scope, what's validated, and when to use it. It doesn't describe the return/result format, but without an output schema the agent may need to know what 'validated' returns. Still, given the 2-param surface and clear rule enumeration, it's adequately complete for selection purposes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with helpful descriptions for both parameters (message_type with enum, raw_message with example format ':20:REF123\n:23B:CRED\n:32A:...'). The description adds that message_type supports only MT103/MT202 (consistent with schema enum) and clarifies raw_message is a 'body' with field tags, reinforcing the schema. With full schema coverage, this is solid; the description complements rather than repeats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states specific verbs ('Validates') and resources (SWIFT MT103/MT202 message bodies), enumerating exactly what is validated: mandatory-field rules, field-format rules for dates/currency/BIC/charges code, and IBAN checksums. It distinguishes from sibling validation tool 'validate_iban' by being the message-level validator rather than the single-IBAN validator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: 'Use this before submitting or forwarding an MT message, or when an agent needs to check a message it generated or received is well-formed.' This clearly establishes when to invoke the tool. While it doesn't name an explicit alternative for when NOT to use it, the sibling list and the specific scope (MT103/MT202 only) implicitly communicate boundaries, and the example check scenario is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_mx_messageValidate ISO 20022 MX messageA

Validates an ISO 20022 MX message (pacs.008 or pacs.009 XML) for structural issues: missing MsgId, malformed currency codes, invalid BICFI values, invalid IBAN checksums, and unstructured-address usage flagged against SWIFT's November 2026 CBPR+ structured-address requirement. Not a full XSD validator — use for a fast pre-check before schema validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlYesThe raw MX message as XML text
message_typeYesThe ISO 20022 message type

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the specific validation checks, the limitation of not being an XSD validator, and the CBPR+ 2026 rule. However, it does not describe the return format (e.g., list of issues vs pass/fail) or any other operational behavior, leaving a minor transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, then a concise list of checks, and a valuable caveat. No filler or redundancy; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly covers the tool's scope, exceptions, and practical usage context, which is strong for a 2-parameter validator. However, since there is no output schema, it would be more complete if it hinted at the return type (e.g., list of errors, boolean). This minor omission prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%—both message_type and xml have descriptive schema entries. The description adds no new parameter-level details beyond restating the message types (pacs.008, pacs.009) already present in the enum. It meets the baseline for full schema coverage but does not elevate it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates ISO 20022 MX messages (pacs.008 or pacs.009) and lists specific structural issues checked, distinguishing it from sibling MT validation tools. It uses a specific verb ('validates') and resource ('ISO 20022 MX message'), and the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Not a full XSD validator — use for a fast pre-check before schema validation', providing both a when-to-use and a when-not-to-use. The focus on MX vs MT and the listed checks give clear context for when this tool is appropriate relative to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedconvert_mt103_to_pacs008
    • First observedconvert_mt202_to_pacs009
    • First observedconvert_pacs008_to_mt103
    • First observedvalidate_bic
    • First observedvalidate_iban
    • First observedvalidate_mt_message
    • First observedvalidate_mx_message

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: validation of MT messages, MX messages, IBANs, and BICs, plus three specific conversion paths. There is no overlap between tools—even the two validation tools clearly separate MT and MX formats, and each conversion tool names its exact source and destination.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: validate_* for validations and convert_*_to_* for conversions. The naming is entirely snake_case and predictable, making it easy to infer a tool's purpose from its name.

Tool Count5/5

Seven tools is an appropriate size for a specialized SWIFT MT/MX message-processing server. Each tool covers a distinct validation or conversion need without redundancy, and the count feels neither thin nor overly heavy.

Completeness3/5

The validation coverage is complete for both MT and MX messages, and conversion paths exist for MT103->pacs.008 and MT202->pacs.009. However, the reverse conversion for MT202 (pacs.009->MT202) is missing, while the MT103 reverse path is included—creating an asymmetry that could dead-end agents.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that gives AI agents deterministic, verified access to ISO 8583 field specs, MTI decoding, jPOS packager XML generation, deploy descriptor validation, message building, and jPOS documentation search.
    7
    4
    MIT
  • F
    license
    A
    quality
    A
    maintenance
    MCP server that enables AI agents to parse, validate, and reverse ISO 20022 bank statements, with tools for discovering message types and return reasons.
    24
    1
    -
  • F
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol server that exposes the pain001 ISO 20022 Customer Credit Transfer Initiation library as agent tools, enabling AI assistants to generate and validate standardized payment XML messages.
    17
    1
    -
  • F
    license
    A
    quality
    A
    maintenance
    An MCP server that exposes the pacs008 ISO 20022 FI-to-FI Customer Credit Transfer library as tools for AI agents and assistants, enabling generation, validation, and parsing of pacs.008 credit transfer XML messages.
    16
    1
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/techybiky/swift_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server