Yandex
FreeNot checkedMCP servers for Yandex APIs — Search, Wordstat, Webmaster, Metrika, Direct. 94 tools, Claude Code plugin included.
About
MCP servers for Yandex APIs — Search, Wordstat, Webmaster, Metrika, Direct. 94 tools, Claude Code plugin included.
README
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-mcpand 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). Nevernpxan unscoped name with your Yandex tokens in the environment: that hands your credentials to unrelated code. Always type the@stufently/prefix.
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) |
Status. v2.2.0 is tagged, and the npm upload is a separate manual step. If
npm view @stufently/yandex-webmaster-mcp versionstill answersE404, the packages are not on the registry yet: use a .mcpb bundle, the plugin, or a clone until it prints a version. Every block below then works unchanged once you swap thenpxcommand fornode— see From source.
Wordstat, Webmaster, Metrika and Direct start without their variables and fail only on the
first tool call. Search refuses to start without YANDEX_SEARCH_API_KEY and
YANDEX_FOLDER_ID, so a client shows it as failed until both are set.
Append a version (@stufently/[email protected]) 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).
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
Cursor
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.
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:visitsbyym:s:trafficSourceandym:s:deviceCategoryfor 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 bidset_*tools) refuse unless the call passesconfirm: true;add_*,archive_*/unarchive_*,suspend_*/resume_*andmoderate_adshave an inverse tool and run straight away. Bids are expressed in micros (×10⁶). SetYANDEX_DIRECT_SANDBOX=truewhile 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
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
.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:
- Code passes
bun run lintandbun run testwith no errors. - All tools return both
content(human-readable) andstructuredContent(raw API data). - The
contenttext must not contradictstructuredContent— 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. - API requests use
fetchWithRetrywith exponential backoff for 429/5xx errors. - Dates are validated with strict calendar checking (no silent overflow) in UTC.
- Tokens are never printed to stdout in full.
License
MIT
Installing Yandex
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/stufently/yandex-mcpFAQ
Is Yandex MCP free?
Yes, Yandex MCP is free — one-click install via Unyly at no cost.
Does Yandex need an API key?
No, Yandex runs without API keys or environment variables.
Is Yandex hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Yandex in Claude Desktop, Claude Code or Cursor?
Open Yandex on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Unyly Deploy
Deploy sites and MCP servers to Unyly straight from your AI agent
by UnylyAmap Maps Mcp Server
MCP server for using the AMap Maps API
by duxiaohuiPayMCP
Lightweight payments layer for MCP servers: turn tools into paid endpoints with a two-line decorator. [PyPI](https://pypi.org/project/paymcp/) · [npm](https://w
by blustAITemplate MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectSupabase
Database, auth and storage
by SupabaseEverything
Reference / test server with prompts, resources, and tools.
Git
Tools to read, search, and manipulate Git repositories.
Compare Yandex with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
