An MCP server providing tools for e-commerce operations including product browsing, shopping cart management, and order placement
The server defines 6 tools with reasonable naming conventions and basic descriptions, but falls short of production-grade quality. Tool names follow verb_noun patterns (list_products, search_products, get_product_details, add_to_cart, view_cart, place_order), which is good. However, descriptions lack depth and LLM guidance. Input schemas are present with type definitions, but parameter descriptions are minimal and lack context about constraints, dependencies, or error recovery. Output schemas are not documented at all. Error handling is minimal, the code returns generic error strings without categorization or recovery guidance. The biggest gaps are: (1) missing output schema documentation, (2) no enum constraints on constrained inputs, (3) no parameter range or format specifications, (4) no idempotency or dry-run support for irreversible operations like place_order, and (5) no guidance in descriptions about authentication requirements or multi-step workflows.
Add a product to the shopping cart (requires authentication)
Get detailed information about a specific product by its ID
List all available products from the store
Place a new order with the items in the shopping cart (requires authentication)
Search for products using a query string
View current shopping cart contents (requires authentication)
No output schemas documented for any tool. LLMs cannot plan downstream operations or extract critical fields (product_id from search results, order_id from place_order) without knowing response structure.
Parameter type inconsistency: product_id is defined as 'string' in get_product_details but 'number' in add_to_cart. LLMs will hallucinate the wrong type on the second call.
Irreversible operations (place_order) have no confirmation step, dry-run mode, or explicit warning in description. Agents cannot safely retry on ambiguous failures without risking duplicate orders.
No numeric bounds on pagination (limit, offset) or price filters (min_price, max_price). LLMs can pass limit=999999 or negative prices without constraint feedback.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 42 | 2025-06-18+ | v1 |
No enum constraints on constrained inputs. 'category_id' in search_products has no valid values listed, LLM must guess or make discovery calls.
Error responses return generic text messages without categorization or recovery guidance. Example: 'Error: %s' in internal/mcp/server.go line ~60 gives LLM no signal to retry, ask user, or choose an alternative tool.
Descriptions lack LLM guidance on when to use similar tools. search_products vs list_products distinction is unclear, when should the agent pick one over the other?
place_order accepts no parameters for shipping address, payment method, or delivery preferences. Tool is rigid and cannot model realistic e-commerce flows.
No chaining IDs in responses. If search_products returns results, response must include product_id so LLM can immediately call get_product_details or add_to_cart, but this is not documented.
Authentication is mentioned as a requirement but mechanism is opaque. Description says 'requires authentication' but doesn't explain if user must provide a token, how it's injected, or what happens if not authenticated.