Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.artgas1/xmlriver-mcp

PYPI · XMLRIVER-MCP

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

Available components

−18 this week 64 Trust /100

Last scanned (2 hours ago)

Scores higher than 60% of PyPI servers

Category Marketing and SEO

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 23 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Build provenance not yet verified. View diagnostics → Unverified
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 42 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability62
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3014 tokens (~274/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management77
  • Stability observed for 23 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 11 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 −18
    • Malware scan: pass → unverified ▼ security
    • Provenance: fail → unverified ▼ security
    • Stability: pass → 0.77 functional
  • 4 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 3 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 30 Oct 26 0
    • Stability: 0.97 → pass security
    • Security disclosure: unverified → fail ▼ functional
  • 29 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
    • Security disclosure: fail → unverified ▼ functional
    • Stability: pass → 0.97 functional
  • 23 Oct 26 0
    • Stability: 0.97 → pass security
  • 22 Oct 26 0
    • Stability: pass → 0.97 functional
  • 18 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/xmlriver-mcp@0.2.3

Provenance Inconclusive

We could not complete the check, so nothing is claimed either way. This is a gap on our side, not a finding about the package.

Result Inconclusive
Ecosystem pypi
Reason Attestation not fetched

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 23 packages
Packages resolved 23
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 11 exposed · ~2,941 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
check_url_indexed ~255

Check if a URL is indexed in Google or Yandex. Sends the bare URL as the query with `inindex=1` (forces a fresh index check, not cache). It does NOT use the `url:` search operator. ⚠️ Do not reconstruct this call by hand as `url:<URL>` together with `inindex=1` — that combination returns "no results" even for pages that are definitely indexed (verified against https://ya.ru on 2026-09-04), so it reports everything as not indexed. Two combinations work and agree: the bare URL with `inindex=1` (what this tool does) or the `url:` operator without `inindex`. Use this for: SEO audits, indexation monitoring, "did Google find my new page?".

NameTypeReqDescription
countryinteger–For Google: country ID (default 2008=Russia). For Yandex: region ID (default 213=Moscow).
search_enginestring–Which engine to check. Default 'google'.
urlstringyesURL to check indexing for. Full URL with scheme. Example: 'https://example.com/page-slug'.

Structured output declared, but exposes no named fields.

No examples provided.

get_balance ~34

Get current XMLRiver account balance in rubles (₽). Use this to check funds before bulk operations or to monitor spending.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

get_cost ~117

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

get_tariff ~109

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

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

get_tariff_expire ~38

Get expiration date for prepay tariff (Pro/Mega/Giga). Returns 'never' or date for Basic tariff (no expiry).

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

google_maps_search ~216

Search Google Maps for places around a point. Use this for: local competitor mapping, presence checks in a city, pulling a list of businesses by category around a coordinate. Do NOT use for: organic web results (use `google_search`), or for a place you can name exactly — a plain web search answers that in one request.

NameTypeReqDescription
coordsstringyesMap centre as 'latitude,longitude' — e.g. '55.75581,37.61764' for Moscow. Required by the API together with zoom.
countinteger–Places to return, 5–50. The service clamps anything above 50.
languagestring–Interface language code, e.g. 'ru' or 'en'. Default 'ru'.
querystringyesWhat to look for on the map, e.g. 'кофейня' or 'car repair'.
zoominteger–Map zoom, 1–15. Required by the API together with coords.

Structured output declared, but exposes no named fields.

No examples provided.

google_search ~719

Parse Google search results page (SERP) for a given query and locale. Use this for: SEO research (own/competitor ranking), keyword discovery, SERP feature analysis (featured snippets, knowledge graph, FAQ), competitive intel. Do NOT use for: live page content fetching (use a dedicated scraper for that), Google Ads keyword planner data (use Yandex Wordstat via `wordstat_query` for RU).

NameTypeReqDescription
additional_blocks––Comma-separated extra blocks (XMLRiver `additional`). Ads: 'topads,bottomads' (Google takes no y_ prefix) — returned as `top_ads` / `bottom_ads`. Other values: faqsnippet, localresultsplace, rq, rs,…
ai_overviewboolean–Parse Google's AI Overview block (slower, costs extra). Default False.
countryinteger–Country ID for Google location. Default 2008 (Russia). Common values: 2008=RU, 2840=US, 2826=UK, 2276=DE, 2250=FR, 2724=ES, 2484=MX. Full list: https://xmlriver.com/apidoc/country/
date_filter––Date filter (Google `tbs` param). Examples: 'qdr:h' (last hour), 'qdr:d' (24h), 'qdr:w' (week), 'qdr:m' (month), 'qdr:y' (year), or custom 'cdr:1,cd_min:1/1/2024,cd_max:6/1/2024'.
devicestring–Device emulation. Default 'desktop'.
domaininteger–Google domain ID. Default 10 (google.com). Common: 10=google.com, 11=google.co.uk, 53=google.com.tr, 84=google.ru. Full list: https://xmlriver.com/apidoc/domain/
highlightsboolean–Wrap query words matched in title/snippet in <hlword> tags.
languagestring–Interface language code (Google `lr` param). Examples: 'ru' (Russian), 'en' (English), 'de' (German), 'es' (Spanish). Default 'ru'.
location––Optional precise location ID (Google `loc` param). Overrides country/region with city-level precision. Full list: https://xmlriver.com/apidoc/loc/
mobile_os––OS to emulate when device='mobile'. Ignored otherwise.
no_autocorrectboolean–Search the query verbatim, without Google's spelling correction (nfpr=1). Use when checking how a misspelling actually ranks.
pageinteger–Page number (1-based). Default 1.
querystringyesSearch query. Plain text or with Google operators (site:, inurl:, etc). Example: 'купить iphone 15' or 'site:wikipedia.org openai'.
show_similarboolean–Show near-duplicate results that Google hides by default. False (default) keeps Google's own behaviour; True sends filter=0.

Structured output declared, but exposes no named fields.

No examples provided.

search_suggestions ~276

Collect search-box suggestions (autocomplete) for a batch of phrases. Use this for: keyword research beyond Wordstat — suggestions surface live long-tail phrasings, including ones with no Wordstat frequency at all; they are what people actually type. Pair it with a prefix sweep (append each letter of the alphabet to a seed) to pull the tail systematically. Do NOT use for: frequency data (suggestions carry no volume — feed them to `wordstat_query` afterwards), or for SERP contents (use `google_search` / `yandex_search`).

NameTypeReqDescription
domain––Search domain. Yandex takes a string ('ru', 'com', 'ua', 'by', 'kz', 'com.tr'); Google takes its numeric domain id as a string. Omit for the default.
enginestring–Which search box to read suggestions from. Default 'google'.
lr––Language/region. Google: language code such as 'ru'. Yandex: numeric region id such as '213' (Moscow). Omit for the default.
phrasesarrayyesPhrases to autocomplete, 1–50 per call. BILLED PER PHRASE — 50 phrases in one call costs 50 requests, so batch deliberately rather than maximally.

Structured output declared, but exposes no named fields.

No examples provided.

wordstat_query ~456

Get Yandex Wordstat frequency, or demand dynamics over time, for a 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). Two mutually exclusive modes, selected by `history_period`: - ``none`` (default) — `total_shows`, `containing_phrases`, `similar_queries` - anything else — `total_shows` plus `history`; **no phrases**, because the upstream API does not return them in this mode

NameTypeReqDescription
device––Device type filter. None (default) = all devices combined. Otherwise: 'desktop', 'phone', or 'tablet'.
end––History mode only. Window end, ISO 'YYYY-MM-DD'. Snapped to the period boundary and clamped to the last COMPLETE period — the current month/week and today are never returned.
history_periodstring–Switch to demand-dynamics mode. 'none' (default) returns frequency plus related phrases. Any other value returns frequency plus a time series and NO phrases — the API modes are mutually exclusive. 'm…
querystringyesKeyword phrase to check frequency for. Yandex operators OK: '!' (exact form), '+' (require word), '"..."' (exact phrase), '-' (negative word). Examples: 'купить iphone', '!купить +iphone', '"новый го…
region––Yandex region ID for geo-targeted frequency. Default None = all of Russia + neighbors. 213=Moscow, 2=SPb, 65=Novosibirsk, etc.
start––History mode only. Window start, ISO 'YYYY-MM-DD'. Snapped to the period boundary (1st of month / Monday). Default: 24 months, 12 weeks or 30 days back depending on history_period.

Structured output declared, but exposes no named fields.

No examples provided.

yandex_search ~542

Parse Yandex search results page (SERP) for a given query and region. Use this for: Russian SEO research (own/competitor ranking in Yandex), regional keyword analysis, SERP feature analysis (FAQ, knowledge graph), competitive intel for Russian-speaking markets. Do NOT use for: keyword frequency data — use `wordstat_query` instead. Do NOT use for: structured JSON output — use `yandex_search_api_v2` instead (official Yandex Search API proxy, cleaner JSON).

NameTypeReqDescription
additional_blocks––Comma-separated extra blocks (XMLRiver `additional`). Ads: 'y_topads,y_bottomads,y_rightads' — returned as `top_ads`, `bottom_ads`, `right_ads` plus `advcount`; use the y_ spelling, plain 'topads' dr…
devicestring–Device emulation. Default 'desktop'.
domainstring–Yandex domain. Default 'ru'.
filter_duplicatesboolean–Filter near-duplicate results. Default False (Yandex default).
highlightsboolean–Wrap query words matched in title/snippet in <hlword> tags.
languagestring–Interface language. Default 'ru'.
mobile_os––OS to emulate when device='mobile'. Ignored otherwise.
pageinteger–Page number (0-based for Yandex). Default 0.
querystringyesSearch query. Plain text or with Yandex operators (site:, inurl:, host:, etc). Example: 'купить квартиру москва' or 'site:habr.com nextjs'.
regioninteger–Yandex region ID (lr param). Default 213 (Moscow). Common: 213=Moscow, 2=SPb, 65=Novosibirsk, 54=Yekaterinburg, 47=NN, 10174=Samara, 11119=Krasnodar, 39=Rostov, 51=Kazan. Full list: https://yandex.ru…
within––Date filter (Yandex `within` param). Values: '77' (24h), '1' (2 weeks), '2' (1 month), or 'YYYYMMDD..YYYYMMDD' custom range.

Structured output declared, but exposes no named fields.

No examples provided.

yandex_search_api_v2 ~179

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.

NameTypeReqDescription
group_countinteger–Results per page (Yandex Search API). Default 10.
pageinteger–Page number (0-based). Default 0.
querystringyesSearch query.
regioninteger–Yandex region ID (lr). Default 213 (Moscow).

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the io.github.artgas1/xmlriver-mcp server?

io.github.artgas1/xmlriver-mcp runs locally as a PyPI package, launched with uvx xmlriver-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · xmlriver-mcp

# add to Claude Code
claude mcp add artgas1-xmlriver-mcp -- uvx xmlriver-mcp
Common questions

What is the io.github.artgas1/xmlriver-mcp server?

io.github.artgas1/xmlriver-mcp is listed in the public MCP registry as io.github.artgas1/xmlriver-mcp. Google/Yandex SERP parsing and Yandex Wordstat keyword frequency via XMLRiver XML API. This page covers its PyPI package (xmlriver-mcp).

Is the io.github.artgas1/xmlriver-mcp server safe to use?

io.github.artgas1/xmlriver-mcp scores 64 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.artgas1/xmlriver-mcp server expose?

io.github.artgas1/xmlriver-mcp exposes 11 tools: get_balance, get_tariff, get_tariff_expire, get_cost, google_search, and 6 more. Their descriptions and schemas cost roughly 2,941 tokens of context every time the server is loaded.

Is the io.github.artgas1/xmlriver-mcp server still maintained?

io.github.artgas1/xmlriver-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.artgas1/xmlriver-mcp server under?

io.github.artgas1/xmlriver-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.