Shopify商店管理服务器

Shopify MCP Server是一个通过GraphQL API与Shopify商店数据交互的服务器,提供产品、客户、订单等管理工具。

  • by GeLi2001
  • TypeScript
  • 本地部署
  • 239 星标
  • 更新于
在 GitHub 查看 GeLi2001/shopify-mcp

使用说明

Shopify MCP服务器

(如果你愿意,请留下一颗星!)

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和身份验证问题的错误消息

先决条件

  1. Node.js(版本18或更高)
  2. 带有自定义应用程序的Shopify商店(请参阅下面的设置说明)

设置

认证

此服务器支持两种身份验证方法:

选项1:客户端凭据(开发者仪表板应用程序,2026年1月以上)

截至2026年1月1日,新的Shopify应用程序在 开发人员仪表板 并使用OAuth客户端凭据而不是静态访问令牌。

  1. 从您的Shopify管理员,转到 设置 > 应用程序和销售渠道
  2. 点击 开发应用程序 > 在开发仪表板中构建应用程序
  3. 创建新应用程序并配置 管理API范围:
    • read_products, write_products
    • read_customers, write_customers
    • read_orders, write_orders
  4. 在您的商店中安装应用程序
  5. 复制您的 客户端ID 和 客户端密钥 从应用程序的API凭据

服务器将自动将这些交换为访问令牌,并在到期前刷新(令牌有效期约为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
  • 窗户: %APPDATA%/Claude/claude_desktop_config.json

使用Claude代码

客户端凭据:

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

替代方案:使用环境变量在本地运行

如果您更喜欢使用环境变量而不是命令行参数:

  1. 创建一个 .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
    
  2. 使用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 环境变量。

⚠️ 重要提示: 如果在使用命令行参数时看到有关“SHOPY_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个工具)

  1. get-products

    • 获取所有产品或按标题搜索,并进行分页和排序
    • 输入:
      • searchTitle (字符串,可选):按标题过滤产品(包装在 title:*...*)
      • limit (数字,默认值:10):要退回的最大产品数量
      • query (string,可选):原始Shopify查询字符串(例如。 "status:active vendor:Nike tag:sale")
      • sortKey (字符串,可选):其中之一 CREATED_AT, ID, INVENTORY_TOTAL, PRODUCT_TYPE, PUBLISHED_AT, RELEVANCE, TITLE, UPDATED_AT, VENDOR
      • reverse (boolean,可选):颠倒排序顺序
      • after / before (字符串,可选):分页游标
  2. get-product-by-id

    • 按ID获取特定产品,包括搜索引擎优化、选项、媒体、变体和收藏等全部详细信息
    • 输入:
      • productId (字符串,必填):Shopify产品GID
    • 退货: productType, descriptionHtml, seo, options (与 optionValues), media (图像), variants, collections, tags, vendor、价格范围、库存
  3. create-product

    • 创建新产品。使用时 productOptions,Shopify注册了所有选项值,但只创建了一个默认变量(每个选项的第一个值,价格为0美元)。使用 manage-product-variants 随着 strategy: REMOVE_STANDALONE_VARIANT 然后创建所有带有价格的真实变体。
    • 输入:
      • title (字符串,必填):产品的标题
      • descriptionHtml (字符串,可选):HTML描述
      • handle (字符串,可选):URL slug。如果省略,则从标题自动生成
      • 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以将产品添加到
  4. update-product

    • 更新现有产品的字段
    • 输入:
      • id (字符串,必填):Shopify产品GID
      • title (字符串,可选):新标题
      • descriptionHtml (字符串,可选):新描述
      • handle (字符串,可选):新URL段符
      • vendor (字符串,可选):新供应商
      • productType (字符串,可选):新产品类型
      • tags (字符串数组,可选):新标签(覆盖现有标签)
      • status (字符串,可选): "ACTIVE", "DRAFT",或 "ARCHIVED"
      • seo (对象,可选): { title, description } 搜索引擎
      • metafields (对象数组,可选):要设置或更新的元字段
      • collectionsToJoin (字符串数组,可选):收集GID以将产品添加到
      • collectionsToLeave (字符串数组,可选):收集GID以从中删除产品
      • redirectNewHandle (boolean,可选):如果为true,则旧句柄重定向到新句柄
  5. delete-product

    • 删除产品
    • 输入:
      • id (字符串,必填):Shopify产品GID
  6. manage-product-options

    • 创建、更新或删除产品选项(例如尺寸、颜色)
    • 输入:
      • productId (字符串,必填):Shopify产品GID
      • action (字符串,必填): "create", "update",或 "delete"
      • variantStrategy (字符串,可选): "LEAVE_AS_IS" (默认)或 "CREATE" --控制添加选项时是否生成新的变体组合
      • 对于 action: "create":
        • options (数组,必填):创建选项,例如。 [{ name: "Size", values: ["S", "M", "L"] }]
      • 对于 action: "update":
        • optionId (字符串,必填):要更新的GID选项
        • name (字符串,可选):选项的新名称
        • position (数字,可选):新职位
        • valuesToAdd (字符串数组,可选):要添加的值
        • valuesToDelete (字符串数组,可选):要删除的GID值
      • 对于 action: "delete":
        • optionIds (字符串数组,必填):要删除的选项GID
  7. manage-product-variants

    • 批量创建或更新产品变体
    • 输入:
      • productId (字符串,必填):Shopify产品GID
      • strategy (string,可选):创建时如何处理默认变量。 "DEFAULT" (自动删除“默认标题”), "REMOVE_STANDALONE_VARIANT" (建议完全控制),或 "PRESERVE_STANDALONE_VARIANT"
      • variants (数组,必填):要创建或更新的变量。每种变体:
        • id (字符串,可选):用于更新的变量GID。省略以创建新
        • price (字符串,可选):价格,例如。 "49.00"
        • compareAtPrice (字符串,可选):按价格比较以显示折扣
        • sku (字符串,可选):SKU(映射到 inventoryItem.sku)
        • tracked (布尔值,可选):是否跟踪库存。集 false 按需打印
        • taxable (boolean,可选):变量是否应纳税
        • barcode (字符串,可选):条形码
        • weight (数字,可选):变体的重量
        • weightUnit (字符串,可选): "GRAMS", "KILOGRAMS", "OUNCES",或 "POUNDS"
        • optionValues (数组,可选):选项值,例如。 [{ optionName: "Size", name: "A4" }]
  8. delete-product-variants

    • 从产品中删除一个或多个变体
    • 输入:
      • productId (字符串,必填):Shopify产品GID
      • variantIds (字符串数组,必填):要删除的变量GID

客户管理(8个工具)

  1. get-customers

    • 通过搜索、分页和排序列出客户
    • 输入:
      • searchQuery (字符串,可选):Freetext或Shopify查询语法(例如。 "country:US tag:vip orders_count:>5")
      • limit (数字,默认值:10):可退回的最大客户数
      • sortKey (字符串,可选):其中之一 CREATED_AT, ID, LAST_UPDATE, LOCATION, NAME, ORDERS_COUNT, RELEVANCE, TOTAL_SPENT, UPDATED_AT
      • reverse (boolean,可选):颠倒排序顺序
      • after / before (字符串,可选):分页游标
  2. get-customer-by-id

    • 通过ID获取单个客户,并提供完整的详细信息
    • 输入:
      • id (字符串,必填):Shopify客户ID(仅限数字,例如。 "6276879810626")
    • 返回:姓名、电子邮件、电话、地址、标签、备注、税务状态、支出金额、订单计数、图元字段
  3. create-customer

    • 创建新客户
    • 输入:
      • firstName (字符串,可选):客户的名字
      • lastName (字符串,可选):客户的姓氏
      • email (字符串,可选):客户的电子邮件地址
      • phone (字符串,可选):客户的电话号码
      • tags (字符串数组,可选):要应用的标签
      • note (string,可选):关于客户的注释
      • taxExempt (boolean,可选):客户是否免税
      • metafields (对象数组,可选):自定义图元字段(namespace, key, value, type)
      • addresses (对象数组,可选):客户地址(address1, address2, city, provinceCode, zip, country, phone)
  4. update-customer

    • 更新客户信息
    • 输入:
      • id (字符串,必填):Shopify客户ID(仅限数字,例如。 "6276879810626")
      • firstName (字符串,可选):客户的名字
      • lastName (字符串,可选):客户的姓氏
      • email (字符串,可选):客户的电子邮件地址
      • phone (字符串,可选):客户的电话号码
      • tags (字符串数组,可选):应用于客户的标签
      • note (string,可选):关于客户的注释
      • taxExempt (boolean,可选):客户是否免税
      • emailMarketingConsent (对象,可选):电子邮件营销同意设置
        • marketingState (字符串,必填): "NOT_SUBSCRIBED", "SUBSCRIBED", "UNSUBSCRIBED",或 "PENDING"
        • consentUpdatedAt (字符串,可选):ISO 8601时间戳
        • marketingOptInLevel (字符串,可选): "SINGLE_OPT_IN", "CONFIRMED_OPT_IN",或 "UNKNOWN"
      • metafields (对象数组,可选):客户图元字段
  5. delete-customer

    • 删除客户
    • 输入:
      • id (字符串,必填):Shopify客户ID(仅限数字,例如。 "6276879810626")
  6. customer-merge

    • 将两条客户记录合并为一条
    • 输入:
      • customerOneId (string,必填):第一个客户的GID
      • customerTwoId (string,必填):第二个客户的GID
      • overrideFields (对象,可选):覆盖要向哪个客户保留哪些字段(名字、姓氏、电子邮件、电话、默认地址、注释、标签)
  7. manage-customer-address

    • 创建、更新或删除客户的邮寄地址
    • 输入:
      • customerId (字符串,必填):客户GID
      • action (字符串,必填): "create", "update",或 "delete"
      • addressId (字符串,可选):地址GID(更新/删除所需)
      • address (对象,可选):地址字段(创建/更新所需): address1, address2, city, company, countryCode, firstName, lastName, phone, provinceCode, zip
      • setAsDefault (boolean,可选):设置为客户的默认地址

订单管理(10个工具)

  1. get-orders

    • 通过过滤、分页和排序获取订单
    • 输入:
      • status (字符串,可选): "any", "open", "closed",或 "cancelled".默认值 "any"
      • limit (数字,默认值:10):要返回的最大订单数
      • query (string,可选):原始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 (boolean,可选):颠倒排序顺序
      • after / before (字符串,可选):分页游标
  2. get-order-by-id

    • 通过智能查找按ID获取特定订单——接受订单名称(#77235 或 77235),数字ID(8054938337547),或完整GID(gid://shopify/Order/...)
    • 输入:
      • orderId (字符串,必填):订单名称、数字ID或完整GID
    • 退货:定价、客户、送货/账单地址、行项目、标签、注释、元字段、取消原因、退货状态、折扣码、订单号、时间戳
  3. update-order

    • 更新现有订单
    • 输入:
      • id (字符串,必填):Shopify订单GID
      • tags (字符串数组,可选):订单的新标签
      • email (字符串,可选):更新订单上的客户电子邮件
      • note (字符串,可选):订单备注
      • phone (字符串,可选):订单的电话号码
      • poNumber (字符串,可选):采购订单号
      • customAttributes (对象数组,可选):自定义键值属性
      • metafields (对象数组,可选):对图元字段进行排序
      • shippingAddress (对象,可选):收货地址字段
  4. get-customer-orders

    • 通过分页和排序为特定客户获取订单
    • 输入:
      • customerId (字符串,必填):Shopify客户ID(仅限数字,例如。 "6276879810626")
      • limit (数字,默认值:10):要返回的最大订单数
      • sortKey (字符串,可选):与排序键相同 get-orders
      • reverse (boolean,可选):颠倒排序顺序
      • after / before (字符串,可选):分页游标
  5. order-cancel

    • 取消订单,提供退款、补货和客户通知选项。 不可逆转。
    • 输入:
      • orderId (字符串,必填):订购GID
      • reason (字符串,必填): "CUSTOMER", "DECLINED", "FRAUD", "INVENTORY", "OTHER",或 "STAFF"
      • restock (布尔值,必填):是否重新进货
      • notifyCustomer (boolean,默认值:false):通知客户
      • staffNote (字符串,可选):内部注释
      • refund (布尔值,可选):退款至原始付款方式
  6. order-close-open

    • 关闭或重新打开订单
    • 输入:
      • orderId (字符串,必填):订购GID
      • action (字符串,必填): "close" 或 "open"
  7. order-mark-as-paid

    • 将订单标记为已付款(手动/离线付款)
    • 输入:
      • orderId (字符串,必填):订购GID
  8. create-fulfillment

    • 创建带有可选跟踪功能的订单履行(将商品标记为已发货)
    • 输入:
      • lineItemsByFulfillmentOrder (数组,必填):履行订单和要履行的行项目
      • trackingInfo (对象,可选): { number, url, company } 跟踪详情
      • notifyCustomer (布尔值,默认值:false):发送发货通知
  9. refund-create

    • 通过可选的重新进货创建全额或部分退款
    • 输入:
      • orderId (字符串,必填):订购GID
      • refundLineItems (数组,可选):要退款的行项目 lineItemId, quantity, restockType (CANCEL/RETURN/NO_RESTOCK), locationId
      • shipping (对象,可选): { amount, fullRefund } 运费退款
      • note (字符串,可选):退款通知
      • notify (布尔值,可选):发送退款通知
  10. create-draft-order

    • 为电话/聊天销售、发票或批发创建订单草案
    • 输入:
      • lineItems (数组,必填):产品变体(variantId)或定制项目(title +价格)。最多499
      • customerId (字符串,可选):客户GID
      • email, phone, note, tags, poNumber (可选)
      • shippingAddress, billingAddress (对象,可选)
      • appliedDiscount (对象,可选): { title, value, valueType } 订单级别折扣

订单管理草稿(1个工具)

  1. complete-draft-order

    • 完成订单草稿,将其转换为真实订单
    • 输入:
      • draftOrderId (字符串,必填):草拟订单GID
      • paymentGatewayId (字符串,可选):支付网关GID

元场管理(3个工具)

  1. get-metafields

    • 获取任何Shopify资源(产品、订单、客户、变体、集合等)的图元字段
    • 输入:
      • ownerId (string,必填):任何资源的GID
      • namespace (字符串,可选):按命名空间筛选
      • first (数字,默认值:25):要返回的图元字段数
      • after (字符串,可选):分页光标
  2. set-metafields

    • 在任何Shopify资源上设置图元字段。以原子方式创建或更新多达25个图元字段
    • 输入:
      • metafields (数组,必填):要设置的元字段,每个都有 ownerId, key, value,可选 namespace, type
  3. delete-metafields

    • 从任何Shopify资源中删除图元字段
    • 输入:
      • metafields (数组,必填):要删除的元字段,每个都有 ownerId, namespace, key

库存管理(1个工具)

  1. inventory-set-quantities

    • 为特定位置的物品设置绝对库存数量
    • 输入:
      • reason (字符串,必填):更改原因(例如。 "correction", "cycle_count_available")
      • name (字符串,必填): "available" 或 "on_hand"
      • quantities (数组,必填):带 inventoryItemId, locationId, quantity

标签管理(1个工具)

  1. manage-tags

    • 在任何可标记资源(订单、产品、客户、草稿订单、文章)上添加或删除标签
    • 输入:
      • id (string,必填):资源的GID
      • tags (字符串数组,必填):要添加或删除的标签
      • 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:customer@example.com
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

许可证

麻省理工学院