ru-marketplace-mcp
OCI · GHCR.IO/VLADIMIR-HUMAN/RU-MARKETPLACE-MCP:1.6.0 · SCANNED AUG 22
Read-only MCP servers for Russian marketplaces: prices, stock, ratings, reviews, seller identity
Available components
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 →
Supply Chain Security0
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 1 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability67
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 8330 tokens (~231/item across 36 items; 36 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 Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
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
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 2 categories
Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the ru-marketplace-mcp server?
ru-marketplace-mcp runs locally as a container image, launched with docker run --rm -i ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0
claude mcp add vladimir-human-ru-marketplace-mcp -- docker run --rm -i ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0
{
"mcpServers": {
"vladimir-human-ru-marketplace-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0"
]
}
}
} {
"servers": {
"vladimir-human-ru-marketplace-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0"
]
}
}
} codex mcp add vladimir-human-ru-marketplace-mcp -- docker run --rm -i ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vladimir-human-ru-marketplace-mcp": {
"type": "local",
"command": [
"docker",
"run",
"--rm",
"-i",
"ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0"
],
"enabled": true
}
}
} mcp_servers:
vladimir-human-ru-marketplace-mcp:
command: "docker"
args: ["run", "--rm", "-i", "ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0"] {
"McpServers": {
"vladimir-human-ru-marketplace-mcp": {
"Transport": "stdio",
"Command": "docker",
"Arguments": [
"run",
"--rm",
"-i",
"ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0"
]
}
}
} {
"mcpServers": {
"vladimir-human-ru-marketplace-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0"
]
}
}
} 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.
- 20 Aug 26 38
First indexed and scored.
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 22 Aug 2026 · Analysed oci/ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | No attestation published |
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.
aliexpress_card AliExpress Product Card ~181
Fetch one AliExpress product card, rendered in the operator's Chrome. Review TEXTS are deliberately not exposed: they require navigating the review tab, which x5sec challenges; this tool returns the rating and the order count instead. ## Return Format AliCardResponse: {status, item_id, title, price_rub, old_price_rub, rating, orders_count, url, tier_used, meta}. ## Error Format ToolError: BadRequestError when no item id can be extracted; TransportDownError on x5sec challenges or CDP failures; ParserDriftError when a rendered card has neither title nor price.
| Name | Type | Req | Description |
|---|---|---|---|
| item_id_or_url | string | yes | AliExpress item id (9-16 digits) or aliexpress.ru item URL, e.g. /item/1005010003103368.html |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| item_id | – | – | – |
| old_price_rub | – | – | – |
| orders_count | – | – | – |
| price_rub | – | – | – |
| rating | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| url | – | – | – |
No examples provided.
aliexpress_search AliExpress Search ~113
Search AliExpress, rendered in the operator's Chrome. ## Return Format AliSearchResponse: {status, query, tier_used, count, items[], meta}. price_rub is None when absent — never 0. ## Error Format ToolError: TransportDownError on x5sec challenges or CDP failures (with the manual-check hint inline); ParserDriftError when a rendered page yields zero product tiles.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Search text, e.g. 'умные часы' |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
No examples provided.
avito_card Avito Item Card ~144
Fetch one Avito listing by id or URL. ## Return Format AvitoCardResponse: {status, item_id, title, price_rub, description, location, posted_at, views, images, seller, url, tier_used, meta}. price_rub is None when the ad has no price — never 0. ## Error Format ToolError: BadRequestError when no id can be extracted; NotFoundError on a 404 (deleted or never existed); TransportDownError on blocks; ParserDriftError when the envelope changed.
| Name | Type | Req | Description |
|---|---|---|---|
| item_id_or_url | string | yes | Item id, slug path or full avito.ru URL |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| description | – | – | – |
| images | – | – | – |
| item_id | – | – | – |
| location | – | – | – |
| posted_at | – | – | – |
| price_rub | – | – | – |
| seller | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| url | – | – | – |
| views | – | – | – |
No examples provided.
avito_search Avito Search ~199
Search Avito listings via the internal js/items API. ## Return Format AvitoSearchResponse: {status, query, page, location_id, tier_used, count, total_count, items[], meta}. Items carry item_id, title, price_rub (None when the ad has no price — never 0), url, location, seller fields. ## Error Format ToolError: BadRequestError on malformed arguments; TransportDownError on firewall blocks (with the captcha/proxy guidance inline); ParserDriftError when a reached-200 body no longer parses as the expected envelope.
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | – | – | Optional Avito category id to narrow the search |
| location_id | – | – | Avito location id; default AVITO_LOCATION_ID (637640 = Moscow) |
| page | integer | – | Result page (1-based) |
| query | string | yes | Search text, e.g. 'thinkpad x1 carbon' |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| location_id | – | – | – |
| page | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| total_count | – | – | – |
No examples provided.
avito_seller Avito Seller Profile ~131
Fetch an Avito seller profile — reputation is the review signal here. Classifieds have no per-item review pool; the seller's rating, review count and active-listing count are what a buyer checks. ## Return Format AvitoSellerResponse: {status, seller, active_items, tier_used, meta}. ## Error Format ToolError: BadRequestError on empty input; NotFoundError on 404; TransportDownError on blocks; ParserDriftError on envelope drift.
| Name | Type | Req | Description |
|---|---|---|---|
| seller_id_or_url | string | yes | Seller id or profile URL from a card/search hit |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| active_items | – | – | – |
| seller | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
No examples provided.
citilink_card Citilink Product Card ~136
Fetch one Citilink product card. ## Return Format CitilinkCardResponse: {status, product_id, title, price_rub, old_price_rub, is_available, url, tier_used, meta}. ## Error Format ToolError: BadRequestError when the URL carries no product id; TransportDownError on CDP/Qrator failures; ParserDriftError when a rendered card has neither title nor price.
| Name | Type | Req | Description |
|---|---|---|---|
| product_url | string | yes | citilink.ru product URL containing /product/<slug>/, e.g. /product/noutbuk-lenovo-2169270/ |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| is_available | – | – | – |
| old_price_rub | – | – | – |
| price_rub | – | – | – |
| product_id | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| url | – | – | – |
No examples provided.
citilink_search Citilink Search ~109
Search Citilink, rendered in the operator's Chrome. ## Return Format CitilinkSearchResponse: {status, query, tier_used, count, items[], meta}. price_rub is None when absent — never 0. ## Error Format ToolError: TransportDownError on CDP/Qrator failures; ParserDriftError when a rendered page yields zero product tiles.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Search text, e.g. 'ноутбук lenovo' |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
No examples provided.
compare_prices Compare Prices Across Russian Marketplaces ~405
Price one product across every configured Russian marketplace at once. Queries each marketplace concurrently and returns a single list ranked by price, plus a per-source report of what answered and what did not. This is the tool for "where is X cheapest" — running the per-marketplace search tools one at a time gives the same data far more slowly and without the ranking. Two things to read carefully in the output: - `cheapest` is chosen on everyday prices. Yandex Market's subscriber price appears as `price_with_subscription_rub` and is deliberately excluded from ranking, since it requires a paid Yandex Plus subscription. - `source_outcomes` shows which marketplaces answered. A blocked or timed-out source means the comparison is partial, not that the product is absent there — `complete` tells you which case you are in. Titles are matched loosely: marketplaces name things differently, so scan the results rather than assuming every row is the identical model. ## Return Format CompareResponse: {query, sources_queried, sources_ok, complete, total_offers, cheapest, price_spread_rub, offers, source_outcomes, warnings, server_version}. offers is ranked by everyday price_rub — cheapest first, offers without a rouble price after the ranked ones. warnings carries validation/completeness warnings. ## Error Format On validation failure, raises ToolError with a JSON message describing the error code and whether it is retryable. Individual source failures do NOT raise — they are reported in `source_outcomes`.
| Name | Type | Req | Description |
|---|---|---|---|
| per_source_limit | integer | – | How many offers to take from each marketplace. |
| query | string | yes | What to price, in Russian — e.g. 'стиральная машина узкая' or 'iphone 15 128'. |
| sources | – | – | Restrict to specific marketplaces (wildberries, yandex_market, ozon). Omit to query all. |
| Name | Type | Req | Description |
|---|---|---|---|
| cheapest | – | – | – |
| complete | – | – | – |
| offers | – | – | – |
| price_spread_rub | – | – | – |
| query | – | – | – |
| server_version | – | – | – |
| source_outcomes | – | – | – |
| sources_ok | – | – | – |
| sources_queried | – | – | – |
| total_offers | – | – | – |
| warnings | – | – | – |
No examples provided.
compare_sources List Available Marketplaces ~131
Report which marketplaces this installation can actually query. Call this first when a comparison comes back partial: it distinguishes "the connector isn't installed" from "the marketplace refused us", which need completely different fixes. ## Return Format Plain object: {installed, searchable, not_installed, notes, source_timeout_s, server_version, server_started_at, process_id}. notes explains per-source access quirks (CDP-only sources, currencies, missing text search). ## Error Format Never raises ToolError: pure introspection of which connector packages are installed — nothing here touches the network.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
detmir_card Detsky Mir Product Card ~317
Fetch price, rating, stock and seller for one Detsky Mir product. Covers the kids-and-baby category that the general marketplaces cover unevenly, and distinguishes Detsky Mir's own stock from third-party marketplace sellers. **Region matters most here.** ``store_count`` is the number of physical shops holding the item, and it swings hard by city — one item verified live sat in 152 Moscow stores, 37 in St Petersburg, 2 in Khabarovsk. Pass ``region`` to ask about a specific city; it overrides ``DETMIR_REGION`` for this call only, so one session can compare cities. ## Return Format DetmirCardResponse: {product, region, meta}. product carries product_id, title, article, brand, price_rub (None when absent — never 0), old_price_rub, discount_percent, rating, review_count, questions_count, availability, available_online, available_offline, store_count, is_marketplace, vendor, url, picture. ## Error Format On validation or transport/parse failure, raises ToolError with a JSON message describing the error code and whether it is retryable.
| Name | Type | Req | Description |
|---|---|---|---|
| product_id | integer | yes | Numeric Detsky Mir product id — the digits in /product/index/id/<id>/. |
| region | string | – | ISO region code for prices and offline stock, e.g. 'RU-MOW' or 'RU-SPE'. Defaults to DETMIR_REGION. |
| Name | Type | Req | Description |
|---|---|---|---|
| meta | – | – | – |
| product | – | – | – |
| region | – | – | – |
No examples provided.
detmir_categories Detsky Mir Catalog Categories ~262
Browse the Detsky Mir catalog tree and get the aliases `detmir_category` needs. This is the discovery step: Detsky Mir has **no working text search** (see the module docstring), so the way to find products is to walk the tree and then list a category. Each node carries its `alias` and a `products_count`, so you can see where the inventory actually is before fetching a listing. ## Return Format DetmirCategoriesResponse: {parent, returned, total_available, items, region, meta}. Items carry category_id, alias, title, full_name, level, products_count, parent_id, url; alias is what detmir_category needs to list a category. ## Error Format On validation or transport/parse failure, raises ToolError with a JSON message describing the error code and whether it is retryable.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum categories to return. |
| parent | string | – | 'top' for the 27 top-level sections, or a parent category id to list its children. |
| region | string | – | ISO region code for prices and offline stock, e.g. 'RU-MOW' or 'RU-SPE'. Defaults to DETMIR_REGION. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | – | – | – |
| meta | – | – | – |
| parent | – | – | – |
| region | – | – | – |
| returned | – | – | – |
| total_available | – | – | – |
No examples provided.
detmir_category Detsky Mir Category Listing ~249
List products in a Detsky Mir category, with the total match count. This is the reliable way to enumerate the catalog: unlike text search, it is a real JSON endpoint with proper pagination and an upstream total, so it supports "what's available and how much does it cost" without scraping. ## Return Format DetmirListResponse: {query, mode, total_available, category_title, returned, offset, items, region, meta}. Items carry the same product shape as detmir_card. An empty page is NOT an error — it is reported via meta.warnings. ## Error Format On validation or transport/parse failure, raises ToolError with a JSON message describing the error code and whether it is retryable.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | yes | Category slug from a catalog URL, e.g. 'pups' in /catalog/index/name/pups/. |
| limit | integer | – | Items per page. |
| offset | integer | – | Items to skip, for pagination. |
| region | string | – | ISO region code for prices and offline stock, e.g. 'RU-MOW' or 'RU-SPE'. Defaults to DETMIR_REGION. |
| Name | Type | Req | Description |
|---|---|---|---|
| category_title | – | – | – |
| items | – | – | – |
| meta | – | – | – |
| mode | – | – | – |
| offset | – | – | – |
| query | – | – | – |
| region | – | – | – |
| returned | – | – | – |
| total_available | – | – | – |
No examples provided.
dns_card DNS-Shop Product Card ~131
Fetch one DNS-Shop product card. ## Return Format DnsCardResponse: {status, product_id, title, price_rub, old_price_rub, is_available, url, tier_used, meta}. ## Error Format ToolError: BadRequestError when the URL carries no product id; TransportDownError on CDP/Qrator failures; ParserDriftError when a rendered card has neither title nor price.
| Name | Type | Req | Description |
|---|---|---|---|
| product_url | string | yes | dns-shop.ru product URL containing /product/<id>/, e.g. /product/b7a1667f9b19ed20/ |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| is_available | – | – | – |
| old_price_rub | – | – | – |
| price_rub | – | – | – |
| product_id | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| url | – | – | – |
No examples provided.
dns_search DNS-Shop Search ~104
Search DNS-Shop, rendered in the operator's Chrome. ## Return Format DnsSearchResponse: {status, query, tier_used, count, items[], meta}. price_rub is None when absent — never 0. ## Error Format ToolError: TransportDownError on CDP/Qrator failures; ParserDriftError when a rendered page yields zero product tiles.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Search text, e.g. 'ноутбук lenovo' |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
No examples provided.
lamoda_card Lamoda Product Card ~143
Fetch one Lamoda product card via the anonymous GraphQL endpoint (tier 1). ## Return Format LamodaCardResponse: {status, sku, title, brand, price_rub, old_price_rub, is_available, sizes[], url, tier_used, meta}. Lamoda exposes no ratings. ## Error Format ToolError: BadRequestError when no SKU can be extracted; NotFoundError when the SKU has no product; TransportDownError on HTTP failures; ParserDriftError when the GraphQL envelope changed.
| Name | Type | Req | Description |
|---|---|---|---|
| sku_or_url | string | yes | SKU (MP002XM1RMM3) or lamoda.ru product URL |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| brand | – | – | – |
| is_available | – | – | – |
| old_price_rub | – | – | – |
| price_rub | – | – | – |
| sizes | – | – | – |
| sku | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| url | – | – | – |
No examples provided.
lamoda_search Lamoda Search ~130
Search Lamoda, rendered in the operator's Chrome (discovery is blocked tier 1). ## Return Format LamodaSearchResponse: {status, query, tier_used, count, items[], meta}. Items carry sku, title, brand, price_rub (None when absent — never 0), url. ## Error Format ToolError: TransportDownError on CDP/nav failures; ParserDriftError when a rendered page yields zero SKUs, which means the tile shape moved.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Search text, e.g. 'кроссовки nike' |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
No examples provided.
marketplace_sources Which Marketplaces Are Loaded ~179
List which connectors this unified server actually mounted. ## Why this exists Connectors are imported defensively, so a missing dependency removes a marketplace instead of killing the server. That is the right failure mode, but it is invisible from the client: absent tools look the same as a source that simply found nothing. Call this before concluding a marketplace has no results — if it is in ``skipped``, it was never queried at all. ## Return Format MarketplaceSourcesResponse: {mounted, skipped, mounted_count, skipped_count, server_version}. ``skipped`` maps source name to the import error that removed it, which is usually a missing optional dependency. ## Error Format Never raises ToolError: pure introspection of the mounted connectors — a failed import is recorded in ``skipped`` instead of being raised.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| mounted | – | – | – |
| mounted_count | – | – | – |
| server_version | – | – | – |
| skipped | – | – | – |
| skipped_count | – | – | – |
No examples provided.
megamarket_card Megamarket Product Card ~125
Fetch one Megamarket product card. ## Return Format MegamarketCardResponse: {status, item_id, title, price_rub, old_price_rub, is_available, rating, rating_count, url, tier_used, meta}. ## Error Format ToolError: BadRequestError on unparseable input; NotFoundError on a missing goods id; TransportDownError on ServicePipe refusals; ParserDriftError on envelope drift.
| Name | Type | Req | Description |
|---|---|---|---|
| item_id_or_url | string | yes | Goods id or megamarket.ru product URL |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| is_available | – | – | – |
| item_id | – | – | – |
| old_price_rub | – | – | – |
| price_rub | – | – | – |
| rating | – | – | – |
| rating_count | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| url | – | – | – |
No examples provided.
megamarket_search Megamarket Search ~120
Search the Megamarket catalog via the mobile API, inside the operator's Chrome. ## Return Format MegamarketSearchResponse: {status, query, tier_used, count, total_count, items[], meta}. price_rub is None when absent — never 0. ## Error Format ToolError: TransportDownError on ServicePipe refusals (with the fix inline); ParserDriftError when a reached-200 body no longer parses.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Search text, e.g. 'стиральная машина' |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| total_count | – | – | – |
No examples provided.
mpstats_item MPStats Item Analytics ~417
Fetch per-SKU 30-day sales analytics from MPStats (Ozon or Wildberries). Returns, per SKU: seller/brand identity, current stock and price, a rolling orders-per-day average, aggregated totals over the window, and four per-day graphs (orders, prices, stock count, rubric positions). Graphs are length ``days`` (default 30), oldest-first; a zero cell means "no data for that day", not "the value was zero". Requires the ``MPSTATS_MP_AUTH`` env var (a paid MPStats account JWT cookie). Without it the tool returns an ``auth_missing`` error. ## Return Format MpStatsItemResponse: {place, days, count, items, meta}. Each item carries sku, place, seller, seller_id, brand, stock_now, price_avg_rub, orders_per_day, days_on_stocks, totals {orders, sum, sum_prev} and four per-day graphs (orders, prices, count, rubrics), oldest-first. Missing values are None, never 0; a zero graph cell means "no data for that day". ## Error Format ToolError: BadRequestError on malformed skus or place; AuthMissingError when MPSTATS_MP_AUTH is missing or rejected; RateLimitedError on HTTP 429; TransportDownError on network failures, non-200 responses and HTML blocks; ParserDriftError on a non-JSON or mis-shaped body; NotFoundError when no requested SKU has analytics.
| Name | Type | Req | Description |
|---|---|---|---|
| oz_fbs | boolean | – | Ozon FBS (Fulfilled-by-Seller) mode. Ozon-specific; harmless for wildberries. Default true. |
| place | string | yes | Marketplace: 'ozon' or 'wildberries'. Determines which MPStats dataset the SKUs resolve against. |
| skus | array | yes | 1..100 SKU integers (positive). Per-SKU 30-day sales/price/stock analytics from MPStats. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | – | – | – |
| days | – | – | – |
| items | – | – | – |
| meta | – | – | – |
| place | – | – | – |
No examples provided.
mpstats_warehouses MPStats Warehouse Stock ~303
Fetch per-SKU warehouse stock split from MPStats (Ozon or Wildberries). Returns, per SKU: FBS (seller warehouse) stock count, total FBO (marketplace warehouse) stock count, the raw per-warehouse FBO entries when MPStats populates them, and the upstream ``last_update`` timestamp. Requires the ``MPSTATS_MP_AUTH`` env var (a paid MPStats account JWT cookie). Without it the tool returns an ``auth_missing`` error. ## Return Format MpStatsWarehousesResponse: {place, days, count, items, meta}. Each item carries sku and stocks {fbs, fbo, fbo_warehouses, last_update}. Missing stock counts are None, never 0. ## Error Format ToolError: BadRequestError on malformed skus or place; AuthMissingError when MPSTATS_MP_AUTH is missing or rejected; RateLimitedError on HTTP 429; TransportDownError on network failures, non-200 responses and HTML blocks; ParserDriftError on a non-JSON or mis-shaped body; NotFoundError when no requested SKU has stock data.
| Name | Type | Req | Description |
|---|---|---|---|
| place | string | yes | Marketplace: 'ozon' or 'wildberries'. Determines which MPStats dataset the SKUs resolve against. |
| skus | array | yes | 1..100 SKU integers (positive). Per-SKU warehouse stock split from MPStats. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | – | – | – |
| days | – | – | – |
| items | – | – | – |
| meta | – | – | – |
| place | – | – | – |
No examples provided.
ozon_card Ozon Product Card ~246
Fetch Ozon product card data via composer-api.bx. Tier-1 (curl_cffi) tried first. Falls back to Tier-2 (Chrome CDP at port 9222) when Tier-1 hits Cloudflare 403. Tier-2 requires the operator running Chrome via scripts/start_chrome_cdp.ps1 (Windows) or scripts/start_chrome_cdp.sh (Linux/macOS) first. ## Return Format OzonCardResponse: {status, price, card_price, price_original, is_available, rating_score, rating_count, title, seller, characteristics, url, tier_used, meta} on success. Fields are None when the page does not carry them. ## Error Format Raises ToolError on validation (BadRequestError), transport/block (TransportDownError — including the catch-all for unexpected internal errors), or parser drift (ParserDriftError). No-results is NOT an error — an empty widgetStates payload returns a healthy response with null fields.
| Name | Type | Req | Description |
|---|---|---|---|
| sku_or_path | string | yes | SKU integer-as-string, full Ozon URL, or /product/<digits>/ path. Other paths are rejected (SSRF prevention). |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| card_price | – | – | – |
| characteristics | – | – | – |
| is_available | – | – | – |
| price | – | – | – |
| price_original | – | – | – |
| rating_count | – | – | – |
| rating_score | – | – | – |
| seller | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| url | – | – | – |
No examples provided.
ozon_reviews Ozon Product Reviews ~385
Fetch Ozon product review texts + star distribution via composer-api.bx. Tier-1 (curl_cffi) tried first, Tier-2 (Chrome CDP) fallback — same path as ozon_card. Returns review texts (comment/positive/negative), per-review score, helpfulness votes, author first name, date, plus the overall star distribution and total count. Pages are walked automatically (30/page) until `limit` texts are collected or pages run out, deduplicating by review uuid. Hard cap of 10 pages. ## Return Format OzonReviewsResponse: {status, sort, rating_score, reviews_count, distribution, returned, partial, stop_reason, last_error, requested_limit, reviews, meta} on success. A later-page failure with reviews already collected is a PARTIAL SUCCESS (partial=True, stop_reason set), NOT an error. ## Error Format Raises ToolError on validation (BadRequestError), transport/block (TransportDownError), or parser drift (ParserDriftError) — but ONLY when no reviews have been collected yet. Once at least one page yielded reviews, a later-page failure degrades to a partial-success return.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max review texts to return (1..100). Distribution+total always full. |
| sku_or_path | string | yes | SKU integer-as-string, full Ozon URL, or /product/<digits>/ path. Normalized to /product/<digits>/reviews/ (SSRF-allowlisted). |
| sort | string | – | Review ordering. Aliases: "recent"/"default" -> newest, "best"/"highest" -> highest rated first, "worst"/"lowest"/"complaints" -> LOWEST rated first. Raw API values published_at_desc/score_desc/score… |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| distribution | – | – | – |
| last_error | – | – | – |
| pages_fetched | – | – | – |
| partial | – | – | – |
| rating_score | – | – | – |
| requested_limit | – | – | – |
| returned | – | – | – |
| reviews | – | – | – |
| reviews_count | – | – | – |
| sort | – | – | – |
| status | – | – | – |
| stop_reason | – | – | – |
| tier_used | – | – | – |
| url | – | – | – |
No examples provided.
ozon_search Ozon Catalog Search ~165
Search Ozon catalog. Tier-1 curl_cffi → Tier-2 CDP fallback. Returns sku/title/price/rating per item. Schema parses Nov 2026 `tileGridDesktop-*` widgets with `mainState` atom structure. ## Return Format OzonSearchResponse: {status, query, page, tier_used, count, items, meta} on success. Zero matching items is NOT an error — it returns a healthy response with count=0 and empty items. ## Error Format Raises ToolError on validation (BadRequestError), transport/block (TransportDownError), or parser drift (ParserDriftError).
| Name | Type | Req | Description |
|---|---|---|---|
| page | integer | – | Result page (1..10). |
| query | string | yes | Russian search text. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| page | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
No examples provided.
taobao_card Taobao Item Card ~182
Fetch one Taobao item card. ## Return Format TaobaoCardResponse: {status, item_id, title, price_cny, shop_name, sales, description_images, url, tier_used, meta}. price_cny is None when the page hides it or prices by variant — never 0. When the description-image count drifts to a non-number, description_images degrades to 0 and meta.warnings names the drift — the card itself still answers. ## Error Format ToolError: BadRequestError when no id can be extracted; NotFoundError when the item page reports itself gone; TransportDownError on login walls and CDP failures; ParserDriftError when a rendered card has neither title nor price.
| Name | Type | Req | Description |
|---|---|---|---|
| item_id_or_url | string | yes | Item id or item.taobao.com URL |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| description_images | – | – | – |
| item_id | – | – | – |
| price_cny | – | – | – |
| sales | – | – | – |
| shop_name | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| url | – | – | – |
No examples provided.
taobao_search Taobao Search ~171
Search Taobao listings, rendered in the operator's Chrome. ## Return Format TaobaoSearchResponse: {status, query, page, tier_used, count, items[], meta}. Items carry item_id (string), title, price_cny (None when hidden — never 0), shop_name, sales label, url. ## Error Format ToolError: TransportDownError when Chrome/CDP is unreachable or the page lands on a login wall (log into taobao.com in the scraping profile, then retry); ParserDriftError when a rendered page yields zero items, which means the DOM shape moved.
| Name | Type | Req | Description |
|---|---|---|---|
| page | integer | – | Result page (1-based) |
| query | string | yes | Search text, Chinese or English, e.g. '手机' or 'headphones' |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| page | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
No examples provided.
wb_card WB Product Cards ~267
Fetch product card data from WB v4 API. Returns prices in rubles, brand, supplier, supplier_rating, review_rating, feedbacks count, total_quantity for up to 100 SKUs. ## Return Format WbCardResponse: {dest, count, items, meta}. Items carry nm_id, name, brand, supplier, supplier_id, supplier_rating, review_rating, feedbacks, total_quantity, in_stock, price_rub, price_original_rub. price_rub is None when the SKU has no sellable price — never 0. Unknown SKUs are NOT an error — they simply do not appear in items. ## Error Format ToolError: BadRequestError on malformed nm_ids; RateLimitedError on HTTP 429; TransportDownError on network failures, non-200 responses, Cloudflare HTML pages and unexpected internal errors; ParserDriftError on a non-JSON or mis-shaped body.
| Name | Type | Req | Description |
|---|---|---|---|
| dest | string | – | Region ID. Default -1257786 (Moscow). Required for valid prices/stocks. Other examples: -1257786 Moscow, -1029256 Saint Petersburg. |
| nm_ids | array | yes | 1..100 nmId integers (positive). Batch product cards from WB v4 API. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | – | – | – |
| dest | – | – | – |
| items | – | – | – |
| meta | – | – | – |
No examples provided.
wb_categories WB Catalog Categories ~275
Browse the Wildberries catalog tree. Use this to discover what exists before searching: `wb_search` needs a query string, but a shopper's question is often "what categories of humidifiers are there?". Each node carries WB's own `shard` and `query` selectors, which are the addressing needed to pull a category feed. The live menu is ~800 KB, so responses are always a bounded slice — start at 'top', then expand the branch you care about. ## Return Format WbCategoriesResponse: {root, max_depth, total_returned, truncated, items, host_used, meta}. Nodes carry id, name, url, shard, query, depth, children_count, children; shard+query are the selectors wb_category_products needs to list a category feed. ## Error Format On validation or transport/parse failure, raises ToolError with a JSON message describing the error code and whether it is retryable.
| Name | Type | Req | Description |
|---|---|---|---|
| max_depth | integer | – | How many levels below the root to include. 1 = direct children only. |
| root | string | – | 'top' for the top-level sections, or a category name / URL path / id to expand (e.g. 'Электроника', '/catalog/elektronika', '8126'). |
| Name | Type | Req | Description |
|---|---|---|---|
| host_used | – | – | – |
| items | – | – | – |
| max_depth | – | – | – |
| meta | – | – | – |
| root | – | – | – |
| total_returned | – | – | – |
| truncated | – | – | – |
No examples provided.
wb_category_products WB Category Product Listing ~496
List the products in a catalog category, using the shard and query from wb_categories. This closes the loop `wb_categories` opens. That tool hands back WB's own `shard` and `query` selectors — the address of a category feed — and this is the tool that fetches it. Browsing "what humidifiers exist" no longer requires inventing a search phrase and hoping WB's relevance ranking agrees with you. Items come back in the same shape `wb_search` and `wb_card` return, so a category walk and a text search are directly comparable. **Not every category has a feed.** WB marks those with the shard `blackhole`, and several of its largest sections (smartphones, laptops, TV and audio) are among them: they exist as navigation, not as a listable endpoint. Asking for one raises a clear error naming the alternative rather than returning an empty list, because an empty list here would read as "this category has no products", which is false. ## Return Format WbCategoryProductsResponse: {shard, query, page, sort, dest, count, has_more, items, meta}, with items in the same shape as wb_card. has_more is inferred from a full page — WB reports no total here. ## Error Format ToolError: BadRequestError on malformed selectors or the unlistable 'blackhole' shard; NotFoundError on a 404 (stale shard/query pair); RateLimitedError on HTTP 429; TransportDownError on network failures, non-200 responses, Cloudflare HTML pages and unexpected internal errors; ParserDriftError on a non-JSON or mis-shaped body.
| Name | Type | Req | Description |
|---|---|---|---|
| dest | string | – | WB region id. Defaults to WB_DEFAULT_DEST (Moscow). Prices and stock are region-specific. |
| page | integer | – | Page number. Each page carries up to 100 products. |
| query | string | yes | WB catalog selector from wb_categories, e.g. 'cat=9845' or 'subject=1234'. |
| shard | string | yes | WB catalog shard from wb_categories, e.g. 'electronic58'. The literal 'blackhole' means the category has no listable feed. |
| sort | string | – | Upstream ordering: popular, priceup, pricedown, newly, rate, or benefit. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | – | – | – |
| dest | – | – | – |
| has_more | – | – | – |
| items | – | – | – |
| meta | – | – | – |
| page | – | – | – |
| query | – | – | – |
| shard | – | – | – |
| sort | – | – | – |
No examples provided.
wb_questions WB Buyer Questions by imt_id ~391
Fetch buyer questions and seller answers by imt_id (root_id from wb_root_info). Answers this tool exists for: buyers ask what a listing omits — "does it fit a 60cm opening", "is the cable included", "is this the 10A or the 16A model" — and the seller's reply is often the only public statement of that fact. Reviews describe the experience of owning the product; questions clarify what it actually is. Keyed by imt_id, exactly like ``wb_reviews``: every colour and size variant shares one question pool. Passing an nmId returns an empty pool with no error, so resolve the root id via ``wb_root_info`` first. ## Return Format WbQuestionsResponse: {imt_id, total_available, returned, skip, answered_count, has_more, questions, meta}. Question items carry question_id, text, date, user, answered, answer_text, answer_date, nm_id. An empty pool is NOT an error — it means nobody has asked yet. ## Error Format ToolError: BadRequestError on a bad limit or skip; RateLimitedError on HTTP 429; TransportDownError on network failures, non-200 responses and unexpected internal errors; ParserDriftError when a 200 body loses the count key or the questions shape.
| Name | Type | Req | Description |
|---|---|---|---|
| answered_only | boolean | – | Return only questions the seller has answered. Unanswered questions carry no product information. |
| imt_id | integer | yes | Root ID (imt_id) from wb_root_info. Questions are pooled per imt_id across every variant, NOT by nmId. |
| limit | integer | – | Max questions to return (1..100). Fetched in pages of 30, which is the upstream cap. |
| skip | integer | – | Offset into the question pool, for walking past the first page. |
| Name | Type | Req | Description |
|---|---|---|---|
| answered_count | – | – | – |
| has_more | – | – | – |
| imt_id | – | – | – |
| meta | – | – | – |
| questions | – | – | – |
| returned | – | – | – |
| skip | – | – | – |
| total_available | – | – | – |
No examples provided.
wb_reviews WB Reviews by imt_id ~352
Fetch reviews by imt_id (root_id from wb_root_info). All product variants share one review pool, indexed by imt_id NOT nmId. The WB feedbacks endpoint returns a fixed pool (~1000 most-recent reviews, newest-first) and IGNORES server-side order params (verified Nov 2026), so `sort` is applied CLIENT-SIDE over that pool. To surface complaints, "worst" reorders the returned pool by lowest rating first. ## Return Format WbReviewsResponse: {imt_id, sort, pool_size, feedback_count, valuation, valuation_distribution, feedbacks, host_used, meta}. Review items carry rating, text, pros, cons, user, date. An empty pool is NOT an error — it returns a healthy response with zero feedbacks. ## Error Format ToolError: BadRequestError on a bad limit or sort; ParserDriftError when a 200 body has no feedbacks list; TransportDownError when every review host fails and on unexpected internal errors.
| Name | Type | Req | Description |
|---|---|---|---|
| imt_id | integer | yes | Root ID (imt_id) from wb_root_info. All product variants share one review pool indexed by imt_id, NOT by nmId. |
| limit | integer | – | Max review texts to return (1..100). Counts always full. |
| sort | string | – | "recent"/"newest"/"default" (as returned, newest-first), "best"/"highest" (highest rating first), "worst"/"lowest"/"complaints" (LOWEST rating first — finds downsides). Reorders the ~1000-review pool… |
| Name | Type | Req | Description |
|---|---|---|---|
| feedback_count | – | – | – |
| feedbacks | – | – | – |
| host_used | – | – | – |
| imt_id | – | – | – |
| meta | – | – | – |
| pool_size | – | – | – |
| sort | – | – | – |
| valuation | – | – | – |
| valuation_distribution | – | – | – |
No examples provided.
wb_root_info WB Root Info (imt_id) ~169
Fetch full card metadata from basket CDN. Returns imt_id (root_id) for review pool. All variants of one product share imt_id. Reviews indexed by imt_id, NOT by nmId. ## Return Format WbRootInfoResponse: {imt_id, subj_name, subj_root_name, colors, compositions, options, host_used, meta}. imt_id is the root product id shared by every variant — wb_reviews is indexed by it, not by nmId. ## Error Format On validation or transport/parse failure, raises ToolError with a JSON message describing the error code and whether it is retryable.
| Name | Type | Req | Description |
|---|---|---|---|
| nm_id | integer | yes | nmId (positive integer). The SKU whose basket CDN card.json is fetched for imt_id resolution. |
| Name | Type | Req | Description |
|---|---|---|---|
| colors | – | – | – |
| compositions | – | – | – |
| host_used | – | – | – |
| imt_id | – | – | – |
| meta | – | – | – |
| options | – | – | – |
| subj_name | – | – | – |
| subj_root_name | – | – | – |
No examples provided.
wb_search WB Catalog Search ~261
Search WB catalog by text query. Uses the lightweight `search-goods.wildberries.ru/search` endpoint which returns just product IDs (no PoW protection, very high rate limit). Then enriches via `wb_card` for full details. ## Return Format WbSearchResponse: {query, page, page_size, total_ids, count, items, meta}, with items in the same shape as wb_card. Zero matches — or a page past the end — returns WbNoResultsResponse {status: "no_results", query, page, total_ids} instead. That is NOT an error. ## Error Format ToolError: BadRequestError on a page outside 1..20; RateLimitedError on HTTP 429 from the v9 search endpoint; TransportDownError on unexpected internal errors. Plain transport failures of both search paths degrade to a no_results response rather than an error.
| Name | Type | Req | Description |
|---|---|---|---|
| dest | string | – | Region ID. Default -1257786 (Moscow). Required for valid prices/stocks. |
| page | integer | – | Page number 1..20 (each page returns ~30 IDs from the long list). |
| query | string | yes | Russian text search query for the WB catalog. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | – | – |
No examples provided.
wb_seller WB Seller Legal Info ~231
Look up the registered legal entity behind a WB seller. Answers "who actually ships this?" — the question a marketplace listing is worst at. Returns the registered name, tax ids (INN/KPP/OGRN) and legal address, which is how you tell an official brand store from a reseller trading under a lookalike name, and how you spot several storefronts sharing one entity. Chain from `wb_card`: its `supplier_id` field feeds straight into this tool. ## Return Format WbSellerResponse: {supplier_id, name, full_name, trademark, inn, kpp, ogrn, legal_address, taxpayer_code, foreign_codes, host_used, meta}. foreign_codes carries non-RU registration codes (unp/bin/unn) for EAEU sellers. ## Error Format On validation or transport/parse failure, raises ToolError with a JSON message describing the error code and whether it is retryable.
| Name | Type | Req | Description |
|---|---|---|---|
| supplier_id | integer | yes | WB supplier id (positive integer). Get it from wb_card's supplier_id field. |
| Name | Type | Req | Description |
|---|---|---|---|
| foreign_codes | – | – | – |
| full_name | – | – | – |
| host_used | – | – | – |
| inn | – | – | – |
| kpp | – | – | – |
| legal_address | – | – | – |
| meta | – | – | – |
| name | – | – | – |
| ogrn | – | – | – |
| supplier_id | – | – | – |
| taxpayer_code | – | – | – |
| trademark | – | – | – |
No examples provided.
yandex_card Yandex Market Product Card ~292
Fetch full detail for a Yandex Market product: prices, rating breakdown, reviews. Two things here are hard to get anywhere else. The **star distribution** (`rating_stars`) shows whether a 4.8 average hides a cluster of one-star complaints. And **reviews arrive with the card** in one request, complete with pros, cons and helpfulness votes. Reviews are capped at the ~13 Yandex renders server-side; the remainder load through an API this connector deliberately does not touch. ## Return Format YandexCardResponse: {product_id, sku_id, title, brand, seller, description, image, price_rub, price_with_plus, price_before_discount_rub, discount_percent, currency, offers_count, rating, rating_count, review_count, rating_stars, reviews, url, meta}. price_rub is None when the page has no usable price — never 0. Review items carry author, rating, date, pros, cons, comment, votes_up, votes_down, photos. ## Error Format On validation or transport/parse failure, raises ToolError with a JSON message describing the error code and whether it is retryable.
| Name | Type | Req | Description |
|---|---|---|---|
| include_reviews | boolean | – | Include the server-rendered reviews (first ~13). |
| product_id | string | yes | Numeric Yandex Market product id — take it from yandex_search results. |
| Name | Type | Req | Description |
|---|---|---|---|
| brand | – | – | – |
| currency | – | – | – |
| description | – | – | – |
| discount_percent | – | – | – |
| image | – | – | – |
| meta | – | – | – |
| offers_count | – | – | – |
| price_before_discount_rub | – | – | – |
| price_rub | – | – | – |
| price_with_plus | – | – | – |
| product_id | – | – | – |
| rating | – | – | – |
| rating_count | – | – | – |
| rating_stars | – | – | – |
| review_count | – | – | – |
| reviews | – | – | – |
| seller | – | – | – |
| sku_id | – | – | – |
| title | – | – | – |
| url | – | – | – |
No examples provided.
yandex_search Yandex Market Search ~334
Search Yandex Market and return products with both prices, ratings and sellers. Yandex Market aggregates many sellers per product, which makes it the best single source for "what does this cost right now" across the Russian market — including goods Wildberries and Ozon do not carry. Each result reports `price_rub` (what anyone pays) and `price_with_plus` (requires a Yandex Plus subscription, typically 25-30% lower). Prefer `price_rub` when quoting a price to a person. Note `rating_count` counts star ratings, not written reviews; the written count is available per product via `yandex_card`. ## Return Format YandexSearchResponse: {query, page, page_count, total_available, has_next_page, returned, items, meta}. Items carry product_id, sku_id, title, brand, seller, price_rub (everyday — None when absent, never 0), price_with_plus, price_old_rub, currency, rating, rating_count, in_stock, is_express, url, image. Zero results is NOT an error — it is reported via meta.warnings. ## Error Format On validation or transport/parse failure, raises ToolError with a JSON message describing the error code and whether it is retryable.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum products to return from the page. |
| page | integer | – | Page number, 1-based. |
| query | string | yes | Free-text search query in Russian, e.g. 'iphone 15' or 'стиральная машина узкая'. |
| Name | Type | Req | Description |
|---|---|---|---|
| has_next_page | – | – | – |
| items | – | – | – |
| meta | – | – | – |
| page | – | – | – |
| page_count | – | – | – |
| query | – | – | – |
| returned | – | – | – |
| total_available | – | – | – |
No examples provided.
What is the ru-marketplace-mcp server?
ru-marketplace-mcp is listed in the public MCP registry as io.github.Vladimir-Human/ru-marketplace-mcp. Read-only MCP servers for Russian marketplaces: prices, stock, ratings, reviews, seller identity. This page covers its container image (ghcr.io/vladimir-human/ru-marketplace-mcp:1.6.0).
Is the ru-marketplace-mcp server safe to use?
ru-marketplace-mcp scores 38 out of 100 on VerifyMCP. 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 ru-marketplace-mcp server expose?
ru-marketplace-mcp exposes 36 tools: marketplace_sources, wb_card, wb_root_info, wb_reviews, wb_questions, and 31 more. Their descriptions and schemas cost roughly 8,246 tokens of context every time the server is loaded.
Is the ru-marketplace-mcp server still maintained?
ru-marketplace-mcp is still listed as active in the MCP registry. We last reached this channel on 22 August 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 ru-marketplace-mcp server under?
ru-marketplace-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.