MCP Server for Shopify API, enabling interaction with store data through GraphQL API.
Server has 9 tools with explicit Zod schemas and descriptions. Naming follows verb_noun pattern (get-, create-, tag-). However, descriptions are minimal (10-50 chars, well below the 194-char baseline), lack context on WHEN to use each tool, and omit recovery guidance. Schemas are present but sparse, many parameters lack detailed constraints. Output formatting is ad-hoc (JSON.stringify or custom formatProduct). No pagination metadata (total count, next_cursor) returned. Error handling is generic ('Failed to retrieve X') with no recovery hints. Missing tool annotations (readOnlyHint, destructiveHint). Overall: functional but below production baseline.
Create a basic discount code
Get shopify customers with pagination support
Get a single order by ID
Get shopify orders with advanced filtering and sorting
Get all products or search by title
Get products from a specific collection
Get products by their IDs
Descriptions are too brief (10-50 chars vs 194-char baseline). Missing WHEN to use each tool, prerequisites, and recovery hints. LLMs cannot distinguish between similar tools (e.g., get-products vs get-products-by-collection) without richer context.
Error handling is generic ('Failed to retrieve X'). No recovery guidance, no categorization (retryable vs user-fixable vs fatal), no invalid-value feedback. LLMs cannot self-correct or plan next steps.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot infer which tools are safe to retry or have side effects. tag-customer and create-discount are destructive but unmarked.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Get product variants by their IDs
Add tags to a customer
Pagination support incomplete. get-customers and get-orders accept 'next' cursor but responses do not document total count or next_cursor field. Output is raw JSON.stringify, not shaped for agent consumption.
Output schemas not documented. Responses are formatted as text (formatProduct, formatOrder) or raw JSON with no schema definition. LLMs cannot plan downstream tool calls or extract structured data reliably.