MCP Server for Euro Pizza - browse the menu, search by ingredient, manage a cart
Euro Pizza MCP server demonstrates solid fundamentals with well-structured tool definitions and clear descriptions. All 7 tools are explicitly registered via @mcp.tool() decorators with proper type annotations and parameter descriptions. Naming follows verb_noun convention (get_menu, search, add_to_basket, etc.). Descriptions are detailed (100-300 chars) and explain WHAT and WHEN. However, output schemas are not formally documented in the code, responses are JSON-serialized but the schema structure is inferred from code logic rather than declared. Input schemas are present via Annotated type hints but lack formal JSON Schema objects. Error handling returns JSON error objects but lacks recovery guidance. Tools properly separate concerns (menu browsing, searching, basket management) and are well-composed for agent chaining. No security concerns, session_id handling is reasonable (optional param with environment fallback), no secrets exposed as params, and all tools are read-only or reversible except add_to_basket (write) which is appropriately gated.
Ajoute un produit au panier Euro Pizza (pour de vrai !). Utiliser europizza_menu ou europizza_search pour trouver les handles et SKUs. Après l'ajout, le panier mis à jour est retourné automatiquement.
Vide complètement le panier.
Liste le menu complet Euro Pizza depuis l'API LivePepper. Retourne toutes les catégories et produits avec leurs prix réels. Chaque produit a un handle (slug) et des SKUs (tailles) avec prix en centimes.
Détail complet d'un produit: description, tailles, prix, options, image.
Retire complètement un item du panier.
Recherche dans le menu par nom ou description (ingrédients). Exemples: 'chèvre', 'poulet', 'reblochon', 'saumon', 'coca'
Output schemas not formally documented. Tool responses are JSON-serialized but the response structure (fields, types, nested objects) is inferred from code logic, not declared via response schema documentation. LLMs cannot plan downstream calls or extract fields with confidence.
Error handling lacks recovery guidance. When errors occur (e.g., 'Pas de session LivePepper'), the tool returns JSON with an 'error' key but does not suggest next steps or provide actionable remediation. LLMs receive raw errors without direction.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 76 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 64 | - | v1 |
Affiche le panier actuel avec tous les items, quantités et prix.
No pagination or result limits declared. europizza_menu returns all products in a single response without specifying a cap. Large menus could generate excessive token consumption. Menu should support optional limit/offset parameters and declare a default limit (e.g., 50 items) in the description.
Input schema format uses Annotated type hints but not explicit JSON Schema objects. While Python typing is clear to developers, the MCP protocol expects JSON Schema in tool definitions for LLM interpretation. FastMCP may auto-convert, but this should be verified and documented.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. Risk classification is known (READ_ONLY, WRITE, REVERSIBLE per server comments) but not declared in tool metadata. LLMs cannot infer safety without explicit hints.