Connects Claude to XMLRiver's API for parsing Google and Yandex search results plus Yandex Wordstat keyword frequency data. You get eight tools: SERP parsing for both search engines with full control over region, device, and result blocks (ads, FAQ, knowledge graph, AI Overview), Wordstat queries for volume and seasonality, indexation checks, and account balance lookups. Built for Russian SEO research where Yandex matters, but handles Google globally. Pay as you go starting around 25 rubles per 1,000 requests. The first MCP for XMLRiver, filling a gap if you need programmatic access to Yandex data that isn't easily available elsewhere.
xmlriver-mcpMCP server for XMLRiver — Google/Yandex SERP parsing and Yandex Wordstat keyword frequency data via XML API.
mcp-name: io.github.artgas1/xmlriver-mcp
Gives Claude / Cursor / Windsurf direct access to:
First MCP for XMLRiver — fills a gap for Russian SEO research and Yandex-aware analysis. Pay-as-you-go (~25 ₽ / 1000 requests on Basic tariff).
Claude queries wordstat_query and parses real frequency data from Yandex. Same flow works for google_search, yandex_search, indexing checks, and account ops.
uvx xmlriver-mcp
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"xmlriver": {
"command": "uvx",
"args": ["xmlriver-mcp"],
"env": {
"XMLRIVER_USER": "<your_numeric_user_id>",
"XMLRIVER_KEY": "<your_40_char_hex_key>"
}
}
}
}
Add to project .mcp.json:
{
"mcpServers": {
"xmlriver": {
"command": "uvx",
"args": ["xmlriver-mcp"],
"env": {
"XMLRIVER_USER": "<your_numeric_user_id>",
"XMLRIVER_KEY": "<your_40_char_hex_key>"
}
}
}
}
Edit ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"xmlriver": {
"command": "uvx",
"args": ["xmlriver-mcp"],
"env": {
"XMLRIVER_USER": "<your_numeric_user_id>",
"XMLRIVER_KEY": "<your_40_char_hex_key>"
}
}
}
}
| Tool | What it does |
|---|---|
google_search | Parse Google SERP for a query — country, language, device, page, date filter, extra blocks (ads, FAQ, knowledge graph, AI Overview) |
yandex_search | Parse Yandex SERP — region, language, device, page, date filter, extra blocks |
yandex_search_api_v2 | Yandex Search API v2 (official) via XMLRiver — cleaner structured output |
wordstat_query | Yandex Wordstat keyword frequency, device breakdown, history, similar queries |
check_url_indexed | Check if URL is indexed in Google or Yandex |
get_balance | Current XMLRiver balance in rubles |
get_tariff | Current XMLRiver tariff name (Basic / Pro / Mega / Giga) |
get_tariff_expire | Tariff expiration date (for prepay tariffs) |
get_cost | Cost per 1000 requests for a given engine (google / yandex / yaxml / wordstat) |
All tools are read-only (annotated with readOnlyHint: true). No destructive operations.
user (numeric ID) and key (40-char hex) from the dashboardXMLRIVER_USER and XMLRIVER_KEY env vars in your MCP client configSecurity note: XMLRiver API is HTTP-only (not HTTPS). The key is rotatable from the dashboard if compromised.
| Tariff | Setup | Google / Yandex / Wordstat | Yandex Search API v2 |
|---|---|---|---|
| Basic | Pay-as-you-go | 25 ₽ / 1k | 25 ₽ / 1k |
| Pro | 5000 ₽/mo | 20 ₽ / 1k | 24 ₽ / 1k |
| Mega | 15000 ₽/mo | 15 ₽ / 1k | 23 ₽ / 1k |
| Giga | 50000 ₽/mo | 12 ₽ / 1k | 22 ₽ / 1k |
Use get_balance and get_cost to monitor spend before bulk operations.
yandex_search(query="...", region=213) for own/competitor rankingwordstat_query(query="купить iphone", history_period="monthly") for demand validation + seasonalitygoogle_search(additional_blocks="faqsnippet,knowledge_graph,zeroposition") to see what owns the answer boxcheck_url_indexed(url="https://your-site.com/new-page") after publishingregion/country for Yandex/Google to see geographic variancegit clone https://github.com/artgas1/xmlriver-mcp
cd xmlriver-mcp
uv sync --all-extras
# Run unit tests (no API key needed)
uv run pytest tests/unit -v
# Run integration tests (requires XMLRIVER_USER / XMLRIVER_KEY)
XMLRIVER_USER=... XMLRIVER_KEY=... uv run pytest tests/integration -v -m integration
# MCP Inspector — interactive
XMLRIVER_USER=... XMLRIVER_KEY=... npx @modelcontextprotocol/inspector uv run python -m xmlriver_mcp.server
# MCP Inspector — CLI smoke test (list tools)
npx @modelcontextprotocol/inspector --cli "uv run python -m xmlriver_mcp.server" --method tools/list
PRs welcome. Open an issue first for substantial changes.
com.mcparmory/google-search
io.github.pipeworx-io/brave-search
marcopesani/mcp-server-serper
brave/brave-search-mcp-server
com.mcparmory/google-search-console
acamolese/google-search-console-mcp