Xmlriver Mcp

io.github.artgas1Published by GitHub account artgas1v0.2.3Updated Oct 24, 2026

Google/Yandex SERP parsing and Yandex Wordstat keyword frequency via XMLRiver XML API

VerifiedSTDIODesktop onlyWeb Search & ScrapingData & Analytics

Overview

AI-generated overview

Local MCP server that lets an assistant query XMLRiver for Google and Yandex search results, Yandex Wordstat keyword data, index checks and account balance.

What you can do
Parse Google and Yandex search results pages with country, region, language, device, page and date filters, plus extra blocks such as ads, FAQ, knowledge graph and AI Overview, and the official Yandex Search API v2 mode via XMLRiver. Retrieve Yandex Wordstat keyword frequency, similar queries and demand dynamics by month, week or day. Pull Google or Yandex search-box autocomplete suggestions, and look up Google Maps places around a coordinate. Check whether a URL is indexed in Google or Yandex. Read XMLRiver account balance, tariff, tariff expiry and cost per 1000 requests.
When to use it
Useful for SEO and keyword research, especially for Russian-speaking markets: tracking Yandex or Google rankings, validating demand with Wordstat, finding long-tail phrases, monitoring indexation, and comparing results across regions before spending on bulk queries.
Requirements
Runs locally as a Python package via uvx (Python 3.10+). Needs an XMLRiver account with a topped-up balance, and the XMLRIVER_USER (numeric ID) and XMLRIVER_KEY (40-character hex key) environment variables set in the MCP client configuration. Network access to the XMLRiver API is required.
Before you install
Every query is billed against a prepaid XMLRiver balance, so bulk operations cost money; check balance and cost first. The README states the XMLRiver API is HTTP-only, not HTTPS, so credentials and queries travel unencrypted; the key can be rotated from the dashboard. The Google Maps search tool is described as unverified against a live response. Tools are described as read-only.

Installation

In SourceWeft

  1. Open Xmlriver Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[xmlriver-mcp logo]

xmlriver-mcp

MCP server for XMLRiver — Google/Yandex SERP parsing and Yandex Wordstat keyword frequency data via XML API.

mcp-name: io.github.artgas1/xmlriver-mcp

[Add to Cursor] [Add to VS Code] [Add to Claude Desktop]

[PyPI] [Downloads] [License: MIT] [Python 3.10+]

What it does

Gives Claude / Cursor / Windsurf direct access to:

  • Google SERP parsing (organic, ads, FAQ, knowledge graph, AI Overview) for any country / region / device
  • Yandex SERP parsing (Russian-speaking markets — primary use case)
  • Yandex Wordstat keyword frequency, history, similar queries (Yandex's keyword volume tool)
  • Indexing check — is this URL in Google/Yandex index?
  • Account ops — balance, tariff, cost per 1k requests

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).

Demo

[xmlriver-mcp wordstat demo in Claude]

Claude queries wordstat_query and parses real frequency data from Yandex. Same flow works for google_search, yandex_search, indexing checks, and account ops.

Quickstart

bash
uvx xmlriver-mcp

Configuration

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{  "mcpServers": {    "xmlriver": {      "command": "uvx",      "args": ["xmlriver-mcp"],      "env": {        "XMLRIVER_USER": "<your_numeric_user_id>",        "XMLRIVER_KEY": "<your_40_char_hex_key>"      }    }  }}

Claude Code

Add to project .mcp.json:

json
{  "mcpServers": {    "xmlriver": {      "command": "uvx",      "args": ["xmlriver-mcp"],      "env": {        "XMLRIVER_USER": "<your_numeric_user_id>",        "XMLRIVER_KEY": "<your_40_char_hex_key>"      }    }  }}

Cursor

Edit ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):

json
{  "mcpServers": {    "xmlriver": {      "command": "uvx",      "args": ["xmlriver-mcp"],      "env": {        "XMLRIVER_USER": "<your_numeric_user_id>",        "XMLRIVER_KEY": "<your_40_char_hex_key>"      }    }  }}

Tools

ToolWhat it does
google_searchParse Google SERP for a query — country, language, device, page, date filter, extra blocks (ads, FAQ, knowledge graph, AI Overview)
yandex_searchParse Yandex SERP — region, language, device, page, date filter, extra blocks
yandex_search_api_v2Yandex Search API v2 (official) via XMLRiver — cleaner structured output
wordstat_queryYandex Wordstat keyword frequency + similar queries, or demand dynamics by month/week/day
search_suggestionsSearch-box autocomplete from Google or Yandex, 1–50 phrases per call. Surfaces long-tail phrasings that carry no Wordstat frequency at all
google_maps_searchGoogle Maps places around a coordinate (zoom + coords required). ⚠️ See caveat below
check_url_indexedCheck if URL is indexed in Google or Yandex
get_balanceCurrent XMLRiver balance in rubles
get_tariffCurrent XMLRiver tariff name (Basic / Pro / Mega / Giga)
get_tariff_expireTariff expiration date (for prepay tariffs)
get_costCost per 1000 requests for a given engine (google / yandex / yaxml / wordstat)

All tools are read-only (annotated with readOnlyHint: true). No destructive operations.

⚠️ google_maps_search is unverified against a live response. Every setab=maps request answered code 500 while it was written (2026-08-04), including a deliberately invalid one that should have returned code 108 — plain Google and Yandex searches worked in the same minutes, so the mode appears unavailable service-side. The request shape and response parsing follow the documentation and are covered by unit tests; both still need a live check.

Deliberately not wrapped: raw=page (returns the full HTML page — bypasses parsing and returns megabytes into the model's context) and the deferred-response mode (delayed / req_id) — an MCP call is synchronous, so a request id the caller must poll for has nowhere useful to go.

Authentication

  1. Register at https://xmlriver.com
  2. Top up balance (minimum ~100 ₽ to start)
  3. Get your user (numeric ID) and key (40-char hex) from the dashboard
  4. Set XMLRIVER_USER and XMLRIVER_KEY env vars in your MCP client config

Security note: XMLRiver API is HTTP-only (not HTTPS). The key is rotatable from the dashboard if compromised.

Pricing context

TariffSetupGoogle / Yandex / WordstatYandex Search API v2
BasicPay-as-you-go25 ₽ / 1k25 ₽ / 1k
Pro5000 ₽/mo20 ₽ / 1k24 ₽ / 1k
Mega15000 ₽/mo15 ₽ / 1k23 ₽ / 1k
Giga50000 ₽/mo12 ₽ / 1k22 ₽ / 1k

Use get_balance and get_cost to monitor spend before bulk operations.

Common use cases

  • SEO position tracking — yandex_search(query="...", region=213) for own/competitor ranking
  • Keyword research — wordstat_query(query="купить iphone", history_period="monthly") for demand validation + seasonality
  • Featured snippet hunting — google_search(additional_blocks="faqsnippet,knowledge_graph,zeroposition") to see what owns the answer box
  • Long-tail discovery — search_suggestions(phrases=[...]) with a prefix sweep (seed + each letter of the alphabet) pulls phrasings Wordstat never reports
  • Indexation monitoring — check_url_indexed(url="https://your-site.com/new-page") after publishing
  • Cross-region comparison — same query, different region/country for Yandex/Google to see geographic variance

Local development

bash
git clone https://github.com/artgas1/xmlriver-mcpcd xmlriver-mcpuv 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 — interactiveXMLRIVER_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

Architecture

  • Stack: Python 3.10+ / FastMCP / httpx / tenacity / pydantic
  • Transport: stdio (default)
  • No external SDK dependency — direct REST via httpx + custom XML parser
  • Retry strategy: 3 attempts with exponential backoff on network errors (not on HTTP 4xx)
  • Logging: stderr only (stdio protocol requires stdout for JSON-RPC)

License

MIT

Contributing

PRs welcome. Open an issue first for substantial changes.

Acknowledgements

Source: README.md at commit cf86481

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

2
  1. v0.2.3LatestSep 23, 2026
  2. v0.2.0Sep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts