{"_id":"@cybernexcorps/yandex-webmaster-mcp","name":"@cybernexcorps/yandex-webmaster-mcp","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@cybernexcorps/yandex-webmaster-mcp","version":"1.0.0","description":"Model Context Protocol server for the Yandex Webmaster v4 API — 29 tools covering diagnostics, indexing, SQI, sitemaps, recrawl, search queries, and backlinks.","type":"module","bin":{"yandex-webmaster-mcp":"dist/server.js"},"engines":{"node":">=18"},"scripts":{"build":"tsc","dev":"tsx src/server.ts","smoke":"tsx src/smoke-test.ts","start":"node dist/server.js","prepublishOnly":"npm run build"},"keywords":["mcp","model-context-protocol","yandex","yandex-webmaster","webmaster","seo","search-console"],"author":{"name":"Slava Pospelov"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/cybernexcorps/yandex-webmaster-mcp.git"},"bugs":{"url":"https://github.com/cybernexcorps/yandex-webmaster-mcp/issues"},"homepage":"https://github.com/cybernexcorps/yandex-webmaster-mcp#readme","publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","zod":"^3.23.0"},"devDependencies":{"typescript":"^5.6.0","tsx":"^4.19.0","@types/node":"^22.0.0"},"_id":"@cybernexcorps/yandex-webmaster-mcp@1.0.0","gitHead":"50a614e4ff7009862696cef53186de66c6293e9b","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-vt6lHvuorD2n9VGEfqO2iFWdcI1u4L/70j9L1hC1XWR4HOHcnIPJAzLm+p7xxs4ZnnfoHURJaHaHmEjbOYxhLQ==","shasum":"5f032f6f14ddf70c4e0ffe5638ab7e2d6a9759ac","tarball":"https://registry.npmjs.org/@cybernexcorps/yandex-webmaster-mcp/-/yandex-webmaster-mcp-1.0.0.tgz","fileCount":11,"unpackedSize":58699,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCzWK8gj+dcB0S1xbLubYdYrze8TXE7puzD2M3oF0/6rgIgRdw+9lmzpDbKLefMyAHqjHsjPgHj8zSA+cuPhiGT5Es="}]},"_npmUser":{"name":"cybernexcorps","email":"cybernex@gmail.com"},"directories":{},"maintainers":[{"name":"cybernexcorps","email":"cybernex@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/yandex-webmaster-mcp_1.0.0_1779804365504_0.05148362204983292"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-26T14:06:05.319Z","1.0.0":"2026-05-26T14:06:05.649Z","modified":"2026-05-26T14:06:05.851Z"},"maintainers":[{"name":"cybernexcorps","email":"cybernex@gmail.com"}],"description":"Model Context Protocol server for the Yandex Webmaster v4 API — 29 tools covering diagnostics, indexing, SQI, sitemaps, recrawl, search queries, and backlinks.","homepage":"https://github.com/cybernexcorps/yandex-webmaster-mcp#readme","keywords":["mcp","model-context-protocol","yandex","yandex-webmaster","webmaster","seo","search-console"],"repository":{"type":"git","url":"git+https://github.com/cybernexcorps/yandex-webmaster-mcp.git"},"author":{"name":"Slava Pospelov"},"bugs":{"url":"https://github.com/cybernexcorps/yandex-webmaster-mcp/issues"},"license":"MIT","readme":"# Yandex Webmaster MCP\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server that exposes the\n**Yandex Webmaster v4 API** as 29 tools — diagnostics, indexing, SQI, sitemaps, recrawl,\nsearch-query analytics, and backlinks — so an AI assistant can run day-to-day technical SEO\non your Yandex-registered sites.\n\n## Features\n\n- **29 tools** spanning the full read surface of the Webmaster v4 API plus the key write\n  operations (add host, add/remove sitemap, request recrawl).\n- **Friendly host names** — call tools with `example.com` or `пример.рф` instead of raw\n  `host_id` strings like `http:example.com:80`. ASCII and Unicode (IDN) forms both resolve;\n  prefix with a scheme (`https://…`) to disambiguate when both variants are registered.\n- **Safe writes** — every mutating tool requires `confirm: true`. Without it you get a\n  dry-run preview of the exact request that *would* be sent.\n- **Helpful errors** — common Yandex `error_code`s are mapped to actionable hints\n  (bad token, unverified host, rate limit, recrawl quota).\n- **Resilient HTTP** — 15s timeout, 3× exponential-backoff retry on 429/5xx.\n- **Registry-driven** — adding an endpoint is one record in `src/endpoints.ts`.\n\n## Prior art\n\nThis is a greenfield rewrite inspired by\n[`@theyahia/yandex-webmaster-mcp`](https://www.npmjs.com/package/@theyahia/yandex-webmaster-mcp).\nThat package exposed 3 tools and shipped two bugs (a `Bearer` auth header where Yandex\nrequires `OAuth`, and a URL base-path resolution error). This project expands to 29 tools and\na registry-driven architecture. Thanks to the original author for the starting point.\n\n## Getting a Yandex OAuth token\n\n1. Create an application at <https://oauth.yandex.com/> and grant it the **Yandex.Webmaster**\n   permission.\n2. Obtain an OAuth token for that app (it is long-lived).\n3. Keep it secret. This server reads it from the `YANDEX_WEBMASTER_TOKEN` environment\n   variable and sends it as `Authorization: OAuth <token>` — **not** `Bearer`.\n\n## Install & run\n\n### Via npx (recommended)\n\n```bash\nnpx @cybernexcorps/yandex-webmaster-mcp\n```\n\n### From source\n\n```bash\ngit clone https://github.com/cybernexcorps/yandex-webmaster-mcp.git\ncd yandex-webmaster-mcp\nnpm install\nnpm run build\nnode dist/server.js\n```\n\n## MCP client configuration\n\nThe server speaks MCP over stdio. Point your client at the `npx` command (or\n`node /abs/path/dist/server.js`) and pass the token via env.\n\n**Claude Desktop** (`claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"yandex-webmaster\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cybernexcorps/yandex-webmaster-mcp\"],\n      \"env\": {\n        \"YANDEX_WEBMASTER_TOKEN\": \"your-oauth-token\"\n      }\n    }\n  }\n}\n```\n\n**Cursor / generic stdio client** — same shape: `command` + `args` + `env`.\n\n## Tool catalog\n\n| Category | Tools |\n|----------|-------|\n| **Hosts** | `get_hosts`, `get_host_info`, `get_host_summary`, `add_host` *(write)* |\n| **Diagnostics** | `get_diagnostics` |\n| **Indexing & SQI** | `get_indexing_history`, `get_indexing_samples`, `get_insearch_samples`, `get_insearch_history`, `get_sqi_history` |\n| **Search-URL events** | `get_search_url_events_samples`, `get_search_url_events_history` |\n| **Sitemaps** | `get_sitemaps`, `get_sitemap_info`, `get_sitemap_urls`, `add_user_sitemap` *(write)*, `delete_user_sitemap` *(write)* |\n| **Important URLs** | `get_important_urls`, `get_important_url_history` |\n| **Recrawl** | `request_recrawl` *(write)*, `get_recrawl_queue`, `get_recrawl_quota` |\n| **Search queries** | `get_popular_queries`, `get_queries_history` |\n| **Links** | `get_external_links_samples`, `get_external_links_history`, `get_internal_broken_samples`, `get_internal_broken_history` |\n| **Local** | `refresh_hosts` (busts the in-process hosts cache; no API call) |\n\nWrite tools return a dry-run preview unless called with `confirm: true`.\n\n## Environment variables\n\n| Variable | Required | Purpose |\n|----------|----------|---------|\n| `YANDEX_WEBMASTER_TOKEN` | yes | Yandex OAuth token |\n| `SMOKE_HOST` | no | Host for `npm run smoke`; set to a host registered in YOUR Yandex account for a meaningful run (defaults to `example.com`) |\n| `SMOKE_BAD_TOKEN` | no | `1` to assert the bad-token error hint |\n| `SMOKE_IDN_HOST` | no | A Unicode host you own, to exercise IDN resolution in the smoke test |\n| `SMOKE_IDN_PUNYCODE` | no | Substring the resolved IDN `host_id` must contain |\n\n## Development\n\n```bash\nnpm install\nnpm run dev      # run from TS source via tsx\nnpm run build    # tsc → dist/\nnpm run smoke    # live API smoke test (needs a valid token + SMOKE_HOST)\n```\n\n## License\n\nMIT © 2026 Slava Pospelov\n","readmeFilename":"README.md","_rev":"1-c5f0a54563bae2eaa4fe71658792b4d8"}