AdsMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ADS_MCP_DATA | No | The local data directory used by AdsMCP for storing acceptance and downloaded updates. Defaults to the repository's data/ directory. | data |
| ADSMCP_GITHUB_TOKEN | No | Fine-grained GitHub token used for contribution setup and publishing PRs. | |
| ADSMCP_UPDATE_ENABLED | No | Set to false to disable the daily GitHub update check. Default is true. | true |
| ADSMCP_FORK_REPOSITORY | No | Personal fork repository for contributions, required before publishing a PR. | |
| ADSMCP_UPDATE_REPOSITORY | No | GitHub repository in owner/repository format used for daily update checks. If not set, AdsMCP detects the repository from the local origin remote. | |
| ADSMCP_WEEKLY_PR_ENABLED | No | Set to false to disable the weekly check for local Git working tree changes. Default is true. | true |
| ADSMCP_UPSTREAM_REPOSITORY | No | Upstream repository for contributions, required before publishing a PR. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ads_free_use_rulesA | Read the AdsMCP Free Use Rules and see whether this local installation has accepted the current version. |
| ads_free_use_acceptA | Accept the current AdsMCP Free Use Rules for this local data directory. Review ads_free_use_rules first. |
| ads_github_contribution_statusA | Show the local Git changes and GitHub fork setup without publishing anything. |
| ads_github_contribution_setupA | Prepare an optional GitHub fork for publishing reviewed AdsMCP changes. confirm=true may create the fork through the configured GitHub token. |
| ads_github_contribution_create_prA | Review the changedFiles from ads_github_contribution_status, then create one GitHub branch and pull request after confirm=true. |
| ads_project_createC | Create a project that groups related advertising campaigns and their analytics. |
| ads_project_getC | Get one local advertising project by its id. |
| ads_project_listB | List projects, optionally filtered by active or archived status. |
| ads_project_updateB | Update project metadata or archive it without deleting its campaigns. |
| ads_project_analyticsC | Calculate aggregate and per-campaign KPIs for one project. |
| ads_client_profile_createB | Create a local client profile with per-person context. Telegram remains the default channel; channel and external_user_id can represent Mastodon or another connector. contact_account_id records which local connected account made the contact. Consent defaults to unknown; this tool does not send a message. |
| ads_client_profile_getC | Get one local client profile and its recent dialogue history. |
| ads_client_profile_listB | List local client profiles without loading full dialogue histories. |
| ads_client_profile_updateC | Update one local client profile, including context, consent status, next action and the local account used for contact. This tool does not send a message. |
| ads_client_profile_message_addA | Append an inbound, outbound or internal note to a local client profile. For external or multi-account contacts, pass contact_account_id so the exact account is recorded. This stores history only and never sends a message. |
| ads_client_profile_batch_sendA | Send a saved client-profile draft (firstContact or replyToUnread) to up to 50 active profiles with one explicit batch confirmation. The exact saved draft and every variation must have been approved before sending; any draft change requires fresh approval. Requires Telegram Premium, reports a read-only unread-human-dialog preflight without blocking the write, performs an activity preflight (stale exact last-seen and hidden profiles without an avatar are blocked), enforces at least 15 seconds between messages, blocks opted_out profiles, stops on the first send error, and records each successful outbound message. |
| ads_client_profile_unread_checkA | Take a fast read-only snapshot of unread one-to-one human Telegram chats. This returns the latest incoming message only; it does not read full history, mark messages as read, or send anything. Before drafting a reply when a person may have multiple messages, run the local full-history sync script npm run telegram:sync:unread and review every returned message. |
| ads_client_profile_channel_reviewA | Review the public channel linked in a Telegram user's profile and search it for AI-related topics. Uses the selected local GramJS/TDLib backend, never reads non-public chats, never sends messages, and stores only the bounded review result in the client profile. |
| ads_interest_contact_upsertB | Save or update one public discovery candidate in the local interest registry. This does not create a client profile, follow anyone or send a message; consent remains unknown by default. |
| ads_interest_contact_listB | List public discovery candidates from the local interest registry. This is read-only and never contacts anyone. |
| ads_interest_research_post_upsertB | Store one bounded public research post linked to an interest contact. This is local research only and never publishes or contacts anyone. |
| ads_interest_research_post_listC | List bounded public research posts collected during discovery. Read-only; it never contacts authors. |
| ads_interest_research_tag_listC | List aggregated hashtags and research tags from the local discovery base. Read-only. |
| ads_interest_research_stats_buildB | Build a local time-window snapshot of research demand: post volume, unique authors, contacts, relevance and popular tags. This is analytics only and never contacts anyone. |
| ads_interest_research_stats_listB | List saved research demand snapshots and tag popularity metrics. Read-only analytics; it never contacts anyone. |
| ads_telegram_ai_chat_upsertB | Save or update one public Telegram group/channel discovered for AI-related topics. This writes only local chat metadata under a project and never collects participants or sends messages. |
| ads_telegram_ai_chat_listB | List public Telegram AI-related chats saved in the local catalog; defaults to the Neron project and never returns participant data. |
| ads_tg_resource_upsertB | Save or update one Telegram group or channel in the generic local resource catalog. This stores metadata only and never joins, leaves or sends messages. |
| ads_tg_resource_listB | List generic Telegram groups and channels saved in the local tg_resources catalog; defaults to the Neron project and never returns participant data. |
| ads_tg_resource_post_recordB | Record a confirmed Telegram publication link for a cataloged group or channel. This only updates the local audit trail and never sends a message. |
| ads_tg_resource_post_listB | List confirmed Telegram publication links recorded for local resources; this is read-only and never sends messages. |
| ads_telegram_public_reply_upsertC | Save or update one public Telegram reply/mention found under a message from the connected account. Local-only; never sends or marks messages read. |
| ads_telegram_public_reply_listB | List public Telegram replies and mentions saved in the local audit table; pending items are shown first and nothing is sent. |
| ads_telegram_public_reply_statusA | Set the review status of one saved public Telegram reply. This changes only local audit data and never sends a message. |
| ads_telegram_public_reply_syncA | Read a bounded recent history in selected public Telegram chats and save direct replies plus a small context window after each outgoing message, because people may answer without using Telegram's reply action. Requires Premium; never sends, joins, collects participant lists or marks messages read. |
| ads_telegram_ai_post_listB | List public Telegram posts saved from the global AI search. Results are classified locally as request, opportunity, discussion, promotion or repost; this tool never sends messages. |
| ads_telegram_ai_post_reclassifyB | Reclassify saved public Telegram AI posts and rebuild Neron offer matches plus contextual public reply drafts. Local-only: never sends or edits Telegram messages. |
| ads_telegram_ai_search_query_upsertB | Save or update one Telegram AI search phrase for later discovery and demand analysis. This changes only local SQLite and never searches or sends messages. |
| ads_telegram_ai_search_query_listB | List saved Telegram AI search phrases and their last-run/result counters; read-only and never contacts Telegram. |
| ads_telegram_ai_search_run_listB | List the append-only history of Telegram AI searches, including source/scope, status, quota and result counters; read-only and never contacts Telegram. |
| ads_telegram_ai_keyword_observeA | Extract normalized demand keywords from one search query or user-provided text and update local trend counters. The submitted text is not stored and this tool never contacts Telegram. |
| ads_telegram_ai_keyword_listB | List aggregated Telegram AI demand keywords with source counters and recent-vs-previous trend direction; read-only and never contacts Telegram. |
| ads_telegram_ai_keyword_topic_listB | List aggregated demand-topic trends that group related keyword variants, with source counters and recent-vs-previous activity; read-only and never contacts Telegram. |
| ads_telegram_ai_keyword_rebuildA | Rebuild demand keyword observations from existing search history, saved public AI posts and inbound client messages. Set reset=true only to replace the derived keyword aggregate and observation tables; stores only normalized keywords and source metadata; never sends messages. |
| ads_telegram_ai_trend_snapshot_buildB | Build one weekly demand snapshot grouped by topic and intent, with deduplicated source counts. This changes only local analytics tables and never contacts Telegram. |
| ads_telegram_ai_trend_snapshot_listB | List saved weekly demand snapshots by topic and intent; read-only and never contacts Telegram. |
| ads_campaign_createC | Create a local advertising campaign definition, optionally inside a project. It starts in draft status. |
| ads_campaign_getB | Get one campaign by its local id. |
| ads_campaign_listC | List local campaigns, optionally filtered by project and lifecycle status. |
| ads_campaign_updateC | Update campaign metadata, lifecycle status or project assignment. |
| ads_event_ingestB | Ingest a funnel event or conversion. A stable dedupe_key makes retries safe. |
| ads_spend_recordB | Record spend and daily platform metrics. A stable dedupe_key makes sync retries safe. |
| ads_campaign_analyticsC | Calculate spend, funnel and efficiency KPIs for one or all campaigns. |
| ads_campaign_timeseriesC | Read normalized time-bucketed provider metrics saved in local SQLite. |
| ads_attribution_reportC | Attribute local conversion events to tracked touchpoints using a selected attribution model. |
| ads_integration_registerC | Register an external advertising, CRM or webhook integration without storing secrets. |
| ads_integration_listB | List registered integrations and built-in adapter capabilities/configuration status. |
| ads_integration_planB | Show adapter readiness, required environment keys and safe next actions for one or all providers. |
| ads_platform_guideC | Explain what audience and acquisition scenario each advertising platform fits before configuring its MCP module. |
| ads_module_planA | Show configured provider MCP modules without starting them. Modules keep their own API logic and credentials outside the AdsMCP database. |
| ads_dashbord_startB | Start the local AdsMCP settings page on 127.0.0.1. It stores Click.ru data, Yandex Direct OAuth token files and settings, Microsoft Advertising OAuth profiles and Mastodon OAuth account tokens locally, and provides the preferred local Telegram account / GramJS login flow; it never performs billing or campaign actions. Use restart=true only to replace an already-running page. |
| ads_dashbord_stopA | Stop the local AdsMCP settings page. This does not delete Click.ru profiles, Microsoft OAuth profiles, Mastodon accounts or campaign drafts. |
| ads_clickru_profiles_statusA | Show locally stored Click.ru advertiser profiles with masked INNs and the active profile. Never returns API tokens. |
| ads_clickru_campaign_drafts_statusA | Show locally stored Click.ru campaign drafts, their statuses and the active campaign. Drafts are not sent or launched. |
| ads_clickru_campaign_draft_set_statusB | Change a locally stored Click.ru campaign between DRAFT and READY. This never sends or launches the campaign. |
| ads_module_toolsC | Discover tools exposed by one configured provider MCP module. |
| ads_module_callC | Call a tool of a configured provider MCP module, optionally restricted by its allow_tools list. Use provider-native tools for capabilities that AdsMCP does not reimplement. |
| ads_google_ads_reportC | Read daily Google Ads campaign metrics through the configured service-account adapter. This tool never writes to Google Ads. |
| ads_google_ads_syncB | Read Google Ads metrics and persist normalized campaign, spend and aggregate conversion data into local SQLite. This never writes to Google Ads. |
| ads_google_ads_pmax_replace_imagesA | Replace the enabled landscape and portrait marketing images in one Google Ads Performance Max asset group. New images are linked first; square images, logos and text assets are preserved. Requires explicit confirm=true. |
| ads_microsoft_ads_reportC | Read aggregate Microsoft Advertising campaign metrics through the official read-only MCP. This tool never writes to Microsoft Ads. |
| ads_microsoft_ads_syncC | Read aggregate Microsoft Advertising metrics and persist normalized campaigns, spend and conversions into local SQLite. This never writes to Microsoft Ads. |
| ads_yandex_direct_reportB | Read Yandex Direct campaign statistics through the configured provider MCP module and normalize the result by day. |
| ads_yandex_direct_syncC | Read Yandex Direct statistics through the provider MCP module and persist normalized campaigns, spend and conversions into local SQLite. |
| ads_yandex_direct_writeA | Apply an explicitly confirmed, idempotent Yandex Direct campaign change through the provider API. Updates and lifecycle status changes for existing campaigns are exposed; creation uses the dedicated safe create tool and deletion remains disabled. |
| ads_yandex_direct_create_campaignA | Create one paused Yandex Direct text campaign through the guarded provider path. The new campaign is created with search and network serving off, without ads or a budget; it cannot start showing until configured and enabled separately. |
| ads_telegram_ads_reportC | Read Telegram Ads account, campaigns and normalized metrics through the configured HTTP-based MCP module. This is read-only. |
| ads_telegram_ads_syncC | Read Telegram Ads metrics and persist campaigns, daily spend and optional time-bucketed metrics into local SQLite. This never writes to Telegram Ads. |
| ads_telegram_accounts_reportB | List Telegram Ads cabinets and optionally read one or all cabinets. Switching cabinets requires explicit confirm=true and is restored to the original cabinet afterward. |
| ads_telegram_accounts_syncB | Read one or all Telegram Ads cabinets and persist their campaigns, daily spend and optional time-bucketed metrics into local SQLite. Cabinet switching requires explicit confirm=true. |
| ads_telegram_ads_api_statusA | Show the official Telegram Ads API layer readiness. With probe=true, perform one read-only getCurrentAccount request; provider writes remain separately guarded. |
| ads_telegram_ads_api_create_adA | Create one Telegram Ads advertisement through the official API. This is a provider write; confirm=true is required. Defaults to paused with zero initial budget. |
| ads_telegram_ads_api_increase_ad_budgetB | Increase one Telegram Ads ad budget through the official API. This is a provider write; confirm=true is required. |
| ads_telegram_ads_api_submit_ad_for_reviewB | Submit one Telegram Ads ad for moderation through the official API. This is a provider write; confirm=true is required. |
| ads_telegram_ads_api_set_ad_pausedB | Pause or resume one Telegram Ads ad through the official API. This is a provider write; confirm=true is required. |
| ads_telegram_ads_api_reportC | Read Telegram Ads through the official promoteapi.telegram.org API. This is read-only and supports exact date-bounded 5-minute or daily stats. |
| ads_telegram_ads_api_syncB | Read official Telegram Ads API metrics and persist them into the same local SQLite campaign model. This never writes to Telegram Ads. |
| ads_telegram_account_statusA | Check the local Telegram user-account GramJS/TDLib dependencies, credentials, authentication state and ignored storage paths. |
| ads_discord_statusA | Check the official Discord bot connector, credentials and current bot identity. Normal user-account tokens and passwords are not supported. |
| ads_discord_guild_listB | List Discord servers where the configured bot is installed. This is not a global server search. |
| ads_discord_channel_listB | List viewable text, announcement, forum and thread channels in one Discord server. |
| ads_discord_member_searchA | Search members by username or nickname inside one installed Discord server. Finding a member does not authorize contacting them. |
| ads_discord_message_searchA | Search a bounded recent page of messages in one accessible Discord channel; history is not crawled or persisted. |
| ads_discord_channel_sendA | Send one plain-text message to one selected Discord channel after explicit confirm=true. No bulk sends and no member DMs. |
| ads_mastodon_account_listB | List locally connected Mastodon accounts without returning access tokens. |
| ads_mastodon_auth_startA | Start a Mastodon OAuth 2 + PKCE account connection for one instance. Open the returned authorization_url and then complete it with the one-time code. |
| ads_mastodon_auth_completeB | Complete a pending Mastodon OAuth connection with the one-time code shown by the instance. The code is not logged or returned. |
| ads_mastodon_statusC | Check the connected Mastodon account and current profile through verify_credentials. |
| ads_mastodon_thread_createA | Publish one explicitly provided Mastodon thread in order after confirm=true. Every post after the first replies to the previous post; optionally pin only the thread root. |
| ads_mastodon_pin_statusB | Pin one selected Mastodon status after explicit confirm=true. |
| ads_mastodon_notification_listB | Read a bounded page of Mastodon mention notifications to prepare a context-aware reply. This tool never publishes anything. |
| ads_mastodon_hashtag_searchB | Read public Mastodon hashtag timelines for AI-related discovery, score cost/local-model/MCP intent signals and return ranked candidate accounts with bounded post evidence. This never follows or contacts anyone. |
| ads_mastodon_interest_searchC | Run the expanded Mastodon interest discovery pack for AI agents, MCP, local/self-hosted models, providers, costs and limits; score pain/intent signals and save bounded public evidence to the local research base. This never follows or contacts anyone. |
| ads_mastodon_followA | Follow one selected Mastodon account after explicit confirm=true. Search results never trigger follows automatically; read:follows is required to check existing subscriptions and write:follows is required to follow. |
| ads_mastodon_replyA | Reply to one selected Mastodon status after explicit confirm=true. The target status is checked first, its author mention is added automatically, and the reply visibility cannot be broader than the target. |
| ads_mastodon_direct_messageA | Send one private Mastodon Direct status to one selected account after explicit confirm=true. The target mention is added automatically; no bulk messaging. |
| ads_mastodon_public_mentionA | Publish one public Mastodon mention to one selected account after explicit confirm=true. Optionally reply to one public status; no bulk messaging. |
| ads_mastodon_message_batchA | Send an explicitly provided ordered list of Mastodon direct messages, public mentions or replies after confirm=true. Each item names its recipient, exact text and mode; discovery never creates items automatically. |
| ads_mastodon_profile_updateB | Update selected Mastodon profile fields after explicit confirm=true. Unspecified fields remain unchanged. |
| ads_telegram_account_authB | Continue local Telegram user-account login through the selected backend. GramJS supports starting a local QR flow; never paste Telegram codes or 2FA passwords into a hosted chat. |
| ads_telegram_account_searchA | Read recent history or search one Telegram chat through the connected local GramJS/TDLib account. Requires Telegram Premium; no messages are sent. |
| ads_telegram_chat_mark_readA | Mark one human one-to-one Telegram chat as read. Requires explicit confirm=true; sends no message, does not create a local dialogue row, and does not mark bots or channels. |
| ads_telegram_public_posts_searchA | Search public Telegram channel posts globally by full-text query. Requires Telegram Premium. Uses a free daily quota when available and never spends Stars without explicit confirm_paid=true plus a sufficient max_stars limit. |
| ads_telegram_action_queue_createA | Create an ordered local Telegram action queue from explicitly supplied targets and exact texts. Requires confirm=true; it does not execute anything. Supports one-to-one messages, group replies, channel-post replies and one-message reactions. No recipient discovery is performed. Each action is assigned a random pause between min_delay_seconds and max_delay_seconds (default 15–66 s) before it runs. |
| ads_telegram_action_queue_listB | List the exact actions and statuses in one local Telegram action queue. Read-only; it does not send or mark anything read. |
| ads_telegram_action_queue_processA | Execute an explicitly approved Telegram action queue in sequence. Requires Premium and confirm=true; verifies each action through the existing send/reply/reaction tools, waits at least the configured interval, and stops on the first error without retrying. |
| ads_telegram_action_queue_cancelA | Cancel all still-queued actions in one local Telegram action queue. Requires confirm=true; already sent or failed actions are not changed. |
| ads_telegram_account_sendA | Send one plain-text Telegram message through the selected local GramJS/TDLib account. Requires Telegram Premium, prior approval of the exact text, and explicit confirm=true; reports a read-only unread-human-dialog preflight without blocking the write; bulk outreach is not supported. |
| ads_telegram_message_reactA | Add one emoji reaction to one existing Telegram message through the selected local GramJS/TDLib account. Requires Telegram Premium, explicit confirm=true and (when available) expected_text to fail closed if the message changed; does not send text or mark the chat read. |
| ads_telegram_channel_direct_checkA | Read-only preflight for a broadcast Telegram channel: checks Direct Messages, the connected discussion chat, and public contacts from the channel description. Requires Telegram Premium; never joins, sends a message, or creates a public post. |
| ads_telegram_channel_direct_sendA | Send one explicitly approved plain-text message to a Telegram channel's Direct Messages monoforum, only when a read-only preflight confirms that Direct Messages are enabled. Requires Telegram Premium and confirm=true; never publishes to the channel feed. |
| ads_telegram_public_post_replyA | Reply publicly to one Telegram channel post through its linked discussion only when the post contains a relevant explicit request and the resource rules permit it. Requires Telegram Premium and explicit confirm=true; reports a read-only unread-human-dialog preflight without blocking the write; never sends a private message and never bypasses moderation or guest-send restrictions. |
| ads_telegram_chat_replyA | Reply publicly to one message inside an accessible Telegram group when the message contains a relevant explicit request and the resource rules permit it. Requires Telegram Premium and explicit confirm=true; reports a read-only unread-human-dialog preflight without blocking the write; never sends a private message and never bypasses moderation, CAPTCHA or guest-send restrictions. |
| ads_automation_rule_createC | Create a KPI rule. Supported actions are pause_campaign and notify. |
| ads_automation_rule_listC | List automation rules, optionally for one campaign. |
| ads_automation_runB | Evaluate automation rules. This is dry-run unless execute=true is explicitly set. |
| ads_store_statusB | Show local SQLite storage path, row counts and safety defaults. |
| ads_network_statusA | Check the optional Ads Network Relay connection. The local MCP works without it. |
| ads_dstore_statusA | Show the dStore card and advertising-placement adapter configuration. It reads public catalog data and does not send credentials or publish changes. |
| ads_dstore_searchB | Search dStore's verified public advertising inventory. Use this for requests to find channels or sites for mutual promotion; AIKI community proposals are separate and remain unverified until dStore checks them. |
| ads_dstore_card_getA | Read one public dStore card by numeric id or dStore card URL. Returns normalized title, resource URL, icon, platform, tags and description for catalog discovery. |
| ads_dstore_cards_getA | Read up to 50 public dStore cards by id or URL. The result keeps successful cards and reports individual lookup errors. |
| ads_aiki_statusC | Show the AIKI community source for AdsMCP. AIKI proposals are unverified leads; dStore must verify them before adding a platform to the catalog. |
| ads_aiki_setup_guideA | Return the AIKI MCP configuration plus the AdsMCP workflow: search the community topic, check duplicates and topic rules before publishing a new channel or advertising offer, then hand the unverified proposal to dStore. |
| ads_network_platform_listC | List verified or reported advertising platforms from the optional network registry. |
| ads_network_platform_reportC | Anonymously report a new advertising platform or integration candidate. No credentials are sent. |
| ads_network_profile_publishC | Publish an opt-in networking profile without advertising credentials or raw campaign data. |
| ads_network_profile_listC | Find opt-in networking profiles in the optional relay registry. |
| ads_network_placement_publishC | Publish an opt-in advertising placement offer. Provider credentials stay local. |
| ads_network_inventory_listC | List verified advertising placement offers from the optional relay registry. |
| ads_network_conversion_reportC | Opt-in anonymous conversion report. Send only opaque references and aggregates, never raw PII or credentials. |
| ads_network_aggregate_publishC | Opt-in publish of aggregated campaign metrics. The relay never receives raw local events. |
| ads_network_sync_manifestC | Pull opt-in network catalog changes since an ISO timestamp. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 143 tools
The set contains many near-overlapping tools, especially across Telegram Ads report/sync/API variants, Telegram action queues, public reply/post research, and multiple local catalog tools. Descriptions add context, but an agent can easily confuse names like ads_telegram_ads_report vs ads_telegram_ads_api_report or ads_telegram_ai_post_list vs ads_interest_research_post_list.
All tools use an ads_ prefix and snake_case, giving a mostly predictable namespace. However, action ordering is uneven across compound names, there is a visible typo in ads_dashbord_start/stop, and similar concepts use inconsistent labels such as cards_get vs card_get and dstore vs tg_resource.
143 tools is far too many for a coherent MCP surface. Even for a broad advertising automation server, the set spans many domains, providers, local catalogs, research workflows, networking, and messaging channels, making discovery and correct selection very difficult.
The surface is broad and covers many advertising, reporting, sync, outreach, and local analytics workflows, but lifecycle coverage is uneven. Some entities lack delete operations, several ad platforms are mostly read/sync-only, and write coverage is concentrated in specific providers such as Telegram, Yandex Direct, and Mastodon.