MCP server for a restaurant management system with role-based access control. Provides tools for menu browsing, order management, sales reporting, and daily special drafting.
Restaurant-agent has well-structured tool definitions with complete JSON schemas and clear descriptions. All 7 tools have proper input schemas with type constraints (enums, patterns, required fields). Descriptions are concise and role-annotated (viewer+, staff+, manager only). However, parameter descriptions are minimal or absent, most params lack explanatory text beyond their names. Output schemas are not documented, forcing LLMs to infer response structure. Error handling is basic (JSON error objects) but lacks recovery guidance. Tool composition is sound (single responsibility, clear naming), but missing parameter-level documentation and output schema documentation limits LLM reasoning quality.
(staff+) Propose a daily special. The draft is saved locally with status "pending_human_approval" for a human to review — nothing is published automatically.
(staff+) Get active orders (code, table, items, status, placed_at), optionally filtered by status.
(viewer+) Get the full menu: categories with items (id, name, description, price_eur, allergens) and the allergen code legend.
(viewer+) Get weekly opening hours plus holiday exceptions.
(manager only) Get per-day sales totals (orders_count, revenue_eur, top_items) for an inclusive date range.
(viewer+) Get today's lunch special with price, serving window, and included items.
Parameter descriptions missing or minimal. 'query', 'category', 'excludeAllergens' in search_menu_items lack explanatory text. 'status' enum in get_active_orders has no description. LLMs cannot infer parameter semantics from names alone.
Output schemas not documented. Tools return JSON objects (menu categories, orders, sales data) but LLMs have no schema reference. Forces LLMs to infer response structure, risking field extraction errors.
Error handling lacks recovery guidance. Server returns JSON with 'allowed: false' and 'error' field, but does not suggest next steps (e.g., 'Try with viewer+ role' or 'Call search_menu_items first'). Agents cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
(viewer+) Search menu items by query, category, and allergen exclusions.
Date parameter in get_sales_summary uses regex pattern '^\d{4}-\d{2}-\d{2}$' but description only says 'must be an ISO date (YYYY-MM-DD)'. No guidance on inclusive/exclusive bounds or valid date ranges (e.g., past 2 years only?).
search_menu_items 'excludeAllergens' parameter is an array of strings with no enum constraint or description of valid allergen codes. LLMs cannot know which codes are valid (e.g., 'gluten' vs 'GLUTEN' vs 'GF').