Shopify Multi Store

io.github.alex-brecherPublished by GitHub account alex-brecherv2.0.3Updated Oct 29, 2026

Connect AI agents to multiple Shopify Admin stores for reports, comparisons, and guarded updates.

Overview

AI-generated overview

Connects an AI assistant to one or many Shopify Admin stores to search, compare, report, and make guarded, dry-run-first updates.

What you can do
  • List connected stores, read shop identity and check granted API scopes
  • Search and read products, collections, orders, customers, inventory, metafields, themes and more across stores
  • Run cross-store reports such as portfolio snapshot, price and inventory comparison, catalog gaps and fulfillment SLA
  • Create and update products, collections, prices, inventory, discounts, metafields, redirects, tags, orders, customers and fulfillments
  • Explore, describe and run any Admin GraphQL mutation, plus run read-only GraphQL queries and validate documents
  • Search Shopify documentation and explore the Admin GraphQL schema
When to use it
Useful when an assistant needs to work across several Shopify stores in one conversation: comparing catalogs, prices and stock, producing portfolio or fulfillment reports, or making careful, previewed catalog and order changes.
Requirements
Runs locally as a Node.js npm package (npx or global install). Each store needs an alias and its myshopify.com domain plus Admin API credentials: a custom app access token, or OAuth client credentials or authorization code from a Dev Dashboard app. Admin API scopes must be granted per store. Linux needs a Secret Service provider for credential storage.
Before you install
It holds Admin API credentials for your stores; secrets are kept in the OS credential store, but tokens and client secrets must never be committed. Write tools can change products, prices, inventory, discounts, redirects, orders, customers and fulfillments, and the generic action tools can run any Admin mutation, including destructive ones. Guided writes default to dryRun, and destructive mutations require explicit confirmation; confirm the target store before applying changes. Optional hosted…

Installation

In SourceWeft

  1. Open Shopify Multi Store in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Shopify Multi-Store MCP

One MCP server. Every Shopify store.

Query, compare, report, and make guarded updates across Shopify stores from Claude, ChatGPT, Codex, Cursor, VS Code, and other MCP clients.

[One MCP server connected to multiple ecommerce stores]

[CI] [npm version] [npm provenance] [Node.js 20+] [MCP ready] [License: MIT]

Demo · Quick start · Reports · AI clients · Security

Version 2.0

Run it locally, or host one server for your team: everyone signs in with their own Shopify staff account and connects from Claude, ChatGPT, Codex or any remote MCP client, with Shopify's own staff permissions deciding what each person can do. Guided Admin workflows, ShopifyQL reports, schema validation, and a generic action surface for any Admin mutation are included. See feature coverage and acceptance requirements. Full Shopify ChatGPT parity is not yet verified.

See it work

[Terminal demonstration of a multi-store Shopify health check and product search]

The demonstration uses sample stores and sample data. The server keeps each real store credential separate.

Quick start

Install the server, connect your stores, and run the health check:

bash
npm install --global shopify-multi-store-mcp-servershopify-multi-store setupshopify-multi-store doctor

Claude Code users can add the server with one command:

bash
claude mcp add shopify-multi-store -- npx -y shopify-multi-store-mcp-server start

Each store gets a permanent alias and a separate secure credential. Every store operation requires that alias.

What you get

CapabilityResult
Multiple active storesKeep every Shopify store available in one AI conversation.
Cross-store reportsSearch products, compare catalogs, find stock gaps, and report fulfillment SLA breaches.
Parallel GraphQLRun one read-only query across up to one hundred stores.
Guarded mutationsTarget one store and pass an explicit confirmation for each update.
Secure credentialsUse macOS Keychain, Windows Credential Manager, or Linux Secret Service.
Portable skillsGuide Claude, Codex, Cursor, and other compatible agents.

This server and Shopify Dev MCP

The two servers solve different problems. Use both when an agent needs Shopify reference material and access to your stores.

CapabilityShopify Multi-Store MCPShopify Dev MCP
Primary purposeOperate connected Shopify Admin stores.Search Shopify developer resources.
Store dataRead and compare configured stores.Does not connect to Shopify Admin store data.
Multiple storesKeep named stores active in one session.Not designed for store portfolio operations.
ReportsProvide ready-made operations and catalog reports.Provide developer documentation and API schemas.
UpdatesRun guarded mutations against one selected store.Does not run Admin API updates against your stores.
AuthenticationUse separate credentials for each store.Needs no authentication.

Shopify Dev MCP helps an agent create and examine Shopify code. This server runs the approved operation against the selected store.

Ready-made reports

shopify_report runs one read-only report across selected stores. Set report to one of these:

ReportPurpose
portfolio_snapshotSummarize products, orders, customers, currency, plan, and store identity.
order_summarySummarize order values, discounts, tax, shipping, cancellations, and statuses.
customer_growthCompare new-customer counts across equal periods.
get_product_everywhereFind one exact SKU or handle across stores.
compare_inventoryCompare inventory quantities for selected SKUs across stores.
low_stock_reportFind low inventory and cross-store transfer opportunities.
compare_pricesHighlight price and compare-at-price differences for exact SKUs.
duplicate_sku_reportFind repeated SKUs inside stores and shared SKUs across stores.
list_unfulfilled_ordersList open fulfillment work across selected stores.
fulfillment_sla_reportFind late unfulfilled orders and show age buckets.
compare_catalogCompare products by handle, status, vendor, type, and variants.
catalog_gap_reportFind products that are missing or have different statuses.
catalog_healthFind missing merchandising, SEO, media, alt text, and inventory data.
recent_product_changesList products updated during a selected period.
compare_collectionsCompare collection content and configuration by handle.
store_locationsReview location, fulfillment, inventory, and address coverage.
analyticsRun one ShopifyQL query on each store, with a chart hint. Needs read_reports.

To search products across stores, use shopify_search with resource: "products" and stores.

Try prompts like these:

  • “Give me a portfolio snapshot for every connected store.”
  • “Summarize orders and current order values for the last 30 days. Keep currencies separate.”
  • “Show low, zero, and negative inventory across retail and wholesale.”
  • “Show products that are out of stock here but available in another store.”
  • “Find SKU A123 across every store and compare its status, price, and inventory.”
  • “Search every store for products related to protein.”
  • “Show unfulfilled orders older than two days, grouped by age.”
  • “Find products that are active in one store but missing or draft in another.”
  • “Find price differences and duplicate SKUs across these stores.”
  • “Compare inventory for SKU A123 and B456 across retail and wholesale.”
  • “List unfulfilled orders from the last seven days in three stores.”
  • “Audit catalog health and show the products with missing SEO or media data.”
  • “Compare the active catalog and featured collections across these stores.”

Connect an AI client

The server works in clients that support local stdio MCP servers. Agent Skills improve tool selection when the client supports them.

Claude Code

Add the MCP server:

bash
claude mcp add shopify-multi-store -- npx -y shopify-multi-store-mcp-server start

Copy the included skill for personal use:

bash
mkdir -p ~/.claude/skills/shopify-multi-storecp skills/shopify-multi-store/SKILL.md ~/.claude/skills/shopify-multi-store/SKILL.md
Claude Desktop and Cursor

Add this server to the client's MCP configuration:

json
{  "mcpServers": {    "shopify-multi-store": {      "command": "npx",      "args": ["-y", "shopify-multi-store-mcp-server", "start"]    }  }}
VS Code

Add this server to .vscode/mcp.json:

json
{  "servers": {    "shopify-multi-store": {      "type": "stdio",      "command": "npx",      "args": ["-y", "shopify-multi-store-mcp-server", "start"]    }  }}
Other LLM clients

Use npx as the command and -y shopify-multi-store-mcp-server start as the arguments.

Copy skills/shopify-multi-store/SKILL.md into the client's skills directory when supported. Clients without skill support still get every MCP tool.

Host it for your team

Local use on your own computer (above) is the default. Hosting is optional: whoever wants a shared server runs one, and their team connects from the AI app they already use, on any plan: Claude (personal custom connector), ChatGPT, Codex, Claude Code, Cursor, VS Code, Gemini CLI, Windsurf, or any MCP client that supports remote servers.

People sign in with their own Shopify staff account, and every call runs with that person's own Shopify permissions: Shopify decides what they can do, with no roles or policy file on the server. Shopify tokens stay on the server, encrypted. Reconnecting is at most once a day and one click for all stores. Every tool call is audited.

Two ways to host, both self-hosted by whoever wants a shared server:

  • Cloudflare Workers: [Deploy to Cloudflare] Step-by-step in docs/DEPLOY-CLOUDFLARE.md: create a Shopify app, set four secrets, deploy, add the MCP URL in your AI app.
  • Any server: run shopify-multi-store serve (or the included Dockerfile) and share https://<host>/mcp.

See Connect from your AI app for per-client steps, docs/HOSTED.md for setup, and docs/ACTIONS.md for per-user access and the generic action tools.

Store authentication

MethodCommandBest fit
Admin API access tokenshopify-multi-store setupA custom app you already created in the store admin, with its shpat_ token.
Client credentialsshopify-multi-store oauthA Dev Dashboard app installed on stores in the same Shopify organization as the app.
Authorization codeshopify-multi-store oauthA Dev Dashboard app installed on a store outside that organization.

Authorization code setup uses http://127.0.0.1:3456/oauth/callback. Add it as an allowed redirect URL first.

The default authorization code scopes are read-only. Grant only the Admin API scopes required for the task.

Connect your first store

Each store needs an alias (lowercase letters, digits and hyphens, such as main) and its permanent *.myshopify.com domain, which the store admin shows under Settings > Domains. The credential depends on how you get Admin API access. Shopify now creates new apps in the Dev Dashboard; custom apps made in the store admin keep working where they already exist.

With a Dev Dashboard app (new setups):

  1. Open the Dev Dashboard (dev.shopify.com), choose Apps > Create app, and name it (for example "Multi-Store MCP").
  2. Create a version. Under access scopes, add the scopes you need. read_products,read_orders,read_inventory,read_locations,read_customers covers the read tools; for everything the tools can do, print the full list with node "$(npm root -g)/shopify-multi-store-mcp-server/scripts/print-scopes.mjs" --full and remove any scope your app is not approved for. For the authorization code method, also add the redirect URL http://127.0.0.1:3456/oauth/callback.
  3. Release the version, then install the app on your store from the Dev Dashboard, approving the scopes.
  4. Copy the app's client ID and client secret from its settings.
  5. Run shopify-multi-store oauth. Choose client-credentials if the store is in the same Shopify organization as the app, otherwise authorization-code (a browser window opens to approve). Enter the alias, the *.myshopify.com domain, the client ID and the client secret. With client credentials the server gets and refreshes tokens itself.

With a custom app created in the store admin:

  1. In the store admin, open Settings > Apps (Apps and sales channels in some admins) > Develop apps and open your app. If your admin still offers it, you can create one there.
  2. Under Configuration, give the Admin API the scopes you need, then install the app.
  3. Under API credentials, reveal the Admin API access token (it starts with shpat_; Shopify shows it once).
  4. Run shopify-multi-store setup and enter the alias, the *.myshopify.com domain and the token.

Then run shopify-multi-store doctor to check every store, and repeat for each further store. Secrets go to the operating system credential store, never to the configuration file.

Manage stores

bash
shopify-multi-store listshopify-multi-store doctorshopify-multi-store remove store-alias
Import an existing stores.json file
bash
shopify-multi-store import /absolute/path/to/stores.json

The import copies credentials into the operating system credential store and preserves configured stores. Delete the old credential file after checking the import.

MCP tools

The server exposes 29 tools.

ToolAction
shopify_list_storesList configured store aliases.
shopify_get_shop_infoRead one store's identity.
shopify_check_accessShow granted scopes and which tools or resources would fail, across one or many stores.
shopify_reportRun a cross-store report (see above).
shopify_searchList or search products, collections, orders, customers, publications, redirects, pages, files, metaobjects, markets, themes, or delivery profiles on one store or several.
shopify_getRead one product, collection, order, inventory, metafield set, theme files, blog articles, uploaded image, or bulk operation by ID.
shopify_update_pricesSet price, compare-at price and unit cost for up to 250 SKUs on one store or several.
shopify_set_inventorySet available inventory with compare-and-set protection.
shopify_create_productCreate a product with options, variants, and images.
shopify_update_productUpdate product fields, variants, media, and tags.
shopify_create_collectionCreate a manual or smart collection and publish it to chosen channels.
shopify_update_collectionUpdate a collection and add products to a manual collection.
shopify_create_discountCreate a percentage discount code.
shopify_upload_imageUpload an image to Shopify Files.
shopify_metafieldsSet and delete metafields for any owner.
shopify_redirectsCreate and delete URL redirects.
shopify_tagsAdd and remove tags on a product, order, customer, or draft order.
shopify_update_orderUpdate order note, email, shipping address, and tags.
shopify_update_customerUpdate customer note, email, and tags.
shopify_create_fulfillmentFulfill an order's open fulfillment orders, with optional tracking.
shopify_find_actionsSearch every Admin API mutation.
shopify_describe_actionDescribe one mutation.
shopify_run_actionRun any mutation on one or more stores.
shopify_graphql_queryRun a read-only Admin GraphQL query.
shopify_graphql_query_manyRun one query across several stores.
shopify_graphql_mutationChange one store after exact authorization.
shopify_graphql_schemaExplore the Admin GraphQL schema.
shopify_validate_graphql_codeblocksValidate GraphQL without running it.
shopify_search_docs_chunksSearch Shopify documentation.

Read-only operations can run in parallel. Mutations stay isolated to the selected stores.

Every guided write tool defaults to dryRun: true, which returns a before/after (or would-create) preview without changing anything; pass dryRun: false, after the user authorizes the exact store and change, to apply it. The tool then reads the result back. Tags on products, orders, and customers change with addTags and removeTags; replaceTags replaces every tag and the preview lists the tags it would remove. Write results are never dropped for size: large results are trimmed, keeping status, counts, and every item that did not apply.

shopify_graphql_mutation and shopify_run_action refuse denylisted mutations and need confirm set to the mutation name for destructive ones, including mutations that are destructive only because of their arguments, such as a product status of ARCHIVED.

Generic action tools

Three tools reach every Shopify Admin API mutation (514 in API 2026-04), including the 483 without a dedicated tool:

ToolAction
shopify_find_actionsSearch all mutations by keyword and category; flags destructive ones and existing dedicated tools.
shopify_describe_actionShow one mutation's arguments, input fields, payload, a ready-to-edit document, and a scope hint.
shopify_run_actionRun a mutation on 1 to 100 stores, with per-store variables. Dry run by default, resolving every record ID it would touch; destructive mutations need confirm set to the mutation name.

A denylist blocks mutations that mint credentials or change the app's own billing. Request the full scope set with node scripts/print-scopes.mjs --full. See docs/ACTIONS.md for worked examples and what no third-party app can do.

Shopify companion skill

Install Shopify's official shopify skill:

bash
shopify-multi-store install-shopify-skills

The command installs the skill for every supported agent it detects. Pass --agent <name> to select one agent, for example --agent claude-code.

The shopify skill is one skill with a routing table. Its admin topic searches Shopify documentation and validates custom Admin GraphQL operations. Its shopifyql topic covers sales, revenue, order, conversion, and trend analysis. Shopify's toolkit 2.0.0 merged the former shopify-admin and shopify-shopifyql skills into this one skill, and the toolkit's ucp skill (a shopping CLI) is not part of this install.

If Shopify renames the skill again, the command exits with status 1, prints the skills the toolkit ships, and shows the npx skills add command to install one by name. It never reports success after installing nothing.

This server still controls store selection, credentials, execution, and mutation authorization. Shopify's skill scripts send usage telemetry by default.

Set OPT_OUT_INSTRUMENTATION=true to turn off that telemetry.

This integration uses the official Shopify AI Toolkit. It also reflects useful patterns from Shopify Admin Skills.

Security model

Secrets never enter the main configuration file.

PlatformCredential backend
macOSKeychain
WindowsCredential Manager
LinuxSecret Service

The configuration stores aliases, domains, API versions, and non-secret OAuth client IDs. Its default path is ~/.config/codex-shopify-multi-store/stores.json.

The codex-shopify-multi-store name, in that path and as the credential store's service name, is a legacy name from the project's first version. It stays so existing installs keep their stores and credentials; it does not mean the server works only with Codex.

Set SHOPIFY_MULTI_STORE_CONFIG to use another configuration path.

  • Never commit access tokens, OAuth client secrets, .env files, or credential-bearing configuration files.
  • Grant only the Shopify Admin API scopes required for the task.
  • Confirm the target store before every mutation.
  • Read SECURITY.md for vulnerability reporting.

Linux credential storage requires a Secret Service provider, such as GNOME Keyring or KWallet.

Other installation options

Run a health check without a global install:

bash
npx -y shopify-multi-store-mcp-server doctor

Install directly from GitHub (npm runs the prepare script, which builds the server):

bash
npm install --global github:alex-brecher/shopify-multi-store

Development

bash
git clone https://github.com/alex-brecher/shopify-multi-store.gitcd shopify-multi-storenpm cinpm testnpm run test:livenpm pack --dry-run

The live test uses configured stores and performs read-only Shopify Admin API calls.

License

MIT

Read the changelog, contribution guide, security policy, and directory submission guide.

Source: README.md at commit 5eabaec

Tools

29

shopify_graphql_schema

Explore the Admin GraphQL schema for this store's API version.

Parametersstorerequiredtype_namerequired

shopify_validate_graphql_codeblocks

Validate Admin GraphQL operations against this store's API version without executing them.

Parametersstorerequiredcodeblocksrequired

shopify_create_product

Create a product with options, variants and images, and optionally add it to a manual collection. Defaults to status DRAFT and to dryRun:true, which previews the input without creating anything.

ParameterstagspricestorerequiredtitlerequireddryRunimagesstatusvendoroptionsvariantsproductTypecollectionId+1 more

shopify_update_product

Update product fields, variants, media and tags. dryRun:true (the default) returns the current product and the change without applying it; dryRun:false applies it and returns before and after. Tags: addTags and removeTags change only the named tags; replaceTags replaces all tags. A status of ARCHIVED or DRAFT takes the product off every sales channel.

ParametersidrequiredstorerequiredtitledryRunimagesstatusvendoraddTagsvariantsremoveTagsproductTypereplaceTags+2 more

shopify_create_collection

Create a manual collection (optional productIds) or a smart collection (ruleSet). Pass publicationIds to publish to explicitly selected channels. Defaults to dryRun:true, which previews the input without creating anything.

ParametersimagestorerequiredtitlerequireddryRunruleSetsortOrderproductIdspublicationIdsdescriptionHtml

shopify_update_collection

Update collection fields, rules or image, and add products to a manual collection (addProductIds). dryRun:true (the default) returns the current collection and the change without applying it; dryRun:false applies it and returns before and after.

ParametersidrequiredimagestorerequiredtitledryRunruleSetsortOrderaddProductIdsdescriptionHtml

shopify_set_inventory

Set available inventory at one location using compare-and-set protection: compareQuantity must equal the current available quantity. Read inventory first (shopify_get resource inventory). dryRun:true (the default) checks and previews without changing anything.

ParametersstorerequireddryRunreasonquantityrequiredlocationIdrequiredidempotencyKeycompareQuantityrequiredinventoryItemIdrequired

shopify_create_discount

Create a percentage discount code with an explicit start date and customer audience. Defaults to dryRun:true, which resolves segments and previews the discount without creating it.

ParameterscoderequiredstorerequiredtitlerequireddryRunendsAtstartsAtrequiredpercentagerequiredproductIdsusageLimitcollectionIdminimumQuantitycustomerSegments+3 more

shopify_upload_image

Upload a local image file or an HTTPS image to Shopify Files, wait for processing, and return its CDN URL (check it later with shopify_get resource uploaded_image). Defaults to dryRun:true, which previews the upload without sending anything.

ParametersaltstorerequireddryRunfilenameimageFilesourceUrl

shopify_update_prices

Set price, compareAtPrice and/or unit cost for up to 250 SKUs on one store (store) or the same list on several stores in parallel (stores). Resolves each SKU to the variants whose SKU matches exactly (Shopify search is a prefix match) and groups writes by product. A SKU shared by several variants is skipped unless allowDuplicates:true. Duplicate SKU rows with conflicting values are rejected before any write; identical duplicates are collapsed. After a write, verifies each variant with a separate read-back query and reports per-item outcome (applied, applied_unverified, rejected, not_found, ambiguous, unknown, skipped, mismatch) and a store status (ok, unverified, partial, failed, unknown). Large results are trimmed, never dropped: status, counts and every item that did not apply are always returned. Defaults to dryRun:true.

ParametersskusrequiredstoredryRunstoresallowDuplicates

shopify_metafields

Set (metafieldsSet) and/or delete (metafieldsDelete) up to 25 metafields each, for any owner GID. Read them with shopify_get resource metafields. Defaults to dryRun:true.

ParameterssetstorerequireddeletedryRun

shopify_redirects

Create and/or delete up to 100 URL redirects each, with a per-redirect outcome (applied, rejected or unknown) and a store status. List them with shopify_search resource redirects. Requires write_online_store_navigation. Defaults to dryRun:true.

ParametersstorerequiredcreatedeletedryRun

shopify_update_order

Update order note, email, shipping address and tags (orderUpdate). dryRun:true (the default) returns the current order and the change without applying it; dryRun:false applies it and returns before and after. Tags: addTags and removeTags change only the named tags; replaceTags replaces all tags. Requires write_orders.

ParametersidrequirednoteemailstorerequireddryRunaddTagsremoveTagsreplaceTagsshippingAddress

shopify_tags

Add and/or remove tags on a product, order, customer or draft order by GID (tagsAdd/tagsRemove). Defaults to dryRun:true.

ParametersaddstorerequireddryRunremoveownerIdrequired

shopify_update_customer

Update customer note, email and tags (customerUpdate). dryRun:true (the default) returns the current customer and the change without applying it; dryRun:false applies it and returns before and after. Tags: addTags and removeTags change only the named tags; replaceTags replaces all tags. Email marketing consent is out of scope. Requires write_customers.

ParametersidrequirednoteemailstorerequireddryRunaddTagsremoveTagsreplaceTags

shopify_create_fulfillment

Fulfill the remaining quantities of an order's OPEN and IN_PROGRESS fulfillment orders with optional tracking. notifyCustomer defaults to false. Requires read_merchant_managed_fulfillment_orders and write_merchant_managed_fulfillment_orders (Shopify reports any other missing scope, such as for fulfillment orders assigned to a fulfillment service). Defaults to dryRun:true.

ParametersstorerequireddryRunorderIdrequiredtrackingUrlnotifyCustomertrackingNumbertrackingCompany

shopify_check_access

For one or many stores, report the shop identity and granted Admin API access scopes, compare them against every tool's requirement (see src/scope-requirements.ts; tools with several resources or reports are listed as tool:resource), and report missing scopes and which tools would fail. Omit stores to check every configured store.

Parametersstores

shopify_get

Get a Shopify Record

Read one record by GID from one store. Follow each returned cursor independently. Resources: - product: Product details, variants (first/after) and media (mediaAfter). id: Product GID. - collection: Collection details, rules and a page of products. id: Collection GID. - order: Order, shipping, fulfillment, tracking and a page of line items. id: Order GID. - inventory: Inventory by product (id: Product GID) or inventory item (id: InventoryItem GID, pages through locations). - metafields: Metafields of any owner (id: owner GID); optional namespace and key. - theme_files: Theme file contents. id: OnlineStoreTheme GID; optional filenames, else pages through every file. - blog_articles: A blog's articles. id: Blog GID. - uploaded_image: Image processing status and CDN URL. id: MediaImage GID. - bulk_operation: A bulk operation's status and result URLs. id: BulkOperation GID. Partial exports stay marked incomplete.

ParametersidrequiredkeyafterfirststorerequiredresourcerequiredfilenamesnamespacemediaAfter

shopify_report

Run a Shopify Report

Run one read-only report across selected stores; each store returns its own result and completeness indicators. Reports: - portfolio_snapshot: Shop identity and product, order, customer and location counts. stores optional (all stores). - store_locations: Active, inactive, legacy, fulfillment, inventory and address status of locations. stores optional (all stores). - compare_inventory: Inventory, price, status and catalog details for exact SKUs. Needs skus (1-50). - compare_prices: Price and compare-at price for exact SKUs, with mismatches and missing variants. Needs skus (1-50). - get_product_everywhere: One exact SKU or handle across stores. Needs identifier and matchBy (sku or handle). - compare_catalog: Titles, status, vendor, type and inventory for exact product handles. Needs handles (1-50). - compare_collections: Titles, sort order, product counts, SEO and images for exact collection handles. Needs handles (1-50). - catalog_gap_report: Products missing or with different status across stores. first: products scanned per store (default 250). - catalog_health: Missing vendor, type, SEO, media, alt text, and active products without inventory. first (default 100). - duplicate_sku_report: SKUs repeated inside a store and shared across stores. first: variants scanned per store (default 250). - low_stock_report: Active variants at or below threshold (default 10), separating low, zero and negative. - recent_product_changes: Products updated in the last days (default 7). first (default 100). - list_unfulfilled_orders: Recent open unfulfilled orders. days (default 7), first (default 25). - fulfillment_sla_report: Open unfulfilled orders by age bucket and SLA breaches. lookbackDays (default 90), slaDays (default 2), first (default 100). - order_summary: Order values, discounts, shipping, tax, cancellations and statuses; currencies separate. days (default 30), first (default 100). - customer_growth: New customers in the current and previous period of days (default 30). -

ParametersdaysskusfirstqueryreportrequiredstoreshandlesmatchByslaDaysthresholdidentifierlookbackDays

shopify_search_docs_chunks

Search Shopify documentation and return source links. No store credentials are sent.

Parameterspromptrequiredapi_namemax_num_results

shopify_find_actions

Find Shopify Admin Actions

Search every Shopify Admin API mutation (hundreds of write actions, most without a dedicated tool) by keyword and optional category. Returns each action's name, one-line description, category, whether it is destructive, which dedicated tools already cover it, and a scope hint. Next: shopify_describe_action for the full signature, then shopify_run_action.

ParameterslimitquerystoreoffsetcategoryapiVersionincludeDeprecated

shopify_describe_action

Describe a Shopify Admin Action

Full signature of one Admin API mutation: arguments with types, the expanded input object fields (required markers, enum values, descriptions), the payload fields, a ready-to-edit GraphQL document with a default selection, a variables template with the required fields, a scope hint, and whether it is destructive (then shopify_run_action needs confirm set to the mutation name).

ParametersdepthstoremutationrequiredapiVersion

shopify_run_action

Run a Shopify Admin Action

Run any Shopify Admin API mutation on one to one hundred stores. Give a mutation name (a default document is built) or a full single-mutation document, plus variables shared by every store and/or variablesByStore (IDs differ per store). dryRun (the default) validates the document and variables against each store's API version and looks up every record ID in the variables and the document; nothing is changed. The preview says whether it is complete: targets chosen by a search, saved search, filter, or "all" flag, more than 250 IDs, or IDs that do not resolve make it incomplete, and then applying also needs acknowledgeIncompletePreview: true. dryRun false applies it; every ID is looked up again first, and IDs that do not resolve refuse the apply unless acknowledgeIncompletePreview is true. Destructive actions (delete, cancel, refund and similar) need confirm set to the mutation name. Mutations are never retried automatically. On a hosted server in per-user mode, Shopify limits this to what your own staff account may do.

ParametersdryRunstoresrequiredconfirmdocumentmutationvariablesvariablesByStoreacknowledgeIncompletePreview

shopify_list_stores

List Shopify Stores

List every Shopify Admin store that remains connected to this plugin. On a hosted server in per-user mode, lists only the stores you have connected with your own Shopify account and names the others with a link to connect them. This tool does not expose access tokens.

Takes no parameters.

shopify_get_shop_info

Get Shopify Store Information

Get identity and account information from one named Shopify Admin store. Use this tool before a sensitive change to make sure that the selected store is correct.

Parametersstorerequired

shopify_graphql_query

Query a Shopify Store

Run one read-only GraphQL Admin API query against one named store. Use cursor pagination and request only necessary fields.

Parametersqueryrequiredstorerequiredvariables

shopify_graphql_query_many

Query Multiple Shopify Stores

Run the same read-only GraphQL Admin API query across multiple named stores in parallel. Each store returns its own success or error result.

Parametersqueryrequiredstoresrequiredvariables

shopify_graphql_mutation

Change a Shopify Store

Run one GraphQL Admin API mutation against one named store. Set confirm to true only after the user authorizes the exact store and change. Destructive mutations (see shopify_describe_action; some are destructive only with certain arguments, such as a product status of ARCHIVED or notifyCustomer true) need confirm set to the mutation name instead, and denylisted mutations are refused, exactly as in shopify_run_action. The result reports each top-level mutation field as applied, rejected, or unknown, and the store as applied, rejected, partial, or unknown; after partial or unknown, retry only the rejected fields in a new document.

Parametersstorerequiredconfirmrequiredmutationrequiredvariables

Version history

4
  1. v2.0.3LatestOct 23, 2026
  2. v2.0.2Oct 19, 2026
  3. v2.0.1Sep 28, 2026
  4. v1.6.0Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts