MCP Shopify Admin Server
Allows managing Shopify store operations including products, orders, customers, and inventory via the Shopify Admin API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Shopify Admin Server list my recent orders with status 'open'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Shopify Admin Server
An MCP (Model Context Protocol) server that exposes Shopify Admin API capabilities to LLMs like Claude.
Features
Products: List, get, create, and update products
Orders: List, get, fulfill, and cancel orders
Customers: List and get customer details
Inventory: Get inventory levels and adjust quantities
Related MCP server: shopify
Prerequisites
Node.js 18+
A Shopify store with Admin API access
An Admin API access token with the required scopes
Required API Scopes
Your Shopify Admin API access token needs these scopes:
read_products,write_productsread_orders,write_ordersread_customers,write_customersread_inventory,write_inventoryread_locations
Installation
Clone this repository:
git clone https://github.com/your-org/mcp-shopify-admin.git cd mcp-shopify-adminInstall dependencies:
npm installCreate a
.envfile with your Shopify credentials:cp .env.example .envEdit
.envwith your store domain and access token:SHOPIFY_STORE_DOMAIN=your-store.myshopify.com SHOPIFY_ACCESS_TOKEN=shpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Usage
With Claude Desktop
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"shopify": {
"command": "node",
"args": ["path/to/mcp-shopify-admin/src/index.js"],
"env": {
"SHOPIFY_STORE_DOMAIN": "your-store.myshopify.com",
"SHOPIFY_ACCESS_TOKEN": "shpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}With MCP Inspector
Test the server using the MCP Inspector:
npx @modelcontextprotocol/inspector node src/index.jsStandalone
Run the server directly (for debugging):
npm startAvailable Tools
Products
Tool | Description | Type |
| List products with filtering and pagination | Read |
| Get detailed product info by ID | Read |
| Create a new product | Write |
| Update an existing product | Write |
Orders
Tool | Description | Type |
| List orders with status filtering | Read |
| Get detailed order info by ID | Read |
| Create fulfillment for an order | Write |
| Cancel an order | Write |
Customers
Tool | Description | Type |
| List customers with search | Read |
| Get detailed customer info by ID | Read |
Inventory
Tool | Description | Type |
| Get inventory at locations | Read |
| Adjust inventory quantities | Write |
Response Formats
All tools support two response formats via the response_format parameter:
json(default): Structured JSON for programmatic usemarkdown: Human-readable formatted output
Examples
List Products
Use shopify_list_products to show me the first 10 productsGet Order Details
Use shopify_get_order with id "5123456789" and response_format "markdown"Update Inventory
Use shopify_update_inventory to add 50 units to inventory item "12345" at location "67890"Error Handling
The server provides clear error messages for common issues:
401 Unauthorized: Check your access token
403 Forbidden: Your token may lack required scopes
429 Rate Limited: Wait before making more requests
404 Not Found: The requested resource doesn't exist
License
MIT
Available Tools
49 toolscollection_create_executeExecute Collection CreationADestructive
Execute a previewed collection creation. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
collection_create_planPlan Collection CreationB
Plan creation of a new collection, optionally AUTOMATED via a rule_set. Use this when Shopify refuses to convert an existing manual collection: create an automated twin, then point downstream systems at it.
Inputs: store (required), title (required), handle, rule_set, +2 more.
collection_create_previewPreview Collection CreationBRead-onlyIdempotent
Preview a planned collection creation.
Inputs: operation_id (required), response_format.
collection_getGet CollectionARead-onlyIdempotent
Get one collection by numeric ID, full GID, or handle. Reports MANUAL vs AUTOMATED and the rule set.
Inputs: store (required), id, handle, response_format.
collection_listList CollectionsARead-onlyIdempotent
List collections in a store. Shows whether each collection is MANUAL (hand-picked products) or AUTOMATED (rule-based), plus its rules and product count. Only AUTOMATED collections propagate their membership to external product feeds such as the Meta catalog.
Inputs: store (required), limit, query, cursor, +1 more.
collection_update_executeExecute Collection UpdateADestructiveIdempotent
Execute a previewed collection update. Production stores require confirm_production: true. Note: Shopify may reject converting an existing manual collection to automated; if so, create a new automated collection with collection_create instead.
Inputs: operation_id (required), response_format, confirm_production.
collection_update_planPlan Collection UpdateA
Plan an update to a collection. The main use is converting a MANUAL collection into an AUTOMATED one by supplying a rule_set (e.g. TAG EQUALS 'or-cocktail-dresses'), which makes its membership visible to external product feeds like the Meta catalog. Staged: must be previewed then executed.
Inputs: store (required), id, title, handle, +2 more.
collection_update_previewPreview Collection UpdateARead-onlyIdempotent
Preview a planned collection update, showing current vs new state.
Inputs: operation_id (required), response_format.
customer_getGet CustomerARead-onlyIdempotent
Get detailed information about a specific customer including their address and recent orders.
Inputs: id (required), store (required), response_format.
customer_listList CustomersARead-onlyIdempotent
List customers from a Shopify store with optional search and pagination.
Inputs: store (required), limit, query, cursor, +1 more.
inventory_adjust_executeExecute Inventory AdjustmentADestructive
Execute a previewed inventory adjustment. This actually changes the inventory. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
inventory_adjust_planPlan Inventory AdjustmentA
Plan an inventory adjustment. Creates a staged operation that must be previewed and executed.
Inputs: store (required), adjustment (required), location_id (required), inventory_item_id (required), +2 more.
inventory_adjust_previewPreview Inventory AdjustmentARead-onlyIdempotent
Preview a planned inventory adjustment. Shows the before and after quantities.
Inputs: operation_id (required), response_format.
inventory_levelsGet Inventory LevelsARead-onlyIdempotent
Get inventory levels for products at specific locations. Can filter by location, product, or SKU.
Inputs: store (required), sku, limit, cursor, +3 more.
operation_cancelCancel Pending OperationAIdempotent
Cancel a pending operation that has not yet been executed. This is useful if you want to discard a planned operation.
Inputs: operation_id (required), response_format.
operation_listList Pending OperationsARead-onlyIdempotent
List all pending operations that are waiting for preview or execution. Operations expire after 30 minutes if not executed.
Inputs: response_format.
operation_statusGet Operation StatusARead-onlyIdempotent
Get detailed status of a specific operation including its current state, preview data, and result.
Inputs: operation_id (required), response_format.
order_cancel_executeExecute Order CancellationADestructive
Execute a previewed order cancellation. This actually cancels the order. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
order_cancel_planPlan Order CancellationA
Plan an order cancellation. This creates a staged operation that must be previewed and executed.
Inputs: store (required), order_id (required), reason, restock, +2 more.
order_cancel_previewPreview Order CancellationARead-onlyIdempotent
Preview a planned order cancellation. Shows what will happen.
Inputs: operation_id (required), response_format.
order_fulfill_executeExecute Order FulfillmentADestructive
Execute a previewed order fulfillment. This marks items as shipped. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
order_fulfill_planPlan Order FulfillmentA
Plan an order fulfillment. This creates a staged operation that must be previewed and executed.
Inputs: store (required), order_id (required), tracking_url, notify_customer, +3 more.
order_fulfill_previewPreview Order FulfillmentARead-onlyIdempotent
Preview a planned order fulfillment. Shows what will be shipped.
Inputs: operation_id (required), response_format.
order_getGet OrderARead-onlyIdempotent
Get detailed information about a specific order including line items, fulfillments, and customer info.
Inputs: id (required), store (required), response_format.
order_listList OrdersBRead-onlyIdempotent
List orders from a Shopify store with optional filtering by status and pagination.
Inputs: store (required), limit, cursor, status, +3 more.
product_bulk_update_executeExecute Bulk Product UpdateADestructive
Execute a previewed bulk product update. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
product_bulk_update_planPlan Bulk Product UpdateB
Plan a bulk update of multiple products. Each product can have different updates.
Inputs: store (required), updates (required), response_format.
product_bulk_update_previewPreview Bulk Product UpdateARead-onlyIdempotent
Preview all changes in a bulk product update operation.
Inputs: operation_id (required), response_format.
product_create_executeExecute Product CreationADestructive
Execute a previewed product creation. This actually creates the product. Requires prior preview. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
product_create_planPlan Product CreationA
Plan a new product creation. This creates a staged operation that must be previewed and then executed. No changes are made until execution.
Inputs: store (required), title (required), tags, status, +5 more.
product_create_previewPreview Product CreationARead-onlyIdempotent
Preview a planned product creation. Shows exactly what will be created. Must be called before execution.
Inputs: operation_id (required), response_format.
product_getGet ProductARead-onlyIdempotent
Get detailed information about a specific product including variants, images, and inventory.
Inputs: id (required), store (required), response_format.
product_listList ProductsARead-onlyIdempotent
List products from a Shopify store with optional filtering and pagination.
Inputs: store (required), limit, query, cursor, +1 more.
product_publications_getGet Product Publication StatusARead-onlyIdempotent
Show which sales channels a product is published to. Useful for diagnosing products that exist in a collection but never appear on the storefront or in an external feed.
Inputs: id (required), store (required), response_format.
product_publish_executeExecute Product PublishAIdempotent
Execute a previewed publish. Publishing is additive — it never unpublishes a product from a channel it is already on. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
product_publish_planPlan Product PublishAIdempotent
Plan publishing one or more products to one or more sales channels. Use publication_list to get channel IDs. Staged: must be previewed then executed.
Inputs: store (required), product_ids (required), publication_ids (required), response_format.
product_publish_previewPreview Product PublishARead-onlyIdempotent
Preview which products will change publication state, and on which channels.
Inputs: operation_id (required), response_format.
product_searchSearch ProductsARead-onlyIdempotent
Search for products using Shopify's search syntax.
Inputs: query (required), store (required), limit, response_format.
product_tags_add_executeExecute Add Product TagsAIdempotent
Execute a previewed additive tag operation via Shopify's tagsAdd mutation. Existing tags are never removed. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
product_tags_add_planPlan Add Product TagsAIdempotent
Plan an ADDITIVE tag operation across products. Uses Shopify's tagsAdd mutation, which appends tags without touching existing ones — safe to run concurrently and immune to the stale-snapshot tag loss that productUpdate causes. Use this instead of product_update whenever you only need to add tags. Supply either targets (per-product tags) or product_ids + tags (same tags for all).
Inputs: store (required), tags, targets, product_ids, +1 more.
product_tags_add_previewPreview Add Product TagsARead-onlyIdempotent
Preview an additive tag operation. Shows, per product, which tags are genuinely new versus already present.
Inputs: operation_id (required), response_format.
product_tags_remove_executeExecute Remove Product TagsADestructiveIdempotent
Execute a previewed subtractive tag operation via tagsRemove. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
product_tags_remove_planPlan Remove Product TagsADestructiveIdempotent
Plan a SUBTRACTIVE tag operation using Shopify's tagsRemove mutation. Removes only the named tags and leaves every other tag untouched.
Inputs: store (required), tags, targets, product_ids, +1 more.
product_tags_remove_previewPreview Remove Product TagsARead-onlyIdempotent
Preview a subtractive tag operation — shows which named tags are actually present per product.
Inputs: operation_id (required), response_format.
product_update_executeExecute Product UpdateADestructiveIdempotent
Execute a previewed product update. Requires prior preview. Production stores require confirm_production: true.
Inputs: operation_id (required), response_format, confirm_production.
product_update_planPlan Product UpdateA
Plan a product update. Creates a staged operation that must be previewed and executed. Only provided fields will be updated.
Inputs: id (required), store (required), tags, title, +5 more.
product_update_previewPreview Product UpdateARead-onlyIdempotent
Preview a planned product update. Shows the diff between current and new values.
Inputs: operation_id (required), response_format.
publication_listList Publications (Sales Channels)ARead-onlyIdempotent
List the store's publications (sales channels) — Online Store, Facebook & Instagram, Point of Sale, etc. You need a publication ID before you can publish a product to a channel.
Inputs: store (required), limit, response_format.
store_listList Configured StoresARead-onlyIdempotent
List all configured Shopify stores. Use this to see available stores before performing operations. Each store has a name, environment (production/staging/development), and default status.
Inputs: response_format.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 49 tools
Each tool has a distinct purpose, and the plan/preview/execute stages are clearly separated. Even overlapping tools like product_update_plan and product_tags_add_plan are explicitly disambiguated with guidance on when to use which.
Tool names consistently follow an object_verb pattern (e.g., product_list, collection_get) and the staged operations use a uniform resource_action_plan/preview/execute suffix. The few exceptions (inventory_levels, product_publications_get) are still clear and don't break the overall pattern.
At 49 tools, the server is over twice the recommended upper bound. The plan/preview/execute triple multiplies the count, but it still results in an overwhelming surface that will be difficult for agents to navigate efficiently.
The server covers the core Shopify domains well: products, collections, orders, customers, inventory, and publications. However, it lacks common operations like product/collection deletion, customer creation/update, and order creation, which are notable gaps for a full admin surface.
Maintenance
Related MCP Connectors
Connect AI to store orders, products and inventory with scoped access and human approvals.
Shopify store analysis and product-catalog extraction as agent tools.
AI-powered commerce API for luxury skincare shopping. Enables AI agents to search products, browse collections, manage shopping carts, and generate checkout URLs for the Regenique Elegance Shopify store.
Shopify MCP Pack — wraps the Shopify Admin REST API (2024-01)
Related MCP Servers
- AlicenseDqualityDmaintenanceEnables interaction with Shopify stores through the GraphQL Admin API. Supports product management, customer data, order queries, blog/article management, and store-wide search capabilities through natural language.159 npm2MIT
- AlicenseAqualityCmaintenanceEnables AI agents to read and write Shopify store data including products, orders, customers, inventory, and more via the Admin GraphQL API.2858 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables to manage Shopify store resources like products, orders, customers, inventory, and collections through natural language using the Shopify Admin API.MIT
- AlicenseNot gradedqualityCmaintenanceExposes Shopify Admin API as typed MCP tools for inventory, orders, revenue, and more, enabling Discord-based store management via AI agents.MIT