Avito Ads MCP
This server provides read and limited write access to Avito Ads accounts, controlled by a weekly API point quota (balance reported with each response). Key capabilities:
Read campaigns, ad groups, creatives with filters, pagination, and details (status, budget, payment model, flight dates).
Statistics for campaigns, groups, and creatives: daily/total impressions, clicks, CTR, spend, CPM, CPC, video quartiles, VTR (up to 100 days).
Edit ad group budgets and bids (only writable fields on ad objects).
Account management: view account info/balances, list/create child accounts (with balances), transfer real or bonus rubles (irreversible).
User access control: list, add, change roles, or remove users.
ORD compliance: create and list advertisers/contracts for Russian ad-marking law (append-only, no edits/deletes).
Sandbox testing: create test accounts to practice writes without real money.
Raw API access: call any Avito Ads endpoint directly with SSRF protection and write confirmations.
Limitations: campaigns, groups, and creatives cannot be created/paused/deleted; targeting and creative uploads are unsupported; money transfers are irreversible; ORD records are append-only.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Avito Ads MCPShow me the campaigns of my Avito account and last week's spend per group."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Avito Ads MCP
A1 Avito Ads MCP connects an AI app to your Avito Ads advertising account. It helps you review campaigns and statistics, manage a group's budget and bid, and work with agency balances, access rights, and ORD documents — in natural language.
This is not the Avito seller API: the server does not work with items, messaging, orders, or seller ad promotion. It works only with display and performance campaigns in the Avito Ads advertising account.
25 tools. Campaigns, groups, creatives, statistics, balance, child accounts, users, and ORD documents.
Narrow campaign changes. The API only allows changing a group's budget and bid; you cannot create, edit, pause, or delete campaigns, groups, or creatives.
Irreversible operations are visible. Money or bonus transfers, user deletion, and raw API requests are marked as destructive.
Weekly API budget. Every call spends points; the server returns the
apiPointBalanceremaining with each result.
Start with a request that only reads data:
Show me the campaigns in my Avito account and last week's spend by ad group.
Connect the server · See scenarios · Open technical documentation
See it work in a minute
You: Show me the campaigns in my Avito account and last week's spend by ad group.
Assistant: Shows campaigns, groups, spend, clicks, and impressions. Nothing changes.
You: Prepare a bid change for group 101 to 350 rubles.
Assistant: Shows the account, group, current and new bid, then asks for confirmation.
You: Confirmed.
Assistant: Changes the bid for that group only. The campaign, creatives, and other groups are unchanged.
Related MCP server: VK Ads MCP
Contents
Quick start
You need Node.js 20+, a Client Key, a Client Secret, and the Avito Ads advertising account ID. An account administrator role is required to issue access.
Add the server to your AI app.
Send the safe first request above.
In Settings → Plugins → MCP servers, click Add server, then add npx -y mcp-avito-ads@latest with AVITO_ADS_CLIENT_ID, AVITO_ADS_CLIENT_SECRET, and AVITO_ADS_ACCOUNT_ID.
codex mcp add avito-ads \
--env AVITO_ADS_CLIENT_ID=your_client_key \
--env AVITO_ADS_CLIENT_SECRET=your_client_secret \
--env AVITO_ADS_ACCOUNT_ID=your_account_id \
-- npx -y mcp-avito-ads@latest
codex mcp listclaude mcp add \
--env AVITO_ADS_CLIENT_ID=your_client_key \
--env AVITO_ADS_CLIENT_SECRET=your_client_secret \
--env AVITO_ADS_ACCOUNT_ID=your_account_id \
--transport stdio --scope user avito-ads \
-- npx -y mcp-avito-ads@latest
claude mcp listOpen Settings → Developer → Edit Config and add:
{"mcpServers":{"avito-ads":{"command":"npx","args":["-y","mcp-avito-ads@latest"],"env":{"AVITO_ADS_CLIENT_ID":"your_client_key","AVITO_ADS_CLIENT_SECRET":"your_client_secret","AVITO_ADS_ACCOUNT_ID":"your_account_id"}}}}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. Claude Desktop MCP documentation
Add {"mcpServers":{"avito-ads":{"type":"stdio","command":"npx","args":["-y","mcp-avito-ads@latest"],"env":{"AVITO_ADS_CLIENT_ID":"your_client_key","AVITO_ADS_CLIENT_SECRET":"your_client_secret","AVITO_ADS_ACCOUNT_ID":"your_account_id"}}}} to ~/.cursor/mcp.json on macOS/Linux or %USERPROFILE%\.cursor\mcp.json on Windows. Cursor MCP documentation
Run MCP: Open User Configuration and add:
{"servers":{"avito-ads":{"type":"stdio","command":"npx","args":["-y","mcp-avito-ads@latest"],"env":{"AVITO_ADS_CLIENT_ID":"${input:avito_client_id}","AVITO_ADS_CLIENT_SECRET":"${input:avito_client_secret}","AVITO_ADS_ACCOUNT_ID":"${input:avito_account_id}"}}},"inputs":[{"type":"promptString","id":"avito_client_id","description":"Avito Ads Client Key"},{"type":"promptString","id":"avito_client_secret","description":"Avito Ads Client Secret","password":true},{"type":"promptString","id":"avito_account_id","description":"ID рекламного аккаунта"}]}Check the server with the MCP: List Servers command. VS Code MCP documentation
What you can delegate
Show campaigns, groups, creatives, statuses, and statistics for a period.
Compare spend, CTR, CPM, CPC, or VTR across groups and creatives.
Check the balance and child accounts of the agency.
Prepare a budget or bid change for a single group.
Create an advertiser and an ORD contract, first showing the details being sent.
Add a user, change their role, or revoke access after confirmation.
What can change
Operation | What happens | Confirmation boundary |
Campaigns, groups, creatives, statistics, balance, users, and ORD | Reads account data | Changes nothing |
Group budget or bid | Changes one of the two available API group fields | Changes the ad group |
User and role | Grants access or changes a role | Changes account access |
Advertiser, contract, child, or sandbox account | Creates a new record | Irreversibly creates an object |
Money or bonus transfer, user deletion | Changes the balance or removes access | Destructive and irreversible |
Raw API request | May change data with | Potentially destructive |
Campaigns, groups, and creatives cannot be created, edited, paused, archived, or deleted through this API. Creatives and targeting are also not writable.
Getting access
Open the Avito Ads account as a user with the administrator role.
Create an API app and copy the Client Key and Client Secret.
Copy the advertising account ID.
Pass them as
AVITO_ADS_CLIENT_ID,AVITO_ADS_CLIENT_SECRET,AVITO_ADS_ACCOUNT_ID.
The server obtains a Bearer token via OAuth2 client_credentials. Store the Client Secret like a password. The account ID is set by configuration: tools cannot accidentally switch to another account.
To rehearse writes, you can set AVITO_ADS_ENVIRONMENT=sandbox. The sandbox is not a full copy of production: for example, the balance is unavailable there.
Configuration
Variable | Required | Description |
| Yes | Client Key of the API app. |
| Yes | Client Secret of the API app. |
| Yes | Advertising account ID. |
| No |
|
| No | Request timeout; defaults to |
| No | 429 retries; defaults to |
Data, limits, and background work
Weekly point budget. Points are refilled on Monday at 00:00 UTC. One long report of up to 100 days is usually more economical than a series of short ones; the server shows
apiPointBalancewith every result.Transient errors. On 429, the error returns
Retry-Afterand the remaining points. Writes are not retried after a network or 5xx error, so money is not transferred twice.No continuous monitoring. The server only runs when called. If the AI app supports scheduled jobs, it can periodically collect statistics and the point balance.
Anonymous telemetry. It never includes secrets, account data, arguments, or prompts; disable with
ASKADS_TELEMETRY=0.
Technical documentation
MCP capabilities catalog — pages by user task for each tool.
Support
Found a bug or missing a scenario? Create an issue or write to Telegram.
Available Tools
25 toolsadd_userВыдать пользователю доступAIdempotent
Выдаёт существующему пользователю Авито доступ к рекламному аккаунту с указанной ролью. userId — числовой id пользователя Авито; пригласить по почте или телефону и создать аккаунт Авито этот инструмент не может. Если доступ уже есть, роль меняется через set_user_role. Возвращает подтверждение API плюс apiPointBalance.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | admin — полный доступ, включая пользователей, переводы денег и правки кампаний; viewer — только чтение. | |
| userId | Yes | Числовой id пользователя Авито, которому выдаётся доступ, например 94235311. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey mutating, idempotent, non-destructive behavior. The description adds useful context beyond that: it returns API confirmation plus apiPointBalance, and it cannot create or invite users. It doesn't detail duplicate-access error behavior, but with idempotentHint=true the retry story is already covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with the action and scope first, followed by a parameter/limitation note, then alternative and return value. The parameter restatement is slightly redundant with the schema but not wasteful enough to lower further.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with rich schema coverage and annotations, the description covers purpose, limitation, alternative, and return value. It could note error behavior on duplicate access, but idempotentHint already addresses retry safety. Overall sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions are already detailed (userId format, role enum with admin/viewer semantics). The description restates that userId is numeric but does not add significant meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb and resource: 'Выдаёт существующему пользователю Авито доступ к рекламному аккаунту с указанной ролью.' It clearly differentiates from sibling set_user_role by saying role changes for existing access go through that tool, and it disclaims invitation/account-creation capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the precondition (user must already exist with Avito userId), names the alternative for existing access (set_user_role), and states what the tool cannot do (invite by email/phone or create an account). This gives an agent clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaign_statsСтатистика кампанииARead-onlyIdempotent
Статистика ОДНОЙ кампании за период дат с разбивкой по группам и креативам: {campaign, groups[], creatives[]}. У каждой сущности есть data[] (по строке на день, с отметкой timestamp) и totalData (итог за период). Метрики в строке: views (показы), clicks (клики), ctr, spend (расход), spendBonus, cpm, cpc, а для видеокампаний ещё videoViews25/50/75/100, q25/q50/q75 и vtr; деньги в рублях, коэффициенты передаются как есть. Период включает обе границы, формат YYYY-MM-DD, длительность не больше 100 дней. Сводить несколько кампаний вместе не умеет, гранулярности мельче дня нет; campaignId даёт list_campaigns. Тратит недельные баллы API; apiPointBalance в ответе — остаток до пополнения квоты в понедельник в 00:00 UTC, поэтому один широкий период предпочтительнее многих узких вызовов.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней. | |
| dateFrom | Yes | Первый день периода, включительно (YYYY-MM-DD). | |
| campaignId | Yes | Кампания, по которой строится отчёт. Id можно найти через list_campaigns. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already mark the tool as read-only, idempotent, and non-destructive, the description adds substantial behavioral context: the response shape (data[] and totalData), exact metric set, currency (rubles), date semantics (inclusive, max 100 days), the inability to merge campaigns, per-day granularity, the API credit cost and apiPointBalance field, and a recommendation to prefer wide periods. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient — every sentence adds information (metrics, units, period limits, limitations, quota behavior). It is slightly longer than strictly necessary and could be split into bullets, but no sentence is filler, so it remains well-structured and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with the schema (all 3 parameters documented) and annotations (readOnly, idempotent), the description fully covers the tool: response shape (data[] and totalData), metrics and units, date handling, limitations, campaignId source, and API quota implications. There is no ambiguity left for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters at 100% coverage, so the baseline is 3. The description adds meaningful context: the inclusive period semantics, max 100 days, the source of campaignId (list_campaigns), and the trade-off between wide vs. narrow periods due to API quota. This extra context justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (returns statistics) and resource (a single campaign), enumerates the metrics returned (views, clicks, ctr, spend, cpm, cpc, video metrics), and explicitly differentiates itself from sibling tools by noting it cannot aggregate multiple campaigns or go below daily granularity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it handles one campaign over a date range, the period is inclusive up to 100 days, campaignId comes from list_campaigns, and it advises using one wide period over many narrow calls due to weekly API quota. It does not explicitly say 'use group_stats instead for per-group granularity,' but the limitation 'cannot merge multiple campaigns' and 'no finer-than-day granularity' make the boundaries clear. The quota hint effectively guides call batching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_group_budgetИзменить бюджет группы объявленийAIdempotent
Задаёт бюджет одной группы объявлений в рублях (не меньше 1). Значение заменяет текущий бюджет, а не прибавляется к нему, поэтому повторный вызов безопасен. Принимают его только группы с ручным управлением ставками, остальным API отказывает. Возвращает подтверждение API плюс apiPointBalance. Изменить бюджет кампании, ставку (для неё есть change_group_price) или статус группы нельзя — приостановить, возобновить или удалить группу этот API вообще не умеет. Текущий бюджет стоит сначала посмотреть через list_groups.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | Yes | Новый бюджет в рублях, не меньше 1. Заменяет текущее значение. | |
| groupId | Yes | Id изменяемой группы объявлений, из list_groups. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the budget replaces the current value (not adds to it), making repeated calls safe, which aligns with the idempotentHint annotation. It also mentions the API's refusal for non-manual groups and that it returns confirmation plus apiPointBalance. While annotations already indicate idempotency and non-destructiveness, the description adds specific behavioral details about replacement semantics and API restrictions, which is valuable. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action and key constraint (minimum 1). It then provides important behavioral details and usage guidance without unnecessary fluff. It's slightly longer than necessary but each sentence adds value, covering replacement semantics, manual management requirement, return value, and exclusions. Well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (2 params, no output schema, no nested objects), the description covers the essential aspects: what it does, constraints, prerequisites, and what it doesn't do. It also suggests a related tool for checking current budget. The only minor gap is not describing the exact format of the confirmation response, but that's not critical for invocation. Overall, it's complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for both parameters (budget and groupId) with constraints and source hints. The description adds minimal extra meaning beyond the schema, such as clarifying that budget replaces the current value and that groupId comes from list_groups. Since schema coverage is 100%, the baseline is 3, and the description doesn't significantly enhance parameter understanding beyond what's already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: setting a budget for one ad group in rubles, with a minimum of 1. It specifies the resource (ad group) and the action (change budget), and distinguishes it from related tools like change_group_price and list_groups. The description is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: for groups with manual bid management, and notes that the API rejects others. It also mentions that to change campaign budget, bid, or group status, other tools are needed, and suggests checking the current budget via list_groups first. This provides clear usage context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_group_priceИзменить ставку группы объявленийAIdempotent
Задаёт ставку одной группы объявлений (в API она называется price) в рублях (не меньше 1). Единица зависит от paymentModel группы: рубли за 1000 показов при CPM, рубли за клик при CPC. Значение заменяет текущую ставку, а не прибавляется к ней, поэтому повторный вызов безопасен. Принимают его только группы с ручным управлением ставками. Возвращает подтверждение API плюс apiPointBalance. Изменить бюджет (для него есть change_group_budget) или статус группы нельзя — приостановить, возобновить или удалить группу этот API вообще не умеет. Текущую ставку показывает поле price в list_groups.
| Name | Required | Description | Default |
|---|---|---|---|
| price | Yes | Новая ставка в рублях, не меньше 1. Заменяет текущее значение. | |
| groupId | Yes | Id изменяемой группы объявлений, из list_groups. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint=false/idempotentHint=true annotations by explaining the value is a replacement, not an increment ('replaces the current bid, not adds to it, so calling again is safe'). It discloses the paymentModel-dependent unit semantics, the manual-bid prerequisite, and the return payload (API confirmation plus apiPointBalance), deepening the agent's understanding of side effects and dependencies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but efficient — every sentence earns its place, covering idempotency, prerequisites, returns, and cross-references to sibling tools without fluff. The Russian original is long and slightly run-on, reading as one wall of text rather than structured points, but it remains well under a reasonable length for the depth of context delivered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param tool with no enums or nested objects, the description is thorough: constraints, idempotency, side effects, return value, and negative capabilities are all covered. Minor gaps remain — no explicit mention of auth requirements, concurrency, or rate limits — though the openWorldHint and lack of an output schema mean the description covers the critical call/decision logic fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds notable meaning beyond the schema: it explains the price unit depends on the group's paymentModel (rubles per 1000 impressions for CPM vs. per click for CPC), and points to list_groups as the source for groupId. This is genuinely useful enrichment, though the schema already carries most of the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Sets a bid for one ad group (called price in the API) in rubles,' which states exact action, target, and unit. It distinguishes itself from the sibling change_group_budget by name, and clarifies the scope ('one ad group') so the agent cannot confuse it with campaign-level operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use conditions ('only groups with manual bid management accept it') and names the exact alternative for budget changes ('for that there is change_group_budget'). It also enumerates what the API cannot do (pause, resume, delete, change budget), both excluding irrelevant cases and routing the agent to the correct sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_advertiserЗарегистрировать рекламодателя (ОРД)A
Регистрирует рекламодателя (контрагента ОРД) под аккаунтом и возвращает {id} плюс apiPointBalance (остаток недельных баллов API). На этот id ссылаются кампании и договоры. Юридические реквизиты должны совпадать с госреестром: inn (10 цифр для ul, 12 для ip), ogrn и оба адреса; kpp — только для юрлиц (ul). legalRole задаёт роль по ОРД: rd (рекламодатель), ra (агентство), rr (распространитель). Эндпоинтов изменения и удаления нет: ошибочного рекламодателя можно только заместить новым, поэтому сначала стоит поискать готовую запись через list_advertisers.
| Name | Required | Description | Default |
|---|---|---|---|
| inn | Yes | ИНН: 10 цифр для юрлица (ul), 12 для ИП (ip). | |
| kpp | No | КПП. Только для юрлиц (ul); для ip опускается. | |
| ogrn | Yes | Государственный регистрационный номер (ОГРН для ul, ОГРНИП для ip). | |
| longName | Yes | Полное юридическое наименование, например "Общество с ограниченной ответственностью Реклама". | |
| legalRole | Yes | Роль контрагента по ОРД: rd (рекламодатель), ra (агентство), rr (распространитель). | |
| legalType | Yes | Тип юридического лица: ul (юрлицо) или ip (ИП). | |
| shortName | Yes | Краткое юридическое наименование, например "ООО Реклама". | |
| legalAddress | Yes | Юридический адрес. | |
| actualAddress | Yes | Фактический (почтовый) адрес; если он совпадает с legalAddress, повторяется тот же. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that there are no update/delete endpoints, that mistakes must be replaced with new records, that legal details must match the state registry, and that creation consumes API points (apiPointBalance). It does not mention any side effects on other resources or auth requirements, but given the annotations already indicate non-read-only and non-idempotent, the additional info is useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but somewhat lengthy, packing multiple important details into one block. It is not repetitive or tautological, and the key facts (return value, no-update caveat, legal checks) are clearly stated without redundancy. Slightly overexplained but justifiable given the domain complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides a complete operational picture: creation under the account, return value with id and balance, the id's role in other entities, legal validation rules, and guidance to check existing records first. This is sufficient for an agent to decide when to call this tool and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters with required flags and reasonable descriptionscars. The description clarifies legalRole enums, kpp conditionality for ul vs ip, and the inn digit count. Addresses are minimally described but acceptable as generic strings. Could be more explicit about actualAddress matching legalAddress if identical, which is partially implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (регистрирует) and resource (рекламодателя/контрагента ОРД), specifies it returns id and apiPointBalance, and explains the significance of the id for campaigns and contracts. It distinguishes from list_advertisers, which is a search tool, so the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: because there are no update/delete endpoints, the agent is advised to first search via list_advertisers to avoid creating duplicates. This directly steers tool selection and sequencing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_child_accountСоздать дочерний аккаунт без права оплатыA
Создаёт дочерний аккаунт без права оплаты под настроенным агентским аккаунтом и возвращает {accountID, clientKey, clientSecret} — собственные учётные данные API нового аккаунта, которые выдаются только здесь, поэтому сохранить их нужно сразу. Без права оплаты означает, что аккаунт не может пополнить свой баланс сам: деньги приходят из родительского через transfer_funds. Создать аккаунт с правом оплаты, переименовать или удалить аккаунт, а также прочитать секрет заново нельзя. Два вызова создают два аккаунта.
| Name | Required | Description | Default |
|---|---|---|---|
| shortName | Yes | Отображаемое название нового дочернего аккаунта, например "ООО Ромашка". | |
| isSelfAdvertisingEnabled | Yes | Может ли новый аккаунт вести саморекламу (рекламировать собственные товары и услуги). Обязательное поле — значение указывается явно, флаг уходит в API при каждом создании. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavioral traits: credentials are shown only once (must be saved), two calls create two accounts (non-idempotent), the account cannot self-fund (money from parent), and renaming/deleting is not allowed. These go beyond the annotations and provide essential operational knowledge.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading the main action and then explaining implications. It is slightly verbose but every sentence carries relevant information about constraints, credentials, and behavior, so it remains focused and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the return values (accountID, clientKey, clientSecret) and their one-time nature, which is crucial since no output schema is provided. It also covers operational constraints, but does not mention error handling or failure scenarios, which is a minor omission for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides full descriptions for both parameters (shortName and isSelfAdvertisingEnabled), and the description does not add further clarity. With schema coverage at 100%, the baseline score of 3 is appropriate since the description offers no additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (creates a child account), the specific resource (child account without payment permission), and the key output (credentials). It differentiates from siblings by specifying 'without payment permission' and the constraint that renaming/deleting is not allowed, which sets it apart from other account-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when creating a child account that cannot pay) and mentions related tools like transfer_funds for adding money. However, it does not explicitly compare with create_sandbox_account or other potential alternatives, leaving some ambiguity about when to choose this over similar creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contractЗарегистрировать договор (ОРД)A
Регистрирует договор ОРД между аккаунтом и рекламодателем и возвращает {id} плюс apiPointBalance (остаток недельных баллов API). Набор обязательных полей зависит от type: service требует subject, isReportingRequired, date и number (cid отклоняется); intermediary — всё то же плюс object и isFundsAllocationToPrincipal (cid отклоняется); external — только cid (parentId отклоняется). Юридические реквизиты исполнителя передаются в intermediary — они обязательны, если не задан parentId; с parentId запись становится дополнительным соглашением к тому договору, и intermediary в ней быть не должно. Эндпоинтов изменения и удаления нет, поэтому ошибочный договор остаётся на аккаунте навсегда.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | No | Внешний идентификатор договора (со стороны ERID). Обязателен для типа external, для остальных отклоняется. | |
| date | No | Дата договора, YYYY-MM-DD. Обязательна для service и intermediary. | |
| type | Yes | Тип договора: service (оказание услуг), intermediary (посреднический), external (заключён вне Авито, определяется по cid). | |
| number | No | Номер договора. Обязателен для service и intermediary. | |
| object | No | Действие по договору, поле API `object`: distribution, conclude, commercial, other. Обязательно для intermediary. | |
| subject | No | Предмет договора: org-distribution, mediation, distribution, representation, other. Обязателен для service и intermediary. | |
| parentId | No | Id родительского договора. Задаётся, чтобы зарегистрировать дополнительное соглашение; тогда intermediary опускается. | |
| advertiserId | Yes | Рекламодатель, с которым заключён договор (клиент). Id даёт list_advertisers. | |
| intermediary | No | Юридические реквизиты исполнителя (посредника). Обязательны, если не задан parentId. | |
| counterpartyType | Yes | Тип контрагента — уходит в API в поле `description`: direct_with_advertiser или advertiser_intermediary. | |
| isReportingRequired | No | Нужны ли по договору акты и отчёты. Обязательно для service и intermediary. | |
| isFundsAllocationToPrincipal | No | Распределяются ли средства в пользу принципала. Обязательно для intermediary. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behaviors beyond what annotations provide: it returns {id} and apiPointBalance, and it explicitly states that erroneous contracts remain forever because there are no update/delete endpoints. Annotations only indicate readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, which don't cover irreversibility or the return payload. This added context helps the agent understand side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries necessary information: the core purpose and return value, type-specific field requirements, the parentId exception, and the irreversibility warning. It's front-loaded with the main verb and resource, then elaborates logically. No irrelevant details or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 12-parameter tool with a nested object and conditional logic, the description covers all critical aspects: return format, type-specific required fields, the special case of additional agreements, and the lack of edit/delete. It doesn't elaborate on the meaning of apiPointBalance beyond 'remainder of weekly API points', but that suffices given the absence of an output schema. Overall, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema describes every parameter (100% coverage), the description adds crucial semantic logic: it explains which fields are required for each type, when cid or parentId is rejected, and how intermediary fields interact with parentId. This is not fully captured in the schema's static descriptions and is essential for correct invocation, especially for nested objects and conditional requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact purpose: 'Регистрирует договор ОРД между аккаунтом и рекламодателем' (registers an ORD contract between an account and an advertiser). It also specifies the return value ({id} and apiPointBalance) and clearly differentiates the three contract types. As the only contract creation tool among siblings, the purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While it doesn't explicitly name alternative tools, it is the sole creation tool and the description clarifies when each contract type should be used (service, intermediary, external) and the special case of parentId for additional agreements. It also warns that there are no edit/delete endpoints, implicitly guiding the agent to be careful. The guidance is clear, though a direct 'use this when creating a contract' statement is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sandbox_accountСоздать аккаунт в песочницеA
ТОЛЬКО ПЕСОЧНИЦА: создаёт тестовый аккаунт рекламодателя и возвращает его accountID. Сервер отклоняет вызов, если не задано AVITO_ADS_ENVIRONMENT=sandbox, и такой отказ не стоит балла API. contact — непустой объект, например {"name":"Иван Иванов","email":"ivan@example.com","phone":"+79001234567"}; пустой отклоняется до отправки запроса. Два вызова создают два аккаунта. Изменить или удалить аккаунт нельзя, а сервер продолжает работать с AVITO_ADS_ACCOUNT_ID: новый id сам не подхватывается, для работы с ним его нужно прописать в конфигурации.
| Name | Required | Description | Default |
|---|---|---|---|
| inn | Yes | ИНН тестовой компании: 10 цифр для юрлица, 12 для ИП. | |
| kpp | No | КПП. Есть у юрлиц (legalType ul); у ИП его нет — тогда поле опускается. | |
| ogrn | Yes | Государственный регистрационный номер (ОГРН для юрлица, ОГРНИП для ИП). | |
| contact | Yes | Контактное лицо аккаунта; передаётся в API как есть и не может быть пустым, например {"name":"Иван Иванов","email":"ivan@example.com","phone":"+79001234567"}. | |
| longName | Yes | Полное юридическое наименование, например "Общество с ограниченной ответственностью Ромашка". | |
| legalType | No | Организационно-правовая форма: ul — юрлицо, ip — ИП. | |
| shortName | Yes | Краткое юридическое наименование, например "ООО Ромашка". | |
| legalAddress | Yes | Юридический адрес. | |
| actualAddress | Yes | Фактический почтовый адрес; может совпадать с legalAddress. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly=false, idempotent=false, and destructive=false. The description adds substantial behavioral detail: environment-gated rejection, empty-contact pre-validation, non-idempotency, account immutability, and the fact that the new accountID is not automatically picked up by AVITO_ADS_ACCOUNT_ID and must be configured manually.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the most important constraint (sandbox-only) and the core purpose. Every sentence adds a distinct behavioral fact, and the length is justified by the number of non-obvious side effects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with 9 parameters and no output schema, the description covers the return value, environment prerequisite, validation behavior, idempotency, immutability, and configuration follow-up. The schema covers parameter details, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the contact object requirement with an example and adds that an empty contact is rejected before the request, but it does not add meaning for the other eight parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'ТОЛЬКО ПЕСОЧНИЦА' and clearly states that the tool creates a test advertiser account and returns its accountID. This is a specific verb+resource with an explicit environment scope, distinguishing it from sibling tools like create_advertiser or create_child_account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says the server rejects the call unless AVITO_ADS_ENVIRONMENT=sandbox and that such a refusal does not count against the API quota. This provides clear when-to-use context, though it does not name a non-sandbox alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creative_statsСтатистика креативовARead-onlyIdempotent
Статистика по перечисленным креативам одной кампании: плоский массив, по записи на креатив ({id, name, groupId, paymentModel, campaignType, data[] по дням, totalData за период}). Метрики те же, что у campaign_stats — views (показы), clicks (клики), ctr, spend (расход), spendBonus, cpm, cpc, квартили видео, vtr, — деньги в рублях. Поле creativeIds обязательно: инструмент сужает выборку, а не перечисляет её. Период включает обе границы, формат YYYY-MM-DD, длительность не больше 100 дней. Итогов по кампании не возвращает; чтобы охватить все креативы кампании, есть campaign_stats с той же разбивкой. Тратит недельные баллы API; apiPointBalance в ответе — остаток до пополнения квоты в понедельник в 00:00 UTC, поэтому один широкий период предпочтительнее многих узких вызовов.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней. | |
| dateFrom | Yes | Первый день периода, включительно (YYYY-MM-DD). | |
| campaignId | Yes | Кампания, креативы которой попадают в отчёт. Id можно найти через list_campaigns. | |
| creativeIds | Yes | Id креативов для отчёта, например [9001]. Обязательное поле; id даёт list_creatives, а по всей кампании отчитывается campaign_stats. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive. The description adds critical behavioral context: it spends weekly API points, includes apiPointBalance in the response, enforces a 100-day period limit with inclusive boundaries, and clarifies that it narrows selection via creativeIds. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds value: purpose, output structure, metrics, constraints, and quota advice. It is front-loaded with the core function and logically organized, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description sufficiently details the return format (fields per creative, data per day, totalData), mentions metric names, currency, period rules, and the response quota field. It provides enough to call the tool correctly without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema covers all 4 parameters (100% coverage), the description adds non-obvious semantics: creativeIds narrows the selection rather than enumerates, and the period includes both boundaries with a max duration. This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides statistics for the listed creatives of one campaign, returns a flat array with per-creative fields, and lists the metrics. It distinguishes itself from campaign_stats by explicitly noting it does not return campaign totals and that campaign_stats covers all creatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the alternative: 'to cover all creatives of a campaign, there is campaign_stats'. It also advises one broad period over many narrow calls due to API point spending, providing clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_userОтозвать доступ пользователяADestructive
Отзывает доступ пользователя к рекламному аккаунту. Операция разрушительная: вернуть доступ можно только через add_user с явно указанной ролью. Аккаунт Авито этого человека, его кампании и историю расходов не удаляет. Возвращает подтверждение API плюс apiPointBalance.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | Числовой id пользователя Авито, которого нужно убрать из аккаунта, как его возвращает list_users. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the destruction is covered. The description adds valuable context: reversibility requires add_user with an explicit role, and it clarifies that the user's Avito account, campaigns, and spending history are not deleted, plus it mentions the return value (confirmation and apiPointBalance). This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the primary purpose, then the destructive consequence and restoration path, and finally the return value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one simple parameter and annotations covering safety, the description provides everything an agent needs: what it does, what it doesn't do, how to undo it, and what it returns. No output schema exists, so mentioning the return payload is helpful. Complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already explains userId as the Avito user id as returned by list_users. The description itself adds no further parameter detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('revokes') and resource ('user access to advertising account'). It clearly distinguishes from siblings by noting that restoration is only via add_user and that it doesn't delete the account or campaigns, so an agent can tell it apart from deletion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to revoke access) and mentions add_user as the restoration alternative, but does not explicitly state exclusions or contrast with set_user_role. The context is sufficient for an agent to infer the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountРеквизиты аккаунтаARead-onlyIdempotent
Возвращает юридические реквизиты рекламного аккаунта, к которому привязан сервер: inn, kpp, ogrn, shortName, longName, legalAddress, actualAddress и блоки contact / manager. Аргументов не принимает — аккаунт задан в AVITO_ADS_ACCOUNT_ID и не выбирается для отдельного вызова. Денежных сумм не содержит (для них get_balance), данных кампаний тоже. Как и у всех инструментов здесь, в ответе есть apiPointBalance: остаток баллов API на текущую неделю (квота пополняется по понедельникам в 00:00 UTC).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is read-only, idempotent, and non-destructive. The description adds meaningful behavioral context beyond annotations: the account is server-bound, the call accepts no arguments, the response includes apiPointBalance with a weekly quota reset, and the response excludes monetary and campaign data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler: the first states purpose and fields, the second covers argument policy, and the third handles exclusions and quota behavior. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool with no output schema, the description is complete. It enumerates the returned fields, notes the universal apiPointBalance field, and explicitly states what the response does not contain, so an agent can invoke it and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4, but the description goes further by explaining why no arguments exist: the account is set in AVITO_ADS_ACCOUNT_ID and cannot be selected per call. This prevents an agent from inventing parameters and clarifies the environment-based configuration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and object: it returns the legal requisites of the server-bound advertising account, and it enumerates the exact fields (inn, kpp, ogrn, shortName, etc.). It also distinguishes itself from get_balance by explicitly stating it contains no money amounts, separating it from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly tells the agent not to pass arguments because the account is fixed by AVITO_ADS_ACCOUNT_ID, and it explicitly routes money-sum requests to get_balance. It also excludes campaign data, but it does not name a specific sibling tool for campaign data, leaving that alternative slightly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceБаланс аккаунтаARead-onlyIdempotent
Возвращает текущий баланс настроенного рекламного аккаунта в рублях: balance (реальные деньги) и bonusBalance (бонусные рубли, которые можно тратить только на рекламу). Аргументов не принимает. Это срез на текущий момент, а не история — расход за период дают инструменты статистики. Аккаунт не пополняет.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to restate safety. It adds contextual behavior: it distinguishes real money from bonus money (bonus spendable only on ads), clarifies it's a snapshot not a history stream, and explicitly states it does not top up the account. These details go beyond the annotations and give the agent useful behavioral nuance. Lacks info about rate limits or caching but that's minor for a read-only balance call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose (returns balance), specifies both fields, explains the limitation (snapshot not history), and clarifies it does not top up. Every sentence adds value, and it doesn't repeat annotation info. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument read tool, the description covers purpose, return values, temporal scope, and non-actions (no top-up). It also gestures to alternative tools (statistics) without needing to name them. The lack of an output schema is mitigated by the description explicitly stating the two fields and their meaning. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema is empty. The description confirms 'Аргументов не принимает' (takes no arguments), which is helpful confirmation given the empty schema. The baseline for a zero-parameter tool is 4, and the description meets it; there is nothing else to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current balance of a configured advertising account, distinguishes between real money (balance) and bonus money (bonusBalance), and explicitly notes it takes no arguments. It names specific fields returned with their semantics, making the purpose unambiguous. It stands apart from sibling tools like get_account (which likely returns account details) and the stats tools by stating this is a balance snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use it (current balance snapshot) and when not to: 'это срез на текущий момент, не история — расход за период дают инструменты статистики' (this is a snapshot, not history — spending over a period is provided by statistics tools). It also clarifies it does not top up the account, steering agents away from it for funding operations. This is explicit when/when-not guidance, rivaling the calibrations example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_statsСтатистика групп объявленийARead-onlyIdempotent
Статистика по перечисленным группам одной кампании: плоский массив, по записи на группу объявлений ({id, name, paymentModel, campaignType, data[] по дням, totalData за период}). Метрики те же, что у campaign_stats — views (показы), clicks (клики), ctr, spend (расход), spendBonus, cpm, cpc, квартили видео, vtr, — деньги в рублях. Поле groupIds обязательно: инструмент сужает выборку, а не перечисляет её. Период включает обе границы, формат YYYY-MM-DD, длительность не больше 100 дней. Итогов по кампании не возвращает; чтобы охватить все группы кампании, есть campaign_stats с той же разбивкой. Тратит недельные баллы API; apiPointBalance в ответе — остаток до пополнения квоты в понедельник в 00:00 UTC, поэтому один широкий период предпочтительнее многих узких вызовов.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней. | |
| dateFrom | Yes | Первый день периода, включительно (YYYY-MM-DD). | |
| groupIds | Yes | Id групп объявлений для отчёта, например [101, 102]. Обязательное поле; id даёт list_groups, а по всей кампании отчитывается campaign_stats. | |
| campaignId | Yes | Кампания, группы которой попадают в отчёт. Id можно найти через list_campaigns. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains that the tool spends weekly API points, that apiPointBalance is the balance before the quota refill on Monday 00:00 UTC, and recommends one wide period over many narrow calls. This adds meaningful operational context far beyond the annotations' readOnlyHint/openWorldHint, and it tells the agent how to handle the response's apiPointBalance field and why an open-world strategy is preferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though compact, the description packs an exceptional amount of useful context: return format, metrics list, inclusive period, persistence hint, rate limits, and a usage recommendation. It is dense but every clause earns its place; the only minor note is it's a single long paragraph that could be slightly better structured, yet it remains highly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and 4 parameters, the description covers all the essential ground: return type, metric names, period semantics, required groupIds, cross-tool references to campaign_stats/list_groups, and API quota cost. Nothing needed to call this report correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema coverage is 100%, the baseline is 3; the description earns extra credit by clarifying that groupIds 'сужает выборку' (narrows the selection), that the period is inclusive of both boundaries, and by explaining the quota economics of wide calls, which reinforces the parameter semantics beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('возвращает статистику по группам'), names the resource (ad groups of one campaign), and specifies the exact return shape (flat array, one entry per group with {id, name, paymentModel, campaignType, data[], totalData}). It explicitly distinguishes itself from campaign_stats, and the title/sibling list confirm this is a clear read/reporting tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool vs. campaign_stats ('Итогов по кампании не возвращает; чтобы охватить все группы кампании, есть campaign_stats'), explains that groupIds narrows rather than enumerates, and notes the maximum period length (100 days). The schema even cross-references list_groups and campaign_stats as data sources/alternatives, giving an agent full routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_advertisersСписок рекламодателейARead-onlyIdempotent
Возвращает одну страницу рекламодателей, зарегистрированных под аккаунтом: {total, items, page, limit, hasNextPage} плюс apiPointBalance (остаток недельных баллов API). В каждом элементе id, shortName, longName, inn, ogrn, kpp, legalAddress, actualAddress, legalType (ul|ip) и legalRole (rd|ra|rr). Сузить выдачу можно через filter.ids / filter.inns / filter.roles; полнотекстового поиска нет, совпадения по названиям придётся искать самостоятельно. limit — 1..100 (по умолчанию 20); нумерация page с 1.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Номер страницы, нумерация с 1. По умолчанию 1. | |
| limit | No | Размер страницы, 1..100. По умолчанию 20. | |
| filter | No | Фильтр страницы. Без него возвращаются все рекламодатели. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses the exact response envelope '{total, items, page, limit, hasNextPage}' plus apiPointBalance, and enumerates per-item fields including legalType and legalRole enums. This goes well beyond the readOnly/idempotent annotations by explaining pagination behavior, filtering limitations, and returned data shape, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core behavior and then packs response fields, filters, defaults, and item structure into one dense paragraph. Every sentence carries information, and the detailed field list is justified because no output schema is provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paged list tool with 3 optional parameters, nested filters, and no output schema, the description covers response envelope, item fields, filter semantics, value ranges, defaults, and search limitations. An agent has enough information to call the tool and interpret the result without additional assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description mostly restates the schema: limit 1..100 default 20, page numbering from 1, and the same filter keys. The only added semantic is the absence of full-text search, which is useful but does not substantially deepen parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Возвращает одну страницу рекламодателей, зарегистрированных под аккаунтом', giving a specific verb, resource, and pagination scope. It also details response fields, filters, and limitations, making it unambiguous which entity is returned and how this differs from contract/campaign/creative listers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the supported narrowing filters (filter.ids / filter.inns / filter.roles) and explicitly warns 'полнотекстового поиска нет, совпадения по названиям придётся искать самостоятельно', which is a clear when-not for name searches. It does not explicitly name an alternative tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaignsСписок рекламных кампанийARead-onlyIdempotent
Перечисляет рекламные кампании аккаунта постранично. Возвращает {total, items, page, limit, hasNextPage} плюс apiPointBalance — остаток недельных баллов API, которые пополняются по понедельникам в 00:00 UTC. У каждой кампании есть id, name, status, budget (рубли), paymentModel (CPM/CPC), campaignType, startDate/endDate, advertiserId, contractId, managerID и отметки времени. Поля фильтра объединяются по И, и каждый список оставляет только перечисленные в нём значения. Через этот API нельзя создать, изменить, приостановить, возобновить, заархивировать или удалить кампанию и нельзя тронуть её таргетинг — единственные доступные где-либо изменения это change_group_budget и change_group_price для группы объявлений.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Оставить кампании с этими id. | |
| page | No | Номер страницы, нумерация с 1. По умолчанию 1. | |
| limit | No | Размер страницы, 1..100. По умолчанию 20. | |
| filter | No | Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше. | |
| managers | No | Оставить кампании этих менеджеров — пользователей аккаунта (по id). | |
| statuses | No | Оставить кампании с этими статусами: draft, in_moderation, moderation_failed, partial_moderation, active, paused, stopped, finished, archived. | |
| createdAt | No | Оставить кампании, созданные в этом диапазоне: {from, to}, YYYY-MM-DD. | |
| timeFrame | No | Оставить кампании, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD. | |
| advertisers | No | Оставить кампании этих рекламодателей (по id). | |
| contractIds | No | Оставить кампании по этим договорам (по id). | |
| campaignTypes | No | Оставить только эти типы кампаний: textImage, HTML, video. | |
| paymentModels | No | Оставить только эти модели оплаты: CPM, CPC. | |
| additionalAgreementIds | No | Оставить кампании по этим дополнительным соглашениям (по id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, idempotentHint, and destructiveHint=false, and the description consistently reinforces this by stating that no modifications are possible through this API. It adds extra transparency by disclosing the API point balance mechanism, the AND-combination of filters, and the precise boundaries of allowable actions (only via change_group_budget and change_group_price). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but not bloated. It front-loads the core purpose and pagination, then lists the returned fields, then explains filtering semantics, and finally clarifies limitations. Each sentence carries useful information. The length is justified given the number of parameters and the need to explain the generic filter's behavior. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 13 parameters and no output schema, the description is remarkably complete. It details the return structure (total, items, page, limit, hasNextPage, apiPointBalance), enumerates the campaign fields, explains filter combination rules, and sets clear boundaries on what cannot be done. The presence of the openWorldHint annotation is supported by the description of pagination but not fully explored; still, the core information an agent needs to select and call this tool correctly is all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is individually documented. The description adds meaning beyond the schema by explaining the universal 'filter' parameter's pass-through behavior (additional keys are mixed in as-is) and the precedence rule between named fields and the generic filter. It also clarifies the AND logic across filter lists, which is not in the schema. This is valuable semantic context that goes beyond field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb ('Перечисляет') and object ('рекламные кампании аккаунта') and specifies pagination. It distinguishes this tool from siblings like campaign_stats and list_groups by focusing on campaign listing and explicitly stating what it cannot do. The return structure and key fields are enumerated, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly defines the tool's scope (read-only listing) and explicitly lists what cannot be done (create/update/pause/resume/archive/delete campaigns, modify targeting). It does not compare against sibling read tools such as campaign_stats, but the purpose is evident from the name and first sentence. The mention of alternative modification tools (change_group_budget, change_group_price) helps set expectations but does not directly guide when to use this list tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_child_accountsДочерние аккаунтыARead-onlyIdempotent
Перечисляет дочерние (суб-)аккаунты настроенного агентского аккаунта. Каждая запись — {account:{id,shortName}, contract}. Балансов здесь НЕТ, для них есть list_child_accounts_with_balances. Возвращает всех дочерних за один вызов: без постраничной выдачи, фильтров и поиска. apiPointBalance в любом ответе этого сервера — остаток баллов API на текущую неделю (квота пополняется по понедельникам в 00:00 UTC); по нему и стоит рассчитывать частоту вызовов.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond annotations: it states that the tool returns all child accounts in a single call (no pagination) and explains the apiPointBalance field's meaning (weekly quote reset Monday at 00:00 UTC). This enriches the agent's understanding of the tool's behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief but packs essential details: purpose, differentiation from sibling, scope (no pagination/filters/search), and the apiPointBalance interpretation. It front-loads the core function and then adds clarifying constraints. Every sentence earns its place with no redundancy, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description compensates by explicitly describing the return format: 'Каждая запись — {account:{id,shortName}, contract}.' It also notes the absence of balances, the lack of pagination, and explains the apiPointBalance field, covering operational details an agent would need. For a zero-parameter, read-only tool, this is comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema trivially covers 100% of them. The description doesn't add parameter-specific detail because there are none. Per rubric, with 0 parameters the baseline is 4. The description compensates by describing the return structure (each record as {account:{id,shortName}, contract}), though it doesn't provide additional param semantics since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Перечисляет дочерние (суб-)аккаунты настроенного агентского аккаунта' (lists child accounts of the configured agent account). It explicitly differentiates from the sibling list_child_accounts_with_balances by stating 'Балансов здесь НЕТ, для них есть list_child_accounts_with_balances.' This makes the purpose unambiguous and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus the sibling: it notes the absence of balances and directs users to list_child_accounts_with_balances for that. It also states the lack of pagination, filters, and search, clarifying the scope. Additionally, it explains the apiPointBalance field as a weekly quota, offering operational usage advice for rate-limiting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_child_accounts_with_balancesДочерние аккаунты с балансамиARead-onlyIdempotent
Тот же список, что и list_child_accounts, плюс баланс каждого дочернего аккаунта: {balance, bonusBalance} в рублях и бонусных рублях. Позволяет увидеть, у кого кончились деньги, перед transfer_funds / transfer_bonus и убедиться, что перевод дошёл. Показывает только балансы дочерних аккаунтов — баланс родительского даёт get_balance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context: it returns {balance, bonusBalance} in rubles and bonus rubles, and scopes to child accounts only. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences in Russian, front-loaded with the core purpose, then usage guidance, and a clarifying note. No redundant words or repetition of schema/annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description fully covers what is returned (balance fields), when to use it, and what it does not include (parent balance). An agent has all necessary information to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema description coverage is 100% (vacuous). Baseline for 0 params is 4; the description adds no parameter details because none are needed. Nothing is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it is the same list as list_child_accounts plus balances for each child account, and clarifies it shows only child balances, differentiating it from get_balance. The verb 'list' and resource are clearly defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit context for when to use this tool: before transfer_funds/transfer_bonus to check balances and verify transfers. It also tells the agent that parent balance should be fetched with get_balance, giving an exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contractsСписок договоровARead-onlyIdempotent
Возвращает одну страницу договоров, зарегистрированных под аккаунтом: {total, items, page, limit, hasNextPage} плюс apiPointBalance (остаток недельных баллов API). В каждом элементе id, type, number, date, subject, object (действие по договору), cid, description (тип контрагента), parentId (заполнен у дополнительных соглашений) и юридические реквизиты клиента и исполнителя. Сузить выдачу можно через filter.ids / filter.numbers / filter.clients (id рекламодателей) / filter.contractors. limit — 1..100 (по умолчанию 20); нумерация page с 1.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Номер страницы, нумерация с 1. По умолчанию 1. | |
| limit | No | Размер страницы, 1..100. По умолчанию 20. | |
| filter | No | Фильтр страницы. Без него возвращаются все договоры. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true and idempotentHint: true, and the description aligns with these—no writes or deletes are implied, consistent with destructiveHint: false. The description adds value beyond the annotations by clarifying the semantic meaning of API points ('остаток недельных баллов API'—week reset) and explaining what some response fields mean (e.g., 'description (тип контрагента)', 'parentId (заполнен у дополнительных соглашений)').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense paragraph that front-lodes the tool's purpose and response shape before covering parameters. While efficient, the long sentence is slightly run-on, and the semi-colon usage could be clearer, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple nature (a filtered list with pagination) and the rich schema, annotations, and clear description of the response structure, the description is complete. It explicitly does not detail network error handling or rate-limit behavior, but since no output schema is provided, the description's explanation of the response shape (total, items, page, limit, hasNextPage) is adequate for an agent to understand the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, documenting all three parameters (page, limit, filter) with defaults and ranges, so the baseline is 3. The description provides marginal extra context by specifying the default page size of 20 and the fact that 'filter' without parameters returns all contracts ('Без него возвращаются все договоры'), which complements rather than repeats the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a paginated list of contracts under the account, using the specific verb 'Возвращает' (returns) combined with the resource. It distinguishes itself from a potential sibling confusion by detailing its response, including a notable field 'apiPointBalance (остаток недельных баллов API)'. While it doesn't name sibling tools like list_groups or list_campaigns as alternatives, the list semantics are explicit and specific enough to be distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to use the tool including the pagination range (limit 1..100, default 20, page starting from 1) and filter options ('Сузить выдачу можно через filter.ids / filter.numbers / filter.clients...'). While it doesn't explicitly state 'use this instead of X', the context of listing contracts vs. other list tools is implicit in the resource type, and the detailed filtering and pagination guidance is sufficient for an agent to know when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_creativesСписок креативовARead-onlyIdempotent
Перечисляет креативы аккаунта — сами объявления — постранично. Возвращает {total, items, page, limit, hasNextPage} плюс apiPointBalance (остаток недельных баллов API). У каждого креатива есть id, name, title, description, buttonText, link, status, groupID, campaignID, advertiserID, paymentModel, campaignType и legalInfo (данные рекламного реестра / ERID). Только чтение: загрузить, изменить, отправить на модерацию, приостановить или удалить креатив через этот API нельзя — изменять можно только бюджет и ставку группы объявлений.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Оставить креативы с этими id. | |
| page | No | Номер страницы, нумерация с 1. По умолчанию 1. | |
| limit | No | Размер страницы, 1..100. По умолчанию 20. | |
| filter | No | Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше. | |
| groupIds | No | Оставить креативы этих групп объявлений (по id). | |
| managers | No | Оставить креативы этих менеджеров — пользователей аккаунта (по id). | |
| statuses | No | Оставить креативы с этими статусами: draft, ready_for_moderation, in_moderation, moderation_failed, erir_registration, active, paused, stopped, finished, archived. | |
| timeFrame | No | Оставить креативы, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD. | |
| advertisers | No | Оставить креативы этих рекламодателей (по id). | |
| campaignIds | No | Оставить креативы этих кампаний (по id). | |
| campaignTypes | No | Оставить только эти типы кампаний: textImage, HTML, video. | |
| paymentModels | No | Оставить только эти модели оплаты: CPM, CPC. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds: pagination behavior (returns page/limit/hasNextPage), apiPointBalance disclosure, and explicit list of what actions are NOT possible (modify/pause/delete). This exceeds annotation coverage meaningfully, though could mention rate limits (weekly API points).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single dense paragraph, front-loaded with purpose and return structure, then filters, then constraints. Efficient but slightly long due to exhaustive field listing; no waste though.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with 12 parameters and no output schema, description covers return fields, pagination, and constraints. Missing output schema is compensated by describing items. Could mention default pagination values, but schema already covers defaults. Overall complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for every parameter, including enums inline. Description reinforces filter behavior (e.g., conflict precedence for 'filter' field) but adds only marginal value beyond schema. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Перечисляет креативы аккаунта' (lists account creatives) with explicit pagination and return structure. Differentiates from siblings by naming what it returns (creatives/ads) vs campaigns/groups/stats tools. Clear verb+resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Lists all filter parameters and their semantics, implying use for filtering. Explicitly states it's read-only and what can't be done via this API. However, doesn't explicitly name sibling alternatives (like list_campaigns or creative_stats) for when to use them instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsСписок групп объявленийARead-onlyIdempotent
Перечисляет группы объявлений аккаунта постранично. Возвращает {total, items, page, limit, hasNextPage} плюс apiPointBalance (остаток недельных баллов API). Группа — тот уровень, на котором лежат деньги: в каждом элементе id, name, campaignID, status, budget и price (ставка) в рублях, paymentModel, campaignType, advertiserID, haveCreative и отметки времени. Эти два числа меняют change_group_budget / change_group_price — других изменяемых полей во всём дереве рекламных объектов нет. Создать, переименовать, приостановить, возобновить или удалить группу здесь нельзя, таргетинг групп не выведен.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Оставить группы объявлений с этими id. | |
| page | No | Номер страницы, нумерация с 1. По умолчанию 1. | |
| limit | No | Размер страницы, 1..100. По умолчанию 20. | |
| paces | No | Оставить группы с этими режимами распределения бюджета. Значения произвольные: фиксированного словаря для этого фильтра в SDK нет. | |
| filter | No | Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше. | |
| managers | No | Оставить группы этих менеджеров — пользователей аккаунта (по id). | |
| statuses | No | Оставить группы с этими статусами: draft, in_moderation, moderation_failed, will_launch_soon, active, will_stop_soon, pausing, paused, unpausing, stopped, finished, archived. | |
| timeFrame | No | Оставить группы, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD. | |
| advertisers | No | Оставить группы этих рекламодателей (по id). | |
| campaignIds | No | Оставить группы этих кампаний (по id). | |
| paymentModels | No | Оставить только эти модели оплаты: CPM, CPC. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true Fox, destructiveHint=false, etc., but the description adds valuable context: it specifies the return shape ({total, items, page, limit, hasNextPage}) and extra apiPointBalance, and clarifies that groups carry budget/price in rubles. It also warns about the arbitrary paces filter values, which is useful non-obvious behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but dense with information. It front-loads the core function and return shape, then details the response structure and constraints. It is concise enough for the information volume, though it runs sentences together; and could benefit from breaking into bullet points for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is thorough for a read-only list tool with a rich schema. With schema covering all parameters and annotations providing safety profile, the description adequately fills gaps like response structure, apiPointBalance, and the money-centric nature of groups. No critical missing information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by explaining that groups are tied to money and that 'paces' values are arbitrary (no fixed dictionary), which helps agents understand the filter. It also explains the naming convention for 'advertisers', 'managers', etc., which is not fully clear from schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists ad groups of the account with pagination, and it explicitly distinguishes itself from siblings like list_campaigns and list_creatives by focusing on the 'group' level. It also mentions that groups are the level with budget and price, which sets it apart from higher-level listing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states what the tool cannot do (create, rename, pause, resume, delete groups) and that targeting is not output. It also mentions that the only mutable fields are 'budget' and 'price', which implies when to use change_group_budget/change_group_price instead. This provides clear exclusions and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersПользователи аккаунтаARead-onlyIdempotent
Перечисляет пользователей с доступом к рекламному аккаунту — по одной записи {id, role, hasLoggedIn} на пользователя, где role это admin или viewer, а hasLoggedIn показывает, входил ли приглашённый хоть раз. Эти id принимают set_user_role и delete_user. Работает в пределах настроенного аккаунта: пользователей дочернего аккаунта не покажет. Вместе с данными возвращает apiPointBalance (остаток недельных баллов).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, so the description's contribution is the additional return detail: apiPointBalance is returned with the user data, and each user record carries role and hasLoggedIn. This adds non-obvious output behavior beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each sentence delivers a distinct piece of information: purpose, output shape, downstream compatibility, account scope, and the extra apiPointBalance field. There is no filler, repetition, or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with no output schema, the description fully documents what the tool returns: per-user id, role, and hasLoggedIn, plus apiPointBalance. It also states the scope limitation and points to downstream user-management tools, making it self-sufficient for a zero-parameter invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema confirms that at 100% coverage. Since there is nothing to describe, the description appropriately does not spend text on parameters; this is the baseline for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Перечисляет пользователей с доступом к рекламному аккаунту' and specifies the exact output shape, roles, and returned fields. It also disambiguates itself from child-account tools by explicitly stating that users of child accounts are not shown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage: list users of the configured account and use the ids for set_user_role or delete_user. It does not explicitly name an alternative sibling for child-account user listing, but the scope limitation 'users of a child account will not show' provides enough guidance for most agent decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_requestПрямой вызов API Авито РекламыADestructive
Универсальный запрос к любому пути API Авито Рекламы — для эндпоинтов, у которых нет отдельного инструмента, например GET "v1/account/{accountID}/balance" или POST "v1/account/{accountID}/campaigns". Пути задаются относительно базы API и привязаны к аккаунту: подстановка {accountID} заменяется на настроенный id аккаунта, путь с другим аккаунтом отклоняется, как и путь, выходящий за базу API. body отправляется как JSON. Через него доступны все пишущие эндпоинты — funds-transfer, bonus-transfer, delete-user и create-, — причём без клиентских проверок, которые делают отдельные инструменты, и ничего из этого не отменить; когда специальный инструмент есть, лучше взять его: transfer_funds / delete_user / create_. confirmWrite=true — явное подтверждение того, что путь может писать, поэтому перед установкой флага путь стоит проверить: POST используется и для безобидных чтений — списков и статистики, — которым флаг тоже нужен. GET выполняется без ограничений. Возвращает сырой ответ плюс apiPointBalance (остаток недельных баллов).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Тело запроса в JSON, например {"filter":{},"limit":20,"page":1} для эндпоинта списка. | |
| path | Yes | Путь API, например "v1/account/{accountID}/groups" или "v1/account/{accountID}/campaigns/123/stats". | |
| method | No | HTTP-метод. По умолчанию GET. | |
| confirmWrite | No | Для POST и DELETE должен быть true. Установка флага подтверждает, что путь может писать: funds-transfer и delete-user — такие же POST/DELETE, как и любое чтение списка. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint=false, destructiveHint=true). It explains that this tool bypasses client-side validation, that write operations are irreversible, that path binding to account is enforced, and that GET is unrestricted. It also details confirmWrite semantics for POST/DELETE. No contradictions with annotations; it adds critical safety context that the annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a long, dense paragraph with many clauses, making it verbose and somewhat difficult to parse. It front-loads the purpose but then packs multiple safety caveats and examples into one block. While every sentence has content, the lack of structure (e.g., bullet points or separate sections) hurts readability. It's adequate but not concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For such a powerful and dangerous raw-access tool with no output schema, the description covers all necessary aspects: purpose, usage, safety (irreversibility and confirmWrite), path constraints, and return value (raw response plus apiPointBalance). It could mention error handling or rate limits, but given the breadth already covered, it's quite complete. A 4 is fair since some edge-case behaviors are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description enriches the parameters substantially: it explains the {accountID} substitution in path, the meaning and requirement of confirmWrite, and that body is sent as JSON. This adds value beyond the schema's terse descriptions, earning above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: a universal raw HTTP requester for any Avito Ads API path, and explicitly distinguishes it from specialized tools by saying 'for endpoints that don't have a separate tool' and naming alternatives like transfer_funds, delete_user, and create_*. This makes its role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: use this when no dedicated tool exists, and prefer the dedicated tools when they are available ('better to take it: transfer_funds / delete_user / create_*'). It also advises caution with confirmWrite because POST can be used for harmless reads, giving concrete decision rules. This is explicit and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_user_roleИзменить роль пользователяAIdempotent
Меняет роль пользователя, у которого уже есть доступ к рекламному аккаунту. Назначение той же роли, что стоит сейчас, ничего не меняет. Доступ не выдаёт (для этого add_user) и не отзывает (для этого delete_user). Возвращает подтверждение API плюс apiPointBalance.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | admin — полный доступ, включая пользователей, переводы денег и правки кампаний; viewer — только чтение. | |
| userId | Yes | Числовой id пользователя Авито, как его возвращает list_users. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false foot, so the description's mention that assigning the same role changes nothing is redundant. However, it adds valuable clarification that access is neither granted nor revokedanders, and that the tool returns API confirmation and balance info. This goes beyond the structured hints without contradicting them, though it omits auth/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact three-sentence block that is front-loaded with the core action, then clarifies edge cases (no-op on same role) and exclusions (does not grant/revoke). Every sentence adds value with no fluff, making it an excellent model of concise, informative description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with no output schema, the description covers the essential context: what it does, its limitations, alternatives, and return value. It could mention authentication/permission requirements, but the explicit scope and no-op behaviorobis make it nearly complete. The lack of output schema is compensated by the mention of API confirmation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions cover 100% of the two parameters, so the description does not add parameter-specific detail. That is baseline adequate: the schema already explains each parameter, and the description does not conflict or need to compensate further. A score of 3 reflects this sufficient but non-enhanced coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool changes the role of an existing user who already has access to the advertising account. It explicitly contrasts with add_user (granting access) and delete_user (revoking access), and notes that re-assigning the current role is a no-op. This unambiguously differentiates it from sibling tools and defines its precise scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternatives for granting (add_user) and revoking (delete_user) access, telling an agent when NOT to use this tool. It also establishes the precondition that the user must already have account access Mendapatkan. This is strong usage guidance, though it could add when to use as the primary choice, which is clearly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_bonusПеревести бонусные рубли на другой аккаунтADestructive
Переводит бонусные рубли (bonusBalance — промо-средства, которыми можно оплачивать рекламу, но нельзя вывести деньгами) с настроенного аккаунта на другой: amount бонусных рублей, минимум 1. Правила те же, что у transfer_funds: через этот API перевод необратим, пустой объект data означает, что он прошёл, а после сетевой или серверной ошибки следует проверить list_child_accounts_with_balances, а не повторять вызов. Переводит только бонусы — реальные деньги идут через transfer_funds.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Сумма в бонусных рублях. Минимум 1; меньшее значение отклоняется. | |
| accountIdTo | Yes | Id аккаунта назначения — того, кто ПОЛУЧАЕТ бонусы. Отправитель — всегда настроенный аккаунт. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations. It discloses the irreversibility of the transfer, the meaning of an empty success response, and the correct error-handling procedure (check balances instead of retrying). Since annotations already indicate destructiveHint=true and idempotentHint=false, the description enriches that with concrete operational behavior, which is exactly what this dimension rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, coherent paragraph that front-loads the tool's purpose and then adds behavioral and error-handling notes. It is appropriately sized for the tool's complexity—not excessively long, and every sentence contributes useful information. It could arguably be split into bullet points for clarity, but as written it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, parameter semantics, behavioral constraints (irreversibility), success/failure indicators, and the correct fallback action after errors. It also clearly routes to the right sibling tool for real-money transfers. Given the schema fully documents the parameters and there is no output schema to explain return values, the description is complete for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters in detail. However, the description adds meaningful context: it clarifies that amount is in bonus rubles (with a minimum of 1) and that accountIdTo is the recipient, with the sender always being the configured account. This adds semantic nuance beyond the raw schema definitions, improving the agent's understanding of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name and title clearly state the action: transferring bonus rubles to another account. The description goes further, defining what bonus rubles are (promo funds for advertising, not withdrawable) and explicitly differentiates from transfer_funds by stating that real money goes through that sibling tool. This makes the purpose unambiguous and distinguishes it from the closest alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (for bonus transfers only) and when not to (real money via transfer_funds). It also provides critical operational guidance: the transfer is irreversible, an empty data object confirms success, and after network/server errors the agent should check list_child_accounts_with_balances rather than retrying. This provides clear, actionable context an agent needs to make correct call decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_fundsПеревести деньги на другой аккаунтADestructive
Переводит РЕАЛЬНЫЕ ДЕНЬГИ с настроенного аккаунта на другой (обычно на один из дочерних): amount рублей, минимум 1. Через этот API перевод необратим — нет ни отмены, ни отката, ни журнала переводов; вернуть деньги можно только встречным переводом, а для него аккаунт-получатель должен уметь отправлять средства. При успехе возвращается пустой объект data: любой ответ без ошибки означает, что перевод выполнен, и повторять вызов нельзя. После сетевой или серверной ошибки исход неизвестен — прежде чем повторять, следует проверить list_child_accounts_with_balances, иначе деньги уйдут дважды.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Сумма в рублях. Минимум 1; меньшее значение отклоняется. | |
| accountIdTo | Yes | Id аккаунта назначения — того, кто ПОЛУЧАЕТ деньги. Отправитель — всегда настроенный аккаунт, и его нельзя переопределить. Id дочерних аккаунтов даёт list_child_accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=true, idempotentHint=false. The description goes beyond annotations by explicitly stating the transfer is irreversible, unreversible, has no journal, and that retrying after errors can double-spend money. It also explains the response semantics: an empty data object on success. This is excellent transparency, especially given the high stakes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but packs essential information efficiently. It front-loads the most critical fact (real money, irreversible) and then explains the response semantics and error handling. Every sentence earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high stakes (real money, irreversible), the description is fully complete. It covers the action, parameters, response format, error handling, and troubleshooting. The schema covers parameter details, and annotations cover safety hints. No additional information is needed for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameters are simple, but the description adds critical semantics: it clarifies that the sender is always the configured account (cannot be overridden) and that accountIdTo is the RECEIVER. It also specifies the minimum amount and reinforces the irreversibility. This adds value beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool transfers REAL MONEY from the configured account to another account (usually a child account). It specifies the exact resource (transfer_funds), the action (transfer), and the amount parameter. This distinguishes it from transfer_bonus, which likely transfers bonus funds, and from other siblings. The description is explicit that this is irreversible, which is a critical distinguishing feature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool (to transfer real money, typically to child accounts) and when not to (when you need bonus transfer, use transfer_bonus). It also warns against repeating calls after errors and advises checking list_child_accounts_with_balances instead. This is clear guidance for an agent to avoid duplicate transfers.
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. Dates show when Glama detected each change.
20 tool updates
v1.1.0- Changed
add_user2 fields changed- changed
Input schema / properties / role / descriptionPrevious value: -"admin — full access, including users, money transfers and campaign edits; viewer — read-only."New value: +"admin — полный доступ, включая пользователей, переводы денег и правки кампаний; viewer — только чтение." - changed
Input schema / properties / userId / descriptionPrevious value: -"Numeric Avito user id of the person to grant access to, e.g. 94235311."New value: +"Числовой id пользователя Авито, которому выдаётся доступ, например 94235311."
- Changed
campaign_stats3 fields changed- changed
Input schema / properties / campaignId / descriptionPrevious value: -"Campaign to report on. Find ids with list_campaigns."New value: +"Кампания, по которой строится отчёт. Id можно найти через list_campaigns." - changed
Input schema / properties / dateFrom / descriptionPrevious value: -"First day of the period, inclusive (YYYY-MM-DD)."New value: +"Первый день периода, включительно (YYYY-MM-DD)." - changed
Input schema / properties / dateTo / descriptionPrevious value: -"Last day of the period, inclusive (YYYY-MM-DD). Must be >= dateFrom, and the period must not exceed 100 days."New value: +"Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней."
- Changed
change_group_budget2 fields changed- changed
Input schema / properties / budget / descriptionPrevious value: -"New budget in rubles, at least 1. Replaces the current value."New value: +"Новый бюджет в рублях, не меньше 1. Заменяет текущее значение." - changed
Input schema / properties / groupId / descriptionPrevious value: -"Id of the ad group to change, from list_groups."New value: +"Id изменяемой группы объявлений, из list_groups."
- Changed
change_group_price2 fields changed- changed
Input schema / properties / groupId / descriptionPrevious value: -"Id of the ad group to change, from list_groups."New value: +"Id изменяемой группы объявлений, из list_groups." - changed
Input schema / properties / price / descriptionPrevious value: -"New bid in rubles, at least 1. Replaces the current value."New value: +"Новая ставка в рублях, не меньше 1. Заменяет текущее значение."
- Changed
create_advertiser9 fields changed- changed
Input schema / properties / actualAddress / descriptionPrevious value: -"Actual (postal) address; repeat legalAddress if they match."New value: +"Фактический (почтовый) адрес; если он совпадает с legalAddress, повторяется тот же." - changed
Input schema / properties / inn / descriptionPrevious value: -"Taxpayer number (INN): 10 digits for a company (ul), 12 for a sole trader (ip)."New value: +"ИНН: 10 цифр для юрлица (ul), 12 для ИП (ip)." - changed
Input schema / properties / kpp / descriptionPrevious value: -"Tax registration reason code (KPP). Companies (ul) only; omit for ip."New value: +"КПП. Только для юрлиц (ul); для ip опускается." - changed
Input schema / properties / legalAddress / descriptionPrevious value: -"Registered legal address."New value: +"Юридический адрес." - changed
Input schema / properties / legalRole / descriptionPrevious value: -"ORD role of the counterparty: rd (advertiser), ra (agency), rr (distributor)."New value: +"Роль контрагента по ОРД: rd (рекламодатель), ra (агентство), rr (распространитель)." - changed
Input schema / properties / legalType / descriptionPrevious value: -"Legal entity type: ul (company) or ip (sole trader)."New value: +"Тип юридического лица: ul (юрлицо) или ip (ИП)." - changed
Input schema / properties / longName / descriptionPrevious value: -"Full legal name, e.g. \"Obshchestvo s ogranichennoy otvetstvennostyu Reklama\"."New value: +"Полное юридическое наименование, например \"Общество с ограниченной ответственностью Реклама\"." - changed
Input schema / properties / ogrn / descriptionPrevious value: -"State registration number (OGRN for ul, OGRNIP for ip)."New value: +"Государственный регистрационный номер (ОГРН для ul, ОГРНИП для ip)." - changed
Input schema / properties / shortName / descriptionPrevious value: -"Short legal name, e.g. \"OOO Reklama\"."New value: +"Краткое юридическое наименование, например \"ООО Реклама\"."
- Changed
create_child_account2 fields changed- changed
Input schema / properties / isSelfAdvertisingEnabled / descriptionPrevious value: -"Whether the new account may run self-advertising (advertise its own goods and services). Required — state it explicitly, the API is sent this flag on every create."New value: +"Может ли новый аккаунт вести саморекламу (рекламировать собственные товары и услуги). Обязательное поле — значение указывается явно, флаг уходит в API при каждом создании." - changed
Input schema / properties / shortName / descriptionPrevious value: -"Display name of the new child account, e.g. \"OOO Romashka\"."New value: +"Отображаемое название нового дочернего аккаунта, например \"ООО Ромашка\"."
- Changed
create_contract20 fields changed- changed
Input schema / properties / advertiserId / descriptionPrevious value: -"Advertiser this contract is with (the client). From list_advertisers."New value: +"Рекламодатель, с которым заключён договор (клиент). Id даёт list_advertisers." - changed
Input schema / properties / cid / descriptionPrevious value: -"External contract id (ERID-side identifier). Required for type external, rejected for the others."New value: +"Внешний идентификатор договора (со стороны ERID). Обязателен для типа external, для остальных отклоняется." - changed
Input schema / properties / counterpartyType / descriptionPrevious value: -"Counterparty type — sent as the API's `description` field: direct_with_advertiser or advertiser_intermediary."New value: +"Тип контрагента — уходит в API в поле `description`: direct_with_advertiser или advertiser_intermediary." - changed
Input schema / properties / date / descriptionPrevious value: -"Contract date, YYYY-MM-DD. Required for service and intermediary."New value: +"Дата договора, YYYY-MM-DD. Обязательна для service и intermediary." - changed
Input schema / properties / intermediary / descriptionPrevious value: -"Legal details of the contractor (the intermediary). Required unless parentId is set."New value: +"Юридические реквизиты исполнителя (посредника). Обязательны, если не задан parentId." - changed
Input schema / properties / intermediary / properties / actualAddress / descriptionPrevious value: -"Actual (postal) address."New value: +"Фактический (почтовый) адрес." - changed
Input schema / properties / intermediary / properties / inn / descriptionPrevious value: -"Taxpayer number (INN) of the contractor."New value: +"ИНН исполнителя." - changed
Input schema / properties / intermediary / properties / kpp / descriptionPrevious value: -"Tax registration reason code (KPP); companies (ul) only."New value: +"КПП; только для юрлиц (ul)." - changed
Input schema / properties / intermediary / properties / legalAddress / descriptionPrevious value: -"Registered legal address."New value: +"Юридический адрес." - changed
Input schema / properties / intermediary / properties / legalType / descriptionPrevious value: -"Legal entity type: ul (company) or ip (sole trader)."New value: +"Тип юридического лица: ul (юрлицо) или ip (ИП)." - changed
Input schema / properties / intermediary / properties / longName / descriptionPrevious value: -"Full legal name."New value: +"Полное юридическое наименование." - changed
Input schema / properties / intermediary / properties / ogrn / descriptionPrevious value: -"State registration number (OGRN for a company, OGRNIP for a sole trader)."New value: +"Государственный регистрационный номер (ОГРН для юрлица, ОГРНИП для ИП)." - changed
Input schema / properties / intermediary / properties / shortName / descriptionPrevious value: -"Short legal name, e.g. \"OOO Reklama\"."New value: +"Краткое юридическое наименование, например \"ООО Реклама\"." - changed
Input schema / properties / isFundsAllocationToPrincipal / descriptionPrevious value: -"Whether funds are allocated to the principal. Required for intermediary."New value: +"Распределяются ли средства в пользу принципала. Обязательно для intermediary." - changed
Input schema / properties / isReportingRequired / descriptionPrevious value: -"Whether acts/reports are required under the contract. Required for service and intermediary."New value: +"Нужны ли по договору акты и отчёты. Обязательно для service и intermediary." - changed
Input schema / properties / number / descriptionPrevious value: -"Contract number. Required for service and intermediary."New value: +"Номер договора. Обязателен для service и intermediary." - changed
Input schema / properties / object / descriptionPrevious value: -"Contract action, the API's `object` field: distribution, conclude, commercial, other. Required for intermediary."New value: +"Действие по договору, поле API `object`: distribution, conclude, commercial, other. Обязательно для intermediary." - changed
Input schema / properties / parentId / descriptionPrevious value: -"Parent contract id. Set it to register an additional agreement; then omit intermediary."New value: +"Id родительского договора. Задаётся, чтобы зарегистрировать дополнительное соглашение; тогда intermediary опускается." - changed
Input schema / properties / subject / descriptionPrevious value: -"Contract subject: org-distribution, mediation, distribution, representation, other. Required for service and intermediary."New value: +"Предмет договора: org-distribution, mediation, distribution, representation, other. Обязателен для service и intermediary." - changed
Input schema / properties / type / descriptionPrevious value: -"Contract type: service (services rendered), intermediary (mediation), external (concluded outside Avito, identified by cid)."New value: +"Тип договора: service (оказание услуг), intermediary (посреднический), external (заключён вне Авито, определяется по cid)."
- Changed
create_sandbox_account9 fields changed- changed
Input schema / properties / actualAddress / descriptionPrevious value: -"Actual postal address; may repeat legalAddress."New value: +"Фактический почтовый адрес; может совпадать с legalAddress." - changed
Input schema / properties / contact / descriptionPrevious value: -"Contact person of the account, passed to the API as-is and must not be empty, e.g. {\"name\":\"Ivan Ivanov\",\"email\":\"ivan@example.com\",\"phone\":\"+79001234567\"}."New value: +"Контактное лицо аккаунта; передаётся в API как есть и не может быть пустым, например {\"name\":\"Иван Иванов\",\"email\":\"ivan@example.com\",\"phone\":\"+79001234567\"}." - changed
Input schema / properties / inn / descriptionPrevious value: -"Taxpayer number (INN) of the test company: 10 digits for a company, 12 for a sole proprietor."New value: +"ИНН тестовой компании: 10 цифр для юрлица, 12 для ИП." - changed
Input schema / properties / kpp / descriptionPrevious value: -"Tax registration reason code (KPP). Companies (legalType ul) have one; sole proprietors do not — omit it then."New value: +"КПП. Есть у юрлиц (legalType ul); у ИП его нет — тогда поле опускается." - changed
Input schema / properties / legalAddress / descriptionPrevious value: -"Registered legal address."New value: +"Юридический адрес." - changed
Input schema / properties / legalType / descriptionPrevious value: -"Legal form: ul = company, ip = sole proprietor."New value: +"Организационно-правовая форма: ul — юрлицо, ip — ИП." - changed
Input schema / properties / longName / descriptionPrevious value: -"Full legal name, e.g. \"Obshchestvo s ogranichennoy otvetstvennostyu Romashka\"."New value: +"Полное юридическое наименование, например \"Общество с ограниченной ответственностью Ромашка\"." - changed
Input schema / properties / ogrn / descriptionPrevious value: -"State registration number (OGRN for a company, OGRNIP for a sole proprietor)."New value: +"Государственный регистрационный номер (ОГРН для юрлица, ОГРНИП для ИП)." - changed
Input schema / properties / shortName / descriptionPrevious value: -"Short legal name, e.g. \"OOO Romashka\"."New value: +"Краткое юридическое наименование, например \"ООО Ромашка\"."
- Changed
creative_stats4 fields changed- changed
Input schema / properties / campaignId / descriptionPrevious value: -"Campaign whose creatives are reported. Find ids with list_campaigns."New value: +"Кампания, креативы которой попадают в отчёт. Id можно найти через list_campaigns." - changed
Input schema / properties / creativeIds / descriptionPrevious value: -"Creative ids to report on, e.g. [9001]. Required; get them from list_creatives, or use campaign_stats for the whole campaign."New value: +"Id креативов для отчёта, например [9001]. Обязательное поле; id даёт list_creatives, а по всей кампании отчитывается campaign_stats." - changed
Input schema / properties / dateFrom / descriptionPrevious value: -"First day of the period, inclusive (YYYY-MM-DD)."New value: +"Первый день периода, включительно (YYYY-MM-DD)." - changed
Input schema / properties / dateTo / descriptionPrevious value: -"Last day of the period, inclusive (YYYY-MM-DD). Must be >= dateFrom, and the period must not exceed 100 days."New value: +"Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней."
- Changed
delete_user1 field changed- changed
Input schema / properties / userId / descriptionPrevious value: -"Numeric Avito user id to remove from the account, as returned by list_users."New value: +"Числовой id пользователя Авито, которого нужно убрать из аккаунта, как его возвращает list_users."
- Changed
group_stats4 fields changed- changed
Input schema / properties / campaignId / descriptionPrevious value: -"Campaign whose groups are reported. Find ids with list_campaigns."New value: +"Кампания, группы которой попадают в отчёт. Id можно найти через list_campaigns." - changed
Input schema / properties / dateFrom / descriptionPrevious value: -"First day of the period, inclusive (YYYY-MM-DD)."New value: +"Первый день периода, включительно (YYYY-MM-DD)." - changed
Input schema / properties / dateTo / descriptionPrevious value: -"Last day of the period, inclusive (YYYY-MM-DD). Must be >= dateFrom, and the period must not exceed 100 days."New value: +"Последний день периода, включительно (YYYY-MM-DD). Должен быть >= dateFrom, а период — не длиннее 100 дней." - changed
Input schema / properties / groupIds / descriptionPrevious value: -"Ad group ids to report on, e.g. [101, 102]. Required; get them from list_groups, or use campaign_stats for the whole campaign."New value: +"Id групп объявлений для отчёта, например [101, 102]. Обязательное поле; id даёт list_groups, а по всей кампании отчитывается campaign_stats."
- Changed
list_advertisers6 fields changed- changed
Input schema / properties / filter / descriptionPrevious value: -"Filter for the page. Omit for all advertisers."New value: +"Фильтр страницы. Без него возвращаются все рекламодатели." - changed
Input schema / properties / filter / properties / ids / descriptionPrevious value: -"Only these advertiser ids."New value: +"Только рекламодатели с этими id." - changed
Input schema / properties / filter / properties / inns / descriptionPrevious value: -"Only advertisers with these taxpayer numbers (INN)."New value: +"Только рекламодатели с этими ИНН." - changed
Input schema / properties / filter / properties / roles / descriptionPrevious value: -"Only these ORD roles: rd (advertiser), ra (agency), rr (distributor)."New value: +"Только эти роли ОРД: rd (рекламодатель), ra (агентство), rr (распространитель)." - changed
Input schema / properties / limit / descriptionPrevious value: -"Page size, 1..100. Default 20."New value: +"Размер страницы, 1..100. По умолчанию 20." - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number. Default 1."New value: +"Номер страницы, нумерация с 1. По умолчанию 1."
- Changed
list_campaigns17 fields changed- changed
Input schema / properties / additionalAgreementIds / descriptionPrevious value: -"Additional-agreement ids whose campaigns to keep."New value: +"Оставить кампании по этим дополнительным соглашениям (по id)." - changed
Input schema / properties / advertisers / descriptionPrevious value: -"Advertiser ids whose campaigns to keep."New value: +"Оставить кампании этих рекламодателей (по id)." - changed
Input schema / properties / campaignTypes / descriptionPrevious value: -"Campaign types to keep: textImage, HTML, video."New value: +"Оставить только эти типы кампаний: textImage, HTML, video." - changed
Input schema / properties / contractIds / descriptionPrevious value: -"Contract ids whose campaigns to keep."New value: +"Оставить кампании по этим договорам (по id)." - changed
Input schema / properties / createdAt / descriptionPrevious value: -"Keep campaigns created in this range: {from, to}, YYYY-MM-DD."New value: +"Оставить кампании, созданные в этом диапазоне: {from, to}, YYYY-MM-DD." - changed
Input schema / properties / createdAt / properties / from / descriptionPrevious value: -"Range start, YYYY-MM-DD."New value: +"Начало диапазона, YYYY-MM-DD." - changed
Input schema / properties / createdAt / properties / to / descriptionPrevious value: -"Range end, YYYY-MM-DD."New value: +"Конец диапазона, YYYY-MM-DD." - changed
Input schema / properties / filter / descriptionPrevious value: -"Escape hatch: extra filter keys merged as-is into the request filter (API spelling). The named fields above win on conflict."New value: +"Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше." - changed
Input schema / properties / ids / descriptionPrevious value: -"Campaign ids to keep."New value: +"Оставить кампании с этими id." - changed
Input schema / properties / limit / descriptionPrevious value: -"Page size, 1..100. Default 20."New value: +"Размер страницы, 1..100. По умолчанию 20." - changed
Input schema / properties / managers / descriptionPrevious value: -"Manager (account user) ids whose campaigns to keep."New value: +"Оставить кампании этих менеджеров — пользователей аккаунта (по id)." - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number. Default 1."New value: +"Номер страницы, нумерация с 1. По умолчанию 1." - changed
Input schema / properties / paymentModels / descriptionPrevious value: -"Payment models to keep: CPM, CPC."New value: +"Оставить только эти модели оплаты: CPM, CPC." - changed
Input schema / properties / statuses / descriptionPrevious value: -"Campaign statuses to keep: draft, in_moderation, moderation_failed, partial_moderation, active, paused, stopped, finished, archived."New value: +"Оставить кампании с этими статусами: draft, in_moderation, moderation_failed, partial_moderation, active, paused, stopped, finished, archived." - changed
Input schema / properties / timeFrame / descriptionPrevious value: -"Keep campaigns whose flight window falls in this range: {from, to}, YYYY-MM-DD."New value: +"Оставить кампании, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD." - changed
Input schema / properties / timeFrame / properties / from / descriptionPrevious value: -"Range start, YYYY-MM-DD."New value: +"Начало диапазона, YYYY-MM-DD." - changed
Input schema / properties / timeFrame / properties / to / descriptionPrevious value: -"Range end, YYYY-MM-DD."New value: +"Конец диапазона, YYYY-MM-DD."
- Changed
list_contracts7 fields changed- changed
Input schema / properties / filter / descriptionPrevious value: -"Filter for the page. Omit for all contracts."New value: +"Фильтр страницы. Без него возвращаются все договоры." - changed
Input schema / properties / filter / properties / clients / descriptionPrevious value: -"Only contracts whose client is one of these advertiser ids."New value: +"Только договоры, клиент которых — один из этих рекламодателей (по id)." - changed
Input schema / properties / filter / properties / contractors / descriptionPrevious value: -"Only contracts with these contractor (intermediary) ids."New value: +"Только договоры с этими исполнителями (посредниками) по id." - changed
Input schema / properties / filter / properties / ids / descriptionPrevious value: -"Only these contract ids."New value: +"Только договоры с этими id." - changed
Input schema / properties / filter / properties / numbers / descriptionPrevious value: -"Only contracts with these contract numbers."New value: +"Только договоры с этими номерами." - changed
Input schema / properties / limit / descriptionPrevious value: -"Page size, 1..100. Default 20."New value: +"Размер страницы, 1..100. По умолчанию 20." - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number. Default 1."New value: +"Номер страницы, нумерация с 1. По умолчанию 1."
- Changed
list_creatives14 fields changed- changed
Input schema / properties / advertisers / descriptionPrevious value: -"Advertiser ids whose creatives to keep."New value: +"Оставить креативы этих рекламодателей (по id)." - changed
Input schema / properties / campaignIds / descriptionPrevious value: -"Campaign ids whose creatives to keep."New value: +"Оставить креативы этих кампаний (по id)." - changed
Input schema / properties / campaignTypes / descriptionPrevious value: -"Campaign types to keep: textImage, HTML, video."New value: +"Оставить только эти типы кампаний: textImage, HTML, video." - changed
Input schema / properties / filter / descriptionPrevious value: -"Escape hatch: extra filter keys merged as-is into the request filter (API spelling). The named fields above win on conflict."New value: +"Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше." - changed
Input schema / properties / groupIds / descriptionPrevious value: -"Ad group ids whose creatives to keep."New value: +"Оставить креативы этих групп объявлений (по id)." - changed
Input schema / properties / ids / descriptionPrevious value: -"Creative ids to keep."New value: +"Оставить креативы с этими id." - changed
Input schema / properties / limit / descriptionPrevious value: -"Page size, 1..100. Default 20."New value: +"Размер страницы, 1..100. По умолчанию 20." - changed
Input schema / properties / managers / descriptionPrevious value: -"Manager (account user) ids whose creatives to keep."New value: +"Оставить креативы этих менеджеров — пользователей аккаунта (по id)." - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number. Default 1."New value: +"Номер страницы, нумерация с 1. По умолчанию 1." - changed
Input schema / properties / paymentModels / descriptionPrevious value: -"Payment models to keep: CPM, CPC."New value: +"Оставить только эти модели оплаты: CPM, CPC." - changed
Input schema / properties / statuses / descriptionPrevious value: -"Creative statuses to keep: draft, ready_for_moderation, in_moderation, moderation_failed, erir_registration, active, paused, stopped, finished, archived."New value: +"Оставить креативы с этими статусами: draft, ready_for_moderation, in_moderation, moderation_failed, erir_registration, active, paused, stopped, finished, archived." - changed
Input schema / properties / timeFrame / descriptionPrevious value: -"Keep creatives whose flight window falls in this range: {from, to}, YYYY-MM-DD."New value: +"Оставить креативы, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD." - changed
Input schema / properties / timeFrame / properties / from / descriptionPrevious value: -"Range start, YYYY-MM-DD."New value: +"Начало диапазона, YYYY-MM-DD." - changed
Input schema / properties / timeFrame / properties / to / descriptionPrevious value: -"Range end, YYYY-MM-DD."New value: +"Конец диапазона, YYYY-MM-DD."
- Changed
list_groups13 fields changed- changed
Input schema / properties / advertisers / descriptionPrevious value: -"Advertiser ids whose groups to keep."New value: +"Оставить группы этих рекламодателей (по id)." - changed
Input schema / properties / campaignIds / descriptionPrevious value: -"Campaign ids whose groups to keep."New value: +"Оставить группы этих кампаний (по id)." - changed
Input schema / properties / filter / descriptionPrevious value: -"Escape hatch: extra filter keys merged as-is into the request filter (API spelling). The named fields above win on conflict."New value: +"Универсальный фильтр: дополнительные ключи, которые подмешиваются в фильтр запроса как есть (в написании API). При конфликте побеждают именованные поля выше." - changed
Input schema / properties / ids / descriptionPrevious value: -"Ad group ids to keep."New value: +"Оставить группы объявлений с этими id." - changed
Input schema / properties / limit / descriptionPrevious value: -"Page size, 1..100. Default 20."New value: +"Размер страницы, 1..100. По умолчанию 20." - changed
Input schema / properties / managers / descriptionPrevious value: -"Manager (account user) ids whose groups to keep."New value: +"Оставить группы этих менеджеров — пользователей аккаунта (по id)." - changed
Input schema / properties / paces / descriptionPrevious value: -"Budget pacing modes to keep. Free-form: the SDK documents no fixed vocabulary for this filter."New value: +"Оставить группы с этими режимами распределения бюджета. Значения произвольные: фиксированного словаря для этого фильтра в SDK нет." - changed
Input schema / properties / page / descriptionPrevious value: -"1-based page number. Default 1."New value: +"Номер страницы, нумерация с 1. По умолчанию 1." - changed
Input schema / properties / paymentModels / descriptionPrevious value: -"Payment models to keep: CPM, CPC."New value: +"Оставить только эти модели оплаты: CPM, CPC." - changed
Input schema / properties / statuses / descriptionPrevious value: -"Group statuses to keep: draft, in_moderation, moderation_failed, will_launch_soon, active, will_stop_soon, pausing, paused, unpausing, stopped, finished, archived."New value: +"Оставить группы с этими статусами: draft, in_moderation, moderation_failed, will_launch_soon, active, will_stop_soon, pausing, paused, unpausing, stopped, finished, archived." - changed
Input schema / properties / timeFrame / descriptionPrevious value: -"Keep groups whose flight window falls in this range: {from, to}, YYYY-MM-DD."New value: +"Оставить группы, период размещения которых попадает в этот диапазон: {from, to}, YYYY-MM-DD." - changed
Input schema / properties / timeFrame / properties / from / descriptionPrevious value: -"Range start, YYYY-MM-DD."New value: +"Начало диапазона, YYYY-MM-DD." - changed
Input schema / properties / timeFrame / properties / to / descriptionPrevious value: -"Range end, YYYY-MM-DD."New value: +"Конец диапазона, YYYY-MM-DD."
- Changed
raw_request4 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"JSON request body, e.g. {\"filter\":{},\"limit\":20,\"page\":1} for a list endpoint."New value: +"Тело запроса в JSON, например {\"filter\":{},\"limit\":20,\"page\":1} для эндпоинта списка." - changed
Input schema / properties / confirmWrite / descriptionPrevious value: -"Must be true for POST or DELETE. Setting it acknowledges that the path may write — funds-transfer and delete-user are POST/DELETE like any list read."New value: +"Для POST и DELETE должен быть true. Установка флага подтверждает, что путь может писать: funds-transfer и delete-user — такие же POST/DELETE, как и любое чтение списка." - changed
Input schema / properties / method / descriptionPrevious value: -"HTTP method. Default GET."New value: +"HTTP-метод. По умолчанию GET." - changed
Input schema / properties / path / descriptionPrevious value: -"API path, e.g. \"v1/account/{accountID}/groups\" or \"v1/account/{accountID}/campaigns/123/stats\"."New value: +"Путь API, например \"v1/account/{accountID}/groups\" или \"v1/account/{accountID}/campaigns/123/stats\"."
- Changed
set_user_role2 fields changed- changed
Input schema / properties / role / descriptionPrevious value: -"admin — full access, including users, money transfers and campaign edits; viewer — read-only."New value: +"admin — полный доступ, включая пользователей, переводы денег и правки кампаний; viewer — только чтение." - changed
Input schema / properties / userId / descriptionPrevious value: -"Numeric Avito user id, as returned by list_users."New value: +"Числовой id пользователя Авито, как его возвращает list_users."
- Changed
transfer_bonus2 fields changed- changed
Input schema / properties / accountIdTo / descriptionPrevious value: -"Destination account id — the account that RECEIVES the bonuses. The sender is always the configured account."New value: +"Id аккаунта назначения — того, кто ПОЛУЧАЕТ бонусы. Отправитель — всегда настроенный аккаунт." - changed
Input schema / properties / amount / descriptionPrevious value: -"Amount in bonus rubles. Minimum 1; anything less is rejected."New value: +"Сумма в бонусных рублях. Минимум 1; меньшее значение отклоняется."
- Changed
transfer_funds2 fields changed- changed
Input schema / properties / accountIdTo / descriptionPrevious value: -"Destination account id — the account that RECEIVES the money. The sender is always the configured account and cannot be overridden. Get child ids from list_child_accounts."New value: +"Id аккаунта назначения — того, кто ПОЛУЧАЕТ деньги. Отправитель — всегда настроенный аккаунт, и его нельзя переопределить. Id дочерних аккаунтов даёт list_child_accounts." - changed
Input schema / properties / amount / descriptionPrevious value: -"Amount in rubles. Minimum 1; anything less is rejected."New value: +"Сумма в рублях. Минимум 1; меньшее значение отклоняется."
25 tool updates
v0.1.0- First observed
add_user - First observed
campaign_stats - First observed
change_group_budget - First observed
change_group_price - First observed
create_advertiser - First observed
create_child_account - First observed
create_contract - First observed
create_sandbox_account - First observed
creative_stats - First observed
delete_user - First observed
get_account - First observed
get_balance - First observed
group_stats - First observed
list_advertisers - First observed
list_campaigns - First observed
list_child_accounts - First observed
list_child_accounts_with_balances - First observed
list_contracts - First observed
list_creatives - First observed
list_groups - First observed
list_users - First observed
raw_request - First observed
set_user_role - First observed
transfer_bonus - First observed
transfer_funds
TDQS
Each tool targets a distinct resource or action: account details, balance, child accounts (with/without balances), transfers, advertisers, contracts, campaigns, groups, creatives, budget/price changes, stats per entity, user management, and a raw request fallback. Even the three stats tools are clearly separated by entity level and documented. The only potential confusion is list_child_accounts vs list_child_accounts_with_balances, but the descriptions clarify the difference.
All tool names follow a consistent snake_case verb_noun pattern: get_*, list_*, create_*, change_*, transfer_*, set_*, delete_*, add_*, and the stats tools use object_stats (campaign_stats, group_stats, creative_stats). The conventions are uniform and predictable, with no mixing of camelCase or inconsistent verb styles.
25 tools is at the upper boundary of the 'borderline heavy' range. The scope covers a broad Ad platform API including accounts, child accounts, transfers, advertisers, contracts, campaigns, groups, creatives, stats, and user management, which justifies many tools. However, the presence of raw_request as a catch-all suggests that some endpoints could be consolidated or that the dedicated tool set is more expansive than necessary, pushing it slightly above the ideal 15-tool sweet spot.
The server is heavily read-oriented: campaigns, groups, and creatives are only listable; there are no create, update, pause, resume, delete, or moderation operations for these core ad objects. Only group budget and price can be modified. This leaves significant gaps in managing the full advertising lifecycle (e.g., creating campaigns or creatives, pausing ads), which agents would need to work around. The raw_request tool can access write endpoints, but without client-side validation, it is a risky workaround rather than a proper part of the surface.
Maintenance
Related MCP Connectors
Google Ads MCP server — manage campaigns, keywords, and metrics.
MCP for Yandex Direct: manage ad campaigns & analytics from Claude or ChatGPT
Hosted MCP server for Google Ads and LinkedIn Ads analysis.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Related MCP Servers
- AlicenseBqualityFmaintenanceMCP server for VK Ads API enabling management of campaigns, ads, statistics, targeting, and budgets through natural language.8214MIT
- AlicenseAqualityAmaintenanceMCP server for VK Ads API: manage ad plans, ad groups, banners, and statistics.18865MIT
- AlicenseAqualityBmaintenanceA local MCP server that connects Yandex Direct advertising reports and safe campaign creation to AI agents, enabling natural-language analytics and protected campaign setup.82MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that gives AI agents direct access to the Yandex Direct API to manage campaigns, groups, ads, keywords, bids, and reports via natural language.1176Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/A1-x-Tech/mcp-avito-ads'
If you have feedback or need assistance with the MCP directory API, please join our Discord server