# Avito Ads MCP (npm · mcp-avito-ads)

MCP server for the Avito Ads API: campaigns, ad groups, creatives, statistics and balances.

- Trust score: 67/100 (medium)
- Change this week: +29
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-19

## Components

- npm · `mcp-avito-ads`: 67/100 (this document), [markdown](https://verifymcp.io/servers/a1-x-tech-mcp-avito-ads/mcp-avito-ads.md), [page](https://verifymcp.io/servers/a1-x-tech-mcp-avito-ads/mcp-avito-ads)

## Channel facts

- Registry: `npm`
- Package: `mcp-avito-ads`
- Version: `1.1.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-19.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 96 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 67/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7135 tokens (~285/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add a1-x-tech-mcp-avito-ads -- npx -y mcp-avito-ads
```

### Codex

```bash
codex mcp add a1-x-tech-mcp-avito-ads -- npx -y mcp-avito-ads
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "a1-x-tech-mcp-avito-ads": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mcp-avito-ads"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add a1-x-tech-mcp-avito-ads --command npx --arg -y --arg mcp-avito-ads
```

### Hermes

```yaml
mcp_servers:
  a1-x-tech-mcp-avito-ads:
    command: "npx"
    args: ["-y", "mcp-avito-ads"]
```

### Other

```json
{
  "mcpServers": {
    "a1-x-tech-mcp-avito-ads": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-avito-ads"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-19 (score 67, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-08-18 (score 52, +14)

- [security regression] Malware scan: pass → unverified
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100
- [functional] Package version: 1.0.1 → 1.1.0

### 2026-08-12 (score 38, +15)

- [security improvement] Malware scan: unverified → pass
- [functional] Package version: 1.0.0 → 1.0.1

### 2026-08-11 (score 23)

First indexed and scored.

## MCP tools (25)

### `get_account` (~141 tokens)

Реквизиты аккаунта

Возвращает юридические реквизиты рекламного аккаунта, к которому привязан сервер: inn, kpp, ogrn, shortName, longName, legalAddress, actualAddress и блоки contact / manager. Аргументов не принимает — аккаунт задан в AVITO_ADS_ACCOUNT_ID и не выбирается для отдельного вызова. Денежных сумм не содержит (для них get_balance), данных кампаний тоже. Как и у всех инструментов здесь, в ответе есть apiPointBalance: остаток баллов API на текущую неделю (квота пополняется по понедельникам в 00:00 UTC).

### `get_balance` (~85 tokens)

Баланс аккаунта

Возвращает текущий баланс настроенного рекламного аккаунта в рублях: balance (реальные деньги) и bonusBalance (бонусные рубли, которые можно тратить только на рекламу). Аргументов не принимает. Это срез на текущий момент, а не история — расход за период дают инструменты статистики. Аккаунт не пополняет.

### `create_sandbox_account` (~420 tokens)

Создать аккаунт в песочнице

ТОЛЬКО ПЕСОЧНИЦА: создаёт тестовый аккаунт рекламодателя и возвращает его accountID. Сервер отклоняет вызов, если не задано AVITO_ADS_ENVIRONMENT=sandbox, и такой отказ не стоит балла API. contact — непустой объект, например {"name":"Иван Иванов","email":"ivan@example.com","phone":"+79001234567"}; пустой отклоняется до отправки запроса. Два вызова создают два аккаунта. Изменить или удалить аккаунт нельзя, а сервер продолжает работать с AVITO_ADS_ACCOUNT_ID: новый id сам не подхватывается, для работы с ним его нужно прописать в конфигурации.

Input parameters:

- `actualAddress` (string, required): Фактический почтовый адрес; может совпадать с legalAddress.
- `contact` (object, required): Контактное лицо аккаунта; передаётся в API как есть и не может быть пустым, например {"name":"Иван Иванов","email":"ivan@example.com","phone":"+79001234567"}.
- `inn` (string, required): ИНН тестовой компании: 10 цифр для юрлица, 12 для ИП.
- `kpp` (string): КПП. Есть у юрлиц (legalType ul); у ИП его нет — тогда поле опускается.
- `legalAddress` (string, required): Юридический адрес.
- `legalType` (string): Организационно-правовая форма: ul — юрлицо, ip — ИП.
- `longName` (string, required): Полное юридическое наименование, например "Общество с ограниченной ответственностью Ромашка".
- `ogrn` (string, required): Государственный регистрационный номер (ОГРН для юрлица, ОГРНИП для ИП).
- `shortName` (string, required): Краткое юридическое наименование, например "ООО Ромашка".

### `list_child_accounts` (~137 tokens)

Дочерние аккаунты

Перечисляет дочерние (суб-)аккаунты настроенного агентского аккаунта. Каждая запись — {account:{id,shortName}, contract}. Балансов здесь НЕТ, для них есть list_child_accounts_with_balances. Возвращает всех дочерних за один вызов: без постраничной выдачи, фильтров и поиска. `apiPointBalance` в любом ответе этого сервера — остаток баллов API на текущую неделю (квота пополняется по понедельникам в 00:00 UTC); по нему и стоит рассчитывать частоту вызовов.

### `list_child_accounts_with_balances` (~96 tokens)

Дочерние аккаунты с балансами

Тот же список, что и list_child_accounts, плюс баланс каждого дочернего аккаунта: {balance, bonusBalance} в рублях и бонусных рублях. Позволяет увидеть, у кого кончились деньги, перед transfer_funds / transfer_bonus и убедиться, что перевод дошёл. Показывает только балансы дочерних аккаунтов — баланс родительского даёт get_balance.

### `create_child_account` (~209 tokens)

Создать дочерний аккаунт без права оплаты

Создаёт дочерний аккаунт без права оплаты под настроенным агентским аккаунтом и возвращает {accountID, clientKey, clientSecret} — собственные учётные данные API нового аккаунта, которые выдаются только здесь, поэтому сохранить их нужно сразу. Без права оплаты означает, что аккаунт не может пополнить свой баланс сам: деньги приходят из родительского через transfer_funds. Создать аккаунт с правом оплаты, переименовать или удалить аккаунт, а также прочитать секрет заново нельзя. Два вызова создают два аккаунта.

Input parameters:

- `isSelfAdvertisingEnabled` (boolean, required): Может ли новый аккаунт вести саморекламу (рекламировать собственные товары и услуги). Обязательное поле — значение указывается явно, флаг уходит в API при каждом создании.
- `shortName` (string, required): Отображаемое название нового дочернего аккаунта, например "ООО Ромашка".

### `transfer_funds` (~240 tokens)

Перевести деньги на другой аккаунт

Переводит РЕАЛЬНЫЕ ДЕНЬГИ с настроенного аккаунта на другой (обычно на один из дочерних): `amount` рублей, минимум 1. Через этот API перевод необратим — нет ни отмены, ни отката, ни журнала переводов; вернуть деньги можно только встречным переводом, а для него аккаунт-получатель должен уметь отправлять средства. При успехе возвращается пустой объект data: любой ответ без ошибки означает, что перевод выполнен, и повторять вызов нельзя. После сетевой или серверной ошибки исход неизвестен — прежде чем повторять, следует проверить list_child_accounts_with_balances, иначе деньги уйдут дважды.

Input parameters:

- `accountIdTo` (integer, required): Id аккаунта назначения — того, кто ПОЛУЧАЕТ деньги. Отправитель — всегда настроенный аккаунт, и его нельзя переопределить. Id дочерних аккаунтов даёт list_child_accounts.
- `amount` (number, required): Сумма в рублях. Минимум 1; меньшее значение отклоняется.

### `transfer_bonus` (~193 tokens)

Перевести бонусные рубли на другой аккаунт

Переводит бонусные рубли (`bonusBalance` — промо-средства, которыми можно оплачивать рекламу, но нельзя вывести деньгами) с настроенного аккаунта на другой: `amount` бонусных рублей, минимум 1. Правила те же, что у transfer_funds: через этот API перевод необратим, пустой объект data означает, что он прошёл, а после сетевой или серверной ошибки следует проверить list_child_accounts_with_balances, а не повторять вызов. Переводит только бонусы — реальные деньги идут через transfer_funds.

Input parameters:

- `accountIdTo` (integer, required): Id аккаунта назначения — того, кто ПОЛУЧАЕТ бонусы. Отправитель — всегда настроенный аккаунт.
- `amount` (number, required): Сумма в бонусных рублях. Минимум 1; меньшее значение отклоняется.

### `create_advertiser` (~410 tokens)

Зарегистрировать рекламодателя (ОРД)

Регистрирует рекламодателя (контрагента ОРД) под аккаунтом и возвращает {id} плюс apiPointBalance (остаток недельных баллов API). На этот id ссылаются кампании и договоры. Юридические реквизиты должны совпадать с госреестром: inn (10 цифр для ul, 12 для ip), ogrn и оба адреса; kpp — только для юрлиц (ul). legalRole задаёт роль по ОРД: rd (рекламодатель), ra (агентство), rr (распространитель). Эндпоинтов изменения и удаления нет: ошибочного рекламодателя можно только заместить новым, поэтому сначала стоит поискать готовую запись через list_advertisers.

Input parameters:

- `actualAddress` (string, required): Фактический (почтовый) адрес; если он совпадает с legalAddress, повторяется тот же.
- `inn` (string, required): ИНН: 10 цифр для юрлица (ul), 12 для ИП (ip).
- `kpp` (string): КПП. Только для юрлиц (ul); для ip опускается.
- `legalAddress` (string, required): Юридический адрес.
- `legalRole` (string, required): Роль контрагента по ОРД: rd (рекламодатель), ra (агентство), rr (распространитель).
- `legalType` (string, required): Тип юридического лица: ul (юрлицо) или ip (ИП).
- `longName` (string, required): Полное юридическое наименование, например "Общество с ограниченной ответственностью Реклама".
- `ogrn` (string, required): Государственный регистрационный номер (ОГРН для ul, ОГРНИП для ip).
- `shortName` (string, required): Краткое юридическое наименование, например "ООО Реклама".

### `list_advertisers` (~219 tokens)

Список рекламодателей

Возвращает одну страницу рекламодателей, зарегистрированных под аккаунтом: {total, items, page, limit, hasNextPage} плюс apiPointBalance (остаток недельных баллов API). В каждом элементе id, shortName, longName, inn, ogrn, kpp, legalAddress, actualAddress, legalType (ul|ip) и legalRole (rd|ra|rr). Сузить выдачу можно через filter.ids / filter.inns / filter.roles; полнотекстового поиска нет, совпадения по названиям придётся искать самостоятельно. limit — 1..100 (по умолчанию 20); нумерация page с 1.

Input parameters:

- `filter` (object): Фильтр страницы. Без него возвращаются все рекламодатели.
- `limit` (integer): Размер страницы, 1..100. По умолчанию 20.
- `page` (integer): Номер страницы, нумерация с 1. По умолчанию 1.

### `create_contract` (~519 tokens)

Зарегистрировать договор (ОРД)

Регистрирует договор ОРД между аккаунтом и рекламодателем и возвращает {id} плюс apiPointBalance (остаток недельных баллов API). Набор обязательных полей зависит от type: service требует subject, isReportingRequired, date и number (cid отклоняется); intermediary — всё то же плюс object и isFundsAllocationToPrincipal (cid отклоняется); external — только cid (parentId отклоняется). Юридические реквизиты исполнителя передаются в intermediary — они обязательны, если не задан parentId; с parentId запись становится дополнительным соглашением к тому договору, и intermediary в ней быть не должно. Эндпоинтов изменения и удаления нет, поэтому ошибочный договор остаётся на аккаунте навсегда.

Input parameters:

- `advertiserId` (integer, required): Рекламодатель, с которым заключён договор (клиент). Id даёт list_advertisers.
- `cid` (string): Внешний идентификатор договора (со стороны ERID). Обязателен для типа external, для остальных отклоняется.
- `counterpartyType` (string, required): Тип контрагента — уходит в API в поле `description`: direct_with_advertiser или advertiser_intermediary.
- `date` (string): Дата договора, YYYY-MM-DD. Обязательна для service и intermediary.
- `intermediary` (object): Юридические реквизиты исполнителя (посредника). Обязательны, если не задан parentId.
- `isFundsAllocationToPrincipal` (boolean): Распределяются ли средства в пользу принципала. Обязательно для intermediary.
- `isReportingRequired` (boolean): Нужны ли по договору акты и отчёты. Обязательно для service и intermediary.
- `number` (string): Номер договора. Обязателен для service и intermediary.
- `object` (string): Действие по договору, поле API `object`: distribution, conclude, commercial, other. Обязательно для intermediary.
- `parentId` (integer): Id родительского договора. Задаётся, чтобы зарегистрировать дополнительное соглашение; тогда intermediary опускается.
- `subject` (string): Предмет договора: org-distribution, mediation, distribution, representation, other. Обязателен для service и intermediary.
- `type` (string, required): Тип договора: service (оказание услуг), intermediary (посреднический), external (заключён вне Авито, определяется по cid).

### `list_contracts` (~220 tokens)

Список договоров

Возвращает одну страницу договоров, зарегистрированных под аккаунтом: {total, items, page, limit, hasNextPage} плюс apiPointBalance (остаток недельных баллов API). В каждом элементе id, type, number, date, subject, object (действие по договору), cid, description (тип контрагента), parentId (заполнен у дополнительных соглашений) и юридические реквизиты клиента и исполнителя. Сузить выдачу можно через filter.ids / filter.numbers / filter.clients (id рекламодателей) / filter.contractors. limit — 1..100 (по умолчанию 20); нумерация page с 1.

Input parameters:

- `filter` (object): Фильтр страницы. Без него возвращаются все договоры.
- `limit` (integer): Размер страницы, 1..100. По умолчанию 20.
- `page` (integer): Номер страницы, нумерация с 1. По умолчанию 1.

### `list_campaigns` (~529 tokens)

Список рекламных кампаний

Перечисляет рекламные кампании аккаунта постранично. Возвращает {total, items, page, limit, hasNextPage} плюс apiPointBalance — остаток недельных баллов API, которые пополняются по понедельникам в 00:00 UTC. У каждой кампании есть id, name, status, budget (рубли), paymentModel (CPM/CPC), campaignType, startDate/endDate, advertiserId, contractId, managerID и отметки времени. Поля фильтра объединяются по И, и каждый список оставляет только перечисленные в нём значения. Через этот API нельзя создать, изменить, приостановить, возобновить, заархивировать или удалить кампанию и нельзя тронуть её таргетинг — единственные доступные где-либо изменения это change_group_budget и change_group_price для группы объявлений.

Input parameters:

- `additionalAgreementIds` (array): Оставить кампании по этим дополнительным соглашениям (по id).
- `advertisers` (array): Оставить кампании этих рекламодателей (по id).
- `campaignTypes` (array): Оставить только эти типы кампаний: textImage, HTML, video.
- `contractIds` (array): Оставить кампании по этим договорам (по id).
- `createdAt` (object): Оставить кампании, созданные в этом диапазоне: {from, to}, YYYY-MM-DD.
- `filter` (object): Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше.
- `ids` (array): Оставить кампании с этими id.
- `limit` (integer): Размер страницы, 1..100. По умолчанию 20.
- `managers` (array): Оставить кампании этих менеджеров — пользователей аккаунта (по id).
- `page` (integer): Номер страницы, нумерация с 1. По умолчанию 1.
- `paymentModels` (array): Оставить только эти модели оплаты: CPM, CPC.
- `statuses` (array): Оставить кампании с этими статусами: draft, in_moderation, moderation_failed, partial_moderation, active, paused, stopped, finished, archived.
- `timeFrame` (object): Оставить кампании, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD.

### `list_groups` (~470 tokens)

Список групп объявлений

Перечисляет группы объявлений аккаунта постранично. Возвращает {total, items, page, limit, hasNextPage} плюс apiPointBalance (остаток недельных баллов API). Группа — тот уровень, на котором лежат деньги: в каждом элементе id, name, campaignID, status, budget и price (ставка) в рублях, paymentModel, campaignType, advertiserID, haveCreative и отметки времени. Эти два числа меняют change_group_budget / change_group_price — других изменяемых полей во всём дереве рекламных объектов нет. Создать, переименовать, приостановить, возобновить или удалить группу здесь нельзя, таргетинг групп не выведен.

Input parameters:

- `advertisers` (array): Оставить группы этих рекламодателей (по id).
- `campaignIds` (array): Оставить группы этих кампаний (по id).
- `filter` (object): Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше.
- `ids` (array): Оставить группы объявлений с этими id.
- `limit` (integer): Размер страницы, 1..100. По умолчанию 20.
- `managers` (array): Оставить группы этих менеджеров — пользователей аккаунта (по id).
- `paces` (array): Оставить группы с этими режимами распределения бюджета. Значения произвольные: фиксированного словаря для этого фильтра в SDK нет.
- `page` (integer): Номер страницы, нумерация с 1. По умолчанию 1.
- `paymentModels` (array): Оставить только эти модели оплаты: CPM, CPC.
- `statuses` (array): Оставить группы с этими статусами: draft, in_moderation, moderation_failed, will_launch_soon, active, will_stop_soon, pausing, paused, unpausing, stopped, finished, archived.
- `timeFrame` (object): Оставить группы, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD.

### `list_creatives` (~472 tokens)

Список креативов

Перечисляет креативы аккаунта — сами объявления — постранично. Возвращает {total, items, page, limit, hasNextPage} плюс apiPointBalance (остаток недельных баллов API). У каждого креатива есть id, name, title, description, buttonText, link, status, groupID, campaignID, advertiserID, paymentModel, campaignType и legalInfo (данные рекламного реестра / ERID). Только чтение: загрузить, изменить, отправить на модерацию, приостановить или удалить креатив через этот API нельзя — изменять можно только бюджет и ставку группы объявлений.

Input parameters:

- `advertisers` (array): Оставить креативы этих рекламодателей (по id).
- `campaignIds` (array): Оставить креативы этих кампаний (по id).
- `campaignTypes` (array): Оставить только эти типы кампаний: textImage, HTML, video.
- `filter` (object): Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше.
- `groupIds` (array): Оставить креативы этих групп объявлений (по id).
- `ids` (array): Оставить креативы с этими id.
- `limit` (integer): Размер страницы, 1..100. По умолчанию 20.
- `managers` (array): Оставить креативы этих менеджеров — пользователей аккаунта (по id).
- `page` (integer): Номер страницы, нумерация с 1. По умолчанию 1.
- `paymentModels` (array): Оставить только эти модели оплаты: CPM, CPC.
- `statuses` (array): Оставить креативы с этими статусами: draft, ready_for_moderation, in_moderation, moderation_failed, erir_registration, active, paused, stopped, finished, archived.
- `timeFrame` (object): Оставить креативы, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD.

### `change_group_budget` (~177 tokens)

Изменить бюджет группы объявлений

Задаёт бюджет одной группы объявлений в рублях (не меньше 1). Значение заменяет текущий бюджет, а не прибавляется к нему, поэтому повторный вызов безопасен. Принимают его только группы с ручным управлением ставками, остальным API отказывает. Возвращает подтверждение API плюс apiPointBalance. Изменить бюджет кампании, ставку (для неё есть change_group_price) или статус группы нельзя — приостановить, возобновить или удалить группу этот API вообще не умеет. Текущий бюджет стоит сначала посмотреть через list_groups.

Input parameters:

- `budget` (number, required): Новый бюджет в рублях, не меньше 1. Заменяет текущее значение.
- `groupId` (integer, required): Id изменяемой группы объявлений, из list_groups.

### `change_group_price` (~206 tokens)

Изменить ставку группы объявлений

Задаёт ставку одной группы объявлений (в API она называется price) в рублях (не меньше 1). Единица зависит от paymentModel группы: рубли за 1000 показов при CPM, рубли за клик при CPC. Значение заменяет текущую ставку, а не прибавляется к ней, поэтому повторный вызов безопасен. Принимают его только группы с ручным управлением ставками. Возвращает подтверждение API плюс apiPointBalance. Изменить бюджет (для него есть change_group_budget) или статус группы нельзя — приостановить, возобновить или удалить группу этот API вообще не умеет. Текущую ставку показывает поле price в list_groups.

Input parameters:

- `groupId` (integer, required): Id изменяемой группы объявлений, из list_groups.
- `price` (number, required): Новая ставка в рублях, не меньше 1. Заменяет текущее значение.

### `campaign_stats` (~318 tokens)

Статистика кампании

Статистика ОДНОЙ кампании за период дат с разбивкой по группам и креативам: {campaign, groups[], creatives[]}. У каждой сущности есть data[] (по строке на день, с отметкой timestamp) и totalData (итог за период). Метрики в строке: views (показы), clicks (клики), ctr, spend (расход), spendBonus, cpm, cpc, а для видеокампаний ещё videoViews25/50/75/100, q25/q50/q75 и vtr; деньги в рублях, коэффициенты передаются как есть. Период включает обе границы, формат YYYY-MM-DD, длительность не больше 100 дней. Сводить несколько кампаний вместе не умеет, гранулярности мельче дня нет; campaignId даёт list_campaigns. Тратит недельные баллы API; apiPointBalance в ответе — остаток до пополнения квоты в понедельник в 00:00 UTC, поэтому один широкий период предпочтительнее многих узких вызовов.

Input parameters:

- `campaignId` (integer, required): Кампания, по которой строится отчёт. Id можно найти через list_campaigns.
- `dateFrom` (string, required): Первый день периода, включительно (YYYY-MM-DD).
- `dateTo` (string, required): Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней.

### `group_stats` (~347 tokens)

Статистика групп объявлений

Статистика по перечисленным группам одной кампании: плоский массив, по записи на группу объявлений ({id, name, paymentModel, campaignType, data[] по дням, totalData за период}). Метрики те же, что у campaign_stats — views (показы), clicks (клики), ctr, spend (расход), spendBonus, cpm, cpc, квартили видео, vtr, — деньги в рублях. Поле groupIds обязательно: инструмент сужает выборку, а не перечисляет её. Период включает обе границы, формат YYYY-MM-DD, длительность не больше 100 дней. Итогов по кампании не возвращает; чтобы охватить все группы кампании, есть campaign_stats с той же разбивкой. Тратит недельные баллы API; apiPointBalance в ответе — остаток до пополнения квоты в понедельник в 00:00 UTC, поэтому один широкий период предпочтительнее многих узких вызовов.

Input parameters:

- `campaignId` (integer, required): Кампания, группы которой попадают в отчёт. Id можно найти через list_campaigns.
- `dateFrom` (string, required): Первый день периода, включительно (YYYY-MM-DD).
- `dateTo` (string, required): Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней.
- `groupIds` (array, required): Id групп объявлений для отчёта, например [101, 102]. Обязательное поле; id даёт list_groups, а по всей кампании отчитывается campaign_stats.

### `creative_stats` (~358 tokens)

Статистика креативов

Статистика по перечисленным креативам одной кампании: плоский массив, по записи на креатив ({id, name, groupId, paymentModel, campaignType, data[] по дням, totalData за период}). Метрики те же, что у campaign_stats — views (показы), clicks (клики), ctr, spend (расход), spendBonus, cpm, cpc, квартили видео, vtr, — деньги в рублях. Поле creativeIds обязательно: инструмент сужает выборку, а не перечисляет её. Период включает обе границы, формат YYYY-MM-DD, длительность не больше 100 дней. Итогов по кампании не возвращает; чтобы охватить все креативы кампании, есть campaign_stats с той же разбивкой. Тратит недельные баллы API; apiPointBalance в ответе — остаток до пополнения квоты в понедельник в 00:00 UTC, поэтому один широкий период предпочтительнее многих узких вызовов.

Input parameters:

- `campaignId` (integer, required): Кампания, креативы которой попадают в отчёт. Id можно найти через list_campaigns.
- `creativeIds` (array, required): Id креативов для отчёта, например [9001]. Обязательное поле; id даёт list_creatives, а по всей кампании отчитывается campaign_stats.
- `dateFrom` (string, required): Первый день периода, включительно (YYYY-MM-DD).
- `dateTo` (string, required): Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней.

### `list_users` (~108 tokens)

Пользователи аккаунта

Перечисляет пользователей с доступом к рекламному аккаунту — по одной записи {id, role, hasLoggedIn} на пользователя, где role это admin или viewer, а hasLoggedIn показывает, входил ли приглашённый хоть раз. Эти id принимают set_user_role и delete_user. Работает в пределах настроенного аккаунта: пользователей дочернего аккаунта не покажет. Вместе с данными возвращает apiPointBalance (остаток недельных баллов).

### `add_user` (~140 tokens)

Выдать пользователю доступ

Выдаёт существующему пользователю Авито доступ к рекламному аккаунту с указанной ролью. userId — числовой id пользователя Авито; пригласить по почте или телефону и создать аккаунт Авито этот инструмент не может. Если доступ уже есть, роль меняется через set_user_role. Возвращает подтверждение API плюс apiPointBalance.

Input parameters:

- `role` (string, required): admin — полный доступ, включая пользователей, переводы денег и правки кампаний; viewer — только чтение.
- `userId` (integer, required): Числовой id пользователя Авито, которому выдаётся доступ, например 94235311.

### `set_user_role` (~125 tokens)

Изменить роль пользователя

Меняет роль пользователя, у которого уже есть доступ к рекламному аккаунту. Назначение той же роли, что стоит сейчас, ничего не меняет. Доступ не выдаёт (для этого add_user) и не отзывает (для этого delete_user). Возвращает подтверждение API плюс apiPointBalance.

Input parameters:

- `role` (string, required): admin — полный доступ, включая пользователей, переводы денег и правки кампаний; viewer — только чтение.
- `userId` (integer, required): Числовой id пользователя Авито, как его возвращает list_users.

### `delete_user` (~97 tokens)

Отозвать доступ пользователя

Отзывает доступ пользователя к рекламному аккаунту. Операция разрушительная: вернуть доступ можно только через add_user с явно указанной ролью. Аккаунт Авито этого человека, его кампании и историю расходов не удаляет. Возвращает подтверждение API плюс apiPointBalance.

Input parameters:

- `userId` (integer, required): Числовой id пользователя Авито, которого нужно убрать из аккаунта, как его возвращает list_users.

### `raw_request` (~397 tokens)

Прямой вызов API Авито Рекламы

Универсальный запрос к любому пути API Авито Рекламы — для эндпоинтов, у которых нет отдельного инструмента, например GET "v1/account/{accountID}/balance" или POST "v1/account/{accountID}/campaigns". Пути задаются относительно базы API и привязаны к аккаунту: подстановка {accountID} заменяется на настроенный id аккаунта, путь с другим аккаунтом отклоняется, как и путь, выходящий за базу API. `body` отправляется как JSON. Через него доступны все пишущие эндпоинты — funds-transfer, bonus-transfer, delete-user и create-*, — причём без клиентских проверок, которые делают отдельные инструменты, и ничего из этого не отменить; когда специальный инструмент есть, лучше взять его: transfer_funds / delete_user / create_*. confirmWrite=true — явное подтверждение того, что путь может писать, поэтому перед установкой флага путь стоит проверить: POST используется и для безобидных чтений — списков и статистики, — которым флаг тоже нужен. GET выполняется без ограничений. Возвращает сырой ответ плюс apiPointBalance (остаток недельных баллов).

Input parameters:

- `body` (object): Тело запроса в JSON, например {"filter":{},"limit":20,"page":1} для эндпоинта списка.
- `confirmWrite` (boolean): Для POST и DELETE должен быть true. Установка флага подтверждает, что путь может писать: funds-transfer и delete-user — такие же POST/DELETE, как и любое чтение списка.
- `method` (string): HTTP-метод. По умолчанию GET.
- `path` (string, required): Путь API, например "v1/account/{accountID}/groups" или "v1/account/{accountID}/campaigns/123/stats".

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/a1-x-tech-mcp-avito-ads/mcp-avito-ads#diagnostics

## Score history

- 2026-08-19: 67
- 2026-08-18: 52
- 2026-08-17: 38
- 2026-08-16: 38
- 2026-08-15: 38
- 2026-08-14: 38
- 2026-08-13: 38
- 2026-08-12: 38
- 2026-08-11: 23

## Links

- npm package: https://www.npmjs.com/package/mcp-avito-ads
- Socket report: https://socket.dev/npm/package/mcp-avito-ads
- Repository: https://github.com/A1-x-Tech/mcp-avito-ads
- Changelog RSS feed: https://verifymcp.io/servers/a1-x-tech-mcp-avito-ads/mcp-avito-ads.xml
- Changelog JSON feed: https://verifymcp.io/servers/a1-x-tech-mcp-avito-ads/mcp-avito-ads.json
- HTML version of this page: https://verifymcp.io/servers/a1-x-tech-mcp-avito-ads/mcp-avito-ads
