Spring Boot MCP server implementation demonstrating refrigerator inventory management with tools for product CRUD operations
Two tools with partial definitions. Tool naming follows conventions (verb_noun). Descriptions are present but brief (19-56 chars, below the 50-200 char LLM-optimized baseline). The add_product tool has a complete input schema with proper types and descriptions for all parameters (id, name, type with enum, price). The get_all_products tool has an empty input schema ({}). Neither tool has documented output schemas, which is critical for agent planning and chaining. No error handling guidance is visible. Overall Definition Quality is dragged down by missing output schemas and lack of error recovery patterns.
It adds a new product
It returns the name, type and cost of all the available products
No output schemas documented for either tool. Agents cannot infer what fields to expect in responses, preventing downstream tool composition and forcing agents to guess at result structure.
get_all_products description is only 53 chars and lacks actionable context. Description should explain WHEN to call this tool (e.g., 'Call before add_product to check existing inventory') and WHAT the response contains (names, types, costs).
add_product description is 28 chars ('It adds a new product'), vague and below 50-char minimum. No indication of what the tool returns (success response, generated ID, error cases), prerequisites (get_all_products first?), or side effects.
add_product price parameter description says '(must be greater than 0)' but does not specify a maximum or precision (e.g., cents rounding). Unbounded numeric parameters invite LLMs to pass unreasonable values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
get_all_products has empty input schema {}. While appropriate for a read-only discovery tool, the tool lacks pagination parameters (limit, offset). If inventory grows, returning all products will blow the context window. Add limit and offset params with defaults.
No error handling guidance visible. What happens if add_product is called with a duplicate ID? Invalid price? Unsupported type? Agents need recovery instructions (retryable vs fatal, what to try next).
add_product marks id as an integer parameter but does not clarify whether it is auto-generated (optional), or must be supplied by the caller. If optional, omit from required params. If required, clarify the valid range and uniqueness constraint.