Skip to main content
Glama
yandex-api-mcp

yandex-api-mcp

by 5iNeX

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

  1. Войдите на oauth.yandex.ru под нужным Яндекс-аккаунтом и создайте приложение.

  2. Укажите redirect URI: https://oauth.yandex.ru/verification_code. Этот адрес использует мастер авторизации.

  3. Включите права на нужные сервисы:

    Сервис

    OAuth-разрешения

    Вебмастер

    webmaster:hostinfo и webmaster:verify

    Директ

    direct:api

    Метрика

    metrika:read

    Аудитории

    audience:read

    Запись в Метрику в отдельной pro-сборке

    metrika:write

  4. Сохраните приложение и подготовьте 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 discover

oauth покажет ссылку. Откройте её в браузере, подтвердите доступ и вставьте код в терминал мастера. Не публикуйте код и токены в чате или 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.

  1. В Yandex Cloud выберите папку с Search API и скопируйте её Folder ID.

  2. Создайте в этой папке сервисный аккаунт, назначьте роль search-api.webSearch.user и создайте для него API key. Если для ключа задаются области действия, включите yc.search-api.execute. См. документацию Search API.

  3. На сервере откройте файл:

    sudo nano /opt/yandex-api-mcp/secrets/yandex.env

    Добавьте две строки со своими значениями:

    YANDEX_SEARCH_API_FOLDER_ID=ваш_folder_id
    YANDEX_SEARCH_API_API_KEY=ваш_api_key
  4. Закройте файл и восстановите права доступа:

    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 verify

verify выполняет 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.

Управление и безопасность

Команда

Назначение

sudo yp-api doctor

Проверить runtime, OAuth, файлы и связь с API

sudo yp-api discover

Показать доступные объекты Яндекса

sudo yp-api project list

Показать локальные проекты

sudo yp-api refresh

Принудительно обновить access token

sudo yp-api verify

Выполнить read-only smoke через MCP

sudo yp-api logs --tail 80

Посмотреть логи контейнера

sudo yp-api service status

Проверить контейнер

sudo yp-api connector info

Получить локальный адрес и 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 compose version не работает

Установите Docker Engine и Compose plugin

OAuth-код отклонён

Redirect URI должен быть https://oauth.yandex.ru/verification_code; получите новый код

Вебмастер показывает сайты, но запросы по ним дают 403

Нужны оба scope: webmaster:hostinfo и webmaster:verify, затем новая OAuth-авторизация

Директ даёт 403

Проверьте одобрение Direct API и права аккаунта/Client-Login

Wordstat или Search API дают 401/403

Сверьте Folder ID, роль сервисного аккаунта и scope ключа

ChatGPT не видит новый инструмент

Проверьте готовность Tunnel и обновите каталог инструментов приложения

Лицензия проекта — Apache-2.0; лицензия TypeScript-ядра — MIT.

Available Tools

140 tools
accounts.deleteC

Delete a project profile from the accounts registry file.

Inputs: account_id (required).

accounts.listA
Read-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_option1C
Idempotent

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_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_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_adgroupsC
Read-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_adsB
Read-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_campaignsC
Read-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_keywordsC
Read-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_summaryB
Read-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_summaryC
Read-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_reportC
Read-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_adgroupsC
Read-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_adsC
Read-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_keywordsC
Read-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_performanceC
Read-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_phrasesC
Read-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_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_utmB
Read-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_summaryD
Read-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_countersC
Read-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_devicesD
Read-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_geoC
Read-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_pagesC
Read-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_seriesC
Read-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_campaignsC
Read-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_serpC
Read-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

    C2.2/5.0

    Scored across 140 tools

    Disambiguation1/5

    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.

    Naming Consistency3/5

    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.

    Tool Count1/5

    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.

    Completeness4/5

    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

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Local-first MCP server for Yandex Webmaster that exposes tools for SEO operations including search query analytics, sitemap management, indexing history, recrawl quota, and diagnostics.
      15
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables 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
    • A
      license
      A
      quality
      B
      maintenance
      This 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.
      10
      82 npm
      4
      MIT