Shopify MCP Pro
About
Working Shopify MCP server real analytics via ShopifyQL, auto-refresh auth, Shopify API 2026-04. Fixes broken tools from other packages: sales reports, inventory, abandoned checkouts, no silent token expiry.
Explore
- read_draft_orders, write_draft_orders
- read_fulfillments, write_fulfillments
- read_shipping
- read_marketing_events, write_marketing_events
- read_discounts, write_discounts
- read_price_rules, write_price_rules
- read_themes
- read_content, write_content
- read_metaobjects, write_metaobjects
- read_gift_cards, write_gift_cards
You don't need all scopes — the server works with whatever you grant. Tools requiring missing scopes return auth errors without affecting others.
---
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Shopify MCP ProCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
``bash`
npx @den.dance/shopify-mcp-pro
---
Edit your Claude Desktop config file:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json
- Windows: ~/.config/Claude/claude_desktop_config.json
- Linux: `
json`
{
"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",
"SHOPIFY_API_VERSION": "2026-04",
"SHOPIFY_LOG_LEVEL": "WARNING"
}
}
}
}
Restart Claude Desktop after saving.
`bash`
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
---
| Variable | Required | Description |
|---|---|---|
| SHOPIFY_STORE_DOMAIN | Yes | e.g. my-store.myshopify.com |SHOPIFY_CLIENT_ID
| | Yes | From Shopify Dev Dashboard |SHOPIFY_CLIENT_SECRET
| | Yes | From Shopify Dev Dashboard |SHOPIFY_API_VERSION
| | No | Defaults to 2026-04 |SHOPIFY_LOG_LEVEL
| | No | error, warning, info, debug (default: warning) |TRANSPORT_MODE
| | No | stdio (default) or sse |PORT
| | No | HTTP port for SSE mode (default: 3000) |
---
- getShopInfolistThemes
- listLocations
- listMarkets
- getInventoryReport
- getCustomReport`
-
---
listProducts
List products from the Shopify store
getProduct
Get a specific product by ID
createProduct
Create a new product
updateProduct
Update an existing product
listOrders
List orders from the Shopify store
getOrder
Get a specific order by ID
listCustomers
List customers from the Shopify store
getCustomer
Get a specific customer by ID
getInventoryLevels
Get inventory levels for a product variant
adjustInventory
Adjust inventory quantity
setMetafield
Set a metafield on a resource
listCollections
List collections from the Shopify store
listLocations
List all store locations
getShopInfo
Get shop information and analytics
listDiscounts
List discount codes and automatic discounts
createDiscountCode
Create a discount code
listFulfillmentOrders
List fulfillment orders
createFulfillment
Create a fulfillment for an order
getShippingZones
Get shipping zones and rates
listTransactions
List transactions for an order
createRefund
Create a refund for an order
listGiftCards
List gift cards
createGiftCard
Create a gift card
listPages
List store pages
createPage
Create a new page
listBlogs
List blogs
createArticle
Create a blog article
createRedirect
Create a URL redirect
listThemes
List installed themes
listWebhooks
List configured webhooks
createWebhook
Create a webhook subscription
listDraftOrders
List draft orders
createDraftOrder
Create a draft order
listMetaobjectDefinitions
List all metaobject type definitions configured in the store. Use this to discover valid `type` values (e.g. `shopify--color-pattern`, `product.material`) before calling listMetaobjects. Returns id/type/name/description + field schema per definition.
listMetaobjects
List metaobjects of a given type. The `type` arg must match a definition exactly (case-sensitive identifier like `shopify--color-pattern`). Run listMetaobjectDefinitions first to discover what types exist in this store. Non-existent type → empty result, not error.
createMetaobject
Create a metaobject
listMarkets
List configured markets
listPriceRules
List discounts (covers code, automatic, BxGy, free-shipping). Replaces deprecated priceRules query with discountNodes in 2026-04+.
listAbandonedCheckouts
List abandoned checkouts
runShopifyQL
Run an arbitrary ShopifyQL analytics query against the store. Same data as Admin → Analytics. Canonical clause order: FROM → SHOW → WHERE → SINCE/UNTIL/DURING → GROUP BY → ORDER BY → LIMIT. Dates are BARE (no quotes): `SINCE 2026-01-01 UNTIL today` or relative `SINCE -30d UNTIL today`. Use `GROUP BY` (full keyword), not `BY`. Dimensions in SHOW must also appear in GROUP BY. Verified datasets: `sales` (metrics: total_sales, gross_sales, net_sales, orders, average_order_value; dims: product_title, billing_country, customer_type), `sessions` (metrics: sessions, online_store_visitors, conversion_rate; dims: referrer_source, utm_source, utm_medium, referrer_host). Note: `orders` and `products` are NOT valid ShopifyQL datasets — use GraphQL tools instead. Returns { parseErrors: [String], tableData: { columns: [{name,dataType,displayName}], rows: JSON } }. parseErrors is non-empty when the query is syntactically/semantically invalid — read it for the exact field/dataset name issue.
getSalesReport
Sales analytics via ShopifyQL. Default columns: total_sales, gross_sales, net_sales, total_orders, average_order_value over the date range. Pass `query` to override with raw ShopifyQL.
getProductAnalytics
Get product performance analytics
getCustomerAnalytics
Get customer behavior analytics
getInventoryReport
Get inventory analytics and forecasting
getMarketingReport
Get marketing campaign performance
getFinancialSummary
Get financial summary including revenue, expenses, and profit
getConversionReport
Product performance via ShopifyQL. Default: top 25 products by total_sales over date range. Pass `query` to override with raw ShopifyQL (e.g. session/conversion-funnel queries).
getAbandonmentReport
Get cart and checkout abandonment analytics
getTrafficReport
Orders grouped by traffic source via ShopifyQL. Default: total_sales/orders/AOV by referrer_source. Pass `query` to override.
getCustomReport
Alias for runShopifyQL — pass a raw ShopifyQL string in `query`. See runShopifyQL description for syntax.
listCompanies
List B2B companies
createCompany
Create a B2B company
- listProducts: List products from the Shopify store
- getProduct: Get a specific product by ID
- createProduct: Create a new product
- updateProduct: Update an existing product
- listOrders: List orders from the Shopify store
- getOrder: Get a specific order by ID
- listCustomers: List customers from the Shopify store
- getCustomer: Get a specific customer by ID
- getInventoryLevels: Get inventory levels for a product variant
- adjustInventory: Adjust inventory quantity
- setMetafield: Set a metafield on a resource
- listCollections: List collections from the Shopify store
- listLocations: List all store locations
- getShopInfo: Get shop information and analytics
- listDiscounts: List discount codes and automatic discounts
- createDiscountCode: Create a discount code
- listFulfillmentOrders: List fulfillment orders
- createFulfillment: Create a fulfillment for an order
- getShippingZones: Get shipping zones and rates
- listTransactions: List transactions for an order
- createRefund: Create a refund for an order
- listGiftCards: List gift cards
- createGiftCard: Create a gift card
- listPages: List store pages
- createPage: Create a new page
- listBlogs: List blogs
- createArticle: Create a blog article
- createRedirect: Create a URL redirect
- listThemes: List installed themes
- listWebhooks: List configured webhooks
- createWebhook: Create a webhook subscription
- listDraftOrders: List draft orders
- createDraftOrder: Create a draft order
- listMetaobjectDefinitions: List all metaobject type definitions configured in the store. Use this to discover valid type values (e.g. shopify--color-pattern, product.material) before calling listMetaobjects. Returns id/type/name/description + field schema per definition.
- listMetaobjects: List metaobjects of a given type. The type arg must match a definition exactly (case-sensitive identifier like shopify--color-pattern). Run listMetaobjectDefinitions first to discover what types exist in this store. Non-existent type → empty result, not error.
- createMetaobject: Create a metaobject
- listMarkets: List configured markets
- listPriceRules: List discounts (covers code, automatic, BxGy, free-shipping). Replaces deprecated priceRules query with discountNodes in 2026-04+.
- listAbandonedCheckouts: List abandoned checkouts
- runShopifyQL: Run an arbitrary ShopifyQL analytics query against the store. Same data as Admin → Analytics. Canonical clause order: FROM → SHOW → WHERE → SINCE/UNTIL/DURING → GROUP BY → ORDER BY → LIMIT. Dates are BARE (no quotes): SINCE 2026-01-01 UNTIL today or relative SINCE -30d UNTIL today. Use GROUP BY (full keyword), not BY. Dimensions in SHOW must also appear in GROUP BY. Verified datasets: sales (metrics: total_sales, gross_sales, net_sales, orders, average_order_value; dims: product_title, billing_country, customer_type), sessions (metrics: sessions, online_store_visitors, conversion_rate; dims: referrer_source, utm_source, utm_medium, referrer_host). Note: orders and products are NOT valid ShopifyQL datasets — use GraphQL tools instead. Returns { parseErrors: [String], tableData: { columns: [{name,dataType,displayName}], rows: JSON } }. parseErrors is non-empty when the query is syntactically/semantically invalid — read it for the exact field/dataset name issue.
- getSalesReport: Sales analytics via ShopifyQL. Default columns: total_sales, gross_sales, net_sales, total_orders, average_order_value over the date range. Pass query to override with raw ShopifyQL.
- getProductAnalytics: Get product performance analytics
- getCustomerAnalytics: Get customer behavior analytics
- getInventoryReport: Get inventory analytics and forecasting
- getMarketingReport: Get marketing campaign performance
- getFinancialSummary: Get financial summary including revenue, expenses, and profit
- getConversionReport: Product performance via ShopifyQL. Default: top 25 products by total_sales over date range. Pass query to override with raw ShopifyQL (e.g. session/conversion-funnel queries).
- getAbandonmentReport: Get cart and checkout abandonment analytics
- getTrafficReport: Orders grouped by traffic source via ShopifyQL. Default: total_sales/orders/AOV by referrer_source. Pass query to override.
- getCustomReport: Alias for runShopifyQL — pass a raw ShopifyQL string in query. See runShopifyQL description for syntax.
- listCompanies: List B2B companies
- createCompany: Create a B2B company
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"shopify mcp pro": {
"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"
}
}
}
}
}
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"
}
}
}
Why this one
| What's fixed | Detail | |---|---| | Analytics tools were stubs |getSalesReport, getConversionReport, getTrafficReport now powered by ShopifyQL — real data |
| Auth that actually works | Uses Client ID + Secret from Shopify Dev Dashboard, tokens refresh automatically — no silent expiry |
| Deprecated API fields | getInventoryLevels, listAbandonedCheckouts updated to Shopify 2026-04 field schema |
| Runtime crashes | getShippingZones no longer crashes on stores with no delivery profiles |
| New: runShopifyQL | Run any ShopifyQL query directly — same data as Admin → Analytics |
| Shopify Admin API | 2026-04 (current GA) + @shopify/shopify-api v13 |
---
Quick Start
``bash
npx @den.dance/shopify-mcp-pro
`
---
Setup
1. Create a Custom App in Shopify
1. Go to your Shopify Admin → Settings → Apps and sales channels
2. Click Develop apps (enable custom app development if prompted)
3. Click Create an app, give it a name (e.g. "Claude MCP")
4. Go to Configure Admin API scopes and select scopes you need (see list below)
5. Click Install app
6. Go to API credentials tab — you'll see Client ID and Client secret
> Note: Shopify no longer shows a static access token by default. This server uses OAuth with Client ID + Secret.
2. Configure Claude Desktop
Edit your Claude Desktop config file:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
- Windows: %APPDATA%\Claude\claude_desktop_config.json
- Linux: ~/.config/Claude/claude_desktop_config.json
`json
{
"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",
"SHOPIFY_API_VERSION": "2026-04",
"SHOPIFY_LOG_LEVEL": "WARNING"
}
}
}
}
`
Restart Claude Desktop after saving.
Configure Claude Code
`bash
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
`
---
Environment Variables
| Variable | Required | Description |
|---|---|---|
| SHOPIFY_STORE_DOMAIN | Yes | e.g. my-store.myshopify.com |
| SHOPIFY_CLIENT_ID | Yes | From Shopify Dev Dashboard |
| SHOPIFY_CLIENT_SECRET | Yes | From Shopify Dev Dashboard |
| SHOPIFY_API_VERSION | No | Defaults to 2026-04 |
| SHOPIFY_LOG_LEVEL | No | error, warning, info, debug (default: warning) |
| TRANSPORT_MODE | No | stdio (default) or sse |
| PORT | No | HTTP port for SSE mode (default: 3000) |
---
API Scopes
Minimum recommended
- read_products, write_products
- read_orders
- read_customers
- read_inventory, write_inventory
For analytics
- read_analytics
- read_reports
Full feature set
- read_draft_orders, write_draft_orders
- read_fulfillments, write_fulfillments
- read_shipping
- read_marketing_events, write_marketing_events
- read_discounts, write_discounts
- read_price_rules, write_price_rules
- read_themes
- read_content, write_content
- read_metaobjects, write_metaobjects
- read_gift_cards, write_gift_cards
You don't need all scopes — the server works with whatever you grant. Tools requiring missing scopes return auth errors without affecting others.
---
Tools
Products & Inventory
- listProducts — list with filters, pagination, sort
- getProduct — get by ID (includes inventory item IDs)
- createProduct, updateProduct
- getInventoryLevels — current stock across locations
- adjustInventory — adjust quantities
- listCollections
- setMetafield
- listMetaobjectDefinitions, createMetaobject, listMetaobjects
Orders & Fulfillment
- listOrders, getOrder
- createDraftOrder, listDraftOrders
- createFulfillment, listFulfillmentOrders
- getShippingZones
- createRefund
- listTransactions
Customers & B2B
- listCustomers, getCustomer
- getCustomerAnalytics
- createCompany, listCompanies
Financial
- getFinancialSummary
- createGiftCard, listGiftCards
Marketing & Content
- createDiscountCode, listDiscounts
- listPriceRules
- createPage, listPages
- createArticle, listBlogs
- createRedirect
- createWebhook, listWebhooks
Analytics & Reporting
- getSalesReport — revenue, orders, AOV (ShopifyQL)
- getProductAnalytics — top products by sales (ShopifyQL)
- getConversionReport — product conversion funnel (ShopifyQL)
- getTrafficReport — sales by referrer source (ShopifyQL)
- getAbandonmentReport — cart abandonment by date range
- listAbandonedCheckouts
- getMarketingReport
- getCustomerAnalytics
- runShopifyQL — run any ShopifyQL query directly
Store Config
- getShopInfo
- listThemes
- listLocations
- listMarkets
- getInventoryReport
- getCustomReport
---
ShopifyQL
runShopifyQL lets you run raw ShopifyQL queries — Shopify's native SQL-like analytics language:
`
FROM sales SHOW total_sales, gross_sales, total_orders SINCE '2026-01-01' UNTIL '2026-05-19'
FROM products SHOW total_sales BY product_title ORDER BY total_sales DESC LIMIT 10
FROM sessions SHOW sessions BY referrer_source
`
Requires read_reports scope + Level 2 customer data access in your Shopify app settings.
---
Example prompts for Claude
- "Show sales for last month broken down by product"
- "Which products have less than 10 units in stock?"
- "Create a 20% discount code valid until end of month"
- "List abandoned checkouts from the past week"
- "Run a ShopifyQL query: FROM sales SHOW total_orders SINCE -30d"
- "Get customer lifetime value metrics"
- "Show top 10 products by revenue this year"
---
SSE Mode
For HTTP-based access or cloud deployment:
`bash
TRANSPORT_MODE=sse \
SHOPIFY_STORE_DOMAIN=your-store.myshopify.com \
SHOPIFY_CLIENT_ID=your-client-id \
SHOPIFY_CLIENT_SECRET=your-client-secret \
PORT=3000 \
npx @den.dance/shopify-mcp-pro
`
Endpoints:
- GET /sse — SSE stream
- POST /messages?sessionId={id} — send messages
- GET /health — health check
Configure Claude Desktop for remote SSE:
`json
{
"mcpServers": {
"shopify-remote": {
"transport": {
"type": "sse",
"url": "https://your-server.com/sse"
}
}
}
}
``
---
Security
- Never commit credentials to version control - Use environment variables for all secrets - Create separate apps with minimal scopes for different use cases - Regularly rotate your Client Secret ---Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



