Shopify MCP server
Products, customers, and orders in the Shopify store they connected.
How it connects
New to MCP? What is an MCP server?
- Runs on
- Statio's runtime
- Connects with
- Credentials you paste in once: Admin API Access Token, Store Domain
- May connect to
*.myshopify.com- Category
- Payments
What it does
This server reads and edits one store's products, customers and orders through Shopify's GraphQL Admin API. It is shopify-mcp, an MIT-licensed community package on npm, and Shopify does not maintain it. Statio runs version 1.0.8 of it with your store's Admin API token. Shopify's own MCP servers are built for other jobs: the Dev MCP server (@shopify/dev-mcp) runs locally and connects to Shopify's developer resources, and the Storefront and Customer Accounts servers are for shopping agents talking to a storefront.
Tools
The package lists 14 tools. They don't set read-only or destructive hints, so the last column is judged from the GraphQL query or mutation each one sends.
| Tool | What it does | Reads or changes |
|---|---|---|
get-products | Lists products, or searches them by title. | Reads |
get-product-by-id | Gets one product with its variants. | Reads |
create-product | Creates a product, as a draft unless you set a status. With options, Shopify makes one default variant priced at $0. | Changes |
update-product | Edits title, description, handle, status, tags, SEO, metafields and collections. New tags replace the old ones. | Changes |
manage-product-variants | Creates or updates variants in bulk, including price, compare-at price, SKU and inventory tracking. | Changes |
manage-product-options | Creates, renames or deletes product options such as Size and Color, and adds or removes their values. | Changes |
delete-product | Deletes a product. This can't be undone. | Changes |
delete-product-variants | Deletes one or more variants from a product. | Changes |
get-customers | Lists customers, or searches by name or email. Returns emails, phone numbers and addresses. | Reads |
update-customer | Edits a customer's name, email, phone, tags, note, tax-exempt flag and metafields. | Changes |
get-customer-orders | Lists one customer's orders. | Reads |
get-orders | Lists orders, optionally filtered by status, with customer email and shipping address. | Reads |
get-order-by-id | Gets one order by its full ID. | Reads |
update-order | Edits an order's tags, email, note, custom attributes, metafields and shipping address. | Changes |
Each tool needs an Admin API access scope on the token. The product reads need read_products and the product writes write_products. get-customers needs read_customers and update-customer needs write_customers. The three order reads need read_orders and update-order needs write_orders. Shopify's order scopes cover orders from the last 60 days. Older orders need read_all_orders, which Shopify has to approve.
Set it up
Directly
The package needs your *.myshopify.com domain and either a static Admin API access token or an app's client ID and secret. The token route works for legacy custom apps, which Shopify stopped letting merchants create on January 1, 2026. A new app comes from the Dev Dashboard and gives you a client ID and secret instead. The package exchanges those for a token through Shopify's client credentials grant and refreshes it before the 24 hours run out. That grant only works when the app and the store belong to the same Shopify organization.
Either way, give the app only the scopes your agent needs. In Claude Code, with a version pin:
claude mcp add shopify \
-e SHOPIFY_CLIENT_ID=<client id> \
-e SHOPIFY_CLIENT_SECRET=<client secret> \
-e MYSHOPIFY_DOMAIN=your-store.myshopify.com \
-- npx -y shopify-mcp@1.0.8For a legacy app, swap the two client variables for SHOPIFY_ACCESS_TOKEN=shpat_.... In Cursor's mcp.json:
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": ["-y", "shopify-mcp@1.0.8"],
"env": {
"SHOPIFY_ACCESS_TOKEN": "shpat_...",
"MYSHOPIFY_DOMAIN": "your-store.myshopify.com"
}
}
}
}Both put a store credential in a file on your machine. How to keep API keys out of your AI agent's reach covers why that matters, and How to pin MCP server versions covers the pin. The general client steps are in How to add MCP servers to Claude Code and How to set up MCP servers in Cursor.
Through Statio
Install Shopify from the catalog, open the server's Credentials and add the Admin API access token and your store domain. Statio's entry takes a static shpat_ token, so you need one from a legacy custom app. A token from the client credentials grant expires after 24 hours and would stop working the next day. Then grant tools under Permissions. Nothing is callable until you do.
Let the desktop app write the Claude Code and Cursor configs, or follow Connect a client to do it by hand. When a granted tool is missing, the client is usually still running an old session; How to debug an MCP server that won't connect has the rest.
What to hold back
Two layers limit a Shopify agent. The token's scopes set what the API will accept at all, and per-tool grants pick tools within that. A reporting agent should get a token with only the read_* scopes, so a mistake in its grants can't turn into a write.
A merchandising agent that writes product copy needs get-products, get-product-by-id and update-product. Keep from it:
delete-productanddelete-product-variants. A deleted product is gone, along with its variants and the URL customers and ads link to.manage-product-variants, which sets prices. An agent asked to "clean up the variants" can reprice a product to $0, and a live product sells at that price until someone notices.update-productif it shouldn't publish. SettingstatustoACTIVEputs a draft in front of shoppers.
A support agent that looks up orders needs get-orders, get-order-by-id, get-customers and get-customer-orders. Think hard before adding writes:
update-ordercan change the shipping address and email on an order. Order notes and customer notes are text that customers or staff wrote, and an agent that reads "please send it to this new address instead" in one could redirect a parcel before it ships.update-customercan change a customer's email and set them tax-exempt.
The customer and order reads return personal data: names, emails, phone numbers and addresses. An agent that holds those reads and can also send messages or reach the web elsewhere can leak them, as The lethal trifecta: how AI agents leak data explains. MCP permissions shows how grants on single tools work.
Questions
What Statio adds
- You choose which of its tools each agent may call. A tool you hold back is removed from that agent's tool list, and a call to it is refused.
- The credentials stay encrypted in Statio, so they never sit in an agent config file.
- Every call is recorded with the agent that made it, when, how long it took and whether it succeeded.
- The outbound list above is enforced outside the server's container, so it cannot reach any other host.
Lock down your first tool in minutes.
Three MCP servers, one of them hosted, and 10,000 calls a month, free and without a card. If you outgrow it the next plan is $19.
Two steps: create your account, then install the desktop app on each machine that runs an AI client.
- Keys encrypted at rest, never handed to an agent
- Cancel anytime, nothing is deleted
- How Statio handles credentials