关于 ozon-mcp-server
ozon-mcp-server 将 Ozon Seller API 和 Performance API 接入 AI 助手,面向管理多个 Ozon 店铺的卖家。它提供商品、订单、促销、广告等操作,并内置 API 诊断和调用监控。
主要功能
- 01覆盖 Seller 与 Performance API
- 02管理商品、订单、退货与评价
- 03管理促销、定价和广告活动
- 04按 shop_id 区分多个店铺
- 05提供 API 诊断与调用仪表板
- 06加密存储店铺 API 密钥
适用场景
- 01查看并调整广告活动与预算
- 02管理不同店铺的促销和价格
- 03处理订单、退货及买家评价
MCP 相关
作为 MCP 服务,它通过 stdio 或 SSE 向 MCP 客户端提供 Ozon 店铺管理工具;每次工具调用都需指定 shop_id。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx ozon-mcp-serverOZON_CLIENT_IDOzon Seller API Client-Id from seller.ozon.ru (Settings - API keys)OZON_API_KEY密钥Ozon Seller API keyOZON_PERF_CLIENT_IDOzon Performance API Client-Id, needed only for advertising toolsOZON_PERF_CLIENT_SECRET密钥Ozon Performance API client secretDATA_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. ~/.ozon-mcp本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
156收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
Ozon MCP 服务
直接通过与 AI 助手聊天来管理你的 Ozon 店铺:价格、促销、广告、订单、退货、评价、财务——基于 Ozon Seller API 和 Performance API 提供 156 个工具(Ozon 是俄罗斯最大的电商平台;Seller API 涵盖商品目录和运营,Performance API 涵盖付费广告)。
专为运营多个店铺的卖家打造:每次调用都需要传入 shop_id,API 密钥会加密保存在你自己的服务器上,不会离开服务器。
与其他 Ozon MCP 服务相比,它不仅支持 Seller API,还涵盖广告功能;内置诊断功能会在助手遇到问题之前,告知你哪些 Ozon 接口出现故障。
也在 Wildberries 上销售?这里也有相同的 WB 服务—— wb-mcp-server。
这是作者自己日常使用的工具:已持续使用五个多月,涉及约二十个卖家账户,包含 156 个工具。作者有需要时就会更新——关于这对你意味着什么,请参阅更新与支持。
docs/中按客户端分类的安装指南目前仅提供俄语版。 其中的配置是可直接粘贴的 JSON,在任何语言环境下内容都相同:文件路径、URLhttp://localhost:8000/sse,以及标头Authorization: Bearer <MCP_AUTH_TOKEN>。
You: Which of my products is Ozon planning to pull into a promo?
You: Show ad campaign spend for the week and stop the ones burning money.
You: Which products have a worse price index than their competitors?
You: Reply with a thank-you to every new 5-star review.

功能
| 分组 | 工具 | 包含内容 |
|---|---|---|
| 促销和折扣 | 14 | Ozon 促销(列表、候选项、参加/退出)、卖家自己的促销、“我想要折扣”买家请求 |
| 价格和定价策略 | 14 | 设置价格和最低价、价格指数、最低价计时器、追踪竞争对手的自动策略 |
| 广告(Performance API) | 22 | “Trafarety” CPC 广告活动(Ozon 的赞助展示格式)、出价和预算、“按订单付费”(CPO)、按商品和按日统计数据 |
| 商品 | 21 | 商品列表和商品卡片、属性、库存、导入和批量更新、媒体、归档、证书 |
| FBS 和 FBO 订单 | 17 | 未履行的订单、打包(v4)、标签、取消、交接单、原产国 |
| 退货和取消 | 10 | 统一的 FBO+FBS 退货列表、需要卖家决定的 rFBS 申诉、取消请求 |
| 评价、问题和聊天 | 13 | 评价和回复、买家问题、聊天对话(v3) |
| 仓库和报告 | 8 | FBS 仓库、配送方式、生成和下载报告 |
| 财务 | 7 | 余额、交易、应计款项、销售报告、结算、现金流 |
| 类目、品牌、证书 | 7 | 类目树、属性及其允许值、证书 |
| 分析 | 5 | SKU 分析、库存和周转率、商品在 Ozon 搜索中的排名、热门搜索词 |
| FBO 供货 | 4 | 供货订单(v3)、计数器、时段 |
| 评级 | 2 | 当前卖家评级及其历史记录 |
| 诊断 | 2 | Ozon API 可用性自检、降级检测器 |
| 通知 | 2 | 推送 Webhook 订阅和事件类型参考 |
| 公司 | 2 | 卖家详情和费率 |
| 店铺 | 1 | 已连接店铺列表及其 shop_id |
FBO 和 FBS 是 Ozon 的履约模式:FBO 从 Ozon 仓库发货, FBS 从你的仓库发货,rFBS 则是由你自行配送的 FBS。
完整的编号列表以及每个工具的说明和参数见
docs/tools.md。该列表由 ozon_mcp/server.py(
TOOLS 常量)生成——这也是任何 MCP 客户端通过 tools/list 获取的内容。
快速开始
选项 1:一条命令,无需 Docker
该服务使用 stdio 通信,这是 Claude Desktop、Cursor、VS Code 和其他 MCP 客户端的连接方式。无需构建:
uvx ozon-mcp-server
也可以通过 pip:
pip install ozon-mcp-server
ozon-mcp
客户端配置(例如 claude_desktop_config.json):
{
"mcpServers": {
"ozon": {
"command": "uvx",
"args": ["ozon-mcp-server"],
"env": {
"OZON_CLIENT_ID": "your Client-Id",
"OZON_API_KEY": "your API key",
"DATA_DIR": "~/.ozon-mcp"
}
}
}
}
将 DATA_DIR 指向任意可写目录——该目录用于存储店铺、密钥和统计数据。
默认值为 /data,这是 Docker 内部使用的路径。
选项 2:使用 Docker 和 Web 控制面板
如果你需要控制面板、Ozon API 诊断和基于浏览器的店铺管理,请使用此选项。只需执行 5 条命令:
git clone https://github.com/DeviceIngineering/ozon-mcp-server.git
cd ozon-mcp-server
cp .env.example .env # fine as-is for a trusted local network
docker compose up -d --build # builds the image, serves on port 8000
open http://localhost:8000/shops # add a store and its Ozon API keys
每个步骤的作用:
.env— 所有变量都是可选的。相比在此处填写店铺密钥,在 Web UI 中输入更方便。如果服务器可被你以外的人访问,建议预先设置MCP_AUTH_TOKEN(使用openssl rand -hex 32生成)。docker compose up -d --build— 根据Dockerfile构建镜像,映射端口8000:8000,并创建ozon_data卷,用于存储店铺、密钥、调用统计数据和诊断历史记录。restart: unless-stopped会在重启后重新启动容器。/shops— 添加店铺的表单:shop_id(你在聊天中使用的标识)、显示名称、Seller API 的 Client-Id 和 Api-Key,以及 Performance API 的 Client-Id 和 Client-Secret。“Проверить”(测试)按钮会向 Ozon 发送实时请求,并告知你密钥是否有效。
启动后:
| 地址 | 说明 |
|---|---|
http://localhost:8000/ | 控制面板:调用计数、错误、降级情况 |
http://localhost:8000/shops | 店铺和密钥 |
http://localhost:8000/diagnostics | Ozon API 诊断 |
http://localhost:8000/api/health | 健康状态端点,JSON 格式 |
http://localhost:8000/sse | MCP 端点 — 客户端要连接的地址 |
请注意,Web UI 为俄语界面。
停止服务:docker compose down(数据仍保留在 ozon_data 卷中)。
日志:docker compose logs -f。
不使用 Docker
python3 -m venv .venv && source .venv/bin/activate
pip install .
DATA_DIR=./data PORT=8000 ozon-mcp-web
DATA_DIR 默认为 /data,因此在本地运行时,请确保将其指向可写入的目录。
安装到客户端
传输方式为 SSE,地址是 http://<host>:8000/sse。不同客户端对 SSE 的支持各不相同:有些可以直接使用,有些则需要 mcp-remote 桥接工具。每个客户端都有一份指南,其中包含 macOS、Linux 和 Windows 的配置路径及可直接使用的 JSON——指南为俄语,但 JSON 代码块不受语言影响:
| 客户端 | 支持直接使用 SSE | 指南 |
|---|---|---|
| Claude Code | 是 | docs/install-claude-code.md |
| Claude Desktop | 否,需要 mcp-remote 桥接 | docs/install-claude-desktop.md |
| Cursor | 是 | docs/install-cursor.md |
| Windsurf / Devin Desktop | 是 | 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 | 未确认,建议使用桥接工具 | docs/install-zed.md |
| JetBrains AI Assistant / Junie | 是 | docs/install-jetbrains.md |
| Gemini CLI | 是 | docs/install-gemini-cli.md |
| OpenAI Codex CLI | 否,需要 mcp-remote 桥接 | docs/install-codex.md |
最简示例:Claude Code:
claude mcp add --transport sse ozon http://localhost:8000/sse \
--header "Authorization: Bearer <MCP_AUTH_TOKEN>"
客户端摘要和桥接工具参考:docs/README.md。
多店铺与安全性
在 Web 界面中添加店铺,每个工具都必须指定 shop_id;
ozon_list_shops 会告知你有哪些店铺。在聊天中可以这样说:
“显示店铺 alpha 的库存”。
真正的优势不在于切换店铺,而在于策略只需编写一次, 就能部署到每个账户:有关价格、评价回复或广告出价的规则可同时应用于所有店铺——无需登录和退出卖家账户,也无需在客户端配置之间复制密钥。
代价是共用一个 IP。每个账户都通过同一个地址与 Ozon 通信: 运行 MCP 的服务器地址。Ozon 的速率限制等因素会按地址统计,因此账户越多、策略运行越频繁,合并后的流量就越接近触发限流或封禁的阈值。
- 代码中没有店铺数量限制;
- 实际上限取决于 Ozon 的单 IP 限制,而非此服务器;
- 作者估计,约 20 个账户时,流量仍处于安全范围内;
- 超出此数量时,应将店铺分散到多个使用不同地址的服务器上。
你可以看到限制是否临近,而查看位置就是 Web 界面:失败的 ping 和诊断警告会不断累积,调用统计中的错误占比也会飙升。仪表板还能区分这两种情况——大范围限流会导致许多工具同时降级,而端点故障则只影响单个工具。
密钥的存储方式:
- 首次使用时,会在
DATA_DIR中创建.encryption_key(Fernet 密钥); - 店铺密钥使用此密钥加密,并保存在
DATA_DIR/shops.json中; - Web 界面会将密钥脱敏显示(
abc***xyz),保存脱敏值不会覆盖真实密钥; - 在 Docker 中,所有这些数据都位于
ozon_data卷中。要迁移到另一台机器,请复制整个卷——否则会丢失加密密钥 (参见 DEPLOY.md,俄语)。
访问权限须知:
MCP_AUTH_TOKEN仅保护/sse。将其作为Authorization: Bearer …标头传入,或作为?token=…查询参数传入。MCP_AUTH_TOKEN为空表示完全不进行身份验证。仅适用于可信网络。- Web 界面(
/、/shops、/diagnostics)和/api/*不受此令牌保护:任何能访问该端口的人都能查看仪表板并添加店铺。 - 不要将端口 8000 直接暴露到互联网。远程访问请使用 Tailscale 或 VPN。
- 服务器不会终止 HTTPS。如果需要从外部通过 TLS 访问,请在前面部署反向代理。
Web 界面:每次调用都一目了然
对于典型的 MCP 服务,调用往往会石沉大海:助手执行了某项操作,但具体做了什么、耗时多久、遇到了什么错误,只有助手知道。这里的每次调用都会在日志中留下一条记录,每个出现故障的工具都会在仪表板上显示标记。对于会在店铺中实际动用资金的工具而言,这并非装饰——而是建立信任的前提。
调用统计和检查历史并非模拟数据:它们来自 5 个多月的日常使用,涉及约 20 个卖家账户。局限性部分中记录的 Ozon API 变更也来自同一渠道——这些信息是从降级日志中整理出来的,并非照搬文档。
仪表板 /
本页顶部有截图。
- 顶部有 4 个计数器:调用总数、今日调用数、错误数,以及平均调用时长(毫秒)。
- 工具调用次数前 10 名:调用次数、平均时长,以及失败调用数。
- 最近 50 次调用的动态列表:时间戳、
shop_id、工具名称、时长、成功或失败状态,以及错误文本。 - 按店铺筛选(
/?shop=alpha)——查看单个账户的相同统计数据。 - 顶部会显示 2 个横幅:工具降级,以及“最近一次 Ozon API 检查发现问题”。
门店 /shops

可直接在浏览器中添加和移除账号,无需编辑文件,也无需重启容器。“Проверить”(测试)按钮会向两个 API 发送实时请求
(POST /api/shops/{shop_id}/test),因此添加密钥时就会验证,而不是等到任务进行期间首次实际调用时才验证。令牌使用 Fernet 加密,加密密钥保存在
DATA_DIR/.encryption_key 中,界面会对密钥进行掩码显示。
诊断 /diagnostics

(截图展示的是一个故意使用无效密钥的演示门店,因此每项探测结果都显示为红色)
- 每个门店:密钥是否已设置、Ozon 主机是否可用、12 项 Seller API 类别探测,以及 Performance API 密钥检查。
- 每隔
HEALTH_CHECK_INTERVAL_MIN分钟执行一次后台检查(默认为 30,设为0可禁用),另有“Проверить сейчас”(立即检查)按钮,可立即运行检查(POST /api/diagnostics/run)。 - 检查历史:时间、门店、状态、失败的 ping 数量、失败的探测数量,以及警告文本。界面显示最近 30 条记录;数据库最多保留 1000 条,并自动轮换。
- 也可以通过聊天中的
ozon_diagnostics工具查看相同数据。
降级检测器
服务会根据自身统计数据,自动发现 Ozon 是否出现故障或关闭了某个端点,而不是依赖文档或失败的工作。如果某个工具最近连续三次调用失败,但更早的调用成功过,它就会出现在降级列表中。列表会显示工具名称、最近一次成功调用的时间、连续错误次数,以及最新错误的文本。在仪表板上,这会显示为红色横幅;在诊断页面上,则显示为表格。
这样做的好处是:Ozon 方面的变更会在发生当天就显现出来,而不是等到一周后发现价格一直没有更新。也可以通过聊天中的 ozon_degradations 查看相同列表。
外部监控 JSON 接口
以上所有数据都可以通过程序抓取,而不只是查看:
| 端点 | 返回内容 |
|---|---|
GET /api/health | 服务状态、是否启用了身份验证、近期检查结果、降级工具 |
GET /api/stats | 与仪表板相同的摘要;?shop= 可将结果限定为一个门店 |
GET /api/diagnostics/{shop_id} | 对单个门店进行完整的实时诊断 |
这些接口足以将服务接入 Zabbix、Uptime Kuma,或在 cron 中通过简单的 curl 调用。
上下文预算
有两项会消耗令牌:每个会话加载一次的工具定义,以及每次调用都会消耗令牌的工具响应。两者都是在真实卖家账号上测量的,而非估算得出——scripts/collect_corpus.py 会对只读工具拍摄快照(在写入磁盘前屏蔽 PII,语料库不会纳入代码库),scripts/measure_corpus.py 则报告其开销。
定义。 配置单个店铺时,156 个工具消耗 12 300 个令牌,低于原先的 18 386 个:描述精简为一句话、只有一个店铺时从架构中移除 shop_id,且不包含空的架构字段。
响应。 真正的问题在于少数几个超大的负载:
| 工具 | 之前 | 之后 |
|---|---|---|
ozon_category_tree — 包含 9 797 个节点的树 | 266 324 | 979 |
ozon_get_prices — 93 % 的数据量来自促销历史 | 52 879 | 8 679 |
ozon_returns_fbo — 50 条退货记录,包含完整物流信息 | 24 277 | 8 458 |
ozon_warehouse_list — 99 % 的数据量来自一整年的时间表 | 20 132 | 370 |
| 16 条实时响应构成的语料库 | 476 158 | 63 845 |
服务会采取以下措施:
view: compact | full。 大型工具仅返回调用所需的字段;view="full"会提供原始 API 响应,并说明隐藏了哪些字段,让模型知道可以进一步请求哪些内容。- 截断提示。 如果返回的记录数恰好等于
limit,响应会说明数据不完整——否则模型可能基于部分数据进行推理,却把它当作完整目录呈现。 - 大小限制。 如果响应超出客户端的输出上限(Claude Code 默认的
MAX_MCP_OUTPUT_TOKENS为 25 000),服务端会截断响应,并注明省略了多少内容,而不是让内容在到达时被静默截断。 - 分类树的搜索和深度。 API 不提供这两项功能,会返回全部 9 797 个节点;
search用于查找分类,depth用于控制层级,默认只返回顶层。
备注会作为单独的内容块返回,而非 JSON 中的字段:有些 Ozon 端点会在顶层返回数组,如果将其包装起来,就会破坏所有指向数据的路径。
工具配置集。 不支持工具搜索的客户端每次请求都要为整个目录付费。OZON_TOOLSETS 只保留你会用到的配置集,这些配置集按实际工作任务划分,而非按文档章节划分:
OZON_TOOLSETS | 工具数 | 令牌数 |
|---|---|---|
| 空(默认) | 151 | 12 686 |
pricing,ads | 57 | 5 425 |
orders | 33 | 2 611 |
core 配置集——店铺、诊断、降级、公司——始终启用:恰恰是在出现故障时才需要诊断。已禁用的配置集会列在 ozon_list_shops 的描述中,调用已禁用的工具时会说明它属于哪个配置集,让助手能说清原因,而不是声称“无法做到”。
Claude Code 无需这些设置:它默认启用了工具搜索。Cursor、Cline、Continue 和 Claude Desktop 会完整获取 tools/list——这些配置集是为它们准备的。
设计决策
- 151 个精简工具,而不是少数几个通用工具。 将它们合并成
action风格的端点虽然能节省定义令牌,但会改变失败类型:原本是“没有此工具”,合并后却会变成调用错误并产生副作用,而且有些工具会设置价格并启动广告活动。 - 服务会自我诊断。
ozon_diagnostics会检查主机是否可用,并针对 12 个 Seller API 类别以及 Performance API 密钥执行轻量级真实请求;ozon_degradations会报告哪些工具过去可以正常使用、现在却持续失败。Ozon 会在不通知的情况下停用端点,因此必须能通过一次调用回答“是我的密钥有问题,还是 API 改了”。 - 重型工具默认使用
compact。 语料库显示,被隐藏的字段是促销历史、仓库时间表和物流内部信息,而非决策所依据的数据;响应也会说明隐藏了哪些内容。 - 响应整形通过 contextvar 实现。 这里的分发器是一条很长的 if 链,包含 150 个
_json调用;手动在每个分支中传递工具名称和参数,需要修改 150 处,也有 150 次可能遗漏的机会。 - 只有一家店铺时,架构中不会出现
shop_id,一旦新增第二家店铺,它就会重新出现。 - 特意锁定
mcp<2——2.0 的底层 API 移除了本服务所依赖的装饰器处理器;锁定原因已记录在设置该版本约束的位置。 - 密钥在静态存储时会加密(使用 Fernet,密钥存放在数据卷中),并在 UI 中屏蔽;语料收集器会在写入文件前屏蔽个人数据。
工作原理
单个 Docker 容器运行一个 FastAPI 应用,同时提供 MCP 服务和 Web UI。
ozon_mcp/server.py— MCP 服务本身。TOOLS列表描述全部 156 个工具(名称、描述、参数的 JSON schema),call_tool处理器会将每次调用路由到相应的 Ozon 客户端方法。客户端按shop_id池化,因此切换店铺时无需重新连接。ozon_mcp/client.py— 两个 HTTP 客户端:OzonSellerClient(使用Client-Id/Api-Key请求头)和OzonPerformanceClient(使用client_credentials令牌,有效期为 30 分钟并会自动刷新)。ozon_mcp/app.py— FastAPI:基于SseServerTransport的/sse端点、Bearer 令牌检查、仪表板/店铺/诊断页面,以及后台健康检查任务。ozon_mcp/settings.py— 店铺与密钥:Fernet 加密、UI 屏蔽、将环境变量中的密钥作为名为default的店铺读取,以及将旧的单店铺settings.json迁移到shops.json。ozon_mcp/diagnostics.py— 探测:对 Ozon 主机执行 ping,并针对 12 个 Seller API 类别发起轻量级真实请求,同时检查 Performance API 密钥。ozon_mcp/stats.py— 通过aiosqlite使用 SQLite:记录每次工具调用的耗时和结果、健康检查历史以及降级情况。
服务连接的主机:
| API | 基础 URL | 授权方式 |
|---|---|---|
| Seller API | api-seller.ozon.ru | Client-Id 和 Api-Key 请求头 |
| Performance API(广告) | api-performance.ozon.ru | OAuth client_credentials,令牌有效期为 30 分钟 |
不那么显而易见的事项:
- Ozon 返回的广告出价和预算以微卢布为单位:
1000000= 1 ₽。看到七位数的数字不必惊讶。 - 评论和问题接口返回
403并不表示服务故障,而是说明没有 Premium Plus 订阅。诊断不会将其计为错误。 - 自 2026-02-13 轮换后,Ozon API 密钥改为有时限:有效期为 180 天。密钥过期时间会明确提供:
POST /v1/roles返回expires_at,因此可以提前发出提醒,而不必等到探测时遇到401。 - 异步广告统计:一次只能生成一份报告,最多 10 个广告活动,时间跨度不超过 62 天。该工具最多等待约 2 分钟,直到报告就绪。
- API v3 中的供货订单状态是整数 1–8,而不是字符串。
环境变量
| 变量 | 默认值 | 用途 |
|---|---|---|
MCP_AUTH_TOKEN | 空 | /sse 的 Bearer 令牌。为空表示不进行身份验证 |
HEALTH_CHECK_INTERVAL_MIN | 30 | 后台诊断间隔,0 表示禁用 |
PORT | 8000 | HTTP 服务端口 |
OZON_TOOLSETS | 空 | 逗号分隔的工具配置:pricing、ads、catalog、orders、analytics、feedback、finance;为空表示启用全部 156 个工具 |
OZON_MAX_RESPONSE_CHARS | 60000 | 单个响应的大小保护阈值 |
DATA_DIR | /data | 存放 shops.json、stats.db、.encryption_key 的目录 |
OZON_CLIENT_ID、OZON_API_KEY | 空 | default 店铺的 Seller API 密钥;如果不想使用 UI,可设置这些密钥 |
OZON_PERF_CLIENT_ID、OZON_PERF_CLIENT_SECRET | 空 | Performance API 的对应密钥 |
已知的 Ozon API 限制(截至 2026 年 8 月)
-
广告:API 只能创建「Trafarety」CPC 广告活动;预算和出价以微卢布为单位;没有官方方法可读取广告账户余额。
-
「按订单付费」:自 2025 年 2 月起,出价已固定——只能开启或关闭推广。
-
评价、问题和部分分析功能需要 Premium Plus 订阅(错误代码 7)。
-
Ozon 已将
ozon_analytics中的漏斗指标标记为弃用——搜索排名请使用ozon_product_queries。 -
Ozon 将于 2026 年秋季关闭的端点。 日期来自官方 @OzonSellerAPI 频道,并已通过实际卖家账户验证 (issue #6, 感谢 @standlord-prog):
路径 关闭日期 替代方案 /v3/posting/fbs/list2026-08-31 /v4/posting/fbs/list— 已在 v2.1.0 中完成/v2/posting/fbo/list2026-08-31 /v3/posting/fbo/list— 已在 v2.1.0 中完成/v3/posting/fbs/unfulfilled/list2026-08-31 无替代方案:按状态从 /v4/posting/fbs/list中筛除 — 已在 v2.1.0 中完成/v2/posting/fbs/act/create2026-09-07 /v1/carriage/create+/v1/carriage/approve— 进行中/v3/finance/transaction/list2026-09-08 /v1/finance/accrual/by-day— 进行中/v3/finance/transaction/totals2026-09-08 同上 — 进行中 /v4/posting/fbs/list并非 v3 的改名:postings位于顶层,而非result下;分页使用游标(has_next+cursor),而不是offset。 -
ozon_finance_cash_flow和ozon_finance_accruals已使用新的路径 (/v1/finance/cash-flow-statement/list、/v1/finance/accrual/by-day)。 -
ozon_product_stocks_by_warehouse使用 v2,因为 v1 已于 2026-04-07 关闭。 -
Ozon 于 2026-03-22 移除了数字版 FBS 交接单——现在使用常规交接单。
-
Ozon API 没有「编辑评价回复」的方法:回复会先被删除,再重新发布。
此列表并非照抄参考资料,而是根据故障记录和五个月的每日调用整理而成,并与截至 2026 年 8 月的 docs.ozon.ru 文档进行了交叉核对。
版本 2.0 的变更
针对 2026 年 6 月的 Ozon API 进行了全面修订,并通过实际请求验证,而非仅阅读文档:统一退货列表、取消订单 v2、销售报告 v2、发货 v4、供应订单 v3、真实定价策略和「我想要折扣」、卖家自己的促销活动、新广告模式(Trafarety CPC +「按订单付费」)、带有故障检测器的诊断功能,以及 MCP 端点上的身份验证。
项目结构
ozon-mcp-server/
├── docker-compose.yml # port 8000, ozon_data volume
├── Dockerfile # python:3.12-slim, uvicorn
├── DEPLOY.md # deploying to a dedicated machine, moving data
├── docs/ # client connection guides + tool reference
└── ozon_mcp/
├── server.py # MCP server: 156 tools, multi-store
├── client.py # Seller API + Performance API
├── app.py # FastAPI: SSE, web, auth, health loop
├── diagnostics.py # category probes, degradation detector
├── settings.py # stores and keys (Fernet)
├── stats.py # call statistics and check history (SQLite)
└── templates/ # dashboard, diagnostics, shops
部署到专用机器并迁移店铺: DEPLOY.md(俄语)。
Wildberries 的同款服务
wb-mcp-server 是面向另一家电商平台的同款工具(Wildberries 是俄罗斯另一家大型电商平台):采用相同的架构、相同的 Web UI(含仪表板和诊断功能)、通过 shop_id 实现相同的多店铺模式、使用相同的 SSE 传输方式,也支持相同的客户端连接方式。
| Ozon MCP Server | WB MCP Server | |
|---|---|---|
| 端口 | 8000 | 8001 |
| 工具 | 151 | 202 |
| API | Ozon Seller API + Performance API(广告) | Wildberries Seller API |
实际上,这意味着两件事:
- 第二个服务不需要额外学习。 设置好一个之后,另一个的启动方式也相同;只有端口(8001 而非 8000)和工具集不同。
- 你可以在同一台机器上运行两者。 端口不同,数据存放在不同的 Docker 卷中,互不冲突。在你的客户端中,它们只是两个 MCP 服务:
ozon位于http://localhost:8000/sse,wb位于http://localhost:8001/sse。
共用一台机器也不会影响速率限制:两者都从同一个 IP 发出请求,但 Ozon 和 Wildberries 分别在各自平台计算限制——它们是不同的电商平台。“多店铺”部分介绍的卖家账户数量上限,也分别适用于每个平台。
从 API 访问到可用的调价工具
此服务为模型提供卖家账户访问权限。决定价格应该是多少是另一项工作,ozon-wildberries-repricer 可以完成这项工作:它保存参考价格,根据各电商平台的实际费用计算盈亏平衡底价,将可能导致价格低于成本的商品从促销活动中移出,还能通过在实际销售中开展受控实验来寻找更优价格。
它在一个地方支持 Ozon、Wildberries 和 Yandex Market,并且为 LLM Agent 提供了自己的 HTTP 控制平面,以及模型所需的安全措施:可能触发 Wildberries 隔离的调价会分多次逐步执行;由于电商平台有时会对未实际执行的更改也报告成功,因此会在三分钟后重新读取价格;多个 Agent 同时处理同一商品目录时,也无法覆盖彼此的决策。
无需电商平台账户即可运行:npm run demo 会创建一个合成商品目录并启动应用。
更新与支持
Ozon 会不断更改其 API:端点会新增、重命名或停用(上方的限制部分列出了目前发现的情况)。此服务是作者日常使用的工具,只有在作者需要更新时才会更新——也就是说,当变更影响到他自己的店铺时才会更新。经过五个多月的每日使用,提交会在 Ozon 导致问题时出现,而不是按固定计划发布:提交之间通常有一段间隔,往往意味着一切正常。好处是代码经过真实日常使用的验证,而非发布后便被遗忘;不足之处是没有发布计划,也不承诺修复时限。
如果你急需修复,请发送邮件至 [email protected]。 也欢迎提交 Issue 和拉取请求,我们也会阅读。
致谢
- @standlord-prog:
- issue #6 — 梳理了 Ozon 接口停用情况,并通过实时卖家账户进行了核实:停用日期、替代方案,以及迁移到
/v4时需要注意的三个问题。此外,还警告了/v1/carriage/create没有必填字段,空的{}请求体也会创建真实货件,并纠正了关于POST /v1/roles返回expires_at的说明。 v2.1.0 基于这项工作构建。 - PR #7 — 发现并修复了诊断盲点:在 stdio 模式下,调用统计信息从未初始化,因此
ozon_degradations对所有问题都回答“没有降级”——即使每一次调用都失败了。该工具被标记为 [P0],而且恰恰会在出问题时被调用,因此无声的误报比完全没有工具更糟。此 PR 不仅修复了相关连接逻辑,还区分了“没有数据”和“没有降级”,并使用真实 MCP 客户端为 stdio 添加了集成测试。该修复随 v2.1.2 发布。
- issue #6 — 梳理了 Ozon 接口停用情况,并通过实时卖家账户进行了核实:停用日期、替代方案,以及迁移到
版本历史:CHANGELOG.md。
许可证
MIT — 详见 LICENSE。
MCP Registry
已发布到官方 MCP Registry:
mcp-name: io.github.DeviceIngineering/ozon-mcp-server
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。