Skip to main content
Glama
askads

VK Ads MCP

VK Реклама MCP

npm CI Glama License: MIT

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.

  1. Get a token and add the server to your AI app — instructions for five apps below.

  2. Ask: "Show the campaigns of my VK Рекламы account and spend for the past week by ad groups."

Via the app interface:

  1. Open Settings → Plugins → MCP servers.

  2. Click Add server.

  3. Add the launch command npx -y mcp-vk-ads@latest and the environment variable VK_ADS_TOKEN with your token.

Via the command line:

codex mcp add vk-ads \
  --env VK_ADS_TOKEN=ваш_токен \
  -- npx -y mcp-vk-ads@latest

Check the connection:

codex mcp list

Official Codex guide

claude mcp add \
  --env VK_ADS_TOKEN=ваш_токен \
  --transport stdio \
  --scope user \
  vk-ads \
  -- npx -y mcp-vk-ads@latest

Check the server:

claude mcp list

Claude Code documentation

Open 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": "ваш_токен"
      }
    }
  }
}

Cursor documentation

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.

VS Code documentation

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 (ad_plan)

Top level: name, budget, bid, and work period.

Ad group (ad_group)

Audience and placement settings, own budget and bid.

Ad (banner)

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.

raw_request

GET reads data; POST and DELETE change it and require confirmWrite=true.

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:

  1. In ads.vk.com, open Settings → API Access and create an app. Save client_id and client_secret. If the section is unavailable, request API access from VK Ads support.

  2. 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_SECRET
  3. Take access_token from the response and save it as VK_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

VK_ADS_TOKEN

Required OAuth2 access token for VK Ads.

VK_ADS_LANG

API response language; default ru.

VK_ADS_TIMEOUT_MS

Timeout for one request; default 60,000 ms.

VK_ADS_MAX_RETRIES

Number of retries on temporary errors; default 3.

VK_ADS_API_BASE

Base API URL; default https://ads.vk.com/api.

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 _truncated field.

  • API limits. The get_throttling tool 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, and 5xx. The delay respects Retry-After and 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

Support

Found a bug or missing a scenario? Create an issue or write to Telegram.

Available Tools

23 tools
ad_group_actionДействие над группой объявленийA
Destructive

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

NameRequiredDescriptionDefault
idsYesId групп объявлений, к которым применить действие.
actionYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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Действие над кампаниейA
Destructive

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

NameRequiredDescriptionDefault
idsYesId кампаний, к которым применить действие.
actionYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the key non-obvious behavior: delete is non-cascading and leaves groups/ads in their prior status. The annotations already flag destructiveHint=true and idempotentHint=false, so the remaining gap is minor — no mention of whether deletion is reversible or what permissions are needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler: the operations and their state mappings come first, then the important caveat about delete scope. Nothing is left dangling or repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema and destructive annotations already present, the description covers operations, state results, and cascade behavior. It could still say whether errors on one id abort the whole batch, but that is a small residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% — only `ids` is documented in the schema, while the `action` enum has no description. The description compensates by defining every enum value's meaning and side effect, though it does not clarify whether `ids` accepts mixed campaigns or what happens on partial failure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (меняет статус кампаний по id) and enumerates the three concrete operations with their resulting states. It also names ad_group_action and banner_action, making the boundary with siblings explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each action is spelled out with its effect (activate→active, stop→blocked, delete→deleted), which is effectively the when-to-use guidance an agent needs. It further clarifies that deleting child objects is a separate task routed to ad_group_action and banner_action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auth_statusСтатус подключения к VK РекламеA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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

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

NameRequiredDescriptionDefault
nameYesНазвание группы объявлений.
extraNoДополнительные поля, подмешиваемые в тело запроса как есть.
priceNoЦена оптимизируемого события в валюте аккаунта.
dateEndNoДата окончания, YYYY-MM-DD.
adPlanIdYesId родительской кампании.
maxPriceNoПредельная ставка в валюте аккаунта.
dateStartNoДата начала, YYYY-MM-DD.
objectiveNoЦель группы, например site_conversions, leadads, traffic.
targetingsNoСтруктура таргетинга, отправляется как есть.
budgetLimitNoОбщий бюджет в валюте аккаунта.
budgetLimitDayNoДневной бюджет в валюте аккаунта. Минимум по справке VK — 300 ₽ (у Дзена свой лимит).
autobiddingModeNoСтратегия аукциона, например max_goals.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructive=false, idempotent=false, and openWorld=true, so the safety profile is covered. The description adds genuinely useful behavioral context that annotations do not: monetary fields are in the account currency and arbitrary fields are passed through via `extra`. It does not mention auth requirements, rate limits, or what happens if a duplicate name exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler. The purpose is front-loaded, followed immediately by the two highest-risk semantic points (targetings shape and currency), then the catch-all rule for `extra`.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, nested-object creation tool with no output schema, the description covers the two trickiest inputs (targetings and extra) but omits any indication of what is returned (e.g. the created group's id) and does not flag that only adPlanId and name are required. Adequate but leaves gaps an agent would need to discover by trial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description goes beyond the schema by supplying a concrete targeting example ({"geo":{"regions":[188]},"age":{"age_list":[25,26]}}) for a parameter the schema only calls 'sent as-is'. It also clarifies that all money fields (price, maxPrice, budgetLimit, budgetLimitDay) share the account-currency unit, which ties several parameters together.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource in Russian: 'Создаёт группу объявлений внутри кампании', which is unambiguous. The resource (ad group) is distinct from siblings like create_ad_plan and create_banner, though the description never explicitly names those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Остальные поля — через `extra`' gives a usage rule for the catch-all parameter, which is helpful. However, there is no guidance on when to use this tool versus update_ad_group or the ad_group_action sibling, and no stated prerequisites (e.g. the parent campaign must already exist, which adPlanId implies but does not explain).

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

NameRequiredDescriptionDefault
nameYesНазвание кампании.
extraNoДополнительные поля кампании, подмешиваемые в тело запроса (например, priced_goal, pricelist_id).
dateEndNoДата окончания, YYYY-MM-DD.
adGroupsNoПервые группы объявлений, создаваемые вместе с кампанией (новые, без id). Обязательны: VK не создаёт пустую кампанию.
maxPriceNoПредельная ставка в валюте аккаунта.
dateStartNoДата начала, YYYY-MM-DD.
objectiveNoЦель кампании, например site_conversions, leadads, traffic.
budgetLimitNoОбщий бюджет в валюте аккаунта.
budgetLimitDayNoДневной бюджет в валюте аккаунта. Минимум по справке VK — 300 ₽ (у Дзена свой лимит).
autobiddingModeNoСтратегия аукциона, например max_goals, fixed, second_price_mean.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this is a non-read-only, non-idempotent, open-world write with no destructive semantics; the description adds substantial constraints beyond that — budgetLimit vs budgetLimitDay mutual exclusivity, the extra.ad_object_type/ad_object_id requirement for site campaigns, and the status="blocked" recipe for creating without launching. It adds real value over the annotations, but it does not cover throttling or what a successful call returns (the campaign id), which an agent would need for follow-up calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence carries operational content, and the core constraint (VK won't create an empty campaign) is front-loaded. However, it is one dense paragraph with several distinct rules (extra passthrough, adGroups shape, URL binding, budget exclusivity, status blocked) run together, making it harder to scan than a lightly structured version would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex create operation with nested objects, no output schema, and high schema coverage, the description covers almost all invocation-time rules (required group structure, URL binding, budget exclusivity, blocked status). The main gaps are the return value/id of the created campaign and any rate-limit expectations, which matter for chaining into create_ad_group.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so descriptions already document each parameter, which sets the baseline at 3 even though the description adds genuinely useful cross-parameter meaning: required adGroups structure (name, package_id, targetings, priced_goal for max_goals), the

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ('Создаёт кампанию (ad_plan)') and immediately clarifies the non-obvious scope: the campaign is created together with its first ad groups, not standalone. It explicitly hands off to the sibling 'create_ad_group' for groups added later, so an agent can separate this from update_ad_plan and create_ad_group without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-and-how guidance: VK rejects an empty campaign, so adGroups must carry new groups; subsequent groups go through create_ad_group. It also prescribes the practical path of copying ad_object_id/package_id/priced_goal from existing entities via list_ad_plans/list_ad_groups, and names the concrete failure mode (invalid_package) if the URL binding is missing.

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

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

NameRequiredDescriptionDefault
nameNoНазвание объявления.
urlsNoОбъекты ссылок, например {"primary":{"url":"https://..."}}.
extraNoДополнительные поля объявления, подмешиваемые в тело запроса как есть.
contentNoСсылки на содержимое креатива: {"<слот>": {"id": <id из upload_image>}}. Картинка должна подходить слоту по размеру (image_600x600 — не шире 600 px).
adGroupIdYesId родительской группы объявлений.
textblocksNoТекстовые блоки, например {"title":{"text":"..."},"text":{"text":"..."}}.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/one-shot/open-world profile, so the bar is lower and the description earns credit for adding real context: the structures are passed through as-is with no server-side reshaping, and the format-specific shape is delegated to VK Ads documentation. It stops short of saying what is returned (banner id) or whether validation errors are surfaced per field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and endpoint, then the payload semantics, then the documentation pointer — a logical order with no filler. The parenthetical endpoint note costs some density but pays for itself by preventing a wrong-endpoint call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with nested free-form objects and no output schema, the description covers the destination, the meaning of each payload shape, and where to find the per-format contract. The remaining gap is the response shape and the upload_image dependency, which are only implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so 3 is the baseline; the description earns a bump by explaining the relationship between the three passthrough objects (content → uploaded media, textblocks → ad copy, urls → links) and by flagging that the exact shape varies per banner format and lives in external docs — something the schema explicitly cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Создаёт объявление') and pins down the exact endpoint (POST v2/ad_groups/{adGroupId}/banners.json), which immediately distinguishes it from list_banners and the other create_* siblings. It also pre-empts a likely confusion by noting that the top-level v2/banners.json is list-only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly establishes the required context — a banner can only be created inside an existing ad group — and rules out the top-level path. It implies the upload_image prerequisite by saying the creative references already-uploaded media, but does not state prerequisites or failure modes explicitly (e.g. what happens with a wrong adGroupId or a slot-mismatched image).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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

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

NameRequiredDescriptionDefault
clientIdYesclient_id приложения из раздела «Настройки → Доступ к API» кабинета VK Рекламы.
clientSecretYesclient_secret того же приложения. Не показывайте его в ответе пользователю.

TDQS

A3.8/5.0
Behavior1/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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Баланс аккаунтаA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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Список регионовA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
limitNoСколько регионов вернуть после фильтрации. По умолчанию 50.
queryNoПодстрока для фильтра по названию региона, без учёта регистра (например, «Москва»).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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СтатистикаA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
idsNoОграничить отчёт этими id объектов (выбранного entity).
limitNoСколько объектов на страницу (не больше 250).
orderNoНаправление сортировки для sortBy. По умолчанию desc.
dateToNoДата окончания, YYYY-MM-DD (обязательна для day).
entityNoТип объектов для отчёта. По умолчанию banners.
offsetNoСмещение постраничной выдачи (сколько объектов пропустить).
periodNoГруппировка: summary (итог по объекту, по умолчанию) либо day для динамики по дням.
sortByNoПоле сортировки на стороне сервера, например base.spent / base.clicks / base.shows (топ-N по метрике).
metricsNoГруппы метрик в отчёте, например base, events, video. По умолчанию — набор API.
dateFromNoДата начала, YYYY-MM-DD (обязательна для day; для summary без дат — итог за всё время).
autoPaginateNoЗабрать все страницы, идя по offset/count (в day и summary без дат ответ и так полный).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses failure behavior ('VK их молча игнорирует, поэтому инструмент вернёт ошибку'), clarifies that autoPaginate is harmless in every mode, and explains the exact meaning of 'total' (sum over THIS page's objects, or over ids when filtered, not the whole account). It also states where metrics live (base) and that spent is in account currency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in sentence one and nearly every following clause carries a real constraint (mode limits, error behavior, total semantics). It is dense and wordy in places — the autoPaginate aside and the repeated date/period restatements could be trimmed — but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 11 parameters, three interacting modes and no output schema, the description still tells the agent what the response looks like (items[].total, per-day rows in day mode), where metric values sit, and which parameter combinations fail. That is everything needed to call it correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 still adds real value by binding parameters together — limit/offset and sortBy/order are only honored in summary-with-dates, and ids changes the semantics of the returned total. Some of it duplicates the schema (dateFrom/dateTo notes, entity list), and the 'metrics' groups are only touched via 'Метрики лежат в base', so it is additive but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ('Возвращает статистику по кампаниям (ad_plans), группам объявлений (ad_groups) или объявлениям (banners)') and enumerates the exact entity values. That makes it trivially distinguishable from the sibling list_*/update_* CRUD tools, which manage objects rather than report metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives strong mode-selection guidance: 'day' is declared for trend/dynamics questions only, dates are mandatory there, and weeks/months must be derived from 'day'. It also warns that sortBy/order/limit/offset only work in summary with dates and that the tool will error otherwise. It never routes to an alternative sibling (e.g. raw_request for unsupported groupings) or explains when to prefer list_banners for object metadata, so it stops short of a full routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_throttlingЛимиты запросов к APIA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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Информация об аккаунтеA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
fieldsNoПоля пользователя в ответе. По умолчанию — базовый набор.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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Список групп объявленийA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
idsNoФильтр по id групп объявлений.
limitNoСколько объектов на страницу (не больше 250).
fieldsNoПоля группы объявлений в ответе (с «targetings» вернётся полный объект таргетинга).
offsetNoСмещение постраничной выдачи (сколько объектов пропустить).
statusesNoФильтр по статусу.
adPlanIdsNoФильтр по id родительских кампаний.
autoPaginateNoЗабрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов).

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)A
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
idsNoФильтр по id кампаний.
limitNoСколько объектов на страницу (не больше 250).
fieldsNoПоля кампании в ответе.
offsetNoСмещение постраничной выдачи (сколько объектов пропустить).
statusesNoФильтр по статусу.
autoPaginateNoЗабрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов).

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)B
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
idsNoФильтр по id объявлений.
limitNoСколько объектов на страницу (не больше 250).
fieldsNoПоля объявления в ответе.
offsetNoСмещение постраничной выдачи (сколько объектов пропустить).
statusesNoФильтр по статусу.
adGroupIdsNoФильтр по id родительских групп объявлений.
autoPaginateNoЗабрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов).

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 РекламуA
Destructive

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

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 РекламыA
Destructive

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

NameRequiredDescriptionDefault
bodyNoJSON-тело для POST-запросов.
pathYesПуть эндпоинта с версией, например "v2/ad_plans.json", "v3/statistics/banners/day.json".
queryNoПараметры строки запроса (фильтры, поля, постраничная выдача).
methodNoHTTP-метод. По умолчанию GET.
confirmWriteNoДолжен быть true для записи (POST или DELETE).

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 РекламыA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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Изменить группу объявленийA
Idempotent

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

NameRequiredDescriptionDefault
idYesId изменяемой группы объявлений.
nameNoНовое название.
extraNoДополнительные поля, подмешиваемые в тело запроса как есть.
dateEndNoНовая дата окончания, YYYY-MM-DD.
maxPriceNoПредельная ставка в валюте аккаунта.
targetingsNoНовая структура таргетинга взамен прежней, отправляется как есть.
budgetLimitNoОбщий бюджет в валюте аккаунта.
budgetLimitDayNoДневной бюджет в валюте аккаунта. Минимум по справке VK — 300 ₽ (у Дзена свой лимит).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the description's remaining job is narrower. It adds that monetary values use account currency, but omits the key behavioral question for an update tool: whether omitted fields are left untouched, and whether replacing targetings discards the previous structure (that detail lives only in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the scope, then the currency constraint, then the sibling redirect. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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, a nested object, no output schema and full schema coverage plus annotations, the description covers most of what an agent needs. The gap is partial-update semantics and the `extra` escape hatch, which an agent could misuse without further explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the 8 parameters is already documented, including currency and the YYYY-MM-DD pattern; baseline is therefore 3. The description only restates the field groups and repeats the account-currency rule, without explaining the `extra` passthrough or partial-update semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (Меняет) plus the exact resource and enumerates the mutable field groups (название, бюджеты, предельную ставку, даты, таргетинг), so an agent knows precisely what this tool writes. It also disambiguates from the closest sibling by routing status changes to ad_group_action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit alternative ('Для смены статуса — ad_group_action'), which is the most likely confusion given that sibling exists. It lacks any positive when-to-use context or prerequisites (e.g. that the ad group must exist / be editable), so it falls 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.

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

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

NameRequiredDescriptionDefault
idYesId изменяемой кампании.
nameNoНовое название.
extraNoДополнительные поля, подмешиваемые в тело запроса как есть.
dateEndNoНовая дата окончания, YYYY-MM-DD.
maxPriceNoПредельная ставка в валюте аккаунта.
budgetLimitNoОбщий бюджет в валюте аккаунта.
budgetLimitDayNoДневной бюджет в валюте аккаунта. Минимум по справке VK — 300 ₽ (у Дзена свой лимит).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false and openWorld=true, so the safety profile is covered. The description adds that monetary fields use account currency, which is genuinely useful for correct invocation. It does not disclose the partial-update behavior (are omitted fields left untouched?) or failure modes, which is the main remaining behavioral gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the mutation scope and immediately followed by the sibling routing rule. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with full schema coverage, annotations and no output schema, the description covers field scope, units and the key sibling alternative. The one substantive omission is whether the operation is a partial patch (only provided fields change), which an agent needs to avoid unintended overwrites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter including id, extra, dateEnd format and currency. The description's currency note largely restates the schema's own wording and adds nothing about the 'extra' passthrough object or partial-update semantics. Baseline 3 applies when the schema carries the detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (меняет) and resource (кампания), then enumerates the exact mutable fields: name, budgets, max bid, dates. It also explicitly distinguishes itself from ad_plan_action, so an agent can tell the two apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one explicit routing rule — use ad_plan_action for status changes — which is the most likely confusion with this tool. It does not spell out other conditions (e.g. that only supplied fields are modified, or when to prefer create_ad_plan vs this tool), so guidance is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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

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

NameRequiredDescriptionDefault
idYesId изменяемого объявления.
nameNoНовое название.
urlsNoНовые объекты ссылок взамен прежних, отправляются как есть.
extraNoДополнительные поля, подмешиваемые в тело запроса как есть.
textblocksNoНовые текстовые блоки взамен прежних, отправляются как есть.

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

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

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

NameRequiredDescriptionDefault
widthYesШирина изображения в пикселях.
heightYesВысота изображения в пикселях.
imageBase64YesИзображение JPEG/PNG в base64, без префикса data:. Не больше 5 МБ после декодирования.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare non-readonly, open-world, non-idempotent, non-destructive. The description adds real behavioral context beyond that: the multipart POST transport, the returned id/variants, the failure mode bad_width produced by oversized images, and the critical warning that a network error or 5xx may still mean the upload succeeded, so blind retries are unsafe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool does and what it returns, then chains the downstream usage, then the sizing constraint, then the retry hazard. Five dense sentences with no filler; every clause carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by naming the return fields (id, variants). For a 3-parameter upload tool with annotations covering safety, the description supplies the remaining essentials: transport, output, downstream wiring, size constraint, and retry semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 still adds value by tying width/height to slot constraints (e.g., the 600 px limit for image_600x600) and reinforcing that base64 must omit the data: prefix. It does not add much beyond the schema for individual fields, but the slot-dimension relationship is genuinely new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (uploads) and resource (JPEG/PNG image into VK Ads media library), names the underlying endpoint (multipart POST v2/content/static.json), and describes the return value (id and variants). It is clearly distinguishable from siblings like create_banner, which it explicitly feeds into.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains exactly how to consume the result: pass the id into create_banner as content.<slot>={'id': <id>}, and notes the required slots depend on the group's package format. It also gives concrete sizing guidance (image_600x600 rejects wider than 600 px → bad_width) and an explicit when-not-to-act rule: do not retry blindly after a network error or 5xx.

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.

  1. 6 tool updatesv1.5.1
    • Changedcreate_ad_group1 field changed
      • changedInput schema / properties / budgetLimitDay / description
        Previous value: -"Дневной бюджет в валюте аккаунта."New value: +"Дневной бюджет в валюте аккаунта. Минимум по справке VK — 300 ₽ (у Дзена свой лимит)."
    • Changedcreate_ad_plan2 fields changed
      • addedInput schema / properties / adGroups
        Added value: +{
        +  "description": "Первые группы объявлений, создаваемые вместе с кампанией (новые, без id). Обязательны: VK не создаёт пустую кампанию.",
        +  "items": {
        +    "additionalProperties": {},
        +    "type": "object"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / budgetLimitDay / description
        Previous value: -"Дневной бюджет в валюте аккаунта."New value: +"Дневной бюджет в валюте аккаунта. Минимум по справке VK — 300 ₽ (у Дзена свой лимит)."
    • Changedcreate_banner1 field changed
      • changedInput schema / properties / content / description
        Previous value: -"Ссылки на содержимое креатива (id загруженных медиа)."New value: +"Ссылки на содержимое креатива: {\"<слот>\": {\"id\": <id из upload_image>}}. Картинка должна подходить слоту по размеру (image_600x600 — не шире 600 px)."
    • Changedupdate_ad_group1 field changed
      • changedInput schema / properties / budgetLimitDay / description
        Previous value: -"Дневной бюджет в валюте аккаунта."New value: +"Дневной бюджет в валюте аккаунта. Минимум по справке VK — 300 ₽ (у Дзена свой лимит)."
    • Changedupdate_ad_plan1 field changed
      • changedInput schema / properties / budgetLimitDay / description
        Previous value: -"Дневной бюджет в валюте аккаунта."New value: +"Дневной бюджет в валюте аккаунта. Минимум по справке VK — 300 ₽ (у Дзена свой лимит)."
    • Addedupload_image
  2. 1 tool updatev1.6.1
    • Changedget_statistics5 fields changed
      • changedInput schema / properties / autoPaginate / description
        Previous value: -"Забрать все страницы, идя по offset/count."New value: +"Забрать все страницы, идя по offset/count (в day и summary без дат ответ и так полный)."
      • changedInput schema / properties / dateFrom / description
        Previous value: -"Дата начала, YYYY-MM-DD (обязательна для day/week/month)."New value: +"Дата начала, YYYY-MM-DD (обязательна для day; для summary без дат — итог за всё время)."
      • changedInput schema / properties / dateTo / description
        Previous value: -"Дата окончания, YYYY-MM-DD (обязательна для day/week/month)."New value: +"Дата окончания, YYYY-MM-DD (обязательна для day)."
      • changedInput schema / properties / period / description
        Previous value: -"Группировка: summary (весь период, по умолчанию) либо day/week/month для динамики."New value: +"Группировка: summary (итог по объекту, по умолчанию) либо day для динамики по дням."
      • changedInput schema / properties / period / enum
        Previous value: -[
        -  "day",
        -  "week",
        -  "month",
        -  "summary"
        -]New value: +[
        +  "summary",
        +  "day"
        +]
  3. 20 tool updatesv1.5.0
    • Changedad_group_action1 field changed
      • changedInput schema / properties / ids / description
        Previous value: -"Ad group ids to act on."New value: +"Id групп объявлений, к которым применить действие."
    • Changedad_plan_action1 field changed
      • changedInput schema / properties / ids / description
        Previous value: -"Ad plan ids to act on."New value: +"Id кампаний, к которым применить действие."
    • Addedauth_status
    • Changedbanner_action1 field changed
      • changedInput schema / properties / ids / description
        Previous value: -"Banner ids to act on."New value: +"Id объявлений, к которым применить действие."
    • Changedcreate_ad_group12 fields changed
      • changedInput schema / properties / adPlanId / description
        Previous value: -"Parent ad plan id."New value: +"Id родительской кампании."
      • changedInput schema / properties / autobiddingMode / description
        Previous value: -"Auction strategy, e.g. max_goals."New value: +"Стратегия аукциона, например max_goals."
      • changedInput schema / properties / budgetLimit / description
        Previous value: -"Total budget in account currency."New value: +"Общий бюджет в валюте аккаунта."
      • changedInput schema / properties / budgetLimitDay / description
        Previous value: -"Daily budget in account currency."New value: +"Дневной бюджет в валюте аккаунта."
      • changedInput schema / properties / dateEnd / description
        Previous value: -"End date YYYY-MM-DD."New value: +"Дата окончания, YYYY-MM-DD."
      • changedInput schema / properties / dateStart / description
        Previous value: -"Start date YYYY-MM-DD."New value: +"Дата начала, YYYY-MM-DD."
      • changedInput schema / properties / extra / description
        Previous value: -"Extra fields merged into the body verbatim."New value: +"Дополнительные поля, подмешиваемые в тело запроса как есть."
      • changedInput schema / properties / maxPrice / description
        Previous value: -"Bid cap in account currency."New value: +"Предельная ставка в валюте аккаунта."
      • changedInput schema / properties / name / description
        Previous value: -"Ad group name."New value: +"Название группы объявлений."
      • changedInput schema / properties / objective / description
        Previous value: -"Group objective, e.g. site_conversions, leadads, traffic."New value: +"Цель группы, например site_conversions, leadads, traffic."
      • changedInput schema / properties / price / description
        Previous value: -"Price per optimized event, in account currency."New value: +"Цена оптимизируемого события в валюте аккаунта."
      • changedInput schema / properties / targetings / description
        Previous value: -"Targeting structure, sent verbatim."New value: +"Структура таргетинга, отправляется как есть."
    • Changedcreate_ad_plan9 fields changed
      • changedInput schema / properties / autobiddingMode / description
        Previous value: -"Auction strategy, e.g. max_goals, fixed, second_price_mean."New value: +"Стратегия аукциона, например max_goals, fixed, second_price_mean."
      • changedInput schema / properties / budgetLimit / description
        Previous value: -"Total budget in account currency."New value: +"Общий бюджет в валюте аккаунта."
      • changedInput schema / properties / budgetLimitDay / description
        Previous value: -"Daily budget in account currency."New value: +"Дневной бюджет в валюте аккаунта."
      • changedInput schema / properties / dateEnd / description
        Previous value: -"End date YYYY-MM-DD."New value: +"Дата окончания, YYYY-MM-DD."
      • changedInput schema / properties / dateStart / description
        Previous value: -"Start date YYYY-MM-DD."New value: +"Дата начала, YYYY-MM-DD."
      • changedInput schema / properties / extra / description
        Previous value: -"Extra ad plan fields merged into the body (e.g. priced_goal, pricelist_id)."New value: +"Дополнительные поля кампании, подмешиваемые в тело запроса (например, priced_goal, pricelist_id)."
      • changedInput schema / properties / maxPrice / description
        Previous value: -"Bid cap in account currency."New value: +"Предельная ставка в валюте аккаунта."
      • changedInput schema / properties / name / description
        Previous value: -"Ad plan name."New value: +"Название кампании."
      • changedInput schema / properties / objective / description
        Previous value: -"Campaign objective, e.g. site_conversions, leadads, traffic."New value: +"Цель кампании, например site_conversions, leadads, traffic."
    • Changedcreate_banner6 fields changed
      • changedInput schema / properties / adGroupId / description
        Previous value: -"Parent ad group id."New value: +"Id родительской группы объявлений."
      • changedInput schema / properties / content / description
        Previous value: -"Creative content references (uploaded media ids)."New value: +"Ссылки на содержимое креатива (id загруженных медиа)."
      • changedInput schema / properties / extra / description
        Previous value: -"Extra banner fields merged into the body verbatim."New value: +"Дополнительные поля объявления, подмешиваемые в тело запроса как есть."
      • changedInput schema / properties / name / description
        Previous value: -"Banner name."New value: +"Название объявления."
      • changedInput schema / properties / textblocks / description
        Previous value: -"Text blocks, e.g. {\"title\":{\"text\":\"...\"},\"text\":{\"text\":\"...\"}}."New value: +"Текстовые блоки, например {\"title\":{\"text\":\"...\"},\"text\":{\"text\":\"...\"}}."
      • changedInput schema / properties / urls / description
        Previous value: -"Link objects, e.g. {\"primary\":{\"url\":\"https://...\"}}."New value: +"Объекты ссылок, например {\"primary\":{\"url\":\"https://...\"}}."
    • Addedfinish_login
    • Changedget_regions2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max regions to return after filtering. Default 50."New value: +"Сколько регионов вернуть после фильтрации. По умолчанию 50."
      • changedInput schema / properties / query / description
        Previous value: -"Case-insensitive substring to filter region names (e.g. \"Москва\")."New value: +"Подстрока для фильтра по названию региона, без учёта регистра (например, «Москва»)."
    • Changedget_statistics11 fields changed
      • changedInput schema / properties / autoPaginate / description
        Previous value: -"Fetch all pages by following offset/count."New value: +"Забрать все страницы, идя по offset/count."
      • changedInput schema / properties / dateFrom / description
        Previous value: -"Start date YYYY-MM-DD (required for day/week/month)."New value: +"Дата начала, YYYY-MM-DD (обязательна для day/week/month)."
      • changedInput schema / properties / dateTo / description
        Previous value: -"End date YYYY-MM-DD (required for day/week/month)."New value: +"Дата окончания, YYYY-MM-DD (обязательна для day/week/month)."
      • changedInput schema / properties / entity / description
        Previous value: -"Object type to report on. Default banners."New value: +"Тип объектов для отчёта. По умолчанию banners."
      • changedInput schema / properties / ids / description
        Previous value: -"Limit the report to these object ids (of the chosen entity)."New value: +"Ограничить отчёт этими id объектов (выбранного entity)."
      • changedInput schema / properties / limit / description
        Previous value: -"Max objects per page (<=250)."New value: +"Сколько объектов на страницу (не больше 250)."
      • changedInput schema / properties / metrics / description
        Previous value: -"Metric groups to include, e.g. base, events, video. Defaults to the API default."New value: +"Группы метрик в отчёте, например base, events, video. По умолчанию — набор API."
      • changedInput schema / properties / offset / description
        Previous value: -"Pagination offset (objects to skip)."New value: +"Смещение постраничной выдачи (сколько объектов пропустить)."
      • changedInput schema / properties / order / description
        Previous value: -"Sort direction for sortBy. Default desc."New value: +"Направление сортировки для sortBy. По умолчанию desc."
      • changedInput schema / properties / period / description
        Previous value: -"Grouping: summary (whole range, default), or day/week/month for trends."New value: +"Группировка: summary (весь период, по умолчанию) либо day/week/month для динамики."
      • changedInput schema / properties / sortBy / description
        Previous 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 по метрике)."
    • Changedget_user_info1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"User fields to return. Defaults to a common set."New value: +"Поля пользователя в ответе. По умолчанию — базовый набор."
    • Changedlist_ad_groups7 fields changed
      • changedInput schema / properties / adPlanIds / description
        Previous value: -"Filter by parent ad plan ids."New value: +"Фильтр по id родительских кампаний."
      • changedInput schema / properties / autoPaginate / description
        Previous value: -"Fetch all pages by following offset/count (ignores limit as a total cap)."New value: +"Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов)."
      • changedInput schema / properties / fields / description
        Previous value: -"Ad group fields to return (add \"targetings\" for the full targeting object)."New value: +"Поля группы объявлений в ответе (с «targetings» вернётся полный объект таргетинга)."
      • changedInput schema / properties / ids / description
        Previous value: -"Filter by ad group ids."New value: +"Фильтр по id групп объявлений."
      • changedInput schema / properties / limit / description
        Previous value: -"Max objects per page (<=250)."New value: +"Сколько объектов на страницу (не больше 250)."
      • changedInput schema / properties / offset / description
        Previous value: -"Pagination offset (objects to skip)."New value: +"Смещение постраничной выдачи (сколько объектов пропустить)."
      • changedInput schema / properties / statuses / description
        Previous value: -"Filter by status."New value: +"Фильтр по статусу."
    • Changedlist_ad_plans6 fields changed
      • changedInput schema / properties / autoPaginate / description
        Previous value: -"Fetch all pages by following offset/count (ignores limit as a total cap)."New value: +"Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов)."
      • changedInput schema / properties / fields / description
        Previous value: -"Ad plan fields to return."New value: +"Поля кампании в ответе."
      • changedInput schema / properties / ids / description
        Previous value: -"Filter by ad plan ids."New value: +"Фильтр по id кампаний."
      • changedInput schema / properties / limit / description
        Previous value: -"Max objects per page (<=250)."New value: +"Сколько объектов на страницу (не больше 250)."
      • changedInput schema / properties / offset / description
        Previous value: -"Pagination offset (objects to skip)."New value: +"Смещение постраничной выдачи (сколько объектов пропустить)."
      • changedInput schema / properties / statuses / description
        Previous value: -"Filter by status."New value: +"Фильтр по статусу."
    • Changedlist_banners7 fields changed
      • changedInput schema / properties / adGroupIds / description
        Previous value: -"Filter by parent ad group ids."New value: +"Фильтр по id родительских групп объявлений."
      • changedInput schema / properties / autoPaginate / description
        Previous value: -"Fetch all pages by following offset/count (ignores limit as a total cap)."New value: +"Забрать все страницы, идя по offset/count (limit при этом не ограничивает общее число объектов)."
      • changedInput schema / properties / fields / description
        Previous value: -"Banner fields to return."New value: +"Поля объявления в ответе."
      • changedInput schema / properties / ids / description
        Previous value: -"Filter by banner ids."New value: +"Фильтр по id объявлений."
      • changedInput schema / properties / limit / description
        Previous value: -"Max objects per page (<=250)."New value: +"Сколько объектов на страницу (не больше 250)."
      • changedInput schema / properties / offset / description
        Previous value: -"Pagination offset (objects to skip)."New value: +"Смещение постраничной выдачи (сколько объектов пропустить)."
      • changedInput schema / properties / statuses / description
        Previous value: -"Filter by status."New value: +"Фильтр по статусу."
    • Addedlogout
    • Changedraw_request5 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"JSON body for POST requests."New value: +"JSON-тело для POST-запросов."
      • changedInput schema / properties / confirmWrite / description
        Previous value: -"Must be true for a write (POST or DELETE)."New value: +"Должен быть true для записи (POST или DELETE)."
      • changedInput schema / properties / method / description
        Previous value: -"HTTP method. Default GET."New value: +"HTTP-метод. По умолчанию GET."
      • changedInput schema / properties / path / description
        Previous 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\"."
      • changedInput schema / properties / query / description
        Previous value: -"Query string parameters (filters, fields, pagination)."New value: +"Параметры строки запроса (фильтры, поля, постраничная выдача)."
    • Addedstart_login
    • Changedupdate_ad_group8 fields changed
      • changedInput schema / properties / budgetLimit / description
        Previous value: -"Total budget in account currency."New value: +"Общий бюджет в валюте аккаунта."
      • changedInput schema / properties / budgetLimitDay / description
        Previous value: -"Daily budget in account currency."New value: +"Дневной бюджет в валюте аккаунта."
      • changedInput schema / properties / dateEnd / description
        Previous value: -"New end date YYYY-MM-DD."New value: +"Новая дата окончания, YYYY-MM-DD."
      • changedInput schema / properties / extra / description
        Previous value: -"Extra fields merged into the body verbatim."New value: +"Дополнительные поля, подмешиваемые в тело запроса как есть."
      • changedInput schema / properties / id / description
        Previous value: -"Ad group id to update."New value: +"Id изменяемой группы объявлений."
      • changedInput schema / properties / maxPrice / description
        Previous value: -"Bid cap in account currency."New value: +"Предельная ставка в валюте аккаунта."
      • changedInput schema / properties / name / description
        Previous value: -"New name."New value: +"Новое название."
      • changedInput schema / properties / targetings / description
        Previous value: -"Replacement targeting structure, sent verbatim."New value: +"Новая структура таргетинга взамен прежней, отправляется как есть."
    • Changedupdate_ad_plan7 fields changed
      • changedInput schema / properties / budgetLimit / description
        Previous value: -"Total budget in account currency."New value: +"Общий бюджет в валюте аккаунта."
      • changedInput schema / properties / budgetLimitDay / description
        Previous value: -"Daily budget in account currency."New value: +"Дневной бюджет в валюте аккаунта."
      • changedInput schema / properties / dateEnd / description
        Previous value: -"New end date YYYY-MM-DD."New value: +"Новая дата окончания, YYYY-MM-DD."
      • changedInput schema / properties / extra / description
        Previous value: -"Extra fields merged into the body verbatim."New value: +"Дополнительные поля, подмешиваемые в тело запроса как есть."
      • changedInput schema / properties / id / description
        Previous value: -"Ad plan id to update."New value: +"Id изменяемой кампании."
      • changedInput schema / properties / maxPrice / description
        Previous value: -"Bid cap in account currency."New value: +"Предельная ставка в валюте аккаунта."
      • changedInput schema / properties / name / description
        Previous value: -"New name."New value: +"Новое название."
    • Changedupdate_banner5 fields changed
      • changedInput schema / properties / extra / description
        Previous value: -"Extra fields merged into the body verbatim."New value: +"Дополнительные поля, подмешиваемые в тело запроса как есть."
      • changedInput schema / properties / id / description
        Previous value: -"Banner id to update."New value: +"Id изменяемого объявления."
      • changedInput schema / properties / name / description
        Previous value: -"New name."New value: +"Новое название."
      • changedInput schema / properties / textblocks / description
        Previous value: -"Replacement text blocks, sent verbatim."New value: +"Новые текстовые блоки взамен прежних, отправляются как есть."
      • changedInput schema / properties / urls / description
        Previous value: -"Replacement link objects, sent verbatim."New value: +"Новые объекты ссылок взамен прежних, отправляются как есть."
  4. 4 tool updatesv1.1.4
    • Changedcreate_ad_group3 fields changed
      • removedInput schema / properties / dateEnd / $ref
        Removed value: -"#/properties/dateStart"
      • addedInput schema / properties / dateEnd / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / dateEnd / type
        Added value: +"string"
    • Changedcreate_ad_plan3 fields changed
      • removedInput schema / properties / dateEnd / $ref
        Removed value: -"#/properties/dateStart"
      • addedInput schema / properties / dateEnd / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / dateEnd / type
        Added value: +"string"
    • Addedget_balance
    • Changedget_statistics3 fields changed
      • removedInput schema / properties / dateTo / $ref
        Removed value: -"#/properties/dateFrom"
      • addedInput schema / properties / dateTo / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / dateTo / type
        Added value: +"string"
  5. 17 tool updatesv1.1.3
    • First observedad_group_action
    • First observedad_plan_action
    • First observedbanner_action
    • First observedcreate_ad_group
    • First observedcreate_ad_plan
    • First observedcreate_banner
    • First observedget_regions
    • First observedget_statistics
    • First observedget_throttling
    • First observedget_user_info
    • First observedlist_ad_groups
    • First observedlist_ad_plans
    • First observedlist_banners
    • First observedraw_request
    • First observedupdate_ad_group
    • First observedupdate_ad_plan
    • First observedupdate_banner

TDQS

A3.9/5.0

Scored across 23 tools

Disambiguation4/5

Each resource (ad_plan, ad_group, banner) has a clear list/create/update/action split, and descriptions explicitly cross-reference the *_action tools for status changes so update vs action boundaries are documented. The only real overlap is raw_request, which intentionally duplicates every endpoint as an escape hatch, plus mild potential confusion between update_* and *_action for the same object.

Naming Consistency3/5

Everything is snake_case, but verb conventions vary: three different patterns are used for the same resource (list_ad_plans, create_ad_plan, update_ad_plan, ad_plan_action). Bare verbs (logout, raw_request) and noun-style names (auth_status, *_action) mixed with verb_noun reduce predictability, though it stays readable.

Tool Count4/5

23 tools is on the heavy side, but the surface maps cleanly onto three resource types (each with list/create/update/action), plus media upload, statistics, auth lifecycle, and admin helpers. No obvious filler tools; each earns a place for a real ads platform.

Completeness4/5

Core lifecycle is covered: list/create/update/status-change for campaigns, groups, and banners, plus stats, image upload, throttling, auth, and balance. Minor gaps exist (no dedicated get-single calls, only regions for targeting enumerations like interests/packages, no audience or keyword management), but raw_request lets agents reach uncovered endpoints.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    MCP server for VK Ads API enabling management of campaigns, ads, statistics, targeting, and budgets through natural language.
    8
    10 npm
    5
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server for analyzing VK Ads campaigns, listing ad structures, retrieving statistics, and generating optimization recommendations.
    8
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP 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
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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 npm
    6
    Apache 2.0