Two behaviours are worth knowing before you start. Creating a product with inline options registers the values but produces a single default variant, so the real variants are a second call with the standalone-variant strategy. And cancelling an order is irreversible - reason and restock are required arguments, not defaults you can shrug at.
A full-coverage Shopify admin server. It speaks the GraphQL Admin API and covers the write side as well as the read side, with cursor pagination, sort keys and raw Shopify query syntax available on every list call.
- Products: list and search, read one in full, create, update, delete, and manage options and variants in bulk
- Customers: list, read, create, update, delete, merge two records, and create, update or delete an address
- Orders: filtered listing, smart lookup by order name, numeric ID or GID, update, cancel, close or reopen, and mark as paid
- Fulfillment and money: create a fulfillment with tracking, create a full or partial refund with restocking, and turn a draft order into a real one
- Metafields on any resource - read, set up to 25 at once, delete
- Inventory quantities set per location, and tags added or removed on any taggable resource
Node.js version 18 or higher, and a Shopify store with an app you control. Apps created from January 2026 use OAuth client credentials - the server exchanges the client ID and secret for an access token and refreshes it before it expires; older apps can still pass a static access token. Scopes needed are read and write on products, customers and orders. Credentials go on the command line or in SHOPIFY_CLIENT_ID, SHOPIFY_CLIENT_SECRET and MYSHOPIFY_DOMAIN. The package is shopify-mcp - a differently named package will reject the command-line arguments.
One command plus a key — npx shopify-mcp, then supply credentials
