Yandex Direct MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YDIRECT_ENV | No | Environment: 'sandbox' or 'production' | sandbox |
| YDIRECT_TOKEN | Yes | OAuth token for Yandex Direct API |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_campaignsA | List advertising campaigns on the connected account. Args: limit: Max campaigns to return (1–10000). states: Filter by state — any of: ON, OFF, SUSPENDED, ENDED, ARCHIVED, CONVERTED. types: Filter by type — any of: TEXT_CAMPAIGN, MOBILE_APP_CAMPAIGN, CPM_BANNER_CAMPAIGN, UNIFIED_CAMPAIGN. Returns campaign id, name, type, status, state, daily budget, funds, start date. |
| list_ad_groupsA | List ad groups for the given campaign IDs. Args: campaign_ids: One or more campaign IDs. limit: Max results (1–10000). |
| list_adsA | List ads for given ad groups or campaigns. Args: ad_group_ids: Filter by ad group IDs (preferred for precision). campaign_ids: Filter by campaign IDs. states: Filter by state — ON, OFF, SUSPENDED, REJECTED, ARCHIVED. limit: Max results. At least one of ad_group_ids or campaign_ids is required. |
| list_keywordsA | List keywords with current bids. Args: ad_group_ids: Filter by ad group IDs. campaign_ids: Filter by campaign IDs. limit: Max results (1–10000). At least one filter is required. Note: Bids returned are in MICROS (1 RUB = 1_000_000). |
| get_balanceB | Return current account balance and key financial info. |
| get_reportA | Run a Reports-service query and return rows as list of dicts. Args: report_type: CAMPAIGN_PERFORMANCE_REPORT | AD_PERFORMANCE_REPORT | KEYWORD_PERFORMANCE_REPORT | SEARCH_QUERY_PERFORMANCE_REPORT | AD_GROUP_PERFORMANCE_REPORT. date_from: YYYY-MM-DD (start of period). date_to: YYYY-MM-DD (end of period). field_names: Columns to include, e.g. ["CampaignId","CampaignName","Impressions","Clicks","Cost","Ctr","AvgCpc"]. campaign_ids: Optional — limit report to these campaigns. ad_group_ids: Optional — limit report to these ad groups. Notes: - Cost is returned in RUB (not micros) — the server requests returnMoneyInMicros=false. - Reports API is async; this tool polls up to 5 minutes. - Popular field_names: Impressions, Clicks, Cost, Ctr, AvgCpc, Conversions, CostPerConversion, BounceRate, AvgPageviews, AvgSessionDuration. |
| add_campaignsA | Create one or more TEXT_CAMPAIGN campaigns. Args: campaigns: List of campaign objects. Each must include: - Name (str): campaign name (required) - StartDate (str): YYYY-MM-DD (required) - EndDate (str, optional): YYYY-MM-DD - DailyBudget (dict, optional): {"Amount": , "Mode": "STANDARD"|"DISTRIBUTED"} - NegativeKeywords (list[str], optional): minus-words for entire campaign - TextCampaign (dict, required for TEXT_CAMPAIGN): bidding strategy config - ManualCPC (search only, no networks): {"BiddingStrategy": { "Search": {"BiddingStrategyType": "HIGHEST_POSITION"}, "Network": {"BiddingStrategyType": "SERVING_OFF"} }} - Auto, max clicks (recommended for new campaigns): {"BiddingStrategy": { "Search": {"BiddingStrategyType": "WB_MAXIMUM_CLICKS", "WbMaximumClicks": {"WeeklySpendLimit": }}, "Network": {"BiddingStrategyType": "NETWORK_DEFAULT"} }} - Auto, target CPC: {"BiddingStrategy": { "Search": {"BiddingStrategyType": "AVERAGE_CPC", "AverageCpc": {"AverageCpc": }}, "Network": {"BiddingStrategyType": "NETWORK_DEFAULT"} }} MONEY NOTE: DailyBudget.Amount and all bid values are in MICROS. 1 RUB = 1_000_000 micros. 300 RUB/day = 300_000_000. |
| update_campaignsA | Update campaign settings (name, dates, budget, negative keywords, strategy). Args: campaigns: List of objects with Id (required) + fields to change: - Id (int): campaign ID (required) - Name (str, optional): new name - EndDate (str, optional): YYYY-MM-DD or null to remove - DailyBudget (dict, optional): {"Amount": , "Mode": "STANDARD"|"DISTRIBUTED"} - NegativeKeywords (dict, optional): {"Items": ["минус1", "минус2"]} - TextCampaign (dict, optional): update bidding strategy (same format as add_campaigns) MONEY NOTE: DailyBudget.Amount is in MICROS (1 RUB = 1_000_000). |
| suspend_campaignsA | Pause (suspend) one or more campaigns. Args: campaign_ids: List of campaign IDs to suspend. confirm: False (default) shows dry-run plan; True actually suspends. |
| resume_campaignsA | Resume previously suspended campaigns. Args: campaign_ids: List of campaign IDs to resume. confirm: False (default) shows dry-run plan; True executes. |
| archive_campaignsA | Archive campaigns (they become read-only, stats preserved). Campaign must be suspended first. Archived campaigns cannot be unarchived via API. Args: campaign_ids: List of campaign IDs to archive. confirm: False (default) shows dry-run plan; True archives. |
| add_ad_groupsA | Create ad groups inside existing campaigns. Args: ad_groups: List of ad group objects. Each must include: - Name (str): group name (required) - CampaignId (int): parent campaign ID (required) - RegionIds (list[int]): geo targeting region IDs (required). Russia = 225, Moscow = 1, Saint-Petersburg = 2. Use get region IDs from Yandex geo tree. - Type (str, optional): "TEXT_AD_GROUP" (default), "MOBILE_APP_AD_GROUP" - NegativeKeywords (list[str], optional): minus-words for this group - TrackingParams (str, optional): UTM params appended to URLs |
| add_adsA | Create text ads in ad groups. Args: ads: List of ad objects. Each must include: - AdGroupId (int): target ad group (required) - TextAd (dict): ad content (required for text ads): - Title (str): headline, max 35 chars (required) - Title2 (str, optional): second headline, max 30 chars - Text (str): body text, max 81 chars (required) - Href (str, optional): destination URL (can be set at group/keyword level) - Mobile (str): "YES"|"NO" — whether this is a mobile-only ad (default "NO") - DisplayUrlPath (str, optional): display URL path after domain (max 20 chars) - SitelinkSetId (int, optional): ID of sitelink extension set - VCardId (int, optional): ID of contact info card TIPS: - Title + Title2 must fit Yandex requirements (no caps abuse, no prohibited phrases). - After creation, ads go to DRAFT status — call moderate_ads to submit for review. - Create multiple ads per group (2-3) for A/B testing — Yandex will rotate them. |
| update_adsA | Update text ads (title, text, URL, etc.). Note: Updating an approved ad resets it to DRAFT — it must be re-moderated. Args: ads: List of objects with Id + fields to change: - Id (int): ad ID (required) - TextAd (dict, optional): fields to update: - Title (str): new headline (max 35 chars) - Title2 (str): new second headline (max 30 chars) - Text (str): new body (max 81 chars) - Href (str): new destination URL - DisplayUrlPath (str): display path after domain (max 20 chars) |
| moderate_adsA | Submit ads for moderation review by Yandex. Ads must be in DRAFT or REJECTED status. Moderation usually takes a few hours. After approval the ads get ON status and start serving. Args: ad_ids: List of ad IDs to submit. confirm: True to submit; False returns dry-run plan. |
| delete_adsA | Permanently delete ads. WARNING: Deletion is irreversible. Stats for deleted ads are lost. Consider archiving campaigns instead if you want to keep history. Args: ad_ids: List of ad IDs to delete. confirm: True to delete; False returns dry-run plan. |
| add_keywordsA | Add keywords to ad groups. Args: keywords: List of keyword objects. Each must include: - AdGroupId (int): target ad group (required) - Keyword (str): keyword phrase, e.g. "купить ноутбук москва" (required). Use ! to fix word form: "!купить ноутбук" Use + to fix stop words: "ноутбук +в москве" Use quotes for exact phrase: '"купить ноутбук"' Use [] to fix word order: "[купить ноутбук]" - Bid (int, optional): search bid in MICROS. 30 RUB = 30_000_000. - ContextBid (int, optional): YAN (network) bid in MICROS. - UserParam1 (str, optional): custom parameter 1 (passed in URL) - UserParam2 (str, optional): custom parameter 2 (passed in URL) MONEY NOTE: Bid and ContextBid are in MICROS (1 RUB = 1_000_000). Example: 50 RUB bid = 50_000_000. |
| update_keywordsA | Update keyword text or bids. Args: keywords: List of objects with Id + fields to change: - Id (int): keyword ID (required) - Keyword (str, optional): new keyword phrase - Bid (int, optional): new search bid in MICROS - ContextBid (int, optional): new YAN bid in MICROS - UserParam1 (str, optional): updated custom param 1 - UserParam2 (str, optional): updated custom param 2 MONEY NOTE: Bid and ContextBid are in MICROS (1 RUB = 1_000_000). |
| delete_keywordsA | Permanently delete keywords from ad groups. Args: keyword_ids: List of keyword IDs to delete. confirm: True to delete; False returns dry-run plan. |
| set_keyword_bidsA | Set search and/or network bids for keywords (bulk bid adjustment). Prefer this over update_keywords when you only need to change bids — it uses the dedicated bids service and is more efficient. Args: bids: List of bid objects: - KeywordId (int): keyword ID (required) - SearchBid (int): search network bid in MICROS (e.g. 30_000_000 = 30 RUB) - NetworkBid (int, optional): YAN bid in MICROS MONEY NOTE: All bids are in MICROS (1 RUB = 1_000_000). 30 RUB = 30_000_000. Do NOT confuse with RUB values. |
| add_negative_keywordsA | Add negative (minus) keywords to campaigns or ad groups. Sets the COMPLETE list of negative keywords — merges with existing ones. First call list_ad_groups or list_campaigns to get current NegativeKeywords, then include existing + new ones in your update. Args: campaign_updates: List of campaign negative keyword updates: [{"Id": , "NegativeKeywords": {"Items": ["слово1", "слово2"]}}] ad_group_updates: List of ad group negative keyword updates: [{"Id": , "NegativeKeywords": {"Items": ["слово1", "слово2"]}}] IMPORTANT: This REPLACES the current negative keyword list for each object. To add incrementally: first read current list, merge, then update. SYNTAX: Negative keywords must NOT have the minus sign — just the word/phrase. E.g. Items: ["бесплатно", "своими руками", "скачать"] |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
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/OlegRadinuk/yandex-direct-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server