A side-by-side look at the Seo Tools MCP and Yandex Webmaster MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Seo Tools MCP for marketing work as a local process; choose Yandex Webmaster MCP for marketing as a local process. You can also run both side by side in one mcpServers block.
xmlstock_auth_status, xmlstock_set_credentials, xmlstock_serp.YANDEX_WEBMASTER_TOKEN, YANDEX_OAUTH_CLIENT_ID, YANDEX_OAUTH_CLIENT_SECRET.login, submit_code, get_hosts.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Marketing | Marketing |
| Quality signal | 65/100 · Great | 63/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | API key required | Not declared |
| Pricing | BYOK (pay the provider) | Not declared |
| Required env vars | None listed | YANDEX_WEBMASTER_TOKENYANDEX_OAUTH_CLIENT_IDYANDEX_OAUTH_CLIENT_SECRET |
| Verified owner | Community listing | Community listing |
| GitHub stars | 8 | 4 |
| Directory activity | 6 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 11 | 10 |
| Full listing | View Seo Tools MCP | View Yandex Webmaster MCP |
xmlstock_auth_statusСтатус авторизации xmlstock: какие ключи заданы (маскированно), каких не хватает, как их получить. ВЫЗЫВАТЬ ПЕРВЫМ в начале работы с xmlstock. Если чего-то нет — запросить значения у пользователя и сохранить через xmlstock_set_credentials.xmlstock_set_credentialsСохранить ключи xmlstock в /home/user/.config/seo-tools-mcp/.env (права 600) и применить сразу, без перезапуска сервера. Передавать только обновляемые поля. account — сохранить в именованный профиль (мультиаккаунт). Значения даёт пользователь; в ответе они маскируются.xmlstock_serpСлепок выдачи Google/Yandex через XMLStock (ПЛАТНО за запрос). Возвращает { found, truncated (true = выдача кончилась раньше запрошенного depth), count, results: [{ position, url, title, snippet, text_bolds (подсветки hlword) }], serp_features: { featured_snippet, paa (только Google), related, sitelinks_top1, packs } }. Пустая выдача (код 15) ТАРИФИЦИРУЕТСЯ и помечается { results: [], empty: true, note }. depth>10 добирается пагинацией (каждая страница — отдельный платный запрос; у yandex_xml — до 100/страница). region: ОДИН регион (название или числовой id Яндекса) — работает для ВСЕХ движков. ОГРАНИЧЕНИЕ ИСТОЧНИКА: device=mobile отдаёт только позиции и сниппеты — без hlword/PAA/related; подсветки и SERP-фичи снимать с desktop. engine=yandex_xml — ОФИЦИАЛЬНЫЙ Яндекс XML (легальный API, тариф дороже: от 24 ₽/1000): groupby до 100 работает — до 100 результатов за ОДИН платный запрос (depth до 1000), hlword-подсветки на любых устройствах, статистика «найдено»: found (по запросу), found_docs (документов), found_human (строкой); в results доп. поля id/modtime/saved_copy_url/is_local. Отличие от yandex (live): SERP-фичей/packs нет — чистая органика; device/searchDomain/lang/l10n/period/exactQuery/includeAds/includeSimilar не применимы; safeSearch маппится в filter (strict/moderate/none).xmlstock_imagesПоиск по картинкам Google через XMLStock (ПЛАТНО за запрос). Возвращает { position, url (страница-источник), imageUrl (сама картинка), title }. truncated: true = выдача кончилась раньше запрошенного depth.xmlstock_newsПоиск по новостям Google через XMLStock (ПЛАТНО за запрос). Возвращает { position, url, title, source (издание), date (часто относительная), snippet }. truncated: true = выдача кончилась раньше запрошенного depth.xmlstock_videoПоиск по видео Google через XMLStock (ПЛАТНО за запрос). Возвращает { position, url, title, thumbnail, host (YouTube...), channel, duration, snippet }. truncated: true = выдача кончилась раньше запрошенного depth.xmlstock_balanceБаланс и дневной расход аккаунта XMLStock (бесплатный сервисный вызов). Заодно проверка ключей.xmlstock_wordstatЧастотность и топ запросов Яндекс Wordstat через XMLStock (ПЛАТНО за запрос, ~19₽/1K). Возвращает { totalCount, results: [{ phrase, count }] (топ по фразе), associations: [{ phrase, count }] (похожие) }. Операторы Wordstat в query: "…" (точная), ! (форма слова), + (стоп-слово), - (минус), [ ] (порядок), | (или).xmlstock_wordstat_dynamicsДинамика частотности фразы по времени (Яндекс Wordstat через XMLStock, ПЛАТНО за запрос). period: day/week/month. from/to — YYYY-MM-DD (для month период автоматически растягивается на целые месяцы). Возвращает [{ date, count, share }].xmlstock_wordstat_regionsРаспределение спроса по регионам для фразы (Яндекс Wordstat через XMLStock, ПЛАТНО — дороже топа/динамики). Возвращает [{ regionId, name, count, share, affinityIndex }]; имена регионов подставляются из дерева (кэш 24ч). ВНИМАНИЕ: при холодном кэше дерева (первый вызов за 24ч) делается дополнительный ПЛАТНЫЙ запрос regionsTree.xmlstock_wordstat_regions_treeДерево регионов Яндекс Wordstat через XMLStock (id + имя + путь) — id для параметра region в других запросах. ПЛАТНО за запрос.loginSign in to Yandex from here. Opens your browser to approve access; the code returns automatically over a local redirect, so this usually finishes in one call. If the local port is unavailable it returns a URL to approve and you then call submit_code with the code Yandex shows. Run this once (the token lasts ~1 year); needed before the data tools if you are not signed in yet.submit_codeComplete a copy-paste sign-in started by login: pass the code Yandex showed you after you approved access.get_hostsDiscovery tool: list the sites (hosts) available to your Yandex Webmaster token, each with its host_id, URL and verification state. host_id is what every other tool needs to identify a site. Optionally pass `hostId` to also fetch that host summary (SQI, indexed/excluded page counts, site problems). Read-only. Call this first.search_queriesSearch-query analytics for a host from Yandex Search: impressions (TOTAL_SHOWS), clicks (TOTAL_CLICKS), average show/click position. Read-only.
• report="top" (default): ranked list of the queries bringing the most traffic, ordered by orderBy. Use this to see which phrases people search.
• report="trend": a time series. Pass queryId (from a prior "top" call) for one query's history over time, or omit it for the site's aggregate trend.
Tip: cross-reference these queries/landing pages with Yandex Metrica (bounce rate, conversions) to find high-impression, low-conversion phrases worth optimizing.get_indexingHow Yandex crawls and indexes the host. Read-only. Pick a report:
• report="history" (default): time series of crawled pages grouped by HTTP status class (HTTP_2XX/3XX/4XX/5XX/OTHER) — spot spikes of errors the crawler hits.
• report="crawled": example crawled URLs with their HTTP code and crawl date.
• report="in_search": example URLs currently present in Yandex search, with title.get_diagnosticsYandex Webmaster site diagnostics: problems detected on the host (e.g. DNS errors, slow response, robots.txt issues, 4xx alerts), each with a severity (FATAL, CRITICAL, POSSIBLE_PROBLEM, RECOMMENDATION). By default returns only ACTIVE problems (state=PRESENT), worst first. Set includeAbsent=true to also list resolved/absent problem types. Read-only.list_sitemapsList the Sitemap files Yandex knows for the host, each with its URL, type, last access date, number of URLs and error count, and where it was discovered (robots.txt, webmaster, etc.). Use it to check a sitemap is being read and is error-free. Read-only.get_external_linksInbound (external) links pointing to the host — the backlinks Yandex knows. Read-only.
• report="samples" (default): example links with source page, target URL and discovery date, plus the total count available.
• report="history": time series of the total external-link count over time.recrawl_statusRead-only view of the host recrawl activity. With no taskId: the remaining daily quota plus the most recent recrawl tasks and their state (IN_PROGRESS, DONE, FAILED). Pass taskId (from recrawl_submit) to check one task. Use before recrawl_submit to confirm quota is available.recrawl_submitAsk Yandex to recrawl a specific page of the host sooner. NOT read-only: each call consumes one unit of the limited daily recrawl quota (check it with recrawl_status). The URL must belong to the host and be a full absolute URL. Returns the task_id and the remaining quota. Track progress with recrawl_status using the returned task_id.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"antohins-seo-tools-mcp": {
"command": "npx",
"args": [
"-y",
"seo-tools-mcp-xmlstock"
]
}
}
}
{
"mcpServers": {
"yandex-webmaster-mcp": {
"command": "npx",
"args": [
"-y",
"@boxlab/yandex-webmaster-mcp"
],
"env": {
"YANDEX_WEBMASTER_TOKEN": "YOUR_YANDEX_WEBMASTER_TOKEN_HERE",
"YANDEX_OAUTH_CLIENT_ID": "YOUR_YANDEX_OAUTH_CLIENT_ID_HERE",
"YANDEX_OAUTH_CLIENT_SECRET": "YOUR_YANDEX_OAUTH_CLIENT_SECRET_HERE"
}
}
}
}