yandex-api-mcp
Provides access to Yandex Cloud Search API for search results and Wordstat keyword data, including phrase frequency, dynamics, regional stats, top requests, and keyword suggestions via a service account API key.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@yandex-api-mcp list my Yandex Metrika counters"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
yandex-api-mcp
Один MCP-сервер для Яндекс.Вебмастера, Директа, Метрики, Wordstat, Аудиторий и Search API. Его можно подключить к ChatGPT и другим MCP-клиентам, чтобы запрашивать данные о сайтах, рекламе, посещениях и поиске обычным языком.
Установка по умолчанию работает только на чтение. Инструменты изменения данных скрыты и заблокированы сервером. Несколько проектов могут использовать один OAuth-токен Яндекса; access token обновляется автоматически при наличии refresh token.
Возможности
Сервис | Данные |
Вебмастер | Сайты, диагностика, запросы, индексирование, sitemap, ссылки, лимит переобхода |
Директ | Клиенты агентства, кампании, группы, объявления, ключевые фразы, ставки, отчёты |
Метрика | Счётчики, цели, сегменты, обычные отчёты, чтение готовых выгрузок Logs API |
Wordstat | Частотность фраз, динамика, регионы, подсказки |
Аудитории | Сегменты, пиксели и статистика при наличии прав |
Search API | Поисковая выдача через Yandex Cloud |
Один MCP-шлюз соединяет TypeScript-ядро для Вебмастера/Директа/Метрики и Python-модули для остальных сервисов. Доступность конкретных данных зависит от прав вашего аккаунта. Реальные read-запросы к шести API проверялись на работающем сервере; операции записи в боевых аккаунтах не тестировались.
Related MCP server: kurerok-yandex-webmaster-mcp
Перед установкой
Нужны Debian 12/13 или Ubuntu 22.04/24.04, sudo, Git, Python 3, Docker Engine и Docker Compose v2. Подойдёт VPS, VM или LXC, в котором уже разрешён Docker. Если Docker не установлен, начните с официальной инструкции для Debian или Ubuntu. Проверьте docker compose version.
Также нужны:
Яндекс-аккаунт с доступом к нужным сайтам Вебмастера, кабинетам Директа, счётчикам Метрики и Аудиториям.
Своё OAuth-приложение Яндекса с Client ID и Client Secret.
Для Wordstat и Search API отдельно: папка Yandex Cloud, сервисный аккаунт и API key.
OAuth не создаёт права на чужие сайты и кабинеты. Wordstat и Search API используют ключ Yandex Cloud, а не OAuth-токен Директа.
Шаг 1. Создайте приложение Яндекс OAuth
Войдите на oauth.yandex.ru под нужным Яндекс-аккаунтом и создайте приложение.
Укажите redirect URI:
https://oauth.yandex.ru/verification_code. Этот адрес использует мастер авторизации.Включите права на нужные сервисы:
Сервис
OAuth-разрешения
Вебмастер
webmaster:hostinfoиwebmaster:verifyДирект
direct:apiМетрика
metrika:readАудитории
audience:readЗапись в Метрику в отдельной pro-сборке
metrika:writeСохраните приложение и подготовьте Client ID и Client Secret. Для работы с боевым Директом приложению нужен одобренный доступ к Direct API; доступ к конкретным кабинетам задаётся в Директе.
Команда yp-api oauth по умолчанию запрашивает все read-разрешения из таблицы. Если нужны отдельные сервисы, укажите их: sudo yp-api oauth webmaster metrika. После добавления нового разрешения в Яндексе повторите OAuth: обновление access token не добавляет scope.
Шаг 2. Установите приложение
git clone https://github.com/5iNeX/yandex-api-mcp.git
cd yandex-api-mcp
sudo ./install.shУстановщик спросит Client ID и Client Secret; секрет вводится скрыто. Исходники попадут в /opt/yandex-api-mcp, OAuth и реестр проектов — в state/, ключи приложения — в secrets/. Эти каталоги исключены из Git и не встраиваются в Docker image. Установщик не создаёт VM/LXC и не меняет сеть хоста.
Далее используется команда yp-api. Если короткое имя yp свободно, установщик создаст и его; существующую команду yp он не заменяет.
Шаг 3. Авторизуйтесь и запустите MCP
sudo yp-api oauth
sudo yp-api service start
sudo yp-api doctor
sudo yp-api discoveroauth покажет ссылку. Откройте её в браузере, подтвердите доступ и вставьте код в терминал мастера. Не публикуйте код и токены в чате или Git. Мастер сохранит access/refresh token локально без вывода их значений.
discover покажет доступные сайты Вебмастера, счётчики Метрики и Direct-клиентов. Новый MCP слушает только 127.0.0.1:8001 на сервере. На чистой машине doctor может показать SKIP Tunnel service (optional): Tunnel для ChatGPT настраивается отдельно.
Шаг 4. Настройте Wordstat и Search API
Этот шаг нужен для всех шести сервисов. Если Wordstat и Search API не требуются, переходите к проверке остальных API.
В Yandex Cloud выберите папку с Search API и скопируйте её Folder ID.
Создайте в этой папке сервисный аккаунт, назначьте роль
search-api.webSearch.userи создайте для него API key. Если для ключа задаются области действия, включитеyc.search-api.execute. См. документацию Search API.На сервере откройте файл:
sudo nano /opt/yandex-api-mcp/secrets/yandex.envДобавьте две строки со своими значениями:
YANDEX_SEARCH_API_FOLDER_ID=ваш_folder_id YANDEX_SEARCH_API_API_KEY=ваш_api_keyЗакройте файл и восстановите права доступа:
sudo chown 0:10001 /opt/yandex-api-mcp/secrets/yandex.env sudo chmod 440 /opt/yandex-api-mcp/secrets/yandex.env sudo yp-api service restart
Не вставляйте ключ в shell-команды, сохраняемые в истории. Folder ID должен соответствовать папке сервисного аккаунта.
Шаг 5. Проверьте установку
sudo yp-api service status
sudo yp-api doctor
sudo yp-api verifyverify выполняет read-запросы через MCP и выводит статусы и форму ответа без токенов и сырых данных. Для полной зелёной проверки настройте ключи Wordstat/Search API. Если они не настроены, их строки могут показать ошибку, хотя остальные сервисы работают.
Несколько проектов
Один OAuth-токен используется для нескольких профилей. Сначала получите идентификаторы через sudo yp-api discover. Затем добавьте связи проекта:
sudo yp-api project add my-site \
--name 'Мой сайт' \
--direct-login client-login \
--counter 12345678 \
--host 'https:example.com:443'
sudo yp-api project list
sudo yp-api service restartЗамените логин, ID счётчика и host_id своими значениями. Можно указать несколько --counter и --host или пропустить неиспользуемые поля. sudo yp-api project remove my-site удаляет только локальный профиль, не данные Яндекса. При работе с несколькими клиентами указывайте проект в вызове MCP явно.
Подключение клиента
Claude, Codex, Cursor и другие локальные MCP-клиенты
На той же машине используйте stdio-команду:
docker exec -i yandex-api-mcp-yandex-api-mcp-1 node gateway/index.mjsУкажите её в настройках MCP-клиента. Локальный SSE endpoint: http://127.0.0.1:8001/sse. Он не доступен напрямую с другого компьютера. Доступ к Docker обычно означает широкие права на сервере, поэтому для общего сервера используйте отдельный ограниченный wrapper.
ChatGPT через OpenAI Secure MCP Tunnel
Для ChatGPT нужен отдельный OpenAI Tunnel: собственный Tunnel ID, runtime API key с правами Tunnels Read + Use и возможность подключать developer-mode приложения в вашем workspace. Следуйте официальной инструкции OpenAI: установите tunnel-client, создайте Tunnel и задайте для его MCP-канала stdio-команду выше.
Запускайте Tunnel как systemd-службу с автозапуском и Restart=always. Храните runtime key через systemd credentials, а для отдельного пользователя службы предоставьте только право запуска фиксированного root-owned wrapper вместо членства в группе docker. Проверьте:
sudo tunnel-client health --port 8080 --require-control-plane-poll --json
sudo yp-api tunnel statusЗатем подключите Tunnel ID в приложении ChatGPT, обновите его каталог инструментов и попросите выполнить read-вызов yandex_webmaster_hosts_list. Публичный MCP-порт для этого не нужен. yp-api не создаёт Tunnel и ключ OpenAI автоматически: это отдельные действия владельца workspace.
Управление и безопасность
Команда | Назначение |
| Проверить runtime, OAuth, файлы и связь с API |
| Показать доступные объекты Яндекса |
| Показать локальные проекты |
| Принудительно обновить access token |
| Выполнить read-only smoke через MCP |
| Посмотреть логи контейнера |
| Проверить контейнер |
| Получить локальный адрес и stdio-команду |
Публичный Docker image блокирует write-вызовы, включая create/clean/cancel в Metrika Logs API. Отдельная pro-сборка имеет preview и явное подтверждение, но не публикуется автоматически. OAuth хранится в /opt/yandex-api-mcp/state/oauth.json, Client Secret и Search API key — в /opt/yandex-api-mcp/secrets/. Перед обновлением сохраните защищённую копию этих каталогов; никому не отправляйте их содержимое.
Чтобы обновить сервер, получите новую версию исходников в вашем checkout и снова выполните sudo ./install.sh. Установщик сохраняет state/ и secrets/ и пересобирает приложение, если OAuth уже настроен. Остановка только этого MCP: sudo yp-api service stop.
Частые проблемы
Симптом | Что проверить |
| Установите Docker Engine и Compose plugin |
OAuth-код отклонён | Redirect URI должен быть |
Вебмастер показывает сайты, но запросы по ним дают 403 | Нужны оба scope: |
Директ даёт 403 | Проверьте одобрение Direct API и права аккаунта/ |
Wordstat или Search API дают 401/403 | Сверьте Folder ID, роль сервисного аккаунта и scope ключа |
ChatGPT не видит новый инструмент | Проверьте готовность Tunnel и обновите каталог инструментов приложения |
Лицензия проекта — Apache-2.0; лицензия TypeScript-ядра — MIT.
Available Tools
140 toolsaccounts.deleteC
Delete a project profile from the accounts registry file.
Inputs: account_id (required).
accounts.listARead-onlyIdempotent
List configured project profiles from the accounts registry file.
Inputs: no named parameters. Returns: result
accounts.reloadA
Reload accounts registry from disk (updates server cache).
Inputs: no named parameters.
accounts.upsertC
Create or update a project profile in the accounts registry file.
Inputs: account_id (required), name, replace, direct_client_login, +1 more.
audience.hf.activation_planB
Human-friendly: preview Direct activation plan for an Audience segment (pro-only apply tool is separate).
Inputs: targets (required), segment_id (required), apply, account_id, +1 more.
audience.hf.apply_activation_planC
Human-friendly: apply activation plan for an Audience segment in Direct (pro-only, apply=true).
Inputs: apply (required), targets (required), segment_id (required), dry_run, +2 more.
audience.hf.catalogC
Human-friendly: audience segments catalog for dashboards.
Inputs: limit, offset, account_id, include_health, +1 more.
audience.hf.find_segmentC
Human-friendly: find Audience segments by name/type/status.
Inputs: limit, types, statuses, account_id, +3 more.
audience.hf.get_segment_summaryC
Human-friendly: Audience segment summary card for UI/LLM.
Inputs: segment_id (required), account_id, include_raw, direct_client_login.
audience.hf.overlap_matrixC
Human-friendly: overlap matrix (sparse) for segment ids.
Inputs: segment_ids (required), top_k, account_id, direct_client_login.
audience.hf.segment_healthC
Human-friendly: Audience segment health check.
Inputs: segment_id (required), min_size, account_id, max_age_days, +1 more.
audience.hf.segment_perfC
Human-friendly: best-effort segment performance via Direct+Metrica.
Inputs: date_to (required), date_from (required), segment_id (required), grain, +5 more.
audience.lookalikes.getC
Audience: get lookalike by id.
Inputs: id (required), fields.
audience.lookalikes.listC
Audience: list lookalikes (best effort).
Inputs: limit, fields, offset.
audience.pixels.getC
Audience: get pixel by id.
Inputs: pixel_id (required), fields.
audience.pixels.listD
Audience: list pixels.
Inputs: limit, fields, offset.
audience.raw_callC
Audience: raw API call (escape hatch, pro-only).
Inputs: path (required), method (required), params, payload.
audience.segments.createC
Audience: create segment (pro-only).
Inputs: payload (required).
audience.segments.deleteC
Audience: delete segment (pro-only).
Inputs: segment_id (required).
audience.segments.getC
Audience: get segment by id.
Inputs: segment_id (required), fields.
audience.segments.listD
Audience: list segments.
Inputs: limit, types, fields, offset, +1 more.
audience.segments.overlapC
Audience: overlap between segments (best effort).
Inputs: segment_ids (required), mode, limit.
audience.segments.statsC
Audience: segment stats (size/status) (best effort).
Inputs: segment_id (required), fields.
audience.segments.updateC
Audience: update segment (pro-only).
Inputs: payload (required), segment_id (required).
audience.upload.errorsC
Audience: upload job errors (pro-only).
Inputs: upload_id (required).
audience.upload.startC
Audience: start upload job (pro-only, may include PII).
Inputs: payload (required), segment_id (required).
audience.upload.statusC
Audience: upload job status (pro-only).
Inputs: upload_id (required).
audience.user_infoB
Audience: user info (validate access).
Inputs: no named parameters.
dashboard.generate_option1CIdempotent
Generate a simple HTML+JSON dashboard from Direct+Metrica data (Option 1).
Inputs: date_to (required), date_from (required), goal_ids, account_id, +19 more. Returns: result
dashboard.generate_pro_htmlC
Pro-only: generate an enriched HTML+JSON dashboard with search terms, keyword diagnostics, campaign watchlist, bids, and tracking gap findings.
Inputs: date_to (required), date_from (required), goal_ids, account_id, +23 more.
direct.create_adgroupsC
Create ad groups in Yandex Direct.
Inputs: items (required), params, account_id, direct_client_login.
direct.create_adsC
Create ads in Yandex Direct.
Inputs: items (required), params, account_id, direct_client_login.
direct.create_campaignsC
Create campaigns in Yandex Direct.
Inputs: items (required), params, account_id, direct_client_login.
direct.create_keywordsC
Create keywords in Yandex Direct.
Inputs: items (required), params, account_id, direct_client_login.
direct.get_changesC
Get changes since a given timestamp.
Inputs: timestamp (required), params, account_id, field_names, +1 more.
direct.hf.apply_planB
Human-friendly: apply a previously planned Direct change plan (pro-only, apply=true).
Inputs: apply (required), plan_id (required), dry_run, account_id, +1 more.
direct.hf.apply_utm_to_adsC
Human-friendly: apply UTM template to ads in a campaign (utm_mode=auto).
Inputs: apply, dry_run, overwrite, account_id, +4 more.
direct.hf.archive_adsC
Human-friendly: archive ads.
Inputs: apply, ad_ids, dry_run, account_id, +3 more.
direct.hf.archive_campaignsC
Human-friendly: archive campaigns (by id or name).
Inputs: apply, dry_run, account_id, campaign_ids, +2 more.
direct.hf.attach_callouts_to_adsC
Human-friendly: attach callouts (adextension ids) to ads.
Inputs: apply, ad_ids, dry_run, account_id, +2 more.
direct.hf.attach_sitelinks_to_adsC
Human-friendly: attach an existing sitelinks set to ads.
Inputs: apply, ad_ids, dry_run, account_id, +2 more.
direct.hf.attach_vcard_to_adsC
Human-friendly: attach vcard id to ads (if supported).
Inputs: apply, ad_ids, dry_run, vcard_id, +2 more.
direct.hf.bid_sweep_analyzeB
Human-friendly: analyze a bid sweep plan using Direct keyword performance report (read-only).
Inputs: plan_id (required), windows (required), max_rows, account_id, +2 more.
direct.hf.bid_sweep_planC
Human-friendly: build a bid sweep experiment plan (pro-only; execution is sandbox-only).
Inputs: bid_steps_rub (required), notes, max_steps, account_id, +8 more.
direct.hf.bid_sweep_runA
Human-friendly: apply one bid sweep step (pro-only, apply=true, sandbox-only).
Inputs: apply (required), plan_id (required), step_index (required), dry_run, +2 more.
direct.hf.clear_bid_modifiersC
Human-friendly: delete bid modifiers (by campaign/type).
Inputs: apply, types, dry_run, account_id, +2 more.
direct.hf.clone_campaignC
Human-friendly: clone campaign structure into a new draft campaign (best effort).
Inputs: apply, dry_run, new_name, account_id, +3 more.
direct.hf.create_adgroup_simpleC
Human-friendly: create a simple ad group under a campaign.
Inputs: name, apply, dry_run, account_id, +4 more.
direct.hf.create_calloutsC
Human-friendly: create callouts (AdExtensions CALLOUT).
Inputs: apply, texts, dry_run, account_id, +1 more.
direct.hf.create_sitelinks_setC
Human-friendly: create a sitelinks set.
Inputs: apply, dry_run, sitelinks, account_id, +1 more.
direct.hf.create_text_ads_bulkC
Human-friendly: create multiple TextAds in an ad group.
Inputs: ads, apply, dry_run, account_id, +2 more.
direct.hf.ensure_assets_for_campaignC
Human-friendly: ensure sitelinks+callouts exist and attach to ads in campaign.
Inputs: apply, dry_run, callouts, overwrite, +5 more.
direct.hf.find_adgroupsCRead-onlyIdempotent
Human-friendly: find ad groups by campaign and name.
Inputs: limit, account_id, campaign_id, campaign_name, +2 more. Returns: meta, tool, error, result, +5 more
direct.hf.find_adsBRead-onlyIdempotent
Human-friendly: find ads by campaign/adgroup and title/href filters.
Inputs: limit, statuses, account_id, adgroup_id, +6 more. Returns: meta, tool, error, result, +5 more
direct.hf.find_campaignsCRead-onlyIdempotent
Human-friendly: find campaigns by name/status/type.
Inputs: limit, types, states, statuses, +3 more. Returns: meta, tool, error, result, +5 more
direct.hf.find_keywordsCRead-onlyIdempotent
Human-friendly: find keywords by campaign/adgroup and substring.
Inputs: limit, contains, account_id, adgroup_id, +4 more. Returns: meta, tool, error, result, +5 more
direct.hf.get_bids_summaryBRead-onlyIdempotent
Human-friendly: summarize bids in a campaign (min/avg/max).
Inputs: account_id, campaign_id, campaign_name, direct_client_login. Returns: meta, tool, error, result, +5 more
direct.hf.get_campaign_assetsC
Human-friendly: show sitelinks/callouts/vcards attached in campaign.
Inputs: account_id, campaign_id, campaign_name, direct_client_login.
direct.hf.get_campaign_summaryCRead-onlyIdempotent
Human-friendly: summarize campaigns with counts (adgroups/ads/keywords).
Inputs: limit, account_id, campaign_id, campaign_name, +1 more. Returns: meta, tool, error, result, +5 more
direct.hf.moderate_adsC
Human-friendly: send ads for moderation (by ids or campaign).
Inputs: apply, ad_ids, dry_run, account_id, +3 more.
direct.hf.pause_adsD
Human-friendly: suspend ads.
Inputs: apply, ad_ids, dry_run, account_id, +3 more.
direct.hf.pause_campaignsC
Human-friendly: suspend campaigns (by id or name).
Inputs: apply, dry_run, account_id, campaign_ids, +2 more.
direct.hf.plan_changesC
Human-friendly: build an opaque change plan for Direct (preview-only).
Inputs: operations (required), account_id, direct_client_login.
direct.hf.pressure_reportCRead-onlyIdempotent
Human-friendly: market pressure report by semantic clusters (best effort, read-only).
Inputs: date_to (required), date_from (required), grain, devices, +9 more. Returns: meta, tool, error, result, +5 more
direct.hf.report_adgroupsCRead-onlyIdempotent
Human-friendly: Direct adgroups report preset.
Inputs: date_to, date_from, account_id, campaign_id, +1 more. Returns: meta, tool, error, result, +5 more
direct.hf.report_adsCRead-onlyIdempotent
Human-friendly: Direct ads report preset.
Inputs: date_to, date_from, account_id, campaign_id, +1 more. Returns: meta, tool, error, result, +5 more
direct.hf.report_keywordsCRead-onlyIdempotent
Human-friendly: Direct keyword report preset.
Inputs: date_to, date_from, account_id, campaign_id, +1 more. Returns: meta, tool, error, result, +5 more
direct.hf.report_performanceCRead-onlyIdempotent
Human-friendly: Direct performance report preset (day/week/month).
Inputs: date_to, date_from, account_id, campaign_id, +3 more. Returns: meta, tool, error, result, +5 more
direct.hf.report_search_phrasesCRead-onlyIdempotent
Human-friendly: Direct search phrases report preset (optional).
Inputs: date_to, date_from, account_id, campaign_id, +1 more. Returns: meta, tool, error, result, +5 more
direct.hf.resume_adsC
Human-friendly: resume ads.
Inputs: apply, ad_ids, dry_run, account_id, +3 more.
direct.hf.resume_campaignsC
Human-friendly: resume campaigns (by id or name).
Inputs: apply, dry_run, account_id, campaign_ids, +2 more.
direct.hf.set_adgroup_autotargetingC
Human-friendly: enable/disable autotargeting (best effort, depends on campaign type).
Inputs: apply, dry_run, enabled, account_id, +3 more.
direct.hf.set_adgroup_negative_keywordsC
Human-friendly: set ad group negative keywords.
Inputs: apply, items, dry_run, account_id, +5 more.
direct.hf.set_adgroup_tracking_paramsC
Human-friendly: set TrackingParams for an ad group.
Inputs: apply, dry_run, account_id, adgroup_id, +2 more.
direct.hf.set_autotargeting_bidC
Human-friendly: set bid for ---autotargeting pseudo-keywords (rubles).
Inputs: apply, bid_rub, dry_run, account_id, +3 more.
direct.hf.set_bid_modifier_demographicsC
Human-friendly: set demographics bid modifier (age+gender).
Inputs: age, apply, gender, dry_run, +5 more.
direct.hf.set_bid_modifier_desktopC
Human-friendly: set desktop bid modifier (percent).
Inputs: apply, dry_run, account_id, campaign_id, +3 more.
direct.hf.set_bid_modifier_geoC
Human-friendly: set geo bid modifier (best effort).
Inputs: apply, dry_run, region_id, account_id, +3 more.
direct.hf.set_bid_modifier_mobileC
Human-friendly: set mobile bid modifier (percent).
Inputs: apply, dry_run, account_id, campaign_id, +3 more.
direct.hf.set_campaign_budgetC
Human-friendly: set campaign daily budget (rubles) if supported, else returns patch hint.
Inputs: mode, apply, dry_run, account_id, +4 more.
direct.hf.set_campaign_geoC
Human-friendly: set geo (RegionIds) for all ad groups in a campaign.
Inputs: apply, dry_run, account_id, region_ids, +3 more.
direct.hf.set_campaign_negative_keywordsC
Human-friendly: set campaign negative keywords.
Inputs: apply, items, dry_run, account_id, +3 more.
direct.hf.set_campaign_scheduleC
Human-friendly: set campaign schedule/time targeting (best effort).
Inputs: apply, dry_run, account_id, campaign_id, +3 more.
direct.hf.set_campaign_strategy_presetC
Human-friendly: apply a strategy preset to a campaign.
Inputs: apply, preset, dry_run, account_id, +3 more.
direct.hf.set_campaign_tracking_paramsC
Human-friendly: set TrackingParams for a campaign (best effort).
Inputs: apply, dry_run, account_id, campaign_id, +3 more.
direct.hf.set_campaign_utm_templateC
Human-friendly: apply UTM template to a campaign (utm_mode=auto).
Inputs: apply, dry_run, overwrite, account_id, +4 more.
direct.hf.set_keyword_bidC
Human-friendly: set a bid for a single keyword (rubles).
Inputs: apply, bid_rub, dry_run, account_id, +2 more.
direct.hf.set_keyword_bids_bulkC
Human-friendly: set a uniform bid (rubles) for all keywords in a campaign/adgroup.
Inputs: apply, bid_rub, dry_run, account_id, +3 more.
direct.hf.unarchive_adsC
Human-friendly: unarchive ads.
Inputs: apply, ad_ids, dry_run, account_id, +3 more.
direct.hf.unarchive_campaignsC
Human-friendly: unarchive campaigns (by id or name).
Inputs: apply, dry_run, account_id, campaign_ids, +2 more.
direct.hf.update_adgroup_geoC
Human-friendly: set RegionIds for an ad group.
Inputs: apply, dry_run, account_id, adgroup_id, +5 more.
direct.hf.update_ads_text_bulkC
Human-friendly: update multiple TextAds fields (title/text/href).
Inputs: apply, patch, ad_ids, dry_run, +2 more.
direct.list_adextensionsC
List ad extensions.
Inputs: page, params, account_id, field_names, +2 more.
direct.list_adgroupsC
List ad groups from Yandex Direct.
Inputs: page, params, account_id, field_names, +2 more.
direct.list_adsC
List ads from Yandex Direct.
Inputs: page, params, account_id, field_names, +2 more.
direct.list_bidmodifiersC
List bid modifiers.
Inputs: page, params, account_id, field_names, +2 more.
direct.list_bidsC
List bids.
Inputs: page, params, account_id, field_names, +2 more.
direct.list_campaignsC
List campaigns from Yandex Direct.
Inputs: page, params, account_id, field_names, +7 more.
direct.list_clientsC
List Direct clients (agency use).
Inputs: page, params, account_id, field_names, +1 more.
direct.list_dictionariesC
Get Direct dictionaries.
Inputs: dictionary_names (required), params, account_id, direct_client_login.
direct.list_keywordsC
List keywords from Yandex Direct.
Inputs: page, params, account_id, field_names, +2 more.
direct.list_sitelinksC
List sitelinks sets.
Inputs: ids, page, params, account_id, +3 more.
direct.list_vcardsC
List vCards.
Inputs: ids, page, params, account_id, +3 more.
direct.raw_callB
Raw Direct API call (escape hatch).
Inputs: resource (required), method, params, account_id, +1 more.
direct.reportD
Run a Direct report (raw output).
Inputs: field_names (required), report_type (required), goals, format, +12 more.
direct.update_adgroupsC
Update ad groups in Yandex Direct.
Inputs: items (required), params, account_id, direct_client_login.
direct.update_adsC
Update ads in Yandex Direct.
Inputs: items (required), params, account_id, direct_client_login.
direct.update_campaignsC
Update campaigns in Yandex Direct.
Inputs: items (required), params, account_id, direct_client_login.
direct.update_keywordsC
Update keywords in Yandex Direct.
Inputs: items (required), params, account_id, direct_client_login.
join.hf.direct_vs_metrica_by_utmBRead-onlyIdempotent
Human-friendly: join Direct daily performance with Metrica daily visits using a stable UTMCampaign value.
Inputs: date_to, date_from, account_id, counter_id, +4 more. Returns: meta, tool, error, result, +5 more
join.hf.direct_vs_metrica_by_yclidC
Human-friendly: join Metrica visits (Logs API yclid) with Direct click identifiers (best effort).
Inputs: cleanup, date_to, max_rows, date_from, +17 more.
metrica.counter_infoC
Get details of a Metrica counter.
Inputs: counter_id (required), params, account_id.
metrica.goals.createC
Metrica: create goal (pro-only).
Inputs: payload (required), counter_id (required), account_id.
metrica.goals.deleteC
Metrica: delete goal (pro-only).
Inputs: goal_id (required), counter_id (required), account_id.
metrica.goals.getC
Metrica: get goal by id.
Inputs: goal_id (required), counter_id (required), params, account_id.
metrica.goals.listC
Metrica: list goals for a counter.
Inputs: counter_id (required), params, account_id.
metrica.goals.updateC
Metrica: update goal (pro-only).
Inputs: goal_id (required), payload (required), counter_id (required), account_id.
metrica.hf.counter_summaryDRead-onlyIdempotent
Human-friendly: counter summary.
Inputs: account_id, counter_id. Returns: meta, tool, error, result, +5 more
metrica.hf.create_goalB
Human-friendly: create a Metrica goal (pro-only, apply=true).
Inputs: goal (required), apply (required), counter_id (required), dry_run, +1 more.
metrica.hf.delete_goalB
Human-friendly: delete a Metrica goal (pro-only, apply=true).
Inputs: apply (required), goal_id (required), counter_id (required), dry_run, +1 more.
metrica.hf.list_accessible_countersCRead-onlyIdempotent
Human-friendly: list accessible counters.
Inputs: account_id. Returns: meta, tool, error, result, +5 more
metrica.hf.logs_export_presetD
Human-friendly: logs export preset (optional).
Inputs: date_to, date_from, account_id, counter_id.
metrica.hf.report_devicesDRead-onlyIdempotent
Human-friendly: device report.
Inputs: limit, date_to, date_from, account_id, +1 more. Returns: meta, tool, error, result, +5 more
metrica.hf.report_geoCRead-onlyIdempotent
Human-friendly: geo report (country/city).
Inputs: level, limit, date_to, date_from, +2 more. Returns: meta, tool, error, result, +5 more
metrica.hf.report_landing_pagesCRead-onlyIdempotent
Human-friendly: landing pages report.
Inputs: limit, date_to, date_from, account_id, +1 more. Returns: meta, tool, error, result, +5 more
metrica.hf.report_time_seriesCRead-onlyIdempotent
Human-friendly: time series report (day/week/month/quarter/year).
Inputs: metric, date_to, date_from, account_id, +2 more. Returns: meta, tool, error, result, +5 more
metrica.hf.report_utm_campaignsCRead-onlyIdempotent
Human-friendly: UTM campaigns report.
Inputs: limit, date_to, date_from, account_id, +1 more. Returns: meta, tool, error, result, +5 more
metrica.hf.update_goalB
Human-friendly: update a Metrica goal (pro-only, apply=true).
Inputs: goal (required), apply (required), goal_id (required), counter_id (required), +2 more.
metrica.list_countersC
List available Metrica counters.
Inputs: params, account_id.
metrica.logs_exportD
Logs API export (optional).
Inputs: counter_id (required), action, fields, params, +6 more.
metrica.raw_callB
Raw Metrica API call (escape hatch).
Inputs: api, data, method, params, +3 more.
metrica.reportC
Run a Metrica report (raw output).
Inputs: metrics (required), counter_id (required), sort, limit, +8 more.
search_serpCRead-onlyIdempotent
Search API Web Search: normalized Yandex SERP ads and organic results.
Inputs: query (required), mode, page, device, +6 more. Returns: ads, mode, page, query, +13 more
wordstat.dynamicsC
Wordstat: dynamics (frequency dynamics by period).
Inputs: phrase (required), from_date (required), params, period, +3 more.
wordstat.get_regions_treeD
Wordstat: getRegionsTree (regions dictionary).
Inputs: params.
wordstat.hf.suggest_keywordsC
Human-friendly: suggest keyword candidates from seed phrases (resumable via cursor).
Inputs: cursor, devices, regions, num_phrases, +3 more.
wordstat.hf.suggest_negative_keywordsC
Human-friendly: suggest negative keyword tokens from phrases (lexicon-based).
Inputs: phrases (required), language, max_candidates.
wordstat.regionsC
Wordstat: regions (frequency by region).
Inputs: phrase (required), params, devices, region_type.
wordstat.top_requestsC
Wordstat: topRequests (top queries by phrase).
Inputs: params, phrase, devices, phrases, +2 more.
wordstat.user_infoC
Wordstat: Search API access check via getRegionsTree.
Inputs: params.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 140 tools
Massive overlap: direct.list_campaigns vs direct.hf.find_campaigns vs direct.hf.get_campaign_summary, multiple report tools for the same data, raw vs hf variants for nearly every operation. An agent cannot reliably select the right tool without deep domain knowledge.
All names use dot-separated snake_case, but action placement is inconsistent (direct.list_campaigns vs metrica.goals.list) and some tools lack a namespace (search_serp). The hf prefix adds another layer but is not universally applied.
140 tools is an extreme mismatch far beyond the typical 3–15 range. Many tools are thin wrappers or duplicate functionality, creating prohibitive cognitive load for an agent.
The surface is very broad, covering Direct, Metrica, Audience, Wordstat, and Search with CRUD for many resources, raw escape hatches, and cross-domain joins. Minor gaps exist (e.g., no delete for campaigns/adgroups/ads, limited Audience pixel management, Search API only web).
Related MCP Connectors
MCP servers for Yandex APIs: Wordstat, Search, Webmaster, Metrika, Direct. Open source, by Seyka AI.
Read-only Yandex Metrika MCP. Query visits, sources, geo, devices and more in plain language.
Yandex rank tracking and bulk SERP data, billed per result, hosted MCP.
69 PR-CY tools for keyword demand, SERP, rank tracking, site audits, Google Search Console, Yandex Webmaster, Yandex Metrika, page content/screenshots, articles and HTML artifacts. Streamable HTTP with a user-supplied PR-CY API key (Authorization header, Bearer scheme). Account permissions and limits apply. Docs: https://github.com/costeels/pr-cy-mcp-docs (documentation, not server source). Submitted by the documentation maintainer.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceUnifies multiple Yandex MCP servers (Direct, Metrika, Webmaster, Tracker, Cloud, Maps, Search) into a single interface with auto-configuration and auth wizard.1MIT
- AlicenseAqualityDmaintenanceLocal-first MCP server for Yandex Webmaster that exposes tools for SEO operations including search query analytics, sitemap management, indexing history, recrawl quota, and diagnostics.15MIT
- AlicenseNot gradedqualityBmaintenanceEnables interaction with Yandex advertising and analytics APIs (Direct, Metrika, Audience, Webmaster, AdMetrica) through MCP tools, resources, and prompts for campaign management and data retrieval.MIT
- AlicenseAqualityBmaintenanceThis MCP server lets you query Yandex Webmaster data in plain language, covering search queries, indexing, diagnostics, sitemaps, backlinks, and recrawl status. It is read-only by default (except recrawl submission) and uses OAuth without storing secrets.1082 npm4MIT