shoplazza-mcp

shoplazza-mcp

Enables AI clients to read and write Shoplazza store data (products, orders, customers, inventory, discounts, webhooks) via the Shoplazza OpenAPI, with multi-store support and 311 endpoint coverage.

Category
访问服务器

README

shoplazza-mcp

把 Shoplazza OpenAPI(REST) 封装成 MCP (Model Context Protocol) 服务的 Python 实现, 让 Claude、Cursor、DSH 等支持 MCP 的客户端可以直接读写 Shoplazza 店铺数据 (商品、订单、客户、库存、折扣、订阅 webhook 等)。

端点目录(data/endpoints.json)由 tools/scrape_endpoints.py 从官方文档自动抓取, 覆盖 2026-01 版本共 311 个真实端点、46 个资源组。


功能特性

能力 说明
61 个常用端点工具 商品 / 变体 / 订单 / 发货 / 客户 / 地址 / 收藏集 / 折扣 / 优惠券 / 库存 / 门店 / 页面 / 博客 / 文章 / metafield / webhook / 礼品卡 / 供应商 / 数据报表 / 授权 scope 等,输入参数由官方文档自动生成,每个工具描述里标注所需 scope
多店铺支持 一个服务实例可配置多个店铺(SHOPLAZZA_STORES),每个 API 工具带可选 shop_domain 参数按店铺路由;shoplazza_list_shops 查看已配置店铺
官方 CLI 对齐 兼容 CLI 环境变量 SHOPLAZZA_STORE / SHOPLAZZA_UAT;每个 API 工具带 dry_run 参数(CLI --dry-run 同款,只预览请求不发);call_shoplazza_api 等价 CLI 的 api rest 逃生舱;shoplazza_search_endpoints 等价 schema 自省
311 个端点全覆盖 开启 SHOPLAZZA_REGISTER_ALL_ENDPOINTS=1 后,目录中的每个端点都注册为独立工具
通用透传工具 call_shoplazza_api(method, path, path_params, query, body, dry_run) 可调用任意端点
端点目录工具 shoplazza_search_endpoints / shoplazza_get_endpoint 让模型随时发现正确的端点、参数与所需 scope
双传输方式 stdio(本地客户端默认) / Streamable HTTP(远程服务,--transport http)
稳健性 自动处理「请求头鉴权、统一响应包 {code,message,data}、cursor 分页、429 限流重试(Retry-After,按店铺独立限速)、路径占位符校验、业务错误透出」

安装

要求:Python ≥ 3.10,uv(推荐)或 pip。

cd shoplazza-mcp
uv sync          # 创建 .venv 并安装依赖(mcp、httpx)

不用 uv 时:

python -m venv .venv
.venv\Scripts\activate   # Windows
pip install -e .

配置

通过环境变量提供凭证(不要把密钥写进代码或提交到仓库):

# PowerShell / cmd
set SHOPLAZZA_SHOP_DOMAIN=your-store.myshoplazza.com
set SHOPLAZZA_ACCESS_TOKEN=your-access-token
变量 必填 默认 说明
SHOPLAZZA_SHOP_DOMAIN ✅* — 默认/单店铺域名,如 your-store.myshoplazza.com(不带协议)
SHOPLAZZA_ACCESS_TOKEN ✅* — 默认/单店铺访问令牌,对应 Access-Token 请求头
SHOPLAZZA_STORES 可选 — 多店铺 JSON:{"a.myshoplazza.com":"token-a","b.myshoplazza.com":"token-b"}
SHOPLAZZA_API_VERSION 2026-01 API 版本,如 2025-06、2022-01
SHOPLAZZA_REGISTER_ALL_ENDPOINTS 0 1 时注册全部 311 个端点工具
SHOPLAZZA_MAX_RPS 2.0 客户端每秒最大请求数(漏桶,按店铺独立)
SHOPLAZZA_MAX_RETRY_WAIT 10.0 429 时最多等待秒数
SHOPLAZZA_REQUEST_TIMEOUT 60.0 单请求超时(秒)
SHOPLAZZA_DATA_DIR 包内 data/ 自定义端点目录位置

* 单店铺配置 SHOPLAZZA_SHOP_DOMAIN + SHOPLAZZA_ACCESS_TOKEN 与多店铺配置 SHOPLAZZA_STORES 二选一即可; 两者都设置时,SHOPLAZZA_SHOP_DOMAIN 为默认店铺。

兼容官方 CLI 的环境变量名(与上表等价,任一即可):

export SHOPLAZZA_STORE=your-store.myshoplazza.com   # 等价 SHOPLAZZA_SHOP_DOMAIN
export SHOPLAZZA_UAT=your-access-token              # 等价 SHOPLAZZA_ACCESS_TOKEN

也就是说,你在官方 CLI 里用的 SHOPLAZZA_STORE / SHOPLAZZA_UAT 可以直接照搬给本服务, token 同一套。

完整示例见 .env.example。

多店铺用法

配置多个店铺后,服务里的每个 API 工具都会多出一个可选参数 shop_domain:

export SHOPLAZZA_STORES='{"us.myshoplazza.com":"token-us","de.myshoplazza.com":"token-de"}'
  • 不带 shop_domain → 走默认店铺(SHOPLAZZA_SHOP_DOMAIN,或 STORES 的第一项)
  • 带 shop_domain → 走指定店铺(未知店铺会报错并列出已配置店铺)
  • shoplazza_list_shops → 查看服务已配置的所有店铺与默认店铺
  • 每个店铺有独立的 Access-Token 与独立限速桶(符合官方按店铺限流的规则), 多店铺之间互不阻塞

对话示例:

“查一下 US 店铺今天的订单量,再看下 DE 店铺销量 top5 的商品” → 模型会分别以 shop_domain=us.myshoplazza.com 和 shop_domain=de.myshoplazza.com 调用 shoplazza_orders / shoplazza_products

Claude Desktop 配置示例(多店铺):

{
  "mcpServers": {
    "shoplazza": {
      "command": "uv",
      "args": ["run", "--directory", "D:/projects/DSH-projects/shoplazza-mcp", "shoplazza-mcp"],
      "env": {
        "SHOPLAZZA_STORES": "{\"us.myshoplazza.com\":\"token-us\",\"de.myshoplazza.com\":\"token-de\"}"
      }
    }
  }
}

需要的 API 权限(scope)

在合作伙伴中心创建/安装应用、或给店铺授权时, 按"最小权限原则"只申请你要用到的 scope。查询数据给 read_*,需要修改才加同名 write_*:

你要访问的数据 申请 scope
店铺信息 read_shop
商品 / 变体 / 库存 read_product
分类 / 收藏 read_collection
订单 / 支付信息 read_order
退款 / 售后 read_order(含售后记录)+ read_data
客户 read_customer
折扣码 / 优惠券 / 价格规则 read_price_rules
礼品卡 read_gift_cards
页面 / 博客 / 文章 / 重定向 read_shop_navigation
评论 read_comments
webhook 管理 需 write_* 对应资源 scope(如 write_product / write_order)
Shoplazza Pay 资金数据 read_finance
数据分析报表 read_data

只读运营场景推荐组合:read_shop, read_product, read_order, read_customer, read_price_rules, read_gift_cards, read_shop_navigation, read_data。 授权后可调用 shoplazza_oauth_access_scopes 工具核对本次安装实际被授予的 scope。 官方完整映射见 访问权限范围。 每个工具的说明里都会标注该端点需要的 scope(如 Required scope: read_order.),403 报错时可以对着排查。

与官方 CLI 的对应关系

官方 Shoplazza CLI 的功能在本服务中都有对应:

官方 CLI 本 MCP 说明
shoplazza products list --params '{"..."}' shoplazza_products 等 API 工具 同一套端点,输入参数按官方文档自动生成
shoplazza api rest GET /openapi/... call_shoplazza_api 逃生舱,可调任意端点
--dry-run 每个工具可选 dry_run=true 只预览请求(method/url/query/body/headers,token 打码),不发请求
--format json / --jq 默认返回 JSON 完整响应 结果就是结构化 JSON,可直接消费
shoplazza schema products.list shoplazza_get_endpoint / shoplazza_search_endpoints 端点、参数、scope 自省
SHOPLAZZA_STORE / SHOPLAZZA_UAT 同名环境变量直接兼容 CLI 的 token 体系与本服务同一套
auth login --scope ... shoplazza_oauth_access_scopes 授权后核对实际 scope
auth store use(切换活跃店铺) shop_domain 参数 本服务按调用路由店铺,无需切换全局状态

如何获取 Access Token

  • 公开应用:走 OAuth 2.0 Authorization Code 流程, 用 code 换取 access_token(有效期 1 年,可用 refresh_token 刷新)。
  • 私有 / 内部集成:在 Shoplazza 后台为应用与店铺生成对应的访问令牌。

运行

stdio(本地 MCP 客户端,默认)

uv run shoplazza-mcp

HTTP(远程服务)

uv run shoplazza-mcp --transport http --host 0.0.0.0 --port 8765

端点路径默认 /mcp,可用 --http-path 修改。

接入 MCP 客户端

Claude Desktop(claude_desktop_config.json):

{
  "mcpServers": {
    "shoplazza": {
      "command": "uv",
      "args": ["run", "--directory", "D:/projects/DSH-projects/shoplazza-mcp", "shoplazza-mcp"],
      "env": {
        "SHOPLAZZA_SHOP_DOMAIN": "your-store.myshoplazza.com",
        "SHOPLAZZA_ACCESS_TOKEN": "your-access-token"
      }
    }
  }
}

Cursor:在设置 → MCP 中添加服务器,配置见 examples/mcp-cursor.json。

远程 HTTP(任何客户端):把 url 指向 http://host:8765/mcp。

也可以直接运行(debug 查看工具列表与 JSON-RPC 交互):

uv run mcp dev shoplazza-mcp

使用示例(Claude / Cursor 等对话)

  • “列出店里最新 10 个订单”
  • “查一下商品 abcd-1234 的库存”
  • “把订单 order-xxx 取消,原因写 customer requested”
  • “新建一个满 100 减 20 的折扣”
  • “有什么 API 可以做退款?搜索一下端点” → 模型会调用 shoplazza_search_endpoints("refund") 后自动调用对应端点。

所有响应都返回 API 原始包:{code, message, data, api_call_limit}; 列表类响应在 data 中带 cursor / pre_cursor,配合 page_size / per_page 参数翻页。

开发与维护

  • tools/scrape_endpoints.py:从 官方端点文档页 抓取并生成 data/endpoints.json (含每个端点的 method / path / 参数 / 请求体字段 / 响应结构)。
  • 曲线维护:新增或移除「常用工具」只需修改 shoplazza_mcp/tools.py 里的 CURATED_SLUGS 清单。
  • scripts/smoke_test.py:离线冒烟测试(stdio);scripts/http_smoke_test.py:HTTP 冒烟测试。

安全说明

  • Access Token 请只通过环境变量 / 客户端配置注入,不要写入代码仓库。
  • 服务只走 HTTPS(官方要求所有端点仅 HTTPS 访问)。
  • 作为 HTTP 服务暴露到外网时,请置于可信内网或自行加鉴权(如网关、防火墙)。

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选