telegram-ads-mcp
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., "@telegram-ads-mcplist my ads"
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.
telegram-ads-mcp
An MCP server that lets AI agents (Cursor, Claude Desktop, etc.) read and manage your Telegram Ads campaigns — list accounts and ads, read stats and budgets, and create/update ads, CPM, status, and budget — by driving the real ads.telegram.org web UI through Playwright with a reused, cookie-based login session.
⚠️ Security warning
This server reuses a saved Telegram Ads browser session (
auth_state.json). That file is equivalent to your login credentials for ads.telegram.org — anyone with it can act as you, including spending your TON ad budget. Never commit it, share it, or check it into version control. Mutating and financial tools (update_ad,set_cpm,set_status,increase_budget,set_budget,create_ad,get_ad_stats_csv) default to a safeconfirm=Falsedry-run and only take effect when an agent explicitly passesconfirm=True. Read SECURITY.md before connecting this server to any agent you don't fully trust with your ad spend.
Requirements
Python 3.11+
Chromium, installed via Playwright (
playwright install chromium)A Telegram Ads account with access to ads.telegram.org
Related MCP server: OpenAI Ads MCP Server
Quick start (recommended: clone)
Cloning and installing in a virtualenv is the recommended path — it makes the one-time interactive login step and the Playwright browser install straightforward and reproducible.
git clone https://github.com/Free-cat/telegram_ads_mcp.git
cd telegram_ads_mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
playwright install chromium
telegram-ads-authtelegram-ads-auth opens a real (visible) browser window so you can log in
to Telegram, choose the ads account you want to manage, and save the session.
It prints the path it saved to (by default
~/.config/telegram-ads-mcp/auth_state.json).
Cursor configuration
Add the server to your mcp.json, using the absolute path to the console
script inside the venv you just created:
{
"mcpServers": {
"telegram-ads": {
"command": "/ABS/PATH/telegram_ads_mcp/.venv/bin/telegram-ads-mcp",
"env": {
"TELEGRAM_ADS_ACCOUNT": "Artem",
"TELEGRAM_ADS_AUTH_STATE": "/ABS/PATH/to/auth_state.json"
}
}
}
}Restart Cursor (or reload MCP servers) after adding this. The same shape
works for Claude Desktop's claude_desktop_config.json.
Alternative: install via pip + git
If you'd rather not clone, you can install directly from git:
pip install "git+https://github.com/Free-cat/telegram_ads_mcp.git"
playwright install chromiumRun playwright install chromium in the same environment/interpreter
you installed the package into, so the browser binary is available at
runtime. Ephemeral environments (e.g. running via uvx on every invocation)
are fragile for this reason — Playwright needs its browser binaries to
persist between runs — which is why the clone + venv path above is
recommended for anything beyond a quick try.
Tools
All mutating/financial tools default to confirm=False, which returns a
structured dry-run preview and makes no changes. Pass confirm=True to
actually execute the action.
Tool | Type |
| Description |
| Read | — | List Telegram Ads accounts available for this login session |
| Read | — | List all ads with full table columns (id, metrics, budget, status, date) |
| Read | — | Read ad form fields (targeting chips are read-only for existing ads) |
| Read | — | Read-only per-ad budgets on |
| Write | Yes (to save) | Update ad info fields (title, text, url, budget, etc.), not CPM/budget delta |
| Write | Yes (to execute) | Set CPM via the |
| Write | Yes (to execute) | Set ad status (Active / On Hold) via the |
| Write (financial) | Yes (to execute) | Add TON to an ad's budget (delta) |
| Write (financial) | Yes (to execute) | Set a target budget by computing the delta from the current one |
| Write (financial) | Yes (to execute) | Create a new ad; clears the draft by default |
| Write (download) | Yes (to execute) | Download the stats CSV for an ad and period |
Every tool raises a stable AUTH_EXPIRED error when the stored session is no
longer valid — re-run telegram-ads-auth to refresh it.
Configuration
Env var | Purpose |
| Absolute path to the saved Playwright session file. Overrides the default lookup ( |
| Substring match against the account name shown on the Telegram Ads "Choose Account" screen, used to select which account's ads the tools operate on. Optional when your login has exactly one account; required when multiple accounts are available. |
Limitations
Fragment top-ups are manual. The server can read per-ad budgets but does not automate adding TON via Fragment.
Ad Schedule and similar widgets are not automated. Scheduling and "Similar channels/bots" targeting widgets on ads.telegram.org are out of scope for v0.1.
Targeting on existing ads is read-only.
get_ad_infocan read targeting chips, but changing targeting for an already-created ad is not supported — targeting is set at creation time viacreate_ad.No live end-to-end tests in CI. Tests that hit the real ads.telegram.org are marked
live, require a real session, and are never run automatically — they need a human with an active account to run them locally.Transport is stdio only. There is no remote/HTTP transport or Docker image in this release.
License
Available Tools
11 toolscreate_adB
Create new ad. Financial — requires confirm=True. Clears draft by default.
| Name | Required | Description | Default |
|---|---|---|---|
| cpm | Yes | ||
| url | Yes | ||
| text | Yes | ||
| title | Yes | ||
| status | No | Active | |
| confirm | No | ||
| targets | No | ||
| clear_draft | No | ||
| target_type | No | channels | |
| website_name | No | ||
| initial_budget | Yes | ||
| show_bot_picture | No | ||
| daily_views_limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and non-destructive. The description adds that it 'clears draft by default' and requires confirm=True, but does not disclose other relevant behaviors like idempotency or effects of missing confirm.
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?
Very concise at two sentences, no fluff. However, the tool has 13 parameters and no output schema; the description is too brief to provide adequate guidance.
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 many parameters and no output schema, the description lacks information on return values, parameter defaults beyond two, and the meaning of 'Financial.' The sibling tools are not referenced, leaving uncertainty about when to create vs update.
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 0% schema description coverage, the description only hints at two parameters (confirm, clear_draft) but ignores the other 11 parameters including required ones like cpm, url, text, title, initial_budget. This leaves a significant gap in understanding.
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 'Create new ad' with a clear verb and resource. It also adds 'Financial' context and a requirement, but does not explicitly differentiate from sibling tools like 'update_ad' or 'list_ads' beyond the inherent creation action.
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 one guideline: 'requires confirm=True' for financial operations. However, it does not specify when to use this tool over alternatives, nor give any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_budgetARead-only
Read-only: per-ad budgets on /account/budget. Fragment top-up is manual.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar is lower. The description adds endpoint context and a behavioral note about manual top-up, providing incremental value beyond 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?
Two concise sentences with no filler. The key information is front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description provides essential context: read-only, endpoint, and a behavioral note. It could be slightly improved by clarifying the return format, but it's largely 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?
No parameters, so schema coverage is 100%. Description adds meaning by explaining the tool retrieves budgets per ad, which goes beyond the empty 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?
Clearly states the tool is read-only and retrieves per-ad budgets from the /account/budget endpoint. Distinguishes from sibling tools like set_budget and increase_budget by emphasizing the read-only nature.
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?
No explicit guidance on when to use or alternatives beyond the read-only hint. The note about manual fragment top-up implies a limitation but does not direct the agent to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_infoCRead-only
Read ad form fields. Targeting chips are read-only for existing ads.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, aligning with the 'Read' verb. The description adds that 'Targeting chips are read-only for existing ads,' which provides a specific behavioral trait beyond the annotation. However, it does not disclose other behaviors like error handling or response format.
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 consists of two short, front-loaded sentences. Every word adds value—the first states the core purpose, the second adds a key behavioral note. No unnecessary text.
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?
Despite the simple tool, the description omits important details: what 'ad form fields' includes, how the ad_id parameter is used, and what the output looks like. The openWorldHint annotation partially compensates, but the description lacks completeness for the agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (ad_id) with 0% schema description coverage. The description does not mention the parameter at all, leaving the agent to guess its meaning. This is a critical gap for a required parameter.
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 'Read ad form fields,' which specifies a verb and a resource. This distinguishes it from sibling tools like get_account_budget or get_ad_stats_csv, though it does not explicitly differentiate. The purpose is clear and concise.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites, when-not-to-use, or sibling tool distinctions. The agent is left to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_stats_csvB
Download stats CSV. Requires confirm=True to actually download; default is dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| period | No | days | |
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: the dry-run mode via confirm parameter, which is important for safe usage. Annotations (readOnlyHint=false, destructiveHint=false) are clarified by this context. 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 a single sentence that is concise but omits important details like parameter descriptions. It front-loads the action but could be restructured to include more information without added length.
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 output schema exists, return values are covered. However, the description lacks explanation for input parameters and does not mention potential permissions or size limits for the download. It is minimally adequate but incomplete for a full understanding.
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 0% schema description coverage, the description fails to explain the ad_id and period parameters. Only the confirm parameter is mentioned. The schema already provides types and defaults, but the description adds little semantic value beyond confirming the dry-run logic.
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 provides a specific verb ('Download') and resource ('stats CSV'), clearly indicating the tool's purpose. It is distinct from sibling tools like get_ad_info or list_ads, though it does not explicitly state that this retrieves CSV data for a specific ad.
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?
No guidance is given on when to use this tool versus alternatives (e.g., get_ad_info for single ad stats). The description mentions the dry-run behavior but does not address prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
increase_budgetADestructive
Add TON to ad budget (delta). Financial — requires confirm=True to execute; default is dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| amount | Yes | ||
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds key behavioral details beyond annotations: 'Financial — requires confirm=True to execute; default is dry-run.' This informs the AI about the execution mode and financial consequence, complementing the destructiveHint and readOnlyHint annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the purpose ('Add TON to ad budget (delta)') and adds essential context without any fluff. Every word contributes to understanding.
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 3-parameter tool with no output schema, the description covers the core behavior, financial implication, and execution mode. It lacks detail on return values or error conditions, but given the simplicity, it is fairly 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?
With 0% schema description coverage, the description partially compensates by explaining that 'amount' is the delta and 'confirm' controls execution. However, 'ad_id' is not described, leaving its meaning implicit. Overall, adds some value but not fully comprehensive.
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 begins with 'Add TON to ad budget (delta)', clearly stating the specific action (add) and resource (TON to ad budget). It distinguishes from sibling tools like 'set_budget' which implies absolute budget setting, and includes additional context about financial nature and execution mode.
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 indicates this tool is for delta additions, contrasting with set_budget for absolute values. It mentions the confirm parameter for execution vs dry-run. While not explicitly stating when not to use it, the context and sibling list provide sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsARead-only
List Telegram Ads accounts available for this login session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint; description adds no additional behavioral details beyond listing.
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?
Single sentence, 10 words, no wasted text. Front-loaded and 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?
Sufficient for a zero-parameter, read-only list tool with output schema covering return values.
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?
No parameters exist; baseline for 0 parameters is 4 per rules.
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?
Clearly states the verb 'list' and resource 'Telegram Ads accounts', specifying scope 'for this login session'. Differentiates from sibling tools like create_ad or set_budget.
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?
Implies usage for retrieving accounts accessible in the current session, but no explicit when-not-to-use or alternatives provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_adsARead-only
List all ads with full table columns (id, metrics, budget, status, date).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that it returns all ads with specific columns, but does not disclose further behavioral traits like pagination, ordering, or account scope. It does not contradict 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 a single, concise sentence that front-loads the key action and result. Every word adds value 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?
For a zero-parameter list tool with an output schema and annotations, the description is mostly complete. It specifies the returned columns but could mention scope (e.g., current account or all) or pagination, but given an output schema exists, this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema description coverage is effectively 100%. The description does not need to explain parameters; it clearly states the tool's function. Baseline 4 applies for no 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 description clearly states 'List all ads with full table columns' specifying the verb (List), resource (ads), and scope (all). It also lists the columns returned, distinguishing it from siblings like get_ad_info (single ad) or list_accounts.
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?
No guidance is provided on when to use this tool versus alternatives such as get_ad_info for a single ad or get_ad_stats_csv for statistics. The description lacks context on purpose or exclusionary criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_budgetADestructive
Set target budget by computing delta from current. Financial — requires confirm=True to execute; default is dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| confirm | No | ||
| target_budget | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructive hint and not read-only. Description adds that it is financial, requires confirmation, and defaults to dry-run, which mitigates destructiveness. This adds valuable behavioral context beyond annotations alone.
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: first states purpose, second provides usage rule. No unnecessary words; efficient and easy to parse.
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 three parameters and no output schema, the description covers the main behavioral aspects: financial nature, dry-run default, and confirmation requirement. Lacks information on return values or error states, but is sufficient for a straightforward set operation.
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 has no descriptions (0% coverage). Description explains that 'target_budget' is the desired value and 'confirm' controls execution. However, 'ad_id' is not explained, and units for 'target_budget' are missing. Partially compensates but leaves gaps.
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 sets a target budget and computes the delta from current. It distinguishes from sibling 'increase_budget' by specifying a fixed target rather than an incremental change. However, 'computing delta' could be interpreted ambiguously.
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 guidance that confirm=True is required for execution and default is dry-run. This helps the agent know when to actually apply changes. Could be improved by mentioning alternatives like 'increase_budget' or 'get_account_budget' for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cpmA
Set CPM via /edit_cpm modal. Requires confirm=True to execute; default is dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| cpm | Yes | ||
| ad_id | Yes | ||
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds that the tool uses a modal and dry-run behavior by default, which is beyond annotations (readOnlyHint=false, destructiveHint=false). However, does not disclose potential side effects or auth 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?
Two sentences, no redundant information, essential points front-loaded. Every word adds value.
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?
While the tool is simple, the description lacks details about return value, behavior after execution, and parameter constraints. With low schema coverage and no output schema, more context would be beneficial.
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?
Only the confirm parameter is explained ('requires confirm=True to execute; default is dry-run'). No semantics provided for cpm or ad_id, despite 0% schema description coverage. Leaves agent guessing about parameter values.
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?
Clear verb 'Set' and resource 'CPM' explicitly stated. Mention of '/edit_cpm modal' further clarifies the operation. Distinct from sibling tools like set_budget or create_ad.
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 when to use: requires confirm=True for execution, default is dry-run. Provides clear usage condition but lacks comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_statusA
Set ad status (Active / On Hold) via /edit_status modal. Requires confirm=True to execute; default is dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| status | Yes | ||
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations. It reveals the dry-run default behavior and the need for explicit confirmation, which is crucial for safe invocation. Annotations only provide readOnlyHint=false and destructiveHint=false, so the description fills an important gap by explaining the safety mechanism.
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 exceptionally concise: two sentences that convey purpose, allowed values, the modal mechanism, and the important dry-run/confirm behavior. No filler or redundant information.
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 3 parameters, no output schema, and sibling tools exist, the description covers the essential behavioral aspects (modal, dry-run, confirm). It lacks details on return value or error handling, but the key decision-making context for safe use is present. A score of 4 reflects that it is mostly complete but could mention what happens after execution.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the tool description must compensate. It explains the status parameter by mentioning the allowed values ('Active / On Hold') and describes the confirm parameter's effect (dry-run vs execution). However, it does not describe the ad_id parameter at all, leaving its semantics unclear.
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: 'Set ad status (Active / On Hold)'. It specifies the exact operation (setting status) and the resource (ad). The mention of a modal and the two allowed values differentiates it from sibling tools like update_ad or set_budget, which handle different aspects.
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 explains the behavior of the confirm parameter ('Requires confirm=True to execute; default is dry-run'), which provides usage guidance. However, it does not explicitly state when to use this tool versus alternatives like update_ad, nor does it mention any prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_adA
Update ad info fields (not CPM/budget). Requires confirm=True to save; default is dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| text | No | ||
| ad_id | Yes | ||
| title | No | ||
| status | No | ||
| confirm | No | ||
| daily_budget | No | ||
| website_name | No | ||
| show_bot_picture | No | ||
| daily_views_limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds key behavioral trait: dry-run by default unless confirm=True. Annotations already indicate non-destructive write; description clarifies safety mechanism and scope.
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?
Single sentence, no redundancy, front-loaded with purpose and key constraint.
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 10-parameter tool with no output schema and no param descriptions, the description is too sparse. Missing details on which fields are updateable, constraints, and 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?
Adds meaning for confirm parameter (required to save) but does not explain the other 9 parameters. With 0% schema coverage, the description should compensate, but only provides high-level 'info fields' grouping.
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 updates ad info fields and explicitly excludes CPM/budget, distinguishing it from sibling tools set_budget and set_cpm.
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?
Describes the need for confirm=True to save and default dry-run behavior. Implicitly guides when to use this tool versus budget/CPM tools, but could be more explicit about alternatives.
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.
11 tool updates
v0.1.0- First observed
create_ad - First observed
get_account_budget - First observed
get_ad_info - First observed
get_ad_stats_csv - First observed
increase_budget - First observed
list_accounts - First observed
list_ads - First observed
set_budget - First observed
set_cpm - First observed
set_status - First observed
update_ad
TDQS
Each tool has a clear, distinct purpose. Operations like set_budget and increase_budget handle different budget manipulations, and other tools cover creation, reading, listing, and updating without overlap.
All tool names follow a consistent snake_case verb_noun pattern (e.g., create_ad, list_accounts, set_cpm), making the set predictable and easy to navigate.
With 11 tools, the set covers essential CRUD and management operations for Telegram Ads without being excessive or insufficient for the domain.
Core operations are present: create, read (info, stats, list), update (fields, budget, CPM, status). However, a delete ad tool is missing, which is a minor gap for full lifecycle management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Remote MCP server for AI.TV creators — delegate account operations to your AI agent over MCP.
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for AI agents to manage ad campaigns across Google, Meta, LinkedIn, Microsoft, Reddit, TikTok, and more2127817MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes the ChatGPT Ads API as tools an LLM host can call.4MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for VK Ads API (myTarget v2) that allows AI agents to manage advertising accounts: create and modify campaigns, ads, upload creatives, and fetch statistics.1456Apache 2.0
- AlicenseNot gradedqualityAmaintenanceA safe-by-default MCP server for real Telegram accounts powered by TDLib, enabling AI agents to read and act on your account with read-only mode and human approval for destructive actions.5Apache 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/Free-cat/telegram_ads_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server