MCP Hub
Back to servers

shopify-mcp

MCP server for Shopify Admin API with a ComfyUI bridge for AI product image generation.

Registry
Updated
Apr 20, 2026

Quick Install

npx -y @miller-joe/shopify-mcp

shopify-mcp

MCP server for Shopify — Admin API tooling plus AI-driven product creation via ComfyUI image generation.

Part of the MCP Server Series.

GitHub Sponsors Ko-fi

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."

...and Claude runs ComfyUI → gets an image → creates the Shopify product → attaches the image, in one call.

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:latest

Connect an MCP client

claude mcp add --transport http shopify http://localhost:9110/mcp

Or point your MCP gateway at the Streamable HTTP endpoint.

Configuration

CLI flagEnv varDefaultNotes
--shopify-storeSHOPIFY_STORE(required)my-store or my-store.myshopify.com
--shopify-access-tokenSHOPIFY_ACCESS_TOKEN(required)Admin API token (shpat_…)
--shopify-api-versionSHOPIFY_API_VERSION2026-04GraphQL Admin API version
--hostMCP_HOST0.0.0.0Bind host
--portMCP_PORT9110Bind port
--comfyui-urlCOMFYUI_URL(optional)Enables bridge tools when set
--comfyui-public-urlCOMFYUI_PUBLIC_URLsame as --comfyui-urlExternal URL used for image references passed to Shopify
COMFYUI_DEFAULT_CKPTsd_xl_base_1.0.safetensorsDefault checkpoint for bridge tools

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 (v0.2).

Tools

Core Admin

ToolDescription
list_productsPaginated product search with Shopify query syntax
get_productFetch one product with variants, images, media
create_productCreate a product (default DRAFT); optionally attach images
update_productUpdate title, description, tags, status, etc.
upload_product_imageAttach a public image URL to an existing product
list_ordersList orders, newest first, with query filters
get_orderFetch one order with line items
set_inventory_quantitySet absolute on-hand inventory at a location
list_locationsList store locations (for inventory ops)
list_customersList customers with query filters

Metafields

ToolDescription
set_metafieldUpsert a metafield on any HasMetafields resource (product, variant, collection, customer, order, shop, …)
list_metafieldsList metafields for a resource, optionally filtered by namespace
delete_metafieldDelete a metafield by (ownerId, namespace, key)

Draft orders

ToolDescription
list_draft_ordersList draft orders with Shopify query filters
get_draft_orderFetch one draft order with its line items
create_draft_orderCreate a draft order; line items can be variant refs or custom (title + price)
update_draft_orderUpdate customer, line items, tags, note, email
complete_draft_orderConvert a draft order to a real order; paymentPending skips capture
delete_draft_orderDelete a non-completed draft order

Webhooks

ToolDescription
list_webhooksList webhook subscriptions; filter by topic(s)
get_webhookFetch a single subscription
create_webhookSubscribe an HTTPS callback URL to a topic (e.g. ORDERS_CREATE)
update_webhookChange callback URL, format, or field/metafield filters
delete_webhookDelete a subscription

Metaobjects

ToolDescription
list_metaobject_definitionsDiscover metaobject types (schemas) on the store, including field definitions
list_metaobjectsList metaobjects of a given type
get_metaobjectFetch one metaobject with all its fields
create_metaobjectCreate a metaobject (type must already exist as a definition); supports ACTIVE/DRAFT status
update_metaobjectUpsert fields, change handle, toggle publishable status
delete_metaobjectDelete a metaobject

Fulfillment

ToolDescription
list_fulfillment_ordersList an order's fulfillment orders (one per shipping location), with remaining quantities per line item
get_fulfillment_orderFetch a single fulfillment order
get_fulfillmentFetch a single fulfillment (shipment record) with tracking info
create_fulfillmentMark fulfillment orders (or specific quantities) as fulfilled; optionally attach tracking + notify customer
update_fulfillment_trackingUpdate carrier/number/url on an existing fulfillment
cancel_fulfillmentCancel 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.

Variants & product options

ToolDescription
list_variantsList all variants of a product with their selected options, price, SKU, inventory
create_variantsBulk-create variants (up to 100) with option values, price, SKU, compareAtPrice, initial inventory
update_variantsBulk-update variant price, compareAtPrice, SKU, barcode, taxable, inventoryPolicy, option values
delete_variantsBulk-delete variants from a product
reorder_variantsSet 1-indexed positions for variants
add_product_optionsAdd 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.

Collections & tagging

ToolDescription
list_collectionsList collections with query filters
get_collectionFetch one collection with its products
create_collectionCreate a manual collection, optionally seeded with products
update_collectionUpdate title, description, or handle
delete_collectionDelete a collection
add_products_to_collectionAdd products to a manual collection (async job on Shopify's side)
remove_products_from_collectionRemove products from a manual collection
add_tagsAdd tags to any taggable resource (Product, Order, Customer, DraftOrder, Collection)
remove_tagsRemove tags from a taggable resource

Analytics (ShopifyQL)

ToolDescription
run_shopifyql_queryRun 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 TIMESERIES
  • FROM 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)

ToolDescription
generate_and_create_productGenerate an image and create a product with it, in one call. Title/description derive from the prompt if not given.
generate_product_imageGenerate an image and attach it to an existing product.
refine_product_imageRun 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_imagesFor 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"]

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.

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 test

Requires Node 20+.

Roadmap

  • Core products CRUD + image attach
  • Orders read
  • Inventory set + locations
  • Customers read
  • ComfyUI bridge: generate_and_create_product, generate_product_image, bulk_regenerate_images
  • Metafields: set_metafield, list_metafields, delete_metafield
  • Draft orders: create/update/complete/delete + list/get
  • Collections + tagging: CRUD, product add/remove, add_tags / remove_tags
  • Variants + product options: bulk create/update/delete/reorder + add_product_options
  • Fulfillment: list/get fulfillment orders, create fulfillment (partial supported), update tracking, cancel
  • Webhooks: list/get/create/update/delete subscriptions
  • Metaobjects: definitions list + metaobject CRUD (create, update, delete)
  • ShopifyQL analytics: run_shopifyql_query with ASCII-table rendering
  • Image refinement bridge: refine_product_image (ComfyUI img2img on product images)
  • OAuth token-exchange flow for new-app auth

License

MIT © Joe Miller

Support

If this saves you time, consider supporting development:

GitHub Sponsors Ko-fi

Reviews

No reviews yet

Sign in to write a review