yandex-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| yandex_wordstat_get_topC | Wordstat top requests + associations; num_phrases 1..2000; devices DEVICE_* list. |
| yandex_wordstat_dynamicsB | Get Wordstat demand over time using UTC dates YYYY-MM-DD and the server budget gate. |
| yandex_wordstat_regionsB | Get Wordstat demand by region for the last 30 days through the server budget gate. |
| yandex_wordstat_regions_treeB | Get the Wordstat region tree through Cloud credentials and the server budget gate. |
| yandex_serp_prepareB | Prepare an asynchronous Yandex SERP request without a live provider call. |
| yandex_serp_submitB | Queue an approved asynchronous Yandex SERP request. |
| yandex_serp_statusB | Return durable status for an asynchronous Yandex SERP job. |
| yandex_serp_get_resultB | Return raw provenance metadata and normalized Yandex SERP output. |
| direct_list_campaignsC | List Direct campaigns through the strict read allowlist. |
| direct_get_campaignB | Get one Direct campaign by numeric id. |
| direct_get_inventoryC | Run a provider-native get against the explicit Direct inventory allowlist. |
| direct_get_statisticsC | Read campaign statistics; returns completed TSV rows or safe offline queue status. |
| direct_get_goal_statisticsA | Direct Reports statistics broken down by 1-10 Metrika goals and attribution models (FCCD, LC, LSCCD, AUTO). Use for CPA/ROI by goal; for plain cost/clicks use |
| direct_list_strategiesA | List Direct shared (portfolio) strategies via Strategies.get v501 with paging. For a campaign's own strategy use |
| direct_keyword_forecastC | Forecast search-volume presence by device for phrases and regions. |
| direct_prepare_changesA | Draft a Direct change set and open an unaccepted, expiring approval. The draft carries a diff hash and an approval_id. A human must accept the
approval before |
| direct_apply_changesA | Apply an accepted Direct change set (from |
| direct_writeB | Idempotent non-destructive Direct write (no deletes or bid changes: use direct_prepare_write) behind the server write flag and audit log. Prefer |
| metrika_list_countersB | List Metrika counters through a server-side read-only credential. |
| metrika_list_goalsC | List goals for one positive Metrika counter id. |
| metrika_get_statisticsC | Run a bounded read-only Metrika reporting request. |
| metrika_apply_goalB | Autonomously create or update a Metrika goal (idempotent, readback). Deleting a goal needs a human approval: metrika_manage_prepare(operation='goal_delete'). |
| metrika_reportA | One-call Metrika report with optional period comparison (compare_date1/2): totals, abs/% deltas, sampling info, JSON or CSV. Use for period-over-period analysis; raw params via |
| webmaster_get_userA | Read the OAuth account user identifier; OAuth stays on the server. |
| webmaster_list_hostsB | Read one bounded page of sites accessible to the server account. |
| webmaster_get_hostB | Read metadata for an exact Webmaster host identifier. |
| webmaster_get_verificationB | Read ownership verification state without starting verification. |
| webmaster_get_summaryC | Read indexing and site summary; missing metrics remain missing. |
| webmaster_get_diagnosticsB | Read problems with native severity, presence state and state-change time. |
| webmaster_get_query_historyC | Read at most 31 days of aggregate or selected-query indicators. |
| webmaster_list_popular_queriesB | Read one page of popular queries; explicit periods are at most 31 days. |
| webmaster_get_indexing_historyB | Read at most 31 days of indexing history. |
| webmaster_list_indexing_samplesB | Read one page of indexing samples with continuation metadata. |
| webmaster_list_search_urlsB | Read one page of URLs in search; a sample is not the full index. |
| webmaster_get_search_urls_historyC | Read at most 31 days of search URL count history. |
| webmaster_get_search_events_historyC | Read at most 31 days of APPEARED_IN_SEARCH / REMOVED_FROM_SEARCH page counts. |
| webmaster_list_search_eventsC | Read one page (limit 1-100) of pages that appeared in or were removed from search. |
| webmaster_get_sqi_historyB | Read site quality index (SQI/ИКС) history; default and maximum period is 366 days. |
| webmaster_list_important_urlsB | Read one page of monitored important URLs with indexing and search status. |
| webmaster_get_important_url_historyB | Read change history of one monitored URL; the URL must belong to the exact host. |
| webmaster_list_sitemapsC | Read one sitemap page using the upstream sitemap identifier cursor. |
| webmaster_get_sitemapC | Read detected sitemap details or registration of a submitted sitemap. |
| webmaster_list_user_sitemapsB | Read one page of submitted sitemaps with an exclusive identifier cursor. |
| webmaster_list_external_linksC | Read one page of external link samples. |
| webmaster_get_external_links_historyC | Read at most 31 days of external link history. |
| webmaster_list_broken_linksB | Read one page of broken internal link samples. |
| webmaster_get_broken_links_historyB | Read at most 31 days of broken internal link history. |
| webmaster_list_recrawl_queueB | Read one page of asynchronous recrawl requests. |
| webmaster_get_recrawl_quotaB | Read the daily quota and remaining submissions. |
| webmaster_get_recrawl_taskB | Read IN_PROGRESS/DONE/FAILED; DONE does not prove search indexing. |
| webmaster_prepare_recrawlA | Prepare exactly one URL for human approval after ownership, quota and duplicate checks. |
| webmaster_prepare_sitemapC | Prepare one sitemap registration for expiring human approval. |
| webmaster_apply_recrawlB | Submit one accepted URL exactly once. Uncertain POSTs are reconciled without retransmission. |
| webmaster_apply_sitemapC | Submit one accepted sitemap with a durable key and registration readback. |
| webmaster_reconcile_actionC | Read and reconcile this principal's existing action. This tool cannot send a POST. |
| audience_list_segmentsB | List Audience segments visible to the server-side Audience credential. |
| audience_get_segmentB | Read one segment by filtering the documented authoritative segment list. |
| audience_list_pixelsA | List Audience tracking pixels visible to the server-side credential. |
| audience_get_pixelB | Read one pixel by filtering the documented authoritative pixel list. |
| audience_validate_createB | Validate a closed Audience create payload offline and return its immutable confirmation hash. |
| audience_create_geo_circleC | Run one guarded geo-circle create; uncertain outcomes are not resent. |
| audience_create_geo_polygonC | Run one guarded geo-polygon create; |
| audience_create_pixelC | Run one guarded tracking-pixel create; uncertain outcomes are not resent. |
| audience_create_pixel_viewersC | Run one guarded pixel-viewer segment create; uncertain outcomes are not resent. |
| audience_reconcile_createC | Reconcile one owned pending create by saved object id without sending another POST. |
| metrika_logs_evaluateA | Check whether a Metrika Logs API export fits the counter quota (possible, max days). Use before |
| metrika_logs_listB | List Logs API requests of a counter with status (created, processed, canceled...) and parts. Use to find request_id. Read-only. |
| metrika_logs_getB | Status and parts of one Logs API request; poll until status=processed, then |
| metrika_logs_download_partB | Preview one processed Logs API part as columns + up to max_rows (<=1000) rows; truncated=true if more. For full exports download outside chat. Read-only. |
| metrika_logs_createA | Create a Metrika Logs API export (spends the 10 GB per-counter quota). Run |
| metrika_logs_cleanupA | Free Logs API quota: action=clean deletes prepared files of a processed request, cancel stops an unprocessed one. Irreversible; confirm first; needs YANDEX_METRIKA_LOGS_ENABLED. |
| direct_list_agency_clientsA | List an agency's Direct clients (Login, ClientId, ClientInfo, Currency...) via AgencyClients.get; agency tokens only. Use the Login as YANDEX_DIRECT_CLIENT_LOGIN for that client. 10 units + 1/client. Read-only. |
| metrika_validate_offline_conversionsA | Validate offline conversion rows locally (Target, DateTime past Unix secs, one of UserId/ClientId/Yclid/PurchaseId, Price, Currency); returns CSV preview + confirmation_hash. No API call. |
| metrika_upload_offline_conversionsA | Upload offline conversions to Metrika (affects goal stats and Direct optimisation). Needs the hash from metrika_validate_offline_conversions, user confirmation and YANDEX_METRIKA_WRITE_ENABLED. |
| metrika_list_offline_conversion_uploadsC | List offline conversion uploads of a counter (id, status, line counts, type). Read-only. |
| metrika_get_offline_conversion_uploadB | Status of one offline conversion upload (processing can take up to 3 hours). Read-only. |
| direct_get_clientA | Own Direct account info (Login, ClientId, currency, type) via Clients.get; no phones/representatives. Agencies: |
| direct_deduplicate_keywordsB | Merge duplicate phrases and add cross-negatives via KeywordsResearch.deduplicate before adding keywords. Up to 10000 phrases; nothing is saved. Read-only. |
| direct_get_dictionariesA | Direct reference dictionaries (Currencies, GeoRegions, TimeZones, Constants, Interests, AdCategories...). Use for region ids/min bids before forecasts or writes. GeoRegions is large. Read-only. |
| direct_check_changesB | What changed in Direct since timestamp (UTC ISO, Z) via Changes: checkCampaigns (which campaigns), check (objects in given ids), checkDictionaries. Use for incremental sync instead of re-reading everything. Read-only. |
| direct_get_bid_modifiersB | Bid adjustments (mobile, demographics, retargeting, regional...) by campaign/group/id; levels CAMPAIGN, AD_GROUP. Read-only. |
| direct_get_bidsA | Bids.get: current Bid/ContextBid plus optional search auction fields for keywords. One of campaign_ids, ad_group_ids, keyword_ids required. Monetary values are micros (×1e6). Read-only. |
| direct_list_ad_imagesB | AdImages.get: uploaded ad images (hash, name, type, subtype, associated). Optional hashes (≤10000) or associated YES/NO. Read-only. |
| direct_list_ad_extensionsC | Callout extensions (Id, Type, Status, text). Sitelinks: |
| direct_list_audience_targetsC | Audience targets (retargeting/interest) by Ids, AdGroupIds or CampaignIds. Read-only. |
| direct_list_retargeting_listsC | Retargeting and audience-selection lists (Id, Type, Name, IsAvailable). Read-only. |
| direct_list_creativesC | Creatives (image/HTML5/video/smart): Id, Type, Name, size. Read-only. |
| direct_list_feedsC | Product feeds: status, item count, update time. Read-only. |
| direct_list_turbo_pagesC | Turbo pages (Id, Name, Href); use Id for |
| direct_list_negative_keyword_setsC | Shared negative keyword sets by Ids (required by the API). Read-only. |
| direct_list_ad_videosC | Ad video status by video Ids (required by the API). Read-only. |
| direct_get_keyword_bidsA | Current keyword bids and serving status by CampaignIds, AdGroupIds or KeywordIds (one required). Change bids via |
| direct_list_leadsA | Turbo page leads metadata by TurboPageIds; form data (PII) only with include_data=true. Read-only. |
| direct_list_sitelinksC | Sitelink sets (Id + Title/Href/Description). Optional Ids filter. Read-only. |
| direct_list_businessesC | Yandex Business profiles (Id, Name, IsPublished, Rubric); no Phone/Address by default. Read-only. |
| direct_list_smart_ad_targetsC | Smart-banner feed filters (SmartAdTargets) by campaign/group/id. Read-only. |
| direct_list_dynamic_text_ad_targetsB | Dynamic text ad targeting conditions by campaign/group/id. Read-only. |
| direct_list_dynamic_feed_ad_targetsC | Dynamic feed ad filters (DynamicFeedAdTargets) by campaign/group/id. Read-only. |
| webmaster_get_ownersB | Verified owners of a Webmaster host (login, verification type/date). Read-only. |
| webmaster_list_feedsB | Product/service feeds added to a Webmaster host. Details via |
| webmaster_get_feedB | One Webmaster feed's status and errors by feed URL. Read-only. |
| webmaster_get_feed_problemsC | Host-level feed problems in Webmaster (blocking offers). Read-only. |
| webmaster_list_regionsB | Webmaster region directory (ids for |
| webmaster_query_analyticsB | Webmaster query/URL analytics with region and text/statistic filters (up to 500 rows). Deeper than |
| webmaster_get_pro_limitsA | Enhanced SERP-query export quotas for a host (GET …/pro/limits). Check before |
| webmaster_list_pro_datesB | Dates available for enhanced SERP-query export (GET …/pro/serp/dates, up to ~550 days). Read-only. |
| webmaster_get_pro_export_statusB | Status of an enhanced export task (IN_PROGRESS / SUCCESS with url / FAILED). Read-only. |
| webmaster_start_pro_exportA | Start enhanced SERP-query export (POST …/pro/serp/queries/download/). Spends daily quota; needs YANDEX_WEBMASTER_WRITE_ENABLED. use_pro_tariff=true (paid) first returns an approval to accept, then pass approval_id. Poll |
| metrika_manage_readB | Documented Metrika management/report reads by operation name; args = path ids, query{...}. operation='catalog' lists all operations with docs (local). Read-only. |
| metrika_manage_prepareA | Open an approval for one allowlisted Metrika write/upload (args: ids, query, body, csv). Bound to principal, account and exact request; nothing is sent. |
| metrika_manage_applyB | Execute an accepted Metrika write once (write flag, approval_id, idempotency_key), then read back. Same key replays the stored result. Writes. |
| metrika_manage_reconcileB | Settle an uncertain Metrika management write by reading the provider; never resends. |
| webmaster_manage_readB | Documented Webmaster management/report reads by operation name; args = path ids, query{...}. operation='catalog' lists all operations with docs (local). Read-only. |
| webmaster_manage_prepareA | Open an approval for one allowlisted Webmaster write/upload (args: ids, query, body, csv). Bound to principal, account and exact request; nothing is sent. |
| webmaster_manage_applyB | Execute an accepted Webmaster write once (write flag, approval_id, idempotency_key), then read back. Same key replays the stored result. Writes. |
| webmaster_manage_reconcileB | Settle an uncertain Webmaster management write by reading the provider; never resends. |
| audience_manage_readB | Documented Audience management/report reads by operation name; args = path ids, query{...}. operation='catalog' lists all operations with docs (local). Read-only. |
| audience_manage_prepareB | Open an approval for one allowlisted Audience write/upload (args: ids, query, body, csv). Bound to principal, account and exact request; nothing is sent. |
| audience_manage_applyB | Execute an accepted Audience write once (write flag, approval_id, idempotency_key), then read back. Same key replays the stored result. Writes. |
| audience_manage_reconcileB | Settle an uncertain Audience management write by reading the provider; never resends. |
| direct_prepare_writeB | Open an approval for one allowlisted Direct write (any service/method; yandex://guide/prepare-apply). Bound to service, method, items, account and endpoint. Nothing is sent. |
| direct_apply_writeB | Execute an accepted Direct write once (write flag, approval_id, idempotency_key), then read back. Same key replays the stored result. Writes; spends units. |
| yandex_check_updateA | Check GitHub for a newer zai-yandex-mcp release and suggest the update command. Suggest-only, 24h cache unless force=true; never calls Yandex. |
| yandex_auth_statusA | Show which Yandex OAuth services have tokens (never values). Pending device-flow user_code if any. Local. |
| yandex_auth_startA | Start Yandex OAuth device-code flow: returns verification URL + user_code. Uses MCP URL elicitation when the client supports it. Pass client_id or set YANDEX_OAUTH_CLIENT_ID. No token in output. |
| yandex_auth_finishA | Poll pending device-code auth; on success write 0600 token files and hot-reload (no restart). Never returns the token. Call after the user confirms in the browser. |
| yandex_setup_toolsetsA | Pick Yandex platforms (direct, metrika, webmaster, audience, wordstat, serp, maps, manage) or a preset (direct-only, analytics, seo, everything) and tool_loading eager|lazy -> YANDEX_TOOLSETS + token cost. write=true saves to mcp.local.json (stdio). No secrets. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| yandex_setup | First-run setup: ask which Yandex platforms and eager/lazy tool loading; save both. |
| campaign_audit | Audit Yandex Direct campaigns and recommend fixes. |
| weekly_report | Weekly marketing report: Metrika traffic/goals + Direct spend. |
| seo_audit | Yandex Webmaster SEO health check with a fix list. |
| budget_scaling | Find Direct campaigns that can take more budget and prepare a change. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| toolsets | Active toolsets, read-only mode and the env vars to change them. |
| playbook | How to work with Yandex services here: flows, costs, safe writes, guides. |
TDQS
Scored across 127 tools
Many tools have near-overlapping purposes: generic readers like direct_get_inventory and *_manage_read duplicate specific list/get tools, while direct_prepare_write, direct_prepare_changes, direct_write, and direct_apply_changes create multiple write paths. Rich descriptions help, but with 127 tools the boundaries remain hard to keep straight.
Names are overwhelmingly snake_case with verb+noun patterns grouped by service (direct_*, metrika_*, webmaster_*, audience_*). Deviations such as the yandex_* prefix for Wordstat/SERP/auth/setup and occasional noun-style names (e.g., yandex_wordstat_dynamics) are minor but prevent a perfect score.
127 tools is an extreme mismatch for a single MCP server; it far exceeds the 50-tool threshold and will cause context bloat and selection errors. Even accounting for the multi-platform scope, the count is unreasonable.
Coverage across Direct, Metrika, Webmaster, Audience, and Wordstat is extensive, with read, write, approval, and reconciliation paths. Minor gaps remain: no maps tools appear despite being referenced in setup, and destructive operations are intentionally omitted or routed through approvals.