io.github.stufently/yandex-wordstat-mcp·Search

Yandex Wordstat MCP

MCP server for Yandex Wordstat API — keyword research for Russian/CIS markets

Stars
18
Version
2.2.0
License
MIT
Review
Passed
Language
JavaScript
Last commit
3h ago
Forks
1
Open issues
1
Registry update
Oct 15, 2026
ai-toolsclaude-codejavascriptkeyword-researchmcpmcp-servermetrikamodel-context-protocolnodejsseowebmasterwordstat

Connect

npm
Terminal
$claude mcp add yandex-wordstat-mcp \  -e WORDSTAT_API_KEY=<wordstat-api-key> \  -e WORDSTAT_FOLDER_ID=<wordstat-folder-id> \  -- npx -y @stufently/[email protected]

Environment variables

  • WORDSTAT_API_KEYrequiredsecret

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

  • WORDSTAT_FOLDER_IDrequired

    Yandex Cloud folder ID for Search API v2

Security review

Review passed

Reviewed 1h ago.

metadata
scanned
packages
1 checked

No findings.

Tools

This server runs on your machine, so its tool list is not fetched before install — the README below describes what it offers.

yandex-wordstat-mcp

MCP server for Yandex Wordstat via Yandex Cloud Search API v2. Research keywords, analyze search volume trends, and explore regional search distribution for Russian and CIS markets.

v2.0: the legacy api.wordstat.yandex.net API was shut down by Yandex in 2026. The server now talks to searchapi.api.cloud.yandex.net/v2/wordstat/* and authenticates with a Yandex Cloud API key instead of an OAuth token. Tool names and parameters are unchanged.

Installation

This package is published as @stufently/yandex-wordstat-mcp; the unscoped name yandex-wordstat-mcp belongs to an unrelated publisher (see the note in the root README). Nothing is on the scope yet, so run it from source:

git clone https://github.com/stufently/yandex-mcp.git
cd yandex-mcp && bun install
node packages/yandex-wordstat-mcp/src/index.mjs

Configuration

Add to your MCP client config:

{
  "mcpServers": {
    "yandex-wordstat": {
      "command": "node",
      "args": ["/path/to/yandex-mcp/packages/yandex-wordstat-mcp/src/index.mjs"],
      "env": {
        "WORDSTAT_API_KEY": "AQVN...",
        "WORDSTAT_FOLDER_ID": "b1g..."
      }
    }
  }
}

Alternatively, put the credentials into ~/.config/yandex-cloud/wordstat.env (used as a fallback when the env vars are not set):

WORDSTAT_API_KEY=AQVN...
WORDSTAT_FOLDER_ID=b1g...

Environment Variables

VariableRequiredDescription
WORDSTAT_API_KEYYesYandex Cloud API key (secret, AQVN...) of a service account
WORDSTAT_FOLDER_IDYesYandex Cloud folder ID (b1g...) used for billing and access checks

Authentication (how to get the key)

  1. Sign in to the Yandex Cloud console and pick (or create) a folder — its ID is visible in the URL: console.yandex.cloud/folders/<folderId>/.... A billing account must be linked to the cloud.
  2. Create a service account in that folder with the search-api.webSearch.user role.
  3. Open the service account → Create new key → API key, scope yc.search-api.execute.
  4. Copy the secret (shown once) into WORDSTAT_API_KEY; the key identifier (ajel...) is only needed to rotate or revoke the key later.

Rate Limiting

The server enforces a client-side rate limit of 10 requests per second using a sliding window. Requests exceeding the limit are automatically queued. Additionally, 429 and 5xx responses trigger automatic retry with exponential backoff.

Tool Reference

get-regions-tree

Get the Yandex Wordstat regions hierarchy tree.

ParameterTypeRequiredDefaultDescription
depthnumberNo3Maximum tree depth (1-5)

Returns a tree of regions with value (region ID), label (name), and children.

get-region-children

Get children of a specific region from the cached tree. Does not make an API call -- works from the cached region tree.

ParameterTypeRequiredDefaultDescription
regionIdnumberYes--Region ID to get children for
depthnumberNo2Maximum subtree depth (1-3)

top-requests

Find popular search queries containing a keyword (last 30 days), plus associated queries.

ParameterTypeRequiredDefaultDescription
phrasestringYes--Keyword or phrase to search for (max 400 chars)
regionsnumber[]No--Region IDs to filter by
devicesenum[]No--Device types: desktop, phone, tablet
limitnumberNo100Max phrases in response (1-2000)

Returns { topRequests: [{ phrase, count }], associations: [{ phrase, count }], totalCount } sorted by search volume.

dynamics

Analyze search volume trends over time for a keyword.

ParameterTypeRequiredDefaultDescription
phrasestringYes--Keyword or phrase (max 400 chars)
periodenumNomonthlyAggregation: daily, weekly, monthly
fromDatestringNoautoStart date (YYYY-MM-DD)
toDatestringNoautoEnd date (YYYY-MM-DD)
regionsnumber[]No--Region IDs
devicesenum[]No--Device types: desktop, phone, tablet

The API enforces window rules that are documented nowhere and are returned as raw gRPC errors when broken (verified against the live API on 2026-07-29):

PeriodRule
dailyfromDate must be within the last 60 days — exactly 60 days back is rejected
weeklyfromDate must be a Monday, toDate a Sunday, and the week must be over
monthlyfromDate must be the 1st of a month, toDate the last day, and the month must be over

Dates you pass are snapped to the nearest valid window instead of being rejected; every shift is listed in adjustments in both the text summary and structuredContent. A range that falls inside a single week or month expands to that whole period. A range that covers only the current, unfinished week or month cannot be served at all — the API rejects it — so the tool says so and names the latest available toDate instead of forwarding a 400.

Default date ranges by period:

  • daily: last 58 days (kept one day inside the limit so a request never expires on a UTC date rollover)
  • weekly: last 52 full weeks, Monday to Sunday
  • monthly: last 12 full months, 1st to end of month

All date math is done in UTC.

Returns an array of { date, count, share } data points.

regions

Get regional distribution of search interest for a keyword.

ParameterTypeRequiredDefaultDescription
phrasestringYes--Keyword or phrase (max 400 chars)
regionsnumber[]No--Region IDs to filter (client-side, includes descendants)
devicesenum[]No--Device types: desktop, phone, tablet
limitnumberNo20Maximum results (1-50)

Returns an array of { regionId, regionName, count, share, affinityIndex } sorted by count. Region names are enriched from the cached region tree.

Caching

The region tree is fetched once on the first call to get-regions-tree, get-region-children, or regions, and cached for the entire server session. A flat lookup map is built for O(1) region name resolution.

License

MIT

From the server's repository — third-party content, read it before running anything it suggests.

More in Search

Listing from the official MCP Registry · repository facts from GitHub, 1h ago.