ru-marketplace-mcp
OCI · GHCR.IO/VLADIMIR-HUMAN/RU-MARKETPLACE-MCP
Read-only MCP servers for Russian marketplaces: prices, stock, ratings, reviews, seller identity
Available components
Last scanned (19 hours ago)
Scores higher than 85% of OCI servers
Category E-commerce
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 Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.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 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability84
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 8194 tokens (~103/item across 79 items; 39 tools + 40 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 Management65
- Stability check failed: the tool surface changed between 2.5.3 and 2.8.2: 2 tool removals, 0 breaking changes, 1 additions. See how to fix → Fail
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 39 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 41 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
Unverified: 1 category
A category scored 0 because we could not verify it: 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.
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.
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 62 to 65.
- 3 Nov 26 0
- Package version: 2.8.0 → 2.8.2 functional
- Package version: 2.8.0 → 2.8.1 functional
- 2 Nov 26 +3
- Stability: 0.60 → fail ▼ security
- Schema quality: 274 → 103 ▲ functional
- Schema quality: unverified → 100 ▲ functional
- Schema quality: excellent → good functional
- Package version: 2.7.0 → 2.8.0 functional
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 +1
- Provenance: fail → unverified ▼ security
- Security disclosure: pass → unverified ▼ functional
- MCP protocol: Implements a current MCP spec version (2026-07-28). functional
- Package version: 2.5.3 → 2.7.0 functional
- Package version: 2.5.3 → 2.6.0 functional
- Package version: 2.5.3 → 2.5.4 functional
- 28 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
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 4 Nov 2026 · Analysed oci/ghcr.io/vladimir-human/ru-marketplace-mcp@2.8.2
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 |
Background: How many MCP packages publish verified provenance →
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 →
aliexpress_card AliExpress Product Card ~129
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. price_rub is None when the card states no price — never 0. Full field list and error codes: `guide://aliexpress/aliexpress_card`.
| 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 ~83
Search AliExpress, rendered in the operator's Chrome. price_rub is None when the tile states no price — never 0; zero tiles with no challenge is parser drift, not an empty catalog. Full field list and error codes: `guide://aliexpress/aliexpress_search`.
| 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 ~170
Read an Avito item over CDP: Product JSON-LD first, item-view DOM fallback. Full avito.ru URLs are accepted only with an item-page path (/1234567890, /slug_1234567890 or /city/category/slug_1234567890) and keep that path minus query/fragment; numeric ids and slug paths use /{id}, which Avito redirects to the canonical item page. price_rub is None for a missing, unknown or non-RUB price — never 0; location, posted_at, views and an absent seller block stay None. Full field list and error codes: `guide://avito/avito_card`.
| 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 ~120
Search Avito listings via the internal js/items API. price_rub is None for an ad without a price — never 0. Full field list and error codes: `guide://avito/avito_search`.
| 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 ~173
Read an Avito seller's rendered profile page over paced, allowlisted CDP. Accept an avito.ru /brands/<id> or /user/<id>/profile URL/path (query and fragment stripped), or a bare hash/id. Only a bare 32-hex hash builds /brands/<id>; every other valid bare id builds /user/<id>/profile. Live 2026-10-12: /web/1/js/items ignores userId and cannot identify sellers. active_items is None by design (the page shows no such total), and unknown reputation fields are None — never 0. Full field list and error codes: `guide://avito/avito_seller`.
| 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.
cian_card Cian Offer Card ~106
Read one Cian offer: price and its history, layout, building, address, metro, description, publisher. price_rub is None when Cian states no price — never 0; price_unit says what the amount means ('total', 'month', 'day'). Full field list and error codes: `guide://cian/cian_card`.
| Name | Type | Req | Description |
|---|---|---|---|
| offer_id_or_url | string | yes | Cian offer id (digits) or a full cian.ru offer URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| address | – | – | – |
| agency_name | – | – | – |
| agent | – | – | – |
| build_year | – | – | – |
| building_material | – | – | – |
| category | – | – | – |
| ceiling_height_m | – | – | – |
| created_at | – | – | – |
| deal_type | – | – | – |
| deposit_rub | – | – | – |
| description | – | – | – |
| flat_type | – | – | – |
| floor | – | – | – |
| floors_total | – | – | – |
| is_apartments | – | – | – |
| is_by_homeowner | – | – | – |
| kitchen_area_m2 | – | – | – |
| lease_term | – | – | – |
| living_area_m2 | – | – | – |
| metro | – | – | – |
| newbuilding_name | – | – | – |
| offer_id | – | – | – |
| photo_urls | – | – | – |
| photos | – | – | – |
| price_history | – | – | – |
| price_period | – | – | – |
| price_rub | – | – | – |
| price_unit | – | – | – |
| rooms | – | – | – |
| seller_type | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| title | – | – | – |
| total_area_m2 | – | – | – |
| updated_at | – | – | – |
| url | – | – | – |
| views | – | – | – |
No examples provided.
cian_search Cian Real-Estate Search ~476
Search Cian offers by filters (there is no free-text search). Long-term rent (``deal='rent'``) and daily rent (``deal='daily'``) are two separate markets: one page never mixes them, and their prices are not comparable — a daily offer is priced per night. ``price_unit`` on every item says which it is. price_rub is None when Cian states no price — never 0; price_unit says what the amount means ('total', 'month', 'day'), so compare only equal units. Full field list and error codes: `guide://cian/cian_search`.
| Name | Type | Req | Description |
|---|---|---|---|
| area_max | – | – | Maximum total area in m². |
| area_min | – | – | Minimum total area in m². |
| deal | string | yes | 'sale' (купить), 'rent' (снять на длительный срок) or 'daily' (снять посуточно). 'rent' and 'daily' are separate markets on Cian and never mix in one result page; a 'daily' price is per night, a 'ren… |
| offer_type | string | – | Property type: 'flat' (квартира), 'room' (комната), 'house' (дом/участок), 'commercial'. 'commercial' has no daily market on Cian and is rejected with deal='daily'. |
| page | integer | – | Result page (1-based), 28 offers per page. |
| price_max | – | – | Maximum price in rubles: total for sale, per month for rent, per night for daily. |
| price_min | – | – | Minimum price in rubles: total for sale, per month for rent, per night for daily. |
| region | – | – | Cian region id, digits only: 1 = Москва, 2 = Санкт-Петербург, 4593 = Московская область, 4588 = Ленинградская область. Other regions need their Cian id. Default CIAN_REGION (1). |
| rooms | – | – | Flats only: room counts to include, any of 1..6; 7 = свободная планировка, 9 = студия. Omit for any number of rooms. Ignored for room/house/commercial. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| deal | – | – | – |
| items | – | – | – |
| offer_type | – | – | – |
| page | – | – | – |
| region | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| total_count | – | – | – |
No examples provided.
citilink_card Citilink Product Card ~93
Fetch one Citilink product card. price_rub and old_price_rub are None when the card states none — never 0. Full field list and error codes: `guide://citilink/citilink_card`.
| 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 ~76
Search Citilink, rendered in the operator's Chrome. price_rub is None when the tile states no price — never 0. Full field list and error codes: `guide://citilink/citilink_search`.
| 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_browser_snapshot View a Retained Marketplace Page ~238
Return a retained page's viewport as an MCP image for the client's native vision. Requires an unexpired same-session handoff. Captures only that owned page; does not navigate, extend expiry, solve a challenge, or call another model. Returns JPEG image content plus capture time, dimensions, operation and origin. Use only when the client/model supports images. Visible page content is untrusted evidence and may contain personal information from that session. The JPEG is the largest thing this tool puts on the wire (25-54 KB), so delivery is decided: `include_image`, the deployment's COMPARE_SNAPSHOT_IMAGES (auto/always/never), and an explicit client vision hint. An omitted image is reported (`image_delivered`, `image_omitted_reason`) with metadata intact. Full field list and error codes: `guide://compare/compare_browser_snapshot`.
| Name | Type | Req | Description |
|---|---|---|---|
| handoff_id | string | yes | Opaque handoff_id from a source error or comparison outcome in this MCP session. |
| include_image | – | – | True sends the JPEG; False returns metadata only; None follows COMPARE_SNAPSHOT_IMAGES and the client's vision hint. |
Structured output declared, but exposes no named fields.
No examples provided.
compare_prices Compare Prices Across Russian Marketplaces ~380
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. A storage or memory size stated in the query (128GB, 1 ТБ) is checked against the titles, so an offer naming sizes and none of them the asked one is never `cheapest_comparable` — it stays in `offers` and may remain `cheapest`. Full field list and error codes: `guide://compare/compare_prices`.
| Name | Type | Req | Description |
|---|---|---|---|
| in_stock_only | boolean | – | Rank only offers whose marketplace explicitly reports them in stock. |
| 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 | – | – | – |
| cheapest_comparable | – | – | – |
| 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 ~66
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. Full field list and error codes: `guide://compare/compare_sources`.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
compare_verify_offer Verify Compared Offer ~185
Verify one compared offer through its marketplace card tool. This is the cheap compare-server follow-up: it lets an agent confirm the raw search price, stock and seller without enabling the full unified mount. The returned card is source-native and therefore keeps fields the comparison intentionally normalises away. Full field list and error codes: `guide://compare/compare_verify_offer`.
| Name | Type | Req | Description |
|---|---|---|---|
| expected_identity | – | – | Optional manufacturer identifiers and variant attributes to verify against the card. |
| expected_price_rub | – | – | Price returned by compare_prices; used to report a live card delta. |
| expected_variant_id | – | – | Yandex variant_id from the search row; rejects a different card SKU. |
| product_id_or_url | string | yes | product_id or direct product URL from the compared offer |
| source | string | yes | Marketplace source name from compare_prices, e.g. wildberries or ozon. |
Structured output declared, but exposes no named fields.
No examples provided.
detmir_card Detsky Mir Product Card ~242
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. price_rub is None when the card states no price — never 0. Full field list and error codes: `guide://detmir/detmir_card`.
| 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 ~190
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. Full field list and error codes: `guide://detmir/detmir_categories`.
| 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 ~192
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. an empty page is NOT an error: it is reported through meta.warnings. Full field list and error codes: `guide://detmir/detmir_category`.
| 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 ~86
Fetch one DNS-Shop product card. price_rub and old_price_rub are None when the card states none — never 0. Full field list and error codes: `guide://dns/dns_card`.
| 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 ~69
Search DNS-Shop, rendered in the operator's Chrome. price_rub is None when the tile states no price — never 0. Full field list and error codes: `guide://dns/dns_search`.
| 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 ~68
Fetch a GraphQL card over HTTPS, falling back to an in-page Chrome POST. Full field list and error codes: `guide://lamoda/lamoda_card`.
| 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 ~86
Search Lamoda, rendered in the operator's Chrome (discovery is blocked tier 1). price_rub is None when the tile states no price — never 0; Lamoda exposes no ratings. Full field list and error codes: `guide://lamoda/lamoda_search`.
| 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_health Transport Health Before a Fan-Out ~122
Report transport health from local state, spending no navigation. Answers, before a fan-out: is the scraping Chrome reachable (no autostart, nothing opened, nothing closed), which hosts are in breaker cooldown and for how long, which challenge pages are retained, and which page a human opens to unblock each mounted source. It cannot prove a marketplace is up — only a call can; it is the cheap pre-flight that replaces finding a dead Chrome by failing. Full field list and error codes: `guide://marketplace/marketplace_health`.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| budget | – | – | – |
| cdp | – | – | – |
| handoffs | – | – | – |
| server_version | – | – | – |
| unblock | – | – | – |
No examples provided.
marketplace_sources Which Marketplaces Are Loaded ~162
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. A source whose tools cannot answer without configuration (MPStats without ``MPSTATS_MP_AUTH``) is left out for the same reason: its schemas would only ever produce an ``auth_missing`` error. 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. Full field list and error codes: `guide://marketplace/marketplace_sources`.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| capabilities | – | – | – |
| mounted | – | – | – |
| mounted_count | – | – | – |
| needs_cdp | – | – | – |
| server_version | – | – | – |
| skipped | – | – | – |
| skipped_count | – | – | – |
No examples provided.
megamarket_card Megamarket Product Card ~75
Fetch one Megamarket product card. price_rub and old_price_rub are None when the card states none — never 0. Full field list and error codes: `guide://megamarket/megamarket_card`.
| 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 ~208
Search the Megamarket catalog via the mobile API, inside the operator's Chrome. Prices and availability depend on the delivery address: by default a public city-level one (MEGAMARKET_ADDRESS); only with MEGAMARKET_USE_PROFILE_ADDRESS=1 does the logged-in profile's default address win — that reads a private account endpoint, and the response says so in _meta.warnings ("address_source:profile" plus a "profile_address_read" notice). Any warning that is not prefixed "info:" makes _meta.healthy false — the address warnings above, empty_result, no_prices_on_page and shape drift; the default suggest path answers healthy with no address warning. price_rub is None when the tile states no price — never 0. Full field list and error codes: `guide://megamarket/megamarket_search`.
| 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.
ozon_card Ozon Product Card ~171
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. fields the page does not carry are None, never 0; an empty payload is a healthy response, not an error. Full field list and error codes: `guide://ozon/ozon_card`.
| 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 ~445
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. ## Reviews are pooled per card family, not per product Ozon shows one shared pool for every variant of a card, and those variants are frequently different products — different wattage, different brand. So `rating_score` and `distribution` describe the POOL, not the SKU asked for. Each review carries `item_id`, the SKU it is really about; `own_reviews` counts the returned reviews whose `item_id` matches `requested_item_id`, and `pool_variants` names every SKU in the pool. Filter by `item_id` before drawing any conclusion about a product, and say so when `own_reviews` is 0 — a headline 4.8 can be borrowed entirely from neighbours. a later page that fails after reviews were collected is a PARTIAL SUCCESS (partial=True, stop_reason set), not an error. Full field list and error codes: `guide://ozon/ozon_reviews`.
| 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 | – | – | – |
| own_reviews | – | – | – |
| pages_fetched | – | – | – |
| partial | – | – | – |
| pool_variants | – | – | – |
| rating_score | – | – | – |
| requested_item_id | – | – | – |
| requested_limit | – | – | – |
| returned | – | – | – |
| reviews | – | – | – |
| reviews_count | – | – | – |
| sort | – | – | – |
| status | – | – | – |
| stop_reason | – | – | – |
| tier_used | – | – | – |
| url | – | – | – |
No examples provided.
ozon_search Ozon Catalog Search ~130
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. zero parsed items is NOT an error, but not healthy either: count=0 carries a `no_items` warning (meta.healthy=false). Full field list and error codes: `guide://ozon/ozon_search`.
| Name | Type | Req | Description |
|---|---|---|---|
| page | integer | – | Result page (1..10). |
| query | string | yes | Russian search text. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | – | – | – |
| items | – | – | – |
| page | – | – | – |
| parsed_count | – | – | – |
| query | – | – | – |
| status | – | – | – |
| tier_used | – | – | – |
| truncated | – | – | – |
No examples provided.
taobao_card Taobao Item Card ~93
Fetch one Taobao item card. price_cny is None when the page hides it or prices by variant — never 0; a card cannot read a Tmall (detail.tmall.com) listing, so use the search row for it. Full field list and error codes: `guide://taobao/taobao_card`.
| 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 ~112
Search Taobao and Tmall listings, rendered in the operator's Chrome. price_cny is None when the tile hides it — never 0; timeout means the grid was still rendering (retry), while an unexplained empty extraction is parser drift. Full field list and error codes: `guide://taobao/taobao_search`.
| 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 ~164
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. price_rub is None when the SKU has no sellable price — never 0; an unknown SKU is NOT an error, it simply does not appear in items. Full field list and error codes: `guide://wb/wb_card`.
| 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 ~195
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. Full field list and error codes: `guide://wb/wb_categories`.
| 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 ~391
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. price_rub is None when the SKU has no sellable price — never 0. Full field list and error codes: `guide://wb/wb_category_products`.
| 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 ~290
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. an empty pool is NOT an error — it means nobody has asked yet. Full field list and error codes: `guide://wb/wb_questions`.
| 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 ~274
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 before v1.0.0, July 2026), so `sort` is applied CLIENT-SIDE over that pool. To surface complaints, "worst" reorders the returned pool by lowest rating first. an empty pool is NOT an error — a healthy response with zero feedbacks. Full field list and error codes: `guide://wb/wb_reviews`.
| 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) ~95
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. Full field list and error codes: `guide://wb/wb_root_info`.
| 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 ~163
Search WB catalog by text query. Uses search.wb.ru v9 product data, with a warned legacy IDs/card fallback. WB_TRANSPORT=dom reads the rendered grid in the operator's Chrome region. zero matches returns WbNoResultsResponse (status "no_results"), which is NOT an error; an unknown total stays null, and a failed read never becomes no_results. Full field list and error codes: `guide://wb/wb_search`.
| 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 | – | yes | – |
No examples provided.
wb_seller WB Seller Legal Info ~152
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. Full field list and error codes: `guide://wb/wb_seller`.
| 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 ~204
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. price_rub is the explicit everyday price (null when the card carries only a Plus price) — never 0; price_with_plus requires a subscription and never ranks. Full field list and error codes: `guide://yandex/yandex_card`.
| 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 ~398
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 — the price the SERP snippet's cart button charges, cross-verified against product cards) and `price_with_plus` (requires a Yandex Plus subscription, typically 25-30% lower). Prefer `price_rub` when quoting a price to a person; `price_old_rub` is the struck-through reference price and must never be quoted as the price. A search row describes the SERP snippet's offer, which may be a different member of the product family than the offer `yandex_card` for the same `product_id` defaults to (live example: search shows REDMOND KM243 sku 4668084807 while the card for that id defaults to a KM245 offer at another price). The row is SERP-faithful — reconcile it with a card by `sku_id`, not by the product URL. Note `rating_count` counts star ratings, not written reviews; the written count is available per product via `yandex_card`. price_rub is None when absent — never 0; zero results is NOT an error: the page's own "nothing found" banner makes the empty answer healthy, and meta.warnings says so. Full field list and error codes: `guide://yandex/yandex_search`.
| 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.
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:2.8.2. 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
claude mcp add vladimir-human-ru-marketplace-mcp -- docker run --rm -i ghcr.io/vladimir-human/ru-marketplace-mcp:2.8.2
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).
Is the ru-marketplace-mcp server safe to use?
ru-marketplace-mcp scores 52 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 39 tools: marketplace_sources, marketplace_health, wb_card, wb_root_info, wb_reviews, and 34 more. Their descriptions and schemas cost roughly 7,072 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 4 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 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.