MCP server for shopping assistant
Server has 11 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, mostly short), and input schemas are present with type definitions. However, descriptions lack actionable context (WHEN to use, prerequisites, dependencies). Parameter descriptions are minimal. Output schemas are undocumented, LLMs cannot predict response structure. Error handling is absent from tool definitions. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite mix of read/write/irreversible operations. Naming is verb-first and clear, but some tools lack required parameter descriptions (e.g., list_recommendations.productId marked optional but no guidance on behavior when omitted).
Add product(s) to the cart
Start a new cart for a user session
Finalize checkout and create an order
Return current user's cart
Return previous messages from a user session
Get detailed information for a single product
Lists all product categories available
No output schemas documented. LLMs cannot predict response structure, forcing them to guess at field names and types. This breaks tool chaining (e.g., search_products returns product IDs, but get_product_detail's expected input field name is unknown).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Server mixes read-only (search_products), write (add_to_cart), and irreversible (create_order) operations without marking them. LLMs cannot distinguish safe retries from destructive calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Returns AI-generated product recommendations
Log user message to chat history
Search for products by keywords
Change quantity of an item in the cart
Descriptions are too short (40-50 chars) and lack actionable context. 'Search for products by keywords' does not explain WHEN to use this vs list_recommendations, what fields are returned, or how pagination works. Baseline for A+ tools is 50-200 chars with WHAT/WHEN/HOW guidance.
Missing parameter descriptions for optional fields. list_recommendations.productId is optional but lacks guidance on behavior when omitted (returns generic recommendations? top-sellers?). Undocumented dependencies force LLMs to guess.
No error handling guidance in tool definitions. If create_order fails (insufficient stock, payment declined), LLMs have no recovery path. No distinction between retryable (network timeout) vs user-fixable (invalid address) vs fatal (order already exists) errors.