mcpField
O
ozon-mcp-server

ozon-mcp-server

本地服务
github.com/DeviceIngineering商业与营销98 周前更新

关于 ozon-mcp-server

ozon-mcp-server 将 Ozon Seller API 和 Performance API 接入 AI 助手,面向管理多个 Ozon 店铺的卖家。它提供商品、订单、促销、广告等操作,并内置 API 诊断和调用监控。

主要功能

  1. 01覆盖 Seller 与 Performance API
  2. 02管理商品、订单、退货与评价
  3. 03管理促销、定价和广告活动
  4. 04按 shop_id 区分多个店铺
  5. 05提供 API 诊断与调用仪表板
  6. 06加密存储店铺 API 密钥

适用场景

  1. 01查看并调整广告活动与预算
  2. 02管理不同店铺的促销和价格
  3. 03处理订单、退货及买家评价

MCP 相关

作为 MCP 服务,它通过 stdio 或 SSE 向 MCP 客户端提供 Ozon 店铺管理工具;每次工具调用都需指定 shop_id。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"deviceingineering-ozon": {
"command": "uvx",
"args": [
"ozon-mcp-server"
],
"env": {
"OZON_CLIENT_ID": "<OZON_CLIENT_ID>",
"OZON_API_KEY": "<OZON_API_KEY>",
"OZON_PERF_CLIENT_ID": "<OZON_PERF_CLIENT_ID>",
"OZON_PERF_CLIENT_SECRET": "<OZON_PERF_CLIENT_SECRET>",
"DATA_DIR": "<DATA_DIR>"
}
}
}
}
启动命令uvx ozon-mcp-server
需要配置的环境变量
OZON_CLIENT_IDOzon Seller API Client-Id from seller.ozon.ru (Settings - API keys)
OZON_API_KEY密钥Ozon Seller API key
OZON_PERF_CLIENT_IDOzon Performance API Client-Id, needed only for advertising tools
OZON_PERF_CLIENT_SECRET密钥Ozon Performance API client secret
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. ~/.ozon-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiozon-mcp-server2.5.2

工具

156

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

Русский English 中文

Ozon MCP 服务

License: MIT Python MCP tools PyPI Transport

直接通过与 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,在任何语言环境下内容都相同:文件路径、URL http://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.

Ozon MCP 服务仪表板

功能

分组工具包含内容
促销和折扣14Ozon 促销(列表、候选项、参加/退出)、卖家自己的促销、“我想要折扣”买家请求
价格和定价策略14设置价格和最低价、价格指数、最低价计时器、追踪竞争对手的自动策略
广告(Performance API)22“Trafarety” CPC 广告活动(Ozon 的赞助展示格式)、出价和预算、“按订单付费”(CPO)、按商品和按日统计数据
商品21商品列表和商品卡片、属性、库存、导入和批量更新、媒体、归档、证书
FBS 和 FBO 订单17未履行的订单、打包(v4)、标签、取消、交接单、原产国
退货和取消10统一的 FBO+FBS 退货列表、需要卖家决定的 rFBS 申诉、取消请求
评价、问题和聊天13评价和回复、买家问题、聊天对话(v3)
仓库和报告8FBS 仓库、配送方式、生成和下载报告
财务7余额、交易、应计款项、销售报告、结算、现金流
类目、品牌、证书7类目树、属性及其允许值、证书
分析5SKU 分析、库存和周转率、商品在 Ozon 搜索中的排名、热门搜索词
FBO 供货4供货订单(v3)、计数器、时段
评级2当前卖家评级及其历史记录
诊断2Ozon 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/diagnosticsOzon API 诊断
http://localhost:8000/api/health健康状态端点,JSON 格式
http://localhost:8000/sseMCP 端点 — 客户端要连接的地址

请注意,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 324979
ozon_get_prices — 93 % 的数据量来自促销历史52 8798 679
ozon_returns_fbo — 50 条退货记录,包含完整物流信息24 2778 458
ozon_warehouse_list — 99 % 的数据量来自一整年的时间表20 132370
16 条实时响应构成的语料库476 15863 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工具数令牌数
空(默认)15112 686
pricing,ads575 425
orders332 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 APIapi-seller.ozon.ruClient-Id 和 Api-Key 请求头
Performance API(广告)api-performance.ozon.ruOAuth 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_MIN30后台诊断间隔,0 表示禁用
PORT8000HTTP 服务端口
OZON_TOOLSETS空逗号分隔的工具配置:pricing、ads、catalog、orders、analytics、feedback、finance;为空表示启用全部 156 个工具
OZON_MAX_RESPONSE_CHARS60000单个响应的大小保护阈值
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 ServerWB MCP Server
端口80008001
工具151202
APIOzon 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 发布。

版本历史:CHANGELOG.md。

许可证

MIT — 详见 LICENSE。

MCP Registry

已发布到官方 MCP Registry:

mcp-name: io.github.DeviceIngineering/ozon-mcp-server

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。