Skip to main content
Glama

Yandex MCP

A monorepo of MCP (Model Context Protocol) servers for Yandex APIs. Provides AI assistants with access to Yandex Search, Wordstat, Webmaster, Metrika, and Direct through a unified interface.

Built for Russian and CIS market analysis -- keyword research, search analytics, site monitoring, web traffic insights, and ad campaign management.

Packages

Package

Description

Tools

yandex-search-mcp

Yandex Search API v2 (Cloud)

1

yandex-wordstat-mcp

Yandex Wordstat (Cloud Search API v2) -- keyword research

5

yandex-webmaster-mcp

Yandex Webmaster API v4 -- site analytics

33

yandex-metrika-mcp

Yandex Metrika API -- web analytics

12

yandex-direct-mcp

Yandex Direct API v5 -- ad campaigns

43

94 tools total across all packages (counted by node scripts/smoke-tools.mjs).

Package names. The packages go to npm under the @stufently/* scope (@stufently/yandex-webmaster-mcp and so on), starting with v2.2.0. The unscoped names — yandex-search-mcp, yandex-wordstat-mcp, yandex-webmaster-mcp, yandex-metrika-mcp — belong to a different publisher on the public registry (altrr2, altrr2/yandex-tools-mcp, first published 2025-12-20, three months before this repo existed). Never npx an unscoped name with your Yandex tokens in the environment: that hands your credentials to unrelated code. Always type the @stufently/ prefix.

Related MCP server: yandex-mcp

Install

Paste this into a terminal. It starts the Webmaster server on stdin; the same npx command is what every client block below runs.

YANDEX_WEBMASTER_TOKEN=your-oauth-token npx -y @stufently/yandex-webmaster-mcp

Node.js >= 22 is the only prerequisite — no clone, no Bun, no build step. Swap the package and the variables for another server:

Server

Command

Variables it needs

Search

npx -y @stufently/yandex-search-mcp

YANDEX_SEARCH_API_KEY, YANDEX_FOLDER_ID

Wordstat

npx -y @stufently/yandex-wordstat-mcp

WORDSTAT_API_KEY, WORDSTAT_FOLDER_ID

Webmaster

npx -y @stufently/yandex-webmaster-mcp

YANDEX_WEBMASTER_TOKEN

Metrika

npx -y @stufently/yandex-metrika-mcp

YANDEX_METRIKA_TOKEN

Direct

npx -y @stufently/yandex-direct-mcp

YANDEX_DIRECT_TOKEN (+ optional YANDEX_DIRECT_CLIENT_LOGIN, YANDEX_DIRECT_SANDBOX)

All five servers start without their variables and fail only on the first tool call, with an error that names the missing variable.

Append a version (@stufently/yandex-webmaster-mcp@2.2.0) to pin it instead of taking the latest release on every start. The OAuth helper runs the same way: npx -y @stufently/yandex-webmaster-mcp auth (and @stufently/yandex-metrika-mcp auth).

Do not npx the unscoped names — they belong to a different publisher (see the note above).

Verified clients and platforms

Only what has actually been run is listed as verified. Everything else in Client Configuration is a documented config that nobody has checked end to end.

Client / runtime

OS

How it runs

Status

Evidence

Claude Code 2.1

Ubuntu 26.04 LTS, x86_64

Node.js 24 from a checkout, stdio: yandex-direct, yandex-wordstat, yandex-webmaster

Verified

Daily use on the maintainer's host

Codex CLI 0.162

Ubuntu 26.04 LTS, x86_64

Node.js 24 from a checkout: yandex-wordstat, yandex-webmaster

Configured, not checked separately

Maintainer's host config

Node.js 22 + Bun

Ubuntu (ubuntu-latest)

Unit tests; all five servers answer tools/list over stdio

Verified in CI

ci.yml (node --test, scripts/smoke-tools.mjs)

yandex-metrika, yandex-search with a real token

any

—

Not verified in a client

CI smoke test only

npx @stufently/* from npm

Ubuntu, node:24-alpine

npx -y @stufently/yandex-*-mcp, stdio

Verified

All five answer tools/list from the published 2.2.0 packages (2026-10-15)

Claude Desktop (.mcpb), Claude Code plugin

any

Desktop Extension, plugin

Not verified

Bundles are built in CI, never installed in a real Desktop or as a plugin

Cursor, Windsurf, Zed

any

Configs below

Not verified

Documented only

macOS, Windows

—

Any client

Not verified

No CI runner on these systems

Client Configuration

Every block registers all five servers; drop the ones you do not need. Values are placeholders — see Environment Variables for where each one comes from. command is the same npx as in the terminal snippet above.

Claude Code

Project file: .mcp.json in the project root (Claude Code also reads a user-level config; this block is the project file).

{
  "mcpServers": {
    "yandex-search": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-search-mcp"],
      "env": {
        "YANDEX_SEARCH_API_KEY": "your-cloud-api-key",
        "YANDEX_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-wordstat": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-wordstat-mcp"],
      "env": {
        "WORDSTAT_API_KEY": "your-cloud-api-key",
        "WORDSTAT_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-webmaster": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-webmaster-mcp"],
      "env": { "YANDEX_WEBMASTER_TOKEN": "your-oauth-token" }
    },
    "yandex-metrika": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-metrika-mcp"],
      "env": { "YANDEX_METRIKA_TOKEN": "your-oauth-token" }
    },
    "yandex-direct": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-direct-mcp"],
      "env": {
        "YANDEX_DIRECT_TOKEN": "your-oauth-token",
        "YANDEX_DIRECT_CLIENT_LOGIN": "",
        "YANDEX_DIRECT_SANDBOX": "true"
      }
    }
  }
}

Or from the terminal, one server at a time:

claude mcp add yandex-search --scope user \
  --env YANDEX_SEARCH_API_KEY=your-cloud-api-key --env YANDEX_FOLDER_ID=your-folder-id \
  -- npx -y @stufently/yandex-search-mcp
claude mcp add yandex-wordstat --scope user \
  --env WORDSTAT_API_KEY=your-cloud-api-key --env WORDSTAT_FOLDER_ID=your-folder-id \
  -- npx -y @stufently/yandex-wordstat-mcp
claude mcp add yandex-webmaster --scope user \
  --env YANDEX_WEBMASTER_TOKEN=your-oauth-token \
  -- npx -y @stufently/yandex-webmaster-mcp
claude mcp add yandex-metrika --scope user \
  --env YANDEX_METRIKA_TOKEN=your-oauth-token \
  -- npx -y @stufently/yandex-metrika-mcp
claude mcp add yandex-direct --scope user \
  --env YANDEX_DIRECT_TOKEN=your-oauth-token \
  -- npx -y @stufently/yandex-direct-mcp

Check with claude mcp list. The plugin does the same in two commands and also installs the bundled skills.

Claude Desktop

File: claude_desktop_config.json — macOS ~/Library/Application Support/Claude/claude_desktop_config.json, Windows %APPDATA%\Claude\claude_desktop_config.json, Linux ~/.config/Claude/claude_desktop_config.json.

{
  "mcpServers": {
    "yandex-search": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-search-mcp"],
      "env": {
        "YANDEX_SEARCH_API_KEY": "your-cloud-api-key",
        "YANDEX_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-wordstat": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-wordstat-mcp"],
      "env": {
        "WORDSTAT_API_KEY": "your-cloud-api-key",
        "WORDSTAT_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-webmaster": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-webmaster-mcp"],
      "env": { "YANDEX_WEBMASTER_TOKEN": "your-oauth-token" }
    },
    "yandex-metrika": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-metrika-mcp"],
      "env": { "YANDEX_METRIKA_TOKEN": "your-oauth-token" }
    },
    "yandex-direct": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-direct-mcp"],
      "env": {
        "YANDEX_DIRECT_TOKEN": "your-oauth-token",
        "YANDEX_DIRECT_CLIENT_LOGIN": "",
        "YANDEX_DIRECT_SANDBOX": "true"
      }
    }
  }
}

One click, without editing JSON: download the .mcpb file for the server you want from https://github.com/stufently/yandex-mcp/releases/latest and open it. Claude Desktop installs the extension and asks for the token. Each server is its own file (yandex-search-mcp, yandex-wordstat-mcp, yandex-webmaster-mcp, yandex-metrika-mcp, yandex-direct-mcp). That path works before the npm packages are published. YANDEX_DIRECT_SANDBOX set to true points Direct at the sandbox; leave it false for real campaigns. Restart the app after a manual edit.

Each release includes checksums.txt with the SHA256 checksum of every .mcpb bundle. Download it alongside your bundle and verify the download before opening it:

sha256sum -c --ignore-missing checksums.txt   # run next to the downloaded .mcpb

Releases from the next tag on also carry a GitHub build provenance attestation for each .mcpb, signed in the release workflow. Check that a bundle was built by this repository's workflow and not swapped afterwards (needs the GitHub CLI):

gh attestation verify <bundle>.mcpb --repo stufently/yandex-mcp

Cursor

Add yandex-search MCP server to Cursor yandex-search

Add yandex-wordstat MCP server to Cursor yandex-wordstat

Add yandex-webmaster MCP server to Cursor yandex-webmaster

Add yandex-metrika MCP server to Cursor yandex-metrika

Add yandex-direct MCP server to Cursor yandex-direct

Each button installs one server; replace the your-… placeholders in ~/.cursor/mcp.json afterwards. Or add the block below by hand.

File: ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project).

{
  "mcpServers": {
    "yandex-search": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-search-mcp"],
      "env": {
        "YANDEX_SEARCH_API_KEY": "your-cloud-api-key",
        "YANDEX_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-wordstat": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-wordstat-mcp"],
      "env": {
        "WORDSTAT_API_KEY": "your-cloud-api-key",
        "WORDSTAT_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-webmaster": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-webmaster-mcp"],
      "env": { "YANDEX_WEBMASTER_TOKEN": "your-oauth-token" }
    },
    "yandex-metrika": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-metrika-mcp"],
      "env": { "YANDEX_METRIKA_TOKEN": "your-oauth-token" }
    },
    "yandex-direct": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-direct-mcp"],
      "env": {
        "YANDEX_DIRECT_TOKEN": "your-oauth-token",
        "YANDEX_DIRECT_CLIENT_LOGIN": "",
        "YANDEX_DIRECT_SANDBOX": "true"
      }
    }
  }
}

Windsurf

File: mcp_config.json — macOS and Linux ~/.config/devin/mcp_config.json (or $XDG_CONFIG_HOME/devin/mcp_config.json), Windows %APPDATA%\devin\mcp_config.json. Older builds used ~/.codeium/windsurf/mcp_config.json; that path is not in the current docs.

{
  "mcpServers": {
    "yandex-search": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-search-mcp"],
      "env": {
        "YANDEX_SEARCH_API_KEY": "your-cloud-api-key",
        "YANDEX_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-wordstat": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-wordstat-mcp"],
      "env": {
        "WORDSTAT_API_KEY": "your-cloud-api-key",
        "WORDSTAT_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-webmaster": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-webmaster-mcp"],
      "env": { "YANDEX_WEBMASTER_TOKEN": "your-oauth-token" }
    },
    "yandex-metrika": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-metrika-mcp"],
      "env": { "YANDEX_METRIKA_TOKEN": "your-oauth-token" }
    },
    "yandex-direct": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-direct-mcp"],
      "env": {
        "YANDEX_DIRECT_TOKEN": "your-oauth-token",
        "YANDEX_DIRECT_CLIENT_LOGIN": "",
        "YANDEX_DIRECT_SANDBOX": "true"
      }
    }
  }
}

Zed

File: settings.json (command palette: zed: open settings file). The key is context_servers, not mcpServers.

{
  "context_servers": {
    "yandex-search": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-search-mcp"],
      "env": {
        "YANDEX_SEARCH_API_KEY": "your-cloud-api-key",
        "YANDEX_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-wordstat": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-wordstat-mcp"],
      "env": {
        "WORDSTAT_API_KEY": "your-cloud-api-key",
        "WORDSTAT_FOLDER_ID": "your-folder-id"
      }
    },
    "yandex-webmaster": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-webmaster-mcp"],
      "env": { "YANDEX_WEBMASTER_TOKEN": "your-oauth-token" }
    },
    "yandex-metrika": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-metrika-mcp"],
      "env": { "YANDEX_METRIKA_TOKEN": "your-oauth-token" }
    },
    "yandex-direct": {
      "command": "npx",
      "args": ["-y", "@stufently/yandex-direct-mcp"],
      "env": {
        "YANDEX_DIRECT_TOKEN": "your-oauth-token",
        "YANDEX_DIRECT_CLIENT_LOGIN": "",
        "YANDEX_DIRECT_SANDBOX": "true"
      }
    }
  }
}

Codex

From the shell:

codex mcp add yandex-webmaster --env YANDEX_WEBMASTER_TOKEN=your-oauth-token \
  -- npx -y @stufently/yandex-webmaster-mcp

Or all five in ~/.codex/config.toml:

[mcp_servers.yandex-search]
command = "npx"
args = ["-y", "@stufently/yandex-search-mcp"]
env = { YANDEX_SEARCH_API_KEY = "your-cloud-api-key", YANDEX_FOLDER_ID = "your-folder-id" }

[mcp_servers.yandex-wordstat]
command = "npx"
args = ["-y", "@stufently/yandex-wordstat-mcp"]
env = { WORDSTAT_API_KEY = "your-cloud-api-key", WORDSTAT_FOLDER_ID = "your-folder-id" }

[mcp_servers.yandex-webmaster]
command = "npx"
args = ["-y", "@stufently/yandex-webmaster-mcp"]
env = { YANDEX_WEBMASTER_TOKEN = "your-oauth-token" }

[mcp_servers.yandex-metrika]
command = "npx"
args = ["-y", "@stufently/yandex-metrika-mcp"]
env = { YANDEX_METRIKA_TOKEN = "your-oauth-token" }

[mcp_servers.yandex-direct]
command = "npx"
args = ["-y", "@stufently/yandex-direct-mcp"]
env = { YANDEX_DIRECT_TOKEN = "your-oauth-token" }

Other ways to install

Claude Code plugin

This repo ships as a Claude Code plugin, so you do not have to hand-write five MCP entries. Add the repo as a marketplace and install:

/plugin marketplace add stufently/yandex-mcp
/plugin install yandex-mcp@stufently

Or without the interactive picker:

claude plugin marketplace add stufently/yandex-mcp
claude plugin install yandex-mcp@stufently --scope user

What the plugin gives you over a hand-written MCP config:

Plugin

Manual MCP config

Setup

two commands

edit JSON, restart client

All five servers

registered at once

five entries, one per server

Paths

resolved via ${CLAUDE_PLUGIN_ROOT}

you hardcode absolute paths

Bundled skills

yandex-keyword-research, yandex-competitive-analysis installed too

not included — skills are Claude Code only

Updates

/plugin update yandex-mcp@stufently

git pull and re-check your paths

The plugin installs the servers but not the credentials — Claude Code substitutes only ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PROJECT_DIR}. Supply the Yandex tokens yourself, either by exporting them in your shell or by putting them in ~/.claude/settings.json:

{
  "env": {
    "YANDEX_SEARCH_API_KEY": "...",
    "YANDEX_FOLDER_ID": "...",
    "WORDSTAT_API_KEY": "...",
    "WORDSTAT_FOLDER_ID": "...",
    "YANDEX_WEBMASTER_TOKEN": "...",
    "YANDEX_METRIKA_TOKEN": "...",
    "YANDEX_DIRECT_TOKEN": "..."
  }
}

Servers whose variables are missing simply fail on first use; the rest keep working, so you can install the plugin and set up one API at a time.

Docker

The image ghcr.io/stufently/yandex-mcp is published with the next release tag; until then, build it from a clone with docker build -t yandex-mcp ..

One image holds all five servers. The first argument picks the server — search, wordstat, webmaster (the default), metrika or direct — and anything after it goes to the server. Keep -i (MCP talks over stdin) and pass the tokens with -e:

docker run -i --rm -e YANDEX_WEBMASTER_TOKEN ghcr.io/stufently/yandex-mcp webmaster
docker run -i --rm -e YANDEX_DIRECT_TOKEN ghcr.io/stufently/yandex-mcp direct

In a client config, Docker replaces npx. For example, Metrika in Claude Desktop:

{
  "mcpServers": {
    "yandex-metrika": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "YANDEX_METRIKA_TOKEN", "ghcr.io/stufently/yandex-mcp", "metrika"],
      "env": { "YANDEX_METRIKA_TOKEN": "your-oauth-token" }
    }
  }
}

-e NAME without a value forwards the variable from the client's environment, so the token stays out of args. The image runs as the unprivileged node user, and the entrypoint execs the server, so docker stop reaches Node directly. The Wordstat fallback file ~/.config/yandex-cloud/wordstat.env is not visible inside the container — pass WORDSTAT_API_KEY and WORDSTAT_FOLDER_ID with -e. The OAuth helper prints a link and reads the code from stdin, so it works too: docker run -it --rm -e YANDEX_CLIENT_ID -e YANDEX_CLIENT_SECRET ghcr.io/stufently/yandex-mcp webmaster auth.

From source

Needs Node.js >= 22 and Bun on your PATH (the plugin needs Bun too: the repo carries a bun.lock, so Claude Code installs the plugin's dependencies with Bun and does not fall back to npm).

git clone https://github.com/stufently/yandex-mcp.git
cd yandex-mcp
bun install
cp .env.example .env   # then fill it in

For Webmaster and Metrika you can mint an OAuth token with the built-in flow (needs YANDEX_CLIENT_ID / YANDEX_CLIENT_SECRET from your own Yandex OAuth app):

node packages/yandex-webmaster-mcp/src/index.mjs auth
node packages/yandex-metrika-mcp/src/index.mjs auth

Search and Wordstat do not use OAuth: both talk to Yandex Cloud and need a service-account API key plus a folder ID.

The Metrika helper requests metrika:read metrika:write, because create-counter and delete-counter are refused with HTTP 403 by a read-only token. To keep a token that cannot modify anything, narrow the scope explicitly:

YANDEX_METRIKA_SCOPE="metrika:read" node packages/yandex-metrika-mcp/src/index.mjs auth

The two write tools then fail with a 403 that names the missing scope, instead of a bare permission error.

A write-capable token does not mean an unguarded delete: delete-counter refuses unless the call passes confirm: true, and the refusal happens before any request reaches Yandex. See Deleting a counter.

The same rule holds across the monorepo: an operation that cannot be undone through the API it is called with asks for confirm: true first — delete-counter in Metrika, delete-host in Webmaster, and the fourteen delete/update/bid tools in Direct. Additive and reversible writes (create-counter, add-host, add_*, archive and suspend) run without one, so the confirmation stays a signal rather than a reflex. Search and Wordstat are read-only and have nothing to guard.

To use a clone with any client block above, replace the npx command with node and the script path, e.g. for Webmaster:

"command": "node",
"args": ["/path/to/yandex-mcp/packages/yandex-webmaster-mcp/src/index.mjs"]

Inside a clone, the checked-in .mcp.json already registers all five servers for Claude Code from .env, with paths relative to the repo root.

Environment Variables

Variable

Required by

Description

YANDEX_SEARCH_API_KEY

yandex-search-mcp

API key from Yandex Cloud

YANDEX_FOLDER_ID

yandex-search-mcp

Folder ID from Yandex Cloud

WORDSTAT_API_KEY

yandex-wordstat-mcp

Yandex Cloud API key (service account, role search-api.webSearch.user)

WORDSTAT_FOLDER_ID

yandex-wordstat-mcp

Yandex Cloud folder ID for Search API v2

YANDEX_WEBMASTER_TOKEN

yandex-webmaster-mcp

OAuth token for Webmaster

YANDEX_METRIKA_TOKEN

yandex-metrika-mcp

OAuth token for Metrika (metrika:read to read, metrika:write also needed for counter tools)

YANDEX_METRIKA_SCOPE

OAuth flow (optional)

Override requested scopes; default metrika:read metrika:write

YANDEX_DIRECT_TOKEN

yandex-direct-mcp

OAuth token for Direct API v5

YANDEX_DIRECT_CLIENT_LOGIN

yandex-direct-mcp (agencies)

Client login to act on behalf of

YANDEX_DIRECT_SANDBOX

yandex-direct-mcp (optional)

true to hit the Direct sandbox

YANDEX_CLIENT_ID

OAuth flow (optional)

Yandex OAuth app client ID

YANDEX_CLIENT_SECRET

OAuth flow (optional)

Yandex OAuth app client secret

Copy .env.example to .env and fill in the values:

cp .env.example .env

You only need the variables for the servers you actually enable — each server reads its own and ignores the rest.

Example prompts

  • Why did my site lose clicks last week?

  • Which search phrases send the most visits to example.com?

  • How many people search for this phrase on Yandex each month, and is that demand growing?

  • Pause the Direct campaign that spent the most yesterday, then show me its new state.

Common Prompts

Once a server is connected, these are the kinds of requests it can answer. Each example maps onto real tools listed in the per-package READMEs.

yandex-search (1 tool)

  • "Search Yandex for «купить кондиционер» and show me the top 10 results with their domains."

  • "Who ranks on Yandex for «доставка пиццы» in region 2 (Saint Petersburg)? Give positions and titles."

  • "Search yandex.ru for «отзывы о клинике» with strict family mode and pull 20 results."

  • "Get page 2 of Yandex results for «ремонт ноутбуков Москва»."

yandex-wordstat (5 tools)

  • "How many people search «купить ноутбук» on Yandex per month, and what related queries come up?"

  • "Show the monthly trend for «горящие туры» over the last two years — is demand growing?"

  • "Which Russian regions search «кондиционер» the most? Show volume and affinity index for the top 20."

  • "Give me the Yandex region tree down to depth 2 so I can pick region IDs for filtering."

  • "Compare desktop vs phone demand for «доставка еды»."

yandex-webmaster (33 tools)

  • "List my verified sites in Yandex Webmaster with their SQI."

  • "Add https://example.com/sitemap.xml to Webmaster for example.com."

  • "Which pages dropped out of search on example.com recently, and why? Show anything that came back too."

  • "Why did pages drop out of search on example.com? Group the samples by exclusion reason."

  • "What are my top 50 queries by clicks for example.com, and how did positions move?"

  • "Show indexing history for example.com and flag any sudden drop in pages in search."

  • "What site problems does Yandex report for example.com right now?"

  • "Send https://example.com/new-page for recrawl and tell me my remaining daily quota."

  • "Show broken internal links on example.com — and say which of them Yandex has not re-checked in months."

yandex-metrika (12 tools)

  • "Traffic summary for counter 12345678 last month — visits, users, bounce rate, average duration."

  • "Where does my traffic come from? Break it down by source for counter 12345678."

  • "Top 20 landing pages by pageviews for counter 12345678 last week."

  • "Which countries and cities do my visitors come from?"

  • "Custom report: ym:s:visits by ym:s:trafficSource and ym:s:deviceCategory for the last 7 days."

yandex-direct (43 tools)

  • "List my active Yandex Direct campaigns with their types and states."

  • "Show the keywords in campaign 123 together with their current search bids."

  • "Build a last-30-days campaign performance report with impressions, clicks, and cost."

  • "Pause campaign 123, then confirm its new state."

  • "Pull the GeoRegions dictionary so I can pick targeting IDs."

Direct writes are live. Every write hits the production account — there is no dry-run. The fourteen that cannot be undone (delete_*, update_* and the three bid set_* tools) refuse unless the call passes confirm: true; add_*, archive_*/unarchive_*, suspend_*/resume_* and moderate_ads have an inverse tool and run straight away. Bids are expressed in micros (×10⁶). Set YANDEX_DIRECT_SANDBOX=true while experimenting. See Irreversible tools.

Skills

These are Claude Code skills, installed automatically with the plugin. They are not available to other MCP clients, which get the raw tools only.

yandex-keyword-research

Research keywords and search trends for Russian/CIS markets. Combines Wordstat data (volumes, trends, regional distribution) with Yandex Search results for a complete keyword analysis.

yandex-competitive-analysis

Analyze competitors and search landscape. Finds who ranks for target keywords, identifies content gaps, and discovers ranking opportunities across Russian/CIS markets.

Development

Requires Node.js >= 22.0.0 and Bun as the package manager.

# Install dependencies
bun install

# Lint
bun run lint

# Auto-fix lint issues
bun run lint:fix

# Format code
bun run format

# Unit tests (pure helpers: date windows, series extraction, XML parsing)
bun run test

# Smoke test: start every server over stdio and query tools/list
bun run smoke

# The same from the Docker image, with no credentials in the container
docker build -t yandex-mcp:local . && node scripts/docker-smoke.mjs yandex-mcp:local

Tech Stack

  • Pure ES Modules (.mjs, no TypeScript, no build step)

  • @modelcontextprotocol/sdk (^1.27.1)

  • zod (^4.3.6) for input validation

  • Biome for linting and formatting

Project Structure

packages/
  yandex-search-mcp/       # 1 tool   - Yandex Search  (src/parse.mjs — XML parsing)
  yandex-wordstat-mcp/     # 5 tools  - Keyword research (src/dates.mjs — API window rules)
  yandex-webmaster-mcp/    # 33 tools - Site analytics  (SKILL.md — agent playbook;
                           #                            src/series.mjs — time series shapes;
                           #                            src/exclusions.mjs — exclusion reasons)
  yandex-metrika-mcp/      # 12 tools - Web analytics
  yandex-direct-mcp/       # 43 tools - Ad campaigns
scripts/smoke-tools.mjs    # Starts every server and checks tools/list
scripts/docker-smoke.mjs   # Same check against the Docker image, without credentials
Dockerfile                 # One image for all five servers (docker/entrypoint.sh picks one)
.claude/skills/            # Claude Code skills (shipped with the plugin)
.mcp.json                  # Local dev config
plugin.mcp.json            # Distribution config — the 5 servers the plugin registers
.claude-plugin/
  plugin.json              # Plugin manifest
  marketplace.json         # Marketplace catalog, so the repo can be added directly

Each package keeps its pure, testable helpers in separate modules next to index.mjs; tests live in packages/*/test/*.test.mjs and run without network access.

Contributing

Contributions are welcome. Please ensure:

  1. Code passes bun run lint and bun run test with no errors.

  2. All tools return both content (human-readable) and structuredContent (raw API data).

  3. The content text must not contradict structuredContent — a summary that reports "0 data points" while the structured payload holds a full series is a bug, and was the most common one in this repo's history.

  4. API requests use fetchWithRetry with exponential backoff for 429/5xx errors.

  5. Dates are validated with strict calendar checking (no silent overflow) in UTC.

  6. Tokens are never printed to stdout in full.

License

MIT

Available Tools

33 tools
add-hostAdd site to WebmasterA

Add a new site (host) to Yandex Webmaster. The host_url must include protocol (e.g. "https://example.com"). After adding, the host needs verification. Use when the user asks to add a new site to Webmaster. Do not use it to check ownership; call verify-host, then start-verification. Do not use it to remove a site; call delete-host, which is irreversible and requires confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_urlYesSite URL with protocol (e.g. "https://example.com")

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds genuinely new context: the host requires verification after creation, and that delete-host is irreversible and needs confirmation. It does not describe return values, but those are less critical here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the action, then the protocol requirement, then sibling routing. Every sentence carries distinct information with no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation tool with full schema coverage and annotations covering the safety profile, the description covers trigger, format constraint, post-condition (verification), and alternatives. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's description matches the schema text verbatim ('Site URL with protocol'). The description adds no syntax or format detail beyond what the schema already states, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a new site (host) to Yandex Webmaster') and immediately disambiguates from siblings by naming verify-host, start-verification, and delete-host. An agent can distinguish this from the many get-* siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit trigger ('Use when the user asks to add a new site') plus two negative routings: ownership checks go to verify-host/start-verification, and removal goes to delete-host. This is the full when/when-not/alternatives pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add-recrawl-urlQueue URL for re-crawlA

Enqueue a URL for Yandex re-crawl. Daily quota applies (check get-recrawl-quota). Returns task_id. Use when the user asks Yandex to recrawl one URL and the daily quota still has room. Do not use it to check the quota first; call get-recrawl-quota. Do not use it to read a task later; call get-recrawl-task with the returned task id.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFull URL on the host to re-crawl (must start with host scheme+domain)
host_idYesHost ID (e.g. "https:example.com:443")

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the description's own contribution is the daily quota constraint (a rate limit), the returned task_id, and the follow-up workflow. It does not say what happens when the quota is exhausted or what errors surface, but it adds solid operational context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then constraints, then alternatives, in four tight sentences. The second quota sentence mildly repeats the parenthetical 'check get-recrawl-quota', which is the only bit of redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly discloses the return value (task_id) and the handoff to get-recrawl-task, plus the quota gate. For a two-parameter enqueue tool this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both url and host_id are already documented with format hints in the schema. The description adds no syntax or format detail beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (enqueue) and resource (URL for Yandex re-crawl), and explicitly differentiates itself from siblings get-recrawl-quota and get-recrawl-task. An agent can distinguish it from every other recrawl tool without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition ('when the user asks Yandex to recrawl one URL and the daily quota still has room') and two explicit exclusions naming the correct alternative for each. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add-sitemapAdd Sitemap fileA

Add a Sitemap file to Yandex Webmaster (user-added sitemaps). Returns sitemap_id. The host must be verified, or the call fails with 404 HOST_NOT_VERIFIED. Adding a file that is already there fails with 409 SITEMAP_ALREADY_ADDED — not a broken call but "already present", and the error payload names the existing sitemap_id. Use when the user asks to register a sitemap URL on an already verified host. Do not use it to list files; call get-user-sitemaps. Do not use it to delete the host; call delete-host, which is irreversible and requires confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFull URL of the sitemap file (e.g. "https://example.com/sitemap.xml")
host_idYesHost ID (URL-encoded, e.g. "https:example.com:443")

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the mutation/idempotency profile (readOnly=false, idempotent=false, destructive=false, openWorld=true); the description adds substantial context beyond that: the verified-host prerequisite and its 404 HOST_NOT_VERIFIED failure, and the 409 SITEMAP_ALREADY_ADDED duplicate case, including that the error payload carries the existing sitemap_id. This is exactly the behavioral detail annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and return value are front-loaded, then prerequisites, error cases, and routing guidance in priority order. Six short sentences, each carrying distinct information, though the error-code detail could be marginally tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the description covers the return value (sitemap_id), the host-verification prerequisite, both known failure modes, and sibling routing. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (url, host_id) are already documented with format examples in the schema. The description adds no syntax or format detail beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Add) and resource (Sitemap file to Yandex Webmaster, user-added sitemaps) and immediately names the return value (sitemap_id). It also explicitly distinguishes itself from siblings get-user-sitemaps and delete-host, so an agent can route correctly without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger ("Use when the user asks to register a sitemap URL on an already verified host") plus two explicit exclusions with the correct alternatives: listing goes to get-user-sitemaps, host deletion goes to delete-host. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-hostA
Destructive

Remove a host (site) from Yandex Webmaster. IRREVERSIBLE: verification, indexing and search-query history, sitemaps and important-URL settings are lost permanently; re-adding the site starts from scratch. Requires confirm: true — without it the tool refuses and calls nothing. Use when the user has explicitly asked to remove a site from Webmaster and accepts that its history is lost. Do not use it to add a site; call add-host. Do not use it to drop one URL from search; this tool deletes the whole host.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be exactly true to actually delete. Omit it (or pass false) and the tool refuses without calling the Webmaster API.
host_idYesHost ID (URL-encoded, e.g. "https:example.com:443")

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint annotation by enumerating precisely what is destroyed (verification, indexing/query history, sitemaps, important-URL settings), stating that re-adding starts from scratch, and disclosing the confirm-gate refusal behavior. This is exactly the consequence detail a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then the irreversibility, then the confirm gate, then routing guidance. Dense but every sentence carries distinct, non-redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent tool with no output schema, the description covers consequences, guardrails, and alternatives completely. An agent has everything needed to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both params are already documented (baseline 3). The description adds value by emphasizing that confirm must be true for the tool to act at all, clarifying that a behavioral requirement exists beyond the schema's required[] list (which only lists host_id).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a host (site) from Yandex Webmaster') and explicitly distinguishes itself from siblings add-host (adding) and URL-drop operations. An agent can identify exactly what this tool does and what it does not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('user has explicitly asked to remove a site and accepts its history is lost') and two when-not cases with the correct alternative named ('call add-host', and don't use it to drop a single URL). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-diagnosticsA
Read-onlyIdempotent

Get site diagnostics. Text lists problems in state PRESENT (code, severity, date); full response is in structuredContent. Use when the user asks what site problems Yandex currently reports, such as mobile or security issues. Do not use it for pages that dropped out of search; call get-excluded-pages or get-search-events-samples.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYesHost ID

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds genuinely useful behavioral detail: text lists problems in state PRESENT with code/severity/date, and the full response lives in structuredContent. It stops short of explaining what PRESENT means, other states, or pagination, keeping it at a strong 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, purpose front-loaded, then usage trigger, then the negative routing. No filler; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool, the description covers purpose, trigger, exclusions, and even compensates for the absent output schema by explaining that text lists PRESENT problems while the full payload is in structuredContent. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is only one parameter (host_id), which the schema already documents. The description adds no additional meaning about the parameter. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get site diagnostics') and immediately clarifies scope by contrasting with sibling tools. An agent can distinguish it from get-excluded-pages and get-search-events-samples without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use trigger ('user asks what site problems Yandex currently reports, such as mobile or security issues') and an explicit when-not with named alternatives ('Do not use it for pages that dropped out of search; call get-excluded-pages or get-search-events-samples'). Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-excluded-pagesA
Read-onlyIdempotent

Pages DROPPED FROM SEARCH inside a time window, with the reason for each one (url + excluded_url_status, plus bad_http_status for HTTP_ERROR and target_url for redirect/canonical/duplicate cases). READ THE NATURE OF THIS DATA: API v4 has no "currently excluded pages" resource, only the event log /search-urls/events/samples, so this is built from REMOVED_FROM_SEARCH EVENTS in the scanned window, not from a live index snapshot. Events are deduplicated per URL with the latest one winning, so a page that dropped and came back is NOT reported as excluded — it is listed separately under returned_to_search. The window is bounded by limit/max_requests, so an older exclusion outside it is invisible, and summary_excluded_pages_count (the aggregate from get-summary, returned alongside) is a DIFFERENT kind of number that is not expected to match the length of this list. Deduplication spans ONE call: when continuing a walk with offset, pass the URLs from the previous returned_to_search in returned_urls, otherwise a page whose return fell in the earlier window will be reported as excluded again. There is no server-side event filter, so the tool walks the mixed stream page by page until it has collected limit excluded pages (at most max_requests page fetches — retries are not counted, so HTTP calls can be more) and reports next_offset/exhausted to continue the walk. Use when the user asks which pages dropped out of search and why, inside a scanned window. Do not use it for the aggregate excluded_pages_count; that number comes from get-summary and is a different kind of count. Do not use it for a single mixed page of events; call get-search-events-samples.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many EXCLUDED pages to collect (default: 20)
offsetNoEvent-stream offset to resume from (default: 0)
host_idYesHost ID
max_requestsNoCap on PAGE fetches made while walking the mixed event stream (default: 10). Retries of a failed fetch (429/5xx) are not counted, so the number of HTTP calls can be higher.
returned_urlsNoURLs already known to have come back to search — pass `returned_to_search` from the previous call when continuing a walk with `offset`. Deduplication only spans one call, so without this a page whose return fell in the earlier window is reported as excluded again.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond annotations: data is built from REMOVED_FROM_SEARCH events, not a live index snapshot; deduplication is per URL with latest event winning and spans only one call; pages that returned are listed separately under returned_to_search; window bounds and max_requests cap behavior; retries not counted; and the need to pass returned_urls when continuing with offset. Annotations already cover read-only/idempotent/non-destructive, but the description carries crucial operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core definition before diving into caveats, and most sentences earn their place by explaining non-obvious data semantics. It is long but justified for a tool with several tricky behaviors, though minor repetition (deduplication explained twice) and heavy capitalization keep it from being perfectly tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description still describes return shape sufficiently: url + excluded_url_status, bad_http_status, target_url, returned_to_search, and next_offset/exhausted for continuation. It covers all complexity around event-stream walking, pagination, and result interpretation, leaving no significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, including limit (excluded pages), max_requests (page fetch cap), offset, host_id, and returned_urls continuation semantics. The description largely reinforces these meanings rather than adding new parameter-level syntax or constraints beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: pages dropped from search inside a time window, with reasons. Explicitly distinguishes from sibling results by saying it is not the aggregate from get-summary and not a single mixed page of events, naming get-search-events-samples as the alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (user asks which pages dropped out of search and why inside a scanned window) and when-not-to-use, naming get-summary for aggregate excluded_pages_count and get-search-events-samples for a single mixed page of events. No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-hostA
Read-onlyIdempotent

Get details for a specific host. Use when the user wants the verification flag and data status of one host. Do not use it to list every site; call list-hosts. Do not use it to start the ownership check; call start-verification after verify-host.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYesHost ID (URL-encoded, e.g. "https:example.com:443")

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds return-content context the annotations cannot supply (verification flag, data status), which matters because there is no output schema, though it does not describe error cases or how the verification flag is reported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then routing rules. Every clause carries routing or scope information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only getter with no output schema, the description covers purpose, scope, alternatives and the gist of the return payload. It stops short of detailing the response fields or error behavior, which is a minor gap given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema description coverage is 100%, so the schema fully documents host_id including the URL-encoded format example. The description adds nothing about the identifier's form or encoding, so this is the baseline case where structured data does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get details for a specific host") and narrows it further by naming the payload an agent should expect: the verification flag and data status. It explicitly separates itself from list-hosts, start-verification and verify-host, so an agent can choose correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives positive usage (when the user wants the verification flag / data status of one host) and two explicit exclusions with named alternatives: use list-hosts to enumerate sites, use start-verification for the ownership check. This is exactly the when/when-not/alternative structure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-important-url-historyA
Read-onlyIdempotent

Get history for a specific important URL. Use when the user asks how one important URL changed over time. Do not use it to list the important URLs; call get-important-urls. Do not use it for search-event samples; call get-search-events-samples.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to get history for
date_toNo
host_idYesHost ID
date_fromNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety and idempotency profile is covered. The description adds only scoping semantics (one URL vs. a list), not behavioral detail such as pagination, retention window, or how the history is sampled. Adequate but no value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, no filler, with the core purpose front-loaded before the two disambiguation clauses. Every sentence carries routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Purpose and routing are fully covered, and no output schema exists so return values need not be explained. However, with 4 parameters at 50% description coverage, the undocumented date_from/date_to range semantics leave the agent guessing about how to narrow or bound the history query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: url and host_id are described, but date_from and date_to carry no description in the schema. The description never mentions the date-range narrowing capability at all, so it fails to compensate for the coverage gap on half the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get history for a specific important URL') and immediately scopes it to a single URL. It explicitly names the two siblings it is not (get-important-urls, get-search-events-samples), so an agent can disambiguate without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger ('when the user asks how one important URL changed over time') plus two named exclusions with the correct alternative tool for each. This is exactly the when/when-not/alternative structure that removes routing ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-important-urlsA
Read-onlyIdempotent

Get important URLs for a site. Use when the user wants the important URLs configured for the host. Do not use it for the history of one URL; call get-important-url-history. Do not use it for indexed samples; call get-indexing-samples.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
host_idYesHost ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered structurally. The description adds routing context but no additional behavioral detail such as pagination behavior, result volume, or what 'configured important URLs' means operationally. Adequate but not additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero filler, with the purpose front-loaded and the exclusion rules following immediately. Every sentence carries routing information an agent needs to pick between siblings.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Sibling disambiguation is complete, but the description omits any pagination guidance despite limit/offset being the only non-trivial parameters, and there is no output schema to explain the return shape. For a list endpoint this leaves a real gap, though the routing burden is well handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%: host_id is documented only as 'Host ID' and limit/offset carry no descriptions. The description says nothing about pagination, defaults, or how limit/offset interact, so it fails to compensate for the coverage gap on a listing tool where pagination semantics matter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get important URLs for a site'), with a scope qualifier ('configured for the host') that separates it from the many other URL-related siblings. An agent can identify the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger ('when the user wants the important URLs configured for the host') and two explicit negative triggers naming the correct alternatives (get-important-url-history for per-URL history, get-indexing-samples for indexed samples). This is a textbook routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-indexing-historyA
Read-onlyIdempotent

Get indexing history over time. Use when the user asks how the number of indexed pages changed over time. Do not use it for example URLs; call get-indexing-samples. Do not use it for pages that appear in search results; call get-insearch-history.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toNo
host_idYesHost ID
date_fromNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered structurally. The description adds usage context but says nothing about return shape, pagination, or granularity of the time series. With annotations carrying the behavioral burden, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, purpose first, then the positive usage trigger, then the two exclusions. Every sentence earns its place and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a history/read tool with no output schema and annotations covering safety, the description covers purpose and routing well. It falls short only on the date-parameter semantics, which an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%: host_id has a (tautological) description while date_from and date_to are undocumented. The description says 'over time' but never specifies date formats, ranges, or how host_id scopes the result, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get indexing history over time') and clarifies the measured quantity ('the number of indexed pages'). It explicitly names the two siblings it is not (get-indexing-samples, get-insearch-history), so an agent can disambiguate without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use ('how the number of indexed pages changed over time') plus two when-not-to-use clauses, each routed to a named alternative with the distinguishing condition. This is textbook sibling routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-indexing-samplesA
Read-onlyIdempotent

Get sample indexed URLs. Use when the user wants example URLs Yandex has indexed. Do not use it for the count over time; call get-indexing-history. Do not use it for URLs that dropped out of results; call get-search-events-samples.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
host_idYesHost ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the scope that results are 'sample' URLs rather than exhaustive or historical, but says nothing about pagination behavior or ordering, which matters for a sampled list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero waste, and the primary purpose is front-loaded ahead of the routing guidance. Every clause earns its place by steering tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, no-output-schema tool the routing guidance is complete, but limit/offset paging behavior is undocumented in both schema and description, leaving a real gap for an agent that needs to page through samples.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% – host_id is described, but limit and offset carry no schema description and the tool description never mentions them. With low coverage the description should compensate for pagination parameters, and it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get sample indexed URLs') and immediately distinguishes itself from two named siblings with different scopes. An agent can tell it apart from get-indexing-history and get-search-events-samples without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('user wants example URLs Yandex has indexed') and two when-not cases, each paired with the correct alternative tool to call instead. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-insearch-historyA
Read-onlyIdempotent

Get in-search (appearing in results) history. Use when the user asks how many pages were present in search results over time. Do not use it for example URLs; call get-insearch-samples. Do not use it for the indexed-page series; call get-indexing-history.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toNo
host_idYesHost ID
date_fromNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety and idempotency are covered structurally. The description adds only the implicit notion of a time series ('over time'); it says nothing about granularity, aggregation, pagination, or whether a date range is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, purpose first, then positive usage, then the two exclusions. No filler and no repetition of structured data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the two date parameters are undocumented everywhere, so an agent knows when to call this tool but not how to bound the range or what shape the returned series takes. Purpose and routing are complete; operational detail is not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% — host_id is documented as 'Host ID' while date_from and date_to have no descriptions at all. The description's phrase 'over time' hints that dates matter but supplies no format, defaults, inclusive/exclusive bounds, or required-range semantics, so it fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get in-search history') and immediately disambiguates the jargon with a parenthetical gloss ('appearing in results'). It also explicitly distinguishes this tool from two similar-sounding siblings by name, so an agent can select it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete triggering condition ('when the user asks how many pages were present in search results over time') plus two explicit exclusions that each route to the correct alternative (get-insearch-samples for example URLs, get-indexing-history for the indexed-page series). This is a textbook when/when-not/alternative block.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-insearch-samplesA
Read-onlyIdempotent

Get sample URLs appearing in search. Use when the user wants example URLs that currently appear in search. Do not use it for pages that were removed; call get-search-events-samples or get-excluded-pages. Do not use it for the history series; call get-insearch-history.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
host_idYesHost ID

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description confirms it returns a sample set of currently-indexed URLs but adds nothing about pagination or result freshness. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose then the exclusion rules. Slight redundancy between 'Get sample URLs appearing in search' and 'example URLs that currently appear in search', but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only sampling tool with no output schema and four annotations, the description covers purpose and routing well. It is incomplete on the pagination parameters and on what a 'sample' means (how many, how selected), which are the remaining gaps an agent would face.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (limit and offset are undocumented; host_id is merely described as 'Host ID'). The description does not compensate — it says nothing about what limit/offset mean, valid ranges, or default paging behavior. With low coverage, the description should have filled this gap and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get sample URLs appearing in search') and immediately distinguishes itself from close siblings by naming the alternatives. An agent can tell this apart from get-search-events-samples and get-insearch-history without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('user wants example URLs that currently appear in search') and two explicit when-NOT-to-use cases, each routed to a named sibling. Routing logic is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-query-historyA
Read-onlyIdempotent

Get search query totals history. Use when the user asks how shows, clicks, or average position moved over time for the site as a whole. Do not use it for the ranking of individual queries; call get-popular-queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toNo
host_idYesHost ID
date_fromNo
device_typeNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is handled. The description adds useful scope context (aggregate site-level time series rather than per-query detail), but it says nothing about date-range defaults, auth requirements, or result granularity/limits beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the core capability plus the routing rule are front-loaded. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description's mention of shows, clicks, and average position does useful work in describing what comes back, and the sibling routing is complete. However, with only 25% parameter documentation and no notes on date handling or defaults, the definition is adequate but leaves meaningful gaps for a 4-parameter time-series tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%: host_id carries a trivial 'Host ID' label and date_from, date_to, and the device_type enum are undocumented. The description does not compensate for this gap — it explains no date format, no default range, and no meaning for the device_type enum values, so an agent must guess at three of four parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get search query totals history') and immediately clarifies the scope is site-wide aggregate metrics over time. It explicitly distinguishes itself from get-popular-queries, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user asks how shows, clicks, or average position moved over time for the site as a whole') and an explicit exclusion with a named alternative ('Do not use it for the ranking of individual queries; call get-popular-queries'). Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-recrawl-queueA
Read-onlyIdempotent

List recrawl queue for a host (URLs submitted via add-recrawl-url with their state). Use when the user wants the list of URLs already sent for recrawl and their states. Do not use it for one known task id; call get-recrawl-task. Do not use it to enqueue a URL; call add-recrawl-url.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 10)
offsetNoPagination offset
host_idYesHost ID (e.g. "https:example.com:443")

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety and side-effect profile is fully covered. The description adds useful context about what the queue represents (submissions from add-recrawl-url and their states), but says nothing about pagination behavior, ordering, or result size limits beyond what the schema states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, with the purpose front-loaded and the routing rules following. The one inefficiency is mild redundancy between 'URLs submitted via add-recrawl-url with their state' and 'the list of URLs already sent for recrawl and their states', which restate the same fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, fully schema-documented list tool with no output schema, the description covers purpose, contents, and sibling routing adequately. It could optionally note return ordering or that results are paginated, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so host_id, limit (default 10), and offset are all documented in the schema itself. The description only restates the host scoping ('for a host') and adds no syntax, format, or default details beyond the schema, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (recrawl queue for a host), and parenthetically defines the queue's contents as URLs submitted via add-recrawl-url with their state. It explicitly distinguishes itself from get-recrawl-task and add-recrawl-url, so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit positive usage ('Use when the user wants the list of URLs already sent for recrawl and their states') plus two exclusions with named alternatives: one known task id -> get-recrawl-task, enqueueing -> add-recrawl-url. When/when-not/alternatives are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-recrawl-quotaA
Read-onlyIdempotent

Get recrawl quota for a host. Use when the user asks how many recrawl requests are left today. Do not use it to send a URL; call add-recrawl-url. Do not use it to see queued tasks; call get-recrawl-queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYesHost ID

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a read-only, idempotent, non-destructive, open-world operation, so the safety profile is covered. The description adds only the daily-quota framing ('left today'), which is useful but modest. It says nothing about quota reset semantics, units, or what happens when the quota is exhausted, so it does not go much beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, front-loaded with the action and followed by routing exclusions. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with full annotation coverage and no output schema, the definition provides enough to invoke correctly. The only minor gap is that the return value's shape (remaining count vs. a quota object) is only hinted at by 'how many recrawl requests are left today'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single required parameter with 100% schema description coverage, so the schema already carries the parameter documentation. The description contributes no additional meaning about host_id (e.g. where to obtain it or whether it differs from a URL). Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get recrawl quota for a host') and immediately anchors it to a user intent ('how many recrawl requests are left today'). It also names the two nearest siblings it must not be confused with, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (user asks about remaining recrawl requests) plus two explicit when-not clauses with named alternatives (add-recrawl-url for sending a URL, get-recrawl-queue for queued tasks). This is the full when/when-not/alternative pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-recrawl-taskA
Read-onlyIdempotent

Get state of a single recrawl task by task_id (returned by add-recrawl-url). Use when the user has a task id from add-recrawl-url and wants that task state. Do not use it to list the queue; call get-recrawl-queue. Do not use it to spend quota; call add-recrawl-url.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYesHost ID
task_idYesRecrawl task ID

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds useful behavioral context the annotations do not: the dependency chain (task_id originates from add-recrawl-url) and the fact that this call does not consume quota. It stops short of describing the possible state values, which would be the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action before the routing rules. The third exclusion sentence is slightly tangential to the primary purpose but still earns its place as disambiguation against the quota-spending tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read with full annotations and no output schema, the description covers origin, scope and exclusions adequately. The only missing piece is what the returned state values look like, which is a minor omission given the annotations already establish this as a safe read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so host_id and task_id are already documented, giving a baseline of 3. The description adds meaningful semantics on top by telling the agent where task_id comes from, which is the critical piece for constructing a valid call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get state of a single recrawl task by task_id') and immediately scopes it against siblings by naming get-recrawl-queue and add-recrawl-url. An agent can distinguish it from every other get-* tool without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition ('when the user has a task id from add-recrawl-url') plus two explicit when-not-to-use cases with the correct alternative named for each. Nothing is left to inference about routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-search-events-historyA
Read-onlyIdempotent

Get search URL events history (appeared/removed). Use when the user wants the count of appeared and removed search URLs over time. Do not use it for the URLs themselves or the exclusion reason; call get-search-events-samples or get-excluded-pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toNo
host_idYesHost ID
date_fromNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds real behavioral value by disclosing that this tool returns COUNTS (aggregate) rather than the underlying URLs or exclusion reasons, which is the key behavioral distinction from its siblings. It stops short of describing time granularity, formatting, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences, front-loaded with the verb+resource, followed by usage and then the exclusion. Every sentence earns its place with zero redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully conveys the return semantics (appeared/removed counts over time) and routes alternatives, so an agent can call it correctly in principle. The remaining gap is the undocumented date_from/date_to format and semantics, which is the only thing an agent lacks for a correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (host_id documented, date_from/date_to undocumented) and the description does not compensate: it never explains the date range parameters, their format, or their behavior. 'Over time' only weakly implies that date parameters apply, adding almost no semantic meaning beyond what the bare schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get search URL events history') and immediately qualifies the scope with '(appeared/removed)' and 'the count of appeared and removed search URLs over time.' An agent can distinguish this aggregate-history tool from get-search-events-samples (which returns the URLs themselves) without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use ('Use when the user wants the count of appeared and removed search URLs over time') plus an explicit exclusion and routing ('Do not use it for the URLs themselves or the exclusion reason; call get-search-events-samples or get-excluded-pages'). Names the alternative siblings and the condition that selects them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-search-events-samplesA
Read-onlyIdempotent

Get sample URLs for search events (appeared in / removed from search), with the reason each page was dropped (excluded_url_status). This is the only place API v4 exposes per-URL exclusion reasons — get-summary only has the aggregate excluded_pages_count. Note: the API has no server-side event filter, so event_type is applied to the fetched page and offset/limit still paginate the unfiltered stream. Use when the user wants sample URLs that appeared in or left search, including excluded_url_status. Do not use it to walk only dropped pages across a window; call get-excluded-pages. Do not use it for the event counts; call get-search-events-history.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoLimit (default: 10)
offsetNo
host_idYesHost ID
event_typeNoKeep only events of this type (client-side filter; omit to get both)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description still adds non-obvious behavior: there is no server-side event filter, so event_type is applied client-side and offset/limit paginate the unfiltered stream. It also notes this is the only v4 endpoint exposing per-URL exclusion reasons — valuable context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Information-dense and front-loaded with the purpose and the key caveat, then the routing rules. Every sentence carries weight, though the two negative routing sentences plus the API-caveat sentence make it slightly longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, the unique return value, a pagination/filtering caveat, and both alternative tools. With no output schema, the description still tells the agent exactly what it gets back (sample URLs plus exclusion reasons). Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the schema already documents event_type as a client-side filter, but the description goes further by explaining how that filter interacts with pagination (the unfiltered stream is paginated, then filtered). It adds meaning beyond the schema for the parameters that matter most; host_id/limit/offset are self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get sample URLs for search events') and immediately names the distinguishing payload ('excluded_url_status'). It explicitly separates itself from get-summary, get-excluded-pages, and get-search-events-history, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use clause plus two explicit when-not-to-use clauses, each naming the correct alternative tool (get-excluded-pages for dropped-page walks, get-search-events-history for counts). This is textbook routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-sitemapA
Read-onlyIdempotent

Get details for a specific sitemap. Use when the user already has a sitemap id and wants that file details. Do not use it to list files; call get-sitemaps or get-user-sitemaps. Do not use it to upload a sitemap; call add-sitemap.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYesHost ID
sitemap_idYesSitemap ID (URL-encoded)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds no further behavioral context such as permission requirements, error behavior, or what 'details' actually contains, so it does not exceed the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero waste: purpose first, then positive usage condition, then two negative routing rules. Every clause earns its place and routing information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a tiny two-parameter input, the description supplies everything needed for correct selection and routing. It is slightly thin on the host_id requirement and on what the returned details comprise, but no critical calling information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, including the URL-encoded note on sitemap_id, so the schema carries parameter semantics. The description only alludes to sitemap_id ('already has a sitemap id') and never mentions the required host_id, adding no format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get details for a specific sitemap') and explicitly scopes it to the case where the user already has a sitemap id. It distinguishes itself from sibling list/upload tools by name, so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('user already has a sitemap id') plus two when-not-to-use clauses with named alternatives: get-sitemaps/get-user-sitemaps for listing and add-sitemap for uploading. Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-sitemapsA
Read-onlyIdempotent

List all sitemaps for a host. Use when the user wants every sitemap Yandex knows for the host, including ones it discovered. Do not use it for only the files the user uploaded; call get-user-sitemaps. Do not use it to add a file; call add-sitemap.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
host_idYesHost ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds behavioral scope beyond annotations by clarifying that results include 'every sitemap Yandex knows ... including ones it discovered,' which is useful context for interpreting the data. It does not mention pagination, rate limits, or return format, so it is not fully complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero waste. The core purpose is front-loaded, followed by positive usage guidance and then precise exclusions with named alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with rich annotations and no output schema, the description covers purpose, usage, and sibling routing well. The main gap is the undocumented limit parameter, but an agent can still invoke the tool correctly with the required host_id.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: host_id has only a minimal 'Host ID' description, and limit is undocumented. The description implies the host parameter but adds no meaning for limit (e.g., maximum 100, behavior), leaving a required parameter inadequately explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List all sitemaps for a host.' It further distinguishes itself from sibling tools get-user-sitemaps and add-sitemap by explicitly naming them and describing scope including discovered sitemaps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use criteria ('Use when the user wants every sitemap Yandex knows ... including ones it discovered') and explicit when-not-to-use alternatives ('Do not use it for only the files the user uploaded; call get-user-sitemaps. Do not use it to add a file; call add-sitemap.').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-sqi-historyA
Read-onlyIdempotent

Get SQI (Site Quality Index) history over time. Use when the user asks how the Site Quality Index changed over a date range. Do not use it for the single current SQI; call get-summary. Do not use it for indexing counts; call get-indexing-history.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toNoEnd date YYYY-MM-DD
host_idYesHost ID
date_fromNoStart date YYYY-MM-DD

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the time-series/date-range nature of the operation, which is genuinely useful context, but says nothing about pagination, result granularity, or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly-scoped sentences with zero filler; the core purpose is front-loaded and the routing exclusions follow immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, three-parameter history tool with no output schema, the description covers purpose, routing, and date scoping, and annotations carry the safety profile. Only the return shape and pagination behavior are unaddressed, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (host_id, date_from, date_to) are documented in the schema, so the baseline of 3 applies. The description's 'over a date range' hints at the date parameters but adds no format or range semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get SQI (Site Quality Index) history over time') and even expands the acronym. It explicitly distinguishes itself from the two nearest siblings, get-summary and get-indexing-history, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('when the user asks how the Site Quality Index changed over a date range') plus two when-not cases with named alternatives. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-summaryA
Read-onlyIdempotent

Get site summary: SQI, pages count, problems. Use when the user wants the current SQI, page counts, and problem totals for a host. Do not use it for the list of excluded URLs; call get-excluded-pages. Do not use it for SQI over time; call get-sqi-history.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYesHost ID

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds value beyond them by enumerating the payload (SQI, page count, problem totals), which matters because there is no output schema; it does not mention freshness/latency or required permissions, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, then trigger, then two disambiguation rules. Every sentence earns its place and the most important routing information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description supplies both the content of the response and the routing rules against two plausible near-siblings. An agent has everything needed to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter (host_id) at 100% schema description coverage, so the schema does the documentation work. The description adds no scoping or format detail about host_id, which is the expected baseline when coverage is this high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (site summary) and enumerates the returned content: SQI, page count, problems. It also distinguishes itself from get-excluded-pages and get-sqi-history by name, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the trigger condition ('when the user wants the current SQI, page counts, and problem totals for a host') and two named exclusions with the correct alternative tool for each. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-userA
Read-onlyIdempotent

Get current Webmaster user info and user_id. Use when the user needs the Webmaster account id before a call that is not already scoped to a host. Do not use it to list sites; call list-hosts, which also returns the host_id every other tool expects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the behavioral burden is light. The description adds that the call yields the account id used by downstream non-host-scoped tools, which is useful operational context, though it doesn't detail the shape of the returned user object.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose followed by use/avoid conditions. Every sentence carries routing or scoping information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema, and no nesting, the description supplies everything an agent needs: what it returns (user info and user_id), when it is the right call, and which sibling to use instead for host listing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4 with no parameter semantics to explain. The description does not need to bridge any schema gap here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get current Webmaster user info and user_id'), and explicitly distinguishes its scope from the sibling list-hosts. An agent can identify this as the account-identity lookup without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both when to use ('when the user needs the Webmaster account id before a call that is not already scoped to a host') and when not to use ('Do not use it to list sites'), naming the alternative tool list-hosts. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-user-sitemapsA
Read-onlyIdempotent

List user-added sitemaps. Use when the user asks which sitemap files were added by hand. Do not use it for sitemaps Yandex found on its own; call get-sitemaps. Do not use it to add a file; call add-sitemap.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
host_idYesHost ID

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered by structured data. The description adds manual-vs-discovered semantics, which is useful context, but says nothing about pagination, ordering, or how the limit shapes the result for what is potentially a large list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then the trigger, then the exclusions. Every sentence earns its place and none restates the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema and annotations covering the safety profile, the routing information is essentially complete. The only real gap is that limit's meaning and default behavior are undocumented anywhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: host_id is documented merely as 'Host ID' and limit carries only min/max bounds with no explanation of what is being limited. The description mentions no parameters at all, so it does not compensate for the coverage gap on limit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List user-added sitemaps') and immediately scopes it against the two nearest siblings, get-sitemaps and add-sitemap. An agent can distinguish this tool from every other get-* sibling by the 'user-added' qualifier alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger ('when the user asks which sitemap files were added by hand') plus two explicit exclusions that name the correct alternative tool for each case. Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-hostsA
Read-onlyIdempotent

List all hosts (sites) in Webmaster with their host_id — the identifier every other tool requires (format "https:example.com:443"). Take it from here instead of assembling it by hand. Use when the user asks which sites are in Webmaster or needs a host_id for any later call. Do not use it for one site SQI or problems; call get-summary or get-diagnostics after the host_id is known.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine value beyond that: it tells the agent the host_id format and that the value should be taken from this tool rather than assembled by hand, which is a behavioral/usage nuance. It stops short of describing pagination or the full return shape, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and the key output (host_id), then the usage conditions, then the exclusion. Every sentence carries distinct information (what it returns, the identifier format, when to use, when not to use) with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must carry the return-value burden; it names the returned entities and the crucial host_id format, which is largely sufficient. It does not mention pagination or the full field set of each host, leaving a minor gap for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline is 4. The description still adds semantic value by explaining that the returned host_id follows the format "https:example.com:443", which is the critical value an agent must extract and reuse.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all hosts (sites) in Webmaster') and immediately clarifies the key artifact returned: the host_id with its exact format ("https:example.com:443"). An agent can distinguish this from sibling tools like get-host or add-host without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names both trigger conditions ('which sites are in Webmaster' or 'needs a host_id for any later call') and the exclusion ('Do not use it for one site SQI or problems'), routing to get-summary or get-diagnostics instead. This is the full when/when-not/alternative triad.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start-verificationStart host verificationA

Start the Yandex Webmaster ownership check for a host. Put the verification_uin (see verify-host) on the site first: HTML_FILE — file yandex_.html, META_TAG — , DNS — TXT record. The check runs asynchronously: the call returns the current state (usually IN_PROGRESS); poll verify-host for VERIFIED or VERIFICATION_FAILED (reason in fail_info). Use when the verification file, meta tag, or DNS record is already in place and the user wants the ownership check started. Do not use it to read the UIN or the failure reason; call verify-host. Do not use it to add the host; call add-host.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYesHost ID (URL-encoded, e.g. "https:example.com:443")
verification_typeYesVerification method; must be among applicable_verifiers from verify-host

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations, which only say it is non-read-only, non-destructive, non-idempotent and open-world. The description discloses that the check is asynchronous, that the call returns the current state (usually IN_PROGRESS), how to reach a terminal outcome by polling verify-host, where the failure reason lives (fail_info), and the prerequisite that the verification artifact must be placed first.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then prerequisites, then async semantics, then exclusions — a sensible order. Slightly repetitive in the two parallel 'Do not use it to...' sentences, but every sentence carries a distinct fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so: it names the returned state, the terminal states, and the failure field. Combined with the prerequisite ordering and the cross-tool polling loop, an agent has everything needed to call and follow up correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning by spelling out the payload each enum value expects — file `yandex_<uin>.html` for HTML_FILE, the `<meta name="yandex-verification">` tag for META_TAG, a TXT record for DNS — and by tying verification_type to `applicable_verifiers` from verify-host. No extra guidance on host_id formatting beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Start the Yandex Webmaster ownership check for a host') and immediately scopes it against siblings by naming verify-host and add-host as the tools for adjacent tasks. An agent can distinguish this from verify-host, add-host, and delete-host without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('when the verification file, meta tag, or DNS record is already in place and the user wants the ownership check started') plus two explicit when-not clauses with the correct alternative for each. Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify-hostA
Read-onlyIdempotent

Get verification status and available verification methods for a host. Use after add-host to check what verification is needed. Use when the user wants the current verification state, the UIN, or which methods are available. Do not use it to start the check; call start-verification. Do not use it to add the site; call add-host.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYesHost ID (URL-encoded, e.g. "https:example.com:443")

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it discloses what the call returns (verification state, the UIN, and which verification methods are available), which matters since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place, with the core purpose front-loaded and the exclusions following. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only lookup with no output schema, the description covers purpose, trigger conditions, routing to alternatives, and what data is returned. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter (host_id) is fully documented with format guidance in the schema itself. The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get verification status and available verification methods for a host.' It further differentiates itself from the sibling tools add-host and start-verification, so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger context ('Use after add-host', 'Use when the user wants the current verification state, the UIN, or which methods are available') and explicit exclusions routing to alternatives ('Do not use it to start the check; call start-verification. Do not use it to add the site; call add-host'). When/when-not/alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 33 tool updatesv0.1.0
    • First observedadd-host
    • First observedadd-recrawl-url
    • First observedadd-sitemap
    • First observeddelete-host
    • First observedget-broken-internal-links
    • First observedget-broken-internal-links-history
    • First observedget-diagnostics
    • First observedget-excluded-pages
    • First observedget-external-links
    • First observedget-external-links-history
    • First observedget-host
    • First observedget-important-url-history
    • First observedget-important-urls
    • First observedget-indexing-history
    • First observedget-indexing-samples
    • First observedget-insearch-history
    • First observedget-insearch-samples
    • First observedget-popular-queries
    • First observedget-query-history
    • First observedget-recrawl-queue
    • First observedget-recrawl-quota
    • First observedget-recrawl-task
    • First observedget-search-events-history
    • First observedget-search-events-samples
    • First observedget-sitemap
    • First observedget-sitemaps
    • First observedget-sqi-history
    • First observedget-summary
    • First observedget-user
    • First observedget-user-sitemaps
    • First observedlist-hosts
    • First observedstart-verification
    • First observedverify-host

TDQS

A4/5.0

Scored across 33 tools

Disambiguation4/5

Descriptions are unusually explicit with 'Do not use' cross-references, which strongly mitigates confusion. However, the set contains many near-identical history/sample/event tools (e.g., get-indexing-history vs get-insearch-history vs get-search-events-history; get-excluded-pages vs get-search-events-samples) that still require careful reading, so some misselection risk remains.

Naming Consistency5/5

All tool names use consistent kebab-case verb_noun patterns: get-*, add-*, list-*, delete-*, start-*, verify-host. The only minor variation is verify-host vs start-verification, but both are predictable and readable.

Tool Count2/5

With 33 tools, the server exceeds the 25+ heavy threshold. While Yandex Webmaster is a broad domain, the many read-only history/sample variants inflate the surface beyond what most agents need in a single call, making the set feel over-scoped.

Completeness4/5

The surface covers host lifecycle, verification, sitemaps, recrawl, important URLs, indexing/search/events, external links, and broken internal links. Some gaps remain (e.g., sitemap deletion, important-URL mutations), but core workflows are well supported.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    MCP server for managing Yandex Direct advertising, Yandex Metrica analytics, Wordstat keyword research, and Yandex Webmaster SEO tools, with self-configuring OAuth; provides 153 tools for complete ad and search workflows from AI assistants.
    100
    13 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for Yandex Direct, Metrika, Wordstat, and Webmaster APIs, providing 132 tools to manage advertising campaigns, analytics, keyword research, and reporting through any MCP-compatible client.
    58
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for querying Yandex Wordstat via Yandex Cloud Search API. Enables checking phrase frequency, similar queries, regional demand, and seasonality trends.
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for the Yandex Webmaster API, enabling natural-language queries about site indexing, search queries, IKS, diagnostics, sitemaps, and external links, as well as actions like recrawling, from AI assistants such as Claude, Cursor, and Codex.
    20
    93 npm
    MIT