ISO 20022 payment file generation and validation server exposing tools for creating pain.001/pain.008 XML documents from payment data
Pain001 MCP server defines 5 tools with clear domain focus (ISO 20022 payment file generation). All tools have descriptions (10 - 200 chars, within baseline 34 - 392 range) and input schemas with type definitions. However, output schemas are undocumented, LLMs cannot infer what fields to expect from responses. Parameter descriptions are minimal (e.g., 'Payment rows as a list of dicts' lacks format/structure guidance). No error handling guidance, no enum constraints on message_type despite known valid values (pain.001.001.03, etc.), and no recovery hints. Tool names follow verb_noun pattern (list_, inspect_, generate_, validate_) but lack specificity, 'inspect_template' is vague; 'describe_message_type_columns' would be clearer. Missing: pagination for list_supported_versions, per-item error reporting for batch operations, and actionable error messages.
Generate validated ISO 20022 XML from inline payment rows.
Return the payment-row columns a message type expects.
List every ISO 20022 message type Pain001 can generate.
Validate payment rows against the message type's schema (dry run).
Validate rows against a payment-scheme rulebook (e.g. SEPA).
Output schemas undocumented. LLMs cannot infer response structure (fields, types, nesting). generate_payment_file likely returns XML string, but list_supported_versions structure unknown, is it array of strings, array of objects with version+description, or paginated result?
message_type parameter accepts free-form strings. Should be enum (pain.001.001.03, pain.001.002.03, pain.001.003.02, pain.008.001.08, etc.) to prevent hallucinated invalid values and guide LLM selection.
Parameter descriptions lack format/structure guidance. 'Payment rows as a list of dicts' does not specify required keys, data types, or constraints. Should document: 'Array of objects, each with keys: creditor_name (string), creditor_iban (string), debtor_name (string), debtor_iban (string), amount (decimal), currency (ISO 4217 code), etc.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
No error handling guidance. If generate_payment_file fails (invalid IBAN, missing required field, schema violation), LLM receives no recovery hint. Should return: 'Invalid IBAN in row 3: got "DE89370400440532013000". Valid format: 2-letter country code + 2 check digits + up to 30 alphanumeric. Try validate_payment_data first.'
list_supported_versions lacks pagination. If 100+ message types exist, returning all in one response wastes tokens. Should accept limit/offset and return total_count, next_cursor.