Multi-store Shopify Admin MCP server for Claude, Codex, Cursor, and VS Code. Search products, compare inventory and catalogs, run reports, and make guarded updates.
Strong foundation with 38 well-named tools following verb_noun convention (shopify_list_*, shopify_get_*, shopify_search_*, shopify_graphql_*). All tools have descriptions (avg ~120 chars, within 10-1024 baseline). Input schemas are comprehensive with proper Zod validation (z.string, z.enum, z.number.int().min().max()). Tool annotations present (readOnlyHint, destructiveHint, idempotentHint). However, parameter descriptions are sparse, many lack detail on format/constraints. Output schemas are not explicitly documented in tool definitions. Error handling exists but recovery guidance is minimal. Composition is strong: tools chain well (e.g., search_products → get_product), pagination is implemented (first/after pattern), and destructive operations require confirm=true gate.
Generate catalog gap report across multiple Shopify stores.
Generate catalog health report across multiple Shopify stores.
Compare product catalogs across multiple Shopify stores.
Compare collections across multiple Shopify stores.
Compare inventory, price, product status, and catalog details for selected SKUs across multiple Shopify stores.
Compare prices for selected SKUs across multiple Shopify stores.
Report tools (fulfillment_sla_report, catalog_gap_report, low_stock_report, etc.) lack detailed parameter descriptions. 'days', 'threshold', 'first', 'lookbackDays' are named but not explained (e.g., what units? what range is valid?). LLMs cannot infer constraints.
Output schemas are not documented in tool definitions. Handlers return textResult() with store/shop/apiVersion/result fields, but LLMs cannot see the structure of 'result' or what fields each tool returns. This breaks downstream tool chaining and forces LLMs to guess field names.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2025-06-18+ | v2 |
Create a product, options, variants and images. Defaults to draft. Optional collection membership is a separate step.
Generate customer growth report across multiple Shopify stores.
Generate duplicate SKU report across multiple Shopify stores.
Find sample products across published Shopify demo catalogs. For categories without suitable samples, generate original product concepts from the user query and pass generatedCandidates to display draft-creation cards. Label concepts as examples, never supplier offers or verified products. Images are optional; use only available relevant image URLs.
Generate fulfillment SLA report across multiple Shopify stores.
Get collection details, rules and a page of products.
Get inventory by product or inventory item. Use inventoryItemId and after to page through additional locations.
Get order, shipping, fulfillment, tracking and a page of line items.
Get product details, variants and media. Follow each returned cursor independently.
Find one exact SKU or product handle across selected stores and return a normalized product, price, status, and inventory matrix.
Get identity and account information from one named Shopify Admin store. Use this tool before a sensitive change to make sure that the selected store is correct.
Inspect store identity and granted access scopes.
Run one GraphQL Admin API mutation against one named store. Set confirm to true only after the user authorizes the exact store and change.
Run one read-only GraphQL Admin API query against one named store. Use cursor pagination and request only necessary fields.
Run the same read-only GraphQL Admin API query across multiple named stores in parallel. Each store returns its own success or error result.
Explore the Admin GraphQL schema for this store API version.
Search customers with cursor pagination. Shopify protected-data permissions apply.
List orders with Shopify search filters and cursor pagination.
List every Shopify Admin store that remains connected to this plugin. This tool does not expose access tokens.
List unfulfilled orders across multiple Shopify stores.
Generate low stock report across multiple Shopify stores.
Generate order summary report across multiple Shopify stores.
Create a read-only operating snapshot across selected stores or every configured store. Includes shop identity and product, order, customer, and location counts when scopes permit.
Generate recent product changes report across multiple Shopify stores.
Run ShopifyQL and return columns, rows and chart metadata. Requires reports access.
Search manual and smart collections with cursor pagination.
Search Shopify documentation and return source links. No store credentials are sent.
Search products with cursor pagination.
Search products across multiple Shopify stores in parallel.
Get store locations across multiple Shopify stores.
Resolve a named store without disconnecting other stores. Continue to pass the store alias on every call.
Validate Admin GraphQL operations against this store API version without executing them.
Error handling returns WorkflowError with details, but recovery guidance is minimal. Errors do not tell LLMs what to do next (retry? ask user? call a different tool?). No error categorization (retryable vs fatal).
Pagination parameters (first, after) lack explicit constraints in descriptions. Zod enforces min(1).max(100), but LLMs see only 'first' and 'after' without knowing the valid range. Descriptions should state '1-100 items per page'.
shopify_create_product accepts 'status' enum (ACTIVE|DRAFT|ARCHIVED) but description does not explain what each status means or when to use each. LLMs may pick wrong status without guidance.