关于 Shopify MCP Server
Shopify MCP Server 是一个基于 TypeScript 的 MCP 服务,通过 Shopify GraphQL Admin API 管理店铺数据。适用于希望在 Claude、Cursor 等 MCP 主机中操作商品、客户和订单的开发者。
主要功能
- 01商品、变体与选项的增删改查
- 02客户管理与地址维护
- 03订单查询、取消、退款与发货
- 04元字段、库存与标签管理
- 05游标分页、排序与 Shopify 查询语法过滤
- 06支持客户端凭证与静态访问令牌两种认证
适用场景
- 01通过 AI 助手批量创建或更新商品
- 02在 MCP 主机中查询与处理订单
- 03按标签或消费金额筛选客户
MCP 相关
该项目是 MCP 服务,向 Claude、Cursor 等 MCP 客户端提供 31 个工具,用于读写 Shopify 店铺数据。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Shopify MCP Server
(如果喜欢,请点个星标!)
用于 Shopify API 的 MCP 服务,可通过 GraphQL API 与店铺数据交互。此服务提供用于管理产品、客户、订单等的工具。
📦 包名称:shopify-mcp
🚀 命令:shopify-mcp(不是 shopify-mcp-server)
功能
- 产品管理:完整的产品、变体和选项 CRUD(8 个工具)
- 客户管理:完整的 CRUD、合并和地址管理(8 个工具)
- 订单管理:智能查找、取消、关闭/重新打开、标记为已付款、履约、退款(10 个工具)
- 元字段管理:获取、设置和删除任意资源上的元字段(3 个工具)
- 库存管理:设置各个地点的绝对库存数量(1 个工具)
- 标签管理:为任意可添加标签的资源添加/移除标签(1 个工具)
- 分页与排序:所有列表查询均支持基于游标的分页和排序键
- 高级筛选:所有列表端点均支持传递 Shopify 查询语法
- GraphQL 集成:直接集成 Shopify 的 GraphQL Admin API(2026-01)
- 全面的错误处理:为 API 和身份验证问题提供清晰的错误消息
前置条件
- Node.js(版本 18 或更高)
- 一个 Shopify 店铺及其自定义应用(参见下方设置说明)
设置
身份验证
此服务支持两种身份验证方式:
选项 1:客户端凭据(Dev Dashboard 应用,2026 年 1 月起)
自 2026 年 1 月 1 日起,新建的 Shopify 应用将在 Dev Dashboard 中创建,并使用 OAuth 客户端凭据,而非静态访问令牌。
- 在 Shopify 管理后台中,前往 Settings > Apps and sales channels
- 点击 Develop apps > Build app in dev dashboard
- 创建新应用并配置 Admin API scopes:
read_products、write_productsread_customers、write_customersread_orders、write_orders
- 在店铺中安装该应用
- 从应用的 API 凭据中复制 Client ID 和 Client Secret
服务会自动使用这些凭据换取访问令牌,并在令牌过期前刷新(令牌有效期约为 24 小时)。
选项 2:静态访问令牌(旧版应用)
如果你有使用静态 shpat_ 访问令牌的现有自定义应用,仍可直接使用。
在 Claude Desktop 中使用
客户端凭据(推荐):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"shopify-mcp",
"--clientId",
"<YOUR_CLIENT_ID>",
"--clientSecret",
"<YOUR_CLIENT_SECRET>",
"--domain",
"<YOUR_SHOP>.myshopify.com"
]
}
}
}
静态访问令牌(旧版):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"shopify-mcp",
"--accessToken",
"<YOUR_ACCESS_TOKEN>",
"--domain",
"<YOUR_SHOP>.myshopify.com"
]
}
}
}
Claude Desktop 配置文件的位置:
- MacOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
在 Claude Code 中使用
客户端凭据:
claude mcp add shopify -- npx shopify-mcp \
--clientId YOUR_CLIENT_ID \
--clientSecret YOUR_CLIENT_SECRET \
--domain your-store.myshopify.com
静态访问令牌(旧版):
claude mcp add shopify -- npx shopify-mcp \
--accessToken YOUR_ACCESS_TOKEN \
--domain your-store.myshopify.com
替代方式:使用环境变量在本地运行
如果你更愿意使用环境变量,而不是命令行参数:
-
创建
.env文件并填入 Shopify 凭据:客户端凭据:
SHOPIFY_CLIENT_ID=your_client_id SHOPIFY_CLIENT_SECRET=your_client_secret MYSHOPIFY_DOMAIN=your-store.myshopify.com静态访问令牌(旧版):
SHOPIFY_ACCESS_TOKEN=your_access_token MYSHOPIFY_DOMAIN=your-store.myshopify.com -
使用 npx 运行服务:
npx shopify-mcp
直接安装(可选)
如果你想全局安装此包:
npm install -g shopify-mcp
然后运行:
shopify-mcp --clientId=<ID> --clientSecret=<SECRET> --domain=<YOUR_SHOP>.myshopify.com
其他选项
--apiVersion:指定 Shopify API 版本(默认值:2026-01)。也可通过SHOPIFY_API_VERSION环境变量设置。
⚠️ 重要: 如果使用命令行参数时看到“需要 SHOPIFY_ACCESS_TOKEN 环境变量”的错误,你可能安装了其他包。请确认使用的是 shopify-mcp,而不是 shopify-mcp-server。
可用工具(31)
分页、排序与筛选
所有列表查询工具(get-products、get-customers、get-orders、get-customer-orders)均支持:
- 基于游标的分页:
after/before(游标字符串),响应中包含pageInfo(hasNextPage、hasPreviousPage、startCursor、endCursor) - 排序:
sortKey(各资源特有的枚举值)和reverse(布尔值) - 高级筛选:
query或searchQuery参数,接受 Shopify 查询语法
产品管理(8 个工具)
-
get-products- 获取所有产品,或按标题搜索,并支持分页和排序
- 输入:
searchTitle(字符串,可选):按标题筛选产品(包装为title:*...*)limit(数字,默认值:10):要返回的产品数量上限query(字符串,可选):原始 Shopify 查询字符串(例如,"status:active vendor:Nike tag:sale")sortKey(字符串,可选):可选值为CREATED_AT、ID、INVENTORY_TOTAL、PRODUCT_TYPE、PUBLISHED_AT、RELEVANCE、TITLE、UPDATED_AT、VENDORreverse(布尔值,可选):反转排序顺序after/before(字符串,可选):分页游标
-
get-product-by-id- 按 ID 获取指定产品的完整详情,包括 SEO、选项、媒体、款式和系列
- 输入:
productId(字符串,必填):Shopify 产品 GID
- 返回:
productType、descriptionHtml、seo、options(含optionValues)、media(图片)、variants、collections、tags、vendor、价格范围、库存
-
create-product- 创建新产品。使用
productOptions时,Shopify 会注册所有选项值,但只创建一个默认款式(每个选项的第一个值,价格为 $0)。之后使用manage-product-variants并设置strategy: REMOVE_STANDALONE_VARIANT,以创建所有带价格的实际款式。 - 输入:
title(字符串,必填):产品标题descriptionHtml(字符串,可选):带 HTML 的描述handle(字符串,可选):URL 别名。省略时根据标题自动生成vendor(字符串,可选):产品供应商productType(字符串,可选):产品类型tags(字符串数组,可选):产品标签status(字符串,可选):"ACTIVE"、"DRAFT"或"ARCHIVED"。默认值为"DRAFT"seo(对象,可选):用于搜索引擎的{ title, description }metafields(对象数组,可选):自定义元字段(namespace、key、value、type)productOptions(对象数组,可选):内联创建的选项,例如[{ name: "Size", values: [{ name: "S" }, { name: "M" }] }]。最多 3 个选项。collectionsToJoin(字符串数组,可选):要将产品加入的系列 GID
- 创建新产品。使用
-
update-product- 更新现有产品的字段
- 输入:
id(字符串,必填):Shopify 产品 GIDtitle(字符串,可选):新标题descriptionHtml(字符串,可选):新描述handle(字符串,可选):新的 URL 别名vendor(字符串,可选):新供应商productType(字符串,可选):新产品类型tags(字符串数组,可选):新标签(覆盖现有标签)status(字符串,可选):"ACTIVE"、"DRAFT"或"ARCHIVED"seo(对象,可选):用于搜索引擎的{ title, description }metafields(对象数组,可选):要设置或更新的元字段collectionsToJoin(字符串数组,可选):要将产品加入的系列 GIDcollectionsToLeave(字符串数组,可选):要将产品移出的系列 GIDredirectNewHandle(布尔值,可选):若为 true,旧别名将重定向至新别名
-
delete-product- 删除产品
- 输入:
id(字符串,必填):Shopify 产品 GID
-
manage-product-options- 创建、更新或删除产品选项(例如,尺寸、颜色)
- 输入:
productId(字符串,必填):Shopify 产品 GIDaction(字符串,必填):"create"、"update"或"delete"variantStrategy(字符串,可选):"LEAVE_AS_IS"(默认值)或"CREATE"— 控制添加选项时是否生成新的变体组合- 对于
action: "create":options(数组,必填):要创建的选项,例如[{ name: "Size", values: ["S", "M", "L"] }]
- 对于
action: "update":optionId(字符串,必填):要更新的选项 GIDname(字符串,可选):选项的新名称position(数字,可选):新位置valuesToAdd(字符串数组,可选):要添加的值valuesToDelete(字符串数组,可选):要移除的值 GID
- 对于
action: "delete":optionIds(字符串数组,必填):要删除的选项 GID
-
manage-product-variants- 批量创建或更新产品变体
- 输入:
productId(字符串,必填):Shopify 产品 GIDstrategy(字符串,可选):创建时如何处理默认变体。"DEFAULT"(自动移除 "Default Title")、"REMOVE_STANDALONE_VARIANT"(推荐,以获得完全控制权)或"PRESERVE_STANDALONE_VARIANT"variants(数组,必填):要创建或更新的变体。每个变体包含:id(字符串,可选):用于更新的变体 GID。省略则创建新变体price(字符串,可选):价格,例如"49.00"compareAtPrice(字符串,可选):用于显示折扣的划线价sku(字符串,可选):SKU(映射到inventoryItem.sku)tracked(布尔值,可选):是否跟踪库存。按需印刷商品请设为falsetaxable(布尔值,可选):该变体是否应纳税barcode(字符串,可选):条形码weight(数字,可选):变体重量weightUnit(字符串,可选):"GRAMS"、"KILOGRAMS"、"OUNCES"或"POUNDS"optionValues(数组,可选):选项值,例如[{ optionName: "Size", name: "A4" }]
-
delete-product-variants- 从产品中删除一个或多个变体
- 输入:
productId(字符串,必填):Shopify 产品 GIDvariantIds(字符串数组,必填):要删除的变体 GID
客户管理(8 个工具)
-
get-customers- 使用搜索、分页和排序列出客户
- 输入:
searchQuery(string,可选):自由文本或 Shopify 查询语法(例如"country:US tag:vip orders_count:>5")limit(number,默认值:10):要返回的客户数量上限sortKey(string,可选):以下选项之一:CREATED_AT、ID、LAST_UPDATE、LOCATION、NAME、ORDERS_COUNT、RELEVANCE、TOTAL_SPENT、UPDATED_ATreverse(boolean,可选):反转排序顺序after/before(string,可选):分页游标
-
get-customer-by-id- 根据 ID 获取单个客户的完整详细信息
- 输入:
id(string,必填):Shopify 客户 ID(仅限数字,例如"6276879810626")
- 返回:姓名、电子邮件、电话、地址、标签、备注、税务状态、消费金额、订单数量、自定义元字段
-
create-customer- 创建新客户
- 输入:
firstName(string,可选):客户的名字lastName(string,可选):客户的姓氏email(string,可选):客户的电子邮件地址phone(string,可选):客户的电话号码tags(字符串数组,可选):要应用的标签note(string,可选):客户备注taxExempt(boolean,可选):客户是否免税metafields(对象数组,可选):自定义元字段(namespace、key、value、type)addresses(对象数组,可选):客户地址(address1、address2、city、provinceCode、zip、country、phone)
-
update-customer- 更新客户信息
- 输入:
id(string,必填):Shopify 客户 ID(仅限数字,例如"6276879810626")firstName(string,可选):客户的名字lastName(string,可选):客户的姓氏email(string,可选):客户的电子邮件地址phone(string,可选):客户的电话号码tags(字符串数组,可选):要应用于客户的标签note(string,可选):客户备注taxExempt(boolean,可选):客户是否免税emailMarketingConsent(object,可选):电子邮件营销许可设置marketingState(string,必填):"NOT_SUBSCRIBED"、"SUBSCRIBED"、"UNSUBSCRIBED"或"PENDING"consentUpdatedAt(string,可选):ISO 8601 时间戳marketingOptInLevel(string,可选):"SINGLE_OPT_IN"、"CONFIRMED_OPT_IN"或"UNKNOWN"
metafields(对象数组,可选):客户元字段
-
delete-customer- 删除客户
- 输入:
id(string,必填):Shopify 客户 ID(仅限数字,例如"6276879810626")
-
customer-merge- 将两条客户记录合并为一条
- 输入:
customerOneId(string,必填):第一位客户的 GIDcustomerTwoId(string,必填):第二位客户的 GIDoverrideFields(object,可选):指定从哪位客户保留哪些字段(firstName、lastName、email、phone、defaultAddress、note、tags)
-
manage-customer-address- 创建、更新或删除客户的邮寄地址
- 输入:
customerId(string,必填):客户 GIDaction(string,必填):"create"、"update"或"delete"addressId(string,可选):地址 GID(更新或删除时必填)address(object,可选):地址字段(创建或更新时必填):address1、address2、city、company、countryCode、firstName、lastName、phone、provinceCode、zipsetAsDefault(boolean,可选):设为客户的默认地址
订单管理(10 个工具)
-
get-orders- 通过筛选、分页和排序获取订单
- 输入:
status(字符串,可选):"any"、"open"、"closed"或"cancelled"。默认值为"any"limit(数字,默认值:10):要返回的订单数上限query(字符串,可选):原始 Shopify 查询字符串(例如,"financial_status:paid fulfillment_status:shipped tag:rush")sortKey(字符串,可选):CREATED_AT、ORDER_NUMBER、TOTAL_PRICE、FINANCIAL_STATUS、FULFILLMENT_STATUS、UPDATED_AT、CUSTOMER_NAME、PROCESSED_AT、ID、RELEVANCE之一reverse(布尔值,可选):反转排序顺序after/before(字符串,可选):分页游标
-
get-order-by-id- 通过智能查找获取指定订单 — 支持订单名称(
#77235或77235)、数字 ID(8054938337547)或完整 GID(gid://shopify/Order/...) - 输入:
orderId(字符串,必填):订单名称、数字 ID 或完整 GID
- 返回:价格、客户、收货/账单地址、商品项、标签、备注、元字段、取消原因、退货状态、折扣码、采购订单号、时间戳
- 通过智能查找获取指定订单 — 支持订单名称(
-
update-order- 更新现有订单
- 输入:
id(字符串,必填):Shopify 订单 GIDtags(字符串数组,可选):订单的新标签email(字符串,可选):更新订单中的客户电子邮箱note(字符串,可选):订单备注phone(字符串,可选):订单电话号码poNumber(字符串,可选):采购订单号customAttributes(对象数组,可选):自定义键值属性metafields(对象数组,可选):订单元字段shippingAddress(对象,可选):收货地址字段
-
get-customer-orders- 通过分页和排序获取指定客户的订单
- 输入:
customerId(字符串,必填):Shopify 客户 ID(仅限数字,例如,"6276879810626")limit(数字,默认值:10):要返回的订单数上限sortKey(字符串,可选):与get-orders相同的排序键reverse(布尔值,可选):反转排序顺序after/before(字符串,可选):分页游标
-
order-cancel- 取消订单,可选择退款、重新入库和通知客户。不可撤销。
- 输入:
orderId(字符串,必填):订单 GIDreason(字符串,必填):"CUSTOMER"、"DECLINED"、"FRAUD"、"INVENTORY"、"OTHER"或"STAFF"restock(布尔值,必填):是否重新入库notifyCustomer(布尔值,默认值:false):通知客户staffNote(字符串,可选):内部备注refund(布尔值,可选):退款至原支付方式
-
order-close-open- 关闭或重新打开订单
- 输入:
orderId(字符串,必填):订单 GIDaction(字符串,必填):"close"或"open"
-
order-mark-as-paid- 将订单标记为已付款(用于手动/线下付款)
- 输入:
orderId(字符串,必填):订单 GID
-
create-fulfillment- 创建履行记录(将商品标记为已发货),可选添加追踪信息
- 输入:
lineItemsByFulfillmentOrder(数组,必填):要履行的履行订单和商品项trackingInfo(对象,可选):追踪详情{ number, url, company }notifyCustomer(布尔值,默认值:false):发送发货通知
-
refund-create- 创建全额或部分退款,可选择是否补货
- 输入:
orderId(字符串,必填):订单 GIDrefundLineItems(数组,可选):要退款的商品项,包含lineItemId、quantity、restockType(CANCEL/RETURN/NO_RESTOCK)、locationIdshipping(对象,可选):{ amount, fullRefund }运费退款note(字符串,可选):退款备注notify(布尔值,可选):发送退款通知
-
create-draft-order- 为电话/聊天销售、开具发票或批发创建草稿订单
- 输入:
lineItems(数组,必填):产品变体(variantId)或自定义商品(title+ 价格)。最多 499 项customerId(字符串,可选):客户 GIDemail、phone、note、tags、poNumber(可选)shippingAddress、billingAddress(对象,可选)appliedDiscount(对象,可选):{ title, value, valueType }订单级折扣
草稿订单管理(1 个工具)
-
complete-draft-order- 完成草稿订单,将其转换为正式订单
- 输入:
draftOrderId(字符串,必填):草稿订单 GIDpaymentGatewayId(字符串,可选):支付网关 GID
Metafield 管理(3 个工具)
-
get-metafields- 获取任意 Shopify 资源(产品、订单、客户、变体、系列等)的 Metafield
- 输入:
ownerId(字符串,必填):任意资源的 GIDnamespace(字符串,可选):按命名空间筛选first(数字,默认值:25):要返回的 Metafield 数量after(字符串,可选):分页游标
-
set-metafields- 为任意 Shopify 资源设置 Metafield。以原子方式创建或更新最多 25 个 Metafield
- 输入:
metafields(数组,必填):要设置的 Metafield,每项包含ownerId、key、value,以及可选的namespace、type
-
delete-metafields- 从任意 Shopify 资源中删除 Metafield
- 输入:
metafields(数组,必填):要删除的 Metafield,每项包含ownerId、namespace、key
库存管理(1 个工具)
-
inventory-set-quantities- 设置特定地点商品的绝对库存数量
- 输入:
reason(字符串,必填):变更原因(例如"correction"、"cycle_count_available")name(字符串,必填):"available"或"on_hand"quantities(数组,必填):商品项,包含inventoryItemId、locationId、quantity
标签管理(1 个工具)
-
manage-tags- 为任意支持标签的资源(订单、产品、客户、草稿订单、文章)添加或移除标签
- 输入:
id(字符串,必填):资源的 GIDtags(字符串数组,必填):要添加或移除的标签action(字符串,必填):"add"或"remove"
订单查询筛选器参考
get-orders 工具的 query 参数支持 Shopify 搜索语法:
| 筛选器 | 示例 |
|---|---|
name | name:#77235 |
created_at | created_at:>2024-01-01 或 created_at:2024-01-01..2024-03-31 |
updated_at | updated_at:>2024-06-01 |
financial_status | financial_status:paid |
fulfillment_status | fulfillment_status:shipped |
status | status:open |
email | email:[email protected] |
tag / tag_not | tag:vip tag_not:wholesale |
discount_code | discount_code:SUMMER20 |
sku | sku:PROD-001 |
risk_level | risk_level:high |
gateway | gateway:shopify_payments |
test | test:true |
调试
如果遇到问题,请检查 Claude Desktop 的 MCP 日志:
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。