关于 wb-mcp-server
wb-mcp-server 将 Wildberries Seller API 接入 MCP,面向管理一个或多个店铺的卖家,提供商品、广告、订单、财务等操作。它包含多店铺支持、API 诊断和加密存储令牌。
主要功能
- 01覆盖商品、广告和订单管理
- 02支持多个卖家店铺
- 03诊断 API 状况与工具降级
- 04加密存储 API 令牌
- 05提供调用监控网页界面
适用场景
- 01查找被屏蔽的商品卡及原因
- 02分析广告成本并调整推广
- 03批量回复新评价
- 04查看多个店铺的库存和订单
MCP 相关
服务器通过 MCP 暴露 Wildberries Seller API 的 197 个工具,客户端可通过 stdio 或 SSE 连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx wb-mcp-serverWB_API_TOKEN密钥Wildberries Seller API token from seller.wildberries.ru (Settings - Access tokens)DATA_DIRDirectory for shops.json, stats.db and the encryption key. Defaults to /data; set it to a writable path for a local install, e.g. ~/.wb-mcp本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
197收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
WB MCP 服务
通过与 AI 助手聊天来运营你的 Wildberries 店铺。 197 个工具覆盖 Wildberries Seller API — 商品卡片、价格、广告、发货、评价、 财务、分析 — 可供 Claude、Cursor、Copilot、Gemini CLI 及其他任何 MCP 客户端使用。专为 WB 卖家打造(Wildberries 是俄罗斯最大的电商平台),适用于运营一个或多个卖家账号、希望通过提问而非点击卖家门户来完成操作的用户。
也在 Ozon 上销售?这里有适用于 Ozon 的同款服务。
该服务已在约 20 个 WB 卖家账号中日常使用超过 5 个月,提供 197 个工具。它是作者自己使用的工作工具,并会根据作者的需求持续更新 — 详情请见此处。
You: Which of my product cards are blocked, and why?
You: Show ad cost share for every campaign this week and pause the ones above 15%.
You: Which warehouses currently have an intake coefficient of 0 or 1?
You: Reply to every new 5-star review with a thank-you note.

可实现的功能
共 197 个工具,按 Wildberries Seller API 区域分组。 完整的编号列表及每个工具的说明见 docs/tools.md。
| 区域 | 工具数 | 涵盖内容 |
|---|---|---|
| 商品卡片 | 26 | 卡片列表和详情、创建和更新、SEO 文本、属性、条形码、媒体、标签、回收站、有错误和被封锁的卡片 |
| 价格和折扣 | 7 | 当前价格、设置价格和折扣、价格隔离、WB Club(WB 的付费会员折扣)、B2B、上传状态 |
| 促销 | 7 | 促销日历、自动促销、审查“WB 已经将你的商品纳入哪些促销”、参加和退出促销 |
| 广告 | 22 | 广告活动列表和创建、统计数据和广告费用占比、出价和出价建议、关键词簇和否定短语、余额和充值 |
| 分析 | 25 | 销售漏斗 v3(按商品统计浏览量 → 加购 → 订单转化率)、逐日历史、库存、反欺诈、付费收货、测量罚款、品牌份额、按地区统计销售额、搜索查询 |
| 统计 | 3 | 销售额、订单、库存(statistics-api) |
| FBS 订单 | 29 | 新建和全部配货任务、状态、取消、标签、供货单、箱子、仓库通行证、KIZ 标记码(俄罗斯强制商品标记)。FBS = 卖家履约,商品从 WB 仓库提货 |
| DBS 订单 | 10 | 卖家配送:订单、状态、操作、配送日期、元数据 |
| 点击取货 | 9 | 自提订单、买家身份确认、操作和元数据 |
| FBW 供货单 | 6 | 发往 WB 仓库的货件、货件中的商品、仓库、未来 14 天的收货系数 |
| 卖家仓库和库存 | 8 | 卖家仓库、更新和读取库存 |
| 财务 | 7 | 销售报告、详细明细、收单、余额、卖家资料 |
| 费率和仓储 | 6 | 箱式和托盘费率、退货费率、FBW 中转、付费仓储 |
| 评价和问题 | 18 | 评价和问题、回复、按期间统计的计数器、存档、置顶评价、卖家评分 |
| 退货 | 3 | 退货申请、回复申请、退货报告 |
| 买家聊天 | 4 | 聊天、事件、发送消息、下载附件 |
| 文档 | 4 | 文档类别、列表、单个和批量下载 |
| 用户 | 2 | 员工和邀请 |
| WB Jam | 1 | WB Jam 订阅状态(WB 的付费分析附加服务) |
| 店铺 | 1 | 已连接的卖家账户列表 |
| 诊断 | 4 | 自我诊断、令牌检查、工具降级、WB API 新闻 |
与通常没有这些功能的类似服务相比,有三项不同之处:
- 多店铺。 每次调用都需要传入
shop_id,因此可以在一次对话中使用两个 WB 卖家账户。只有一个店铺时,可以完全省略shop_id。 - WB API 诊断。 服务会自行 ping WB 主机,为每个 API 类别发送一个低成本探测请求,解析令牌的有效期和权限范围,并突出显示“降级”情况:曾经可用的工具现在持续失败——这是 WB 更改 API 的可靠迹象。
- 加密令牌。 WB 令牌会经过加密(Fernet)后存储,而不是保存在客户端配置中。
快速开始
选项 1:一条命令,无需 Docker
此服务使用 stdio 通信,这是 Claude Desktop、Cursor、VS Code 和其他 MCP 客户端连接它的方式。无需构建:
uvx wb-mcp-server
也可以通过 pip 安装:
pip install wb-mcp-server
wb-mcp
客户端配置(例如 claude_desktop_config.json):
{
"mcpServers": {
"wildberries": {
"command": "uvx",
"args": ["wb-mcp-server"],
"env": {
"WB_API_TOKEN": "your Wildberries API token",
"DATA_DIR": "~/.wb-mcp"
}
}
}
}
将 DATA_DIR 指向任意可写目录——店铺、密钥和统计数据都存放在其中。
默认值为 /data,这是 Docker 容器内使用的路径。
选项 2:使用 Docker 和 Web 仪表板
如果你需要仪表板、WB API 诊断和基于浏览器的店铺管理,请使用此选项。你需要 Docker(Docker Desktop 或 OrbStack)以及 Wildberries Seller API 令牌。
git clone https://github.com/DeviceIngineering/wb-mcp-server.git
cd wb-mcp-server
cp .env.example .env # fine as-is for a local run
docker compose up -d --build
检查:
curl -s http://localhost:8001/api/health
# {"status":"ok","auth_enabled":false,"health_check_interval_min":30,...}
现在你可以访问:
| 地址 | 内容 |
|---|---|
| http://localhost:8001 | 仪表板:工具调用、错误、响应时间 |
| http://localhost:8001/shops | 店铺:添加 WB 卖家账户,测试令牌 |
| http://localhost:8001/diagnostics | 诊断:令牌、WB 主机 ping、探测、历史记录 |
| http://localhost:8001/api/health | 用于外部监控的 JSON 摘要 |
http://localhost:8001/sse | MCP 端点——提供给客户端的地址 |
接下来:
- 打开 http://localhost:8001/shops → Добавить магазин(添加店铺)→ 粘贴 WB 令牌 → Проверить(测试)。令牌可从 WB Seller Portal (seller.wildberries.ru)获取:Настройки → Доступ к API → Создать токен (设置 → API 访问 → 创建令牌)。令牌有效期为 180 天;诊断页面会显示剩余有效期。
- 连接 MCP 客户端——请参阅下一节。
- 对助手说:“列出我的 Wildberries 店铺”——此时应会调用
wb_list_shops工具。
启动命令逐项说明:
| 标志 | 用途 |
|---|---|
up | 启动 docker-compose.yml 中定义的服务 |
-d | 在后台运行,不占用终端 |
--build | 从 Dockerfile 构建映像——首次运行及更新代码后需要 |
使用 docker compose down 停止服务(数据会保留在 wb_data 卷中)。
日志:docker compose logs -f。
不使用 Docker 运行
git clone https://github.com/DeviceIngineering/wb-mcp-server.git
cd wb-mcp-server
python3 -m venv .venv && source .venv/bin/activate
pip install .
DATA_DIR=./data PORT=8001 python -m wb_mcp.app
此处必须设置 DATA_DIR:默认情况下,服务会写入 /data,而该路径仅存在于容器内部。
安装到客户端
服务通过 SSE 使用 MCP:GET /sse 是事件流,POST /messages
用于传递客户端消息。不同客户端对 SSE 的支持有所不同,因此每个客户端都有专属指南——包含 macOS、Linux 和 Windows 的配置路径、可直接粘贴的 JSON,以及有无身份验证令牌的配置方案。
docs/中的各客户端指南目前仅提供俄语版。其中的配置是现成的 JSON,包含文件路径和标志,无论语言如何都能看懂。
| 客户端 | 直接支持 SSE | 指南 |
|---|---|---|
| Claude Code | 是 | docs/install-claude-code.md |
| Claude Desktop | 否 → mcp-remote 桥接或本地 stdio | docs/install-claude-desktop.md |
| Cursor | 是 | docs/install-cursor.md |
| Windsurf | 是 | docs/install-windsurf.md |
| VS Code (GitHub Copilot) | 是 | docs/install-vscode-copilot.md |
| Cline | 是 | docs/install-cline.md |
| Continue.dev | 是 | docs/install-continue.md |
| Zed | 通过 URL;未官方说明是否支持 SSE | docs/install-zed.md |
| JetBrains AI Assistant | 是(SSE 已列为旧版功能) | docs/install-jetbrains.md |
| Gemini CLI | 是 | docs/install-gemini-cli.md |
| Codex CLI | 否 → mcp-remote 桥接 | docs/install-codex.md |
概览和兼容性表:docs/README.md。
如果客户端提供可自行配置连接的命令,指南会优先介绍该命令,并将编辑 JSON 作为第二种方案。最简便的配置方式是使用 Claude Code:
claude mcp add --transport sse wildberries http://localhost:8001/sse
claude mcp list # expected: wildberries ... ✔ Connected
多店铺与安全
多个卖家账号。 在 /shops 添加店铺;每个店铺都有自己的 shop_id。
wb_list_shops 会返回店铺列表,197 个工具中的 200 个都将 shop_id 作为第一个
参数(例外是 wb_list_shops 和 wb_degradations)。
如果只有一个店铺,可以省略此参数——服务会自动使用唯一可用的店铺。
重点不是“支持两个账号”,而是策略只需编写一次,就能应用到每个账号:定价规则、 回复评价模板、广告出价上限都可以在一次对话中应用到所有店铺——无需切换账号,也不必 把 API 密钥分散配置在不同客户端中。
可连接的账号数量。 代码中没有限制:shops.json 是一个普通字典,想加多少个都可以。
上限由 Wildberries 决定,而不是由此服务决定:所有账号都通过同一个 IP 地址访问 WB——
也就是运行此服务的地址,而且速率限制也是按地址计算的。作者自己的估算是:每个地址
连接约 20 个账号仍处于安全范围。超过这个数量,就应将账号分散到多个使用不同地址的服务上。
这比看起来更重要,详见 WB 限制: 有几种方法每分钟只允许 3 次请求,而且任何 4XX 响应都会计为 10 次请求。 如果十几个账号共用一台服务,连续几次格式错误的请求就会以快十倍的速度耗尽配额—— 而且所有店铺会同时触及限制,不只是出错的那个店铺。
可以通过以下方式留意这种情况:
- 后台诊断每次运行时会向每个主机发送一次
/ping(每个主机每 30 秒的限制是 3 次请求), 并将检查失败和警告记录到历史记录中。你可以提前发现限制即将触发,而不是等到被封锁后才知道。 - 降级检测器可以区分两种情况:多个工具同时降级,意味着按地址进行的限流;单个工具降级, 则意味着 WB 的某个端点发生故障。仪表板会让你一眼看出区别。
令牌存放位置。 在 wb_data 卷中(容器内的 /data):
shops.json— 店铺信息,令牌使用 Fernet 加密;.encryption_key— 加密密钥,首次启动时生成;stats.db— 保存调用统计数据和诊断历史记录的 SQLite 数据库。
密钥与加密数据放在一起,因此加密可以防止单个 shops.json 文件意外泄露(例如备份、
复制粘贴),但无法防止有人获取整个卷。应将数据作为整个卷迁移——详见 DEPLOY.md。
MCP 授权。 .env 中的 MCP_AUTH_TOKEN 变量:
openssl rand -hex 32 # put the value into .env → MCP_AUTH_TOKEN=
docker compose up -d
- 为空(默认值)——任何能通过网络访问此端口的人都可以访问
/sse; - 已设置——客户端必须在 URL 中发送
Authorization: Bearer <token>或?token=<token>。 第二种方式适用于无法发送自定义请求头的客户端。
两个 MCP 端点都会检查令牌——GET /sse 和 POST /messages。
此服务不会执行以下操作:
- Web 界面(
/、/shops、/diagnostics)不会受到令牌保护——任何能通过网络访问此端口的人都可以访问。 - 端口 8001 不适合暴露到互联网。远程访问请使用 Tailscale 或 VPN。
- 此服务不会终止 HTTPS。如果需要从外部通过 TLS 访问,请在前面放置反向代理。
Web 界面:每次调用都清晰可见
在典型的 MCP 服务中,调用会无影无踪:你无法看到助手实际做了什么、耗时多久,或市场返回了 什么内容;只有出错时你才会发现问题。在这里,每次调用都会留下记录,每个店铺都有自己的状态。 对于能在真实店铺中动用真实资金的工具,这不是装饰,而是建立信任的前提。正是五个月来在约 20 个账号上的日常使用,填充了这些页面,也促成了后文的 WB 限制章节。
仪表板 — /
本页顶部显示截图。
所有工具调用的摘要(stats.get_summary()):
- 调用总数、今日调用数、错误数、平均调用耗时;
- 排名前 10 的工具:调用次数、平均耗时、错误数;
- 最近 50 次调用的动态列表:时间戳、店铺、工具、耗时(毫秒)、成功或失败、错误文本;
- 按店铺筛选——摘要上方有一个“全部 / 特定账户”切换开关。
店铺 — /shops

无需编辑文件或重启容器,就能直接在浏览器中添加和移除账户。每个店铺都有一个 Проверить(“测试”)按钮:它会向 WB 发起一次开销很低的真实请求,立即告知你令牌是否有效,而不是等到第一次实际调用时才发现。列表中的令牌会以掩码形式显示(abc***xyz)。
令牌使用 Fernet 加密,并存储在数据卷中的 shops.json 里;密钥保存在其旁边的 .encryption_key 中。保存或删除店铺时,HTTP 客户端池会重置,因此新令牌会立即生效。
诊断 — /diagnostics

(截图显示的是一个使用虚构令牌的演示店铺:WB 对每次 ping 和每项探测都返回 401,因此整个页面都是红色的。这就是检查失败时的样子——服务器本身没有问题。令牌有效时,“Проверка …”一行会显示 ping 13/13, пробы 20/20,店铺状态为“✅ Здоров”。)
后台会按店铺定期运行检查,间隔为 HEALTH_CHECK_INTERVAL_MIN 分钟(默认 30 分钟):
- 令牌——到期时间、访问类别、只读和沙盒标志;
- ping 13 个 WB API 主机——每个主机的可用性和延迟;
- 20 项探测——每个 API 类别发起一次开销很低的真实 GET 请求。这些探测能发现“WB 重命名接口导致端点返回 404”之类的问题;
- 通俗易懂的警告:“令牌将在 N 天后过期”,“Content:
/content/v2/...返回 404 — WB 可能更改了 API”; - 检查历史记录,并自动轮换(保留最近 1000 条记录);
- 一个可立即运行所有检查的 “立即检查” 按钮。
降级检测器
累积统计数据中最有用的功能。服务器会自动找出过去正常工作、现在却持续失败的工具:最近三次调用均失败,而历史记录中存在成功调用。对于每个这样的工具,它会显示上次成功调用的时间、连续错误次数、最新错误文本以及问题出现的时间。
换句话说,服务器会根据自身统计数据检测出 Wildberries 是否中断或关闭了某个端点,并在你工作时遇到问题之前通知你。它是限流和端点关闭日期说明的实际补充:该部分列出 WB 公布的信息,而这里能捕捉 WB 未公开的变更。
你可以在仪表板中查看,也可以直接在聊天中调用 wb_degradations。
外部监控用 JSON
所有人类可见的信息也都能以机器可读的形式获取:
| 端点 | 返回内容 |
|---|---|
GET /api/health | 服务状态、授权是否启用、检查间隔、最近 5 次健康检查、已降级工具列表 |
GET /api/stats | 与仪表板相同的摘要;接受 ?shop=<shop_id> |
POST /api/diagnostics/run | 立即对所有店铺运行诊断并返回结果 |
GET /api/diagnostics/<shop_id> | 单个店铺的完整实时诊断 |
因此,你可以将此服务接入 Uptime Kuma、Zabbix 或其他监控系统,并在助手告知你令牌失效之前就发现问题。
上下文预算
有两项需要消耗 token:每个会话加载一次的工具定义,以及每次调用都要付出的工具响应。两者都基于真实卖家账号测量,而非估算——scripts/collect_corpus.py 会对只读工具进行快照(在任何内容写入磁盘前屏蔽个人身份信息,语料库不会进入仓库),scripts/measure_corpus.py 则报告其开销。
定义。 配置单个店铺时,197 个工具消耗 17 700 个 token,低于之前的 27 460 个。每个描述都只有一句话;只有一个店铺时,会从架构中移除 shop_id(由服务端补全);空的架构字段不会序列化。
响应。 真正的问题原来出在少数几个超大的载荷上:
| 工具 | 之前 | 之后 |
|---|---|---|
wb_tariffs_commission — 完整的 7 408 个品类参考数据 | 621 802 | 23 023 |
wb_cards_list — 78 % 的数据量来自照片 URL 和描述 | 73 827 | 3 232 |
wb_finance_report — 每行 90 个字段 | 23 540 | 7 156 |
wb_advert_list — 110 个带时间戳的广告活动 | 20 528 | 12 084 |
| 27 个实时响应的语料库 | 770 506 | 74 947 |
服务端采取了以下措施:
view: compact | full。 大型工具只返回调用所需的字段;view="full"会提供原始 API 响应。响应本身会说明隐藏了哪些字段,因此模型知道还能请求哪些内容。- 截断信号。 如果返回记录数恰好达到
limit,响应会附带数据不完整的警告。没有这个提示,模型就会根据部分数据进行推理,并将其当作完整目录。 - 大小保护。 如果响应超出客户端的输出上限(Claude Code 默认的
MAX_MCP_OUTPUT_TOKENS为 25 000),服务端会截断响应,并说明从总数中省略了多少条记录,而不是让响应在到达时被静默截断。 - 在 API 不提供筛选功能时由服务端筛选。 WB 会完整返回佣金参考数据;这里用
subject参数缩小范围。
备注会作为单独的内容块返回,而不是 JSON 中的字段:WB 有一半端点会在顶层返回数组,如果用对象包装,就会破坏所有访问数据的路径。
工具配置集。 不支持工具搜索的客户端每次请求都要加载整个工具目录。WB_TOOLSETS 只保留你会用到的配置集——它们按实际工作任务划分,而非按 WB 文档章节划分,因为审核促销活动时需要同时使用促销、价格和价格隔离工具:
WB_TOOLSETS | 工具数 | token 数 |
|---|---|---|
| 空(默认) | 202 | 18 011 |
pricing,ads | 49 | 4 925 |
pricing,ads,analytics | 73 | 7 313 |
orders | 71 | 5 801 |
core 配置集——店铺、诊断、降级信息、token 信息——始终启用:出问题时正是最需要诊断信息的时候。已禁用的配置集会列在 wb_list_shops 的描述中;调用已禁用的工具时,会提示它所属的配置集——这样助手就能说明原因,而不是说“无法做到”。
Claude Code 不需要这些功能:它默认启用工具搜索,并按需加载架构。Cursor、Cline、Continue 和 Claude Desktop 会一次性获取完整的 tools/list——这些配置集是为它们准备的。
设计决策
- 202 个范围狭窄的工具,而非少数几个通用工具。 将它们合并为
action风格的端点虽然能节省定义令牌,但会改变故障类型:你遇到的将不再是“没有此工具”,而是会产生副作用的错误调用;其中一些工具会设置价格并启动广告活动。 - 通过字典分发,而非使用 if 链。
NO_CLIENT_DISPATCH、CLIENT_DISPATCH和SHOP_DISPATCH将名称映射到处理程序,并通过测试断言每个工具都有对应处理程序,且没有处理程序被遗弃。对于 197 个工具,if 链会悄然腐坏。 - 服务会自我诊断。
wb_diagnostics会 ping 每个 WB 主机,并针对每个 API 类别执行一个轻量级真实请求;wb_degradations会报告哪些工具过去可用、现在却持续失败。Marketplace API 会在没有通知的情况下发生变化——“是我的令牌出了问题,还是 WB 移动了端点”这个问题必须能通过一次调用得到回答。 - 繁重工具默认使用
compact。 数据集显示,被隐藏的字段是照片 URL、促销历史和仓库时间表,而不是做出决策所依据的数据。响应会说明隐藏了哪些内容,因此不会悄无声息地丢失信息。 - 只有一家店铺时,架构中会移除
shop_id。 在 200 个架构中重复相同的参数块,每个会话要耗费 3 400 个令牌,却没有提供任何信息;服务会自动填入唯一的店铺,并在出现第二家店铺时立即恢复该参数。 - 刻意固定使用
mcp<2。 2.0 低级 API 移除了此服务所依赖的装饰器处理程序;迁移是单独的任务,而且固定版本的位置有文档说明,无需等到运行时才发现。 - 令牌在静态存储时经过加密(使用 Fernet,密钥存放在数据卷中),并在界面中脱敏;数据集收集器会在写入文件前脱敏个人数据,因为订单和聊天负载中包含客户姓名、电话和地址。
工作原理
一个 Docker 容器运行一个 FastAPI 应用,同时承担两个角色: 通过 SSE 提供 MCP 服务,以及提供一个小型 Web UI。各文件各用一段话说明:
wb_mcp/server.py— MCP 服务本身。包含 202 个Tool对象的TOOLS列表 (名称、描述、参数的 JSON schema)就是客户端收到的tools/list响应内容。调用由三个字典路由:NO_CLIENT_DISPATCH(无需访问 WB)、CLIENT_DISPATCH(需要商店的 HTTP 客户端)和SHOP_DISPATCH(还需要shop_id)。这里只定义了 stdio 入口main(),供只支持 stdio 的客户端使用。wb_mcp/client.py— 用于 14 个 Wildberries 主机的 HTTP 客户端。每个商店对应一个WBClient,它封装了带有令牌的httpx.AsyncClient;客户端缓存在一个以shop_id为键的池中。wb_mcp/app.py— FastAPI:用于 MCP 的GET /sse和POST /messages、仪表盘、商店和诊断页面、/api/*JSON API、MCP_AUTH_TOKEN检查,以及后台健康检查循环。wb_mcp/settings.py— 商店和密钥:读取和写入shops.json、Fernet 加密、迁移旧版单商店settings.json,以及为 UI 遮盖令牌。 另有一个回退机制:如果设置了WB_API_TOKEN,就会出现名为default的商店。wb_mcp/diagnostics.py— 对 WB 主机执行 ping、解码 JWT 令牌(有效期、作用域、沙盒标记)、运行“探测”——每个 API 类别发起一个低成本的真实请求——以及获取 WB 新闻。wb_mcp/stats.py— 通过 aiosqlite 使用 SQLite:记录每次工具调用的耗时、成功标记和shop_id;这些数据用于降级检测器和健康检查历史记录。wb_mcp/templates/— 三个 PicoCSS 页面,无需前端构建步骤。
不太显而易见的细节:
- 只有一个商店时,会自动填入
shop_id。 平时用起来很方便,但一旦添加第二个账户,不带shop_id的调用就会开始返回“Укажите shop_id”(“请指定 shop_id”)。 - 每次调用都会写入统计数据,失败的调用也不例外。这正是降级检测器的依据:“以前能用,现在持续失败”说明 WB 更改了 API,而不是你操作有误。请查看
wb_degradations或仪表盘。 - 每隔 30 分钟执行的后台诊断会向 WB 发起真实请求,并消耗你的速率限制额度。如果这会造成影响,可在
.env中设置HEALTH_CHECK_INTERVAL_MIN=0。 - 响应会原样返回,即 WB 的原始 JSON,不做重新封装。这样可让工具的行为更可预测,但请求大型报告时应使用筛选条件,否则答案会占满上下文窗口。
POST /messages被挂载为单独的 ASGI 应用(Mount),而不是普通的 FastAPI 路由:handle_post_message会自行发送 ASGI 响应;如果在路由中调用,框架会再次发送响应,导致每次 POST 时连接都被断开。这就是为何必须在应用内部手动检查此端点的授权。mcp库版本固定为>=1.0.0,<2。 服务是基于mcp1.x 的装饰器 API(@app.list_tools())编写的;该 API 已在mcp2.0 中移除。不要在pyproject.toml中取消上限:使用mcp2.x 时,服务启动会因AttributeError: 'Server' object has no attribute 'list_tools'而崩溃。
环境变量
| 变量 | 默认值 | 含义 |
|---|---|---|
WB_API_TOKEN | empty | default 店铺的令牌;通过 /shops 添加店铺会更方便 |
MCP_AUTH_TOKEN | empty | /sse 的 Bearer 令牌;为空表示关闭授权 |
HEALTH_CHECK_INTERVAL_MIN | 30 | 后台诊断间隔,0 表示禁用 |
DATA_DIR | /data | 存放 shops.json、.encryption_key、stats.db 的目录 |
PORT | 8001 | HTTP 服务端口 |
WB_TOOLSETS | empty | 逗号分隔的工具配置:pricing、ads、catalog、orders、analytics、feedback、finance;为空表示启用全部 197 个工具 |
WB_MAX_RESPONSE_CHARS | 60000 | 单次响应的大小保护阈值 |
Wildberries API 限制
这些是 WB 本身的限制,而不是此服务的限制——但助手会经常遇到,最好提前了解。此列表并非从文档中复制而来:它基于五个月的每日调用记录,涵盖约 20 个账户,另有诊断日志作为依据。
GET /adv/v3/fullstats(广告统计)——每分钟 3 次请求,周期不超过 31 天。- 销售漏斗 v3——每分钟 3 次请求;最多只能查询最近一周的逐日历史记录。
/ping——每台主机每 30 秒 3 次(后台诊断会计入此限制)。- 任何 4XX 响应都会按 10 次请求计入限制(自 2026-06-04 起生效的规则)。在循环中用错一个参数,就会触发速率限制。
- Wildberries 已于 2026-07-15 移除
reportDetailByPeriod。此服务调用 finance-api;旧端点的回退机制已移除,因为该端点已失效。生成销售报告需要令牌具备 Finance 类别权限——否则会收到清晰的错误提示,告知需要重新签发哪些权限,而不是含糊的拒绝信息。 - 无法通过 API 创建 FBW 供货单——只能在卖家门户中创建。
wb_fbw_*工具仅提供信息。 - WB 令牌的有效期为 180 天。
wb_token_info和/diagnostics页面会显示剩余有效期。 - WB 返回
429表示触发了速率限制,而不是请求失败。请等待一分钟后重试。
已根据 dev.wildberries.ru 文档于 2026 年 8 月核实。
技术参考
Wildberries Seller API 主机
| API | 基础 URL |
|---|---|
| Content | content-api.wildberries.ru |
| Marketplace(FBS/DBS/DBW) | marketplace-api.wildberries.ru |
| Supplies(FBW) | supplies-api.wildberries.ru |
| Statistics | statistics-api.wildberries.ru |
| Analytics | seller-analytics-api.wildberries.ru |
| Prices | discounts-prices-api.wildberries.ru |
| Promotions calendar | dp-calendar-api.wildberries.ru |
| Advert | advert-api.wildberries.ru |
| Finance | finance-api.wildberries.ru |
| Feedbacks + Questions | feedbacks-api.wildberries.ru |
| Returns | returns-api.wildberries.ru |
| Tariffs / News / Seller | common-api.wildberries.ru |
| Buyer Chat | buyer-chat-api.wildberries.ru |
| Documents | documents-api.wildberries.ru |
诊断
/diagnostics页面——按店铺显示:令牌有效期和权限范围、所有 WB API 主机的 ping、各类别探测、检查历史记录,以及“立即检查”按钮。- 每隔
HEALTH_CHECK_INTERVAL_MIN分钟执行自动后台检查。 - 降级检测器——在仪表板上突出显示已停止工作的工具。
- MCP 工具:
wb_diagnostics、wb_token_info、wb_degradations、wb_api_news。 GET /api/health——供外部监控使用的 JSON 摘要。POST /api/diagnostics/run——立即检查所有店铺。GET /api/diagnostics/<shop_id>——单个店铺的完整诊断信息。
项目布局
wb-mcp-server/
├── docker-compose.yml # port 8001, wb_data volume
├── Dockerfile # python:3.12-slim
├── pyproject.toml
├── DEPLOY.md # deploying to a dedicated machine, moving the data
├── docs/ # client setup guides + tool reference
└── wb_mcp/
├── server.py # MCP server: 197 tools, dispatch tables, stdio mode
├── client.py # HTTP clients for the 14 Wildberries APIs
├── app.py # FastAPI: SSE + web UI + auth + health loop
├── diagnostics.py # pings, JWT decoder, probes, API news
├── settings.py # stores and keys (Fernet)
├── stats.py # call statistics and check history (SQLite)
└── templates/ # PicoCSS: dashboard, diagnostics, shops
部署
将服务迁移到专用机器、迁移店铺、设置开机自启—— 请参阅 DEPLOY.md(俄语)。
Ozon 的同类服务
DeviceIngineering/ozon-mcp-server
是面向另一个电商平台的同类工具(Ozon 是俄罗斯另一个大型电商平台):
架构相同,带有仪表板和诊断功能的 Web UI 相同,通过 shop_id 处理多个店铺的方式相同,SSE 传输方式相同,连接客户端的方式也相同。设置好一个后,另一个也遵循相同的说明;只有端口和工具集不同。
| WB MCP Server | Ozon MCP Server | |
|---|---|---|
| 端口 | 8001 | 8000 |
| 工具 | 202 | 151 |
| API | Wildberries Seller API | Ozon Seller API + Performance API(广告) |
它们可以在同一台机器上并行运行:端口不同,Docker 卷不同,不会冲突。
它们运行在同一台服务上也不会影响速率限制:两者通过同一个 IP 发出请求,但 Wildberries 和 Ozon 分别计算各自的限额——它们是不同的平台。多店铺部分所述的每个地址可使用的账号数量上限,分别适用于各个平台。
从 API 访问到可用的调价器
此服务让模型能够访问卖家账号。决定价格应该是多少是另一项独立工作,ozon-wildberries-repricer 负责这项工作:它保存参考价格,根据各电商平台的实际费用计算盈亏平衡底价,将会导致售价低于成本的商品从促销活动中移出,并能通过在实际销售中开展受控实验来寻找更优价格。
它在一个地方支持 Ozon、Wildberries 和 Yandex Market,还为 LLM Agent 提供了自己的 HTTP 控制平面,并具备模型所需的防护措施:可能触发 Wildberries 隔离的调价会分多次执行,三分钟后会重新读取价格,因为电商平台有时会对实际上并未执行的更改报告成功;多个 Agent 同时处理同一商品目录时,也不会相互覆盖决策。
无需电商平台账号即可运行:npm run demo 会生成一份模拟商品目录并启动应用。
更新与支持
Wildberries 会不断更改其 API:新增、重命名和停用端点——上文的限制部分列出了实际使用中发现的问题。 此服务是作者日常使用的工具:已在大约二十个卖家账号中连续使用五个多月。更新取决于作者的需求——当下一次更改影响到他自己的店铺时才会更新,而不是按计划进行。这就是提交间隔可能很长的原因:这意味着 WB 在此期间没有造成问题。没有更新时间承诺。
如果急需修复,请发送邮件至 [email protected]。 欢迎提交 Issue 和 Pull Request,作者也会审核。
版本历史:CHANGELOG.md。
许可证
MIT — 详见 LICENSE。
MCP Registry
已发布至官方 MCP Registry:
mcp-name: io.github.DeviceIngineering/wb-mcp-server
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。