I was setting up a Shopify MCP server to let Claude query my store directly. Tried the two most installed npm packages (shopify-mcp and @ajackus/shopify-mcp-server). Both installed and connected without issues, then started returning garbage.
The analytics tools (getSalesReport, getConversionReport, getTrafficReport) were stubs. They returned hardcoded placeholder responses. There was no mention of this in the docs, no “coming soon” flag in the code. The functions just returned fake numbers.
This is the worst failure mode: it looks like it works. I only caught it after cross-checking the numbers against Shopify Admin and seeing they didn’t match.
So I built one that actually works: @den.dance/shopify-mcp-pro. Real ShopifyQL behind the analytics tools, OAuth Client ID and Client Secret auth with auto-refresh, current Shopify Admin API 2026-04. Works with Claude Desktop, Claude Code, Cursor, and any MCP host.
What a Shopify MCP server actually is
A Shopify MCP server is a Model Context Protocol server that exposes Shopify Admin operations as tools an LLM can call. With one installed, you can ask Claude things like “top 10 products by revenue this month” or “list abandoned checkouts from the past week” and it queries your store through the Shopify Admin API instead of guessing.
There are now three categories of Shopify MCP servers worth knowing about:
- The official Shopify AI Toolkit (
@shopify/dev-mcp, released April 9, 2026). Focused on developer workflows: docs search, GraphQL schema introspection, query validation. Read-only against documentation, no store data. - Community packages (
shopify-mcp,@ajackus/shopify-mcp-server, and a few forks). Aim at store operations, but the analytics tools are stubs and several break on current API versions. @den.dance/shopify-mcp-pro(this one). Store operations plus real analytics through ShopifyQL, current API, OAuth.
What was wrong with the existing packages
Beyond the fake analytics, I found three more issues.
Deprecated API fields
getInventoryLevels and listAbandonedCheckouts used fields that Shopify removed in recent API versions. They crashed at runtime with schema errors. The packages were pinned to old Shopify API versions that no longer matched what the REST and GraphQL endpoints actually returned.
Silent auth expiry
Most implementations required a static Admin API access token. Shopify still supports those, but custom apps now use OAuth with Client ID and Client Secret, and those tokens refresh automatically. Packages using static tokens would silently fail once the token expired, with no clear error message.
getShippingZones crash
This one crashed on any store that had no delivery profiles configured. A null reference that only surfaces on stores without delivery profiles, which is probably why it slipped past the maintainers.
How shopify-mcp-pro differs from @shopify/dev-mcp
The official Shopify AI Toolkit (@shopify/dev-mcp) and shopify-mcp-pro are not competitors, they solve different problems. Pick the one that matches what you actually want Claude to do.
| Capability | @shopify/dev-mcp | @den.dance/shopify-mcp-pro |
|---|---|---|
| Audience | App developers | Store owners and ops |
| Docs search and schema introspection | Yes | No |
| Live Admin API access | No | Yes |
| Real analytics (sales, conversion, traffic) | No | Yes, via ShopifyQL |
| Orders, inventory, customers, fulfillment | No | Yes |
| Auth | No credentials | OAuth with auto-refresh |
| Shopify API version | Tied to docs | 2026-04 (current GA) |
Use both at once if you want. They register under different names in Claude.
What I built
I rewired the analytics tools to use ShopifyQL, the native query language that powers Shopify’s own Admin Analytics. It pulls from the same data source the dashboard uses, so the numbers match.
Switched auth to Client ID and Client Secret with automatic token refresh. Updated the deprecated fields. Fixed the null reference in shipping zones. Added runShopifyQL as a direct tool so you can run any custom query without writing code.
The package targets Shopify API 2026-04 (current GA) with @shopify/shopify-api v13.
Tools included
The server registers around 50 tools under the shopify namespace, grouped by area.
| Area | Key tools |
|---|---|
| Analytics (the headline fix) | runShopifyQL, getSalesReport, getConversionReport, getTrafficReport, getProductAnalytics, getCustomerAnalytics, getInventoryReport |
| Orders and fulfillment | listOrders, getOrder, createDraftOrder, listDraftOrders, createFulfillment, listFulfillmentOrders, createRefund, listTransactions |
| Catalog and inventory | listProducts, getProduct, createProduct, updateProduct, adjustInventory, getInventoryLevels |
| Customers and marketing | listCustomers, getCustomer, listAbandonedCheckouts, createDiscountCode, listDiscounts, listPriceRules, createGiftCard, listGiftCards |
| Store config and content | getShopInfo, listLocations, listMarkets, getShippingZones, createWebhook, listWebhooks, setMetafield, listMetaobjects, createMetaobject, listBlogs, createArticle, listPages, createPage |
The analytics tools route through ShopifyQL, so numbers match Admin. getShippingZones no longer null-crashes. Full list in the GitHub README.
Where to find it
npm: @den.dance/shopify-mcp-pro
GitHub: den-indance/shopify-mcp-pro
MCP Registry (Anthropic): registry.modelcontextprotocol.io
Setup
You need a Shopify custom app with API credentials, not a static token. Go to Shopify Admin → Settings → Apps → Develop apps, create an app, configure the scopes you need, install it, and grab the Client ID and Client Secret from the API credentials tab.
Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": ["@den.dance/shopify-mcp-pro"],
"env": {
"SHOPIFY_STORE_DOMAIN": "your-store.myshopify.com",
"SHOPIFY_CLIENT_ID": "your-client-id",
"SHOPIFY_CLIENT_SECRET": "your-client-secret"
}
}
}
}
Claude Code:
claude mcp add shopify \
-e SHOPIFY_STORE_DOMAIN=your-store.myshopify.com \
-e SHOPIFY_CLIENT_ID=your-client-id \
-e SHOPIFY_CLIENT_SECRET=your-client-secret \
-- npx @den.dance/shopify-mcp-pro
Cursor, Windsurf, Continue, and the rest follow the same MCP config shape: command: "npx", args: ["@den.dance/shopify-mcp-pro"], three env vars.
Then ask Claude things like “show me top 10 products by revenue this month” or “list abandoned checkouts from the past week”. It pulls real data from your store instead of returning placeholders.
FAQ
What is a Shopify MCP server?
A Shopify MCP server is a Model Context Protocol server that exposes Shopify Admin API operations as tools an LLM client (Claude Desktop, Claude Code, Cursor, Windsurf) can call. It lets the model query orders, products, inventory, customers, and analytics in a structured way instead of scraping or guessing.
Is there an official Shopify MCP server?
Yes. Shopify released @shopify/dev-mcp (the Shopify AI Toolkit) on April 9, 2026. It is focused on developer workflows: docs search, GraphQL schema introspection, query validation. It does not access live store data. For live store data, you need a community server like @den.dance/shopify-mcp-pro.
How is @den.dance/shopify-mcp-pro different from shopify-mcp on npm?
The older shopify-mcp package returns hardcoded placeholder values from its analytics tools (getSalesReport, getConversionReport, getTrafficReport), uses Shopify API fields that have been deprecated and removed, requires a static Admin API token that silently expires, and crashes on stores without delivery profiles. shopify-mcp-pro fixes all four: real ShopifyQL analytics, current API 2026-04, OAuth with auto-refresh, no null crash.
Do I need a Shopify Partner account?
No. You need a Shopify store with admin access. Inside Shopify Admin, create a custom app under Settings → Apps → Develop apps. That gives you a Client ID and Client Secret. No Partner enrollment required.
What permissions does the custom app need?
Whatever scopes match the tools you want to use. For full functionality: read_products, write_products, read_orders, write_orders, read_inventory, write_inventory, read_customers, read_analytics, read_reports, read_fulfillments, write_fulfillments, read_discounts, write_discounts, read_price_rules, write_price_rules. Add read_marketing_events and read_traffic if you want traffic and marketing reports.
Does it work with Claude Code, not just Claude Desktop?
Yes. The setup section above shows both. It also works with Cursor, Windsurf, Continue, Cline, Gemini CLI, OpenAI Codex CLI, and anything else that speaks MCP over stdio.
How does ShopifyQL fit in?
ShopifyQL is Shopify’s native query language. It powers the Admin Analytics dashboard. By routing the analytics tools through ShopifyQL instead of inventing math on top of the REST API, the numbers in Claude match the numbers you see in your Admin. The runShopifyQL tool also lets the model write and run custom queries directly when no pre-built tool fits the question.
Is it free?
Yes. MIT licensed. Source on GitHub at den-indance/shopify-mcp-pro.
What Shopify API version does it target?
2026-04 (current GA at the time of writing). It uses @shopify/shopify-api v13.