MCP server exposing read-only Shopify support tools (order status, customer orders, inventory) over stdio for a customer support agent
Three tools with clear verb-noun naming (get_order_status, list_customer_orders, check_inventory) and solid descriptions (avg 95 chars, all >20 chars). Input schemas present with type definitions and parameter descriptions. However, output schemas are NOT documented, the code shows GraphQL queries and response processing, but no formal schema definitions are visible in the tool registration. Parameter descriptions are adequate but lack format constraints (e.g., email regex, order number format). No error handling guidance in descriptions. No tool annotations (readOnlyHint, etc.). Composition is sound: three independent, single-purpose tools with no overlapping responsibilities.
Check live stock and prices for products matching a search phrase.
Look up the status of one order, including fulfillment state and tracking. Requires both the order number and the email address on the order; they must match or the order is reported as not found. Never guesses.
List recent orders (up to 10, newest first) for a customer email address.
Output schemas not documented. Code shows GraphQL queries and response shaping (e.g., tracking arrays, money formatting), but no formal schema definitions visible in tool registration. LLMs cannot plan downstream calls or extract fields reliably.
Parameter descriptions lack format constraints. 'order_number' description mentions '#1001' as example but does not state the regex or length limits. 'email' lacks validation rules. 'product_query' does not specify max length or character restrictions.
No tool annotations. Tools are read-only but lack readOnlyHint annotation. This prevents clients from optimizing caching, retry logic, or UI presentation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Error handling descriptions missing. Tools raise ToolInputError for validation failures, but descriptions do not guide LLMs on recovery (e.g., 'If email is invalid, ask the user for clarification'). ORDER_NOT_FOUND response is honest but not documented in tool description.
list_customer_orders returns up to 10 items but no pagination parameters (limit, offset, cursor). If a customer has >10 orders, the agent cannot retrieve older ones. No total count returned.