Skip to main content
Glama
MCP Shopify Admin Server

MCP Shopify Admin Server

by maxiomus

MCP Shopify Admin Server

An MCP (Model Context Protocol) server that exposes Shopify Admin API capabilities to LLMs like Claude.

Features

  • Products: List, get, create, and update products

  • Orders: List, get, fulfill, and cancel orders

  • Customers: List and get customer details

  • Inventory: Get inventory levels and adjust quantities

Related MCP server: shopify

Prerequisites

  • Node.js 18+

  • A Shopify store with Admin API access

  • An Admin API access token with the required scopes

Required API Scopes

Your Shopify Admin API access token needs these scopes:

  • read_products, write_products

  • read_orders, write_orders

  • read_customers, write_customers

  • read_inventory, write_inventory

  • read_locations

Installation

  1. Clone this repository:

    git clone https://github.com/your-org/mcp-shopify-admin.git
    cd mcp-shopify-admin
  2. Install dependencies:

    npm install
  3. Create a .env file with your Shopify credentials:

    cp .env.example .env
  4. Edit .env with your store domain and access token:

    SHOPIFY_STORE_DOMAIN=your-store.myshopify.com
    SHOPIFY_ACCESS_TOKEN=shpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Usage

With Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "shopify": {
      "command": "node",
      "args": ["path/to/mcp-shopify-admin/src/index.js"],
      "env": {
        "SHOPIFY_STORE_DOMAIN": "your-store.myshopify.com",
        "SHOPIFY_ACCESS_TOKEN": "shpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

With MCP Inspector

Test the server using the MCP Inspector:

npx @modelcontextprotocol/inspector node src/index.js

Standalone

Run the server directly (for debugging):

npm start

Available Tools

Products

Tool

Description

Type

shopify_list_products

List products with filtering and pagination

Read

shopify_get_product

Get detailed product info by ID

Read

shopify_create_product

Create a new product

Write

shopify_update_product

Update an existing product

Write

Orders

Tool

Description

Type

shopify_list_orders

List orders with status filtering

Read

shopify_get_order

Get detailed order info by ID

Read

shopify_fulfill_order

Create fulfillment for an order

Write

shopify_cancel_order

Cancel an order

Write

Customers

Tool

Description

Type

shopify_list_customers

List customers with search

Read

shopify_get_customer

Get detailed customer info by ID

Read

Inventory

Tool

Description

Type

shopify_get_inventory_levels

Get inventory at locations

Read

shopify_update_inventory

Adjust inventory quantities

Write

Response Formats

All tools support two response formats via the response_format parameter:

  • json (default): Structured JSON for programmatic use

  • markdown: Human-readable formatted output

Examples

List Products

Use shopify_list_products to show me the first 10 products

Get Order Details

Use shopify_get_order with id "5123456789" and response_format "markdown"

Update Inventory

Use shopify_update_inventory to add 50 units to inventory item "12345" at location "67890"

Error Handling

The server provides clear error messages for common issues:

  • 401 Unauthorized: Check your access token

  • 403 Forbidden: Your token may lack required scopes

  • 429 Rate Limited: Wait before making more requests

  • 404 Not Found: The requested resource doesn't exist

License

MIT

Available Tools

49 tools
collection_create_executeExecute Collection CreationA
Destructive

Execute a previewed collection creation. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

collection_create_planPlan Collection CreationB

Plan creation of a new collection, optionally AUTOMATED via a rule_set. Use this when Shopify refuses to convert an existing manual collection: create an automated twin, then point downstream systems at it.

Inputs: store (required), title (required), handle, rule_set, +2 more.

collection_create_previewPreview Collection CreationB
Read-onlyIdempotent

Preview a planned collection creation.

Inputs: operation_id (required), response_format.

collection_getGet CollectionA
Read-onlyIdempotent

Get one collection by numeric ID, full GID, or handle. Reports MANUAL vs AUTOMATED and the rule set.

Inputs: store (required), id, handle, response_format.

collection_listList CollectionsA
Read-onlyIdempotent

List collections in a store. Shows whether each collection is MANUAL (hand-picked products) or AUTOMATED (rule-based), plus its rules and product count. Only AUTOMATED collections propagate their membership to external product feeds such as the Meta catalog.

Inputs: store (required), limit, query, cursor, +1 more.

collection_update_executeExecute Collection UpdateA
DestructiveIdempotent

Execute a previewed collection update. Production stores require confirm_production: true. Note: Shopify may reject converting an existing manual collection to automated; if so, create a new automated collection with collection_create instead.

Inputs: operation_id (required), response_format, confirm_production.

collection_update_planPlan Collection UpdateA

Plan an update to a collection. The main use is converting a MANUAL collection into an AUTOMATED one by supplying a rule_set (e.g. TAG EQUALS 'or-cocktail-dresses'), which makes its membership visible to external product feeds like the Meta catalog. Staged: must be previewed then executed.

Inputs: store (required), id, title, handle, +2 more.

collection_update_previewPreview Collection UpdateA
Read-onlyIdempotent

Preview a planned collection update, showing current vs new state.

Inputs: operation_id (required), response_format.

customer_getGet CustomerA
Read-onlyIdempotent

Get detailed information about a specific customer including their address and recent orders.

Inputs: id (required), store (required), response_format.

customer_listList CustomersA
Read-onlyIdempotent

List customers from a Shopify store with optional search and pagination.

Inputs: store (required), limit, query, cursor, +1 more.

inventory_adjust_executeExecute Inventory AdjustmentA
Destructive

Execute a previewed inventory adjustment. This actually changes the inventory. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

inventory_adjust_planPlan Inventory AdjustmentA

Plan an inventory adjustment. Creates a staged operation that must be previewed and executed.

Inputs: store (required), adjustment (required), location_id (required), inventory_item_id (required), +2 more.

inventory_adjust_previewPreview Inventory AdjustmentA
Read-onlyIdempotent

Preview a planned inventory adjustment. Shows the before and after quantities.

Inputs: operation_id (required), response_format.

inventory_levelsGet Inventory LevelsA
Read-onlyIdempotent

Get inventory levels for products at specific locations. Can filter by location, product, or SKU.

Inputs: store (required), sku, limit, cursor, +3 more.

operation_cancelCancel Pending OperationA
Idempotent

Cancel a pending operation that has not yet been executed. This is useful if you want to discard a planned operation.

Inputs: operation_id (required), response_format.

operation_listList Pending OperationsA
Read-onlyIdempotent

List all pending operations that are waiting for preview or execution. Operations expire after 30 minutes if not executed.

Inputs: response_format.

operation_statusGet Operation StatusA
Read-onlyIdempotent

Get detailed status of a specific operation including its current state, preview data, and result.

Inputs: operation_id (required), response_format.

order_cancel_executeExecute Order CancellationA
Destructive

Execute a previewed order cancellation. This actually cancels the order. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

order_cancel_planPlan Order CancellationA

Plan an order cancellation. This creates a staged operation that must be previewed and executed.

Inputs: store (required), order_id (required), reason, restock, +2 more.

order_cancel_previewPreview Order CancellationA
Read-onlyIdempotent

Preview a planned order cancellation. Shows what will happen.

Inputs: operation_id (required), response_format.

order_fulfill_executeExecute Order FulfillmentA
Destructive

Execute a previewed order fulfillment. This marks items as shipped. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

order_fulfill_planPlan Order FulfillmentA

Plan an order fulfillment. This creates a staged operation that must be previewed and executed.

Inputs: store (required), order_id (required), tracking_url, notify_customer, +3 more.

order_fulfill_previewPreview Order FulfillmentA
Read-onlyIdempotent

Preview a planned order fulfillment. Shows what will be shipped.

Inputs: operation_id (required), response_format.

order_getGet OrderA
Read-onlyIdempotent

Get detailed information about a specific order including line items, fulfillments, and customer info.

Inputs: id (required), store (required), response_format.

order_listList OrdersB
Read-onlyIdempotent

List orders from a Shopify store with optional filtering by status and pagination.

Inputs: store (required), limit, cursor, status, +3 more.

product_bulk_update_executeExecute Bulk Product UpdateA
Destructive

Execute a previewed bulk product update. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

product_bulk_update_planPlan Bulk Product UpdateB

Plan a bulk update of multiple products. Each product can have different updates.

Inputs: store (required), updates (required), response_format.

product_bulk_update_previewPreview Bulk Product UpdateA
Read-onlyIdempotent

Preview all changes in a bulk product update operation.

Inputs: operation_id (required), response_format.

product_create_executeExecute Product CreationA
Destructive

Execute a previewed product creation. This actually creates the product. Requires prior preview. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

product_create_planPlan Product CreationA

Plan a new product creation. This creates a staged operation that must be previewed and then executed. No changes are made until execution.

Inputs: store (required), title (required), tags, status, +5 more.

product_create_previewPreview Product CreationA
Read-onlyIdempotent

Preview a planned product creation. Shows exactly what will be created. Must be called before execution.

Inputs: operation_id (required), response_format.

product_getGet ProductA
Read-onlyIdempotent

Get detailed information about a specific product including variants, images, and inventory.

Inputs: id (required), store (required), response_format.

product_listList ProductsA
Read-onlyIdempotent

List products from a Shopify store with optional filtering and pagination.

Inputs: store (required), limit, query, cursor, +1 more.

product_publications_getGet Product Publication StatusA
Read-onlyIdempotent

Show which sales channels a product is published to. Useful for diagnosing products that exist in a collection but never appear on the storefront or in an external feed.

Inputs: id (required), store (required), response_format.

product_publish_executeExecute Product PublishA
Idempotent

Execute a previewed publish. Publishing is additive — it never unpublishes a product from a channel it is already on. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

product_publish_planPlan Product PublishA
Idempotent

Plan publishing one or more products to one or more sales channels. Use publication_list to get channel IDs. Staged: must be previewed then executed.

Inputs: store (required), product_ids (required), publication_ids (required), response_format.

product_publish_previewPreview Product PublishA
Read-onlyIdempotent

Preview which products will change publication state, and on which channels.

Inputs: operation_id (required), response_format.

product_tags_add_executeExecute Add Product TagsA
Idempotent

Execute a previewed additive tag operation via Shopify's tagsAdd mutation. Existing tags are never removed. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

product_tags_add_planPlan Add Product TagsA
Idempotent

Plan an ADDITIVE tag operation across products. Uses Shopify's tagsAdd mutation, which appends tags without touching existing ones — safe to run concurrently and immune to the stale-snapshot tag loss that productUpdate causes. Use this instead of product_update whenever you only need to add tags. Supply either targets (per-product tags) or product_ids + tags (same tags for all).

Inputs: store (required), tags, targets, product_ids, +1 more.

product_tags_add_previewPreview Add Product TagsA
Read-onlyIdempotent

Preview an additive tag operation. Shows, per product, which tags are genuinely new versus already present.

Inputs: operation_id (required), response_format.

product_tags_remove_executeExecute Remove Product TagsA
DestructiveIdempotent

Execute a previewed subtractive tag operation via tagsRemove. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

product_tags_remove_planPlan Remove Product TagsA
DestructiveIdempotent

Plan a SUBTRACTIVE tag operation using Shopify's tagsRemove mutation. Removes only the named tags and leaves every other tag untouched.

Inputs: store (required), tags, targets, product_ids, +1 more.

product_tags_remove_previewPreview Remove Product TagsA
Read-onlyIdempotent

Preview a subtractive tag operation — shows which named tags are actually present per product.

Inputs: operation_id (required), response_format.

product_update_executeExecute Product UpdateA
DestructiveIdempotent

Execute a previewed product update. Requires prior preview. Production stores require confirm_production: true.

Inputs: operation_id (required), response_format, confirm_production.

product_update_planPlan Product UpdateA

Plan a product update. Creates a staged operation that must be previewed and executed. Only provided fields will be updated.

Inputs: id (required), store (required), tags, title, +5 more.

product_update_previewPreview Product UpdateA
Read-onlyIdempotent

Preview a planned product update. Shows the diff between current and new values.

Inputs: operation_id (required), response_format.

publication_listList Publications (Sales Channels)A
Read-onlyIdempotent

List the store's publications (sales channels) — Online Store, Facebook & Instagram, Point of Sale, etc. You need a publication ID before you can publish a product to a channel.

Inputs: store (required), limit, response_format.

store_listList Configured StoresA
Read-onlyIdempotent

List all configured Shopify stores. Use this to see available stores before performing operations. Each store has a name, environment (production/staging/development), and default status.

Inputs: response_format.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 49 tools

    Disambiguation5/5

    Each tool has a distinct purpose, and the plan/preview/execute stages are clearly separated. Even overlapping tools like product_update_plan and product_tags_add_plan are explicitly disambiguated with guidance on when to use which.

    Naming Consistency5/5

    Tool names consistently follow an object_verb pattern (e.g., product_list, collection_get) and the staged operations use a uniform resource_action_plan/preview/execute suffix. The few exceptions (inventory_levels, product_publications_get) are still clear and don't break the overall pattern.

    Tool Count2/5

    At 49 tools, the server is over twice the recommended upper bound. The plan/preview/execute triple multiplies the count, but it still results in an overwhelming surface that will be difficult for agents to navigate efficiently.

    Completeness4/5

    The server covers the core Shopify domains well: products, collections, orders, customers, inventory, and publications. However, it lacks common operations like product/collection deletion, customer creation/update, and order creation, which are notable gaps for a full admin surface.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Enables AI agents to read and write Shopify store data including products, orders, customers, inventory, and more via the Admin GraphQL API.
      28
      58 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables to manage Shopify store resources like products, orders, customers, inventory, and collections through natural language using the Shopify Admin API.
      MIT