Skip to main content
Glama
OlegRadinuk

Yandex Direct MCP Server

by OlegRadinuk

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
YDIRECT_ENVNoEnvironment: 'sandbox' or 'production'sandbox
YDIRECT_TOKENYesOAuth token for Yandex Direct API

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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"} }}

confirm: True to actually create campaigns; False returns dry-run plan.

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)

confirm: True to execute; False returns dry-run plan.

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

confirm: True to execute; False returns dry-run plan.
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

confirm: True to execute; False returns dry-run plan.

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)

confirm: True to execute; False returns dry-run plan.
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)

confirm: True to add keywords; False returns dry-run plan.

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

confirm: True to execute; False returns dry-run plan.

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

confirm: True to execute; False returns dry-run plan.

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"]}}]

confirm: True to execute; False returns dry-run plan.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

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