ad_group_action
Changes the lifecycle status of ad groups by id: activate (status=active), stop (status=blocked) or delete (status=deleted).
Read and run a VK Ads account — campaigns, ad groups, banners, targeting and performance statistics.
LABSCO SUMMARY
Bids, budgets and spend come back in the account's currency rather than raw micro-units, which is what makes an assistant's arithmetic on them trustworthy. Reads are the safe half; creates and status actions apply immediately, because VK Ads offers no sandbox to rehearse in.
An MCP server for the VK Ads API. It maps the account hierarchy — ad plan, ad group, banner — onto tools, so an assistant can compare spend across groups, change a bid, or build a new campaign in one conversation instead of walking the dashboard.
A VK Ads OAuth2 access token in VK_ADS_TOKEN, which carries full account access. Clients run it with npx mcp-vk-ads over stdio and need Node.js 20 or newer. VK_ADS_LANG sets the response language (default ru); VK_ADS_API_BASE, VK_ADS_TIMEOUT_MS and VK_ADS_MAX_RETRIES override the endpoint, per-request timeout and retry count. VK Ads has no sandbox, so creates, updates and status changes land in the live account.
One command plus a key — npx -y mcp-vk-ads@latest, then supply credentials
USE CASES
Pull last week's statistics per ad group, then read the plan budgets and account balance alongside them.
List the banners under a group and read their moderation status and delivery state.
Look up the region ids you need, create the plan and group with targeting, then attach a creative.
Stop the plans or groups by id without opening the dashboard.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
ad_group_actionChanges the lifecycle status of ad groups by id: activate (status=active), stop (status=blocked) or delete (status=deleted).
ad_plan_actionChanges the lifecycle status of ad plans by id: activate (status=active), stop (status=blocked) or delete (status=deleted).
banner_actionChanges the lifecycle status of banners by id: activate (status=active), stop (status=blocked) or delete (status=deleted).
create_ad_groupCreates an ad group inside an ad plan. Targeting goes in targetings (e.g. {"geo":{"regions":[188]},"age":{"age_list":[25,26]}}). Money fields are in account currency. Use extra for any other field.
create_ad_planCreates an ad plan (campaign). Money fields are in account currency. Pass complex or less common fields via extra (merged into the request body verbatim).
create_bannerCreates a banner inside an ad group. Creative content references uploaded media via content, ad copy goes in textblocks and links in urls. These structures are sent verbatim; consult the VK Ads docs for the exact shape per ad format.
get_balanceReturns the current VK Ads account balance: available funds and currency. Calls user.json with the account field, which carries the wallet (account.balance, account.currency). Reports the balance of the account the token points at (no parameters). Note: the exact balance field name in v3/user.json on the new ads.vk.com platform is not confirmed against a live cabinet (the domain is JS-gated); the schema follows the myTarget/VK Ads object model (v2/v3). This tool returns the RAW VK response unchanged, so a caller can read account.balance defensively regardless of the exact shape — verify on the first live account with read_payments.
get_regionsLists VK Ads geo regions (id, name, type), optionally filtered by a name substring. Region ids are needed for ad group geo targeting.
get_statisticsFetches performance statistics from the VK Ads v3 statistics service for ad plans, ad groups or banners. By default the grouping is summary — one aggregated row per object over the whole period; use day/week/month ONLY for daily dynamics or trend questions (each adds a row per object per period). Rank objects server-side with sortBy (e.g. base.spent) + order; the response also carries total — the summary across ALL objects for the period (use it for «сколько всего», no need to sum rows). Metrics live under base (shows, clicks, spent, ...); spent is in account currency.
get_throttlingReturns the current VK Ads request limits and remaining budget (throttling.json), so you can avoid hitting the rate limit.
get_user_infoReturns information about the current VK Ads account (user.json), including additional_info.client_name. Use it to confirm which advertiser account the token points at.
list_ad_groupsLists ad groups with optional filtering by id, parent ad plan and status. Money fields are in the account currency; targetings holds the geo/demographic/interest targeting structure.
list_ad_plansLists ad plans (the top-level VK Ads campaign object) with optional filtering by id and status. Money fields (budget_limit, budget_limit_day, max_price) are in the account currency.
list_bannersLists banners (the VK Ads creative/ad object) with optional filtering by id, parent ad group and status. moderation_status (pending/allowed/banned) and delivery show why an ad is or isn't showing.
raw_requestEscape hatch to call any VK Ads API endpoint directly (e.g. path "v2/ad_plans.json", method GET). Use this for endpoints that have no dedicated tool. query becomes the query string; body is sent as JSON for POST. GET runs freely; POST and DELETE are writes and require confirmWrite=true.
update_ad_groupUpdates an ad group's name, budgets, bid cap, dates or targeting. Money fields are in account currency. Use ad_group_action to change status.
update_ad_planUpdates an ad plan's name, budgets, bid cap or dates. Money fields are in account currency. Use ad_plan_action to change status.
update_bannerUpdates a banner's name, text blocks or links. Use banner_action to change status. Structures are sent verbatim.
BEFORE YOU INSTALL
18 tools when we connected. raw_request calls any VK Ads endpoint by path and method, so the whole API is reachable. moderation_status is a read-only banner field, not a tool.
CONTEXT COST
Rated by the size of the 18 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx -y mcp-vk-ads@latestcodex mcp add vk-ads \
--env VK_ADS_TOKEN=<YOUR_VK_ADS_TOKEN> \
-- npx -y mcp-vk-ads@latestclaude mcp add \
--env VK_ADS_TOKEN=<YOUR_VK_ADS_TOKEN> \
--transport stdio \
--scope user \
vk-ads \
-- npx -y mcp-vk-ads@latest{
"mcpServers": {
"vk-ads": {
"command": "npx",
"args": [
"-y",
"mcp-vk-ads@latest"
],
"env": {
"VK_ADS_TOKEN": "<YOUR_VK_ADS_TOKEN>"
}
}
}
}{
"servers": {
"vk-ads": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-vk-ads@latest"
],
"env": {
"VK_ADS_TOKEN": "${input:vk_ads_token}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "vk_ads_token",
"description": "VK Ads access token",
"password": true
}
]
}