MCP server providing access to the French e-phy phytosanitary products catalog
5 tools with clear naming (verb_noun pattern), good descriptions (110-188 chars average), and complete Zod schemas with proper type constraints. Descriptions are contextual and explain what the tool does, when to use it. All parameters have types and descriptions. Output schemas are documented (returned as JSON text). Error handling is basic but present (e.g., 'No product found' message in get_product_by_amm). Main gaps: no error recovery guidance, no explicit enumeration constraints where applicable, no tool annotations (readOnlyHint), and responses are JSON-serialized text rather than structured content blocks. Tools are well-composed with clear chaining: search_products/get_product_by_amm → get_product_details/get_product_usages. All tools are read-only (safe to retry). No security issues detected (no secrets in params, no dangerous defaults). Naming is clear and consistent (verb_noun, domain-specific). Parameter defaults (page=1) are sensible.
Get a phytosanitary product from the e-phy catalog by its AMM (Autorisation de Mise sur le Marché) number.
Get detailed information about a phytosanitary product by its internal e-phy ID. Use search_products or get_product_by_amm first to find the ID.
Get the authorized usages (crops and pests/diseases) for a phytosanitary product, including dosage, application conditions, and safety requirements.
Search active substances (matières actives) in the e-phy catalog, including their approval status and expiration date.
Search phytosanitary products in the French e-phy catalog (pesticides, fertilizers, etc.). Returns product names, AMM numbers, status, and holder information.
Output is JSON-serialized text in a single content block, not structured typed fields. LLMs must parse JSON strings rather than accessing fields directly. This wastes tokens and reduces extraction reliability.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only and safe to retry, but this is not declared in the schema, forcing LLMs to infer safety from descriptions.
Error responses lack recovery guidance. 'No product found with AMM number X' tells the agent a product doesn't exist, but doesn't suggest next steps (e.g., 'Try searching by product name with search_products').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
Parameter constraints could be stronger. 'search' in search_products and search_active_substances accept any string with no format validation or length limits. Description could state max length and acceptable content types (product names, numbers, etc.).
No per-item failure reporting in paginated results. If search_products returns 20 items but one failed to fetch during aggregation, the tool returns silence (only success case shown). Agents cannot distinguish partial failure from complete success.