MCP server: validate, format, and split IBAN bank account numbers.
Two simple tools with basic schemas and descriptions. Both tools have clear names (validate, format) starting with action verbs and concise descriptions (60-70 chars). Input schemas are present with proper type definitions. However, parameter descriptions are completely absent, the 'iban' parameter in both tools lacks any explanation of format, constraints, or examples. No output schema documentation. Error handling returns generic messages without recovery guidance. No tool annotations (readOnlyHint). The server is functional but falls short of production quality due to missing parameter documentation and lack of structured error guidance.
Format an IBAN as space-separated 4-char groups (the print convention).
Validate an IBAN: country, length, and mod-97 checksum.
Parameter 'iban' lacks description in both tools. LLMs cannot infer expected format (e.g., 'space-separated or compact', 'with or without check digits').
No output schema documented. Callers cannot predict response structure. validate() returns ValidationResult object with optional 'country' and 'reason' fields, but this is not declared in tool metadata. format() returns {formatted: string}, also undocumented.
Error messages are generic ('iban failed: ...') and do not guide recovery. E.g., 'Invalid IBAN: too short (min 5 chars). Try a complete IBAN with country code.' instead of 'iban failed: ...'
No tool annotations. Both tools are read-only and idempotent, but readOnlyHint and idempotentHint are not declared. This forces LLMs to infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Parameter constraints not documented. 'iban' parameter accepts any string, but valid IBANs have strict format (2-letter country code, 2 check digits, then alphanumeric). No enum, pattern, or minLength/maxLength constraints in schema or description.