VK Ads MCP

io.github.askadsPublished by GitHub account askadsv1.8.3Updated Nov 3, 2026

MCP server for VK Ads (VK Реклама) API: manage ad plans, ad groups, banners, and statistics.

VerifiedSTDIODesktop onlyData & AnalyticsBusiness & Commerce

Overview

AI-generated overview

Local MCP server for the VK Ads advertising account API, letting an assistant read campaigns, ad groups, banners and statistics and make live changes to them.

What you can do
  • List, create and update campaigns (ad plans), ad groups and banners, including budgets, bids, dates and targeting
  • Activate, stop or delete campaigns, ad groups and banners by id
  • Pull statistics for campaigns, groups or banners over a date range, plus account balance and user info
  • Look up ad regions, current API rate limits and connection status
  • Upload JPEG or PNG images to the ad media library and reference them in new banners
  • Send a raw request to any VK Ads API endpoint, with writes gated by a confirmation flag
When to use it
Useful when you manage a VK Ads account and want an assistant to compare campaigns, groups and banners by spend and clicks, explain why ads are not delivering, or prepare and apply budget, bid and status changes in one conversation.
Requirements
Node.js 20 or newer; runs locally via npx with no install step. No token is needed up front: the account is connected in chat by supplying a client_id and client_secret from the VK Ads cabinet, which are stored in a credentials file. Optional environment variables: VK_ADS_TOKEN, VK_ADS_API_BASE, VK_ADS_LANG, VK_ADS_TIMEOUT_MS, VK_ADS_MAX_RETRIES. Network access to the VK Ads API.
Before you install
There is no sandbox: every call hits the live account with real budget, and typed create, update and status tools apply immediately without a confirmation parameter. client_id and client_secret grant full account access including spending and are saved to disk; VK_ADS_TOKEN is a full-access bearer token that the server neither refreshes nor deletes. Anonymous telemetry is on by default and can include error text fragments; disable it with ASKADS_TELEMETRY=0. After a network error or 5xx, check…

Installation

In SourceWeft

  1. Open VK Ads MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

VK Реклама MCP

[npm] [CI] [Glama] [License: MIT]

VK Реклама MCP подключает AI-приложение к рекламному кабинету VK Ads. Можно спросить, какие кампании тратят бюджет без результата, сравнить группы и объявления, подготовить новую кампанию или изменить ставку. В отличие от ручного перехода по разделам кабинета, ассистент сопоставляет кампании, статистику, баланс и статусы в одном диалоге.

  • 22 инструмента. Кампании, группы, объявления, статистика, баланс, лимиты API, регионы, подключение кабинета и универсальный запрос к API.
  • Подключение из диалога. Скажите «подключи ВК Рекламу» — сервер объяснит, где взять client_id и client_secret, получит токен и дальше продлевает его сам.
  • Живая реклама. Ставки, бюджеты и расход отображаются в валюте рекламного кабинета — без пересчёта микроединиц.
  • Полная иерархия. Кампания (ad_plan) → группа (ad_group) → объявление (banner).
  • Сначала анализ. Списки, отчёты, баланс и статусы доступны только на чтение.
  • Изменения — в боевом кабинете. Создание, обновление и действия со статусами применяются сразу; у VK Ads нет песочницы.

Начните с безопасного запроса:

Покажи кампании моего аккаунта VK Рекламы и расход за прошлую неделю по группам объявлений.

Подключить сервер · Посмотреть сценарии · Открыть техническую документацию


Увидеть работу за минуту

[Демонстрация: ассистент сопоставляет кампании, статистику и баланс VK Рекламы]

Содержание

Быстрый старт

Нужен Node.js 20 или новее. Сервер запускается через npx, поэтому отдельно устанавливать пакет не требуется; токен при установке не нужен.

  1. Добавьте сервер в AI-приложение — инструкции для пяти приложений ниже.
  2. Скажите: «Подключи ВК Рекламу» — сервер проведёт подключение прямо в диалоге.
  3. Спросите: «Покажи кампании моего аккаунта VK Рекламы и расход за прошлую неделю по группам объявлений».
Codex

Через интерфейс приложения:

  1. Откройте Settings → Plugins → MCP servers.
  2. Нажмите Add server.
  3. Добавьте команду запуска npx -y mcp-vk-ads@latest. Переменные окружения не нужны: кабинет подключается в диалоге.

Через командную строку:

bash
codex mcp add vk-ads -- npx -y mcp-vk-ads@latest

Проверьте подключение:

bash
codex mcp list

Официальная инструкция Codex

Claude Code
bash
claude mcp add \  --transport stdio \  --scope user \  vk-ads \  -- npx -y mcp-vk-ads@latest

Проверьте сервер:

bash
claude mcp list

Документация Claude Code

Claude Desktop

Откройте Settings → Developer → Edit Config и добавьте сервер в claude_desktop_config.json:

json
{  "mcpServers": {    "vk-ads": {      "command": "npx",      "args": ["-y", "mcp-vk-ads@latest"]    }  }}

Если Edit Config недоступна, отредактируйте ~/Library/Application Support/Claude/claude_desktop_config.json на macOS или %APPDATA%\Claude\claude_desktop_config.json на Windows.

Cursor

Для всех проектов создайте ~/.cursor/mcp.json; только для текущего проекта — .cursor/mcp.json:

json
{  "mcpServers": {    "vk-ads": {      "command": "npx",      "args": ["-y", "mcp-vk-ads@latest"]    }  }}

Документация Cursor

VS Code

Откройте палитру команд и выполните MCP: Open User Configuration. Добавьте в mcp.json:

json
{  "servers": {    "vk-ads": {      "type": "stdio",      "command": "npx",      "args": ["-y", "mcp-vk-ads@latest"]    }  }}

Проверьте запуск командой MCP: List Servers.

Документация VS Code

Что можно поручить

Разобраться с расходом и результатом

  • «Покажи расход, показы, клики и CTR по кампаниям за последние 7 дней».
  • «Какие объявления тратят больше всего и не приносят результата?»
  • «Сравни группы объявлений внутри этой кампании по расходу и кликам».

Понять, почему реклама не показывается

  • «Покажи статус, доставку и модерацию всех объявлений этой группы».
  • «Какие кампании сейчас остановлены?»
  • «Найди объявления, которые не прошли модерацию».

Подготовить изменения в рекламе

  • «Создай текстовую кампанию с дневным бюджетом 5 000 рублей».
  • «Измени дневной бюджет этой группы на 1 500 рублей».
  • «Останови объявление 12345».

Такие команды меняют боевой кабинет. Перед вызовом убедитесь, что ассистент правильно определил кампанию, группу, объявление и сумму.

Найти данные для настройки

  • «Покажи баланс и валюту моего кабинета».
  • «Сколько запросов к API осталось?»
  • «Найди ID региона Москва для таргетинга».

Как устроены объекты VK Рекламы

ОбъектРоль
Кампания (ad_plan)Верхний уровень: название, бюджет, ставка и период работы.
Группа (ad_group)Настройки аудитории и размещения, собственные бюджет и ставка.
Объявление (banner)Тексты, ссылки и креатив внутри группы.
СтатистикаОтчёт по кампаниям, группам или объявлениям за период.

У объекта есть три разных состояния. status можно менять: active, blocked или deleted. delivery и moderation_status только объясняют, почему объект показывается или нет; напрямую их изменить нельзя.

Что может изменить данные

ДействиеЧто происходит
Списки, статистика, баланс, лимиты и регионыТолько чтение.
Создание и обновление кампаний, групп и объявленийСразу создаёт или меняет объект в боевом рекламном кабинете.
Действие со статусомАктивирует, останавливает или удаляет объект в живом кабинете.
raw_requestGET читает данные; POST и DELETE меняют их и требуют confirmWrite=true.

У типизированных инструментов создания, обновления и смены статуса нет внутреннего параметра confirmWrite. Как AI-приложение запрашивает подтверждение, зависит от его настроек. После сетевой ошибки или 5xx не повторяйте создание вслепую: операция могла успеть примениться, сначала проверьте список объектов.

Подключение кабинета

Скажите ассистенту:

Подключи ВК Рекламу

Он покажет, что сделать: в ads.vk.com открыть Настройки → Доступ к API, создать приложение и прислать в чат client_id и client_secret. Дальше сервер сам получит токен и проверит, в какой кабинет попал. Перезапускать AI-приложение и править его конфигурацию не нужно. Если раздел «Доступ к API» недоступен, запросите доступ у поддержки VK Рекламы.

Дальше подключение живёт само: токен VK действует около суток и продлевается автоматически по refresh_token. Проверить состояние — «покажи статус подключения», отключить — «отключи ВК Рекламу».

client_id и client_secret дают полный доступ к рекламному кабинету, включая трату бюджета. Сервер хранит их в ~/.config/mcp-vk-ads/credentials.json с правами только для владельца (0600) — client_secret нужен потому, что VK требует его при каждом продлении токена. Ни один инструмент их не возвращает.

Браузерного «войти и подтвердить» у VK Рекламы для сторонних серверов нет: сценарий authorization_code VK выдаёт только партнёрам с согласованным redirect_uri, поэтому подключение идёт через приложение самого пользователя. Кабинеты клиентов агентства требуют гранта agency_client_credentials — для них нужен готовый токен в VK_ADS_TOKEN (см. документацию VK Ads API).

Настройка

Настраивать нечего: всё нужное сервер спрашивает в диалоге. Переменные окружения пригодятся только для CI и автоматических установок, где диалога нет. Все они необязательные — сервер работает без единой из них.

ПеременнаяНазначение
VK_ADS_TOKENГотовый OAuth2 access-токен VK Ads. Имеет приоритет над входом из чата; такой токен сервер не продлевает и не удаляет.
VK_ADS_LANGЯзык ответов API; по умолчанию ru.
VK_ADS_TIMEOUT_MSТаймаут одного запроса; по умолчанию 60 000 мс.
VK_ADS_MAX_RETRIESЧисло повторов при временных ошибках; по умолчанию 3.
VK_ADS_API_BASEБазовый адрес API; по умолчанию https://ads.vk.com/api.
Как выпустить токен для VK_ADS_TOKEN вручную
bash
curl -X POST https://ads.vk.com/api/v2/oauth2/token.json \  -d grant_type=client_credentials \  -d client_id=ВАШ_CLIENT_ID \  -d client_secret=ВАШ_CLIENT_SECRET

Из ответа возьмите access_token. Он живёт около суток и сам не продлевается: при invalid_token выпустите новый. У одного пользователя не больше 5 активных токенов на приложение; старые отзываются запросом POST /api/v2/oauth2/token/delete.json — он удаляет все токены этого пользователя для данного client_id.

Данные, лимиты и работа в фоне

  • Страницы и большие кабинеты. Одна страница списка содержит до 250 объектов. При autoPaginate сервер возвращает не более 1 000 объектов и помечает неполный результат полем _truncated.
  • Лимиты API. Инструмент get_throttling показывает текущий остаток лимитов. Проверяйте его перед массовыми операциями.
  • Повторы запросов. Таймаут одного запроса — 60 секунд. Сервер делает до трёх повторов: для любого метода при 429, а для чтения ещё при сетевой ошибке, тайм-ауте и 5xx. Задержка учитывает Retry-After и не превышает 30 секунд.
  • Нет фонового наблюдения. Сервер работает, когда его вызывает AI-приложение. Если приложение поддерживает задания по расписанию, в нём можно настроить периодический запрос статистики или статусов.
  • Анонимная телеметрия. По умолчанию сервер отправляет случайный идентификатор установки, имя события или инструмента, версии сервера, Node.js, ОС и AI-клиента. При вызове инструмента сервер также отправляет его исход, а при ошибке - фрагмент её текста: код и сообщение, в которых e-mail, адреса, токены, числа от 4 цифр и текст в кавычках заменены на «#». Если в тексте ошибки есть значение из запроса, оно тоже может попасть во фрагмент. В неё не попадают токен, данные кабинета, аргументы инструментов, ваши сообщения и значения переменных окружения. Отключить её для MCP-серверов Ask Ads: ASKADS_TELEMETRY=0.

Техническая документация

Поддержка

Нашли ошибку или не хватает сценария? Создайте issue или напишите в Telegram.

Source: README.md at commit 7b0c8f8

Tools

23

auth_status

Статус подключения к VK Рекламе

Показывает, подключена ли VK Реклама: есть ли токен, откуда он взят (переменная окружения VK_ADS_TOKEN или сохранённый вход), когда истекает, какой client_id и аккаунт за ним стоят и где лежит файл с сохранёнными данными. Ничего не отправляет в сеть, не показывает ни токен, ни client_secret. Вызовите это, если инструменты VK Рекламы отвечают, что подключение не настроено.

Takes no parameters.

start_login

Начать подключение VK Рекламы

Первый шаг подключения VK Рекламы без правки конфигурации и без перезапуска клиента. Ничего не отправляет в сеть — возвращает инструкцию, которую нужно показать пользователю целиком: где в кабинете создать приложение и откуда скопировать client_id и client_secret. Полученную пару передайте в finish_login. Предупредите, что client_secret — это пароль от рекламного кабинета: он сохранится на диске только для владельца и нужен, чтобы продлевать токен.

Takes no parameters.

finish_login

Завершить подключение VK Рекламы

Второй шаг подключения: обменивает client_id и client_secret из start_login на токен доступа (grant client_credentials), сохраняет всё в файл только для владельца (0600) и сразу проверяет живым запросом к VK Рекламе. После успеха остальные инструменты работают немедленно — перезапускать клиент не нужно. Токен живёт около суток и продлевается автоматически, поэтому повторно вызывать это не требуется: каждый вызов создаёт НОВЫЙ токен, а у VK не больше 5 активных токенов на пару client_id + пользователь. Ошибка invalid_client означает, что пара скопирована не полностью или относится к разным приложениям.

ParametersclientIdrequiredclientSecretrequired

logout

Отключить VK Рекламу

Удаляет сохранённые токен и данные приложения VK Рекламы с диска. Токен, заданный переменной окружения VK_ADS_TOKEN, не трогает — его нужно убирать из конфигурации клиента вручную. На стороне VK токен остаётся активным до истечения срока: отозвать его можно запросом POST v2/oauth2/token/delete.json, но он удаляет ВСЕ токены этого пользователя для данного client_id, поэтому здесь не вызывается.

Takes no parameters.

get_user_info

Информация об аккаунте

Возвращает информацию о текущем аккаунте VK Рекламы (user.json), включая additional_info.client_name. Позволяет убедиться, на какой аккаунт рекламодателя указывает токен. Токен гранта client_credentials агентского аккаунта видит объекты самого агентства, а не его клиентов: кабинет клиента открывает только токен гранта agency_client_credentials в VK_ADS_TOKEN.

Parametersfields

get_balance

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

Возвращает текущий баланс аккаунта VK Рекламы: доступные средства и валюту. Вызывает user.json с полем `account`, в котором лежит кошелёк (account.balance, account.currency). Показывает баланс того аккаунта, на который указывает токен (параметров нет). Важно: точное имя поля с балансом в v3/user.json на новой платформе ads.vk.com не подтверждено на живом кабинете (домен закрыт JS); схема следует объектной модели myTarget/VK Ads (v2/v3). Инструмент отдаёт СЫРОЙ ответ VK без изменений, поэтому вызывающая сторона может аккуратно прочитать account.balance независимо от точной формы ответа — проверить на первом живом аккаунте с доступом read_payments.

Takes no parameters.

get_throttling

Лимиты запросов к API

Возвращает текущие лимиты запросов VK Рекламы и их остаток (throttling.json) — чтобы не упереться в лимит.

Takes no parameters.

get_regions

Список регионов

Возвращает гео-регионы VK Рекламы (id, name, type), при необходимости отфильтрованные по подстроке названия. Id регионов нужны для гео-таргетинга группы объявлений.

Parameterslimitquery

list_ad_plans

Список кампаний (ad_plans)

Возвращает список ad_plan (верхнеуровневый объект кампании в VK Рекламе) с необязательной фильтрацией по id и статусу. Денежные поля (budget_limit, budget_limit_day, max_price) — в валюте аккаунта.

ParametersidslimitfieldsoffsetstatusesautoPaginate

create_ad_plan

Создать кампанию (ad_plan)

Создаёт кампанию (ad_plan). Денежные поля — в валюте аккаунта. Сложные и редкие поля передаются через `extra` (подмешиваются в тело запроса как есть). Пустую кампанию VK не создаёт: в `adGroups` нужен массив новых групп объявлений, у каждой — name, package_id, targetings, а для autobiddingMode=max_goals ещё priced_goal {source_id: id счётчика, name: цель}. Следующие группы добавляет create_ad_group. Кампании на сайт нужна привязка `extra.ad_object_type`="url" + `extra.ad_object_id` (id URL-объекта; без неё любой package_id отвергается как invalid_package) — проще всего взять ad_object_id, package_id и priced_goal у существующей кампании и её групп (list_ad_plans / list_ad_groups с нужными fields). budgetLimit и budgetLimitDay одновременно передавать нельзя — только одно из двух. Чтобы ничего не запустилось, передать status="blocked" и в `extra`, и у каждой группы в `adGroups`.

ParametersnamerequiredextradateEndadGroupsmaxPricedateStartobjectivebudgetLimitbudgetLimitDayautobiddingMode

update_ad_plan

Изменить кампанию (ad_plan)

Меняет у кампании название, бюджеты, предельную ставку или даты. Денежные поля — в валюте аккаунта. Для смены статуса — ad_plan_action.

ParametersidrequirednameextradateEndmaxPricebudgetLimitbudgetLimitDay

ad_plan_action

Действие над кампанией

Меняет статус кампаний по id: activate (status=active), stop (status=blocked) или delete (status=deleted). delete удаляет только саму кампанию: её группы и объявления остаются в прежнем статусе — их удаляют отдельно через ad_group_action и banner_action.

Parametersidsrequiredactionrequired

list_ad_groups

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

Возвращает список групп объявлений с необязательной фильтрацией по id, родительской кампании и статусу. Денежные поля — в валюте аккаунта; в `targetings` лежит структура таргетинга по гео, демографии и интересам.

ParametersidslimitfieldsoffsetstatusesadPlanIdsautoPaginate

create_ad_group

Создать группу объявлений

Создаёт группу объявлений внутри кампании. Таргетинг задаётся в `targetings` (например, {"geo":{"regions":[188]},"age":{"age_list":[25,26]}}). Денежные поля — в валюте аккаунта. Остальные поля — через `extra`.

ParametersnamerequiredextrapricedateEndadPlanIdrequiredmaxPricedateStartobjectivetargetingsbudgetLimitbudgetLimitDayautobiddingMode

update_ad_group

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

Меняет у группы объявлений название, бюджеты, предельную ставку, даты или таргетинг. Денежные поля — в валюте аккаунта. Для смены статуса — ad_group_action.

ParametersidrequirednameextradateEndmaxPricetargetingsbudgetLimitbudgetLimitDay

ad_group_action

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

Меняет статус групп объявлений по id: activate (status=active), stop (status=blocked) или delete (status=deleted).

Parametersidsrequiredactionrequired

list_banners

Список объявлений (banners)

Возвращает список banner (объект объявления/креатива в VK Рекламе) с необязательной фильтрацией по id, родительской группе объявлений и статусу. moderation_status (pending/allowed/banned) и delivery объясняют, почему объявление показывается или не показывается.

ParametersidslimitfieldsoffsetstatusesadGroupIdsautoPaginate

create_banner

Создать объявление (banner)

Создаёт объявление внутри группы объявлений (POST v2/ad_groups/{adGroupId}/banners.json; верхний v2/banners.json — только список). Креатив ссылается на загруженные медиа через `content`, тексты объявления — в `textblocks`, ссылки — в `urls`. Эти структуры отправляются как есть; точная форма для каждого формата объявления — в документации VK Рекламы.

ParametersnameurlsextracontentadGroupIdrequiredtextblocks

update_banner

Изменить объявление (banner)

Меняет у объявления название, текстовые блоки или ссылки. Для смены статуса — banner_action. Структуры отправляются как есть.

Parametersidrequirednameurlsextratextblocks

banner_action

Действие над объявлением

Меняет статус объявлений по id: activate (status=active), stop (status=blocked) или delete (status=deleted).

Parametersidsrequiredactionrequired

upload_image

Загрузить изображение

Загружает изображение JPEG или PNG в медиатеку VK Рекламы (multipart POST v2/content/static.json) и возвращает его id и variants. Этот id передаётся в create_banner как content.<слот>={"id": <id>}; какие слоты нужны, зависит от формата (package) группы. Размер картинки должен подходить слоту: например, image_600x600 принимает не шире 600 px, иначе create_banner получит bad_width. Байты передаются base64 без префикса data:, вместе с шириной и высотой картинки в пикселях. При сетевой ошибке или 5xx загрузка могла пройти — не повторять вслепую.

ParameterswidthrequiredheightrequiredimageBase64required

get_statistics

Статистика

Возвращает статистику по кампаниям (ad_plans), группам объявлений (ad_groups) или объявлениям (banners). По умолчанию группировка `summary` — одна сводная строка (`items[].total`) на объект: с dateFrom/dateTo — за этот период, без дат — за всё время. `day` нужна ТОЛЬКО для динамики и вопросов про тренд: добавляет к каждому объекту `rows` по дням, даты обязательны. Недель и месяцев API не отдаёт — их собирают из `day`. Ранжирование на стороне сервера (sortBy, например base.spent, и order) и постраничная выдача (limit/offset) работают только в `summary` с датами — в остальных режимах VK их молча игнорирует, поэтому инструмент вернёт ошибку. Там VK и так отдаёт все объекты одним ответом, так что autoPaginate безвреден в любом режиме. `total` в ответе — сумма по объектам ЭТОЙ страницы (при фильтре по ids — по этим объектам), а не по всему кабинету. Метрики лежат в `base` (shows, clicks, spent, ...); spent — в валюте аккаунта.

ParametersidslimitorderdateToentityoffsetperiodsortBymetricsdateFromautoPaginate

raw_request

Произвольный запрос к API VK Рекламы

Универсальный запрос напрямую к любому эндпоинту API VK Рекламы (например, path "v2/ad_plans.json", method GET). Нужен для эндпоинтов, у которых нет отдельного инструмента. `query` уходит в строку запроса, `body` отправляется как JSON для POST. GET выполняется свободно; POST и DELETE — запись, для них нужен confirmWrite=true.

ParametersbodypathrequiredquerymethodconfirmWrite

Version history

8
  1. v1.8.3LatestNov 1, 2026
  2. v1.8.2Oct 31, 2026
  3. v1.8.1Oct 31, 2026
  4. v1.8.0Oct 30, 2026
  5. v1.7.0Oct 26, 2026
  6. v1.6.1Oct 22, 2026
  7. v1.5.0Sep 20, 2026
  8. v1.4.1Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts