VK Ads Campaign Builder
Use for VK Ads campaigns, ad groups, banners, lead forms, statistics, audiences, contextual phrases, budgets, statuses, and creative checks.
v3 Scope First
- Search with
search_tools({ provider: "vk", query }).
- Read schemas with
get_tool_schema.
- If account/client is unclear, call
get_provider_context({ provider: "vk", query? }).
- If campaign is named, call
resolve_campaign_scope({ provider: "vk", query, workspace_project_id? }).
- Use only returned
connection_id, client_id, workspace_project_id, and scope_arguments.
- Read via
call_tool; write via call_write_tool.
VK Account Rules
connection_id selects VK OAuth connection.
client_id selects agency/manager/client account.
- Manual VK user-filter is allowed only when it appears in provider context; do not pass arbitrary VK user ids.
- In manual user-filter mode, creation/upload/single update may be unavailable; prefer allowed mass actions and reread state.
- For
max_goals bidding, use max_price when updating limits; reread the group after write.
Write Safety
- Read current campaign/group/banner first.
- Show plan, budget impact, and fields to change.
- Wait for explicit confirmation.
- Use
call_write_tool.
- Reread state and report before/after.
- For agency/team Пространства include exact
workspace_project_id.
- For a new campaign, call
vk_prepare_campaign, then pass exactly one bootstrap ad group to vk_create_campaign. Do not include nested banners.
- Always read
checked_packages.goal_mode from preflight before using priced_goal: required needs a valid named goal, forbidden rejects it, and unsupported stops before POST.
- For
goal_mode=required, get the goal from vk_get_goals / vk_get_counter_goals: a counter goal uses priced_goal.name=condition:substr and the counter ID as source_id. For VK Mini Apps with priced_event_type=43, use vk_get_inapp_events, name=event.name, and source_id=tracker.id.
- Do not require a goal merely because the objective is
site_conversions, and do not treat options.settings.priced_goal, the package name, or package 3509 (priced_event_type=0) as proof of goal compatibility.
- Do not remove an incompatible goal without user agreement. Offer the explicit alternatives: keep CPC/CPM without a named goal, or choose a compatible goal/oCPM package.
- Treat
package_priced_goal_forbidden, package_priced_goal_required, and package_goal_policy_unsupported as no-side-effect preflight failures. Treat provider_goal_package_mismatch / inconsistent_priced_goal as a ban on retrying the same payload.
- Treat the created campaign and bootstrap group as
blocked. Create remaining groups and banners with separate write tools, reread every object, and activate only as a final separate action.
- If the result contains
outcome=unknown or outcome=ambiguous, call top-level get_write_operation_status({ operation_id }). Keep the same campaign name and never send another create.
- If status remains unresolved, offer a safe support draft containing the
operation_id, never the raw payload or credentials.
Creative And Text
- Validate package/banner pattern before creating banners.
- Avoid unsupported symbols in text; keep copy within VK field limits.
- Upload images/videos only after source asset is final.
- Do not replace complete banner sections unless the schema requires it and current content has been reread.
Workspace
Save decisions, campaign snapshots, analytics summaries, and follow-up scheduled tasks only after resolving workspace_project_id.
Google Export
When the user asks to export a VK Ads report to Google Sheets or Google Docs, keep this skill for account/campaign scope and report reads, then hand the verified Google write and reread to $export-ad-reports.
1---2name: vk-ads-campaign-builder-33description: Создавать, аудитить и оптимизировать кампании VK Ads через LidFly MCP v3: connection_id/client_id, группы, объявления, лид-формы, аудитории, статистика и бюджеты. Использовать для работы с VK Рекламой с безопасным scope и write workflow.4---56# VK Ads Campaign Builder78Use for VK Ads campaigns, ad groups, banners, lead forms, statistics, audiences, contextual phrases, budgets, statuses, and creative checks.910## v3 Scope First11121. Search with `search_tools({ provider: "vk", query })`.132. Read schemas with `get_tool_schema`.143. If account/client is unclear, call `get_provider_context({ provider: "vk", query? })`.154. If campaign is named, call `resolve_campaign_scope({ provider: "vk", query, workspace_project_id? })`.165. Use only returned `connection_id`, `client_id`, `workspace_project_id`, and `scope_arguments`.176. Read via `call_tool`; write via `call_write_tool`.1819## VK Account Rules2021- `connection_id` selects VK OAuth connection.22- `client_id` selects agency/manager/client account.23- Manual VK user-filter is allowed only when it appears in provider context; do not pass arbitrary VK user ids.24- In manual user-filter mode, creation/upload/single update may be unavailable; prefer allowed mass actions and reread state.25- For `max_goals` bidding, use `max_price` when updating limits; reread the group after write.2627## Write Safety2829- Read current campaign/group/banner first.30- Show plan, budget impact, and fields to change.31- Wait for explicit confirmation.32- Use `call_write_tool`.33- Reread state and report before/after.34- For agency/team Пространства include exact `workspace_project_id`.35- For a new campaign, call `vk_prepare_campaign`, then pass exactly one bootstrap ad group to `vk_create_campaign`. Do not include nested `banners`.36- Always read `checked_packages.goal_mode` from preflight before using `priced_goal`: `required` needs a valid named goal, `forbidden` rejects it, and `unsupported` stops before POST.37- For `goal_mode=required`, get the goal from `vk_get_goals` / `vk_get_counter_goals`: a counter goal uses `priced_goal.name=condition:substr` and the counter ID as `source_id`. For VK Mini Apps with `priced_event_type=43`, use `vk_get_inapp_events`, `name=event.name`, and `source_id=tracker.id`.38- Do not require a goal merely because the objective is `site_conversions`, and do not treat `options.settings.priced_goal`, the package name, or package 3509 (`priced_event_type=0`) as proof of goal compatibility.39- Do not remove an incompatible goal without user agreement. Offer the explicit alternatives: keep CPC/CPM without a named goal, or choose a compatible goal/oCPM package.40- Treat `package_priced_goal_forbidden`, `package_priced_goal_required`, and `package_goal_policy_unsupported` as no-side-effect preflight failures. Treat `provider_goal_package_mismatch` / `inconsistent_priced_goal` as a ban on retrying the same payload.41- Treat the created campaign and bootstrap group as `blocked`. Create remaining groups and banners with separate write tools, reread every object, and activate only as a final separate action.42- If the result contains `outcome=unknown` or `outcome=ambiguous`, call top-level `get_write_operation_status({ operation_id })`. Keep the same campaign name and never send another create.43- If status remains unresolved, offer a safe support draft containing the `operation_id`, never the raw payload or credentials.4445## Creative And Text4647- Validate package/banner pattern before creating banners.48- Avoid unsupported symbols in text; keep copy within VK field limits.49- Upload images/videos only after source asset is final.50- Do not replace complete banner sections unless the schema requires it and current content has been reread.5152## Workspace5354Save decisions, campaign snapshots, analytics summaries, and follow-up scheduled tasks only after resolving `workspace_project_id`.5556## Google Export5758When the user asks to export a VK Ads report to Google Sheets or Google Docs, keep this skill for account/campaign scope and report reads, then hand the verified Google write and reread to `$export-ad-reports`.