Skip to main content
Glama

ozon-mcp-ru

API Ozon Seller для ИИ-ассистентов: товары, заказы FBS и FBO, цены, остатки, финансы, отзывы. Каталог исполняется сервером, у каждого метода класс доступа.

PyPI CI License: MIT Методов Сайт Звёзды

Пакет поднимает один сервер, Ozon Seller, и ничего больше. Сервер, каталог и ядро приходят зависимостью из marketplaces-mcp-ru: здесь имя, точка входа и документация под один маркетплейс.

Установка

Пакет на PyPI, поэтому строка одна:

uvx ozon-mcp-ru

Если нужна ветка main, а не релиз:

uvx --from git+https://github.com/ilyautov/ozon-mcp-ru ozon-mcp-ru

Claude Desktop, claude_desktop_config.json:

{
  "mcpServers": {
    "ozon": {
      "command": "uvx",
      "args": ["ozon-mcp-ru"],
      "env": { "OZON_CLIENT_ID": "...", "OZON_API_KEY": "..." }
    }
  }
}

Третий путь, если агент умеет скиллы: он поставит сервер и настроит клиент сам.

npx skills add ilyautov/ozon-mcp-ru

Related MCP server: marketplaces-mcp-ru

Ключи

Seller API: Client-Id и Api-Key. Зайдите в кабинет seller.ozon.ru, откройте Настройки, раздел API-ключи. Ozon выдаёт пару: Client-Id (число) и Api-Key. Оба уходят в заголовки одноимённых имён, хост запроса api-seller.ozon.ru.

Performance API: client_id и client_secret. Рекламный кабинет живёт отдельно и авторизуется по OAuth2: пара client_id и client_secret меняется на токен, хост api-performance.ozon.ru. Ключи Seller API там не работают, и наоборот.

Куда положить, чтобы не хранить в открытую. Сервер спросит ключи при первом запуске и положит их в ~/.marketplace-mcp/cabinets.json с правами chmod 600. В репозиторий и в чат они не попадают. Магазинов можно подключить несколько и переключаться между ними прямо из чата.

переменная

секрет

что это

OZON_CLIENT_ID

да

Client-Id из кабинета seller.ozon.ru, Настройки → API-ключи.

OZON_API_KEY

да

Api-Key из той же пары. Оба уходят в одноимённые заголовки.

Ключи можно не держать в окружении: сервер умеет кабинеты и кладёт их в ~/.marketplace-mcp/cabinets.json с правами 600, вне репозитория. Магазинов подключается сколько нужно, переключение прямо из чата.

Карта методов

Каталог лежит в зависимости как ozon_mcp/endpoints.yaml: 441 метод, из них 190 на чтение, 240 на запись и 11 необратимых. Сервер исполняет ровно этот файл, поэтому таблица не может разойтись с кодом.

тема

методов

чтение

запись

необратимые

Заказы FBS и доставка

112

37

73

2

Заказы FBO и склады

64

37

25

2

Товары и карточки

55

30

24

1

Кросс-док FBP

45

15

27

3

Акции и продвижение

31

9

21

1

Возвраты и отмены

30

11

19

0

Отзывы, вопросы и чаты

27

10

16

1

Финансы и отчёты

25

11

14

0

Кабинет и служебное

22

12

9

1

Цены и остатки

21

11

10

0

Аналитика

9

7

2

0

Подробный разбор с параметрами и лимитами: https://marketplaces-mcp-ru.aifrontier.tech/ozon-api.html

Что спросить в чате

  • покажи продажи на Ozon за неделю по дням

  • какие товары с красным индексом цены

  • вытащи отчёт о начислениях за прошлый месяц

  • собери отзывы ниже 4 звёзд и сгруппируй жалобы

Частые ошибки

401 или «Client-Id should be positive integer», хотя ключ верный. Первым делом смотрите не переменные окружения, а ~/.marketplace-mcp/cabinets.json: активный кабинет в этом файле имеет приоритет над env и молча затеняет то, что вы экспортировали в терминале.

404 на методе, который точно существует. Ozon дрейфует по версиям, и разные разделы живут на разных: список товаров на v3, атрибуты на v4, цены на v5. При 404 проверяйте версию в пути раньше всего остального.

405 Method Not Allowed. Скорее всего это метод, импортированный из спецификации: путь у таких записей надёжный, а HTTP-глагол не всегда. Живая проба находила методы, помеченные GET, которые на деле POST. Сверьтесь с документацией или вызовите через ozon_get_raw.

Чем это отличается от marketplaces-mcp-ru

Ничем, кроме состава. marketplaces-mcp-ru ставит четыре маркетплейса сразу и держит их под одним сервером, ozon-mcp-ru ставит один. Код общий: правка в ядре доезжает сюда обновлением зависимости, а не копированием.

Рекламный кабинет Ozon это отдельный API с другой авторизацией. Он тоже есть в marketplaces-mcp-ru, команда ozon-perf-mcp, 45 методов.

нужно

пакет

только Ozon Seller

ozon-mcp-ru

все четыре маркетплейса

marketplaces-mcp-ru

Кто это сделал

Илья Утов, лаборатория AI Frontier. Как эти инструменты устроены внутри, пишу в Telegram и LinkedIn.

Рядом стоят business-mcp-ru (hh.ru, VK, Диадок, СБИС, Честный знак), moysklad-mcp-ru и humanizer-ru.

Все проекты одним списком, разобранные по назначению: ilyautov.github.io.

Лицензия

MIT, см. LICENSE.

Available Tools

25 tools
ozon_add_cabinetA
Idempotent

Add or update a cabinet (a named set of API credentials), from chat.

⚠️ This puts the key into the chat transcript — requires i_understand_key_goes_to_chat=true. The terminal-free safe alternative is the installer (install.py / double-click), where the key never enters chat.

Args: credentials: dict with the required fields for this service ({fields}). For Ozon: {{"client_id": "...", "api_key": "..."}}; for WB: {{"token": "..."}}. name: optional label. If omitted, the cabinet is named after the real shop name fetched from the marketplace (falls back to "main"). i_understand_key_goes_to_chat: must be true to proceed. Saved to ~/.marketplace-mcp/cabinets.json (local, chmod 600), never echoed.

Inputs: credentials (required), name, i_understand_key_goes_to_chat. Returns: result

ozon_call_methodA
Read-only

Execute one READ endpoint from the catalog by operation_id.

Target API: https://docs.ozon.ru/api/seller/.

Reads only: nothing here changes data, so it runs without confirmation. To change data use ozon_write_method, to delete use ozon_delete_method.

Args: operation_id: id from the catalog (see ozon_search_methods). path_values: values for {placeholders} in the path. query: query-string parameters. body: JSON request body (a few read endpoints take one). Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: operation_id (required), body, query, path_values. Returns: result

ozon_check_authA
Read-only

Check whether the required credentials are present in the environment.

Does NOT reveal secret values — only reports which variables are set. Returns JSON: {"ready": bool, "missing": [str], "required": [str]}.

Inputs: no named parameters. Returns: result

ozon_delete_methodA
Destructive

Execute one DESTRUCTIVE endpoint: deletes or irreversibly changes data.

Target API: https://docs.ozon.ru/api/seller/.

Both confirm_write=true and i_understand_this_modifies_data=true are required; nothing is sent without both.

Args: operation_id: id from the catalog (see ozon_search_methods). path_values: values for {placeholders} in the path. query: query-string parameters. body: JSON request body. confirm_write: must be true. i_understand_this_modifies_data: must be true. Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: operation_id (required), body, query, path_values, +2 more. Returns: result

ozon_delete_rawA
Destructive

Delete data at ANY path, including paths not in the catalog.

Target API: https://docs.ozon.ru/api/seller/.

DELETE only. Both confirm_write=true and i_understand_this_modifies_data=true are required.

Args: path: full path beginning with '/'. method: DELETE. host: host override; defaults to the service's default host. query: query-string parameters. body: JSON request body. confirm_write: must be true. i_understand_this_modifies_data: must be true. Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: path (required), body, host, query, +3 more. Returns: result

ozon_describe_methodA
Read-only

Return the full catalog record for one endpoint: method, host, path, scope, safety level, pagination style, rate limit, params and doc URL.

Inputs: operation_id (required). Returns: result

ozon_fetch_allA
Read-only

Auto-paginate a read endpoint and return every row in one response.

Handles offset, last_id, cursor (Ozon v4/v5), page and WB lastChangeDate styles. The array path is taken from the catalog automatically.

Args: operation_id: a read endpoint from the catalog. query / body / path_values: base parameters (cursor fields are managed). items_path: override the array path (default: the endpoint's own). limit: page size to request. max_items: hard cap to protect context (default 10000). Returns JSON: {"ok", "items", "total_fetched", "pages_fetched", "truncated"}.

Inputs: operation_id (required), body, limit, query, +3 more. Returns: result

ozon_get_fbs_unfulfilledA
Read-only

List new/unprocessed FBS shipments awaiting assembly.

Args: cutoff_from: ISO datetime lower bound, e.g. "2026-06-01T00:00:00Z". cutoff_to: ISO datetime upper bound. limit: page size. offset: pagination offset. Returns JSON: {"ok": true, "data": {"result": {"postings": [...]}}}.

Inputs: cutoff_to (required), cutoff_from (required), limit, offset. Returns: result

ozon_get_pricesA
Read-only

Get prices, commissions and price indexes per product (v5/product/info/prices).

Args: visibility: product visibility filter (default ALL). limit: page size (<=1000). cursor: pagination cursor from a previous response. Returns JSON with price, marketing_seller_price, min_price, commissions, price_indexes.

Inputs: limit, cursor, visibility. Returns: result

ozon_get_productsA
Read-only

List Ozon products (one page).

Args: visibility: ALL | VISIBLE | INVISIBLE | ARCHIVED | IN_SALE ... limit: page size (<=1000). last_id: cursor from a previous page (empty for first page). Returns JSON: {"ok": true, "data": {"result": {"items": [...], "last_id": "..."}}}. For every product across pages use ozon_fetch_all with ozon_product_list.

Inputs: limit, last_id, visibility. Returns: result

ozon_get_rawA
Read-only

Read ANY endpoint by path, including ones missing from the catalog.

Target API: https://docs.ozon.ru/api/seller/.

Safe verbs only (GET, HEAD, OPTIONS). To change data use ozon_write_raw, to delete use ozon_delete_raw.

Args: path: full path beginning with '/', e.g. "/v1/actions". method: safe verb, GET by default. host: host override; defaults to the service's default host. query: query-string parameters. body: JSON request body (rare on reads; some APIs want one). Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: path (required), body, host, query, +1 more. Returns: result

ozon_get_sectionA
Read-only

List all endpoints in one section.

Args: section: section name (see ozon_list_sections), e.g. "statistics". Returns JSON list of {operation_id, method, path, safety, summary}.

Inputs: section (required). Returns: result

ozon_get_stocksA
Read-only

Get available + reserved stock per product (v4/product/info/stocks).

Args: visibility: product visibility filter (default ALL). limit: page size (<=1000). last_id: cursor for pagination. Returns JSON with stock per product (present, reserved) per warehouse type.

Inputs: limit, last_id, visibility. Returns: result

ozon_get_workflowA
Read-only

Return the full plan for one workflow: ordered steps (each naming a catalog operation_id and why), interpretation guidance, and common mistakes to avoid.

Args: name: workflow name (see {svc}_list_workflows).

Inputs: name (required). Returns: result

ozon_list_cabinetsA
Read-only

List configured cabinets for this marketplace and which one is active.

Returns JSON: {"active": str|null, "cabinets": [names], "fields_needed": [...]}. Secret values are never returned.

Inputs: no named parameters. Returns: result

ozon_list_sectionsA
Read-only

List API sections and how many catalog endpoints each contains.

Inputs: no named parameters. Returns: result

ozon_list_workflowsA
Read-only

List ready-made analytical workflows (recipes) for this marketplace.

Returns JSON: [{name, category, when_to_use}]. Use {svc}_get_workflow to fetch the full step-by-step plan for one.

Inputs: no named parameters. Returns: result

ozon_mapA
Read-only

The big picture: business entities this API covers and the go-to methods for each. Call with no args to see the whole map ("you are here"); pass entity="reviews" (or stocks/prices/orders/…) to list every method of one entity. Use this before guessing — it orients you fast.

Inputs: entity. Returns: result

ozon_remove_cabinetA
Destructive

Delete a stored cabinet. If it was active, another becomes active.

Args: name: the cabinet to remove.

Inputs: name (required). Returns: result

ozon_search_methodsA
Read-only

Search the endpoint catalog by keyword (works in Russian and English).

Args: query: free text, e.g. "остатки", "stocks", "update price". limit: max results (1-50). Returns JSON list of matching endpoints (best first).

Inputs: query (required), limit. Returns: result

ozon_set_keyA
Idempotent

Change / rotate the API key from chat (e.g. the old one expired or leaked).

⚠️ The key goes into the chat transcript — requires i_understand_key_goes_to_chat=true. The safe, terminal-free alternative is the installer, where the key never enters chat. Use a scoped key and rotate it in the seller cabinet if it was exposed.

Args: credentials: dict with the required fields ({fields}). cabinet: which cabinet to update. Default: the active one (so "my key expired" just works). If there is none, the cabinet is named from the marketplace's shop name, else "main". i_understand_key_goes_to_chat: must be true to proceed. On success the key is validated against the marketplace and the shop name is reported. Saved locally (chmod 600), never echoed back.

Inputs: credentials (required), cabinet, i_understand_key_goes_to_chat. Returns: result

ozon_set_priceA
Idempotent

Set the price for ONE product by offer_id (v1/product/import/prices). WRITE.

Requires confirm_write=true. Ozon limits price updates to ~10/product/hour. Prices are strings. old_price="0" clears the strikethrough old price.

Args: offer_id: seller's article (offer_id). price: new price as a string, e.g. "1499". old_price: pre-discount price as string, or "0" to clear. min_price: minimum price as string, or "0". currency_code: default "RUB". confirm_write: must be true to send. Returns JSON: {"ok": true, "data": {"result": [{"offer_id", "updated", "errors"}]}}.

Inputs: price (required), offer_id (required), min_price, old_price, +2 more. Returns: result

ozon_use_cabinetA
Idempotent

Switch the active cabinet. Subsequent API calls use its credentials.

Args: name: the cabinet to activate (see ozon_list_cabinets).

Inputs: name (required). Returns: result

ozon_write_methodA

Execute one WRITE endpoint from the catalog: create or update data.

Target API: https://docs.ozon.ru/api/seller/.

Requires confirm_write=true; nothing is sent without it. Irreversible operations live in ozon_delete_method, reads in ozon_call_method.

Args: operation_id: id from the catalog (see ozon_search_methods). path_values: values for {placeholders} in the path. query: query-string parameters. body: JSON request body. confirm_write: must be true. Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: operation_id (required), body, query, path_values, +1 more. Returns: result

ozon_write_rawA

Create or update data at ANY path, including paths not in the catalog.

Target API: https://docs.ozon.ru/api/seller/.

POST, PUT and PATCH only; requires confirm_write=true.

Args: method: POST, PUT or PATCH. path: full path beginning with '/'. host: host override; defaults to the service's default host. query: query-string parameters. body: JSON request body. confirm_write: must be true. Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: path (required), method (required), body, host, +2 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 25 tools

    Disambiguation4/5

    Tools are broadly separated into cabinet management, catalog discovery, generic execution, and convenience endpoints. A few pairs overlap (add_cabinet/set_key, call_method/get_raw, write_method/write_raw), but descriptions and safety levels make the intended choice clear.

    Naming Consistency5/5

    All tools use the ozon_ prefix and follow a verb_noun snake_case pattern (get_products, set_price, list_sections). Even raw/fetch variants fit the convention, with only minor deviations like map and fetch_all that still read as verbs.

    Tool Count3/5

    25 tools sits at the top of the borderline range. The count is justified by the catalog/execution/cabinet/workflow layers, but some redundancy (catalog-based vs raw execution, add_cabinet vs set_key) makes the set feel slightly heavier than necessary.

    Completeness5/5

    The generic call/write/delete methods plus raw variants can reach every Ozon seller endpoint, so there are no dead ends. Convenience wrappers for products, stocks, prices, and FBS cover common tasks, and cabinet lifecycle is fully supported.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      ozon-mcp is a knowledge-rich MCP server that turns the entire Ozon seller toolkit into 15 high-leverage tools. AI agents (Claude, Cursor, Cline, Continue, Goose, Zed, …) can search the API in Russian or English, drill into any of 466 methods with a fully-resolved JSON Schema, and execute calls with built-in safety guards. Subscription- aware, automatic pagination over all 4 cursor styles, retry/ba
      15
      26
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects AI assistants to Wildberries and Ozon seller accounts for real-time access to sales, stocks, prices, finances, and reviews through official APIs.
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Enables AI agents to read and work with Wildberries, Ozon, and Yandex Market seller accounts through typed tools, multi-account support, unified data schemas, rate limiting, audit, and encrypted credential storage.
      17
      65 npm
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Yandex Market Partner API in your AI assistant: orders and returns, products and cards, prices and tariffs, reports, reviews and chats. 165 methods live in a YAML catalog the server executes, the agent searches it in plain language, and every method carries an access class so writes and irreversible calls ask for confirmation.
      26
      3
      MIT