Skip to main content
Glama
den-indance

Shopify MCP Pro

Shopify MCP Pro

npm

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

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

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

{
  "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-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

  • 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:

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:

{
  "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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/den-indance/shopify-mcp-pro'

If you have feedback or need assistance with the MCP directory API, please join our Discord server