VK Ads MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VK_ADS_LANG | No | Accept-Language header value. | ru |
| VK_ADS_TOKEN | Yes | OAuth2 access token for VK Ads API (Bearer). Required. | |
| VK_ADS_API_BASE | No | Root URL of the API (without version). | https://ads.vk.com/api |
| VK_ADS_TIMEOUT_MS | No | Request timeout in milliseconds. | 60000 |
| VK_ADS_MAX_RETRIES | No | Maximum number of retries on temporary errors (429, 5xx). | 3 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| auth_statusA | Показывает, подключена ли VK Реклама: есть ли токен, откуда он взят (переменная окружения VK_ADS_TOKEN или сохранённый вход), когда истекает, какой client_id и аккаунт за ним стоят и где лежит файл с сохранёнными данными. Ничего не отправляет в сеть, не показывает ни токен, ни client_secret. Вызовите это, если инструменты VK Рекламы отвечают, что подключение не настроено. |
| start_loginA | Первый шаг подключения VK Рекламы без правки конфигурации и без перезапуска клиента. Ничего не отправляет в сеть — возвращает инструкцию, которую нужно показать пользователю целиком: где в кабинете создать приложение и откуда скопировать client_id и client_secret. Полученную пару передайте в finish_login. Предупредите, что client_secret — это пароль от рекламного кабинета: он сохранится на диске только для владельца и нужен, чтобы продлевать токен. |
| finish_loginA | Второй шаг подключения: обменивает client_id и client_secret из start_login на токен доступа (grant client_credentials), сохраняет всё в файл только для владельца (0600) и сразу проверяет живым запросом к VK Рекламе. После успеха остальные инструменты работают немедленно — перезапускать клиент не нужно. Токен живёт около суток и продлевается автоматически, поэтому повторно вызывать это не требуется: каждый вызов создаёт НОВЫЙ токен, а у VK не больше 5 активных токенов на пару client_id + пользователь. Ошибка invalid_client означает, что пара скопирована не полностью или относится к разным приложениям. |
| logoutA | Удаляет сохранённые токен и данные приложения VK Рекламы с диска. Токен, заданный переменной окружения VK_ADS_TOKEN, не трогает — его нужно убирать из конфигурации клиента вручную. На стороне VK токен остаётся активным до истечения срока: отозвать его можно запросом POST v2/oauth2/token/delete.json, но он удаляет ВСЕ токены этого пользователя для данного client_id, поэтому здесь не вызывается. |
| get_user_infoA | Возвращает информацию о текущем аккаунте VK Рекламы (user.json), включая additional_info.client_name. Позволяет убедиться, на какой аккаунт рекламодателя указывает токен. |
| get_balanceA | Возвращает текущий баланс аккаунта VK Рекламы: доступные средства и валюту. Вызывает user.json с полем |
| get_throttlingA | Возвращает текущие лимиты запросов VK Рекламы и их остаток (throttling.json) — чтобы не упереться в лимит. |
| get_regionsA | Возвращает гео-регионы VK Рекламы (id, name, type), при необходимости отфильтрованные по подстроке названия. Id регионов нужны для гео-таргетинга группы объявлений. |
| list_ad_plansA | Возвращает список ad_plan (верхнеуровневый объект кампании в VK Рекламе) с необязательной фильтрацией по id и статусу. Денежные поля (budget_limit, budget_limit_day, max_price) — в валюте аккаунта. |
| create_ad_planA | Создаёт кампанию (ad_plan). Денежные поля — в валюте аккаунта. Сложные и редкие поля передаются через |
| update_ad_planA | Меняет у кампании название, бюджеты, предельную ставку или даты. Денежные поля — в валюте аккаунта. Для смены статуса — ad_plan_action. |
| ad_plan_actionA | Меняет статус кампаний по id: activate (status=active), stop (status=blocked) или delete (status=deleted). delete удаляет только саму кампанию: её группы и объявления остаются в прежнем статусе — их удаляют отдельно через ad_group_action и banner_action. |
| list_ad_groupsA | Возвращает список групп объявлений с необязательной фильтрацией по id, родительской кампании и статусу. Денежные поля — в валюте аккаунта; в |
| create_ad_groupA | Создаёт группу объявлений внутри кампании. Таргетинг задаётся в |
| update_ad_groupA | Меняет у группы объявлений название, бюджеты, предельную ставку, даты или таргетинг. Денежные поля — в валюте аккаунта. Для смены статуса — ad_group_action. |
| ad_group_actionA | Меняет статус групп объявлений по id: activate (status=active), stop (status=blocked) или delete (status=deleted). |
| list_bannersB | Возвращает список banner (объект объявления/креатива в VK Рекламе) с необязательной фильтрацией по id, родительской группе объявлений и статусу. moderation_status (pending/allowed/banned) и delivery объясняют, почему объявление показывается или не показывается. |
| create_bannerA | Создаёт объявление внутри группы объявлений (POST v2/ad_groups/{adGroupId}/banners.json; верхний v2/banners.json — только список). Креатив ссылается на загруженные медиа через |
| update_bannerA | Меняет у объявления название, текстовые блоки или ссылки. Для смены статуса — banner_action. Структуры отправляются как есть. |
| banner_actionA | Меняет статус объявлений по id: activate (status=active), stop (status=blocked) или delete (status=deleted). |
| upload_imageA | Загружает изображение JPEG или PNG в медиатеку VK Рекламы (multipart POST v2/content/static.json) и возвращает его id и variants. Этот id передаётся в create_banner как content.<слот>={"id": }; какие слоты нужны, зависит от формата (package) группы. Размер картинки должен подходить слоту: например, image_600x600 принимает не шире 600 px, иначе create_banner получит bad_width. Байты передаются base64 без префикса data:, вместе с шириной и высотой картинки в пикселях. При сетевой ошибке или 5xx загрузка могла пройти — не повторять вслепую. |
| get_statisticsA | Возвращает статистику по кампаниям (ad_plans), группам объявлений (ad_groups) или объявлениям (banners). По умолчанию группировка |
| raw_requestA | Универсальный запрос напрямую к любому эндпоинту API VK Рекламы (например, path "v2/ad_plans.json", method GET). Нужен для эндпоинтов, у которых нет отдельного инструмента. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 23 tools
Each resource (ad_plan, ad_group, banner) has a clear list/create/update/action split, and descriptions explicitly cross-reference the *_action tools for status changes so update vs action boundaries are documented. The only real overlap is raw_request, which intentionally duplicates every endpoint as an escape hatch, plus mild potential confusion between update_* and *_action for the same object.
Everything is snake_case, but verb conventions vary: three different patterns are used for the same resource (list_ad_plans, create_ad_plan, update_ad_plan, ad_plan_action). Bare verbs (logout, raw_request) and noun-style names (auth_status, *_action) mixed with verb_noun reduce predictability, though it stays readable.
23 tools is on the heavy side, but the surface maps cleanly onto three resource types (each with list/create/update/action), plus media upload, statistics, auth lifecycle, and admin helpers. No obvious filler tools; each earns a place for a real ads platform.
Core lifecycle is covered: list/create/update/status-change for campaigns, groups, and banners, plus stats, image upload, throttling, auth, and balance. Minor gaps exist (no dedicated get-single calls, only regions for targeting enumerations like interests/packages, no audience or keyword management), but raw_request lets agents reach uncovered endpoints.