shopify-mcp
The shopify-mcp server provides comprehensive Shopify Admin API management, enabling full CRUD operations across core Shopify resources, plus optional AI-driven product image generation via ComfyUI.
Products & Variants
List, get, create, update, delete products; upload/attach images
Manage variants: bulk create/update/delete, reorder, add options (Size, Color, etc.)
Orders
List and retrieve orders with line items
Draft Orders
List, get, create, update, complete, and delete draft orders
Customers
List customers with query filters
Inventory & Locations
Set absolute on-hand inventory at a specific location; list store locations
Metafields
Upsert, list, and delete metafields on any supported resource (products, variants, collections, customers, orders, shop)
Collections & Tagging
Full CRUD for collections; add/remove products from manual collections; add/remove tags on any taggable resource
Webhooks
List, get, create, update, and delete webhook subscriptions
Metaobjects
Discover metaobject definitions; list, get, create, update, and delete metaobjects
Fulfillment
List/get fulfillment orders and fulfillment records; create fulfillments (partial supported, with tracking and customer notifications); update tracking; cancel fulfillments
Analytics
Run ShopifyQL queries, returning results as ASCII tables or raw JSON
ComfyUI Bridge (requires COMFYUI_URL configured)
Generate an AI image and create a new Shopify product in one call
Generate an AI image and attach it to an existing product
Refine a product's featured image via img2img
Bulk regenerate images for all products matching a query
Provides comprehensive Shopify Admin API integration with tools for product management, inventory control, order fulfillment, customer management, collections, webhooks, metafields, draft orders, and analytics through ShopifyQL queries.
shopify-mcp
MCP server for Shopify. Full Admin GraphQL API tooling plus an AI-driven product creation bridge via ComfyUI image generation.
The pitch
Every other Shopify MCP is a plain Admin API wrapper. This one pairs with @miller-joe/comfyui-mcp so you can say things like:
"Create a product called 'Nebula Dreamer'. Generate a cosmic abstract image for it, description matching the vibe, tagged astrology, status draft."
Claude then runs ComfyUI, gets an image back, creates the Shopify product, and attaches the image, all in one call.
Related MCP server: comfyui-mcp
Install
# npx, no install
npx @miller-joe/shopify-mcp \
--shopify-store your-store.myshopify.com \
--shopify-access-token shpat_xxx
# Docker
docker run -p 9110:9110 \
-e SHOPIFY_STORE=your-store.myshopify.com \
-e SHOPIFY_ACCESS_TOKEN=shpat_xxx \
-e COMFYUI_URL=http://comfyui:8188 \
ghcr.io/miller-joe/shopify-mcp:latestConnect an MCP client
claude mcp add --transport http shopify http://localhost:9110/mcpOr point your MCP gateway at the Streamable HTTP endpoint.
Configuration
CLI flag | Env var | Default | Notes |
|
| (required) |
|
|
| (required) | Admin API token ( |
|
|
| GraphQL Admin API version |
|
|
| Bind host (HTTP mode only) |
|
|
| Bind port (HTTP mode only) |
|
| (unset) | Speak MCP over stdio instead of HTTP. Use when launched as a subprocess by a stdio-first MCP client (Claude Desktop, mcp-inspector). |
|
| (optional) | Enables bridge tools when set |
|
| same as | External URL used for image references passed to Shopify |
(no flag) |
|
| Default checkpoint for bridge tools |
Transports
The server speaks streamable HTTP by default (great for Claude Code, MetaMCP, raw fetch). Pass --stdio (or set MCP_TRANSPORT=stdio) to switch into stdio mode, which is what stdio-first clients like Claude Desktop and the MCP Inspector expect:
// claude_desktop_config.json
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": ["-y", "@miller-joe/shopify-mcp", "--stdio"],
"env": {
"SHOPIFY_STORE": "my-store.myshopify.com",
"SHOPIFY_ACCESS_TOKEN": "shpat_…"
}
}
}
}Getting a Shopify access token
Easy path, existing dev store: Shopify Admin → Apps → Develop apps → Create custom app → enable relevant Admin API scopes (write_products, read_orders, write_inventory, read_customers) → install → copy the admin API access token (starts with shpat_).
For new apps (post-Jan 2026): legacy custom-app tokens are deprecated for freshly-created apps. Use the Dev Dashboard token-exchange flow once to obtain a working token, then supply it here. Multi-tenant OAuth is on the roadmap.
Tools
Core Admin
Tool | Description |
| Paginated product search with Shopify query syntax |
| Fetch one product with variants, images, media |
| Create a product (default DRAFT); optionally attach images |
| Update title, description, tags, status, etc. |
| Attach a public image URL to an existing product |
| List orders, newest first, with query filters |
| Fetch one order with line items |
| Set absolute on-hand inventory at a location |
| List store locations (for inventory ops) |
| List customers with query filters |
Metafields
Tool | Description |
| Upsert a metafield on any |
| List metafields for a resource, optionally filtered by namespace |
| Delete a metafield by (ownerId, namespace, key) |
Draft orders
Tool | Description |
| List draft orders with Shopify query filters |
| Fetch one draft order with its line items |
| Create a draft order. Line items can be variant refs or custom (title + price). |
| Update customer, line items, tags, note, email |
| Convert a draft order to a real order. |
| Delete a non-completed draft order |
Webhooks
Tool | Description |
| List webhook subscriptions; filter by topic(s) |
| Fetch a single subscription |
| Subscribe an HTTPS callback URL to a topic (e.g. |
| Change callback URL, format, or field/metafield filters |
| Delete a subscription |
Metaobjects
Tool | Description |
| Discover metaobject types (schemas) on the store, including field definitions |
| List metaobjects of a given type |
| Fetch one metaobject with all its fields |
| Create a metaobject (type must already exist as a definition). Supports |
| Upsert fields, change handle, toggle publishable status |
| Delete a metaobject |
Fulfillment
Tool | Description |
| List an order's fulfillment orders (one per shipping location), with remaining quantities per line item |
| Fetch a single fulfillment order |
| Fetch a single fulfillment (shipment record) with tracking info |
| Mark fulfillment orders (or specific quantities) as fulfilled. Optionally attach tracking and notify the customer. |
| Update carrier/number/url on an existing fulfillment |
| Cancel a fulfillment by ID |
Partial fulfillment is supported. Pass specific fulfillmentOrderLineItems with quantity per line, or omit the array to fulfill everything on the fulfillment order.
Variants and product options
Tool | Description |
| List all variants of a product with selected options, price, SKU, inventory |
| Bulk-create variants (up to 100) with option values, price, SKU, compareAtPrice, initial inventory |
| Bulk-update variant price, compareAtPrice, SKU, barcode, taxable, inventoryPolicy, option values |
| Bulk-delete variants from a product |
| Set 1-indexed positions for variants |
| Add options (Size / Color / etc.) with their possible values. Up to 3 options per product. |
For an entirely new product, creating the first real variant requires strategy="REMOVE_STANDALONE_VARIANT" to replace the auto-generated "Default Title" variant.
Collections and tagging
Tool | Description |
| List collections with query filters |
| Fetch one collection with its products |
| Create a manual collection, optionally seeded with products |
| Update title, description, or handle |
| Delete a collection |
| Add products to a manual collection (async job on Shopify's side) |
| Remove products from a manual collection |
| Add tags to any taggable resource (Product, Order, Customer, DraftOrder, Collection) |
| Remove tags from a taggable resource |
Analytics (ShopifyQL)
Tool | Description |
| Run a ShopifyQL query and render the result as an ASCII table. Pass |
Examples:
FROM sales SHOW total_sales BY day SINCE -30d TIMESERIESFROM products SHOW product_title, quantity_sold BY product_id SINCE -7d ORDER BY quantity_sold DESC LIMIT 10
ComfyUI bridge (when COMFYUI_URL is configured)
Tool | Description |
| Generate an image and create a product with it, in one call. Title and description derive from the prompt if not given. |
| Generate an image and attach it to an existing product. |
| Run img2img on a product's featured image (or an explicit URL) and attach the refined result. Tune |
| For all products matching a query, run the generator with a templated prompt and attach fresh images. |
Template placeholders for bulk_regenerate_images: {title}, {handle}.
Example: the whole pitch in one call
Claude, use generate_and_create_product:
prompt: "minimalist sunset mountain silhouette, warm gradient, vector style"
title: "Mountain Sunset Poster"
status: DRAFT
tags: ["posters", "nature", "minimalist"]ComfyUI generates the image, Shopify creates the product with the image attached, and you get the product ID and image URL back. One prompt, one call, real listing.
Architecture
┌────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ MCP client │────▶│ shopify-mcp │────▶│ Shopify Admin │
│ (Claude etc.) │◀────│ (this server) │◀────│ GraphQL API │
└────────────────┘ └────────┬─────────┘ └─────────────────┘
│
│ (bridge tools only)
▼
┌──────────────────┐
│ ComfyUI │
│ (txt2img) │
└──────────────────┘Bridge tools call ComfyUI directly over HTTP, get an image URL, and pass it to Shopify's productCreateMedia mutation. Shopify fetches and hosts the image on its CDN.
Development
git clone https://github.com/miller-joe/shopify-mcp
cd shopify-mcp
npm install
npm run dev # hot reload via tsx watch
npm run build
npm run typecheck
npm testRequires Node 20+.
Roadmap
Shipped:
Core products CRUD plus image attach
Orders read, Inventory set + locations, Customers read
ComfyUI bridge:
generate_and_create_product,generate_product_image,bulk_regenerate_imagesMetafields:
set_metafield,list_metafields,delete_metafieldDraft orders: create / update / complete / delete / list / get
Collections and tagging: CRUD, product add/remove,
add_tags/remove_tagsVariants and product options: bulk create / update / delete / reorder plus
add_product_optionsFulfillment: list/get fulfillment orders, create fulfillment (partial supported), update tracking, cancel
Webhooks: list / get / create / update / delete
Metaobjects: definitions list plus metaobject CRUD
ShopifyQL analytics:
run_shopifyql_querywith ASCII-table renderingImage refinement bridge:
refine_product_image(ComfyUI img2img on product images)
Planned:
OAuth token-exchange flow for new-app auth.
License
MIT © Joe Miller
Support
If this saves you time, consider supporting development:
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/miller-joe/shopify-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server