Yandex Webmaster MCP
概要
作者による説明(英語の原文)
MCP server for Yandex Webmaster API — site analytics, indexing, search queries
PopNx MCPの3つの柱
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
- 利用者の声iレビューはまだありませんレビューは今後のステップで、アカウント機能と一緒に始まります
- 私たちの基本チェックi1項目中1項目に合格公開情報からチェック。コードはまだスキャンしていません
- 利用状況iとても新しい↓ 69/週 · ★ –
できること
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
- 接続方法: パソコンで動く
- トランスポート: stdio
- カテゴリ: マーケティング・SNS
- 入力が必要なもの:YANDEX_WEBMASTER_TOKEN
インストール
使っているAIアプリを選んで、設定をコピーしてください。
インストールの前に
- 基本チェック:1項目中1項目に合格
- あなたのパソコンで、あなたのユーザーと同じ権限(ファイル、ネットワーク、アプリ)で動きます。
- 自分で入力するもの:
YANDEX_WEBMASTER_TOKEN
「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
- npmNode.jsのインストール(npxコマンドに必要)
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"yandex-webmaster": {
"command": "npx",
"args": [
"-y",
"@stufently/yandex-webmaster-mcp"
],
"env": {
"YANDEX_WEBMASTER_TOKEN": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add yandex-webmaster --env YANDEX_WEBMASTER_TOKEN=your-value -- npx -y @stufently/yandex-webmaster-mcp動かす前に、空欄の値を入力してください。
または、設定を自分でコピーする
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"yandex-webmaster": {
"command": "npx",
"args": [
"-y",
"@stufently/yandex-webmaster-mcp"
],
"env": {
"YANDEX_WEBMASTER_TOKEN": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
または、設定を自分でコピーする
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"yandex-webmaster": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@stufently/yandex-webmaster-mcp"
],
"env": {
"YANDEX_WEBMASTER_TOKEN": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
自分で入力する値
- OAuth token for Yandex Webmaster
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
できること
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
基本チェックi
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月8日にチェック
- ✓ 合格
作者とリポジトリが一致
レジストリ名は、リポジトリを所有するGitHubアカウント stufently で確認済みです
- … 未チェック
今もメンテナンスされている
このリポジトリはまだGitHubから読み取っていません
- … 未チェック
ライセンスがある
このリポジトリはまだGitHubから読み取っていません
- – 対象外
エンドポイントが応答する
これはパソコンで動くため、インターネット上のエンドポイントはありません
- – 対象外
OAuthでサインイン
パソコンで動き、代わりにローカルの設定を使います
- … 未チェック
ツールの説明に隠れた指示がない
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
マーケティング・SNSのほかのサーバーとの比較i
- このカテゴリのほかの3603件のうち0%よりスターが多い
- このカテゴリのほかの3603件のうち57%より最近レジストリに公開
- 基本チェックの結果が、このカテゴリのほかの3603件のうち100%と同じかそれ以上
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
よくある質問
Yandex Webmaster MCPは安全ですか?
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
どんなキーやコードが必要ですか?
入力が必要なもの:YANDEX_WEBMASTER_TOKEN
パソコンで動きますか、それともクラウドですか?
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
今もメンテナンスされていますか?
GitHubリポジトリの最終更新は–、最新バージョン(2.2.1)がレジストリに届いたのは23 日前です。
どのアプリで使えますか?
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
代わりに使えるものは?
同じカテゴリには:MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
代わりの候補
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Google Analytics MCP
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
BibiGPT YouTube Video Summarizer
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
作者のREADME
READMEを開く
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
yandex-webmaster-mcp
MCP server for Yandex Webmaster API v4. Monitor site health, indexing status, search queries, backlinks, sitemaps, and more.
Installation
This package is published as `@stufently/yandex-webmaster-mcp`; the unscoped name yandex-webmaster-mcp belongs to an unrelated publisher (see the note in the root README). Nothing is on the scope yet, so run it from source:
git clone https://github.com/stufently/yandex-mcp.git
cd yandex-mcp && bun install node packages/yandex-webmaster-mcp/src/index.mjs
Configuration
Add to your MCP client config:
{
"mcpServers": { "yandex-webmaster": { "command": "node", "args": ["/path/to/yandex-mcp/packages/yandex-webmaster-mcp/src/index.mjs"], "env": { "YANDEX_WEBMASTER_TOKEN": "your-oauth-token" } } } }
Environment Variables
| Variable | Required | Description |
|---|---|---|
YANDEX_WEBMASTER_TOKEN | Yes | OAuth token for Webmaster API |
YANDEX_CLIENT_ID | For auth flow | Yandex OAuth app client ID |
YANDEX_CLIENT_SECRET | For auth flow | Yandex OAuth app client secret |
Authentication
To obtain an OAuth token interactively:
node packages/yandex-webmaster-mcp/src/index.mjs auth
This opens a browser for Yandex OAuth authorization and returns a token. Set the token as YANDEX_WEBMASTER_TOKEN.
Note: The Webmaster API uses Authorization: OAuth {token} (not Bearer).
Agent playbook
SKILL.md next to this file is the task-level guide for agents: the new-site flow, the regular-audit order, the recrawl rules, how the three different time-series shapes are read, and — importantly — what API v4 does not have (IndexNow, robots.txt, site region, favicon, mobile status, Metrika binding), so nothing gets invented.
Tool Reference (33 tools)
Core (3)
| Tool | Description | Parameters |
|---|---|---|
get-user | Get current Webmaster user info and user_id | -- |
list-hosts | List all hosts (sites) with their `host_id` — the identifier every other tool needs | -- |
get-host | Get details for a specific host | host_id |
Statistics (2)
| Tool | Description | Parameters |
|---|---|---|
get-summary | Get site summary: SQI, page counts, problems | host_id |
get-sqi-history | Get SQI (Site Quality Index) history | host_id, date_from?, date_to? |
Diagnostics (1)
| Tool | Description | Parameters |
|---|---|---|
get-diagnostics | Get site diagnostics and problems | host_id |
Search Queries (2)
| Tool | Description | Parameters |
|---|---|---|
get-popular-queries | Get popular search queries for a site | host_id, order_by (TOTAL_SHOWS/TOTAL_CLICKS), device_type?, date_from?, date_to?, limit? (1-500, default: 100), offset? |
get-query-history | Get search query totals history | host_id, device_type?, date_from?, date_to? |
Indexing (4)
| Tool | Description | Parameters |
|---|---|---|
get-indexing-history | Get indexing history over time | host_id, date_from?, date_to? |
get-indexing-samples | Get sample indexed URLs | host_id, limit? (1-100), offset? |
get-insearch-history | Get in-search (appearing in results) history | host_id, date_from?, date_to? |
get-insearch-samples | Get sample URLs appearing in search | host_id, limit? (1-100), offset? |
Search Events (3)
| Tool | Description | Parameters |
|---|---|---|
get-search-events-history | Get search URL events history | host_id, date_from?, date_to? |
get-search-events-samples | Get sample URLs for search events, with per-URL exclusion reasons (excluded_url_status): an exclusion_reasons tally of the fetched page plus an excluded_pages list of URL → reason | host_id, event_type? (APPEARED_IN_SEARCH/REMOVED_FROM_SEARCH — client-side filter, the API has none), limit? (1-100, default: 10), offset? |
get-excluded-pages | Pages dropped from search inside a time window, with `excluded_url_status` for each one. Built from REMOVED_FROM_SEARCH events, deduplicated per URL (latest event wins), so a page that came back is reported under returned_to_search instead. Walks the mixed event stream page by page until limit excluded pages are collected, then reports next_offset (first unread event) / exhausted so the walk can continue. Also returns summary_excluded_pages_count for cross-checking | host_id, limit? (1-100 excluded pages, default: 20), offset?, max_requests? (1-50 page fetches, retries not counted, default: 10), returned_urls? (pass the previous returned_to_search when continuing a walk) |
There is no dedicated "excluded pages" resource in API v4: get-summary carries only the aggregate excluded_pages_count, and the reason a given URL was dropped lives on REMOVED_FROM_SEARCH records of /search-urls/events/samples. Since the API has no server-side event filter, count still counts events of both types and limit/offset page the mixed stream. get-search-events-samples reports what one such page contains; get-excluded-pages does the walking, so its limit counts excluded pages rather than events. Per-URL detail beyond the status code: bad_http_status for HTTP_ERROR, and target_url for the redirect target, canonical address or duplicate.
These are events in time, not a snapshot of the index. The same URL appears as REMOVED_FROM_SEARCH and later as APPEARED_IN_SEARCH — it dropped out and came back, and right now it is in search. get-excluded-pages therefore deduplicates by URL and keeps the latest event: a URL whose latest event is an appearance goes to returned_to_search, not to pages. Two consequences worth stating out loud:
- an exclusion older than the scanned window is invisible, no matter how current it is;
- deduplication spans one call. Continuing from
next_offsetstarts with an empty state, so a page whose return fell into the previous window would be reported as excluded again — pass the previousreturned_to_searchinreturned_urlsto keep the walk honest; excluded_pages_countfromget-summaryand the length ofpagesare different kinds of number and are not expected to match. The tool returns the aggregate assummary_excluded_pages_countand says so in its text, instead of leaving the reader to discover a 25x gap on their own.
The per-URL status field is named excluded_url_status everywhere — in the tool descriptions, in excluded_pages from get-search-events-samples and in pages from get-excluded-pages. It is the name from the Yandex reference (ApiExcludedUrlStatus), so it can be grepped against the docs.
Links (4)
| Tool | Description | Parameters |
|---|---|---|
get-external-links | Get external links pointing to the site | host_id, limit? (1-100), offset? |
get-external-links-history | Get external links count history | host_id, date_from?, date_to? |
get-broken-internal-links | List broken internal links: destination URL, the source page linking to it, and when Yandex last checked the link. Records carry days_since_last_check, never_rechecked and stale (last check older than 90 days) | host_id, limit? (1-100), offset? |
get-broken-internal-links-history | Get broken internal links count history | host_id, date_from?, date_to? |
A broken-link record is a snapshot of the last time Yandex checked that link, and that moment can be months old: when source_last_access_date equals discovery_date, nothing has been re-verified since the problem was found, so the link may have been fixed long ago. Each record therefore carries days_since_last_check, never_rechecked and stale (last check older than 90 days — never_rechecked on its own does not set it), and the text block puts the warning above the list. A live check of 258 links reported broken across these sites (2026-09-02) found 10 real 404s; about 80% were 301 redirects. The API is not lying — the old one-line output just made the count read like an outage.
⚠️ In the Yandex reference the name and the description of source_last_access_date disagree: the name says *source*, the description says "the date the robot last visited the link's destination page". The wording here stays neutral ("last checked") because the conclusion about the record's age holds under either reading, while a conclusion about a specific page does not.
Sitemaps (4)
| Tool | Description | Parameters |
|---|---|---|
get-sitemaps | List all sitemaps for a host | host_id, limit? (1-100) |
get-sitemap | Get details for a specific sitemap | host_id, sitemap_id |
get-user-sitemaps | List user-added sitemaps | host_id, limit? (1-100) |
add-sitemap | Write. Add a user sitemap file; returns sitemap_id. Additive — the file is removable in the Webmaster panel | host_id, url |
add-sitemap needs the host verified (404 HOST_NOT_VERIFIED otherwise). Adding a file that is already there answers 409 SITEMAP_ALREADY_ADDED; like every other non-2xx here it surfaces as an error, and its payload names the existing sitemap_id — read it as "already present" rather than retrying. Removing a sitemap (DELETE /user-added-sitemaps/{id}) exists in the API but is deliberately not wrapped here.
Important URLs (2)
| Tool | Description | Parameters |
|---|---|---|
get-important-urls | Get important URLs for a site | host_id, limit? (1-100), offset? |
get-important-url-history | Get history for a specific important URL | host_id, url, date_from?, date_to? |
Recrawl (4)
| Tool | Description | Parameters |
|---|---|---|
get-recrawl-quota | Get recrawl quota (daily limit and remainder) | host_id |
add-recrawl-url | Write. Enqueue a URL for re-crawl; consumes daily quota | host_id, url |
get-recrawl-queue | List submitted recrawl tasks and their state | host_id, limit? (default: 10), offset? |
get-recrawl-task | Get the state of one recrawl task | host_id, task_id |
Host Management (4)
These change your Webmaster account, not just read from it.
| Tool | Description | Parameters |
|---|---|---|
add-host | Write. Add a site to Webmaster (needs verification afterwards). Additive — undone by delete-host | host_url (with protocol) |
verify-host | Get verification state and applicable verification methods | host_id |
start-verification | Write. Start the ownership check (POST …/verification, no body). The verification_uin must already be on the site; the check is asynchronous — poll verify-host. Additive | host_id, verification_type (HTML_FILE / META_TAG / DNS) |
delete-host | Write. Remove a site from Webmaster. Irreversible — see Deleting a host. Needs `confirm: true` | host_id, confirm |
Deleting a host
delete-host is the only irreversible tool here, and it refuses to run unless the call carries confirm: true:
{ "host_id": "https:example.com:443", "confirm": true }
Called without it, the tool returns an error result and sends nothing to the Webmaster API:
Refused: `delete-host` requires explicit confirmation.
Removing host https:example.com:443 from Yandex Webmaster is irreversible — the site's verification, its accumulated indexing and search-query history, and its sitemap and important-URL settings go with it. Adding the same site back creates a fresh host that must be verified again and starts with no history.
Nothing was sent to the Webmaster API — no host was touched.
To go ahead, call `delete
冒頭だけを表示しています。続きはリポジトリで読めます