io.github.den-indance/shopify-mcp-pro
Shopify MCP server with real analytics (ShopifyQL), auto-refresh auth, and Shopify API 2026-04.
Open source Open in the app JSON README (API)
About
Shopify MCP server with real analytics (ShopifyQL), auto-refresh auth, and Shopify API 2026-04.
Details
- Kind
- MCP servers
- Topic
- Marketing & analytics
- Publisher
- den-indance
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 2.0.5
- Stars
- 1
- Forks
- 1
- Last push
- 2026-05-22T07:21:14Z
- Repository state
- ativo
- Language
- JavaScript
- License
- MIT
- Added
- 2026-08-29 03:02:41
- Updated
- 2026-08-29 03:02:41
- Origin id
io.github.den-indance/shopify-mcp-pro
README
# Shopify MCP Pro
[](https://www.npmjs.com/package/@den.dance/shopify-mcp-pro)
[](https://smithery.ai/servers/den-indance/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](https://den.dance/).
---
## 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
---
## License
MIT