关于 Shopify
Shopify MCP Server 通过 GraphQL 提供 Shopify Admin API 操作,适用于店铺管理和电商工作流。它涵盖产品、客户、订单、库存及销售渠道,并支持列表查询筛选与分页。
主要功能
- 01管理产品、变体和媒体
- 02创建并更新客户与订单
- 03处理库存、定价和标签
- 04在销售渠道发布产品
- 05筛选、排序并分页查询
适用场景
- 01更新产品目录及其变体
- 02查看或管理客户订单
- 03检查库存数量和价格
MCP 相关
这是一个 MCP 服务,将 Shopify 店铺操作作为工具提供给 MCP 客户端。它通过客户端凭据或静态访问令牌连接 Shopify GraphQL Admin API。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @kisasa/shopify-mcpMYSHOPIFY_DOMAINYour store's myshopify.com domainSHOPIFY_CLIENT_IDClient ID of a Dev Dashboard app (use with SHOPIFY_CLIENT_SECRET, or set SHOPIFY_ACCESS_TOKEN instead)SHOPIFY_CLIENT_SECRET密钥Client secret of a Dev Dashboard appSHOPIFY_ACCESS_TOKEN密钥Static Admin API access token (shpat_...) for legacy custom apps, instead of client ID/secretSHOPIFY_API_VERSIONShopify Admin API version本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Shopify MCP 服务
适用于 Shopify API 的 MCP 服务,可通过 GraphQL API 与商店数据交互。此服务提供用于管理产品、客户、订单等的工具。
📦 软件包名称:@kisasa/shopify-mcp
🚀 命令:shopify-mcp(不是 shopify-mcp-server)
基于 lucasjahn/shopify-mcp 构建,而后者是 GeLi2001/shopify-mcp 的分支。请参阅致谢。
功能
- 产品管理:对产品、变体和选项进行完整的增删改查,包括变体图片和库存策略(8 个工具)
- 产品媒体:通过 URL 为产品添加图片,并检查处理状态(2 个工具)
- 销售渠道发布:列出销售渠道,并在这些渠道上发布或取消发布产品(4 个工具)
- 客户管理:完整的增删改查、合并和地址管理(8 个工具)
- 订单管理:智能查询、取消、关闭/重新打开、标记为已付款、履行、退款(10 个工具)
- 元字段管理:获取、设置和删除任意资源上的元字段(3 个工具)
- 集合管理:列出集合,并获取包含产品的集合详情(2 个工具)
- 配置与发现:商店信息、元字段定义、地点、市场(5 个工具)
- 库存与定价:设置数量、查看库存级别/商品、价格表、详细变体(5 个工具)
- 标签管理:为任意支持标签的资源添加/移除标签,包括批量操作(2 个工具)
- 增强型订单工具:交易、履行订单、退款详情(3 个工具)
- 字段选择:所有 GET 工具都支持
fields参数,只获取所需数据 - 仅计数模式:列表工具支持
countOnly,无需获取数据即可获取结果数量 - 分页与排序:所有列表查询均支持基于游标的分页和排序键
- 高级筛选:所有列表端点均支持传递 Shopify 查询语法
- GraphQL 集成:直接集成 Shopify 的 GraphQL Admin API(2026-10)
- 全面的错误处理:清晰显示 API 和身份验证问题的错误消息
前置条件
- Node.js(版本 18 或更高)
- 拥有自定义应用的 Shopify 商店(请参阅下方的设置说明)
设置
身份验证
此服务支持两种身份验证方式:
选项 1:客户端凭据(2026 年 1 月起的 Dev Dashboard 应用)
自 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
有些工具需要额外的权限范围。只添加你会用到的功能所需的权限:
权限范围 用途 read_all_orders60 天以前的订单(否则订单工具只能看到近期订单) read_inventory、write_inventoryget-inventory-levels、inventory-set-quantitiesread_locationsget-locations、get-inventory-levelsread_marketsget-marketsread_draft_orders、write_draft_orderscreate-draft-order、complete-draft-orderread_merchant_managed_fulfillment_orders、write_merchant_managed_fulfillment_ordersget-fulfillment-orders、create-fulfillmentread_publications、write_publicationsget-publications、get-product-publications、publish-product、unpublish-product每个工具所需权限的完整列表如下:
read_products,write_products,read_customers,write_customers,read_orders,write_orders,read_all_orders,read_inventory,write_inventory,read_locations,read_markets,read_draft_orders,write_draft_orders,read_merchant_managed_fulfillment_orders,write_merchant_managed_fulfillment_orders,read_publications,write_publications更改权限范围后,发布新版本的应用,在商店中批准该版本,然后重启 MCP 服务,使其获取具有新权限范围的令牌。
-
在你的商店中安装该应用
-
从应用的 API 凭据中复制 Client ID 和 Client Secret
服务器会自动将这些凭据换取访问令牌,并在令牌过期前刷新(令牌有效期约为 24 小时)。
选项 2:静态访问令牌(旧版应用)
如果你已有使用静态 shpat_ 访问令牌的自定义应用,仍可直接使用该令牌。
在 Claude Desktop 中使用
客户端凭据(推荐):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"@kisasa/shopify-mcp",
"--clientId",
"<YOUR_CLIENT_ID>",
"--clientSecret",
"<YOUR_CLIENT_SECRET>",
"--domain",
"<YOUR_SHOP>.myshopify.com"
]
}
}
}
通过环境变量使用客户端凭据(避免在命令行中暴露机密):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": ["-y", "@kisasa/shopify-mcp"],
"env": {
"MYSHOPIFY_DOMAIN": "<YOUR_SHOP>.myshopify.com",
"SHOPIFY_CLIENT_ID": "<YOUR_CLIENT_ID>",
"SHOPIFY_CLIENT_SECRET": "<YOUR_CLIENT_SECRET>"
}
}
}
}
要连接多个商店,请为每个商店添加一个条目,并使用不同的名称(例如 "shopify-store-a"、"shopify-store-b")。
静态访问令牌(旧版):
{
"mcpServers": {
"shopify": {
"command": "npx",
"args": [
"@kisasa/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 @kisasa/shopify-mcp \
--clientId YOUR_CLIENT_ID \
--clientSecret YOUR_CLIENT_SECRET \
--domain your-store.myshopify.com
静态访问令牌(旧版):
claude mcp add shopify -- npx @kisasa/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 @kisasa/shopify-mcp
直接安装(可选)
如果你想全局安装该软件包:
npm install -g @kisasa/shopify-mcp
然后运行它:
shopify-mcp --clientId=<ID> --clientSecret=<SECRET> --domain=<YOUR_SHOP>.myshopify.com
其他选项
--apiVersion:指定 Shopify API 版本(默认值:2026-10)。也可以通过SHOPIFY_API_VERSION环境变量设置。
⚠️ 重要: 如果使用命令行参数时看到有关“需要 SHOPIFY_ACCESS_TOKEN 环境变量”的错误,可能是安装了其他软件包。请确认使用的是 @kisasa/shopify-mcp,而不是 shopify-mcp-server 或未加作用域的 shopify-mcp。
可用工具(51)
共享功能
所有列表查询工具(get-products、get-customers、get-orders、get-customer-orders、get-collections)均支持:
- 基于游标的分页:
after/before(游标字符串),响应中包含pageInfo(hasNextPage、hasPreviousPage、startCursor、endCursor) - 排序:
sortKey(各资源专属的枚举值)和reverse(布尔值) - 高级筛选:
query或searchQuery参数,接受 Shopify 查询语法 - 字段选择:
fields参数,用于仅获取特定字段,减少响应大小 - 仅计数模式:
countOnly参数仅返回{ count: N },不获取任何资源数据 — 可用于在分页前估算查询结果数量
产品管理(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(字符串,可选):分页游标fields(数组,可选):要获取的字段。可用字段:id、title、description、handle、status、createdAt、updatedAt、totalInventory、vendor、productType、tags、mediaCount、priceRange、media、variants(前 10 个,包含id、title、price、inventoryQuantity、sku、barcode、inventoryPolicy)countOnly(布尔值,可选):仅返回{ count: N }
-
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" }]mediaId(字符串,可选):用作变体图片的产品媒体 GID(gid://shopify/MediaImage/...)。该媒体必须已附加到产品(参见add-product-media),且状态应为READYinventoryPolicy(字符串,可选):"DENY"会在库存为 0 时停止销售,"CONTINUE"允许超卖
- 返回:
{ created, updated, userErrors }。每个变体都包含inventoryPolicy、mediaId和imageUrl。userErrors会随结果返回(标记为operation: "create"或"update"),不会作为异常抛出,因此务必检查
-
delete-product-variants- 从产品中删除一个或多个变体
- 输入:
productId(字符串,必填):Shopify 产品 GIDvariantIds(字符串数组,必填):要删除的变体 GID
产品媒体(2 个工具)
-
add-product-media- 通过公开 URL 将图片添加到现有产品(使用
productUpdate和media;productCreateMedia已弃用) - 输入:
productId(字符串,必填):Shopify 产品 GIDmedia(数组,必填):要添加的图片,每项格式为{ originalSource, alt? }。originalSource必须是 Shopify 可下载的公开访问 URL
- 返回:
{ productId, media, userErrors },其中每个新媒体项都包含id、status、alt、imageUrl和mediaErrors - Shopify 会异步处理媒体。新项通常会先处于
UPLOADED或PROCESSING状态,且imageUrl: null;使用get-product-media确认其状态变为READY
- 通过公开 URL 将图片添加到现有产品(使用
-
get-product-media- 列出产品的媒体及其处理状态
- 输入:
productId(字符串,必填):Shopify 产品 GID
- 返回:每项的
id、status(UPLOADED/PROCESSING/READY/FAILED)、mediaContentType、alt、imageUrl和mediaErrors(说明FAILED状态的原因)
示例:为某个变体指定专属图片
- 使用图片 URL 调用
add-product-media - 调用
get-product-media,直到新项状态变为READY,然后复制其id - 使用
{ id: "<variant GID>", mediaId: "<media GID>" }调用manage-product-variants
销售渠道发布(4 个工具)
这些工具适用于销售渠道(带有应用目录的发布渠道,例如 Online Store 和 Point of Sale)。不包括市场和 B2B 目录。需要 read_publications 和 write_publications 权限范围。
-
get-publications- 列出商店的销售渠道
- 输入:无
- 返回:每个渠道的
id、name(例如"Online Store")、handle(例如"online_store")、autoPublish和supportsFuturePublishing
-
get-product-publications- 显示产品是否已发布到每个销售渠道
- 输入:
productId(字符串,必填):Shopify 产品 GID
- 返回:
{ productId, title, publications },其中包含每个渠道的publicationId、name、published和publishDate
-
publish-product- 将产品发布到一个或多个销售渠道(使用
publishablePublish) - 输入:
productId(字符串,必填):Shopify 产品 GIDpublicationIds(字符串数组,可选):来自get-publications的发布 GIDpublicationNames(字符串数组,可选):与get-publications返回值完全一致的渠道名称,例如["Online Store", "Point of Sale"]- 必须且只能提供
publicationIds或publicationNames其中之一。无法匹配任何渠道或匹配到多个渠道的名称会在任何更改发生前被拒绝
- 返回:产品之后在每个渠道上的状态,以及
userErrors
- 将产品发布到一个或多个销售渠道(使用
-
unpublish-product- 将产品从一个或多个销售渠道取消发布(使用
publishableUnpublish) - 输入:与
publish-product相同 - 返回:产品之后在每个渠道上的状态,以及
userErrors
- 将产品从一个或多个销售渠道取消发布(使用
客户管理(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(string,必填):订单 GIDrefundLineItems(array,可选):要退款的商品行,包含lineItemId、quantity、restockType(CANCEL/RETURN/NO_RESTOCK)、locationIdshipping(object,可选):{ amount, fullRefund }运费退款note(string,可选):退款备注notify(boolean,可选):发送退款通知
-
create-draft-order- 为电话/聊天销售、开具发票或批发创建草稿订单
- 输入:
lineItems(array,必填):商品变体(variantId)或自定义商品(title+ 价格)。最多 499 个customerId(string,可选):客户 GIDemail、phone、note、tags、poNumber(可选)shippingAddress、billingAddress(object,可选)appliedDiscount(object,可选):{ title, value, valueType }订单级折扣
草稿订单管理(1 个工具)
-
complete-draft-order- 完成草稿订单,将其转换为正式订单
- 输入:
draftOrderId(string,必填):草稿订单 GIDpaymentGatewayId(string,可选):支付网关 GID
Metafield 管理(3 个工具)
-
get-metafields- 获取任意 Shopify 资源(商品、订单、客户、变体、系列等)的 metafield
- 输入:
ownerId(string,必填):任意资源的 GIDnamespace(string,可选):按命名空间筛选first(number,默认值:25):要返回的 metafield 数量after(string,可选):分页游标
-
set-metafields- 为任意 Shopify 资源设置 metafield。以原子方式创建或更新最多 25 个 metafield
- 输入:
metafields(array,必填):要设置的 metafield,每个包含ownerId、key、value,以及可选的namespace、type
-
delete-metafields- 从任意 Shopify 资源中删除 metafield
- 输入:
metafields(array,必填):要删除的 metafield,每个包含ownerId、namespace、key
库存管理(1 个工具)
-
inventory-set-quantities- 设置特定地点商品的绝对库存数量
- 输入:
reason(string,必填):变更原因(例如"correction"、"cycle_count_available")name(string,必填):"available"或"on_hand"quantities(array,必填):商品项,包含inventoryItemId、locationId、quantity,以及可选的changeFromQuantitychangeFromQuantity(integer 或 null,可选):你预期当前存储的数量。Shopify 仅在该数量仍匹配时应用变更,否则会返回CHANGE_FROM_QUANTITY_STALE错误。省略此项(或传入null)即可在不进行此检查的情况下设置数量
idempotencyKey(string,可选):请求的幂等键,Admin API 2026-04 及更高版本要求提供。如果省略,每次调用都会生成新的 UUID。仅在重试完全相同的请求时重复使用同一个键
- 返回:
{ idempotencyKey, adjustmentGroup, userErrors }。userErrors包含code(例如CHANGE_FROM_QUANTITY_STALE、IDEMPOTENCY_KEY_PARAMETER_MISMATCH),错误会通过返回值提供而非抛出,因此务必检查这些错误
标签管理(2 个工具)
-
manage-tags- 为任何支持标签的资源(订单、产品、客户、草稿订单、文章)添加或移除标签
- 输入:
id(字符串,必填):资源的 GID(例如gid://shopify/Product/123)tags(字符串数组,必填):要添加或移除的标签action(字符串,必填):"add"或"remove"
-
manage-tags-bulk- 在单次调用中批量为最多 100 个资源添加或移除标签(并行运行变更操作)
- 输入:
ids(字符串数组,必填):资源 GID(最多 100 个)。数量更多时,请分多次调用tags(字符串数组,必填):要添加或移除的标签action(字符串,必填):"add"或"remove"
集合管理(2 个工具)
-
get-collections- 搜索、分页并排序列集合
- 输入:
query(字符串,可选):Shopify 查询语法limit(数字,默认值:10):要返回的集合数量上限sortKey、reverse、after/before:标准分页和排序参数fields、countOnly:标准字段选择和仅计数模式
-
get-collection-by-id- 获取单个集合的完整详情,包括产品、规则(智能集合)、SEO 和图片
- 输入:
collectionId(字符串,必填):集合 ID(例如gid://shopify/Collection/123或仅123)productsFirst(数字,默认值:25):要包含的产品数量(设为 0 则跳过)fields(数组,可选):要获取的集合级字段(id、title、handle、descriptionHtml、sortOrder、templateSuffix、updatedAt、productsCount、ruleSet、image、seo)
配置与发现(4 个工具)
get-shop-info— 获取商店详情(名称、域名、套餐、货币、时区等)get-metafield-definitions— 分页列出任意所有者类型的元字段定义get-locations— 列出所有有效地点及其地址和配送服务信息get-markets— 列出所有市场及其地区、货币和域名
增强订单与配送(3 个工具)
get-order-transactions— 获取订单的付款交易(支付网关、状态、金额、卡片详情)get-fulfillment-orders— 获取订单的配送订单(行项目、分配的地点、状态)get-order-refund-details— 获取订单的退款历史(行项目、金额、补货情况)
库存与定价(4 个工具)
另请参阅库存管理下的 inventory-set-quantities。
get-inventory-levels— 获取商品在各地点的库存水平get-inventory-items— 获取产品的库存商品信息(成本、跟踪、原产国)get-price-lists— 列出包含固定价格和数量规则的价格表get-product-variants-detailed— 获取详细的变体信息(库存、定价、图片、元字段)
订单查询筛选器参考
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 日志。
macOS:
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
Windows(PowerShell):
Get-Content "$env:APPDATA\Claude\logs\mcp*.log" -Tail 20 -Wait
常见原因:
- “Access denied for … field”:应用缺少某个权限范围。请参阅身份验证下的权限范围表,然后发布新版本的应用,在应用商店中批准该版本,并重启服务。
- 工具未显示:编辑配置后,完全退出并重启 Claude Desktop。
发布
当版本更新提交到 main 后,.github/workflows/publish.yml 会自动发布:
- 在你的 PR 中,更新
package.json中的version,以及server.json中的两个version字段(它们必须一致,否则工作流会失败)。 - 合并到
main。工作流会发布到 npm(附带来源证明),发布到 MCP Registry,并创建vX.Y.ZGitHub 版本。
未更改版本的合并不会触发发布。
致谢
本项目基于以下项目的成果构建:
- GeLi2001/shopify-mcp:最初的 Shopify MCP 服务
- lucasjahn/shopify-mcp:最初项目的一个分支,新增了字段选择、仅计数模式和许多只读工具
感谢这两个项目及其贡献者。
许可证
MIT。请参阅 LICENSE。原始版权声明予以保留。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。