Server data from the Official MCP Registry
MCP server for Shopify Admin API with a ComfyUI bridge for AI product image generation.
MCP server for Shopify Admin API with a ComfyUI bridge for AI product image generation.
Valid MCP server (1 strong, 4 medium validity signals). 3 known CVEs in dependencies (0 critical, 3 high severity) Package registry verified. Imported from the Official MCP Registry.
5 files analyzed · 4 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Set these up before or after installing:
Environment variable: SHOPIFY_STORE
Environment variable: SHOPIFY_ACCESS_TOKEN
Environment variable: SHOPIFY_API_VERSION
Environment variable: COMFYUI_URL
Environment variable: COMFYUI_PUBLIC_URL
Environment variable: COMFYUI_DEFAULT_CKPT
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-miller-joe-shopify-mcp": {
"env": {
"COMFYUI_URL": "your-comfyui-url-here",
"SHOPIFY_STORE": "your-shopify-store-here",
"COMFYUI_PUBLIC_URL": "your-comfyui-public-url-here",
"SHOPIFY_API_VERSION": "your-shopify-api-version-here",
"COMFYUI_DEFAULT_CKPT": "your-comfyui-default-ckpt-here",
"SHOPIFY_ACCESS_TOKEN": "your-shopify-access-token-here"
},
"args": [
"-y",
"@miller-joe/shopify-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
MCP server for Shopify — Admin API tooling plus AI-driven product creation via ComfyUI image generation.
Part of the MCP Server Series.
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."
...and Claude runs ComfyUI → gets an image → creates the Shopify product → attaches the image, in one call.
# 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:latest
claude mcp add --transport http shopify http://localhost:9110/mcp
Or point your MCP gateway at the Streamable HTTP endpoint.
| CLI flag | Env var | Default | Notes |
|---|---|---|---|
--shopify-store | SHOPIFY_STORE | (required) | my-store or my-store.myshopify.com |
--shopify-access-token | SHOPIFY_ACCESS_TOKEN | (required) | Admin API token (shpat_…) |
--shopify-api-version | SHOPIFY_API_VERSION | 2026-04 | GraphQL Admin API version |
--host | MCP_HOST | 0.0.0.0 | Bind host |
--port | MCP_PORT | 9110 | Bind port |
--comfyui-url | COMFYUI_URL | (optional) | Enables bridge tools when set |
--comfyui-public-url | COMFYUI_PUBLIC_URL | same as --comfyui-url | External URL used for image references passed to Shopify |
| — | COMFYUI_DEFAULT_CKPT | sd_xl_base_1.0.safetensors | Default checkpoint for bridge tools |
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 (v0.2).
| Tool | Description |
|---|---|
list_products | Paginated product search with Shopify query syntax |
get_product | Fetch one product with variants, images, media |
create_product | Create a product (default DRAFT); optionally attach images |
update_product | Update title, description, tags, status, etc. |
upload_product_image | Attach a public image URL to an existing product |
list_orders | List orders, newest first, with query filters |
get_order | Fetch one order with line items |
set_inventory_quantity | Set absolute on-hand inventory at a location |
list_locations | List store locations (for inventory ops) |
list_customers | List customers with query filters |
| Tool | Description |
|---|---|
set_metafield | Upsert a metafield on any HasMetafields resource (product, variant, collection, customer, order, shop, …) |
list_metafields | List metafields for a resource, optionally filtered by namespace |
delete_metafield | Delete a metafield by (ownerId, namespace, key) |
| Tool | Description |
|---|---|
list_draft_orders | List draft orders with Shopify query filters |
get_draft_order | Fetch one draft order with its line items |
create_draft_order | Create a draft order; line items can be variant refs or custom (title + price) |
update_draft_order | Update customer, line items, tags, note, email |
complete_draft_order | Convert a draft order to a real order; paymentPending skips capture |
delete_draft_order | Delete a non-completed draft order |
| Tool | Description |
|---|---|
list_webhooks | List webhook subscriptions; filter by topic(s) |
get_webhook | Fetch a single subscription |
create_webhook | Subscribe an HTTPS callback URL to a topic (e.g. ORDERS_CREATE) |
update_webhook | Change callback URL, format, or field/metafield filters |
delete_webhook | Delete a subscription |
| Tool | Description |
|---|---|
list_metaobject_definitions | Discover metaobject types (schemas) on the store, including field definitions |
list_metaobjects | List metaobjects of a given type |
get_metaobject | Fetch one metaobject with all its fields |
create_metaobject | Create a metaobject (type must already exist as a definition); supports ACTIVE/DRAFT status |
update_metaobject | Upsert fields, change handle, toggle publishable status |
delete_metaobject | Delete a metaobject |
| Tool | Description |
|---|---|
list_fulfillment_orders | List an order's fulfillment orders (one per shipping location), with remaining quantities per line item |
get_fulfillment_order | Fetch a single fulfillment order |
get_fulfillment | Fetch a single fulfillment (shipment record) with tracking info |
create_fulfillment | Mark fulfillment orders (or specific quantities) as fulfilled; optionally attach tracking + notify customer |
update_fulfillment_tracking | Update carrier/number/url on an existing fulfillment |
cancel_fulfillment | Cancel a fulfillment by ID |
Partial fulfillment is supported — pass specific fulfillmentOrderLineItems with quantity per line; omit the array to fulfill everything on the fulfillment order.
| Tool | Description |
|---|---|
list_variants | List all variants of a product with their selected options, price, SKU, inventory |
create_variants | Bulk-create variants (up to 100) with option values, price, SKU, compareAtPrice, initial inventory |
update_variants | Bulk-update variant price, compareAtPrice, SKU, barcode, taxable, inventoryPolicy, option values |
delete_variants | Bulk-delete variants from a product |
reorder_variants | Set 1-indexed positions for variants |
add_product_options | Add options (Size/Color/…) 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.
| Tool | Description |
|---|---|
list_collections | List collections with query filters |
get_collection | Fetch one collection with its products |
create_collection | Create a manual collection, optionally seeded with products |
update_collection | Update title, description, or handle |
delete_collection | Delete a collection |
add_products_to_collection | Add products to a manual collection (async job on Shopify's side) |
remove_products_from_collection | Remove products from a manual collection |
add_tags | Add tags to any taggable resource (Product, Order, Customer, DraftOrder, Collection) |
remove_tags | Remove tags from a taggable resource |
| Tool | Description |
|---|---|
run_shopifyql_query | Run a ShopifyQL query and render the result as an ASCII table. Pass raw=true for the raw JSON payload. |
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 10COMFYUI_URL is configured)| Tool | Description |
|---|---|
generate_and_create_product | Generate an image and create a product with it, in one call. Title/description derive from the prompt if not given. |
generate_product_image | Generate an image and attach it to an existing product. |
refine_product_image | Run img2img on a product's featured image (or an explicit URL) and attach the refined result. Tune denoise 0–1 for how far the result drifts from the source. |
bulk_regenerate_images | 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}.
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"]
Result: ComfyUI generates the image → Shopify product created with image attached → you get back the product ID and image URL. One prompt, one call, real listing.
┌────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 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.
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 test
Requires Node 20+.
generate_and_create_product, generate_product_image, bulk_regenerate_imagesset_metafield, list_metafields, delete_metafieldadd_tags / remove_tagsadd_product_optionsrun_shopifyql_query with ASCII-table renderingrefine_product_image (ComfyUI img2img on product images)MIT © Joe Miller
If this saves you time, consider supporting development:
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.