Generate and validate ISO 20022 Exceptions & Investigations (E&I) camt messages -- camt.056 Payment Cancellation Request and camt.029 Resolution of Investigation -- with an MCP server.
Four tools with clear, domain-specific names (list_*, get_*, generate_*, validate_*) and solid descriptions (100 - 200 chars). All tools have input schemas with typed parameters and descriptions. Output schemas are not explicitly documented in the visible code, which is a gap. Error handling is mentioned (XSD validation returns errors) but recovery guidance is minimal. Tool composition is good, each has one responsibility and outputs chain naturally (list_message_types → get_required_fields → generate_message → validate_xml). No security issues detected (all READ_ONLY, no secrets in params). Naming follows verb_noun convention well.
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.
Return the required top-level fields for an E&I message type.
List the supported ISO 20022 Exceptions & Investigations message types (e.g. camt.056 payment cancellation request) and their names.
Validate raw ISO 20022 XML against an E&I message type's bundled XSD; returns is_valid plus any schema errors.
Output schemas not documented. Tools return structured data (message types list, required fields, generated XML, validation result) but the response structure is not formally specified in visible code. LLMs cannot plan downstream operations without knowing what fields to expect.
generate_message parameter 'record' is typed as 'object' with only a brief description. No schema for the nested structure, what fields does 'record' require? What are their types? LLMs must guess or call get_required_fields first, adding latency.
Error handling lacks recovery guidance. validate_xml returns 'schema errors' but does not explain how to fix them or what the error structure looks like. generate_message may fail on invalid input but no guidance on how to correct it.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
No pagination or result limits documented. list_message_types returns all supported types, if the list grows large, no limit or cursor mechanism is visible. For a production tool, this risks context window exhaustion.
Tool descriptions mention 'e.g. camt.056.001.12' as an example message type. Use enum constraints or a discovery tool reference instead.