Shopify MCP服务器

一个连接Claude(或任何MCP兼容AI)到Shopify商店的模型上下文协议服务器,通过自然语言管理产品、订单、客户等。

  • by daanjonk
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 daanjonk/shopify-mcp

使用说明

Shopify MCP服务器

A. 模型上下文协议(MCP) 将Claude(或任何兼容MCP的AI)直接连接到您的Shopify商店的服务器。通过自然语言管理产品、订单、客户、收款、库存、履行和webhooks。


这有什么作用

连接后,您可以像这样与Shopify商店交谈:

  • “显示今天所有未完成的订单”
  • “创建一款名为夏季T恤的新产品,价格29.99欧元,状态草稿”
  • “我们有多少活性产品?”
  • “将产品X的库存更新到位置Y的50个单位”

需求

  • Python 3.11+
  • Shopify商店(任何计划)
  • 具有管理员API访问权限的Shopify自定义应用程序(请参阅下面的设置)
  • Claude.ai Pro/团队/企业 或 任何兼容MCP的客户端

步骤1--获取您的Shopify凭据

你需要两样东西: 店名 和a 访问令牌.

1a。查找您的店铺名称

您的店铺名称是前面的部分 .myshopify.com。如果您的URL是 acme-store.myshopify.com,您的店铺名称是 acme-store.

1b。创建自定义应用程序并获取访问令牌

⚠️ 重要提示: Shopify的常规API密钥在此不起作用。你需要一个 管理员API访问令牌 来自自定义应用程序。严格遵循这些步骤。

  1. 去你的 Shopify管理员 → Settings → Apps and sales channels
  2. 点击 开发应用程序 (右上角)
  3. 如果出现提示,请单击 允许自定义应用程序开发
  4. 点击 创建应用程序 并为其命名(例如。 MCP Server)
  5. 首选 配置 → click 配置管理员API作用域
  6. 选择您需要的权限。要获得完全访问权限,请启用:
    • read_products, write_products
    • read_orders, write_orders
    • read_customers, write_customers
    • read_inventory, write_inventory
    • read_fulfillments, write_fulfillments
    • read_webhooks, write_webhooks
  7. 点击 保存
  8. 去 API证书 tab → click 安装应用程序
  9. 点击 显示令牌一次 --立即复制此令牌,它以开头 shpat_...

💡 您只能看到此令牌一次。如果你丢失了它,你需要卸载并重新安装该应用程序以生成一个新的应用程序。


步骤2——设置服务器

克隆仓库

git clone https://github.com/daanjonk/shopify-mcp.git
cd shopify-mcp

安装依赖项

pip install -r requirements.txt

配置环境变量

复制示例文件并填写您的值:

cp .env.example .env

打开 .env 并填写:

SHOPIFY_STORE=your-store-name       # e.g. acme-store (NOT acme-store.myshopify.com)
SHOPIFY_ACCESS_TOKEN=shpat_xxxx...  # The token you copied in Step 1

就是这样——其他值都有合理的默认值。

启动服务器

python server.py

您应该看到:

INFO  Token mode: static SHOPIFY_ACCESS_TOKEN (no auto-refresh)
INFO  Uvicorn running on http://0.0.0.0:8000

您的MCP服务器现在正在运行 http://localhost:8000/mcp.


步骤3——部署到云端(用于远程访问)

要将其与Claude.ai一起使用,服务器需要在互联网上公开访问。最简单的选择是 铁路 --免费版运行良好。

在铁路上部署

  1. 首选 railway应用程序 并使用GitHub登录
  2. 点击 新项目 → 从GitHub仓库部署
  3. 选择您的分叉 shopify-mcp 仓库
  4. 铁路将检测到 Dockerfile 并开始建造
  5. 部署后,转到 设置 → 网络 → 生成域
  6. 复制您的公共URL(例如。 https://shopify-mcp-production.up.railway.app)

在铁路上设置环境变量

在您的铁路项目中,请访问 变量 并添加:

变量 值
SHOPIFY_STORE your-store-name
SHOPIFY_ACCESS_TOKEN shpat_xxxx...
PORT 8000
MCP_TRANSPORT streamable-http

保存后,Railway将自动重启服务器。


第四步——联系克劳德

获取MCP服务器URL

您的MCP端点是您的铁路URL+ /mcp:

https://your-app.up.railway.app/mcp

在Claude.ai中添加MCP服务器

⚠️ 需要身份验证令牌。 Claude.ai要求您在连接到远程MCP服务器时设置身份验证令牌。这与您的Shopify令牌是分开的,它保护您的MCP服务器免受未经授权的访问。

在Claude中添加服务器:

  1. 首选 claude.ai → 单击您的个人资料(左下角)→ 设置

  2. 首选 集成 (或 MCP服务器 取决于你的计划)

  3. 点击 添加集成 / 添加MCP服务器

  4. 填写:

    • 姓名: Shopify
    • 网址: https://your-app.up.railway.app/mcp
  5. 如果提示 认证令牌,您有两个选择:

    选项A——无身份验证(仅限开发): 如果您的服务器没有身份验证中间件,请留空。仅当您的Railway应用程序URL未公开共享时才执行此操作。

    选项B——向服务器添加身份验证: 设定一个 BEARER_TOKEN Railway中的环境变量,然后添加身份验证中间件 server.py (见下文)。然后将相同的令牌粘贴到Claude的集成设置中。

添加承载令牌身份验证(建议用于生产)

将这些行添加到 server.py 在FastMCP初始化之后:

import secrets
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.responses import Response

BEARER_TOKEN = os.environ.get("BEARER_TOKEN", "")

class BearerAuthMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        if BEARER_TOKEN:
            auth = request.headers.get("Authorization", "")
            if auth != f"Bearer {BEARER_TOKEN}":
                return Response("Unauthorized", status_code=401)
        return await call_next(request)

mcp.app.add_middleware(BearerAuthMiddleware)

然后添加 BEARER_TOKEN=your-secret-token-here 将该值粘贴到Railway环境变量中,并将其作为身份验证令牌粘贴到Claude的集成设置中。


可用工具

连接后,Claude可以访问这些工具:

工具 说明
shopify_list_products 列出带过滤器的产品
shopify_get_product 按ID获取单个产品
shopify_create_product 创建新产品
shopify_update_product 更新现有产品
shopify_delete_product 删除产品
shopify_count_products 清点产品
shopify_list_orders 使用筛选器列出订单
shopify_get_order 按ID获取单个订单
shopify_count_orders 清点订单
shopify_close_order 关闭订单
shopify_cancel_order 取消订单
shopify_list_customers 列出客户
shopify_search_customers 搜索客户
shopify_get_customer 获得一个客户
shopify_create_customer 创建新客户
shopify_update_customer 更新客户
shopify_get_customer_orders 获取客户的所有订单
shopify_list_collections 列出自定义或智能收藏
shopify_get_collection_products 获取集合中的产品
shopify_list_locations 列出库存位置
shopify_get_inventory_levels 获取库存水平
shopify_set_inventory_level 设置库存数量
shopify_list_fulfillments 列出订单的履行情况
shopify_create_fulfillment 完成订单
shopify_get_shop 获取店铺信息
shopify_list_webhooks 列出webhooks
shopify_create_webhook 创建webhook

环境变量引用

变量 必填 默认 描述
SHOPIFY_STORE ✅ 是 -- 您的店铺名称(例如。 my-store)
SHOPIFY_ACCESS_TOKEN ✅ 是* - 静态管理员API访问令牌(shpat_...)
SHOPIFY_CLIENT_ID 否 -- OAuth客户端ID(静态令牌的替代方案)
SHOPIFY_CLIENT_SECRET 否 -- OAuth客户端密钥(静态令牌的替代方案)
SHOPIFY_API_VERSION 没有 2024-10 Shopify API版本
PORT 没有 8000 服务器端口
MCP_TRANSPORT 没有 streamable-http 传输协议
BEARER_TOKEN 无 -- 保护MCP端点的身份验证令牌

*要么 SHOPIFY_ACCESS_TOKEN 或 SHOPIFY_CLIENT_ID + SHOPIFY_CLIENT_SECRET 是必需的。


故障排除

“身份验证失败”错误 → 仔细检查你的 SHOPIFY_ACCESS_TOKEN。确保它从以下内容开始 shpat_ 并且自定义应用程序已安装在您的商店中。

“权限被拒绝”/403错误 → 您的令牌没有所需的API作用域。返回Shopify Admin中的自定义应用程序,添加缺少的作用域,然后重新安装应用程序(这将生成一个新令牌)。

“缺少SHOPIY_STORE环境变量” → 确保 SHOPIFY_STORE 已设置,仅包含商店名称,而不包含完整的URL。✅ my-store ❌ my-store.myshopify.com

克劳德无法连接到服务器 → 确保您的Railway部署处于活动状态,并且已生成域。通过访问来测试端点 https://your-app.up.railway.app/mcp 在浏览器中,您应该得到一个响应(而不是404)。

令牌显示一次,然后在Shopify中消失 → 这很正常。Shopify只显示一次令牌。如果丢失了,请在Shopify Admin中卸载该应用程序→ API证书→ 卸载,然后重新安装以生成新令牌。


许可证

麻省理工学院