Skip to main content
Glama
artgas1

xmlriver-mcp

by artgas1

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

Related MCP server: yandex-mcp

Demo

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

uvx xmlriver-mcp

Configuration

Claude Desktop

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>"
      }
    }
  }
}

Claude Code

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>"
      }
    }
  }
}

Cursor

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>"
      }
    }
  }
}

Tools

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 + similar queries, or demand dynamics by month/week/day

search_suggestions

Search-box autocomplete from Google or Yandex, 1–50 phrases per call. Surfaces long-tail phrasings that carry no Wordstat frequency at all

google_maps_search

Google Maps places around a coordinate (zoom + coords required). ⚠️ See caveat below

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.

⚠️ 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

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.

Common use cases

  • SEO position trackingyandex_search(query="...", region=213) for own/competitor ranking

  • Keyword researchwordstat_query(query="купить iphone", history_period="monthly") for demand validation + seasonality

  • Featured snippet huntinggoogle_search(additional_blocks="faqsnippet,knowledge_graph,zeroposition") to see what owns the answer box

  • Long-tail discoverysearch_suggestions(phrases=[...]) with a prefix sweep (seed + each letter of the alphabet) pulls phrasings Wordstat never reports

  • Indexation monitoringcheck_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

git 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

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

Available Tools

9 tools
check_url_indexedA
Read-onlyIdempotent

Check if a URL is indexed in Google or Yandex.

Internally uses url:<URL> operator with inindex=1 flag to xmlriver (forces fresh index check, not cache).

Use this for: SEO audits, indexation monitoring, "did Google find my new page?".

Returns: Dict with: - url — checked URL - search_engine - indexed — bool - details — full search results if indexed (with title, snippet, position)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to check indexing for. Full URL with scheme. Example: 'https://example.com/page-slug'.
search_engineNoWhich engine to check. Default 'google'.google
countryNoFor Google: country ID (default 2008=Russia). For Yandex: region ID (default 213=Moscow).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate readOnly and idempotent. The description adds useful behavioral details: internally uses 'url:<URL>' operator with 'inindex=1' flag to force fresh index check, not cache. It also describes the return structure.

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?

The description is concise (6 lines) and well-structured: main purpose first, then technical detail, then use cases, then return format. No unnecessary information.

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?

Given the tool's simplicity, the description covers purpose, usage, internal behavior, and return format. With full schema coverage and output schema available, it provides adequate context. Missing rate limits or prerequisites, but that is acceptable for a light read-only tool.

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 documentation coverage is 100%, so baseline is 3. The description does not add significant parameter semantics beyond the schema; it only implicitly references the parameters in the return description. No extra details on parameter usage or constraints.

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 clearly states the tool checks if a URL is indexed in Google or Yandex. It uses a specific verb ('Check') and resource ('URL'), and distinguishes from sibling search tools like google_search and yandex_search.

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

Usage Guidelines4/5

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

The description provides clear use cases: 'SEO audits, indexation monitoring, 'did Google find my new page?'. It does not explicitly mention when not to use it, but the context is sufficient for proper selection.

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

get_balanceA
Read-onlyIdempotent

Get current XMLRiver account balance in rubles (₽).

Use this to check funds before bulk operations or to monitor spending.

Returns: Dict with balance_rub (float) or isError on failure.

Examples: get_balance() → {"balance_rub": 1234.56}

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly=true, destructive=false, idempotent=true. Description adds return format (dict with balance_rub or isError) without contradicting 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 paragraphs, includes example and return format. Every sentence adds value.

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?

Complete for a simple read tool: annotations cover safety, description covers purpose, return, and usage. Output schema exists though not shown.

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?

No parameters, so schema is complete. Description adds no extra param info, but baseline is 4 per schema coverage being 100% and no params.

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?

Clearly states 'Get current XMLRiver account balance in rubles (₽).' Verb+resource, specific and distinct from sibling tools.

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

Usage Guidelines4/5

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

Provides context 'Use this to check funds before bulk operations or to monitor spending.' but lacks explicit when-not or alternatives.

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

get_costA
Read-onlyIdempotent

Get cost per 1000 requests for a given engine, in rubles (₽).

Use this to estimate spend for a planned bulk operation. Cost depends on current tariff — see get_tariff for the tariff name.

Returns: Dict with engine, cost_per_1k_rub or isError.

Examples: get_cost(engine="google") → {"engine": "google", "cost_per_1k_rub": 25.0}

ParametersJSON Schema
NameRequiredDescriptionDefault
engineYesEngine to check cost for. 'google' = Google SERP parsing, 'yandex' = Yandex SERP (direct), 'yaxml' = Yandex Search API v2 (slightly pricier), 'wordstat' = Wordstat New API.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Adds value beyond annotations by specifying return format (dict with engine, cost_per_1k_rub or isError) and noting dependency on current tariff. No contradictions with annotations (readOnlyHint, etc.).

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?

Concise, front-loaded with purpose, then usage, return, and example. Every sentence is necessary and well-structured.

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 simple tool with one parameter and output schema, the description covers purpose, usage context, return format, and example. Complete for agent invocation.

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?

Input schema already has 100% coverage with descriptions for engine and enum. Description adds examples but doesn't provide additional parameter meaning beyond schema. Baseline 3 maintained.

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?

Description clearly states it gets cost per 1000 requests for a given engine in rubles, with a specific verb and resource. It distinguishes from sibling tools like get_balance, get_tariff, etc.

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

Usage Guidelines4/5

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

Explicitly says 'Use this to estimate spend for a planned bulk operation' and references get_tariff for tariff context. Missing explicit when-not-to-use or alternative exclusions, but still clear.

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

get_tariffA
Read-onlyIdempotent

Get current XMLRiver tariff name.

Tariffs:

  • 'Basic' — pay-as-you-go, no prepay, 25 ₽ per 1k requests

  • 'Pro' — 5000 ₽/mo prepay, 20 ₽ per 1k

  • 'Mega' — 15000 ₽/mo prepay, 15 ₽ per 1k

  • 'Giga' — 50000 ₽/mo prepay, 12 ₽ per 1k

Returns: Dict with tariff (str) or isError.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds specific tariff names, pricing tiers, and return format (dict with tariff or isError), exceeding the behavioral disclosure burden.

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?

Very concise, well-structured with bullet points for tariffs, front-loaded main action, zero waste.

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 0 parameters and output schema present, the description adequately explains the tool's purpose and return value. It provides enough context for correct usage.

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?

No parameters exist, so baseline is 4. The description correctly indicates no input needed.

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 name and description clearly state the verb 'get' and resource 'tariff name'. It distinguishes from sibling tools like get_balance, get_cost, and get_tariff_expire by focusing on the current tariff.

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

Usage Guidelines3/5

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

The description lists the possible tariff names and their costs, which helps interpret the result, but does not provide explicit guidance on when to use this tool vs alternatives (e.g., get_tariff_expire).

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

get_tariff_expireA
Read-onlyIdempotent

Get expiration date for prepay tariff (Pro/Mega/Giga).

Returns 'never' or date for Basic tariff (no expiry).

Returns: Dict with expires_at (str) or isError.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnly and idempotent. The description adds value by specifying return values ('never' or date for Basic tariff) and the response structure (Dict with expires_at or isError). It goes beyond annotations by detailing possible outputs.

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?

The description is extremely concise: two sentences plus a return format line. It is front-loaded with the main purpose and wastes no words.

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 tool with zero parameters, an output schema, and clear annotations, the description provides all needed context: it explains behavior for different tariff types and includes error flag indication, making it fully complete.

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?

No parameters exist, so description doesn't need to add parameter info. The baseline for 0 parameters is 4, and the description appropriately omits parameter details.

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?

Description clearly states 'Get expiration date for prepay tariff' with specific tariff types (Pro/Mega/Giga) and differentiates from Basic tariff. It uniquely identifies the tool's purpose among siblings like get_tariff, get_balance, and get_cost which serve different functions.

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

Usage Guidelines3/5

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

The description implies when to use (for tariff expiry) but does not explicitly state when not to use or name alternatives. It provides clear context but lacks explicit guidance on distinguishing from get_tariff which might also provide tariff details.

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

wordstat_queryA
Read-onlyIdempotent

Get Yandex Wordstat frequency for a keyword phrase.

Use this for: keyword research, demand validation, seasonality analysis, long-tail discovery. Russian/Yandex-speaking markets — this is Yandex's equivalent of Google Keyword Planner.

Do NOT use for: Google volume (Wordstat is Yandex-only — for Google use Google Keyword Planner or third-party tools).

Returns: Dict with: - query (echoed) - total_shows — total monthly impressions (главное число) - device_breakdown — {desktop, phone, tablet} if available - similar_queries — phrases users searched alongside (semantic core seed) - history — list of {date, count} if history_period != 'none' - Or isError: True on failure.

Examples: wordstat_query(query="купить iphone") → {"total_shows": 187234, "similar_queries": [...]}

wordstat_query(query="!купить +iphone +pro", region=213, history_period="monthly")
→ exact-form filtered, Moscow-only, 24-month dynamics
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesKeyword phrase to check frequency for. Yandex operators OK: '!' (exact form), '+' (require word), '"..."' (exact phrase), '-' (negative word). Examples: 'купить iphone', '!купить +iphone', '"новый год 2026"'.
regionNoYandex region ID for geo-targeted frequency. Default None = all of Russia + neighbors. 213=Moscow, 2=SPb, 65=Novosibirsk, etc.
deviceNoDevice type filter. None (default) = all devices combined. Otherwise: 'desktop', 'phone', or 'tablet'.
history_periodNoInclude historical dynamics. 'none' = current frequency only, 'monthly' = last 24 months, 'weekly' = last 12 months by week. Default 'none'.none

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds significant behavioral context: it details the return structure (dict with specific keys), explains error behavior (isError: True on failure), and provides examples. This goes well beyond the annotations, earning a high score.

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?

The description is concise yet comprehensive. It starts with a clear purpose statement, followed by use cases and exclusions, return format, and examples. Every sentence is informative and earned its place. The structure is well-organized and 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?

Given the tool has 4 parameters (all documented) and no formal output schema, the description provides a complete picture: purpose, usage guidelines, parameter details with examples, return structure, and error handling. It fully equips an agent to use the tool 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% with all parameters described. The description adds extra value beyond the schema: it explains Yandex operators for the query parameter, gives specific region ID examples (213=Moscow), and clarifies the meaning of history_period options. This additional context enriches understanding.

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 clearly states the tool's purpose: "Get Yandex Wordstat frequency for a keyword phrase." It specifies the resource (Yandex Wordstat) and the action (get frequency). It distinguishes from siblings like yandex_search and google_search by explicitly noting it is for keyword research and Yandex-specific, thus avoiding confusion.

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?

The description explicitly tells when to use the tool (keyword research, demand validation, seasonality analysis, long-tail discovery) and when not to use it (Google volume, for which it directs to Google Keyword Planner or third-party tools). It also clarifies the market scope (Russian/Yandex-speaking markets).

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

yandex_search_api_v2A
Read-onlyIdempotent

Query Yandex Search API v2 (official) via XMLRiver proxy.

Use this when you need: cleaner structured output, no SERP-feature parsing overhead, documented Yandex Search API semantics. Slightly more expensive than yandex_search (~24 ₽/1k vs 25 ₽/1k on Basic tariff).

Do NOT use for: SERP features (knowledge graph, FAQ, related questions) — those are not in the official API. Use yandex_search instead.

Returns: Parsed search results dict similar to yandex_search but without addresults.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query.
regionNoYandex region ID (lr). Default 213 (Moscow).
pageNoPage number (0-based). Default 0.
group_countNoResults per page (Yandex Search API). Default 10.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive. Description adds cost comparison and return format details, which are useful but not critical behavioral disclosures.

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?

Concise, front-loaded, no wasted words. Structured with clear sections for usage and limitations.

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 output schema exists and annotations are rich, description covers purpose, usage guidelines, and return format sufficiently. All critical information is present.

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?

Input schema covers all 4 parameters with descriptions. Description does not add additional parameter-level meaning beyond schema, so 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?

The description clearly states the tool queries Yandex Search API v2 via XMLRiver proxy, and distinguishes it from sibling yandex_search by noting cleaner structured output and lack of SERP features.

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 says when to use (cleaner output, no SERP parsing) and when not to use (SERP features, directing to yandex_search). Provides clear alternatives.

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. 9 tool updatesv0.1.8
    • First observedcheck_url_indexed
    • First observedget_balance
    • First observedget_cost
    • First observedget_tariff
    • First observedget_tariff_expire
    • First observedgoogle_search
    • First observedwordstat_query
    • First observedyandex_search
    • First observedyandex_search_api_v2

TDQS

A4.5/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: URL indexation check, account management (balance, cost, tariff, tariff expiry), Google SERP parsing, Yandex Wordstat, Yandex SERP parsing, and Yandex Search API. There is no overlap or ambiguity.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern (e.g., get_balance, check_url_indexed, google_search). All are snake_case with clear verbs, making the action predictable. The naming is uniform across the set.

Tool Count5/5

With 9 tools, the scope is well-calibrated: 4 tools cover account and cost management, and 5 cover search engine data access (Google, Yandex, indexation, keyword research). This is a complete yet focused surface for an SEO/SERP analysis tool.

Completeness5/5

The tool set covers all core operations expected from an XMLRiver client: account info (balance, tariff, cost, expiry), Google and Yandex search, URL indexation checking, and keyword frequency via Wordstat. There are no obvious gaps for the stated purpose of SEO and search data retrieval.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    A powerful MCP server that enables parallel Google searching with multiple keywords simultaneously, providing structured results while handling CAPTCHAs and simulating user browsing patterns.
    1
    49 npm
    274
    MIT
  • A
    license
    Not graded
    quality
    D
    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.
    59
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    MCP server that provides 46 tools for managing Yandex Webmaster API v4, enabling site management, sitemaps, indexing, search analytics, and more through natural language.
    46
    14 npm
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    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