MCP server exposing DouaneCode customs code search (HS/NC8/TARIC) to AI agents
DouaneCode MCP has well-structured tool definitions with clear naming (verb_noun pattern: search_, get_), comprehensive parameter descriptions, and proper input schemas. All 4 tools follow consistent patterns. However, output schemas are not documented, LLMs cannot predict response structure for planning. Parameter descriptions are strong (60-80 chars avg), but lack explicit constraints (enums, ranges, patterns). Error handling is present but generic; recovery guidance is minimal. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only. Missing pagination guidance for search_customs_code despite potentially large result sets.
Retourne le détail d'un code douanier : libellés, hiérarchie, unités, et informations de classement.
Retourne les taux de droits de douane et mesures applicables à un code (droits tiers, préférences, restrictions).
Liste les changements tarifaires récents (nomenclature, taux, mesures) — utile pour la veille réglementaire douanière.
Trouve les codes douaniers (HS/NC8/TARIC) correspondant à une description de produit en langage naturel.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting) for downstream planning or data extraction. Increases hallucination risk when chaining tools.
Parameter constraints not formalized. 'limit' accepts 1-100 but no min/max in schema; 'chapter' is 2-digit SH code but no pattern/enum; 'code' is 4-10 digits but no regex. LLMs may pass invalid values; validation happens server-side only.
No tool annotations despite all tools being read-only. Missing readOnlyHint annotation prevents clients from optimizing caching, retry logic, or safety checks. Idempotent tools should declare idempotentHint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Error handling lacks recovery guidance. DouaneCodeError exceptions (API key missing, rate limit, auth failure) are raised but no actionable next steps provided to LLM. E.g., 'rate limit reached' should suggest 'upgrade plan' or 'retry in N hours'.
search_customs_code returns up to 100 results but no pagination (offset/cursor) or total count documented. Large result sets risk context window exhaustion; LLM cannot iterate through results efficiently.