ozon-mcp-ru
This server lets AI assistants work with the Ozon Seller API — browse a 441-method catalog, run read/write/delete operations, manage credentials, and use ready-made workflows.
Explore the API catalog: list sections, search methods by keyword (RU/EN), get method details (path, params, limits, docs), and view a capability map.
Execute catalog methods safely: read-only calls (
ozon_call_method), write calls with confirmation (ozon_write_method), and destructive calls requiring double confirmation (ozon_delete_method).Call raw endpoints: read, write, or delete any Ozon path even if it is missing from the catalog.
Auto-paginate large reads: fetch all rows from cursor/offset/page-based endpoints with a hard cap.
Get business data quickly: products, stocks, prices, unfulfilled FBS orders, and price updates via shortcut tools.
Manage multiple shops/cabinets: list, add, switch, rotate keys, and remove credential sets stored locally with chmod 600.
Use analytical recipes: list and fetch step-by-step workflows for common Ozon tasks.
Check setup: verify credentials are present and see which required variables are missing.
ozon-mcp-ru
API Ozon Seller для ИИ-ассистентов: товары, заказы FBS и FBO, цены, остатки, финансы, отзывы. Каталог исполняется сервером, у каждого метода класс доступа.
Пакет поднимает один сервер, Ozon Seller, и ничего больше. Сервер, каталог и
ядро приходят зависимостью из marketplaces-mcp-ru:
здесь имя, точка входа и документация под один маркетплейс.
Установка
Пакет на PyPI, поэтому строка одна:
uvx ozon-mcp-ruЕсли нужна ветка main, а не релиз:
uvx --from git+https://github.com/ilyautov/ozon-mcp-ru ozon-mcp-ruClaude 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-ruRelated 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. В репозиторий и в чат они не попадают. Магазинов можно подключить несколько и переключаться между ними прямо из чата.
переменная | секрет | что это |
| да | Client-Id из кабинета seller.ozon.ru, Настройки → API-ключи. |
| да | 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 |
|
все четыре маркетплейса |
|
Кто это сделал
Илья Утов, лаборатория AI Frontier. Как эти инструменты устроены внутри, пишу в Telegram и LinkedIn.
Рядом стоят business-mcp-ru (hh.ru, VK, Диадок, СБИС, Честный знак), moysklad-mcp-ru и humanizer-ru.
Все проекты одним списком, разобранные по назначению: ilyautov.github.io.
Лицензия
MIT, см. LICENSE.
Available Tools
25 toolsozon_add_cabinetAIdempotent
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_methodARead-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_authARead-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_methodADestructive
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_rawADestructive
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_methodARead-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_allARead-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_unfulfilledARead-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_pricesARead-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_productsARead-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_rawARead-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_sectionARead-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_stocksARead-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_workflowARead-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_cabinetsARead-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_sectionsARead-only
List API sections and how many catalog endpoints each contains.
Inputs: no named parameters. Returns: result
ozon_list_workflowsARead-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_mapARead-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_cabinetADestructive
Delete a stored cabinet. If it was active, another becomes active.
Args: name: the cabinet to remove.
Inputs: name (required). Returns: result
ozon_search_methodsARead-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_keyAIdempotent
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_priceAIdempotent
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_cabinetAIdempotent
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
Scored across 25 tools
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.
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.
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.
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
Related MCP Connectors
Amazon Ads and Seller Central for your AI assistant: reports, campaign management and seller data.
Amazon Ads and Seller Central for your AI: listings, ads, profit, inventory and search terms.
Russian APIs for AI agents: YooKassa, CDEK, Bitrix24 and more. Ready scenarios with code. No key.
Amazon Ads, Seller Central, Vendor Central and AMC data for AI agents. Read-only by default.
Related MCP Servers
- AlicenseAqualityDmaintenanceozon-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/ba1526MIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Wildberries and Ozon seller accounts for real-time access to sales, stocks, prices, finances, and reviews through official APIs.MIT
- AlicenseAqualityCmaintenanceEnables 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.1765 npmMIT
- AlicenseAqualityBmaintenanceYandex 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.263MIT