mcpbeat Sign in

Shopify MCP Server

answering

Shopify is answering right now. Last checked moments ago. It exposes 26 tools.

Uptime history 47 days of history · worst day 0%
47 days agonow
71.7%
Uptime 24h
66 of 92 checks
26
Tools
read from the server
229 ms
Response time
average over 24h
open, no key
Access
streamable-http

What changed 2

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 18 September 2026. No other catalogue keeps this.

18 Sep a tool description was rewritten search_products
18 Sep a tool changed the parameters it asks for search_products

Shopify does not always answer

Over the last week it answered 67.4% of our checks. We check every 15 minutes, so you hear about the next outage within the hour — not from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 0 min ago.

run in your terminal
claude mcp add mcp --transport http https://setup.shopify.com/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "mcp": {
      "url": "https://setup.shopify.com/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.mcp]
url = "https://setup.shopify.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "mcp": {
      "url": "https://setup.shopify.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "mcp": {
      "url": "https://setup.shopify.com/mcp"
    }
  }
}

Available tools 26

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

collection
add-to-collection
Add one or more products to a collection in the connected Shopify store. Use this when the user wants to organize products into a collection.
create-collection
Create a new collection in the connected Shopify store and publish it to the Online Store. Use this when the user wants to organize products into a new group. COLLECTION TYPES: - Manual collection: pass `productIds` to add specific products. - Smart collection: pass `ruleSet` with conditions to auto-populate products. - `productIds` and `ruleSet` are mutually exclusive — provide one or neither. SMART COLLECTION RULES: - Common rule columns: TAG, VENDOR, TYPE, TITLE, VARIANT_PRICE. - Common relations: EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, STARTS_WITH, ENDS_WITH, GREATER_THAN, LESS_THAN. - `appliedDisjunctively: true` means products matching ANY rule are included (OR logic). - `appliedDisjunctively: false` means products must match ALL rules (AND logic). IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you only have a local file or a generated image, ask the user for a publicly accessible HTTPS URL; this host cannot upload one. - Avoid placeholder or non-deterministic image URLs (e.g. picsum.photos) for real collections.
get-collection
Retrieve detailed information about a specific Shopify collection by its GID, including title, description, image, products, and rules (for smart collections). MUST be called whenever the user refers to a collection they own or previously created — regardless of phrasing. Trigger phrases include: "my collection", "that collection", "the collection", "show me my collection", "get my collection", or any reference to a previously created or known collection. "Show" and "get" mean the same thing here: always fetch live data from Shopify. Do NOT rely on memory or prior responses — always call this tool for the source of truth.
update-collection
Update an existing collection's title, description, image, sort order, or rules. Use this when the user wants to modify, change, or edit collection details. Trigger phrases include: "update my collection", "change the collection", "edit the collection", "rename the collection". IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you only have a local file or a generated image, ask the user for a publicly accessible HTTPS URL; this host cannot upload one. - Avoid placeholder or non-deterministic image URLs (e.g. picsum.photos) for real collections. SMART COLLECTION RULES: - Pass `ruleSet` to update the rules for a smart collection. - Common rule columns: TAG, VENDOR, TYPE, TITLE, VARIANT_PRICE. - Common relations: EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, STARTS_WITH, ENDS_WITH, GREATER_THAN, LESS_THAN. - Passing `ruleSet` replaces all existing rules. Omitting it leaves rules unchanged.
graphql
graphql_mutation
Execute a GraphQL mutation against the Shopify Admin API. The Shopify Admin API supports hundreds of mutations. Built-in tools cover common write operations, but when the user asks to modify a resource that has no dedicated tool (e.g. metafields, metaobjects, pages, blogs, translations, publications, etc.), use this tool. Note: Some dangerous mutations are blocked for safety (e.g. refunds, gift card writes, staff management, theme deletion, theme publishing). Theme file writes (themeFilesCopy, themeFilesUpsert) are allowed on unpublished themes only — writes that target the live/MAIN theme are blocked. If a mutation is blocked, inform the user and suggest they perform the action in Shopify admin. The host app will prompt the user for confirmation before executing. Before calling this tool, follow the GraphQL Workflow: 1. Call graphql_schema FIRST to look up the exact mutation name (type_name='Mutation') and input type fields — do NOT guess, and do NOT skip this step. 2. Optionally supplement with search_docs_chunks for mutation examples in Shopify documentation; it never replaces graphql_schema. 3. Construct the operation. 4. Call validate_graphql_codeblocks to verify the operation — do NOT skip validation. 5. Only then call this tool to execute the mutation. IMPORTANT: After executing, present the results clearly to the user. Do NOT dump raw JSON — summarize what changed in a helpful, readable way.
graphql_query
Execute a read-only GraphQL query against the Shopify Admin API. The Shopify Admin API exposes hundreds of resources. Built-in tools cover common operations, but when the user asks about a resource that has no dedicated tool (e.g. gift cards, metafields, metaobjects, pages, blogs, markets, translations, publications, etc.), use this tool to fetch the data. Before calling this tool, follow the GraphQL Workflow: 1. Call graphql_schema FIRST to discover the correct types and fields — do NOT guess field names, and do NOT skip this step. 2. Construct the operation. search_docs_chunks is optional here for worked examples; it supplements graphql_schema and never replaces it. 3. Call validate_graphql_codeblocks to verify the operation — do NOT skip validation. 4. Only then call this tool to execute the query. Pagination: include `pageInfo { hasNextPage endCursor }` in your query. Pass the endCursor value as the `after` variable for the next page. IMPORTANT: After calling this tool, present the results clearly to the user. Do NOT dump raw JSON — summarize the key information in a helpful, readable way.
graphql_schema
Explore the Shopify Admin GraphQL schema to discover types, fields, and arguments. You MUST call this tool before building ANY GraphQL operation — every graphql_query and every graphql_mutation starts here, not just mutations. It is step 1 of the GraphQL Workflow and the only source of truth for exact type, field, argument, and input-type names — never guess them. For INPUT_OBJECT types (e.g. 'ProductInput', 'DiscountCodeBasicInput') the response includes the full transitive closure of every nested input type — you do NOT need to call again per nested type. Each inputFields[] entry whose type unwraps to an INPUT_OBJECT carries an 'expanded' key with that type's inputFields recursively. Cycles are emitted as { "$ref": "TypeName" }. ENUM-typed fields have their values inlined under 'enumValues'. Pass a type name to inspect. Common starting points: - 'Mutation' — list all available mutations (search here first for mutations) - 'QueryRoot' — list all available queries - 'Product', 'Order', 'Customer' — inspect entity fields for queries - 'ProductInput', 'ProductVariantInput' — inspect mutation input types (returned with full nested closure) Workflow for mutations: graphql_schema('Mutation') → find the mutation → graphql_schema('InputTypeName') → construct the mutation → validate_graphql_codeblocks → graphql_mutation. Workflow for queries: graphql_schema('QueryRoot') → find the query → graphql_schema('TypeName') → construct the query → validate_graphql_codeblocks → graphql_query. While building an operation, search_docs_chunks supplements this tool with worked examples from shopify.dev; it does NOT replace it and is not where the workflow starts. A standalone documentation question, with no operation to build, goes straight to search_docs_chunks.
product
create-product
Create a new product in the connected Shopify store. Use this when the user wants to add a product with a title, description, variants, images, or other product details. VARIANTS & OPTIONS: - When providing `variants`, you MUST also provide the `options` field as a string array of option names. - Example: for a single default variant use `options: ['Title']`, for Size/Color variants use `options: ['Size', 'Color']`. - The `options` field must be an array of strings (e.g. `['Size', 'Color']`), NOT an array of objects. - Each variant's `optionValues` must reference option names declared in the `options` array. INVENTORY TRACKING: - To enable inventory tracking on variants, set `inventoryItem: { tracked: true }` on each variant. - If omitted, inventory defaults to untracked and set-inventory will not work as expected. IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you only have a local file or a generated image, ask the user for a publicly accessible HTTPS URL; this host cannot upload one. - Avoid placeholder or non-deterministic image URLs (e.g. picsum.photos) for real products. - The first image provided becomes the product's featured image. COLLECTION: - Optionally pass `collectionId` to add the product to a collection after creation. - To add to multiple collections, use add-to-collection afterward.
get-product
Retrieve detailed information about a specific Shopify product by its GID, including title, status, vendor, variants, images, tags, and inventory. MUST be called whenever the user refers to a product they own or previously created — regardless of phrasing. Trigger phrases include: "my product", "that product", "the product", "show me my product", "get my product", "pull up the product", "open my product", or any reference to a previously created or known product. "Show" and "get" mean the same thing here: always fetch live data from Shopify. Do NOT rely on memory or prior responses — always call this tool for the source of truth.
update-product
Update an existing product's title, description, status, images, variant pricing, or variant option values (e.g. color, size names). Use this when the user wants to modify, change, or edit product details — including status, variant prices, option values, or images. Trigger phrases include: 'update my product', 'change the price', 'edit the product', 'modify my product', 'rename the variant', 'change the color name'. IMAGE REQUIREMENTS: - Images must be publicly accessible HTTPS URLs (e.g. https://example.com/photo.jpg). - Local file paths (e.g. /mnt/data/..., file://...) are NOT supported and will fail. - If you only have a local file or a generated image, ask the user for a publicly accessible HTTPS URL; this host cannot upload one. - Avoid placeholder or non-deterministic image URLs (e.g. picsum.photos) for real products. REPLACING IMAGES: - To replace specific images, first use get-product to find the mediaId of the image(s) to remove. - Pass those mediaId values in removeMediaIds, and provide the new images in the images array. - To remove images without adding new ones, pass removeMediaIds without images.
inventory
get-inventory-levels
Retrieve inventory levels for all variants of a product across locations. Use this when the user asks about stock quantities, inventory availability, or wants to see how much inventory is at each location for a given product.
set-inventory
Set the available inventory quantity for a specific inventory item at a given location. Always call get-inventory-levels first to get the inventoryItemId, locationId, and current available quantity. Pass the current quantity as compareQuantity so the update fails safely if stock changed since you read it.
analytics
run-analytics-query
Run a ShopifyQL analytics query. Returns tabular results with automatic chart visualization. IMPORTANT: Always use FROM...SHOW syntax. Use TIMESERIES for time charts, GROUP BY for categories. ## Sales & Revenue - FROM sales SHOW gross_sales TIMESERIES day SINCE -30d UNTIL today - FROM sales SHOW orders, gross_sales, discounts, sales_reversals, net_sales, shipping_charges, taxes, total_sales TIMESERIES day SINCE -30d UNTIL today - FROM sales SHOW total_sales TIMESERIES day SINCE -30d UNTIL today COMPARE TO previous_period - FROM sales SHOW gross_sales, discounts, sales_reversals, net_sales, shipping_charges, taxes, total_sales - FROM sales SHOW average_order_value TIMESERIES day SINCE -30d UNTIL today ## Orders - FROM sales SHOW orders TIMESERIES day SINCE -7d UNTIL today - FROM fulfillments SHOW orders_fulfilled, orders_shipped, orders_delivered TIMESERIES day SINCE -30d UNTIL today ## Products - FROM sales SHOW gross_sales, net_sales, orders GROUP BY product_title ORDER BY gross_sales DESC LIMIT 10 - FROM inventory SHOW starting_inventory_units, ending_inventory_units, inventory_units_sold, sell_through_rate GROUP BY product_title, product_variant_title ## Customers - FROM sales SHOW returning_customers, customers, returning_customer_rate TIMESERIES day SINCE -30d UNTIL today - FROM sales SHOW new_customers, returning_customers TIMESERIES day SINCE -30d UNTIL today ## Sessions & Conversion - FROM sessions SHOW sessions, online_store_visitors TIMESERIES day SINCE -30d UNTIL today - FROM sessions SHOW sessions, sessions_with_cart_additions, sessions_that_reached_checkout, sessions_that_completed_checkout, conversion_rate TIMESERIES day SINCE -30d UNTIL today - FROM sessions SHOW sessions GROUP BY session_device_type SINCE -30d UNTIL today - FROM sessions SHOW sessions GROUP BY session_country SINCE -30d UNTIL today ## Marketing & Referrals - FROM sales SHOW orders, total_sales GROUP BY order_referrer_source, order_referrer_name SINCE -30d UNTIL today - FROM sessions SHOW sessions WHERE referrer_source = 'social' GROUP BY referrer_name SINCE -30d UNTIL today ## Tables: sales, orders, sessions, customers, fulfillments, inventory, payments ## Time grouping: TIMESERIES day/week/month. Category grouping: GROUP BY column ## Comparison: COMPARE TO previous_period. Aggregates: WITH TOTALS, PERCENT_CHANGE
bulk
bulk-update-product-status
Update the status of multiple products at once. Accepts a list of product IDs or a collectionId and a target status (ACTIVE, DRAFT, or ARCHIVED). Each product is updated individually so partial failures are possible. When using collectionId, only the first 50 products in the collection will be updated.
claim
claim-storefront-preview
Signal that the user clicked a storefront preview's signup link. Revokes the current shop token (if any) so the next tool call prompts a fresh OAuth for the newly claimed store. Called only by the get-new-store-previews tool's widget — never invoke directly from the model.
collections
search_collections
Search and browse collections on a Shopify store. Use this whenever the user wants to see, find, or look at collections in their store. Trigger phrases include: 'show me my collections', 'what collections do I have', 'list my collections', 'find a collection', 'search collections', or any reference to viewing multiple collections. 'Show' and 'get' mean the same thing: always fetch live data from Shopify. Do NOT summarize from memory. Use this when the user wants to: - list or search collections - find a collection by name - check what collections exist in their store - find a collection GID to use with add-to-collection or create-product Returns collection data from the connected store via the Shopify Admin API. Results are capped at 50 per call. When `pageInfo.hasNextPage` is true, more matches exist than were returned. Tell the user you are showing the first N results and offer two paths: (a) load more via `after: pageInfo.endCursor`, or (b) refine the search with a stricter query. Only act on one of those paths when the user asks; do not auto-paginate. SEARCH SYNTAX: Free text matches across default fields (e.g. `summer`, `"new arrivals"`). Field filters use `field:value`. Combine with `AND` / `OR` / `NOT`; parenthesize subqueries. Ranges use `:<`, `:<=`, `:>`, `:>=` on numeric/date fields. Example: `collection_type:smart AND title:sale*`. IMPORTANT — invalid field names are silently ignored and return everything. Only use the fields listed below, as flat names. Do NOT invent dotted paths like `collection.title` or `rules.column`. Supported filter fields: - Text / exact: `title`, `handle`, `collection_type` (custom|smart) - Numeric (support ranges): `id` - Date (support ranges): `updated_at`, `published_at` — use ISO 8601 in quotes, e.g. `updated_at:>'2024-01-01'` - ID: `product_id` (collections containing the given product) - Publication: `published_status` (e.g. `published`, `unpublished`, `online_store_channel`) Note: there is no server-side filter for product count, rules, or sort order. For those, filter by `collection_type` and inspect the returned `productsCount` / `sortOrder` fields client-side, or narrow with `title:` / `handle:`.
customers
list-customers
Retrieve a list of customers from the connected Shopify store, including name, email, phone, order count, and total spent. Use this when the user asks about their customers, wants to look up a specific customer, or needs customer data for analysis. SEARCH SYNTAX: When the user is looking for a specific customer (by name, email, tag, etc.), ALWAYS pass a structured `query` using Shopify's customer search syntax. Do NOT pass a bare free-text term like `Smith` for a name search — Shopify's default fields match addresses, tags, company names, and notes, which returns unrelated customers. Field filters use `field:value`. Combine with `AND` / `OR` / `NOT`; parenthesize subqueries. Ranges use `:<`, `:<=`, `:>`, `:>=` on numeric / date fields. Name lookups should query BOTH first and last name, e.g. for "customers named Smith" use `first_name:Smith OR last_name:Smith`. Supported filter fields: - Name: `first_name`, `last_name` - Contact: `email`, `phone` - Location: `country` (full name or code, e.g. `Canada` / `CA`) - Account state: `state` (`enabled` | `invited` | `disabled` | `declined`) - Marketing: `accepts_marketing` (boolean), `email_marketing_state` (`subscribed` | `not_subscribed` | `pending` | `invalid` | `redacted`) - Tags: `tag`, `tag_not` - Numeric (support ranges): `orders_count`, `total_spent`, `id` - Date (support ranges): `created_at`, `updated_at`, `order_date`, `last_abandoned_order_date` — use ISO 8601 in quotes, e.g. `created_at:>'2024-01-01'` RECENCY OF ORDERS: To filter by when a customer placed an order, use `order_date` — NOT `updated_at`. `order_date` matches customers who have at least one order within the given date range. `updated_at` is bumped by profile edits too, so it's a leaky proxy. For abandoned-checkout recency, use `last_abandoned_order_date`. Compose either with the same date syntax shown for `created_at` / `updated_at` above; for relative windows ("last N days"), compute the cutoff from the current date in your context. Examples: - `Find customers named Smith` → `first_name:Smith OR last_name:Smith` - `Customers with gmail addresses` → `email:*@gmail.com` - `Customers with more than 5 orders` → `orders_count:>5` - `Customers from Canada` → `country:Canada` - `VIP customers` → `tag:vip` - `Subscribed to email` → `email_marketing_state:subscribed` IMPORTANT — invalid field names are silently ignored and return everything. Only use the fields listed above. Do NOT invent fields like `name:`, `full_name:`, `customer_name:`, or `city:`.
discount
create-discount
Create a percentage-based discount code for the connected Shopify store. Use this when the merchant wants to set up a new discount code with a specific percentage off — including one limited to particular products or to a collection — with optional minimum purchase or quantity requirements. SCOPE — what the discount applies to: - Call both search_products and search_collections on whatever the merchant named, even if the first one already matches — a product and a collection can share a name. If both match, ask the merchant which they meant rather than picking one. - Specific products ("20% off the Snake Plant", "put these three items on sale"): pass productIds with their product GIDs, up to 50 of them. Look the GIDs up with search_products or get-product first. - An existing collection ("20% off everything in Summer Sale"), or any set larger than 50 products: pass collectionId. - Every product in the store: omit both. - productIds and collectionId are mutually exclusive. Passing both is rejected before anything is created. Do NOT create a collection just to scope a discount to products. This tool discounts products directly in one call, so a collection made only as a stepping stone leaves the merchant with one they never asked for. This is not a restriction on create-collection itself: if the merchant asked for a collection, create it and then scope the discount to it with collectionId. What matters is why the collection exists — one the merchant wants is fine, one invented to work around productIds is not. Two things must be confirmed with the merchant before this tool will create anything: when the discount starts, and who can use it. Both are ordinary parameters on this tool. If either is missing, the tool answers with a plain-language question to put to the merchant. Ask the merchant, then call create-discount again with the answer filled in. Start date: pass startsAt as an ISO 8601 timestamp. For a discount the merchant wants active right away, pass the current date and time; for a scheduled one, pass the date they chose. Omit it only if they have not said yet. Customer eligibility: pass customerEligibility="all_customers" once the merchant has confirmed it should be available to everyone, or pass customerSegments with the names of merchant-defined customer segments. If neither field is set, the tool returns a clarification prompt that lists the segments defined on this store — pick one of those names or "all_customers" based on what the merchant wants.
docs
search_docs_chunks
This tool will take in the user prompt, search shopify.dev, and return relevant documentation and code examples that will help answer the user's question.
order
get-order
Retrieve detailed information about a specific Shopify order including line items, fulfillment status, shipping address, and tracking. Use this when the user asks about a particular order's details or status.
orders
list-orders
Retrieve recent orders from the connected Shopify store. Returns order name, customer, totals, financial and fulfillment status. Use this when the user asks about their orders, wants an overview of recent sales, or needs to find a specific order.
products
search_products
Search and browse products on a Shopify store. MUST be called whenever the user wants to see, find, or look at products in their store. Trigger phrases include: 'show me my products', 'what products do I have', 'list my products', 'browse my catalog', 'find a product', 'search for', or any reference to viewing multiple products. 'Show' and 'get' mean the same thing: always fetch live data from Shopify. Do NOT summarize from memory. Use this when the user wants to: - list or search products - look up a specific product by ID or handle - check product status or details - browse what's in their catalog Returns product data from the connected store via the Shopify Admin API. Results are capped at 50 per call. When `pageInfo.hasNextPage` is true, more matches exist than were returned. Tell the user you are showing the first N results and offer two paths: (a) load more via `after: pageInfo.endCursor`, or (b) refine the search with a stricter query. Only act on one of those paths when the user asks; do not auto-paginate. SEARCH SYNTAX: Free text matches across default fields (e.g. `shoes`, `"green hoodie"`). Field filters use `field:value`. Combine with `AND` / `OR` / `NOT`; parenthesize subqueries. Ranges use `:<`, `:<=`, `:>`, `:>=` on numeric/date fields. Example: `price:<=25 AND status:active`. IMPORTANT — invalid field names are silently ignored and return everything. Only use the fields listed below, as flat names. Do NOT invent dotted paths like `variants.price`, `product.tag`, or `variant.sku`. Supported filter fields: - Text / exact: `title`, `vendor`, `product_type`, `handle`, `sku`, `barcode`, `variant_title`, `tag`, `tag_not`, `status` (active|archived|draft) - Numeric (support ranges): `price` (matches products with ANY variant whose price satisfies the condition), `inventory_total`, `id`, `variant_id` - Date (support ranges): `created_at`, `updated_at`, `published_at` — use ISO 8601 in quotes, e.g. `created_at:>'2024-01-01'` - Boolean: `gift_card`, `bundles`, `is_price_reduced`, `out_of_stock_somewhere`, `tracks_inventory`, `has_only_default_variant` - ID: `collection_id`, `category_id` Price examples (cross-variant semantics): - `price:<=25` — products with at least one variant priced $25 or less - `price:>100 price:<=500` — products with at least one variant in $100–$500 - `price:25` — products with at least one variant priced exactly $25 SHOULD populate `search_summary` with a concise but descriptive plain-text heading in the user's language. Use a noun phrase that identifies the results as products instead of repeating only the search term—for example, "Your sneaker products", not "Your sneakers". The widget displays this text verbatim, so do not use Markdown. For a min/max of every variant or a product-wide price band, this tool cannot express it server-side; tell the user and suggest narrowing with `price:` plus another filter (e.g. `product_type:`, `vendor:`, `tag:`).
shop
get-shop-info
Retrieve basic information about the connected Shopify store including name, domain, email, plan, currency, timezone, and country. Use this when you need store context to tailor advice (e.g. plan limitations, currency for pricing, timezone for scheduling), when the user asks about their store details, or to verify which store is connected.
storefront
get-storefront-generation
Get the current state of a storefront generation. Used by the widget to poll for preview completion.
switch
switch-shop
Switch to a different Shopify store. Call this tool whenever the user wants to work with a different store — including when they ask to fetch data, manage products, or perform any action on another shop. Revokes the current store's access token so the next tool call will prompt authorization for a new store. IMPORTANT: You must always make a follow-up tool call after this tool returns. If the user requested a specific action (e.g. fetch products), call that tool next. Otherwise, you MUST call get-shop-info to complete the shop switch.
validate
validate_graphql_codeblocks
Validates GraphQL operations against the Shopify schema to catch hallucinated fields, incorrect types, or invalid syntax BEFORE executing them. Supports the Shopify Admin GraphQL API. Pass each GraphQL operation as a codeblock with raw GraphQL content (NOT markdown-formatted). After validation succeeds, execute the operation with graphql_query (for queries) or graphql_mutation (for mutations). If validation fails, fix the errors and re-validate before executing.

Endpoints

URLTransportStateLatencyChecked
https://setup.shopify.com/mcp streamable-http answering 232 ms 0 min ago

Alternatives to Shopify

same job, measured the same way
Postscript
by pipeworx-io

Postscript MCP Pack — SMS marketing for Shopify.

39 tools answering
Shopify
by pipeworx-io

Shopify MCP Pack — wraps the Shopify Admin REST API (2024-01)

36 tools answering
C
Ecommerce Intelligence MCP Server
by thenextgennexus

Shopify store + product analysis for DTC competitive research.

2 tools answering
Ecommerce Intel MCP
by themineworks

Product intel: Amazon, AliExpress, Shopify, TikTok Shop, ads and search interest.

answering
Shopify MCP Pro
by den-indance

Shopify MCP server with real analytics (ShopifyQL), auto-refresh auth, and Shopify API 2026-04.

47 installs/wk local only
SourceMedium
by sourcemedium

Query your SourceMedium commerce warehouse, Shopify stores, and ad accounts.

answering
Attribloom
by attribloom

Affiliate attribution and commission data for iOS (StoreKit 2) and Shopify

49 installs/wk local only
Shopify & eBay Product Scraper & Extractor
by ranovam

Shopify and eBay product scraper & extractor for fast market research. Pulls Shopify products.

answering

Shopify — questions

Answers built from our own checks of this server.

What can Shopify do?
It exposes 26 tools, read directly from the server on our last check. Among them: add-to-collection, bulk-update-product-status, claim-storefront-preview, create-collection, create-discount, create-product and 20 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is Shopify mostly used for?
Its tools cluster around collection, graphql and product. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is Shopify working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 66 of 92 checks got a reply (71.7%), average response time 229 ms. The bar chart above shows every period we have measured.
How do I connect Shopify?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Shopify need an API key?
No. Shopify completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 26 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Shopify?
It answers our handshake in 229 ms on average, which is faster than 61% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.