Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
WB_PROXYNoProxy URL for Wildberries requests, overrides standard proxy settings.
OZON_PROXYNoProxy URL for Ozon tier-1 requests.
WB_MIN_GAPNoMinimum gap between Wildberries requests (seconds).
WB_TIMEOUTNoTimeout for Wildberries HTTP requests (seconds).
AVITO_PROXYNoProxy URL for Avito tier-1 requests.
DNS_MIN_GAPNoMinimum gap between DNS requests (seconds).
DNS_TIMEOUTNoTimeout for DNS HTTP requests (seconds).
DETMIR_PROXYNoProxy URL for Detsky Mir requests.
LAMODA_PROXYNoProxy URL for Lamoda requests.
OZON_MIN_GAPNoMinimum gap between Ozon requests (seconds).
OZON_TIMEOUTNoTimeout for Ozon HTTP requests (seconds).
TAOBAO_PROXYNoProxy URL for Taobao requests.
WB_CACHE_TTLNoCache TTL in seconds for Wildberries (0 disables).
YANDEX_PROXYNoProxy URL for Yandex Market requests.
AVITO_MIN_GAPNoMinimum gap between Avito requests (seconds).
AVITO_TIMEOUTNoTimeout for Avito HTTP requests (seconds).
CHROME_BINARYNoPath to the Chrome/Chromium binary.
DETMIR_REGIONNoDefault region for Detsky Mir (e.g., RU-MOW, RU-SPE).
DNS_CACHE_TTLNoCache TTL in seconds for DNS (0 disables).
MCP_HTTP_HOSTNoHost to bind for HTTP transport.
MCP_HTTP_PORTNoPort to bind for HTTP transport.
MCP_TRANSPORTNoTransport for the MCP server: 'stdio' (default) or 'http'.
MPSTATS_PROXYNoProxy URL for MPStats requests.
CHROME_STEALTHNoEnable stealth mode for Chrome (e.g., 'true' or 'false').
LAMODA_MIN_GAPNoMinimum gap between Lamoda requests (seconds).
LAMODA_TIMEOUTNoTimeout for Lamoda HTTP requests (seconds).
OZON_CACHE_TTLNoCache TTL in seconds for Ozon (0 disables).
TAOBAO_MIN_GAPNoMinimum gap between Taobao requests (seconds).
TAOBAO_TIMEOUTNoTimeout for Taobao HTTP requests (seconds).
WB_NET_RETRIESNoNumber of network retries for Wildberries.
YANDEX_MIN_GAPNoMinimum gap between Yandex Market requests (seconds).
YANDEX_TIMEOUTNoTimeout for Yandex Market HTTP requests (seconds).
AVITO_CACHE_TTLNoCache TTL in seconds for Avito (0 disables).
CHROME_CDP_HOSTNoHost of the Chrome DevTools Protocol endpoint (default: 127.0.0.1).
CHROME_CDP_PORTNoPort of the Chrome DevTools Protocol endpoint.
CHROME_HEADLESSNoRun Chrome in headless mode (e.g., 'true' or 'false').
MPSTATS_MIN_GAPNoMinimum gap between MPStats requests (seconds).
MPSTATS_MP_AUTHNoMPStats auth token (JWT) from a paid account. Optional; without it mpstats tools return 'auth_missing'.
MPSTATS_TIMEOUTNoTimeout for MPStats HTTP requests (seconds).
WB_DEFAULT_DESTNoDefault destination/region for Wildberries.
CITILINK_MIN_GAPNoMinimum gap between Citilink requests (seconds).
CITILINK_TIMEOUTNoTimeout for Citilink HTTP requests (seconds).
DETMIR_CACHE_TTLNoCache TTL in seconds for Detsky Mir (0 disables).
LAMODA_CACHE_TTLNoCache TTL in seconds for Lamoda (0 disables).
OZON_IMPERSONATENoTLS impersonation profile for Ozon (e.g., 'chrome').
TAOBAO_CACHE_TTLNoCache TTL in seconds for Taobao (0 disables).
YANDEX_CACHE_TTLNoCache TTL in seconds for Yandex Market (0 disables).
AVITO_IMPERSONATENoTLS impersonation profile for Avito.
AVITO_LOCATION_IDNoDefault location ID for Avito search.
MPSTATS_CACHE_TTLNoCache TTL in seconds for MPStats (0 disables).
WB_MAX_BODY_BYTESNoMaximum response body size to accept from Wildberries.
CITILINK_CACHE_TTLNoCache TTL in seconds for Citilink (0 disables).
MEGAMARKET_MIN_GAPNoMinimum gap between Megamarket requests (seconds).
MEGAMARKET_TIMEOUTNoTimeout for Megamarket HTTP requests (seconds).
MEGAMARKET_CACHE_TTLNoCache TTL in seconds for Megamarket (0 disables).
COMPARE_SOURCE_TIMEOUTNoTimeout for each source during price comparison (seconds).
CHROME_SCRAPING_PROFILENoScraping profile name for Chrome.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": false,
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
marketplace_sourcesA

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.

marketplace_healthA

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.

wb_cardA

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.

wb_root_infoA

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.

wb_reviewsA

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.

wb_questionsA

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.

wb_searchA

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.

wb_sellerA

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.

wb_categoriesA

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.

wb_category_productsA

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.

ozon_cardA

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.

ozon_reviewsA

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.

ozon_searchA

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.

yandex_searchA

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.

yandex_cardA

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.

detmir_cardA

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.

detmir_categoryA

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.

detmir_categoriesA

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.

avito_searchA

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.

avito_cardA

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.

avito_sellerA

Read an Avito seller's rendered profile page over paced, allowlisted CDP.

Accept an avito.ru /brands/ or /user//profile URL/path (query and fragment stripped), or a bare hash/id. Only a bare 32-hex hash builds /brands/; every other valid bare id builds /user//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.

taobao_searchA

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.

taobao_cardA

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.

megamarket_searchA

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.

megamarket_cardA

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.

lamoda_searchA

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.

lamoda_cardC

Fetch a GraphQL card over HTTPS, falling back to an in-page Chrome POST.

Full field list and error codes: guide://lamoda/lamoda_card.

dns_searchA

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.

dns_cardA

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.

citilink_searchA

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.

citilink_cardA

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.

aliexpress_searchA

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.

aliexpress_cardA

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.

cian_searchA

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.

cian_cardA

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.

compare_pricesA

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.

compare_verify_offerA

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.

compare_sourcesA

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.

compare_browser_snapshotA

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.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
guide://marketplace/marketplace_sourcesReference for `marketplace_sources`: its return format and error mapping.
guide://marketplace/marketplace_healthReference for `marketplace_health`: its return format and error mapping.
marketplace://errorsEvery error code a marketplace tool can return, with retryability and the JSON envelope.
guide://wb/wb_cardReference for `wb_card`: its return format and error mapping.
guide://wb/wb_root_infoReference for `wb_root_info`: its return format and error mapping.
guide://wb/wb_reviewsReference for `wb_reviews`: its return format and error mapping.
guide://wb/wb_questionsReference for `wb_questions`: its return format and error mapping.
guide://wb/wb_searchReference for `wb_search`: its return format and error mapping.
guide://wb/wb_sellerReference for `wb_seller`: its return format and error mapping.
guide://wb/wb_categoriesReference for `wb_categories`: its return format and error mapping.
guide://wb/wb_category_productsReference for `wb_category_products`: its return format and error mapping.
guide://ozon/ozon_cardReference for `ozon_card`: its return format and error mapping.
guide://ozon/ozon_reviewsReference for `ozon_reviews`: its return format and error mapping.
guide://ozon/ozon_searchReference for `ozon_search`: its return format and error mapping.
guide://yandex/yandex_searchReference for `yandex_search`: its return format and error mapping.
guide://yandex/yandex_cardReference for `yandex_card`: its return format and error mapping.
guide://detmir/detmir_cardReference for `detmir_card`: its return format and error mapping.
guide://detmir/detmir_categoryReference for `detmir_category`: its return format and error mapping.
guide://detmir/detmir_categoriesReference for `detmir_categories`: its return format and error mapping.
guide://avito/avito_searchReference for `avito_search`: its return format and error mapping.
guide://avito/avito_cardReference for `avito_card`: its return format and error mapping.
guide://avito/avito_sellerReference for `avito_seller`: its return format and error mapping.
guide://taobao/taobao_searchReference for `taobao_search`: its return format and error mapping.
guide://taobao/taobao_cardReference for `taobao_card`: its return format and error mapping.
guide://megamarket/megamarket_searchReference for `megamarket_search`: its return format and error mapping.
guide://megamarket/megamarket_cardReference for `megamarket_card`: its return format and error mapping.
guide://lamoda/lamoda_searchReference for `lamoda_search`: its return format and error mapping.
guide://lamoda/lamoda_cardReference for `lamoda_card`: its return format and error mapping.
guide://dns/dns_searchReference for `dns_search`: its return format and error mapping.
guide://dns/dns_cardReference for `dns_card`: its return format and error mapping.
guide://citilink/citilink_searchReference for `citilink_search`: its return format and error mapping.
guide://citilink/citilink_cardReference for `citilink_card`: its return format and error mapping.
guide://aliexpress/aliexpress_searchReference for `aliexpress_search`: its return format and error mapping.
guide://aliexpress/aliexpress_cardReference for `aliexpress_card`: its return format and error mapping.
guide://cian/cian_searchReference for `cian_search`: its return format and error mapping.
guide://cian/cian_cardReference for `cian_card`: its return format and error mapping.
guide://compare/compare_pricesReference for `compare_prices`: its return format and error mapping.
guide://compare/compare_verify_offerReference for `compare_verify_offer`: its return format and error mapping.
guide://compare/compare_sourcesReference for `compare_sources`: its return format and error mapping.
guide://compare/compare_browser_snapshotReference for `compare_browser_snapshot`: its return format and error mapping.

TDQS

A3.7/5.0

Scored across 39 tools

Disambiguation4/5

Almost every tool is scoped to one marketplace plus action (wb_card vs ozon_card vs cian_card), and the descriptions explicitly delineate near-neighbours like wb_categories → wb_category_products → wb_search and compare_prices vs per-source search. Two genuine ambiguities remain: compare_sources and marketplace_sources both answer 'which marketplaces are available?', and wb_card vs wb_root_info both read WB card data for a SKU (the latter for imt_id) with only subtle framing difference.

Naming Consistency5/5

Every tool follows a strict <source>_<action> convention with a tiny, predictable action vocabulary (search, card, reviews, seller, categories). The intentional singular/plural distinction (detmir_categories = browse tree, detmir_category = list products) is applied consistently across WB and Detsky Mir, and no camelCase or verb-style drift appears anywhere.

Tool Count3/5

39 tools is heavy and exceeds the comfortable 3-15 band, but it is not padded: the surface is 13 marketplaces each needing at least search+card, plus a compare layer. Each tool earns its place, though the long tail of near-identical search/card pairs (taobao, lamoda, dns, citilink, aliexpress, megamarket) makes the roster feel larger than the average agent will ever explore.

Completeness4/5

Exceptionally thorough for a price-research server: search, card detail, reviews, buyer questions, seller identity, category trees, cross-marketplace comparison, offer verification, plus health/source diagnostics that prevent false 'no results' conclusions. Gaps are secondary rather than blocking — seller/entity lookup exists only for WB and Avito, review tooling exists only for WB/Ozon (elsewhere folded into the card), and there is no price-history tool outside Cian.

Maintenance

ActivityActive
ResponsivenessUnresponsive