A side-by-side look at the AdButler and Avito Ads MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose AdButler for marketing work as a local process; choose Avito Ads MCP for marketing as a local process. You can also run both side by side in one mcpServers block.
ADBUTLER_API_KEY.list_advertisers, get_advertiser, create_advertiser.AVITO_ADS_CLIENT_ID, AVITO_ADS_CLIENT_SECRET, AVITO_ADS_ACCOUNT_ID, AVITO_ADS_ENVIRONMENT, AVITO_ADS_TIMEOUT_MS, AVITO_ADS_MAX_RETRIES.auth_status, get_account, get_balance.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Marketing | Marketing |
| Quality signal | 59/100 · Good | 57/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | ADBUTLER_API_KEY | AVITO_ADS_CLIENT_IDAVITO_ADS_CLIENT_SECRETAVITO_ADS_ACCOUNT_IDAVITO_ADS_ENVIRONMENTAVITO_ADS_TIMEOUT_MSAVITO_ADS_MAX_RETRIES |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 1 |
| Directory activity | 2 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 627 | 26 |
| Full listing | View AdButler | View Avito Ads MCP |
list_advertisersList all advertisers in your AdButler accountget_advertiserGet details of a specific advertiser by IDcreate_advertiserCreate a new advertiserupdate_advertiserUpdate an existing advertiserdelete_advertiserDelete an advertiserarchive_advertiserArchive an advertiser (soft-delete, can be restored later)list_archived_advertisersList all archived advertisersget_archived_advertiserGet details of a specific archived advertiserunarchive_advertiserRestore an archived advertiser back to active statuslist_all_campaignsList all campaigns across all typeslist_campaignsList all standard campaignsget_campaignGet details of a specific standard campaignauth_statusПоказывает, готов ли сервер работать: заданы ли AVITO_ADS_CLIENT_ID, AVITO_ADS_CLIENT_SECRET и AVITO_ADS_ACCOUNT_ID, нет ли среди них испорченного значения, какое окружение выбрано (production или sandbox) и какой адрес API используется. Ничего не отправляет в сеть и не возвращает ни client secret, ни токен. Вызовите это первым, если инструменты отвечают, что учётных данных нет или что аккаунт не найден: ответ называет конкретную переменную и что с ней не так, вместо повторения одной и той же ошибки на каждом вызове.get_accountВозвращает юридические реквизиты рекламного аккаунта, к которому привязан сервер: inn, kpp, ogrn, shortName, longName, legalAddress, actualAddress и блоки contact / manager. Аргументов не принимает — аккаунт задан в AVITO_ADS_ACCOUNT_ID и не выбирается для отдельного вызова. Денежных сумм не содержит (для них get_balance), данных кампаний тоже. Как и у всех инструментов здесь, в ответе есть apiPointBalance: остаток баллов API на текущую неделю (квота пополняется по понедельникам в 00:00 UTC).get_balanceВозвращает текущий баланс настроенного рекламного аккаунта в рублях: balance (реальные деньги) и bonusBalance (бонусные рубли, которые можно тратить только на рекламу). Аргументов не принимает. Это срез на текущий момент, а не история — расход за период дают инструменты статистики. Аккаунт не пополняет.create_sandbox_accountТОЛЬКО ПЕСОЧНИЦА: создаёт тестовый аккаунт рекламодателя и возвращает его accountID. Сервер отклоняет вызов, если не задано AVITO_ADS_ENVIRONMENT=sandbox, и такой отказ не стоит балла API. contact — непустой объект, например {"name":"Иван Иванов","email":"ivan@example.com","phone":"+79001234567"}; пустой отклоняется до отправки запроса. Два вызова создают два аккаунта. Изменить или удалить аккаунт нельзя, а сервер продолжает работать с AVITO_ADS_ACCOUNT_ID: новый id сам не подхватывается, для работы с ним его нужно прописать в конфигурации.list_child_accountsПеречисляет дочерние (суб-)аккаунты настроенного агентского аккаунта. Каждая запись — {account:{id,shortName}, contract}. Балансов здесь НЕТ, для них есть list_child_accounts_with_balances. Возвращает всех дочерних за один вызов: без постраничной выдачи, фильтров и поиска. `apiPointBalance` в любом ответе этого сервера — остаток баллов API на текущую неделю (квота пополняется по понедельникам в 00:00 UTC); по нему и стоит рассчитывать частоту вызовов.list_child_accounts_with_balancesТот же список, что и list_child_accounts, плюс баланс каждого дочернего аккаунта: {balance, bonusBalance} в рублях и бонусных рублях. Позволяет увидеть, у кого кончились деньги, перед transfer_funds / transfer_bonus и убедиться, что перевод дошёл. Показывает только балансы дочерних аккаунтов — баланс родительского даёт get_balance.create_child_accountСоздаёт дочерний аккаунт без права оплаты под настроенным агентским аккаунтом и возвращает {accountID, clientKey, clientSecret} — собственные учётные данные API нового аккаунта, которые выдаются только здесь, поэтому сохранить их нужно сразу. Без права оплаты означает, что аккаунт не может пополнить свой баланс сам: деньги приходят из родительского через transfer_funds. Создать аккаунт с правом оплаты, переименовать или удалить аккаунт, а также прочитать секрет заново нельзя. Два вызова создают два аккаунта.transfer_fundsПереводит РЕАЛЬНЫЕ ДЕНЬГИ с настроенного аккаунта на другой (обычно на один из дочерних): `amount` рублей, минимум 1. Через этот API перевод необратим — нет ни отмены, ни отката, ни журнала переводов; вернуть деньги можно только встречным переводом, а для него аккаунт-получатель должен уметь отправлять средства. При успехе возвращается пустой объект data: любой ответ без ошибки означает, что перевод выполнен, и повторять вызов нельзя. После сетевой или серверной ошибки исход неизвестен — прежде чем повторять, следует проверить list_child_accounts_with_balances, иначе деньги уйдут дважды.transfer_bonusПереводит бонусные рубли (`bonusBalance` — промо-средства, которыми можно оплачивать рекламу, но нельзя вывести деньгами) с настроенного аккаунта на другой: `amount` бонусных рублей, минимум 1. Правила те же, что у transfer_funds: через этот API перевод необратим, пустой объект data означает, что он прошёл, а после сетевой или серверной ошибки следует проверить list_child_accounts_with_balances, а не повторять вызов. Переводит только бонусы — реальные деньги идут через transfer_funds.create_advertiserРегистрирует рекламодателя (контрагента ОРД) под аккаунтом и возвращает {id} плюс apiPointBalance (остаток недельных баллов API). На этот id ссылаются кампании и договоры. Юридические реквизиты должны совпадать с госреестром: inn (10 цифр для ul, 12 для ip), ogrn и оба адреса; kpp — только для юрлиц (ul). legalRole задаёт роль по ОРД: rd (рекламодатель), ra (агентство), rr (распространитель). Эндпоинтов изменения и удаления нет: ошибочного рекламодателя можно только заместить новым, поэтому сначала стоит поискать готовую запись через list_advertisers.list_advertisersВозвращает одну страницу рекламодателей, зарегистрированных под аккаунтом: {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.create_contractРегистрирует договор ОРД между аккаунтом и рекламодателем и возвращает {id} плюс apiPointBalance (остаток недельных баллов API). Набор обязательных полей зависит от type: service требует subject, isReportingRequired, date и number (cid отклоняется); intermediary — всё то же плюс object и isFundsAllocationToPrincipal (cid отклоняется); external — только cid (parentId отклоняется). Юридические реквизиты исполнителя передаются в intermediary — они обязательны, если не задан parentId; с parentId запись становится дополнительным соглашением к тому договору, и intermediary в ней быть не должно. Эндпоинтов изменения и удаления нет, поэтому ошибочный договор остаётся на аккаунте навсегда.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"adbutler": {
"command": "npx",
"args": [
"-y",
"@adbutler/mcp-server"
],
"env": {
"ADBUTLER_API_KEY": "YOUR_ADBUTLER_API_KEY_HERE"
}
}
}
}
{
"mcpServers": {
"avito-ads-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-avito-ads@latest"
],
"env": {
"AVITO_ADS_CLIENT_ID": "YOUR_AVITO_ADS_CLIENT_ID_HERE",
"AVITO_ADS_CLIENT_SECRET": "YOUR_AVITO_ADS_CLIENT_SECRET_HERE",
"AVITO_ADS_ACCOUNT_ID": "YOUR_AVITO_ADS_ACCOUNT_ID_HERE",
"AVITO_ADS_ENVIRONMENT": "YOUR_AVITO_ADS_ENVIRONMENT_HERE",
"AVITO_ADS_TIMEOUT_MS": "YOUR_AVITO_ADS_TIMEOUT_MS_HERE",
"AVITO_ADS_MAX_RETRIES": "YOUR_AVITO_ADS_MAX_RETRIES_HERE"
}
}
}
}