yandex-direct-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YANDEX_DIRECT_TOKEN | Yes | Your Yandex Direct API token | |
| YANDEX_DIRECT_CLIENT_LOGIN | No | Client login for agency access |
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 |
|---|---|
| direct_list_campaignsA | List campaigns with project (from projects.json), state, daily/weekly budget ₽, negatives count, excluded sites count. READ-ONLY. |
| direct_get_campaignA | Get one campaign by Yandex Id (detail + strategy + excluded sites + negatives sample). READ-ONLY. |
| direct_get_negativesA | List campaign-level negative keywords. READ-ONLY. Group-level negatives are separate. |
| direct_list_adgroupsA | List ad groups for campaign_ids or project. Includes RegionIds. READ-ONLY. |
| direct_list_keywordsB | List keywords for campaign_ids / adgroup_ids / project. READ-ONLY. |
| direct_list_adsB | List ads for campaign_ids / adgroup_ids / project. READ-ONLY. UNIFIED: ACCEPTED OFF may be pool, not ban. |
| direct_reportA | Campaign performance (cost, clicks, impressions, CTR, CPC) for date range. Conversions=soft Metrika. READ-ONLY. May poll ~1 min. |
| direct_project_mapA | Show campaign→project mapping rules (projects.json) + live non-archived list. READ-ONLY. |
| direct_account_summaryA | Short cabinet summary: counts by project/state + optional last-N-days cost. READ-ONLY. |
| direct_get_excluded_sitesB | List ExcludedSites for campaign(s). READ-ONLY. |
| direct_list_bidmodifiersA | List campaign-level bid modifiers (mobile/tablet/desktop/demographics). READ-ONLY. |
| direct_search_geo_regionsA | Search Yandex Direct GeoRegions dictionary by name substring. READ-ONLY. Use Federation subject IDs for RegionIds excludes (negative). |
| direct_report_breakdownB | READ: performance report with breakdown dimension (Placement|AdGroupId|Criterion|Device|AdId|Date|…). Soft Conversions. For RSYA junk use Placement. Polls offline report. |
| direct_get_adA | READ: full ad detail (titles, text, href, image, state). ad_id may be int64 string. |
| direct_client_infoA | READ: clients.get — login, currency, VAT, shared account flags, restrictions snapshot. |
| direct_list_campaign_fundsC | READ: campaign funds / shared account spend fields (where available on get). |
| direct_pingA | READ: health check — token present, units remaining, campaign count by project. |
| direct_report_search_queriesA | READ: SEARCH_QUERY_PERFORMANCE_REPORT — real user queries (not just Criterion keys). Cost/clicks/CTR/CPC + soft Conversions. Offline report may poll ~1 min. Top by cost. |
| direct_get_keyword_bidsA | READ: keywordbids.get — SearchBid/ContextBid/AuctionBids for keywords. Pass keyword_ids and/or campaign_ids/project. |
| direct_get_autotargetingB | READ: ---autotargeting keyword rows + AutotargetingCategories + Bid. project/campaign_ids. |
| direct_get_strategyA | READ: full BiddingStrategy + PriorityGoals + counters for one campaign (Text/Unified). |
| direct_list_sitelinksA | READ: sitelinks.get — by sitelink_set_ids, or discover Ids from ads in project/campaign_ids (API requires Ids). |
| direct_list_adextensionsB | READ: adextensions.get — callouts library (ids + text). |
| direct_check_changesA | READ: changes.checkCampaigns — which campaigns changed since Timestamp (ISO or API format). |
| direct_account_balanceB | READ: clients.get financial flags + sample campaign Funds/SharedAccountFunds (cabinet balance snapshot). |
| direct_list_retargeting_listsC | READ: retargetinglists.get — Metrika audience lists in cabinet. |
| direct_list_audience_targetsB | READ: audiencetargets.get for campaign/adgroup (retarget conditions on groups). |
| direct_list_feedsA | READ: feeds.get — API requires ids. Pass feed ids from create/add or UI. |
| direct_list_advideosA | READ: advideos.get by ids (API requires Ids). Use after upload_advideo. |
| direct_get_group_negativesA | READ: ad group NegativeKeywords (separate from campaign-level). |
| direct_get_time_targetingC | READ: campaign TimeTargeting schedule. |
| direct_product_attributionB | OPTIONAL READ: your product DB via custom SQL (not soft Metrika Conversions). Enable PRODUCT_ATTRIBUTION_ENABLED=true and set PRODUCT_ATTRIBUTION_SQL or use built-in only if you customized it. Default: disabled with setup hints. |
| direct_list_dictionariesA | READ: dictionaries.get — supply DictionaryNames e.g. SupplySidePlatforms, AudienceCriteriaTypes, Currencies, MetroStations, TimeZones, Interests. |
| direct_suspend_campaignsA | WRITE: suspend campaigns (State→SUSPENDED). Requires allow_write=true + project or campaign_ids. Stops spend. |
| direct_resume_campaignsA | WRITE: resume suspended campaigns. Requires allow_write=true + project/campaign_ids. Do NOT auto-resume killed Chat/Skazki without owner intent. |
| direct_set_excluded_sitesA | WRITE: set campaign ExcludedSites (RSYA junk packages/DSP). mode=merge (default) or replace. allow_write=true required. Never auto-exclude dsp.yandex.ru unless sites list includes it. |
| direct_set_region_excludesA | WRITE: add negative RegionIds on all ad groups of campaigns (exclude subjects under Russia 225). Pass positive region ids (e.g. 11010 Дагестан) — tool stores negatives. Preserves existing positives (225 etc). allow_write=true. |
| direct_set_device_bid_modifiersA | WRITE: campaign device bid mods. ONE field per API call (Mobile/Tablet/Desktop). BidModifier 0=off, 100=default, 50=−50%, 130=+30%. allow_write=true. Desktop may 6000-conflict if Mobile=0. |
| direct_set_network_weekly_budgetA | WRITE: Network WB_MAXIMUM_CLICKS WeeklySpendLimit (+ optional BidCeiling) for RSYA-style campaigns. Search left as-is. ₽ → micros. allow_write=true. Does not touch DailyBudget in same call. |
| direct_set_keyword_bidsA | WRITE: set keyword search bids (₽) via keywordbids.set. keyword_ids required. allow_write=true. |
| direct_set_keyword_statesA | WRITE: suspend or resume keywords by id. allow_write=true + project scope. |
| direct_set_search_weekly_budgetA | WRITE: Search HIGHEST_POSITION + WeeklySpendLimit ₽, Network SERVING_OFF (JTBD-style). Does not change DailyBudget. allow_write=true. Aborts if live strategy is unexpected unless force=true. |
| direct_set_daily_budgetA | WRITE: campaign DailyBudget ₽ (Amount micros). Mode STANDARD|DISTRIBUTED. Do NOT send in same update as WeeklySpendLimit (API 4004). allow_write=true. |
| direct_set_priority_goalsB | WRITE: PriorityGoals SET (no REMOVE in API). goals=[{goal_id, value_rub}]. Weights in ₽. allow_write=true. Prefer payment-heavy; avoid max-conv on form alone. |
| direct_set_negativesB | WRITE: campaign NegativeKeywords. mode=merge|replace. Phrases as Direct expects (morphology; avoid bare +). allow_write=true. |
| direct_ads_set_stateA | WRITE: ads suspend | resume | moderate. Pass ad_ids (int64 as number or string ok). project scope via parent campaigns. allow_write=true. |
| direct_update_ad_hrefA | WRITE: update TextAd Href (landing/UTM) for ads. ad_hrefs=[{ad_id, href}]. allow_write=true. May need moderate after. |
| direct_add_keywordsA | WRITE: add keywords to ad group. keywords=[{keyword, bid_rub?}]. bid optional (micros). allow_write=true. Does not auto-enable AT. |
| direct_set_demographics_bid_modifierA | WRITE: campaign demographics bid mod (age and/or gender). BidModifier 0=exclude. Age e.g. AGE_0_17, AGE_18_24, AGE_55. allow_write=true. |
| direct_update_adgroup_regionsA | WRITE: set absolute RegionIds on specific ad groups (positives + negatives). Example [225,-11010]. allow_write=true. |
| direct_update_ad_textC | WRITE: ads.update TextAd Title/Title2/Text/Href/DisplayUrlPath/AdImageHash/SitelinkSetId. No ₽·— VPN. optional moderate_after. allow_write=true. |
| direct_set_max_convB | WRITE: Search WB_MAXIMUM_CONVERSION_RATE + GoalId + WeeklySpendLimit ₽, Network SERVING_OFF (default). Unified/Text auto. allow_write=true. Prefer payment goals over form alone. |
| direct_set_strategyB | WRITE: set Search strategy preset: highest_position | max_conv | max_clicks_network | serving_off_search. weekly_rub/goal_id/bid_ceiling as needed. allow_write=true. |
| direct_set_autotargetingA | WRITE: keywords.update AutotargetingCategories for AT rows. categories=[{category,value YES|NO}] e.g. EXACT,ALTERNATIVE,COMPETITOR,BROADER,ACCESSORY. Prefer plain array (API gotcha). Optional bid_rub via keywordbids. allow_write=true. |
| direct_set_group_negativesC | WRITE: adgroups.update NegativeKeywords. mode=merge|replace. allow_write=true + project. |
| direct_unarchive_campaignsA | WRITE: campaigns.unarchive. allow_write=true + project scope. Prefer resume if only SUSPENDED. |
| direct_attach_calloutsA | WRITE: ads.update TextAd CalloutSetting AdExtensionIds. Pass ad_ids + extension_ids (from add_callouts/list). allow_write=true. May re-moderate. |
| direct_set_bidmodifiersB | WRITE: bidmodifiers.set — [{id, bid_modifier}] where bid_modifier 0–1300 (0=exclude). allow_write=true. |
| direct_delete_bidmodifiersB | WRITE: bidmodifiers.delete by ids. allow_write=true. |
| direct_set_retargeting_bid_modifierA | WRITE: bidmodifiers.add RetargetingAdjustment on campaign (RetargetingConditionId + BidModifier 0–1300). allow_write=true. Used e.g. exclude visitors list. |
| direct_add_audience_targetsC | WRITE: audiencetargets.add — [{adgroup_id, retargeting_list_id, context_bid_rub?}]. allow_write=true. |
| direct_audience_targets_stateB | WRITE: audiencetargets suspend|resume|delete by ids. allow_write=true. |
| direct_set_time_targetingA | WRITE: campaigns.update TimeTargeting. schedule_items=7 strings "day,h0,h1..h23" pct 0–100, day 1=Mon…7=Sun. Or weekend_pct for quick 100wd/weekend pattern. allow_write=true. |
| direct_upload_advideoA | WRITE: advideos.add from file_path or base64. Returns video Id; poll status with list_advideos. allow_write=true. |
| direct_attach_video_extensionC | WRITE: creatives.add VideoExtensionCreative(video_id) then ads.update TextAd.VideoExtension.CreativeId. Optional moderate. allow_write=true. |
| direct_add_feedB | WRITE: feeds.add — name + url (HTTP feed) or file_path (upload). business_type RETAIL|… source URL|FILE. allow_write=true. |
| direct_delete_feedsB | WRITE: feeds.delete by ids. allow_write=true. |
| direct_update_keywordsA | WRITE: keywords.update user_param / strategy priority. items=[{keyword_id, user_param1?, user_param2?, strategy_priority?}]. For AT use set_autotargeting. allow_write=true. |
| direct_create_campaignA | WRITE: campaigns.add from zero. channel=search (HP, Network OFF) | rsya (Network max-clicks, Search OFF). Optional daily_rub, weekly_rub, bid_ceiling_rub, negatives, counter_id, utm TrackingParams, timezone. After add use add_adgroups/keywords/ads or direct_launch_pack. allow_write=true. |
| direct_add_adgroupsA | WRITE: adgroups.add. groups=[{name, region_ids?}]. Default region_ids=[225]. allow_write=true + project scope. |
| direct_add_adsA | WRITE: ads.add TextAd. ads=[{adgroup_id, title, title2?, text, href, display_url_path?, image_hash?, sitelink_set_id?, mobile?}]. Max 3 ads/group on UNIFIED. Title ≤56, Title2 ≤30, Text ≤81. No ₽·— VPN in copy. allow_write=true. |
| direct_upload_adimageA | WRITE: adimages.add from local file path (server FS) or raw base64. Returns AdImageHash for TextAd.AdImageHash. allow_write=true. |
| direct_add_sitelinksA | WRITE: sitelinks.add set. sitelinks=[{title, href, description?}]. Title≤30, Desc≤60. Returns SitelinkSetId for ads. allow_write=true. |
| direct_add_calloutsC | WRITE: adextensions callouts (≤25 chars each). Attach via UI/EPK may be limited. allow_write=true. |
| direct_register_project_campaignA | WRITE local: pin campaign_id into projects.json under project key. No Direct API. allow_write=true (or dry_run). |
| direct_archive_campaignsA | WRITE: archive campaigns (remove from active UI). Prefer suspend for reversible stop. allow_write=true. |
| direct_launch_packA | WRITE FULL LAUNCH from zero in one call: create campaign → excluded sites → adgroups → keywords (phrase+"[exact]") → optional images → ads → moderate → optional age0-17 ban → optional resume → pin projects.json. channel=search|rsya. groups: [{name, phrases[], ads:[{title,title2?,text,content}], image_path?}]. content used in utm_content. Max 3 ads/group. allow_write=true. Prefer dry_run first. |
| direct_delete_keywordsA | WRITE: keywords.delete by ids. Irreversible. allow_write=true + project scope. |
| direct_rpcA | Escape hatch: call any Direct API service.method with params JSON. Prefer typed tools. Methods add/update/delete/suspend/resume/set/moderate require allow_write=true. service e.g. campaigns, keywords, ads, adgroups, bidmodifiers, keywordbids, clients, dictionaries. |
| direct_report_rawA | READ: raw Reports API — pass full report spec (SelectionCriteria, FieldNames, ReportType…). Advanced; prefer direct_report / direct_report_breakdown. |
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/gmen1057/yandex-direct-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server