An intelligent order management system for a pizza shop that uses MCP tools to look up menu items and prices, with LLM fallback for natural language queries
Single tool 'check_price' has a basic description and input schema, but lacks critical production-grade details. Description is 77 chars (below baseline 194), parameter lacks constraints/format guidance, no output schema documented, no error handling guidance, and no tool annotations. The tool is READ_ONLY but this is not declared in the schema. Missing pagination, result limits, and recovery paths for common failures (item not found, database unavailable). Tool naming is acceptable (verb_noun pattern) but the implementation exposes raw database errors to the LLM without actionable recovery hints.
Look up the price of a specific pizza on the menu by exact name.
No output schema documented. LLM cannot predict return structure or plan downstream operations. check_price returns a string, but format (price format, currency symbol, error messages) is undocumented.
Parameter 'pizza_name' lacks format/constraint guidance. No enum of valid menu items, no case-sensitivity note, no length limits. LLM may pass invalid names, triggering 'not on the menu' responses instead of being guided to valid options.
Error responses are not actionable. 'System Error: Database unavailable' gives LLM no recovery path. Should suggest retry, fallback, or user notification.
No tool annotations (readOnlyHint, idempotentHint). READ_ONLY risk classification is metadata-only; schema does not declare it. LLM cannot infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Tool description (77 chars) is below baseline (194 chars). Lacks WHEN to use, prerequisites, and dependency hints. Does not explain that menu items are case-insensitive or that exact name matching is required.