MCP server providing tools for validating and looking up company information across multiple European business registries and financial systems (BODACC, INSEE, VIES, CH IDE, IBAN, TVA)
Server demonstrates solid fundamentals: all 8 tools have clear action-verb names (search_, get_, validate_, verify_, calculate_, check_) and substantive descriptions (100-200 chars). Input schemas are present with typed parameters and descriptions. However, output schemas are not documented in the provided code, and parameter descriptions lack format constraints (e.g., SIREN must be 9 digits, SIRET 14 digits). Tool annotations (ReadOnly=true, Idempotent=true) are correctly applied. Error handling and recovery guidance are not visible in the code samples. No evidence of pagination, batch operations, or field-level chaining IDs for multi-step workflows.
Calculates the French TVA (VAT) intra-community number from a SIREN number. Formula: FR + ((12 + 3 * (siren % 97)) % 97).PadLeft(2, '0') + siren
Checks whether an EU VAT number is currently active in the VIES system. Calls the external EU VIES service with retry logic for transient errors. Results are cached.
Looks up a Swiss company by its UID number via the CH IDE (UID-WSE) API. Results are cached to reduce load.
Gets establishment information in France by SIRET number from the INSEE SIRENE API.
Searches BODACC records by SIREN or SIRET number to determine if a French company is in liquidation or has been dissolved.
Validates whether a Swiss UID number is currently registered and active in the CH IDE system. Results are cached to reduce load on the external service.
Output schemas not documented. Code shows return types (BodaccSearchResponse, ChIdeGetByUidResponse, etc.) but no visible schema definitions in provided samples. LLMs cannot plan downstream tool calls or extract required fields without knowing response structure.
Parameter descriptions lack format constraints. E.g., 'registrationNumber' says 'SIREN (9 digits) or SIRET (14 digits)' but does not enforce format in schema or validation message. 'uid' accepts 'CHE-123.456.789' or 'CHE123456789' but no regex pattern visible. Agents cannot validate input before calling.
No error handling or recovery guidance visible. Code calls external APIs (BODACC, CH IDE, INSEE, VIES) but no try-catch, timeout, or fallback logic shown. If an API fails, LLM receives no actionable error message or retry guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | 2026-07-28+ | v2 |
Validates the format of an EU VAT number locally, without calling any external service. Always responds immediately and never fails due to external unavailability.
Verifies an IBAN locally using country length rules and MOD-97, then attempts to resolve the BIC from a local lookup table and external provider if necessary as a fallback.
No tool composition or chaining support. Tools return company/validation data but no evidence of IDs or references needed for follow-up calls. E.g., if search_bodacc_records returns a company, what ID does a follow-up tool need?
Caching mentioned in descriptions (CH IDE, VIES) but no cache invalidation, TTL, or staleness warnings documented. Agents may receive stale data without knowing it.