Skip to main content
Glama
SZhukovWork

yandex-market-mcp

by SZhukovWork

yandex-market-mcp

English · Русский

An MCP server that gives LLM agents live, honestly-labelled data from Yandex Market: search with real pages, the site's sort orders and price windows; seller cards with the three prices kept apart; all sellers' offers of a product; reviews at the right level; buyers' questions; seller details with the legal entity.

Buyer side: reads the public storefront pages, no Yandex account needed. Looking for your seller cabinet (the official Partner API)? That is a different tool, e.g. dontsovcmc/mcp-server-yandex-market-seller.

Why another Yandex Market server

Market's pages are full of numbers that look like one thing and are another. Scrapers that take the big number on the page return data a buyer never pays. This server is built around not doing that:

Market trap

What this server does

The big green price on tiles, cards and in schema.org data is the price with the Yandex Pay card; the plain price is visible only in the «Детали цены» popup

price_rub = without the card (from the site's own price-details popup, cross-checked with the cart price), price_with_pay_card_rub = with the card, price_before_discount_rub = crossed-out. A missing plain price is null with a reason — the Pay price is never substituted

«Скидка 41%» is counted from the Pay-card price

discount_percent_vs_pay_price (the site's number) next to discount_percent_without_card

The search price filter and price sorting work on the Pay-card price

Every answer says so (price_filter.basis, sort_basis)

The rating on a card belongs to the seller's card, which can pool several different products (one seller's card pools seven Fiskars axes, 745 ratings)

rating_of_this_card with pools_other_products, checked against the SKUs of the reviews shown on the card; get_reviews(scope="variant") returns only this product's reviews

«Отзывы и оценки у всех продавцов» is a model group that merges different products (JBL Tune 520BT + 720BT + 770NC)

model_group_rating with an explicit scope; every model review says which product it is about

Page 1 of "popular" is almost entirely ads

sponsored on every tile, sponsored_on_page, optional filtering; the instructions steer depth to price sorting and windows

One product from several sellers = several tiles; model_id merges different products

Tiles deduplicated by offer id; same_sku_several_offers groups sellers of one SKU; the instructions say never to dedupe by model id

Promo codes and «−200 ₽ с доставкой по клику» look like price cuts

conditional_offers with threshold, code and end date — never subtracted; a promo that exists in the data but is not shown on the card is not offered

Cross-border offers, markdown («Уценка»), «Версия: для других стран», «Оригинал»

cross_border with the site's duty rule (order above 200 € or 31 kg), markdown with the seller's condition text, version_on_card, and «Оригинал» explained as "the seller provided documents"

Market picks the city from the IP; lr and yandex_gid are ignored, choosing an address needs a login

No fake city parameter: every answer echoes the region from Market's own page, and a loud note appears if it is not the expected one (VPN)

«6.9K оценок», «72K»

Numbers with approximate: true (exact counts are used where the page has them)

Every normal page contains an empty CaptchaService widget; real captchas and "empty frames" (a page with no data) do happen

Captchas are recognised by URL and SmartCaptcha markers only; empty frames and foreign pages are retried once, then reported as errors, never as data

Every response carries fetched_at (UTC) and city.

Related MCP server: wildberries-mcp

Tools

Tool

What it returns

search_products(query, page, sort, price_min, price_max, include_sponsored)

Page 1 = 8 tiles, later pages 16; sort popular (default) / price_asc / price_desc / rating; total_found, page_count, has_more, positions. Per item: offer / card / model / SKU ids, title, URL, three prices and discounts, seller and business_id, sponsored, rating of the seller's card with count and low_evidence, badges, signals («Уценка», «Из-за рубежа»), stock, delivery dates

get_product(product, include_specs, include_description, include_seller_legal)

One seller's card (product = card id or /card/ URL; specs on, description and legal entity off by default): three prices + conditional_offers + split flag; seller (rating, exact ratings count, orders, years on Market, status; legal entity on request); delivery options with dates and prices for the IP city; rating of the card with stars and the pooling check; «Все N предложений от X»; badges with their meaning; cross-border / markdown / version flags; stock; characteristics; description

get_offers(model_id, sku_id, sort)

All sellers' offers of one product as tiles (sort price_asc by default, also popular / price_desc / rating / delivery) and the labelled model-group rating

get_reviews(product, scope, sort, page)

10 per page; scope card (default) / variant / model; sort helpful (default) / newest / best / worst. Date (ISO; «3 января», «Вчера» resolved), stars, pros, cons, comment, votes, photo count, the product each review is about

get_questions(product, page)

10 per page; questions with the answers shown on the site, exact dates, by_seller

get_seller(business_id)

Rating, exact ratings count and star split, orders, years on Market, status; legal entity (name, INN, OGRN, address, cross-border flag)

compare_products(products)

Up to 10 cards side by side: three prices, card rating with the pooling flag, seller, fastest delivery, «все предложения от»

Author names, user ids and order numbers never appear in answers; names in sellers' greetings («Здравствуйте, Анна!», «Анна, добрый день!»), e-mails and phone numbers in texts are masked.

Requirements

Measured on 2026-09-25 (Linux, Python 3.13, a Russian home IP):

Python

≥ 3.10, with uv (or pip)

Browser

Not needed. Plain HTTP with a Chrome TLS fingerprint (curl_cffi) gets the same pages a browser does

Display

Not needed

Docker

Not needed

Disk

≈ 85 MB for the environment (curl_cffi 38 MB, the rest is the MCP SDK and pydantic)

Memory

Peak RSS of the server process 110–113 MB during a full run of all tools (two runs; pages are 1.3–2.6 MB of HTML)

Cold start

0.4–0.5 s until the MCP client sees the tools (0.7 s via uvx with a warm uv cache); no warm-up requests

Request time

A page answers in 0.6–1.2 s; requests are spaced 4–5 s apart, so a call takes ≈ 1 s when idle, ≈ 5 s back-to-back; get_product with the legal entity 14–16 s (3 requests); compare_products ≈ 5 s per card

Network

A Russian home or residential IP. Market maps the city from it; datacenter IPs abroad have been reported to get a captcha at once

Install

Claude Code:

claude mcp add yandex-market -- uvx --from git+https://github.com/SZhukovWork/yandex-market-mcp yandex-market-mcp

Any MCP client (claude_desktop_config.json, .mcp.json, …):

{
  "mcpServers": {
    "yandex-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/SZhukovWork/yandex-market-mcp", "yandex-market-mcp"]
    }
  }
}

From a checkout: uv venv && uv pip install -e . && .venv/bin/yandex-market-mcp.

Configuration (environment variables)

Variable

Default

Meaning

YM_EXPECTED_REGION

54 (Екатеринбург)

Region id you expect Market to assign to your IP (213 Москва, 2 Санкт-Петербург). If the page says otherwise, answers carry a WARNING note — usually a VPN. It does not change the city: nothing can, without logging in

YM_MIN_INTERVAL

4.0

Seconds between requests (never below 3). The IP is usually shared with your own browsing

YM_CAPTCHA_COOLDOWN

1800

After a captcha the server does not query the site for this many seconds, also across restarts

YM_RATE_LIMIT_COOLDOWN

600

The same pause after HTTP 403 / 429 persisted through one retry

YM_PROXY

—

Proxy URL, e.g. http://user:pass@host:3128 (the city then follows the proxy's IP)

YM_CACHE_DIR

~/.cache/yandex-market-mcp (honours XDG_CACHE_HOME)

Where the cookies (session.json, 0600; directory 0700) and the pause marker live

yandex-market-mcp status shows whether a pause is active; yandex-market-mcp unblock clears it (for example after you solved the captcha in your own browser).

What the numbers mean

  • price_rub — the price without the Yandex Pay card for an anonymous buyer in the reported city. Use it for comparisons and the landed price. price_with_pay_card_rub applies only when paying with the Pay card. price_before_discount_rub is the crossed-out «Обычная цена» and can be inflated (Fiskars X21 was seen at «79 567 → 33 915» while honest sellers ask about 9 000).

  • conditional_offers — promo codes and offers with conditions (minimum order, delivery mode, shop subscribers). They are listed, never subtracted.

  • rating_of_this_card — the seller's card; pools_other_products: true means the reviews shown on the card are partly about other products of the seller. model_group_rating — all sellers of a Market "model", which can merge different products. There is no separate rating of one variant on Market; its reviews are available with get_reviews(scope="variant"). low_evidence = fewer than 10 ratings.

  • Delivery — dates and prices for the IP city without an address, as the card shows them; «Доставка Маркета» options are often 0 ₽, sellers' couriers can cost more. A missing price means unknown.

  • stock_left — units the offer has according to the page.

  • all_offers.from_pay_card_price_rub — «Все N предложений от X»: X is the lowest price with the Pay card.

Limitations

  • City = the IP's city. Market ignores lr / yandex_gid; choosing an address requires a login. Prices and delivery for another city are not available. Whether prices depend on the city at all was not verified.

  • Search depth: at most 30 pages (≈ 470 items) per query, sort and price window. Page 1 has 8 tiles, later pages 16. With more results the answer carries depth_cap: split the price range into windows.

  • get_offers shows at most 16 offers per sort order. Market's server-rendered offers page ignores page (checked: page 2 returns page 1 again). Call it with other sorts to see more offers.

  • No price history — Market removed it in 2022 and the pages do not carry it.

  • Anonymous prices only. The site says «Войдите, и станет дешевле»: prices after login, personal discounts, split amounts, Plus points and cashback are not available (split is a yes/no flag; the raw isPersonalDiscount flag is passed as personal_discount_flag_raw, its meaning unconfirmed).

  • Search totals count loose matches and drift: the same query reported 2308 and, an hour later, 419 results; a nonsense query «finds» thousands. Check titles; do not treat total_found as a catalogue size.

  • Legal entity of a seller comes from the site's seller-info popup, which the page loads with a POST to /api/render-lazy — a path that robots.txt disallows. Only get_seller and get_product(include_seller_legal=true) make that request; everything else reads regular pages.

  • Customs duty — Market's rule for cross-border orders (duty above 200 € or 31 kg per order) is passed on; a fixed «Пошлина N ₽» is reported only when a tile shows one.

  • Unofficial: the server reads the state Market embeds in its pages. Market changes it without notice; parsers are isolated in parse.py and covered by tests on recorded pages. Implausible pages become errors.

  • Captcha: the server never solves or bypasses it. It stops and pauses (30 min by default).

Roadmap

  • Optional account mode (personal prices after login) and the cart — later.

  • Checkout, payment and address changes are out of scope.

Development

uv venv && uv pip install -e '.[dev]'
.venv/bin/pytest              # offline tests on recorded, anonymised pages
.venv/bin/pytest -m live -s   # every tool over MCP stdio against the live site (14 requests, ~1.5 min)

Please run the live test rarely: the IP is shared with your own browsing, and a captcha pauses the server for 30 minutes.

Disclaimer & credits

Not affiliated with Yandex. The server reads Market's internal page state, not an official API; use it for personal price research at a human request rate and respect Market's terms of use. Ideas for recognising real captchas (URL and SmartCaptcha markers, not the substring "captcha"), "empty frame" pages and retrying an empty redirect come from Vladimir-Human/ru-marketplace-mcp (MIT); no code was copied.

License: MIT.

Available Tools

7 tools
compare_productsA
Read-onlyIdempotent

Side-by-side rows for up to 10 seller cards: the three prices, rating of the card, seller, delivery.

One request per card, sequentially (about 5 s each). A card that fails gets an error row; a captcha or rate limit stops the whole comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
productsYesUp to 10 card ids («Артикул Маркета») or /card/ URLs

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description's extra details are genuinely additive. It discloses sequential per-card requests, approximate 5-second latency, per-card error rows, and that captcha/rate limits abort the whole comparison—exactly the behavioral traits an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: the result shape is front-loaded, followed by two tightly written caveat sentences. Every line earns its place and there is no filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the single well-documented parameter, and safety annotations, the description covers the remaining operational concerns: item limit, sequential latency, failure behavior, and abort conditions. Nothing critical is missing for a read-only comparison tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single `products` parameter is fully documented by the schema. The description reinforces the 'up to 10' limit but adds no new parameter semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (up to 10 seller cards) and the output shape (side-by-side rows with prices, rating, seller, delivery), which makes the tool's purpose recognizable. It does not explicitly name a sibling, so it stops short of fully distinguishing itself from tools like get_product or get_offers.

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

Usage Guidelines3/5

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

The intended use is implied: compare multiple seller cards side-by-side, and the latency/failure caveats help an agent judge whether it is appropriate. However, it never explicitly says when to prefer this over alternatives such as get_offers or get_product, so the routing guidance is left to inference.

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

get_offersA
Read-onlyIdempotent

All sellers' offers of one product (the site's «Все N предложений»), as tiles.

Market's server pages show the first 16 offers per sort and ignore page (checked 2026-09-25), so this returns at most 16; call again with another sort to see more (dedupe by offer_id). Also returns the model group's rating — labelled: it can merge different products. One request.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoThe site's orders; price sorting uses the Pay-card priceprice_asc
sku_idYes`sku_id` (marketSku) from search_products / get_product: the exact product whose offers to list
model_idYes`model_id` from search_products / get_product

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds significant behavioral facts beyond those: the server ignores `page` and returns at most 16 offers per sort, different sorts yield overlapping but different subsets requiring dedupe, and the model group's rating can merge different products. These are non-obvious runtime behaviors an agent must know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the opening sentence states the core purpose, followed by the critical limit, the workaround, and the rating caveat. Every sentence carries essential information, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with full annotations and an output schema, the description covers all non-obvious operational details: the 16-offer cap, the page-ignoring server behavior, dedupe guidance, rating-merge caveat, and single-request nature. Nothing critical is missing for an agent to call and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds functional meaning for `sort` by explaining that each sort returns a different first-16 subset, making repeated calls with different sorts an explicit expansion strategy. It also links `sku_id` and `model_id` to 'one product,' though this is modest extra value over the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'All sellers' offers of one product (the site's «Все N предложений»), as tiles.' It clearly scopes the tool to listing offers for a single product and distinguishes it from siblings such as search_products, get_product, and compare_products by the resource it returns.

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

Usage Guidelines4/5

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

The description gives clear context for when this tool is appropriate ('offers of one product') and provides a concrete usage workaround: 'call again with another sort to see more (dedupe by offer_id).' However, it does not explicitly name alternatives or state when not to use this tool, so it falls just short of full exclusion guidance.

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

get_productA
Read-onlyIdempotent

One seller's product card, live: the three labelled prices, promo conditions, delivery, seller.

Also: rating of this seller's card with stars and a check whether the card pools other products, «Все N предложений от X» (X = lowest Pay-card price; list them with get_offers), badges with their real meaning, cross-border / markdown / version flags, stock, characteristics and question count. One request (three with include_seller_legal).

ParametersJSON Schema
NameRequiredDescriptionDefault
productYesMarket card id («Артикул Маркета», `card_id` from search_products, e.g. '103266817440') or a market.yandex.ru/card/… URL
include_specsNoCharacteristics filled in by the seller/Market
include_descriptionNoFull description text
include_seller_legalNoAlso load the seller's legal entity (INN/OGRN/address): +2 requests, one of them to Market's /api/ (robots.txt Disallow)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds valuable behavioral details: it notes the number of HTTP requests ('One request (three with include_seller_legal)') and warns that one of those calls hits '/api/' disallowed by robots.txt, which is critical for rate-limit and compliance awareness. This goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but well-structured: a lead sentence captures the core purpose, followed by a compact list of additional features. It is front-loaded with the essential 'one seller's product card' and avoids redundancy. The style is efficient, though the bullet-like formatting (line breaks) is not perfectly concise but remains clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description does not need to explain return values. It covers all major aspects of the product card (prices, promo, delivery, seller, rating, badges, flags, stock, characteristics, question count) and mentions the optional include flags. It also notes the interaction with get_offers. This is comprehensive enough for an agent to understand the tool's scope without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% parameter description coverage, so baseline is 3. The description enriches include_seller_legal by explaining the extra request cost and robots.txt issue, giving the agent a reason to set it to true/false. It does not repeat the other parameter descriptions, relying on schema clarity, which is acceptable. The added nuance justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool returns 'One seller's product card' and enumerates its contents (labelled prices, promo conditions, delivery, seller). It also highlights unique aspects like the seller rating and the 'Все N предложений от X' aggregation check. This is a specific verb-resource pair that clearly distinguishes it from siblings like get_offers or get_seller.

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

Usage Guidelines3/5

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

The description references get_offers for listing offers, which is a hint about separation of concerns, but it does not explicitly state when to use this tool versus alternatives (e.g., 'use get_seller for legal entity details' or 'use get_reviews for reviews'). The usage context is implied but not fully articulated, leaving an agent to infer the boundaries.

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

get_questionsA
Read-onlyIdempotent

Buyers' questions about a card with the answers shown on the site; by_seller marks the seller's answers.

Dates are exact. Names of buyers are never returned; greetings with a name in answers are masked. One request.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage of 10 questions
productYesMarket card id («Артикул Маркета», `card_id` from search_products, e.g. '103266817440') or a market.yandex.ru/card/… URL

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already mark the tool read-only, idempotent, and non-destructive; the description adds valuable behavior: buyer names are never returned, greetings with names are masked, dates are exact, and seller answers are flagged by_seller. The phrase 'One request' adds context but is ambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences carry meaningful information with the core resource stated first. There is no padding, though 'One request' is terse and could be more explicit.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a complete parameter schema and an output schema present, the description covers important behavioral quirks like privacy masking and exact dates. It lacks explicit usage guidance and leaves 'One request' open to interpretation, but is otherwise sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters fully (100%), including defaults, constraints, and an example value for product. The description adds no additional parameter-level semantics; the by_seller mention concerns output rather than input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource clearly: buyers' questions about a card, with answers as shown on the site. It distinguishes the tool from siblings like get_reviews by topic, though it does not explicitly name alternatives or use a direct verb like 'returns'.

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

Usage Guidelines3/5

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

The description implies this tool is for buyer questions rather than reviews or offers, but it never states when to prefer it over get_reviews or when not to use it. There is no explicit context, exclusion, or alternative routing.

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

get_reviewsA
Read-onlyIdempotent

Buyer reviews with date, stars, pros, cons, comment, votes, photo count and the product each is about.

The header numbers (rating, counts, stars) are the site's for the chosen scope; for scope="variant" the site still shows the whole card's numbers (labelled). Items without text are ratings only. Author names and order numbers are never returned. One request.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage of 10
sortNo'worst' = the site's «С низкой оценкой», complaints firsthelpful
scopeNo'card' = this seller's card as the site shows it (can pool other products of the seller; each review says which product); 'variant' = only this exact product at this seller; 'model' = all sellers of the model group (can merge DIFFERENT products)card
productYesscope card/variant: card id («Артикул Маркета») or /card/ URL; scope model: `model_id`

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds meaningful behavioral details: it clarifies that author names and order numbers are never returned, explains the header-number behavior for scope='variant', and notes that items without text are ratings only. It also states 'One request' which implies a single call fetches all results. This goes beyond the annotations and is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the main purpose. The first sentence lists the returned fields, and the second paragraph adds necessary edge-case behavior. There is no redundant repetition of schema details. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core output contents, scope behavior, and explicit exclusions (author names/order numbers). It also mentions the single-request nature. The existence of an output schema means return-value details are not needed. It could mention pagination explicitly, but the schema's 'Page of 10' already covers that. Overall, it is sufficiently complete for a read-only tool with these annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is documented. The description adds significant semantic value by explaining the nuances of the 'scope' parameter (e.g., how 'variant' still shows the whole card's numbers labelled) and the 'sort' parameter (e.g., 'worst' means complaints first). These clarifications are not fully captured in the schema and help the agent choose correct values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns buyer reviews with specific fields (date, stars, pros, cons, comment, votes, photo count) and identifies the product each review is about. It is distinct from sibling tools like get_questions (questions) and get_offers (offers), so an agent can immediately understand its purpose.

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

Usage Guidelines3/5

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

The description explains the three scopes ('card', 'variant', 'model') and how they affect the results, which gives usage context. However, it does not explicitly state when to use this tool versus alternatives like get_questions or get_offers, nor does it mention any exclusions. Usage guidance is implied by the resource type but not stated outright.

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

get_sellerA
Read-onlyIdempotent

A seller's storefront header (rating, ratings count, orders, years on Market, status) and legal entity.

The legal entity (name, INN, OGRN, address, cross-border flag) comes from the site's seller-info popup, loaded with a POST to Market's /api/ (robots.txt Disallow) — two requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idYes`business_id` of a seller from search_products / get_product

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish read-only/idempotent/non-destructive behavior. The description adds value by revealing that the data is assembled from the seller-info popup via two POST requests to Market's /api/ and that the endpoint is disallowed in robots.txt. This is useful behavioral context, though it doesn't discuss auth or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the first front-loads the primary output, the second adds relevant implementation detail. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one required parameter, full schema coverage, an output schema present, and safety annotations, the description supplies the additional behavioral context (request count and source) needed to understand the call. It doesn't enumerate return values, but that is unnecessary given the output schema. A small gap is the lack of explicit usage guidance, but that is already scored separately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: business_id has a description identifying it as a seller id from search_products/get_product. The tool description adds no further parameter semantics, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the resource (seller) and enumerates the returned components: storefront header fields (rating, ratings count, orders, years, status) and legal entity fields (name, INN, OGRN, address, cross-border flag). This clearly differentiates get_seller from siblings like get_product or get_reviews, which concern product or review data rather than seller identity.

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

Usage Guidelines3/5

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

The use case is implied: an agent needs a seller's storefront rating/status or legal entity after obtaining a business_id from search_products/get_product. However, the description never states when to prefer this tool over siblings or gives exclusions, so the guidance is only implicit.

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

search_productsA
Read-onlyIdempotent

Search Yandex Market like the site: real pages, the site's sort orders and a price window.

Each item: offer/card/model/SKU ids, title, card URL, the three labelled prices (without the Pay card, with it, crossed-out), discounts, seller, sponsored flag, rating of this seller's card with its count, badges, cross-border / markdown flags, stock and delivery dates. One request per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoResult page: page 1 has 8 tiles, every later page 16
sortNoThe site's orders. Price sorting uses the Pay-card price. 'popular' page 1 is almost all ads: for depth use price_asc with price windowspopular
queryYesSearch phrase as typed on the site (Russian works best)
price_maxNoUpper price bound, rubles (Pay-card price)
price_minNoLower price bound, rubles (the site filters by the Pay-card price)
include_sponsoredNoKeep sponsored tiles in `items` (they are always flagged and counted)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark it read-only, idempotent, and non-destructive. The description adds valuable behavior beyond that: real pages, site sort orders, price window, page size differences (8 vs 16 tiles), ad-heavy first page on popular sort, and the 'one request per call' constraint. This gives the agent a much richer behavioral model without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in one clear sentence, then provides a structured list of output fields. The field list is long but each item is relevant and not redundant; overall it is efficient without being terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with six parameters and an output schema, the description covers everything needed: it clarifies the search behaves like the real site, specifies the result fields, notes the one-request-per-call limit, and the schema already documents pagination and sort values. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: every parameter (page, sort, price_max/min, include_sponsored, query) already has a clear description in the schema. The tool description does not add further parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair ('Search Yandex Market') and a clear scope ('like the site'), then enumerates the exact fields each item returns (ids, prices, seller, sponsored flag, etc.), making it easy to distinguish from the sibling get_product or get_offers tools.

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

Usage Guidelines4/5

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

It clearly describes what the tool does and offers internal tips (e.g., using price_asc with price windows for depth, and noting that popular page 1 is ad-heavy), but it never explicitly contrasts this tool against siblings like get_product or get_offers. The context makes the intended use clear without formal exclusions.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedcompare_products
    • First observedget_offers
    • First observedget_product
    • First observedget_questions
    • First observedget_reviews
    • First observedget_seller
    • First observedsearch_products

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct resource and action: search, single product card, all offers, comparison, reviews, questions, and seller info. Even the overlapping get_product and get_offers are clearly separated by scope (one seller vs. all sellers).

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: search_products, get_product, get_offers, compare_products, get_reviews, get_questions, get_seller. No mixed conventions or vague verbs.

Tool Count5/5

Seven tools is well-scoped for a marketplace research API. Each tool covers a distinct user need without redundancy or bloat.

Completeness5/5

The set covers the full product research lifecycle: discovery (search), deep dive (product, offers, compare), social proof (reviews, questions), and seller trust (seller info). No obvious dead ends or missing core operations for a read-only marketplace tool.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to run RU-first web searches through the Yandex index and extract web pages into clean reader-mode Markdown, bypassing anti-bot blocks.
    3
    55 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables LLM agents to query live Wildberries marketplace data — product search with pages, sorting, price filters, per-article ratings and reviews, weekly price history, and seller legal details — with honest, sanity-checked answers and automatic anti-bot handling.
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables LLM agents to retrieve live, accurately-labelled product data from Ozon's public storefront, including search with pagination and sorting, all price variants, delivery dates, seller legal details, variants, and SKU-specific ratings and reviews, all without an Ozon account.
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables LLM agents to access live aliexpress.ru storefront data, including variant-specific ruble prices, order-accurate coupons, delivery quotes to Russian cities, seller info, and paginated buyer reviews with filters.
    4
    MIT