EU VIES VAT-number validation MCP (European Commission).
Two well-named, focused tools with clear descriptions and complete input schemas. check_vat and service_status follow verb_noun naming convention. Descriptions are detailed (180 - 220 chars) and explain WHEN to use each tool and how to interpret results. Input schemas are properly typed with required fields and parameter descriptions. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is implicit (relies on VIES API errors) rather than explicit recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite both being read-only operations.
Validate an EU VAT number against VIES. Returns whether the number is a valid/registered EU VAT registration, plus the registered name and address when the member state publishes them (many states return "---" or empty even for valid numbers). A false result means not registered/invalid. If the national service is temporarily down, userError is MS_UNAVAILABLE/MS_MAX_CONCURRENT_REQ etc. — treat that as "could not check", not "invalid".
List all EU member states and whether each national VAT-checking service is currently Available or Unavailable, plus overall VIES (VoW) availability. Use this before/after a failed check_vat to tell a temporary national outage apart from a genuinely invalid VAT number.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for check_vat or service_status. This breaks tool chaining and forces agents to guess at response shape.
No tool annotations. Both tools are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations. This prevents agents from optimizing retry logic and caching strategies.
Error recovery guidance missing. check_vat description mentions MS_UNAVAILABLE and MS_MAX_CONCURRENT_REQ but does not guide LLM on recovery actions (retry, call service_status, etc.). Agents lack actionable next steps on failure.
No pagination or result limits documented. service_status returns all EU member states; if response is large, no guidance on truncation or pagination. check_vat returns single record but output structure is opaque.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |