(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.
- Product Management: Search and retrieve product information
- Customer Management: Load customer data and manage customer tags
- Order Management: Advanced order querying and filtering
- GraphQL Integration: Direct integration with Shopify's GraphQL Admin API
- Comprehensive Error Handling: Clear error messages for API and authentication issues
- Node.js (version 16 or higher)
- Shopify Custom App Access Token (see setup instructions below)
To use this MCP server, you'll need to create a custom app in your Shopify store:
- From your Shopify admin, go to Settings > Apps and sales channels
- Click Develop apps (you may need to enable developer preview first)
- Click Create an app
- Set a name for your app (e.g., "Shopify MCP Server")
- Click Configure Admin API scopes
- Select the following scopes:
read_products
,write_products
read_customers
,write_customers
read_orders
,write_orders
- Click Save
- Click Install app
- Click Install to give the app access to your store data
- After installation, you'll see your Admin API access token
- Copy this token - you'll need it for configuration
Add this to your claude_desktop_config.json
:
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"shopify-mcp",
"--accessToken",
"<YOUR_ACCESS_TOKEN>",
"--domain",
"<YOUR_SHOP>.myshopify.com"
]
}
}
}
Locations for the Claude Desktop config file:
- MacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%/Claude/claude_desktop_config.json
If you prefer to use environment variables instead of command-line arguments:
-
Create a
.env
file with your Shopify credentials:SHOPIFY_ACCESS_TOKEN=your_access_token MYSHOPIFY_DOMAIN=your-store.myshopify.com
-
Run the server with npx:
npx shopify-mcp-server
If you want to install the package globally:
npm install -g shopify-mcp-server
Then run it:
shopify-mcp-server --accessToken=<YOUR_ACCESS_TOKEN> --domain=<YOUR_SHOP>.myshopify.com
-
get-products
- Get all products or search by title
- Inputs:
searchTitle
(optional string): Filter products by titlelimit
(number): Maximum number of products to return
-
get-product-by-id
- Get a specific product by ID
- Inputs:
productId
(string): ID of the product to retrieve
-
get-customers
- Get customers or search by name/email
- Inputs:
searchQuery
(optional string): Filter customers by name or emaillimit
(optional number, default: 10): Maximum number of customers to return
-
update-customer
- Update a customer's information
- Inputs:
id
(string, required): Shopify customer ID (numeric ID only, like "6276879810626")firstName
(string, optional): Customer's first namelastName
(string, optional): Customer's last nameemail
(string, optional): Customer's email addressphone
(string, optional): Customer's phone numbertags
(array of strings, optional): Tags to apply to the customernote
(string, optional): Note about the customertaxExempt
(boolean, optional): Whether the customer is exempt from taxesmetafields
(array of objects, optional): Customer metafields for storing additional data
-
get-customer-orders
- Get orders for a specific customer
- Inputs:
customerId
(string, required): Shopify customer ID (numeric ID only, like "6276879810626")limit
(optional number, default: 10): Maximum number of orders to return
-
get-orders
- Get orders with optional filtering
- Inputs:
status
(optional string): Filter by order statuslimit
(optional number, default: 10): Maximum number of orders to return
-
update-order
- Update an existing order with new information
- Inputs:
id
(string, required): Shopify order IDtags
(array of strings, optional): New tags for the orderemail
(string, optional): Update customer emailnote
(string, optional): Order notescustomAttributes
(array of objects, optional): Custom attributes for the ordermetafields
(array of objects, optional): Order metafieldsshippingAddress
(object, optional): Shipping address information
If you encounter issues, check Claude Desktop's MCP logs:
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
MIT