VK Ads MCP
This MCP server lets an AI assistant connect to a VK Ads account and analyze, create, update, and manage campaigns, ad groups, banners, statistics, budgets, and account settings through natural language.
Read account info, balance/currency, API rate limits, and geo regions.
List and filter campaigns (ad plans), ad groups, and banners, with pagination and full campaign hierarchy details.
Fetch statistics for campaigns, groups, or banners by date range, grouping (summary/day/week/month), sorting, metrics, and totals.
Create, update, activate, stop, or delete campaigns, ad groups, and banners — changes apply directly to the live ads account.
Use a raw VK Ads API endpoint as an escape hatch for unsupported operations (GET freely; POST/DELETE require confirmation).
Connect or disconnect the ad account from the chat, automatically refresh tokens, and configure options like language, timeouts, retries, and telemetry.
VK Реклама MCP
VK Реклама MCP connects an AI app to the VK Ads advertising account. You can ask which campaigns spend budget without results, compare ad groups and ads, prepare a new campaign, or change a bid. Unlike manually navigating the account sections, the assistant matches campaigns, statistics, balance, and statuses in one dialogue.
18 tools. Campaigns, ad groups, ads, statistics, balance, API limits, regions, and a universal API request.
Live advertising. Bids, budgets, and spend are shown in the advertising account's currency — no micro-unit conversion.
Full hierarchy. Campaign (
ad_plan) → ad group (ad_group) → ad (banner).Analysis first. Lists, reports, balance, and statuses are read-only.
Changes go to the live account. Creating, updating, and status actions apply immediately; VK Ads has no sandbox.
Start with a safe request:
Show the campaigns of my VK Рекламы account and spend for the past week by ad groups.
Connect server · View scenarios · Open technical documentation
See it work in a minute
Related MCP server: vk-ads-mcp
Contents
Quick start
You need Node.js 20 or newer and a VK Ads access token. The server runs via npx, so you don't need to install the package separately.
Get a token and add the server to your AI app — instructions for five apps below.
Ask: "Show the campaigns of my VK Рекламы account and spend for the past week by ad groups."
Via the app interface:
Open Settings → Plugins → MCP servers.
Click Add server.
Add the launch command
npx -y mcp-vk-ads@latestand the environment variableVK_ADS_TOKENwith your token.
Via the command line:
codex mcp add vk-ads \
--env VK_ADS_TOKEN=ваш_токен \
-- npx -y mcp-vk-ads@latestCheck the connection:
codex mcp listclaude mcp add \
--env VK_ADS_TOKEN=ваш_токен \
--transport stdio \
--scope user \
vk-ads \
-- npx -y mcp-vk-ads@latestCheck the server:
claude mcp listOpen Settings → Developer → Edit Config and add the server to claude_desktop_config.json:
{
"mcpServers": {
"vk-ads": {
"command": "npx",
"args": ["-y", "mcp-vk-ads@latest"],
"env": {
"VK_ADS_TOKEN": "ваш_токен"
}
}
}
}If Edit Config is unavailable, edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows.
For all projects, create ~/.cursor/mcp.json; for the current project only — .cursor/mcp.json:
{
"mcpServers": {
"vk-ads": {
"command": "npx",
"args": ["-y", "mcp-vk-ads@latest"],
"env": {
"VK_ADS_TOKEN": "ваш_токен"
}
}
}
}Open the command palette and run MCP: Open User Configuration. Add to mcp.json:
{
"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": "Access-токен VK Ads",
"password": true
}
]
}Check the launch with the MCP: List Servers command.
What you can delegate
Understand spend and results
"Show spend, impressions, clicks, and CTR by campaigns for the last 7 days."
"Which ads spend the most and bring no results?"
"Compare ad groups within this campaign by spend and clicks."
Understand why ads aren't showing
"Show the status, delivery, and moderation of all ads in this group."
"Which campaigns are currently paused?"
"Find ads that didn't pass moderation."
Prepare changes to ads
"Create a text campaign with a daily budget of 5,000 rubles."
"Change the daily budget of this group to 1,500 rubles."
"Pause ad 12345."
Such commands change the live account. Before calling, make sure the assistant correctly identified the campaign, group, ad, and amount.
Find data for configuration
"Show the balance and currency of my account."
"How many API requests are left?"
"Find the region ID for Moscow for targeting."
How VK Рекламы objects work
Object | Role |
Campaign ( | Top level: name, budget, bid, and work period. |
Ad group ( | Audience and placement settings, own budget and bid. |
Ad ( | Texts, links, and creative inside the group. |
Statistics | Report on campaigns, groups, or ads for a period. |
An object has three different states. status can be changed: active, blocked, or deleted. delivery and moderation_status only explain why an object is shown or not; they cannot be changed directly.
What can change data
Action | What happens |
Lists, statistics, balance, limits, and regions | Read-only. |
Creating and updating campaigns, groups, and ads | Immediately creates or changes an object in the live advertising account. |
Status action | Activates, pauses, or deletes an object in the live account. |
|
|
Typed tools for creating, updating, and changing status have no internal confirmWrite parameter. How the AI app requests confirmation depends on its settings. After a network error or 5xx, don't blindly repeat creation: the operation may have already applied; first check the list of objects.
How to get a token
The token is issued by the VK Ads account:
In ads.vk.com, open Settings → API Access and create an app. Save
client_idandclient_secret. If the section is unavailable, request API access from VK Ads support.Exchange them for an account access token:
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_SECRETTake
access_tokenfrom the response and save it asVK_ADS_TOKEN.
The token grants access to the advertising account, including the ability to spend budget, and is stored in plain text in the MCP client configuration. Treat it like a password. If the API responds with invalid_token, issue and provide a new token.
For agencies working with client accounts, the authorization_code flow is needed — see the VK Ads API documentation.
Configuration
Variable | Purpose |
| Required OAuth2 access token for VK Ads. |
| API response language; default |
| Timeout for one request; default 60,000 ms. |
| Number of retries on temporary errors; default 3. |
| Base API URL; default |
Data, limits, and background operation
Pages and large accounts. One list page contains up to 250 objects. With
autoPaginate, the server returns no more than 1,000 objects and marks an incomplete result with the_truncatedfield.API limits. The
get_throttlingtool shows the current remaining limits. Check it before mass operations.Request retries. Timeout for one request is 60 seconds. The server makes up to three retries: for any method on
429, and for reads also on network error, timeout, and5xx. The delay respectsRetry-Afterand does not exceed 30 seconds.No background monitoring. The server runs when the AI app calls it. If the app supports scheduled tasks, you can set up periodic requests for statistics or statuses there.
Anonymous telemetry. By default, the server sends a random installation ID, event or tool name, server version, Node.js, OS, and AI client. It does not include the token, account data, tool arguments, your messages, or environment variable values. Disable it for Ask Ads MCP servers:
ASKADS_TELEMETRY=0.
Technical documentation
MCP capabilities catalog — pages on user tasks for each tool.
Support
Found a bug or missing a scenario? Create an issue or write to Telegram.
Available Tools
22 toolsad_group_actionДействие над группой объявленийADestructive
Меняет статус групп объявлений по id: activate (status=active), stop (status=blocked) или delete (status=deleted).
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Id групп объявлений, к которым применить действие. | |
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutating and destructive behavior (readOnlyHint=false, destructiveHint=true). The description adds specific behavioral detail beyond those flags by mapping each action value to the resulting status: activate=active, stop=blocked, delete=deleted. This clarifies what the operation actually does to the resource.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence that front-loads the core behavior ('changes status of ad groups by id') and then lists the action-to-status mappings. Every piece of information is useful, and there is no redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an enum and no output schema, the description plus schema provide enough information to select and invoke it correctly. It omits details about response values or error behavior, but these are not essential for a straightforward status-change action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: 'ids' has a description but 'action' does not. The description compensates by explaining the three action enum values and their status mappings. This adds real meaning beyond the raw enum list, though it adds little about 'ids' beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Меняет статус'), a specific resource ('групп объявлений'), and the exact domain of operations (activate/stop/delete with resulting statuses). It clearly distinguishes this from sibling tools like ad_plan_action or banner_action by naming ad groups and the status-change semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when the caller needs to change the status of ad groups by id, with the exact allowed actions enumerated. It does not explicitly name alternatives or state when-not-to-use cases, so it misses the top tier, but the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ad_plan_actionДействие над кампаниейADestructive
Меняет статус кампаний по id: activate (status=active), stop (status=blocked) или delete (status=deleted).
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Id кампаний, к которым применить действие. | |
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=true, so the description doesn't need to restate safety. It adds value by mapping each action to its exact status outcome, which is beyond the annotations. However, it does not mention irreversibility of delete or any side effects beyond status change, though destructiveHint covers general caution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb and resource, then lists the three possible actions with their corresponding status changes. Zero waste, perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two parameters and no output schema. The description fully explains the actions and their effects. The only missing element is explicit mention of whether delete is permanent, but given destructiveHint=true, this is adequately covered. Overall, an agent can call this tool correctly with the provided information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (ids has a description, action does not). The tool description compensates by explaining the meaning of each action enum value and clarifying that ids refer to campaign IDs. This adds meaningful semantics beyond the schema, effectively covering the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: changing campaign status by id, with specific actions and resulting statuses (activate→active, stop→blocked, delete→deleted). The resource (campaigns) is explicit, and the name ad_plan_action alongside siblings like ad_group_action and banner_action distinguishes it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, but the resource type (campaigns) is clear and distinct from ad groups and banners. Usage context is implied rather than stated, and there are no exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_statusСтатус подключения к VK РекламеARead-onlyIdempotent
Показывает, подключена ли VK Реклама: есть ли токен, откуда он взят (переменная окружения VK_ADS_TOKEN или сохранённый вход), когда истекает, какой client_id и аккаунт за ним стоят и где лежит файл с сохранёнными данными. Ничего не отправляет в сеть, не показывает ни токен, ни client_secret. Вызовите это, если инструменты VK Рекламы отвечают, что подключение не настроено.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive, and the description adds meaningful behavior beyond that: it makes no network requests and does not reveal the token or client_secret. It also discloses the exact diagnostic details returned, which is valuable context for an agent choosing this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action, then gives the concrete data points, then safety/security constraints, and ends with a one-sentence usage condition. Every sentence contributes information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless diagnostic tool, the description covers what the tool reports, its security behavior (no network, no secret exposure), and the exact trigger for invoking it. Even without an output schema, an agent has enough to call it correctly and interpret its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema already covers 100% of that, so there is nothing for the description to add about arguments. Per the zero-parameter baseline, this is a strong fit; the description instead clarifies the output dimensions, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb ('Показывает') and precisely enumerates the resource scope: whether VK Ads is connected, token presence and source, expiry, client_id, account, and saved-data file location. This makes it immediately distinguishable from auth-mutating siblings like start_login, finish_login, logout, and from other diagnostic tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly gives a usage trigger: call this when VK Ads tools report that the connection is not configured. It does not spell out when-not-to-use or name an alternative such as start_login, so it lacks the full when/when-not/exclusion structure, but the intended selection context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
banner_actionДействие над объявлениемADestructive
Меняет статус объявлений по id: activate (status=active), stop (status=blocked) или delete (status=deleted).
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Id объявлений, к которым применить действие. | |
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, indicating a mutation that can be destructive. The description adds specific behavioral context by mapping each action to a resulting status (activate→active, stop→blocked, delete→deleted), clarifying that 'delete' is a status transition rather than a physical deletion. It does not contradict annotations and provides useful detail about the side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the core purpose first ('Меняет статус объявлений по id') and then lists the actions with their effects. No wasted words; it is compact and immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple mutation with two parameters, but there is no output schema and the description does not mention what the response looks like, or any limitations (e.g., maximum number of ids, reversibility of delete). While the core behavior is clear, an agent might need to know the return format or potential errors. Given the simplicity, it is adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% – only 'ids' has a description. The description compensates for the undocumented 'action' parameter by explaining what each enum value does (status mapping). It also clarifies that the operation is performed on multiple ids (array). This adds meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Меняет статус' – changes status), a resource (объявлений – ads/banners), and distinguishes three actions with explicit target statuses (activate→active, stop→blocked, delete→deleted). It clearly differentiates from sibling tools like update_banner (which would handle field edits) and ad_plan_action/ad_group_action (different resources).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by defining the tool as a status-change operation, but it does not explicitly say when to use this tool versus alternatives like update_banner (which might also allow status changes) or when not to use it. No exclusions or comparative guidance is provided, so the agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ad_groupСоздать группу объявленийA
Создаёт группу объявлений внутри кампании. Таргетинг задаётся в targetings (например, {"geo":{"regions":[188]},"age":{"age_list":[25,26]}}). Денежные поля — в валюте аккаунта. Остальные поля — через extra.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Название группы объявлений. | |
| extra | No | Дополнительные поля, подмешиваемые в тело запроса как есть. | |
| price | No | Цена оптимизируемого события в валюте аккаунта. | |
| dateEnd | No | Дата окончания, YYYY-MM-DD. | |
| adPlanId | Yes | Id родительской кампании. | |
| maxPrice | No | Предельная ставка в валюте аккаунта. | |
| dateStart | No | Дата начала, YYYY-MM-DD. | |
| objective | No | Цель группы, например site_conversions, leadads, traffic. | |
| targetings | No | Структура таргетинга, отправляется как есть. | |
| budgetLimit | No | Общий бюджет в валюте аккаунта. | |
| budgetLimitDay | No | Дневной бюджет в валюте аккаунта. | |
| autobiddingMode | No | Стратегия аукциона, например max_goals. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-idempotent operation, so the description does not need to restate that. It adds useful behavioral context: targetings is passed through as-is, monetary fields are in account currency, and extra fields go through `extra`. However, it does not disclose return values, error behavior, or side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, with the purpose front-loaded and no filler. The example and currency/extra clarifications each earn their place and do not repeat schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with 12 parameters and no output schema, the description covers the most important operational nuances: how targeting is structured, how currency is interpreted, and how to pass additional fields. It lacks an explicit statement about return values, but the schema and annotations cover parameter requirements and mutation semantics well enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful cross-cutting semantics beyond the schema: a concrete targetings example, the account-currency rule for money fields, and the role of `extra` as a passthrough for unspecified fields. This helps an agent understand how to combine parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Создаёт группу объявлений внутри кампании' (creates an ad group inside a campaign). This clearly distinguishes it from sibling tools like create_ad_plan (creates a campaign) and update_ad_group (updates an existing group). The scope is explicit and immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool should be used when creating an ad group within a campaign, but it does not explicitly state when not to use it or name alternatives such as update_ad_group or ad_group_action. Usage context is present but left to inference rather than stated directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ad_planСоздать кампанию (ad_plan)A
Создаёт кампанию (ad_plan). Денежные поля — в валюте аккаунта. Сложные и редкие поля передаются через extra (подмешиваются в тело запроса как есть).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Название кампании. | |
| extra | No | Дополнительные поля кампании, подмешиваемые в тело запроса (например, priced_goal, pricelist_id). | |
| dateEnd | No | Дата окончания, YYYY-MM-DD. | |
| maxPrice | No | Предельная ставка в валюте аккаунта. | |
| dateStart | No | Дата начала, YYYY-MM-DD. | |
| objective | No | Цель кампании, например site_conversions, leadads, traffic. | |
| budgetLimit | No | Общий бюджет в валюте аккаунта. | |
| budgetLimitDay | No | Дневной бюджет в валюте аккаунта. | |
| autobiddingMode | No | Стратегия аукциона, например max_goals, fixed, second_price_mean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent operation. The description adds useful behavioral context beyond the schema: money fields use account currency, and `extra` is injected into the request body verbatim. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no redundancy. The core purpose comes first, followed by two high-value usage notes. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, annotations, and the extra-field mechanism, the description is largely complete for correct invocation. It could additionally mention what the tool returns or that existing campaigns should be modified via update_ad_plan, but these are minor gaps given the strength of the structured context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a cross-cutting semantic rule: all monetary parameters are in account currency, and complex/rare fields should be routed through `extra`. This helps the agent choose the right place for uncommon parameters even when they are not explicitly listed in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Создаёт кампанию (ad_plan)' — creates a campaign/ad_plan. This clearly differentiates the tool from sibling tools like update_ad_plan or list_ad_plans.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear practical context: money fields are in account currency, and complex/rare fields should be passed via `extra`, which is mixed into the request body as-is. It does not explicitly name alternatives like update_ad_plan, but the creation intent is unambiguous and the guidance is directly actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_bannerСоздать объявление (banner)A
Создаёт объявление внутри группы объявлений. Креатив ссылается на загруженные медиа через content, тексты объявления — в textblocks, ссылки — в urls. Эти структуры отправляются как есть; точная форма для каждого формата объявления — в документации VK Рекламы.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Название объявления. | |
| urls | No | Объекты ссылок, например {"primary":{"url":"https://..."}}. | |
| extra | No | Дополнительные поля объявления, подмешиваемые в тело запроса как есть. | |
| content | No | Ссылки на содержимое креатива (id загруженных медиа). | |
| adGroupId | Yes | Id родительской группы объявлений. | |
| textblocks | No | Текстовые блоки, например {"title":{"text":"..."},"text":{"text":"..."}}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The key behavioral disclosure is that content, textblocks, and urls 'отправляются как есть' (are sent as-is) with no transformation, and that the exact structure depends on the ad format per VK Ads documentation. This adds meaningful insight beyond the annotations, telling the agent the tool is a thin pass-through and that format-specific correctness lives in external docs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first states the core action, the second maps the key structures to their roles, and the third sets expectations about pass-through and external documentation. Every sentence earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, nested objects, an open-world hint, and no output schema, the description is reasonably complete: it covers the action, the parameter roles, the pass-through behavior, and where to find exact shapes. It does not mention the response format or error behavior, but the explicit pointer to the VK Ads documentation compensates for the open-ended structures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the schema already provides concrete examples for content, urls, and textblocks. The description adds value on top by mapping each structure to its semantic role (creative media, ad texts, links) and by stating all of them are forwarded verbatim, which helps an agent fill them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair ('Создаёт объявление' – creates an ad) and scopes it precisely to 'внутри группы объявлений' (inside an ad group). This clearly distinguishes it from siblings like list_banners, update_banner, and banner_action without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly signals the placement context: a banner is created within an ad group, which aligns with the required adGroupId parameter. However, it does not explicitly name alternatives or state when not to use it (e.g., 'to modify an existing banner, use update_banner'), so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_loginЗавершить подключение VK РекламыAIdempotent
Второй шаг подключения: обменивает client_id и client_secret из start_login на токен доступа (grant client_credentials), сохраняет всё в файл только для владельца (0600) и сразу проверяет живым запросом к VK Рекламе. После успеха остальные инструменты работают немедленно — перезапускать клиент не нужно. Токен живёт около суток и продлевается автоматически, поэтому повторно вызывать это не требуется: каждый вызов создаёт НОВЫЙ токен, а у VK не больше 5 активных токенов на пару client_id + пользователь. Ошибка invalid_client означает, что пара скопирована не полностью или относится к разным приложениям.
| Name | Required | Description | Default |
|---|---|---|---|
| clientId | Yes | client_id приложения из раздела «Настройки → Доступ к API» кабинета VK Рекламы. | |
| clientSecret | Yes | client_secret того же приложения. Не показывайте его в ответе пользователю. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is rich in behavioral detail (file permissions 0600, live validation request, token lifetime, auto-renewal, new token per call, 5-token limit, invalid_client meaning). However, it directly contradicts the annotation idempotentHint=true by stating 'каждый вызов создаёт НОВЫЙ токен' and warning about a maximum of 5 active tokens, meaning repeated calls have distinct external effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and every subsequent sentence carries distinct operational value: file permissions, immediate live check, no restart, token lifecycle, repeat policy, token limit, and a common error. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description covers prerequisite sequence, side effects, security posture, success condition, and a common failure mode. It does not explicitly describe the return value, but the success state ('остальные инструменты работают немедленно') is sufficiently clear for an agent to act.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage of parameters is 100%, so the baseline is 3. The description adds meaningful context by indicating the parameters come from start_login, tying them to a sibling tool, and explaining that invalid_client means the pair is incomplete or from different apps. It also reinforces the sensitivity of clientSecret.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('обменивает' / exchanges) and a clear resource ('client_id и client_secret ... на токен доступа'), and identifies itself as the 'Второй шаг подключения' (second connection step). This clearly distinguishes it from sibling tools like start_login and auth_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says this is the second step after start_login, states that after success other tools work immediately, and advises that repeat calls are unnecessary. It does not explicitly name alternatives like auth_status for checking status, but the sequencing and repeat guidance are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceБаланс аккаунтаARead-onlyIdempotent
Возвращает текущий баланс аккаунта 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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, it discloses that this is a passthrough call to user.json, that the response is returned raw and unmodified, that the exact balance field name is unverified on the live platform, and that read_payments access may be needed. This is exemplary transparency about uncertainty and side-effect-free behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the following caveats are all substantive rather than filler. The description is longer than strictly necessary, but each sentence communicates a distinct, useful fact about invocation or response handling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining the raw response shape, the relevant account.balance field, the permission requirement, and the unresolved schema risk. Nothing needed to call this tool safely or interpret its result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, and the description nonetheless explains that there are no parameters and that the target account is determined by the token. This adds the only meaningful implicit-parameter context needed for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb and resource: it returns the current VK Ads account balance, including available funds and currency. It also names the underlying user.json account field and clarifies that the balance is tied to the token's account, which separates it from sibling tools like get_user_info or raw_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It conveys that this tool is for reading the balance of the token's account and that it takes no parameters, so an agent can infer when to use it. However, it never explicitly says when to choose get_balance over alternatives such as raw_request or get_user_info, nor does it give exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_regionsСписок регионовARead-onlyIdempotent
Возвращает гео-регионы VK Рекламы (id, name, type), при необходимости отфильтрованные по подстроке названия. Id регионов нужны для гео-таргетинга группы объявлений.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Сколько регионов вернуть после фильтрации. По умолчанию 50. | |
| query | No | Подстрока для фильтра по названию региона, без учёта регистра (например, «Москва»). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable context beyond that: it specifies the return fields (id, name, type) and the filtering behavior (by case-insensitive substring). This gives the agent clear behavioral expectations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero fluff. The core purpose is front-loaded, and the usage purpose is stated concisely. Every word contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with only two optional parameters and no output schema, the description is complete. It covers the return structure, filtering capability, and the practical use case (geo-targeting). Annotations cover safety, and the schema covers parameters. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (limit and query) are already fully documented in the input schema. The description adds no extra meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (returns), the resource (geo-regions of VK Ads), and the output structure (id, name, type). It also mentions the optional filtering by name substring. This distinguishes it from all sibling tools, none of which deal with region data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: 'Id регионов нужны для гео-таргетинга группы объявлений' (region ids are needed for geo-targeting an ad group). However, it does not explicitly mention alternatives or exclusions. Since no sibling tool provides similar functionality, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statisticsСтатистикаARead-onlyIdempotent
Возвращает статистику по кампаниям (ad_plans), группам объявлений (ad_groups) или объявлениям (banners) из сервиса статистики VK Рекламы v3. По умолчанию группировка summary — одна сводная строка на объект за весь период; day/week/month нужны ТОЛЬКО для динамики по дням и вопросов про тренд (каждая добавляет по строке на объект за период). Ранжирование на стороне сервера — через sortBy (например, base.spent) и order; в ответе есть также total — сводка по ВСЕМ объектам за период (для вопросов «сколько всего» суммировать строки не нужно). Метрики лежат в base (shows, clicks, spent, ...); spent — в валюте аккаунта.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Ограничить отчёт этими id объектов (выбранного entity). | |
| limit | No | Сколько объектов на страницу (не больше 250). | |
| order | No | Направление сортировки для sortBy. По умолчанию desc. | |
| dateTo | No | Дата окончания, YYYY-MM-DD (обязательна для day/week/month). | |
| entity | No | Тип объектов для отчёта. По умолчанию banners. | |
| offset | No | Смещение постраничной выдачи (сколько объектов пропустить). | |
| period | No | Группировка: summary (весь период, по умолчанию) либо day/week/month для динамики. | |
| sortBy | No | Поле сортировки на стороне сервера, например base.spent / base.clicks / base.shows (топ-N по метрике). | |
| metrics | No | Группы метрик в отчёте, например base, events, video. По умолчанию — набор API. | |
| dateFrom | No | Дата начала, YYYY-MM-DD (обязательна для day/week/month). | |
| autoPaginate | No | Забрать все страницы, идя по offset/count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds behavioral context: row-count semantics per grouping period, presence of a 'total' summary, metric group locations (base), and currency note for spent. However, it omits pagination behavior (offset/limit/autoPaginate) which remains only in schema, leaving a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense, with no filler. It front-loads the core purpose, then layers grouping, sorting, total, and metrics in logical sequence. Every sentence contributes actionable guidance, achieving high efficiency in three sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, no output schema), the description covers the most critical pitfalls: grouping semantics, total field, server-side sorting, and metric locations. It does not explicitly mention that dateFrom/dateTo are required for day/week/month (though schema does), nor pagination mechanics. Still, for an agent to call correctly, the description provides sufficient orientation, meriting a 4 rather than 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds semantic depth beyond schema: it explains the meaning of 'summary' vs period modes, gives a concrete sortBy example ('base.spent'), and clarifies that metrics groups like 'base' contain shows/clicks/spent. This extends the schema's basic field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Возвращает статистику') and resource ('по кампаниям (ad_plans), группам объявлений (ad_groups) или объявлениям (banners)'), naming all three entity types. It clearly distinguishes this stats tool from sibling listing tools like list_ad_plans by focusing on statistical metrics rather than entity enumeration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance for grouping modes: 'По умолчанию группировка summary — одна сводная строка на объект за весь период; day/week/month нужны ТОЛЬКО для динамики по дням и вопросов про тренд'. It also clarifies that the total field covers all objects so manual summation is unnecessary, and explains server-side ranking via sortBy/order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_throttlingЛимиты запросов к APIARead-onlyIdempotent
Возвращает текущие лимиты запросов VK Рекламы и их остаток (throttling.json) — чтобы не упереться в лимит.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds value by specifying the exact data returned (limits and remainder) and referencing the endpoint, providing context beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the action, the resource, and the rationale. No filler words; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool with rich annotations, the description fully covers what the tool does and why. No output schema exists, so the description need not explain return format. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to explain. With 100% schema coverage (empty schema), the description need not add parameter details, and it doesn't. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns current request limits and remaining quota for VK Ads, referencing the throttling.json endpoint. This specific verb+resource distinguishes it from all sibling tools, which deal with auth, regions, user info, or ad management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The rationale 'to avoid hitting the limit' gives clear context for when to call it. It doesn't explicitly mention alternatives, but no sibling tool serves this purpose, so the guidance is adequate though not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_infoИнформация об аккаунтеARead-onlyIdempotent
Возвращает информацию о текущем аккаунте VK Рекламы (user.json), включая additional_info.client_name. Позволяет убедиться, на какой аккаунт рекламодателя указывает токен.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Поля пользователя в ответе. По умолчанию — базовый набор. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds modest context: the underlying user.json endpoint and the presence of additional_info.client_name in the response, but it does not explain default fields, response shape beyond client_name, or auth nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The core function and the most relevant returned field are front-loaded, and the verification use case is stated in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-optional-parameter info tool, the description is nearly complete: it identifies the endpoint, the account scope, a key return field, and the practical use case. It stops short of enumerating all possible user fields, but the fields parameter and open-world annotation make that reasonably acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single optional 'fields' parameter, so the schema carries the parameter meaning. The description adds no parameter-specific guidance beyond the implied default/basic set, which matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource: returns information about the current VK Ads account (user.json) and specifically calls out additional_info.client_name. This clearly distinguishes it from siblings like auth_status (auth state) and get_balance (financial state) by focusing on full advertiser-account identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this to verify which advertiser account the token points to. It does not explicitly list alternatives or when-not scenarios, but the single intended use is obvious from the token-account tie.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ad_groupsСписок групп объявленийARead-onlyIdempotent
Возвращает список групп объявлений с необязательной фильтрацией по id, родительской кампании и статусу. Денежные поля — в валюте аккаунта; в targetings лежит структура таргетинга по гео, демографии и интересам.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Фильтр по id групп объявлений. | |
| limit | No | Сколько объектов на страницу (не больше 250). | |
| fields | No | Поля группы объявлений в ответе (с «targetings» вернётся полный объект таргетинга). | |
| offset | No | Смещение постраничной выдачи (сколько объектов пропустить). | |
| statuses | No | Фильтр по статусу. | |
| adPlanIds | No | Фильтр по id родительских кампаний. | |
| autoPaginate | No | Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful semantic behavior beyond that: monetary fields are in account currency, and targetings contains geo/demographic/interest targeting structure. There is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core action and filters, then add high-value field semantics about currency and targeting structure. There is no filler or redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with all parameters optional and fully explained by the schema, the description covers the key facts an agent needs: what is returned, available filters, currency behavior, and targetings structure. Pagination details are already in the schema, so their absence from the description is not a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 7 parameters are already documented in the input schema. The description adds context by linking filters to ids, adPlanIds, and statuses and by clarifying the targetings field, but it does not provide syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Возвращает список групп объявлений' – a specific verb and resource. It clearly distinguishes this read-only listing tool from mutating siblings like create_ad_group, update_ad_group, and ad_group_action, and states the optional filter dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the supported filter dimensions (id, parent campaign, status), making the intended use clear. It does not explicitly name alternatives or give when-not-to-use guidance, but the listing context and annotations make the read-only role unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ad_plansСписок кампаний (ad_plans)ARead-onlyIdempotent
Возвращает список ad_plan (верхнеуровневый объект кампании в VK Рекламе) с необязательной фильтрацией по id и статусу. Денежные поля (budget_limit, budget_limit_day, max_price) — в валюте аккаунта.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Фильтр по id кампаний. | |
| limit | No | Сколько объектов на страницу (не больше 250). | |
| fields | No | Поля кампании в ответе. | |
| offset | No | Смещение постраничной выдачи (сколько объектов пропустить). | |
| statuses | No | Фильтр по статусу. | |
| autoPaginate | No | Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds a useful note that monetary fields are in account currency, and clarifies the entity is the top-level campaign object. This adds beyond annotations but does not deep dive into pagination or default behavior, which are partially addressed by the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The main purpose is front-loaded, and the currency note adds value without bloat. Every word contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no required parameters, annotations covering safety, and a schema that documents all parameters, the description covers the core purpose and an important data format detail (currency). It does not explicitly state the response is an array, but that is implied by 'list'. The lack of an output schema makes this acceptable, and no critical missing context stands out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented. The description only reiterates filtering by id and status, matching the ids and statuses parameters. It does not add meaningful new parameter context beyond the schema, such as explaining autoPaginate or offset semantics; hence baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a list of ad_plan objects (the top-level campaign object in VK Ads) with optional filtering by id and status. This is a specific verb+resource, and it distinguishes from siblings like create_ad_plan, update_ad_plan, and list_ad_groups by explicitly naming the entity and its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear the tool is for listing ad_plans, but it does not explicitly contrast with alternative tools or state when not to use it. The purpose implies usage for read-only listing, and sibling naming reinforces it, but explicit guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bannersСписок объявлений (banners)BRead-onlyIdempotent
Возвращает список banner (объект объявления/креатива в VK Рекламе) с необязательной фильтрацией по id, родительской группе объявлений и статусу. moderation_status (pending/allowed/banned) и delivery объясняют, почему объявление показывается или не показывается.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Фильтр по id объявлений. | |
| limit | No | Сколько объектов на страницу (не больше 250). | |
| fields | No | Поля объявления в ответе. | |
| offset | No | Смещение постраничной выдачи (сколько объектов пропустить). | |
| statuses | No | Фильтр по статусу. | |
| adGroupIds | No | Фильтр по id родительских групп объявлений. | |
| autoPaginate | No | Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive), so the description does not need to restate that. It adds value by explaining that moderation_status and delivery indicate why an ad is or is not shown, which helps interpret the returned data. However, it does not disclose additional behavioral details such as pagination behavior or response structure, so a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence front-loads the core functionality and filter options, while the second adds interpretive value about the response fields. It is compact, clear, and well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with fully documented parameters, the description provides the essential purpose and clarifies two important response fields. There is no output schema, so the description carries some burden for explaining returned objects, which it partially does via moderation_status and delivery. It could be more explicit about pagination or the general response shape, but the schema's autoPaginate, limit, and offset parameters already signal pagination, making the description reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning all 7 parameters are already documented in the input schema with descriptions and constraints (e.g., limit maximum 250, offset minimum 0, statuses enum). The description adds no new parameter-level meaning beyond what the schema provides; it merely restates the filter categories. Baseline 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Возвращает список banner' (returns a list of banners) and clarifies that a banner is an ad/creative object in VK Ads. It names the main filter dimensions (id, parent ad group, status), which helps distinguish it from sibling list tools for ad plans or ad groups. It does not explicitly name sibling alternatives, so it falls just short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use list_banners versus list_ad_groups, list_ad_plans, or other alternatives. The description implies its use by naming the resource and filtering options, but it does not state when-not-to-use, prerequisites, or context that would route an agent to this tool over siblings. This is a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutОтключить VK РекламуADestructive
Удаляет сохранённые токен и данные приложения VK Рекламы с диска. Токен, заданный переменной окружения VK_ADS_TOKEN, не трогает — его нужно убирать из конфигурации клиента вручную. На стороне VK токен остаётся активным до истечения срока: отозвать его можно запросом POST v2/oauth2/token/delete.json, но он удаляет ВСЕ токены этого пользователя для данного client_id, поэтому здесь не вызывается.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds substantial behavioral detail: it specifies exactly what gets deleted (saved token and app data), what is excluded (env var token), and why remote revocation is not performed (because it would delete all tokens for the client_id). This goes beyond the annotations to fully disclose the tool's effects and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph that front-loads the core action (delete from disk) and then adds necessary clarifications about the env token and remote revocation. It is slightly longer than minimal but every sentence carries useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description is complete. It explains the exact effect, what is not affected, the manual workaround for the env token, and the rationale for not revoking remotely. An agent has everything needed to decide and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters and the schema is empty, so schema coverage is 100% trivially. Per the baseline for 0 parameters, a score of 4 is appropriate. The description adds no parameter-level information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Deletes the saved token and VK Advertising application data from disk', naming the specific verb (deletes) and resource. It also explicitly clarifies what it does NOT do (touch the env token, revoke the remote token), which distinguishes it from related auth tools like start_login and finish_login.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool (to clear local state) and explains the limitation that the remote token remains active, with a note on how to revoke it manually if needed. However, it does not explicitly contrast with sibling auth tools like auth_status or start_login, though the purpose is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_requestПроизвольный запрос к API VK РекламыADestructive
Универсальный запрос напрямую к любому эндпоинту API VK Рекламы (например, path "v2/ad_plans.json", method GET). Нужен для эндпоинтов, у которых нет отдельного инструмента. query уходит в строку запроса, body отправляется как JSON для POST. GET выполняется свободно; POST и DELETE — запись, для них нужен confirmWrite=true.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON-тело для POST-запросов. | |
| path | Yes | Путь эндпоинта с версией, например "v2/ad_plans.json", "v3/statistics/banners/day.json". | |
| query | No | Параметры строки запроса (фильтры, поля, постраничная выдача). | |
| method | No | HTTP-метод. По умолчанию GET. | |
| confirmWrite | No | Должен быть true для записи (POST или DELETE). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as non-read-only and destructive; the description adds the specific rule that GET is executed freely while POST and DELETE are writes requiring confirmWrite=true, giving context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences, front-loaded with the core purpose, and each sentence adds a distinct piece of information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage condition, parameter handling, and safety requirements. It does not describe the response format, but for a generic raw request without an output schema this is acceptable and not a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100%), and the description adds how `query` maps to the query string and `body` is sent as JSON for POST, enriching the semantics of parameter usage beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs a universal request to any endpoint of the VK Ads API and explicitly says it is for endpoints without a dedicated tool, distinguishing it from sibling tools that cover specific resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit condition: use when no separate tool exists, and clarifies that GET is free while POST/DELETE require confirmWrite=true. This is clear guidance on when and how to use it versus the specialized alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_loginНачать подключение VK РекламыARead-onlyIdempotent
Первый шаг подключения VK Рекламы без правки конфигурации и без перезапуска клиента. Ничего не отправляет в сеть — возвращает инструкцию, которую нужно показать пользователю целиком: где в кабинете создать приложение и откуда скопировать client_id и client_secret. Полученную пару передайте в finish_login. Предупредите, что client_secret — это пароль от рекламного кабинета: он сохранится на диске только для владельца и нужен, чтобы продлевать токен.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent annotations by explicitly stating that the tool sends nothing to the network and merely returns instructions. It also discloses an important security detail: client_secret is a password that will be stored on disk and is needed for token renewal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler: the first states purpose and constraints, the second describes the return value and next action, and the third conveys necessary security guidance. The most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool whose safety profile is already covered by annotations, the description is complete. It tells the agent what the tool returns, how to use the result, what to warn the user about, and which sibling tool to call next.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, so the baseline is 4. The description adds relevant context about the client_id/client_secret pair even though they are not parameters of this tool, clarifying what the returned instructions will cover.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that start_login is the first step of connecting VK Ads and that it returns instructions rather than performing a network action. It names the exact next step (passing the credentials to finish_login), which distinguishes it from the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly frames itself as the first step and instructs the agent to pass the obtained client_id/client_secret pair to finish_login. It does not exhaustively state when not to use it, but the positioning relative to finish_login gives clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_groupИзменить группу объявленийAIdempotent
Меняет у группы объявлений название, бюджеты, предельную ставку, даты или таргетинг. Денежные поля — в валюте аккаунта. Для смены статуса — ad_group_action.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id изменяемой группы объявлений. | |
| name | No | Новое название. | |
| extra | No | Дополнительные поля, подмешиваемые в тело запроса как есть. | |
| dateEnd | No | Новая дата окончания, YYYY-MM-DD. | |
| maxPrice | No | Предельная ставка в валюте аккаунта. | |
| targetings | No | Новая структура таргетинга взамен прежней, отправляется как есть. | |
| budgetLimit | No | Общий бюджет в валюте аккаунта. | |
| budgetLimitDay | No | Дневной бюджет в валюте аккаунта. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a non-read-only, idempotent, non-destructive operation; the description adds that monetary fields are in account currency and that status is out of scope for this tool. No contradictions with annotations were found. It does not discuss side effects or response behavior, but the annotations lower the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the core purpose, the currency clarification, and the status-change alternative. The most important information is front-loaded and there is no redundant or promotional language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 8 parameters and no output schema, the combination of a focused description and fully documented schema is enough to invoke correctly. It lacks any statement about return/confirmation behavior, and the nested targetings/extra objects are only explained in the schema, but those are minor gaps given the rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema carries the parameter meaning; the description only summarizes fields already documented and repeats the account-currency fact. This meets the baseline but adds little semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description starts with a concrete verb ('Меняет') tied to the resource ('группы объявлений') and enumerates the exact mutable attributes: name, budgets, max price, dates, targeting. It also routes status changes to sibling ad_group_action, which prevents confusion with the closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is clear: change attributes of an existing ad group using optional fields. The explicit sentence 'Для смены статуса — ad_group_action' provides a concrete when-not and names the alternative tool, so an agent can decide between update_ad_group and ad_group_action immediately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_planИзменить кампанию (ad_plan)AIdempotent
Меняет у кампании название, бюджеты, предельную ставку или даты. Денежные поля — в валюте аккаунта. Для смены статуса — ad_plan_action.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id изменяемой кампании. | |
| name | No | Новое название. | |
| extra | No | Дополнительные поля, подмешиваемые в тело запроса как есть. | |
| dateEnd | No | Новая дата окончания, YYYY-MM-DD. | |
| maxPrice | No | Предельная ставка в валюте аккаунта. | |
| budgetLimit | No | Общий бюджет в валюте аккаунта. | |
| budgetLimitDay | No | Дневной бюджет в валюте аккаунта. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide the key safety profile: readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds a small note that money fields are in account currency and routes status changes away, but it does not describe patch semantics, error behavior, or response shape. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences: the first lists the mutable fields, the second covers currency and points to ad_plan_action for status changes. It is front-loaded, minimal, and contains no filler or redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter update tool with a fully documented schema and safety annotations, the description covers the remaining needed context: the editable scope, currency units, and the sibling for status changes. It does not spell out response or error semantics, but there is no output schema to match and that gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already carries a description, type, and constraints such as pattern and exclusiveMinimum. The tool description only groups fields into categories and repeats the currency rule, adding no real parameter-level meaning. The baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource and verb ('Меняет у кампании') and enumerates exactly what can be changed: name, budgets, max bid, and dates. It also explicitly distinguishes the tool from ad_plan_action by reserving status changes for that sibling. There is no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit routing rule: 'Для смены статуса — ad_plan_action' tells the agent when not to use this tool and which sibling to use instead. The listed editable fields make it clear when this tool is appropriate. This is direct, actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_bannerИзменить объявление (banner)AIdempotent
Меняет у объявления название, текстовые блоки или ссылки. Для смены статуса — banner_action. Структуры отправляются как есть.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id изменяемого объявления. | |
| name | No | Новое название. | |
| urls | No | Новые объекты ссылок взамен прежних, отправляются как есть. | |
| extra | No | Дополнительные поля, подмешиваемые в тело запроса как есть. | |
| textblocks | No | Новые текстовые блоки взамен прежних, отправляются как есть. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the mutation profile (readOnlyHint=false), idempotency, and non-destructive hints, so the description's incremental behavioral contribution is limited to stating that structures are sent as-is. This is useful for nested objects but is also already reflected in the schema property descriptions. It does not discuss response format, error behavior, or replacement semantics beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler: the action is front-loaded, the sibling alternative is given immediately, and only one additional behavioral caveat ('Структуры отправляются как есть') is included. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with solid annotations and a fully described schema, this definition supplies the missing selection context: what can be updated and which sibling handles status changes. No output schema exists, but the update semantics and nested-object behavior are adequately covered by the description plus the parameter schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented. The description adds a light semantic grouping (name, text blocks, links), but no new details for id, extra, or the raw-pass-through behavior beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Меняет' – changes) and identifies the resource (banner/объявление) plus the affected fields: name, text blocks, and links. It also explicitly distinguishes itself from banner_action, which handles status changes, so an agent can select this tool without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the main use case and explicitly routes status changes to the sibling tool banner_action ('Для смены статуса — banner_action'). This is an explicit when-to-use versus alternative instruction, leaving no ambiguity about which tool handles status updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
v1.5.0- Changed
ad_group_action1 field changed- changed
Input schema / properties / ids / descriptionPrevious value: -"Ad group ids to act on."New value: +"Id групп объявлений, к которым применить действие."
- Changed
ad_plan_action1 field changed- changed
Input schema / properties / ids / descriptionPrevious value: -"Ad plan ids to act on."New value: +"Id кампаний, к которым применить действие."
- Added
auth_status - Changed
banner_action1 field changed- changed
Input schema / properties / ids / descriptionPrevious value: -"Banner ids to act on."New value: +"Id объявлений, к которым применить действие."
- Changed
create_ad_group12 fields changed- changed
Input schema / properties / adPlanId / descriptionPrevious value: -"Parent ad plan id."New value: +"Id родительской кампании." - changed
Input schema / properties / autobiddingMode / descriptionPrevious value: -"Auction strategy, e.g. max_goals."New value: +"Стратегия аукциона, например max_goals." - changed
Input schema / properties / budgetLimit / descriptionPrevious value: -"Total budget in account currency."New value: +"Общий бюджет в валюте аккаунта." - changed
Input schema / properties / budgetLimitDay / descriptionPrevious value: -"Daily budget in account currency."New value: +"Дневной бюджет в валюте аккаунта." - changed
Input schema / properties / dateEnd / descriptionPrevious value: -"End date YYYY-MM-DD."New value: +"Дата окончания, YYYY-MM-DD." - changed
Input schema / properties / dateStart / descriptionPrevious value: -"Start date YYYY-MM-DD."New value: +"Дата начала, YYYY-MM-DD." - changed
Input schema / properties / extra / descriptionPrevious value: -"Extra fields merged into the body verbatim."New value: +"Дополнительные поля, подмешиваемые в тело запроса как есть." - changed
Input schema / properties / maxPrice / descriptionPrevious value: -"Bid cap in account currency."New value: +"Предельная ставка в валюте аккаунта." - changed
Input schema / properties / name / descriptionPrevious value: -"Ad group name."New value: +"Название группы объявлений." - changed
Input schema / properties / objective / descriptionPrevious value: -"Group objective, e.g. site_conversions, leadads, traffic."New value: +"Цель группы, например site_conversions, leadads, traffic." - changed
Input schema / properties / price / descriptionPrevious value: -"Price per optimized event, in account currency."New value: +"Цена оптимизируемого события в валюте аккаунта." - changed
Input schema / properties / targetings / descriptionPrevious value: -"Targeting structure, sent verbatim."New value: +"Структура таргетинга, отправляется как есть."
- Changed
create_ad_plan9 fields changed- changed
Input schema / properties / autobiddingMode / descriptionPrevious value: -"Auction strategy, e.g. max_goals, fixed, second_price_mean."New value: +"Стратегия аукциона, например max_goals, fixed, second_price_mean." - changed
Input schema / properties / budgetLimit / descriptionPrevious value: -"Total budget in account currency."New value: +"Общий бюджет в валюте аккаунта." - changed
Input schema / properties / budgetLimitDay / descriptionPrevious value: -"Daily budget in account currency."New value: +"Дневной бюджет в валюте аккаунта." - changed
Input schema / properties / dateEnd / descriptionPrevious value: -"End date YYYY-MM-DD."New value: +"Дата окончания, YYYY-MM-DD." - changed
Input schema / properties / dateStart / descriptionPrevious value: -"Start date YYYY-MM-DD."New value: +"Дата начала, YYYY-MM-DD." - changed
Input schema / properties / extra / descriptionPrevious value: -"Extra ad plan fields merged into the body (e.g. priced_goal, pricelist_id)."New value: +"Дополнительные поля кампании, подмешиваемые в тело запроса (например, priced_goal, pricelist_id)." - changed
Input schema / properties / maxPrice / descriptionPrevious value: -"Bid cap in account currency."New value: +"Предельная ставка в валюте аккаунта." - changed
Input schema / properties / name / descriptionPrevious value: -"Ad plan name."New value: +"Название кампании." - changed
Input schema / properties / objective / descriptionPrevious value: -"Campaign objective, e.g. site_conversions, leadads, traffic."New value: +"Цель кампании, например site_conversions, leadads, traffic."
- Changed
create_banner6 fields changed- changed
Input schema / properties / adGroupId / descriptionPrevious value: -"Parent ad group id."New value: +"Id родительской группы объявлений." - changed
Input schema / properties / content / descriptionPrevious value: -"Creative content references (uploaded media ids)."New value: +"Ссылки на содержимое креатива (id загруженных медиа)." - changed
Input schema / properties / extra / descriptionPrevious value: -"Extra banner fields merged into the body verbatim."New value: +"Дополнительные поля объявления, подмешиваемые в тело запроса как есть." - changed
Input schema / properties / name / descriptionPrevious value: -"Banner name."New value: +"Название объявления." - changed
Input schema / properties / textblocks / descriptionPrevious value: -"Text blocks, e.g. {\"title\":{\"text\":\"...\"},\"text\":{\"text\":\"...\"}}."New value: +"Текстовые блоки, например {\"title\":{\"text\":\"...\"},\"text\":{\"text\":\"...\"}}." - changed
Input schema / properties / urls / descriptionPrevious value: -"Link objects, e.g. {\"primary\":{\"url\":\"https://...\"}}."New value: +"Объекты ссылок, например {\"primary\":{\"url\":\"https://...\"}}."
- Added
finish_login - Changed
get_regions2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max regions to return after filtering. Default 50."New value: +"Сколько регионов вернуть после фильтрации. По умолчанию 50." - changed
Input schema / properties / query / descriptionPrevious value: -"Case-insensitive substring to filter region names (e.g. \"Москва\")."New value: +"Подстрока для фильтра по названию региона, без учёта регистра (например, «Москва»)."
- Changed
get_statistics11 fields changed- changed
Input schema / properties / autoPaginate / descriptionPrevious value: -"Fetch all pages by following offset/count."New value: +"Забрать все страницы, идя по offset/count." - changed
Input schema / properties / dateFrom / descriptionPrevious value: -"Start date YYYY-MM-DD (required for day/week/month)."New value: +"Дата начала, YYYY-MM-DD (обязательна для day/week/month)." - changed
Input schema / properties / dateTo / descriptionPrevious value: -"End date YYYY-MM-DD (required for day/week/month)."New value: +"Дата окончания, YYYY-MM-DD (обязательна для day/week/month)." - changed
Input schema / properties / entity / descriptionPrevious value: -"Object type to report on. Default banners."New value: +"Тип объектов для отчёта. По умолчанию banners." - changed
Input schema / properties / ids / descriptionPrevious value: -"Limit the report to these object ids (of the chosen entity)."New value: +"Ограничить отчёт этими id объектов (выбранного entity)." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max objects per page (<=250)."New value: +"Сколько объектов на страницу (не больше 250)." - changed
Input schema / properties / metrics / descriptionPrevious value: -"Metric groups to include, e.g. base, events, video. Defaults to the API default."New value: +"Группы метрик в отчёте, например base, events, video. По умолчанию — набор API." - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset (objects to skip)."New value: +"Смещение постраничной выдачи (сколько объектов пропустить)." - changed
Input schema / properties / order / descriptionPrevious value: -"Sort direction for sortBy. Default desc."New value: +"Направление сортировки для sortBy. По умолчанию desc." - changed
Input schema / properties / period / descriptionPrevious value: -"Grouping: summary (whole range, default), or day/week/month for trends."New value: +"Группировка: summary (весь период, по умолчанию) либо day/week/month для динамики." - changed
Input schema / properties / sortBy / descriptionPrevious value: -"Server-side sort field, e.g. base.spent / base.clicks / base.shows (top-N by metric)."New value: +"Поле сортировки на стороне сервера, например base.spent / base.clicks / base.shows (топ-N по метрике)."
- Changed
get_user_info1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"User fields to return. Defaults to a common set."New value: +"Поля пользователя в ответе. По умолчанию — базовый набор."
- Changed
list_ad_groups7 fields changed- changed
Input schema / properties / adPlanIds / descriptionPrevious value: -"Filter by parent ad plan ids."New value: +"Фильтр по id родительских кампаний." - changed
Input schema / properties / autoPaginate / descriptionPrevious value: -"Fetch all pages by following offset/count (ignores limit as a total cap)."New value: +"Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов)." - changed
Input schema / properties / fields / descriptionPrevious value: -"Ad group fields to return (add \"targetings\" for the full targeting object)."New value: +"Поля группы объявлений в ответе (с «targetings» вернётся полный объект таргетинга)." - changed
Input schema / properties / ids / descriptionPrevious value: -"Filter by ad group ids."New value: +"Фильтр по id групп объявлений." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max objects per page (<=250)."New value: +"Сколько объектов на страницу (не больше 250)." - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset (objects to skip)."New value: +"Смещение постраничной выдачи (сколько объектов пропустить)." - changed
Input schema / properties / statuses / descriptionPrevious value: -"Filter by status."New value: +"Фильтр по статусу."
- Changed
list_ad_plans6 fields changed- changed
Input schema / properties / autoPaginate / descriptionPrevious value: -"Fetch all pages by following offset/count (ignores limit as a total cap)."New value: +"Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов)." - changed
Input schema / properties / fields / descriptionPrevious value: -"Ad plan fields to return."New value: +"Поля кампании в ответе." - changed
Input schema / properties / ids / descriptionPrevious value: -"Filter by ad plan ids."New value: +"Фильтр по id кампаний." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max objects per page (<=250)."New value: +"Сколько объектов на страницу (не больше 250)." - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset (objects to skip)."New value: +"Смещение постраничной выдачи (сколько объектов пропустить)." - changed
Input schema / properties / statuses / descriptionPrevious value: -"Filter by status."New value: +"Фильтр по статусу."
- Changed
list_banners7 fields changed- changed
Input schema / properties / adGroupIds / descriptionPrevious value: -"Filter by parent ad group ids."New value: +"Фильтр по id родительских групп объявлений." - changed
Input schema / properties / autoPaginate / descriptionPrevious value: -"Fetch all pages by following offset/count (ignores limit as a total cap)."New value: +"Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов)." - changed
Input schema / properties / fields / descriptionPrevious value: -"Banner fields to return."New value: +"Поля объявления в ответе." - changed
Input schema / properties / ids / descriptionPrevious value: -"Filter by banner ids."New value: +"Фильтр по id объявлений." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max objects per page (<=250)."New value: +"Сколько объектов на страницу (не больше 250)." - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset (objects to skip)."New value: +"Смещение постраничной выдачи (сколько объектов пропустить)." - changed
Input schema / properties / statuses / descriptionPrevious value: -"Filter by status."New value: +"Фильтр по статусу."
- Added
logout - Changed
raw_request5 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"JSON body for POST requests."New value: +"JSON-тело для POST-запросов." - changed
Input schema / properties / confirmWrite / descriptionPrevious value: -"Must be true for a write (POST or DELETE)."New value: +"Должен быть true для записи (POST или DELETE)." - changed
Input schema / properties / method / descriptionPrevious value: -"HTTP method. Default GET."New value: +"HTTP-метод. По умолчанию GET." - changed
Input schema / properties / path / descriptionPrevious value: -"Versioned endpoint path, e.g. \"v2/ad_plans.json\", \"v3/statistics/banners/day.json\"."New value: +"Путь эндпоинта с версией, например \"v2/ad_plans.json\", \"v3/statistics/banners/day.json\"." - changed
Input schema / properties / query / descriptionPrevious value: -"Query string parameters (filters, fields, pagination)."New value: +"Параметры строки запроса (фильтры, поля, постраничная выдача)."
- Added
start_login - Changed
update_ad_group8 fields changed- changed
Input schema / properties / budgetLimit / descriptionPrevious value: -"Total budget in account currency."New value: +"Общий бюджет в валюте аккаунта." - changed
Input schema / properties / budgetLimitDay / descriptionPrevious value: -"Daily budget in account currency."New value: +"Дневной бюджет в валюте аккаунта." - changed
Input schema / properties / dateEnd / descriptionPrevious value: -"New end date YYYY-MM-DD."New value: +"Новая дата окончания, YYYY-MM-DD." - changed
Input schema / properties / extra / descriptionPrevious value: -"Extra fields merged into the body verbatim."New value: +"Дополнительные поля, подмешиваемые в тело запроса как есть." - changed
Input schema / properties / id / descriptionPrevious value: -"Ad group id to update."New value: +"Id изменяемой группы объявлений." - changed
Input schema / properties / maxPrice / descriptionPrevious value: -"Bid cap in account currency."New value: +"Предельная ставка в валюте аккаунта." - changed
Input schema / properties / name / descriptionPrevious value: -"New name."New value: +"Новое название." - changed
Input schema / properties / targetings / descriptionPrevious value: -"Replacement targeting structure, sent verbatim."New value: +"Новая структура таргетинга взамен прежней, отправляется как есть."
- Changed
update_ad_plan7 fields changed- changed
Input schema / properties / budgetLimit / descriptionPrevious value: -"Total budget in account currency."New value: +"Общий бюджет в валюте аккаунта." - changed
Input schema / properties / budgetLimitDay / descriptionPrevious value: -"Daily budget in account currency."New value: +"Дневной бюджет в валюте аккаунта." - changed
Input schema / properties / dateEnd / descriptionPrevious value: -"New end date YYYY-MM-DD."New value: +"Новая дата окончания, YYYY-MM-DD." - changed
Input schema / properties / extra / descriptionPrevious value: -"Extra fields merged into the body verbatim."New value: +"Дополнительные поля, подмешиваемые в тело запроса как есть." - changed
Input schema / properties / id / descriptionPrevious value: -"Ad plan id to update."New value: +"Id изменяемой кампании." - changed
Input schema / properties / maxPrice / descriptionPrevious value: -"Bid cap in account currency."New value: +"Предельная ставка в валюте аккаунта." - changed
Input schema / properties / name / descriptionPrevious value: -"New name."New value: +"Новое название."
- Changed
update_banner5 fields changed- changed
Input schema / properties / extra / descriptionPrevious value: -"Extra fields merged into the body verbatim."New value: +"Дополнительные поля, подмешиваемые в тело запроса как есть." - changed
Input schema / properties / id / descriptionPrevious value: -"Banner id to update."New value: +"Id изменяемого объявления." - changed
Input schema / properties / name / descriptionPrevious value: -"New name."New value: +"Новое название." - changed
Input schema / properties / textblocks / descriptionPrevious value: -"Replacement text blocks, sent verbatim."New value: +"Новые текстовые блоки взамен прежних, отправляются как есть." - changed
Input schema / properties / urls / descriptionPrevious value: -"Replacement link objects, sent verbatim."New value: +"Новые объекты ссылок взамен прежних, отправляются как есть."
4 tool updates
v1.1.4- Changed
create_ad_group3 fields changed- removed
Input schema / properties / dateEnd / $refRemoved value: -"#/properties/dateStart" - added
Input schema / properties / dateEnd / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$" - added
Input schema / properties / dateEnd / typeAdded value: +"string"
- Changed
create_ad_plan3 fields changed- removed
Input schema / properties / dateEnd / $refRemoved value: -"#/properties/dateStart" - added
Input schema / properties / dateEnd / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$" - added
Input schema / properties / dateEnd / typeAdded value: +"string"
- Added
get_balance - Changed
get_statistics3 fields changed- removed
Input schema / properties / dateTo / $refRemoved value: -"#/properties/dateFrom" - added
Input schema / properties / dateTo / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$" - added
Input schema / properties / dateTo / typeAdded value: +"string"
17 tool updates
v1.1.3- First observed
ad_group_action - First observed
ad_plan_action - First observed
banner_action - First observed
create_ad_group - First observed
create_ad_plan - First observed
create_banner - First observed
get_regions - First observed
get_statistics - First observed
get_throttling - First observed
get_user_info - First observed
list_ad_groups - First observed
list_ad_plans - First observed
list_banners - First observed
raw_request - First observed
update_ad_group - First observed
update_ad_plan - First observed
update_banner
TDQS
Scored across 22 tools
Tools are largely distinct by resource (auth, throttling, regions, ad plans, groups, banners, statistics, raw). The action tools (create/update/delete) for each resource are clearly separated. Slight ambiguity between raw_request and the specific tools, but raw_request is explicitly a fallback, making the boundary clear.
Most tools follow a consistent verb_noun pattern (get_, list_, create_, update_, action). However, there are deviations: 'auth_status', 'start_login', 'finish_login', 'logout' use a different style, and 'get_throttling' and 'get_regions' are fine but 'ad_plan_action' could be more consistent as 'update_ad_plan_status'. Minor inconsistencies, but overall predictable.
With 22 tools, the server is on the heavier side but still reasonable for a full ad management platform. Each tool maps to a distinct entity or workflow, covering auth, config, and core CRUD plus statistics and a raw fallback. Slightly beyond the ideal 15, but not excessive for the scope.
The server covers the full lifecycle for ad plans, ad groups, and banners (list, create, update, status action, delete via action). It also includes statistics and a raw request for edge cases. Minor gaps like missing budget adjustment standalone or reporting endpoints are covered by raw_request, making the surface reasonably complete.
Maintenance
Related MCP Connectors
Google Ads MCP server — manage campaigns, keywords, and metrics.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Hosted MCP server for Google Ads and LinkedIn Ads analysis.
MCP server for Hostinger API
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server for VK Ads API enabling management of campaigns, ads, statistics, targeting, and budgets through natural language.813 npm4MIT
- AlicenseAqualityDmaintenanceRead-only MCP server for analyzing VK Ads campaigns, listing ad structures, retrieving statistics, and generating optimization recommendations.81MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Meta/Facebook Marketing API allowing you to view and manage ad accounts, campaigns, ad sets, ads, and creatives, as well as fetch insights and upload ad images.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for VK Ads API (myTarget v2) that allows AI agents to manage advertising accounts: create and modify campaigns, ads, upload creatives, and fetch statistics.145 npm6Apache 2.0