by GeLi2001
MCP server for Shopify api, usable on mcp hosts such as Claude and Cursor
# Add to your Claude Code skills
git clone https://github.com/GeLi2001/shopify-mcpGuides for using mcp servers skills like shopify-mcp.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
(please leave a star if you like!)
MCP Server for Shopify API, enabling interaction with store data through GraphQL API. This server provides tools for managing products, customers, orders, and more.
📦 Package Name: shopify-mcp
🚀 Command: shopify-mcp (NOT shopify-mcp-server)
This server supports two authentication methods:
As of January 1, 2026, new Shopify apps are created in the Dev Dashboard and use OAuth client credentials instead of static access tokens.
read_products, write_productsread_customers, write_customersread_orders, write_ordersThe server will automatically exchange these for an access token and refresh it before it expires (tokens are valid for ~24 hours).
If you have an existing custom app with a static shpat_ access token, you can still use it directly.
Client Credentials (recommended):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"shopify-mcp",
"--clientId",
"<YOUR_CLIENT_ID>",
"--clientSecret",
"<YOUR_CLIENT_SECRET>",
"--domain",
"<YOUR_SHOP>.myshopify.com"
]
}
}
}
Static Access Token (legacy):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"shopify-mcp",
"--accessToken",
"<YOUR_ACCESS_TOKEN>",
"--domain",
"<YOUR_SHOP>.myshopify.com"
]
}
}
}
Locations for the Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%/Claude/claude_desktop_config.jsonClient Credentials:
claude mcp add shopify -- npx shopify-mcp \
--clientId YOUR_CLIENT_ID \
--clientSecret YOUR_CLIENT_SECRET \
--domain your-store.myshopify.com
Static Access Token (legacy):
claude mcp add shopify -- npx shopify-mcp \
--accessToken YOUR_ACCESS_TOKEN \
--domain your-store.myshopify.com
If you prefer to use environment variables instead of command-line arguments:
Create a .env file with your Shopify credentials:
Client Credentials:
SHOPIFY_CLIENT_ID=your_client_id
SHOPIFY_CLIENT_SECRET=your_client_secret
MYSHOPIFY_DOMAIN=your-store.myshopify.com
Static Access Token (legacy):
SHOPIFY_ACCESS_TOKEN=your_access_token
MYSHOPIFY_DOMAIN=your-store.myshopify.com
Run the server with npx:
npx shopify-mcp
If you want to install the package globally:
npm install -g shopify-mcp
Then run it:
shopify-mcp --clientId=<ID> --clientSecret=<SECRET> --domain=<YOUR_SHOP>.myshopify.com
--apiVersion: Specify the Shopify API version (default: 2026-01). Can also be set via SHOPIFY_API_VERSION environment variable.⚠️ Important: If you see errors about "SHOPIFY_ACCESS_TOKEN environment variable is required" when using command-line arguments, you might have a different package installed. Make sure you're using shopify-mcp, not shopify-mcp-server.
All list query tools (get-products, get-customers, get-orders, get-customer-orders) support:
after / before (cursor strings), with pageInfo in the response (hasNextPage, hasPreviousPage, startCursor, endCursor)sortKey (enum specific to each resource) and reverse (boolean)query or searchQuery parameter accepting Shopify query syntaxget-products
searchTitle (string, optional): Filter products by title (wraps in title:*...*)limit (number, default: 10): Maximum number of products to returnquery (string, optional): Raw Shopify query string (e.g. "status:active vendor:Nike tag:sale")sortKey (string, optional): One of CREATED_AT, ID, INVENTORY_TOTAL, PRODUCT_TYPE, PUBLISHED_AT, RELEVANCE, TITLE, UPDATED_AT, VENDORreverse (boolean, optional): Reverse the sort orderafter / before (string, optional): Pagination cursorsget-product-by-id
productId (string, required): Shopify product GIDproductType, descriptionHtml, seo, options (with optionValues), media (images), variants, collections, tags, vendor, price range, inventorycreate-product
productOptions, Shopify registers all option values but only creates one default variant (first value of each option, price $0). Use manage-product-variants with strategy: REMOVE_STANDALONE_VARIANT afterward to create all real variants with prices.title (string, required): Title of the productdescriptionHtml (string, optional): Description with HTMLhandle (string, optional): URL slug. Auto-generated from title if omittedvendor (string, optional): Vendor of the productproductType (string, optional): Type of the producttags (array of strings, optional): Product tagsstatus (string, optional): "ACTIVE", "DRAFT", or "ARCHIVED". Default "DRAFT"seo (object, optional): { title, description } for search enginesmetafields (array of objects, optional): Custom metafields (namespace, key, value, type)productOptions (array of objects, optional): Options to create inline, e.g. [{ name: "Size", values: [{ name: "S" }, { name: "M" }] }]. Max 3 options.collectionsToJoin (array of strings, optional): Collection GIDs to add the product toupdate-product
id (string, required): Shopify product GIDtitle (string, optional): New titledescriptionHtml (string, optional): New descriptionhandle (string, optional): New URL slugvendor (string, optional): New vendorproductType (string, optional): New product typetags (array of strings, optional): New tags (overwrites existing)status (string, optional): "ACTIVE", "DRAFT", or "ARCHIVED"seo (object, optional): { title, description } for search enginesmetafields (array of objects, optional): Metafields to set or updatecollectionsToJoin (array of strings, optional): Collection GIDs to add the product tocollectionsToLeave (array of strings, optional): Collection GIDs to remove the product fromredirectNewHandle (boolean, optional): If true, old handle redirects to new handledelete-product
id (string, required): Shopify product GIDmanage-product-options
productId (string, required): Shopify product GIDaction (string, required): "create", "update", or "delete"variantStrategy (string, optional): "LEAVE_AS_IS" (default) or "CREATE" — controls whether new variant combinations are generated when adding optionsaction: "create":
options (array, required): Options to create, e.g. [{ name: "Size", values: ["S", "M", "L"] }]action: "update":
optionId (string, required): Option GID to updatename (string, optional): New name for the optionposition (number, optional): New positionvaluesToAdd (array of strings, optional): Values to addvaluesToDelete (array of strings, optional): Value GIDs to removeaction: "delete":
optionIds (array of strings, required): Option GIDs to deletemanage-product-variants
productId (stri