# Shopify — how to use (mcp.ai)

Shopify in natural language: manage your store's products, orders, customers, collections and inventory. You connect with your store subdomain and your Admin API access token, generated in Shopify's app settings. Multiple stores can be connected to the same MCP.

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_shopify?ms=1788881040000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `shopify_add_product_to_collection`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/shopify`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/shopify/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/shopify/add/product/to/collection` — DEPRECATED: Use SHOPIFY_ADDS_A_PRODUCT_TO_A_CUSTOM_COLLECTION instead. Adds a product to an existing *custom collection*, optionally specifying its `position` if the collection is manually sorted.
  - body: { position?: integer, product_id: string, collection_id: integer }
- `POST https://api.mcp.ai/api/shopify/count/product/images` — Retrieves the total count of images for a specific Shopify product. Use when you need to know how many images are associated with a product.
  - body: { product_id: string }
- `POST https://api.mcp.ai/api/shopify/create/custom/collection` — Create a new custom (manually curated) collection in Shopify. Does not support smart collections. Use when you need to manually curate and group products for easier store browsing. Custom collections 
  - body: { image?: object, title: string, handle?: string, collects?: object[], body_html?: string, published?: boolean, metafields?: object[], sort_order?: string, published_scope?: string, template_suffix?: string }
- `POST https://api.mcp.ai/api/shopify/create/customer` — Create a new customer in Shopify. Use to add a customer record to the store with contact details, addresses, and marketing preferences. Requires at least one of: email, phone, or both first_name and l
  - body: { note?: string, tags?: string, email?: string, phone?: string, password?: string, addresses?: object[], last_name?: string, first_name?: string, verified_email?: boolean, send_email_invite?: boolean, send_email_welcome?: boolean, password_confirmation?: string }
- `POST https://api.mcp.ai/api/shopify/create/order` — Create a fully committed (real) order in Shopify without payment processing. Use when programmatically generating orders with line items, customer information, and addresses. Creates a live order imme
  - body: { note?: string, tags?: string, email?: string, phone?: string, currency?: string, customer?: object, total_tax?: string, line_items: object[], send_receipt?: boolean, transactions?: object[], discount_codes?: object[], shipping_lines?: object[], billing_address?: object, financial_status?: string, shipping_address?: object, fulfillment_status?: string, inventory_behaviour?: string, send_fulfillment_receipt?: boolean }
- `POST https://api.mcp.ai/api/shopify/create/product` — DEPRECATED: Use SHOPIFY_CREATES_A_NEW_PRODUCT instead. Creates a new product in a Shopify store; a product title is generally required. Note: The Product REST API is deprecated as of API version 2025-
  - body: { title: string, vendor?: string, variants?: object[], body_html?: string, product_type?: string }
- `POST https://api.mcp.ai/api/shopify/create/product/image` — DEPRECATED: Use SHOPIFY_CREATE_A_NEW_PRODUCT_IMAGE instead. Creates a new product image for a Shopify product. Use this tool to add images to products either by providing a publicly accessible image U
  - body: { image: object, product_id: string }
- `POST https://api.mcp.ai/api/shopify/delete/custom/collection` — DEPRECATED: Use SHOPIFY_DELETES_A_CUSTOM_COLLECTION instead. Permanently deletes a custom collection from a Shopify store using its `collection_id`; this action is irreversible and requires a valid, e
  - body: { collection_id: string }
- `POST https://api.mcp.ai/api/shopify/delete/product` — Permanently deletes a product from a Shopify store by its product ID. This action is irreversible - deleted products cannot be recovered. Deleting a product also removes all associated variants, image
  - body: { product_id: string }
- `POST https://api.mcp.ai/api/shopify/delete/product/image` — 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.
  - body: { image_id: string, product_id: string }
- `POST https://api.mcp.ai/api/shopify/get/collection/by/id` — Retrieves a specific Shopify collection by its `collection_id`, optionally filtering returned data to specified `fields`.
  - body: { fields?: string, collection_id: string }
- `POST https://api.mcp.ai/api/shopify/get/collects` — Retrieves a list of collects from a Shopify store, where a collect links a product to a custom collection. Returns only collect mapping records (collect_id, collection_id, product_id, position, etc.),
  - body: { limit?: integer, fields?: string, since_id?: integer, product_id?: integer, collection_id?: integer }
- `POST https://api.mcp.ai/api/shopify/get/collects/count` — Retrieves a count of collects (product-collection relationships). Use when you need to know the total number of collects, optionally filtered by collection_id or product_id.
  - body: { product_id?: string, collection_id?: string }
- `POST https://api.mcp.ai/api/shopify/get/custom/collections` — Retrieves a list of custom collections from a Shopify store. Supports filtering by IDs, handle, title, product ID, publication status, and date ranges (published/updated). Use the fields parameter to 
  - body: { ids?: string, limit?: integer, title?: string, fields?: string, handle?: string, since_id?: integer, product_id?: integer, updated_at_max?: string, updated_at_min?: string, published_at_max?: string, published_at_min?: string, published_status?: string }
- `POST https://api.mcp.ai/api/shopify/get/custom/collections/count` — Retrieves the total count of custom collections in a Shopify store with optional filters. Use this action to get the number of custom collections, optionally filtered by: - Product ID (collections con
  - body: { title?: string, product_id?: string, updated_at_max?: string, updated_at_min?: string, published_at_max?: string, published_at_min?: string, published_status?: string }
- `POST https://api.mcp.ai/api/shopify/get/customer` — Retrieve a single customer by their unique identifier. Use when you need to fetch detailed information about a specific customer.
  - body: { fields?: string, customer_id: string }
- `POST https://api.mcp.ai/api/shopify/get/customer/orders` — Retrieves all orders for a specific, existing customer in Shopify using their unique customer ID.
  - body: { limit?: integer, status?: string, since_id?: integer, page_info?: string, customer_id: string }
- `POST https://api.mcp.ai/api/shopify/get/order/list` — Retrieves a list of orders from Shopify with optional filters and pagination.
  - body: { ids?: string|integer[], name?: string, limit?: integer, fields?: string|string[], status?: string, since_id?: string, page_info?: string, created_at_max?: string, created_at_min?: string, updated_at_max?: string, updated_at_min?: string, financial_status?: string, processed_at_max?: string, processed_at_min?: string, attribution_app_id?: string, fulfillment_status?: string }
- `POST https://api.mcp.ai/api/shopify/get/ordersby/id` — Retrieves a specific Shopify order by its unique ID, which must correspond to an existing order.
  - body: { fields?: string, order_id: string }
- `POST https://api.mcp.ai/api/shopify/get/product` — Retrieves details for an existing Shopify product using its unique product ID.
  - body: { product_id: string }
- `POST https://api.mcp.ai/api/shopify/get/product/image` — Retrieve a single product image by ID for a specific product. Use when you need to get details about a specific image associated with a product.
  - body: { image_id: string, product_id: string }
- `POST https://api.mcp.ai/api/shopify/get/product/images` — Retrieves all images for a Shopify product, specified by its `product_id` which must correspond to an existing product.
  - body: { fields?: string, since_id?: string, product_id: string }
- `POST https://api.mcp.ai/api/shopify/get/products` — Retrieves a list of products from a Shopify store. Results are paginated; for large catalogs, use SHOPIFY_GET_PRODUCTS_PAGINATED to iterate all pages, as this tool may return only a partial set. Produ
  - body: { ids?: string, limit?: integer, since_id?: integer, page_info?: string }
- `POST https://api.mcp.ai/api/shopify/get/products/in/collection` — Retrieves products that belong to a specific Shopify collection. Returns detailed product information including variants, images, and options. Products are sorted according to the collection's configu
  - body: { limit?: integer, collection_id: string }
- `POST https://api.mcp.ai/api/shopify/get/shop/details` — Retrieves comprehensive administrative information about the authenticated Shopify store. The returned `iana_timezone` field is critical for date-based filtering in other tools (e.g., `created_at_min`
- `POST https://api.mcp.ai/api/shopify/update/order` — Updates mutable fields on an existing Shopify order.
  - body: { id: string, note?: string, tags?: string, email?: string, phone?: string, po_number?: string, metafields?: object[], tax_exempt?: boolean, send_receipt?: boolean, billing_address?: object, note_attributes?: object[], shipping_address?: object, buyer_accepts_marketing?: boolean, send_fulfillment_receipt?: boolean }

## Example prompts
- "List my store's 10 most recent orders"
- "Which products have inventory below 5 units?"
- "Create a draft product from these details"

## More
- Page: https://mcp.ai/shopify
- Agent spec (llms.txt): https://mcp.ai/shopify/llms.txt
- Postman collection: https://mcp.ai/shopify/postman.json
