CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Shopify Mcp

miller-joe/shopify-mcp
36 toolsauthHTTPregistry active
Summary

Connects Claude to the Shopify Admin GraphQL API with full product, order, inventory, customer, webhook, metafield, and fulfillment tooling. The ComfyUI bridge is the standout: prompt Claude to generate product images on the fly and auto-attach them during product creation, so "create a cosmic candle product with AI art" completes end to end. Supports both stdio and streamable HTTP transports. Includes draft orders, metaobjects, variant bulk ops, and webhook management. Requires a Shopify admin access token; custom app tokens work for existing dev stores, though newer apps need the token exchange flow. Pair it with the comfyui-mcp server to unlock the generative workflow.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

36 tools
SHOPIFY_ADD_PRODUCT_TO_COLLECTIONAdds a product to an existing *custom collection*, optionally specifying its `position` if the collection is manually sorted.3 params

Adds a product to an existing *custom collection*, optionally specifying its `position` if the collection is manually sorted.

Parameters* required
positioninteger
Optional 1-based position if the custom collection is manually sorted; product is added to the end if unspecified or collection isn't manually sorted.
product_idinteger
Identifier of the product to add.
collection_idinteger
Identifier of the *custom collection*.
SHOPIFY_COUNT_PRODUCT_IMAGESRetrieves the total count of images for a Shopify product, useful for inventory management or display logic; the provided `product_id` must exist in the store.1 params

Retrieves the total count of images for a Shopify product, useful for inventory management or display logic; the provided `product_id` must exist in the store.

Parameters* required
product_idstring
The unique identifier for the Shopify product whose images are to be counted.
SHOPIFY_CREATE_CUSTOM_COLLECTIONCreates a new custom collection in a Shopify store, requiring a unique title for manually curated product groupings (e.g., 'New Arrivals', 'Seasonal Specials').1 params

Creates a new custom collection in a Shopify store, requiring a unique title for manually curated product groupings (e.g., 'New Arrivals', 'Seasonal Specials').

Parameters* required
titlestring
Unique title for the custom collection, visible to customers and used for product organization.
SHOPIFY_CREATE_CUSTOMERTool to create a new customer in Shopify. Use when you need to add a new customer record to the store.12 params

Tool to create a new customer in Shopify. Use when you need to add a new customer record to the store.

Parameters* required
notestring
An optional note about the customer.
tagsstring
A comma-separated string of tags to associate with the customer.
emailstring
The customer's unique email address.
phonestring
The customer's phone number (E.164 format recommended).
passwordstring
The customer's password. If provided, password_confirmation is also required.
addressesarray
A list of addresses for the customer.
last_namestring
The customer's last name.
first_namestring
The customer's first name.
verified_emailboolean
Whether the customer has verified their email address.
send_email_inviteboolean
If true, sends the customer an email invite to create an account.
send_email_welcomeboolean
Whether to send the customer a welcome email. Defaults to true. If send_email_invite is true, this can be set to false.default: true
password_confirmationstring
Confirmation of the customer's password. Required if password is provided.
SHOPIFY_CREATE_ORDERCreates a new order in Shopify, typically requiring line items; if `customer_id` is provided, it must correspond to an existing customer.5 params

Creates a new order in Shopify, typically requiring line items; if `customer_id` is provided, it must correspond to an existing customer.

Parameters* required
currencystring
The three-letter ISO 4217 currency code for the amounts in the order (e.g., USD, CAD, EUR).
total_taxnumber
The total amount of tax for the order. This should be a numeric value representing the sum of all taxes.
line_itemsarray
A list of line item objects, each representing an item in the order. Each object should specify at least a `variant_id` (or `product_id`) and `quantity`. Other common fields include `price` and `title`. At least one line item is required.
customer_idstring
The unique identifier of the customer associated with this order. If provided, the order will be linked to this customer. This field is optional.
transactionsarray
A list of transaction objects associated with the order, typically representing payment information. Each object usually includes `kind` (e.g., 'sale', 'authorization'), `amount`, `status`, and `gateway`.
SHOPIFY_CREATE_PRODUCTCreates a new product in a Shopify store; a product title is generally required.5 params

Creates a new product in a Shopify store; a product title is generally required.

Parameters* required
titlestring
The title of the product, typically required by Shopify.
vendorstring
The name of the product's vendor or manufacturer.
variantsarray
Product variants. Common keys include 'price', 'sku', 'option1', 'option2', 'inventory_quantity'. At least one variant is typically required; if not provided, Shopify might create a default one.
body_htmlstring
A detailed description of the product, which can include HTML formatting for rich text.
product_typestring
A category for the product, used for filtering and organizing products in Shopify.
SHOPIFY_CREATE_PRODUCT_IMAGETool to create a new product image for a given product. Use when you need to add an image to a product by providing the image source URL or attachment.2 params

Tool to create a new product image for a given product. Use when you need to add an image to a product by providing the image source URL or attachment.

Parameters* required
imageobject
An object containing the image details.
product_idstring
The ID of the product to associate the image with.
SHOPIFY_CREATE_PRODUCT_METAFIELDCreates a new metafield for a specific Shopify product.6 params

Creates a new metafield for a specific Shopify product.

Parameters* required
keystring
The key for the metafield. Must be at least 3 characters long.
typestring
The value type of the metafield. Defaults to single_line_text_field.default: single_line_text_field
valuestring
The value for the metafield.
namespacestring
The namespace for the metafield. Must be at least 3 characters long.
product_idstring
The unique identifier of the Shopify product to add a metafield to.
descriptionstring
A description of the information that the metafield contains.
SHOPIFY_DELETE_CUSTOM_COLLECTIONPermanently deletes a custom collection from a Shopify store using its `collection_id`; this action is irreversible and requires a valid, existing `collection_id`.1 params

Permanently deletes a custom collection from a Shopify store using its `collection_id`; this action is irreversible and requires a valid, existing `collection_id`.

Parameters* required
collection_idstring
The unique identifier for the custom collection that needs to be deleted. This ID is a numerical string assigned by Shopify when the collection is created.
SHOPIFY_DELETE_PRODUCTDeletes a specific, existing product from a Shopify store using its unique product ID; this action is irreversible.1 params

Deletes a specific, existing product from a Shopify store using its unique product ID; this action is irreversible.

Parameters* required
idstring
The unique identifier of the Shopify product to be deleted. This ID is essential for targeting the correct product for removal.
SHOPIFY_DELETE_PRODUCT_IMAGEDeletes a specific image from a product in Shopify, requiring the `product_id` of an existing product and the `image_id` of an image currently associated with that product.2 params

Deletes a specific image from a product in Shopify, requiring the `product_id` of an existing product and the `image_id` of an image currently associated with that product.

Parameters* required
image_idstring
The unique identifier of the specific product image to be deleted.
product_idstring
The unique identifier of the product from which the image is to be deleted.
SHOPIFY_DELETE_PRODUCT_METAFIELDDeletes a specific metafield from a Shopify product using the product ID and metafield ID.2 params

Deletes a specific metafield from a Shopify product using the product ID and metafield ID.

Parameters* required
product_idstring
The unique identifier of the Shopify product.
metafield_idstring
The unique identifier of the metafield to delete.
SHOPIFY_GET_ALL_CUSTOMERSRetrieves customer records from a Shopify store, with options for filtering, selecting specific fields, and paginating through the results.8 params

Retrieves customer records from a Shopify store, with options for filtering, selecting specific fields, and paginating through the results.

Parameters* required
idsarray
A list of specific customer IDs to retrieve. If empty, all customers (matching other filters) will be retrieved.
limitinteger
The maximum number of customers to retrieve. Defaults to 50, with a maximum value of 250.default: 50
fieldsstring
A comma-separated list of customer fields to include in the response (e.g., 'id,email,first_name'). By default, all fields are returned.default:
since_idstring
Retrieve only customers with an ID greater than this specified ID. This is used for paginating through results.default:
created_at_maxstring
Filter customers created before or on this date. Format: YYYY-MM-DD or ISO 8601 datetime string (e.g., '2023-10-26T10:00:00-05:00').default:
created_at_minstring
Filter customers created after or on this date. Format: YYYY-MM-DD or ISO 8601 datetime string (e.g., '2023-10-26T10:00:00-05:00').default:
updated_at_maxstring
Filter customers last updated before or on this date. Format: YYYY-MM-DD or ISO 8601 datetime string.default:
updated_at_minstring
Filter customers last updated after or on this date. Format: YYYY-MM-DD or ISO 8601 datetime string.default:
SHOPIFY_GET_COLLECTION_BY_IDRetrieves a specific Shopify collection by its `collection_id`, optionally filtering returned data to specified `fields`.2 params

Retrieves a specific Shopify collection by its `collection_id`, optionally filtering returned data to specified `fields`.

Parameters* required
fieldsstring
Comma-separated list of fields to retrieve; if omitted, all fields are returned. E.g., 'id,title,handle'.
collection_idstring
The unique identifier of the Shopify collection to retrieve.
SHOPIFY_GET_COLLECTSRetrieves a list of collects from a Shopify store, where a collect links a product to a custom collection.3 params

Retrieves a list of collects from a Shopify store, where a collect links a product to a custom collection.

Parameters* required
limitinteger
Maximum number of collects to retrieve (1-250).default: 50
fieldsstring
Comma-separated list of fields to retrieve (e.g., `id,collection_id,product_id`); if unspecified, all fields are returned.
since_idinteger
Retrieve only collects created after this ID, for pagination.
SHOPIFY_GET_COLLECTS_COUNTRetrieves the total count of collects (product-to-collection associations) in a Shopify store.

Retrieves the total count of collects (product-to-collection associations) in a Shopify store.

No parameter schema in public metadata yet.

SHOPIFY_GET_CUSTOM_COLLECTIONSRetrieves a list of custom collections from a Shopify store, optionally filtered by IDs, product ID, or handle.4 params

Retrieves a list of custom collections from a Shopify store, optionally filtered by IDs, product ID, or handle.

Parameters* required
idsstring
A comma-separated string of custom collection IDs to retrieve.
limitinteger
The maximum number of custom collections to return (between 1 and 250).default: 50
handlestring
Filter results by the custom collection's unique, human-readable string identifier (e.g., 'summer-specials').
product_idinteger
Filter results to custom collections that contain a specific product ID.
SHOPIFY_GET_CUSTOM_COLLECTIONS_COUNTRetrieves the total number of custom collections in a Shopify store.

Retrieves the total number of custom collections in a Shopify store.

No parameter schema in public metadata yet.

SHOPIFY_GET_CUSTOMERRetrieves detailed information for a specific customer from a Shopify store, provided their valid and existing `customer_id`.1 params

Retrieves detailed information for a specific customer from a Shopify store, provided their valid and existing `customer_id`.

Parameters* required
customer_idstring
The unique identifier for the customer in Shopify.
SHOPIFY_GET_CUSTOMER_ORDERSRetrieves all orders for a specific, existing customer in Shopify using their unique customer ID.1 params

Retrieves all orders for a specific, existing customer in Shopify using their unique customer ID.

Parameters* required
customer_idstring
Unique identifier for the customer whose orders are to be retrieved.
SHOPIFY_GET_ORDER_LISTRetrieves a list of orders from Shopify with optional filters and pagination.16 params

Retrieves a list of orders from Shopify with optional filters and pagination.

Parameters* required
idsstring
Comma-separated list of order IDs to return. You may provide a list of integers; it will be converted to a comma-separated string.
namestring
Filter orders by name (for example, #1001).
limitinteger
Maximum number of results per page (default 50, maximum 250).
fieldsstring
Comma-separated list of fields to include in the response. You may provide a list; it will be converted to a comma-separated string.
statusstring
Filter by order status. Valid values: open, closed, cancelled, any.
since_idinteger
Return orders with IDs greater than this ID.
page_infostring
Cursor for pagination. When using page_info for cursor pagination, only limit may accompany it.
created_at_maxstring
Show orders created at or before this ISO 8601 timestamp (for example, 2024-12-31T23:59:59Z).
created_at_minstring
Show orders created at or after this ISO 8601 timestamp (for example, 2024-01-01T00:00:00Z).
updated_at_maxstring
Show orders last updated at or before this ISO 8601 timestamp.
updated_at_minstring
Show orders last updated at or after this ISO 8601 timestamp.
financial_statusstring
Filter by financial status. Valid values: authorized, pending, paid, partially_paid, refunded, voided, partially_refunded, any, unpaid.
processed_at_maxstring
Show orders imported at or before this ISO 8601 timestamp.
processed_at_minstring
Show orders imported at or after this ISO 8601 timestamp.
attribution_app_idstring
Show orders attributed to a specific app ID. Use 'current' to show orders for the calling app.
fulfillment_statusstring
Filter by fulfillment status. Valid values: shipped, partial, unshipped, any, unfulfilled.
SHOPIFY_GET_ORDERSBY_IDRetrieves a specific Shopify order by its unique ID, which must correspond to an existing order.2 params

Retrieves a specific Shopify order by its unique ID, which must correspond to an existing order.

Parameters* required
fieldsstring
Comma-separated list of fields to include in the response (e.g., 'id,line_items').
order_idstring
The unique identifier of the Shopify order to retrieve.
SHOPIFY_GET_ORDERS_WITH_FILTERSRetrieves Shopify orders filtered by dates and other filters. Uses server-side filtering.16 params

Retrieves Shopify orders filtered by dates and other filters. Uses server-side filtering.

Parameters* required
idsstring
Comma-separated list of numeric order IDs to retrieve.
namestring
Filter by order name (e.g., #1001).
limitinteger
Maximum number of orders to return per page (1-250).
fieldsstring
Comma-separated list of order fields to include in the response.
statusstring
Filter by order status (open,closed,cancelled,any).
since_idinteger
Restrict results to after the specified ID.
page_infostring
A cursor for use in pagination. When present, only limit (and fields where supported) should accompany this parameter.
created_at_maxstring
Show orders created at or before this ISO 8601 timestamp.
created_at_minstring
Show orders created at or after this ISO 8601 timestamp.
updated_at_maxstring
Show orders last updated at or before this ISO 8601 timestamp.
updated_at_minstring
Show orders last updated at or after this ISO 8601 timestamp.
financial_statusstring
Filter by financial status (authorized,pending,paid,partially_paid,refunded,voided,partially_refunded,any,unpaid).
processed_at_maxstring
Show orders imported/processed at or before this ISO 8601 timestamp.
processed_at_minstring
Show orders imported/processed at or after this ISO 8601 timestamp.
attribution_app_idstring
Filter to orders attributed to a given app ID; use 'current' to show orders for the calling app.
fulfillment_statusstring
Filter by fulfillment status (shipped/fulfilled,partial,unshipped/null,any,unfulfilled).
SHOPIFY_GET_PRODUCTRetrieves details for an existing Shopify product using its unique product ID.1 params

Retrieves details for an existing Shopify product using its unique product ID.

Parameters* required
product_idstring
The unique identifier of the Shopify product to be retrieved.
SHOPIFY_GET_PRODUCT_IMAGERetrieves detailed information for a specific product image, identified by its ID and its associated product ID, from a Shopify store.2 params

Retrieves detailed information for a specific product image, identified by its ID and its associated product ID, from a Shopify store.

Parameters* required
image_idstring
The unique numerical identifier of the image associated with the product.
product_idstring
The unique numerical identifier of the Shopify product.
SHOPIFY_GET_PRODUCT_IMAGESRetrieves all images for a Shopify product, specified by its `product_id` which must correspond to an existing product.3 params

Retrieves all images for a Shopify product, specified by its `product_id` which must correspond to an existing product.

Parameters* required
fieldsstring
A comma-separated list of fields to include in the response. Available fields include: id, product_id, position, created_at, updated_at, alt, width, height, src.
since_idstring
Restricts the results to product images created after the specified image ID. Useful for pagination.
product_idstring
The unique identifier of the Shopify product for which to retrieve images.
SHOPIFY_GET_PRODUCT_METAFIELDRetrieves a specific metafield for a Shopify product using the product ID and metafield ID.2 params

Retrieves a specific metafield for a Shopify product using the product ID and metafield ID.

Parameters* required
product_idstring
The unique identifier of the Shopify product.
metafield_idstring
The unique identifier of the metafield to retrieve.
SHOPIFY_GET_PRODUCT_METAFIELDSRetrieves all metafields for a specific Shopify product. Metafields can be filtered by namespace and/or key.3 params

Retrieves all metafields for a specific Shopify product. Metafields can be filtered by namespace and/or key.

Parameters* required
keystring
Filter metafields by key. If omitted, returns all metafields (or all within namespace if specified).
namespacestring
Filter metafields by namespace. If omitted, returns all metafields.
product_idstring
The unique identifier of the Shopify product to retrieve metafields for.
SHOPIFY_GET_PRODUCTSRetrieves a list of products from a Shopify store.1 params

Retrieves a list of products from a Shopify store.

Parameters* required
idsstring
A comma-separated string of product IDs to retrieve. If this field is not provided (i.e., defaults to `None`), all products will be fetched.
SHOPIFY_GET_PRODUCTS_COUNTRetrieves the total, unfiltered count of all products in a Shopify store.

Retrieves the total, unfiltered count of all products in a Shopify store.

No parameter schema in public metadata yet.

SHOPIFY_GET_PRODUCTS_IN_COLLECTIONRetrieves all products within a specified Shopify collection, requiring a valid `collection_id`.2 params

Retrieves all products within a specified Shopify collection, requiring a valid `collection_id`.

Parameters* required
limitinteger
Maximum number of products to retrieve.default: 50
collection_idstring
Identifier for the Shopify collection. Often found in the collection's Shopify admin URL.
SHOPIFY_GET_PRODUCTS_PAGINATEDTool to list products with Shopify cursor-based pagination. Use when iterating over large product catalogs via the Link header.3 params

Tool to list products with Shopify cursor-based pagination. Use when iterating over large product catalogs via the Link header.

Parameters* required
limitinteger
Number of products per page. Defaults to 50; maximum 250.default: 50
fieldsstring
Comma-separated list of product fields to include in the response.
page_infostring
Cursor token for next or previous page. Use the token value from the Link header.
SHOPIFY_GET_SHOP_DETAILSRetrieves comprehensive administrative information about the authenticated Shopify store, as defined by the Shopify API.

Retrieves comprehensive administrative information about the authenticated Shopify store, as defined by the Shopify API.

No parameter schema in public metadata yet.

SHOPIFY_GRAPH_QL_QUERYExecutes a GraphQL query against the Shopify Admin API. This allows for flexible data retrieval and mutations including metafields operations.2 params

Executes a GraphQL query against the Shopify Admin API. This allows for flexible data retrieval and mutations including metafields operations.

Parameters* required
querystring
The GraphQL query string to execute against the Shopify Admin API.
variablesobject
Variables to be used in the GraphQL query as a dictionary.
SHOPIFY_UPDATE_ORDERUpdates the phone number for an existing Shopify order, identified by its ID; pass `phone=None` to remove the current phone number.2 params

Updates the phone number for an existing Shopify order, identified by its ID; pass `phone=None` to remove the current phone number.

Parameters* required
idinteger
The unique identifier of the Shopify order whose phone number is to be updated.
phonestring
The new phone number for the order. E.164 format (e.g., '+15551234567') is recommended for international numbers. An empty string `''` may also be used to clear it, depending on Shopify API behavior.
SHOPIFY_UPDATE_PRODUCT_METAFIELDUpdates an existing metafield for a specific Shopify product.5 params

Updates an existing metafield for a specific Shopify product.

Parameters* required
typestring
The new value type of the metafield. If not provided, the existing type will be kept.
valuestring
The new value for the metafield. If not provided, the existing value will be kept.
product_idstring
The unique identifier of the Shopify product.
descriptionstring
A new description of the information that the metafield contains. If not provided, the existing description will be kept.
metafield_idstring
The unique identifier of the metafield to update.

shopify-mcp

MCP server for Shopify. Full Admin GraphQL API tooling plus an AI-driven product creation bridge via ComfyUI image generation.

shopify-mcp MCP server

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

Claude then runs ComfyUI, gets an image back, creates the Shopify product, and attaches the image, all 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 (HTTP mode only)
--portMCP_PORT9110Bind port (HTTP mode only)
--stdioMCP_TRANSPORT=stdio(unset)Speak MCP over stdio instead of HTTP. Use when launched as a subprocess by a stdio-first MCP client (Claude Desktop, mcp-inspector).
--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
(no flag)COMFYUI_DEFAULT_CKPTsd_xl_base_1.0.safetensorsDefault 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

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, etc.)
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 and notify the 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, or omit the array to fulfill everything on the fulfillment order.

Variants and product options

ToolDescription
list_variantsList all variants of a product with 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 / 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

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 and 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"]

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 test

Requires 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_images
  • Metafields: set_metafield, list_metafields, delete_metafield
  • Draft orders: create / update / complete / delete / list / get
  • Collections and tagging: CRUD, product add/remove, add_tags / remove_tags
  • Variants and product options: bulk create / update / delete / reorder plus add_product_options
  • Fulfillment: 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_query with ASCII-table rendering
  • Image 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:

GitHub Sponsors Ko-fi

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Configuration

SHOPIFY_STORE*

Store domain, e.g. 'my-store' or 'my-store.myshopify.com'

SHOPIFY_ACCESS_TOKEN*secret

Admin API access token (shpat_...). See README for how to create a custom app on a dev store.

SHOPIFY_API_VERSION

Shopify GraphQL Admin API version (default: 2026-04)

COMFYUI_URL

ComfyUI HTTP URL for bridge tools. When unset, generate_* bridge tools are disabled.

COMFYUI_PUBLIC_URL

Externally-reachable ComfyUI URL (defaults to COMFYUI_URL)

COMFYUI_DEFAULT_CKPT

Default ComfyUI checkpoint filename for bridge tools (default: sd_xl_base_1.0.safetensors)

Categories
Finance & Commerce
Registryactive
Package@miller-joe/shopify-mcp
TransportHTTP
AuthRequired
UpdatedApr 20, 2026
View on GitHub

Related Finance & Commerce MCP Servers

View all →
Shopify Subscription Reconciliation MCP (Recharge Edition)

io.github.shelvick/shopify-subscription-reconciliation

Reconcile Shopify orders against Recharge subscription charges and Stripe payouts.
Google Ads

zleventer/google-ads-mcp

MCP server for Google Ads — 22 tools for spend diagnosis, impression share, and asset performance.
1
Meok Stripe Acp Checkout Mcp

csoai-org/meok-stripe-acp-checkout-mcp

MEOK Stripe ACP Checkout MCP — ChatGPT shopping bridge. Issues + verifies + signs Stripe Agentic
Google Ads

io.github.mharnett/google-ads

Google Ads MCP with MCC support: 35 tools for campaigns, keywords, reporting, GAQL.
Stripe Billing Mcp

csoai-org/stripe-billing-mcp

stripe-billing-mcp MCP server by MEOK AI Labs
Google Ads Mcp

co.pipeboard/google-ads-mcp

Google Ads automation with AI: analyze performance, manage campaigns, optimize bids.