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 |
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": 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
- 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/OlegRadinuk/yandex-direct-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server