Shopify MCP Pro
Connect to a Shopify store to manage products, orders, customers, inventory, analytics, fulfillment, discounts, and more via the Shopify Admin API (2026-04). Supports ShopifyQL for custom reporting.
Shopify MCP Pro
The working Shopify MCP server. Connect Claude to your Shopify store — products, orders, customers, inventory, analytics and more.
Most Shopify MCP packages have broken analytics (stubs that return wrong data), use deprecated API fields that crash at runtime, and require a static token that expires silently. This one doesn't.
Built by Denis Maleev.
Why this one
What's fixed | Detail |
Analytics tools were stubs |
|
Auth that actually works | Uses Client ID + Secret from Shopify Dev Dashboard, tokens refresh automatically — no silent expiry |
Deprecated API fields |
|
Runtime crashes |
|
New: | Run any ShopifyQL query directly — same data as Admin → Analytics |
Shopify Admin API |
|
Related MCP server: Shopify Partner Agent
Quick Start
npx @den.dance/shopify-mcp-proSetup
1. Create a Custom App in Shopify
Go to your Shopify Admin → Settings → Apps and sales channels
Click Develop apps (enable custom app development if prompted)
Click Create an app, give it a name (e.g. "Claude MCP")
Go to Configure Admin API scopes and select scopes you need (see list below)
Click Install app
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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.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
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-proEnvironment Variables
Variable | Required | Description |
| Yes | e.g. |
| Yes | From Shopify Dev Dashboard |
| Yes | From Shopify Dev Dashboard |
| No | Defaults to |
| No |
|
| No |
|
| No | HTTP port for SSE mode (default: |
API Scopes
Minimum recommended
read_products,write_productsread_ordersread_customersread_inventory,write_inventory
For analytics
read_analyticsread_reports
Full feature set
read_draft_orders,write_draft_ordersread_fulfillments,write_fulfillmentsread_shippingread_marketing_events,write_marketing_eventsread_discounts,write_discountsread_price_rules,write_price_rulesread_themesread_content,write_contentread_metaobjects,write_metaobjectsread_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, sortgetProduct— get by ID (includes inventory item IDs)createProduct,updateProductgetInventoryLevels— current stock across locationsadjustInventory— adjust quantitieslistCollectionssetMetafieldlistMetaobjectDefinitions,createMetaobject,listMetaobjects
Orders & Fulfillment
listOrders,getOrdercreateDraftOrder,listDraftOrderscreateFulfillment,listFulfillmentOrdersgetShippingZonescreateRefundlistTransactions
Customers & B2B
listCustomers,getCustomergetCustomerAnalyticscreateCompany,listCompanies
Financial
getFinancialSummarycreateGiftCard,listGiftCards
Marketing & Content
createDiscountCode,listDiscountslistPriceRulescreatePage,listPagescreateArticle,listBlogscreateRedirectcreateWebhook,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 rangelistAbandonedCheckoutsgetMarketingReportgetCustomerAnalyticsrunShopifyQL— run any ShopifyQL query directly
Store Config
getShopInfolistThemeslistLocationslistMarketsgetInventoryReportgetCustomReport
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_sourceRequires 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:
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-proEndpoints:
GET /sse— SSE streamPOST /messages?sessionId={id}— send messagesGET /health— health check
Configure Claude Desktop for remote SSE:
{
"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
License
MIT
Available Tools
52 toolsadjustInventoryC
Adjust inventory quantity
Inputs: inventoryItemId (required), locationId (required), quantity (required).
createArticleC
Create a blog article
Inputs: blogId (required), title (required), content (required), summary, +4 more.
createCompanyC
Create a B2B company
Inputs: name (required), externalId, note, contactEmail, +1 more.
createDiscountCodeD
Create a discount code
Inputs: title (required), code (required), customerGets (required), startsAt, +5 more.
createDraftOrderD
Create a draft order
Inputs: lineItems (required), customerId, email, note, +3 more.
createFulfillmentC
Create a fulfillment for an order
Inputs: orderId (required), lineItems (required), trackingInfo, notifyCustomer, +1 more.
createGiftCardC
Create a gift card
Inputs: initialValue (required), code, note, expiresOn, +2 more.
createMetaobjectC
Create a metaobject
Inputs: type (required), fields (required).
createPageC
Create a new page
Inputs: title (required), content (required), handle, published, +1 more.
createProductC
Create a new product
Inputs: title (required), description, vendor, productType, +3 more.
createRedirectC
Create a URL redirect
Inputs: path (required), target (required).
createRefundC
Create a refund for an order
Inputs: orderId (required), lineItems, shipping, refundDuties, +2 more.
createWebhookC
Create a webhook subscription
Inputs: topic (required), callbackUrl (required), format, includeFields.
getAbandonmentReportC
Get cart and checkout abandonment analytics
Inputs: startDate (required), endDate (required), groupBy.
getConversionReportA
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).
Inputs: startDate (required), endDate (required), query.
getCustomerB
Get a specific customer by ID
Inputs: id (required).
getCustomerAnalyticsC
Get customer behavior analytics
Inputs: startDate (required), endDate (required), metrics.
getCustomReportC
Alias for runShopifyQL — pass a raw ShopifyQL string in query. See runShopifyQL description for syntax.
Inputs: query (required).
getFinancialSummaryC
Get financial summary including revenue, expenses, and profit
Inputs: startDate (required), endDate (required), includeRefunds, includeTaxes, +2 more.
getInventoryLevelsC
Get inventory levels for a product variant
Inputs: inventoryItemId (required).
getInventoryReportC
Get inventory analytics and forecasting
Inputs: locationIds, productIds, includeForecasting, forecastDays.
getMarketingReportC
Get marketing campaign performance
Inputs: startDate (required), endDate (required), channels, campaignIds.
getOrderA
Get a specific order by ID
Inputs: id (required).
getProductA
Get a specific product by ID
Inputs: id (required).
getProductAnalyticsC
Get product performance analytics
Inputs: startDate (required), endDate (required), productIds, limit, +1 more.
getSalesReportC
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.
Inputs: startDate (required), endDate (required), granularity, query.
getShippingZonesC
Get shipping zones and rates
Inputs: limit.
getShopInfoB
Get shop information and analytics
Inputs: no named parameters.
getTrafficReportA
Orders grouped by traffic source via ShopifyQL. Default: total_sales/orders/AOV by referrer_source. Pass query to override.
Inputs: startDate (required), endDate (required), query.
listAbandonedCheckoutsC
List abandoned checkouts
Inputs: limit, cursor, query.
listBlogsD
List blogs
Inputs: limit, cursor.
listCollectionsC
List collections from the Shopify store
Inputs: limit, cursor, query.
listCompaniesC
List B2B companies
Inputs: limit, cursor.
listCustomersC
List customers from the Shopify store
Inputs: limit, cursor, query, sortKey, +1 more.
listDiscountsC
List discount codes and automatic discounts
Inputs: limit, cursor, query, savedSearchId.
listDraftOrdersC
List draft orders
Inputs: limit, cursor, query.
listFulfillmentOrdersC
List fulfillment orders
Inputs: limit, cursor, status, assignedLocationId.
listGiftCardsD
List gift cards
Inputs: limit, cursor, query.
listLocationsA
List all store locations
Inputs: no named parameters.
listMarketsC
List configured markets
Inputs: limit.
listMetaobjectDefinitionsA
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.
Inputs: limit, cursor.
listMetaobjectsA
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.
Inputs: type (required), limit, cursor.
listOrdersC
List orders from the Shopify store
Inputs: limit, cursor, query, status, +2 more.
listPagesC
List store pages
Inputs: limit, cursor.
listPriceRulesC
List discounts (covers code, automatic, BxGy, free-shipping). Replaces deprecated priceRules query with discountNodes in 2026-04+.
Inputs: limit, cursor.
listProductsC
List products from the Shopify store
Inputs: limit, cursor, query, sortKey, +1 more.
listThemesB
List installed themes
Inputs: no named parameters.
listTransactionsB
List transactions for an order
Inputs: orderId (required).
listWebhooksC
List configured webhooks
Inputs: limit, cursor.
runShopifyQLA
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.
Inputs: query (required).
setMetafieldC
Set a metafield on a resource
Inputs: ownerId (required), namespace (required), key (required), value (required), +1 more.
updateProductC
Update an existing product
Inputs: id (required), title, description, vendor, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 52 tools
Many tools target distinct resources, but several analytics tools overlap (e.g., getConversionReport vs getProductAnalytics, getSalesReport vs getFinancialSummary). The presence of getCustomReport as an alias for runShopifyQL adds confusion. Overall, agents can distinguish most tools but may struggle with similar analytics functions.
Most tools follow a consistent verb_noun pattern (createProduct, getProduct, listProducts, updateProduct). However, there are minor inconsistencies: getAbandonmentReport (not getAbandonedCheckoutsReport), runShopifyQL (verb_noun but no underscore), and setMetafield (set instead of create/update). Overall, naming is predictable.
52 tools is on the high side for an MCP server, but Shopify's extensive API justifies many operations. The count is borderline: it covers many areas but feels heavy. Some tools could be merged (e.g., multiple analytics reports), but each addresses a distinct use case.
The tool set covers core CRUD for products, orders, customers, and more, but lacks delete operations (e.g., deleteProduct, deleteOrder). Missing order lifecycle actions like cancelOrder or capture. Analytics are thorough. Notable gaps in basic write operations hinder full lifecycle management.
Related MCP Connectors
Shopify MCP Pack — wraps the Shopify Admin REST API (2024-01)
Hosted Shopify MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
First-party unsampled Shopify analytics MCP — sessions, attribution, funnels, leaks. 26 tools.
MCP server for Shoprocket — orders, products, customers, store stats and discount codes.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA production-grade MCP server and CLI tool that enables AI agents to manage Shopify stores through 49 built-in tools across products, orders, inventory, and analytics. It supports natural language workflows for tasks like inventory tracking, customer support, and sales reporting.888 npm18MIT
- AlicenseAqualityDmaintenanceFree, open-source MCP server that connects Claude to the Shopify Partner API. 25 tools for revenue analytics, churn analysis, retention cohorts, merchant health scoring, conversion funnels, revenue forecasting, and growth velocity.2514MIT
- AlicenseNot gradedqualityCmaintenanceA comprehensive MCP server for Shopify Admin API integration, enabling AI assistants to manage products, orders, customers, inventory, analytics, and more through natural language.25 npm20MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for the Shopify Admin API, enabling 36 tools for managing products, orders, customers, inventory, fulfillments, collections, analytics, marketing, content, and webhooks.13 npm1MIT