Skip to main content
Glama

avito-mcp-ru

API Авито для ИИ-ассистентов: объявления и статистика, чаты с покупателями, заказы и Авито Доставка, автозагрузка, продвижение, отзывы. Каталог исполняется сервером.

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

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

Установка

Первый релиз на PyPI выпускается тегом v0.5.3, до этого пакет ставится прямо из репозитория:

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

После релиза строка короче:

uvx avito-mcp-ru

Claude Desktop, claude_desktop_config.json:

{
  "mcpServers": {
    "avito": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/ilyautov/avito-mcp-ru", "avito-mcp-ru"],
      "env": { "AVITO_CLIENT_ID": "...", "AVITO_CLIENT_SECRET": "..." }
    }
  }
}

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

npx skills add ilyautov/avito-mcp-ru

Related MCP server: vk-mcp-ru

Ключи

Где взять пару. На avito.ru: Для бизнеса, раздел Интеграции, пункт API. Там выдаётся client_id и client_secret. Хост запросов api.avito.ru.

Как это превращается в токен. Пара меняется на access-токен по OAuth2, срок жизни ограничен. Сервер обновляет токен сам, вручную ничего перевыпускать не нужно.

Где всё лежит. В ~/.marketplace-mcp/cabinets.json с правами chmod 600, локально.

переменная

секрет

что это

AVITO_CLIENT_ID

да

client_id из раздела Для бизнеса → Интеграции → API.

AVITO_CLIENT_SECRET

да

client_secret оттуда же, меняется на токен по OAuth2.

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

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

Каталог лежит в зависимости как avito_mcp/endpoints.yaml: 64 метода, из них 40 на чтение, 22 на запись и 2 необратимых. Сервер исполняет ровно этот файл, поэтому таблица не может разойтись с кодом.

тема

методов

чтение

запись

необратимые

Мессенджер (чаты с покупателями)

13

5

7

1

Автозагрузка (выгрузка объявлений файлом)

12

10

2

0

Заказы и Авито Доставка

12

6

6

0

Объявления и статистика

11

7

4

0

Продвижение объявлений (реклама)

7

6

1

0

Рейтинг и отзывы

4

2

1

1

Пользователь, баланс и операции

3

3

0

0

Остатки в объявлениях

2

1

1

0

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

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

  • покажи статистику по объявлениям за неделю

  • какие заказы Авито Доставки в работе

  • собери непрочитанные сообщения из мессенджера

  • обнови остатки по объявлениям

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

401 после того, как всё работало. Токен Авито живёт ограниченное время. Если запрос идёт мимо сервера, своим кодом, токен надо обновлять; через сервер это происходит само.

403 на методе, который есть в документации. У Авито доступ к разделам выдаётся по заявке и не одинаков у всех аккаунтов. Мессенджер и Авито Доставка открываются не каждому бизнесу.

Ошибка в имени поля. Каталог собран из официальных документов, живой прогон на реальных кабинетах ещё не делался. describe_method покажет схему, avito_get_raw даст поправить запрос на месте.

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

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

нужно

пакет

только Авито

avito-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

30 tools
avito_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

avito_call_methodA
Read-only

Execute one READ endpoint from the catalog by operation_id.

Target API: https://developers.avito.ru/api-catalog.

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

Args: operation_id: id from the catalog (see avito_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

avito_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

avito_delete_methodA
Destructive

Execute one DESTRUCTIVE endpoint: deletes or irreversibly changes data.

Target API: https://developers.avito.ru/api-catalog.

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 avito_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

avito_delete_rawA
Destructive

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

Target API: https://developers.avito.ru/api-catalog.

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

avito_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

avito_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

avito_get_balanceA
Read-only

Wallet balance: real money and bonuses (GET /core/v1/accounts/{user_id}/balance/). Returns JSON: {"ok": true, "data": {"real": ..., "bonus": ...}}.

Inputs: no named parameters. Returns: result

avito_get_chatsA
Read-only

Buyer chats (GET /messenger/v2/accounts/{user_id}/chats). Requires the Messenger API to be enabled on the seller's Avito plan.

Args: unread_only: only chats with unread messages. item_ids: comma-separated listing ids to filter chats by. limit: page size (<=100). offset: pagination offset (<=1000). Returns JSON: {"ok": true, "data": {"chats": [{"id", "context", "last_message", "users"}]}}.

Inputs: limit, offset, item_ids, unread_only. Returns: result

avito_get_itemsA
Read-only

List the seller's listings (объявления): status, category, url (GET /core/v1/items). Max 25 requests/min.

Args: status: active | removed | old | blocked | rejected (comma-separated ok). category: Avito category id filter, 0 = all. updated_from: YYYY-MM-DD lower bound on the listing update date. page: 1-based page number. per_page: page size (<100). Returns JSON: {"ok": true, "data": {"meta": {...}, "resources": [...]}}. For all pages use avito_fetch_all with avito_get_items_info.

Inputs: page, status, category, per_page, +1 more. Returns: result

avito_get_item_statsA
Read-only

Views / contacts / favorites per listing per period (POST /stats/v1/accounts/{user_id}/items). Up to 200 ids, 270 days deep.

Args: item_ids: comma-separated listing ids. date_from: YYYY-MM-DD (inclusive). date_to: YYYY-MM-DD (inclusive). period_grouping: day | week | month. Returns JSON with result.items[].stats[] {date, uniqViews, uniqContacts, uniqFavorites}.

Inputs: date_to (required), item_ids (required), date_from (required), period_grouping. Returns: result

avito_get_ordersA
Read-only

Orders placed with Авито Доставка (GET /order-management/1/orders). Business (B2C) sellers only.

Args: statuses: comma-separated filter: on_confirmation, ready_to_ship, in_transit, canceled, delivered, on_return, in_dispute, closed. date_from: unix timestamp — only orders created after it. page: 1-based page number. limit: page size (<=20). Returns JSON: {"ok": true, "data": {"orders": [...], "hasMore": bool}}. Each order has availableActions (confirm / reject / setTrackNumber …) and schedules (deadlines such as confirmTill, shipTill).

Inputs: page, limit, statuses, date_from. Returns: result

avito_get_rawA
Read-only

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

Target API: https://developers.avito.ru/api-catalog.

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

Args: path: full path beginning with '/', e.g. "/core/v1/items". 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

avito_get_reviewsA
Read-only

Published reviews on the seller with score, text, deal stage and the seller's answer (GET /ratings/v1/reviews). Use avito_get_ratings_info_v1 via avito_call_method for the aggregate rating.

Args: offset: pagination offset. limit: page size (<=50). Returns JSON: {"ok": true, "data": {"total": n, "reviews": [...]}}.

Inputs: limit, offset. Returns: result

avito_get_sectionA
Read-only

List all endpoints in one section.

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

Inputs: section (required). Returns: result

avito_get_stocksA
Read-only

Stock per listing (POST /stock-management/1/info): quantity, is_unlimited, is_out_of_stock. Up to 500 ids per call.

Args: item_ids: comma-separated Avito listing ids. Returns JSON: {"ok": true, "data": {"stocks": [{"item_id", "quantity", ...}]}}.

Inputs: item_ids (required). Returns: result

avito_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

avito_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

avito_list_sectionsA
Read-only

List API sections and how many catalog endpoints each contains.

Inputs: no named parameters. Returns: result

avito_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

avito_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

avito_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

avito_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

avito_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

avito_update_priceA
Idempotent

Set the price of ONE listing (POST /core/v1/items/{item_id}/update_price). WRITE.

Requires confirm_write=true. Goods, spare parts, cars, real estate only; max 150 requests/min.

Args: item_id: Avito listing id. price: new price in roubles (integer). confirm_write: must be true to send. Returns JSON: {"ok": true, "data": {"result": {"success": true}}}.

Inputs: price (required), item_id (required), confirm_write. Returns: result

avito_update_stockA
Idempotent

Set the available quantity of ONE listing (PUT /stock-management/1/stocks). WRITE.

Requires confirm_write=true. quantity 0 hides the "buy with delivery" button.

Args: item_id: Avito listing id. quantity: units available (0..999999). confirm_write: must be true to send. Returns JSON: {"ok": true, "data": {"stocks": [{"item_id", "success", "errors"}]}}.

Inputs: item_id (required), quantity (required), confirm_write. Returns: result

avito_use_cabinetA
Idempotent

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

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

Inputs: name (required). Returns: result

avito_whoamiA
Read-only

Authorized Avito account: id (needed as user_id in many methods), name, email, phone, profile_url. Also the cheapest way to verify the credentials. Returns JSON: {"ok": true, "data": {"id": ..., "name": ..., ...}}.

Inputs: no named parameters. Returns: result

avito_write_methodA

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

Target API: https://developers.avito.ru/api-catalog.

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

Args: operation_id: id from the catalog (see avito_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

avito_write_rawA

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

Target API: https://developers.avito.ru/api-catalog.

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

    A3.6/5.0

    Scored across 30 tools

    Disambiguation3/5

    The catalog navigation tools (avito_list_sections, avito_get_section, avito_search_methods, avito_describe_method) overlap somewhat in purpose, but descriptions clarify their roles. More problematically, read/write/delete execution tools come in both catalog-based (avito_call_method/avito_write_method/avito_delete_method) and raw-path (avito_get_raw/avito_write_raw/avito_delete_raw) variants, creating two parallel execution surfaces that could be confused.

    Naming Consistency3/5

    Most tools follow an avito_verb_noun pattern (avito_list_sections, avito_get_items, avito_update_price), but there are inconsistencies: avito_map, avito_whoami, avito_fetch_all, and avito_set_key break the verb_noun convention. The call/write/delete_method vs get/write/delete_raw naming is also not parallel (call vs get), which undermines predictability.

    Tool Count2/5

    30 tools is heavy for a marketplace MCP server, and many are meta-tools (sections, methods, raw execution, cabinets) rather than domain operations. The six raw/catalog execution variants could be consolidated, while domain-specific getters are duplicated by generic call_method. It feels over-engineered and over-scoped.

    Completeness3/5

    Core read operations are covered (items, orders, stocks, stats, reviews, chats, balance) and write operations exist for price and stock. However, the domain lacks common lifecycle operations like creating/editing listings, responding to reviews, messaging buyers, or acting on orders, which a marketplace seller would expect.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Universal MCP server for the Avito API (Russia's largest classifieds marketplace), built for autonomous AI agents to operate an account hands-free — 145 tools across 18 domains (listings, messenger, orders, delivery, promotion, autoload, reviews, analytics). Safe-by-default: dry-run, idempotency, structured errors, confirmation flow.
      144
      156 npm
      25
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      VK API for AI assistants: wall posts, communities, messages, market items, ads and stats. 373 methods in one catalog, each with a read/write/destructive safety class; the agent searches methods in plain language instead of receiving 373 tools.
      18
      78 PyPI
      3
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Ozon Seller API in your AI assistant: products, FBS and FBO orders, prices, stocks, finance and reviews. 441 methods live in a YAML catalog the server executes, the agent searches it in plain language and calls a method through three generic tools, and every method carries an access class so writes and irreversible calls ask for confirmation.
      25
      58 PyPI
      3
      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