MCP server for Shopify store metrics via ShopifyQL
Server has 7 well-named tools with consistent verb_noun patterns (shopify_sales_*, shopify_orders, shopify_customer_metrics, shopify_traffic). All tools have descriptions (avg 95 chars, within 10-1024 range). Input schemas are present with Zod validation and parameter descriptions. However, output schemas are NOT documented, responses return generic text content without structured field definitions. Error handling is absent; no recovery guidance or categorization. No tool annotations (readOnlyHint, etc.). Parameters lack constraints like min/max for numeric fields and explicit format specs. Missing pagination support despite tools returning potentially large datasets.
Get customer acquisition and behavior metrics. Shows new vs returning customers over time.
Get recent orders with details. Useful for checking individual order status and recent activity.
Get sales breakdown by sales channel (Online Store, POS, etc.).
Get sales breakdown by product. Shows revenue, units sold, and orders per product.
Get sales metrics over time as a time series. Useful for trends and comparisons.
Get a summary of sales metrics (total sales, net sales, orders, AOV, returns, discounts) for a date range. Defaults to last 30 days.
Output schemas not documented. All tools return generic `{ content: [{ type: 'text', text: result }] }` without specifying what fields the LLM should expect in the result string. LLMs cannot plan downstream calls or extract structured data.
No error handling or recovery guidance. Tools do not validate inputs (e.g., limit bounds, date format) or provide actionable error messages. If runShopifyQL() or runGraphQL() fails, the LLM receives no guidance on what to do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Get online store traffic and session metrics including visitors, sessions, and conversion rate.
Numeric parameters lack min/max constraints. 'limit' in shopify_sales_by_product and 'first' in shopify_orders have no explicit bounds in schema. LLMs could pass absurd values (limit=999999, first=1000000) causing API timeouts or errors.
No pagination support. Tools like shopify_sales_by_product and shopify_orders accept 'limit' but do not return pagination tokens (next_cursor, total_count) or offset parameters. Large result sets will blow context windows.
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint. All tools are read-only (safe to retry), but this is not declared in the schema, forcing LLMs to infer safety.