dns-shop-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dns-shop-mcpFind iPhone 16 128GB price and availability in Moscow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
dns-shop-mcp
English · Русский
An MCP server that gives LLM agents live, honestly-labelled data from DNS (dns-shop.ru), a large Russian electronics and home-appliance retailer: search with real pages, sorting, price windows and stock filters; the full product card for one city; per-store stock that separates packaged units from showcase samples; per-product ratings and reviews; weekly price history.
Buyer side, anonymous: no DNS account is used. Nothing is added to a cart and nothing is ordered.
Why this server
DNS's own numbers are easy to misread. The server is built around not doing that:
DNS pitfall | What this server does |
Every dynamic page answers 401 with a Qrator proof-of-work challenge | A headless Chromium visit (≈1.5–2 s) earns the |
The city depends on the client (geo-IP or Moscow by default); prices and stock differ by city | The city is set explicitly on every call (default Екатеринбург) and checked against the city each page and availability widget echoes; a mismatch is an error, not data |
The rating on a card or tile merges all variants of a "multi-card" — colours, memory sizes, even different hardware models (iPhone 16: 2 268 reviews on the card, 452 for the black 128 GB A3287) |
|
Tiles round review counts: "2.3k отзывов" | Parsed as ≈2300 with |
"В наличии в 13 магазинах" counts stores that hold only a showcase sample |
|
"доп. скидка 1 600 ₽" applies only when paid online (СБП); the checkout total stays 15 999 ₽ |
|
Products DNS no longer sells still carry a price: the last sale price |
|
Marketplace ("DNS Селлер") items sit in the same search: another seller, 100 % prepayment, not in DNS stores |
|
Search silently narrows a query to one category and drops the order, price window and page on that redirect; some queries go to a catalog or brand page instead | The server repeats the request with every parameter; |
"Cheapest first" is not strictly monotonic | Items re-sorted by price within the page, DNS's order kept in |
Different products share one name; "Модель" in characteristics can be generic ("Apple iPhone 16") |
|
A stale page token makes DNS answer "no states" — which looks like "no price" | Refreshed once, then an error; never reported as "no price" |
Delivery cost is computed only in the cart |
|
Every answer carries fetched_at (UTC) and city — the city id, name, where the
choice came from and which part of DNS's answer confirmed it.
Related MCP server: wildberries-mcp
Tools
Tool | What it returns |
| 24 items per page (fixed by DNS); sort |
|
|
|
|
| DNS's weekly average selling prices (≈24 weeks) next to the live price; |
| Up to 24 products: one price request and one availability request for all, plus one review-statistics request each. Price fields, not-sold/prepayment flags, availability, this product's rating and the multi-card flag |
Questions & answers are deliberately not fetched: they live on club.dns-shop.ru, whose rules forbid automated scripts.
Requirements
Measured on 2026-09-25 (Linux, home Russian IP, Playwright 1.63, Chromium 1243):
Python | ≥ 3.10, with uv (or pip) |
Browser | Playwright's Chromium, downloaded automatically on first run into |
Memory | Peak ≈500 MB (PSS of the server plus Chromium, during a Qrator pass); ≈75 MB between passes (the Python server alone) |
Cold start | MCP |
Call duration | Requests are paced 2 s apart: search 7–10 s (4–5 requests), |
Re-pass | After ~15 min without calls the cookie expires (Max-Age 1000 s); the next call passes Qrator again (+1.5–2 s) |
Display | Not needed: everything runs headless |
Docker | Not needed |
System libraries | Present on desktop Linux, macOS and Windows. On a minimal Debian/Ubuntu server install them once (root): |
Network | A Russian IP without VPN: Qrator blocks foreign, VPN and datacenter addresses. Or set |
Tested on | Linux (CachyOS). macOS and Windows are supported by Playwright but untested |
Install
Claude Code:
claude mcp add dns-shop -- uvx --from git+https://github.com/SZhukovWork/dns-shop-mcp dns-shop-mcpAny MCP client (claude_desktop_config.json, .mcp.json, …):
{
"mcpServers": {
"dns-shop": {
"command": "uvx",
"args": ["--from", "git+https://github.com/SZhukovWork/dns-shop-mcp", "dns-shop-mcp"]
}
}
}From a checkout: uv venv && uv pip install -e . && .venv/bin/dns-shop-mcp.
Configuration (environment variables)
Variable | Default | Meaning |
| Екатеринбург | Default city: name as on the site, |
|
| Seconds between requests to DNS; values below 1.5 are raised to 1.5 |
| — | Proxy URL for HTTP and the browser, e.g. |
|
| Session (cookie, city cookies, page tokens; file mode 0600, directory 0700) and the city directory (refreshed daily) |
|
|
|
What the numbers mean
price_rub: the price on dns-shop.ru in the reported city for a guest (not logged in) — the big price on the card.price_before_discount_rubis the struck-through price.online_payment_discount_rub: the "доп. скидка" line. DNS applies it only when the order is paid online on the site (the badge says СБП); the card's "Итого" shows the regular price.price_if_paid_online_estimate_rub= price − discount, an estimate under that condition.credit_monthly_rub: a loan or instalment payment — not a price.not_sold/last_sale_price_rub: DNS does not sell the product now; the number is the last price it was sold at.prepayment_required: 100 % prepayment (marketplace sellers).Ratings:
rating.shown_on_cardis what the card shows and may merge all variants of a multi-card;rating.this_productcounts only this product. Search tiles show the card rating (scope: "card").Stock:
stores_with_any_unitincludes showcase samples;stores_with_packaged_unitscounts stores with a unit in its factory package;showcase_only_storeshold only a showcase sample. Pickup times are local time of the city as DNS sends them.Reliability: DNS's own statistic of units sold in its stores without a service claim; not a manufacturer figure.
Price history: weekly average selling price ("За прошедшие недели отображается средняя цена продажи"); the last week is the current, partial one. Whether past weeks are city-specific is not confirmed (in a comparison of Moscow and Yekaterinburg past weeks matched while the current prices differed).
Limitations
Unofficial: relies on the site's internal endpoints and markup; DNS can change them any time. Parsers are isolated in
parse.pyand tested on recorded answers; when markup changes, fields go missing rather than being guessed.robots.txtof dns-shop.ru disallows/search/and URLs with?for all robots; search cannot work without them. Keep the request rate human (the default pace is one request per 2 s) and use it for personal research only.Qrator can change its challenge; a Playwright build that passes today may fail later. Qrator may bind the cookie to the IP (not verified).
No personal prices, ProZaPass bonuses or cart: no account is used.
Delivery cost is not available (only in the cart); only the courier ETA text.
Used/discounted units (
/catalog/markdown/) are not supported:get_productrefuses their URLs. Their card shows the rating of the new product. The markdown catalog ignores the search phrase, so a search tool needs more research.Bundles ("Выгодные комплекты") and accessories/analogs sliders are not covered.
Questions & answers are not fetched (club.dns-shop.ru rules forbid scripts).
iPhones: buyers report units activated before sale; this server only passes such reviews on — it cannot check a unit.
DNS's "best rated" search order is its own ranking, not a strict sort by the shown rating;
get_reviews(sort="best")means highest stars first.
Roadmap
Optional account mode (personal prices, bonuses) and cart — later.
Used/discounted units search — needs more research of the markdown catalog.
Checkout, payment and address changes are deliberately out of scope.
Development
uv venv && uv pip install -e '.[dev]'
.venv/bin/pytest # offline tests on recorded, anonymised answers
.venv/bin/pytest -m live # end-to-end over MCP stdio against live dns-shop.ru (Russian IP, ~30 requests)Disclaimer
Not affiliated with DNS. The server uses the site's undocumented internal endpoints and passes its anti-bot check with a real browser. It is meant for personal price research at a human request rate; respect DNS's terms of use.
License: MIT.
Available Tools
5 toolscompare_productsARead-onlyIdempotent
Live side-by-side offers for up to 24 DNS products.
One price request and one availability request for all of them, plus one review-statistics request per product (≈2 s each). Per product: price, pre-discount price, online-payment discount (estimate), credit payment, not-sold flag, prepayment flag, availability summary, this product's own rating and whether its card merges several models.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City as on dns-shop.ru ('Екатеринбург', 'Москва', 'Name, Region') or its GUID; default: DNS_CITY or Екатеринбург | |
| products | Yes | Up to 24 product codes (best), GUIDs or product URLs |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing the exact request pattern: one price request, one availability request, and one review-statistics request per product at approximately 2 seconds each. It also exposes the per-product result fields including the not-sold flag, prepayment flag, and whether the card merges several models. This is strong behavioral context beyond the read-only/idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The second paragraph lists useful behavioral and field details without excessive elaboration. It could be slightly tighter by moving some field enumeration to the output schema, but it remains efficient and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, full schema coverage, and presence of an output schema, the description covers the essential operational facts: batching, latency, and returned attributes. It is slightly less complete on when to choose this tool over siblings, but for actually invoking it correctly, the needed context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 input schema already explains that products are codes, GUIDs, or URLs with a max of 24, and city is a DNS shop location or GUID. The description adds little parameter-level meaning beyond restating the 24-product limit, so it does not elevate above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Live side-by-side offers for up to 24 DNS products.' It makes the multi-product comparison intent obvious and distinguishes itself from single-item siblings like get_product or get_reviews, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: compare up to 24 DNS products at once and receive aggregated pricing, availability, and review statistics. However, it never states when not to use this tool or when to prefer search_products, get_product, get_reviews, or get_price_history instead. Usage guidance is present only implicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_historyARead-onlyIdempotent
Weekly average selling prices DNS shows on the card (about 6 months), next to the live price.
Each point is one week's average selling price; the last point is the
current, possibly partial week — it is not the current price (see
current_price_rub). Whether past weeks are city-specific is not confirmed.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City as on dns-shop.ru ('Екатеринбург', 'Москва', 'Name, Region') or its GUID; default: DNS_CITY or Екатеринбург | |
| product | Yes | DNS product code ('Код товара', e.g. 5482008), product URL, the 16-hex id from the URL or the product GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds valuable behavioral details: the data granularity (weekly averages), the partial week caveat for the last point, and the uncertainty about city-specificity. This goes beyond the structured hints and gives the agent realistic expectations about the data's nature and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short paragraphs, front-loaded with the main purpose. Every sentence contributes either data characteristics or a caveat. There is no redundancy or filler, making it highly efficient for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema already defines the return structure, the description covers all essential behavioral aspects: what the data represents, the partial week caveat, and a pointer to the current price. It is complete for a simple retrieval tool, leaving no critical information missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters with 100% coverage, including defaults and formats. The description adds a semantic note about the `city` parameter by warning that city-specificity is unconfirmed, which informs how to interpret results by city. This is a modest but useful addition beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides weekly average selling prices for a product, with the specific resource being the price history card on DNS. It distinguishes itself from current-price retrieval by explicitly noting the last point is not the current price and referencing `current_price_rub`, which differentiates it from sibling `get_product`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description guides usage by clarifying that the returned data is historical weekly averages, not the current price, and points to `current_price_rub` as the source for current price. However, it does not explicitly name an alternative sibling tool or state when to choose this tool over `get_product`, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productARead-onlyIdempotent
Full, live product card for one DNS product in one city.
Price block (price, pre-discount price, each discount with its condition, online-payment estimate, credit payment, paid warranty extensions), marketplace seller with INN, availability (stores with any unit vs with a packaged unit vs showcase-only, pickup points, courier ETA; delivery cost is only known in the cart), per-store stock, the card rating next to this product's own rating with star split, DNS's reliability statistic, characteristics incl. "Модель", variants of a multi-card with their specs, and a weekly price-history summary.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City as on dns-shop.ru ('Екатеринбург', 'Москва', 'Name, Region') or its GUID; default: DNS_CITY or Екатеринбург | |
| product | Yes | DNS product code ('Код товара', e.g. 5482008), product URL, the 16-hex id from the URL or the product GUID | |
| include_stores | No | Per-store stock with packaged vs showcase units (+1 request) | |
| include_price_history | No | Weekly price history summary (+1 request) | |
| include_characteristics | No | Full characteristics incl. 'Модель', description, warranty (+1 request) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive behavior. The description adds valuable behavioral context: the data is live, delivery cost is only known in the cart, and the three include flags each add exactly one request. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one clear sentence, followed by a dense enumeration of returned content. The list is long but every clause contributes useful information; it is slightly unwieldy as one continuous sentence, so it does not earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering side effects, the description adds the missing context: live freshness, request-cost implications of flags, delivery-cost limitation, and the card's scope. An agent has enough information to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a clear description. The tool description does not add per-parameter semantics, so the baseline of 3 is appropriate; the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Full, live product card for one DNS product in one city.' It lists concrete card components, which clearly distinguishes it from sibling tools like search_products, get_reviews, compare_products, and get_price_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended context clear: use this when you need the complete live product card for a single product in a single city. It does not explicitly mention when not to use it or name alternative tools, but the scope is strong and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reviewsARead-onlyIdempotent
Buyer reviews from dns-shop.ru: date, stars, pros, cons, comment, usage period, bought variant, votes.
Also returns the statistics for the chosen scope (average, star split, per-aspect grades, tag cloud) on unfiltered requests, and whether the card merges several models. Reviewer names are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City as on dns-shop.ru ('Екатеринбург', 'Москва', 'Name, Region') or its GUID; default: DNS_CITY or Екатеринбург | |
| page | No | Page of reviews | |
| sort | No | 'newest' first; 'helpful' = most up-voted; 'best' = highest stars first. For complaints use max_rating=2 | newest |
| limit | No | Reviews per page | |
| scope | No | 'product' = only this product; 'multicard' = all variants merged on its card (the site's default view) | product |
| search | No | Only reviews containing this text (site's own search), e.g. 'шум' | |
| product | Yes | DNS product code ('Код товара', e.g. 5482008), product URL, the 16-hex id from the URL or the product GUID | |
| max_rating | No | Only reviews with at most this many stars | |
| min_rating | No | Only reviews with at least this many stars | |
| with_photos | No | Only reviews with photos | |
| verified_buyers_only | No | DNS's 'real buyer' filter |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds genuinely non-obvious behavior beyond those annotations: statistics are only computed on unfiltered requests, the response indicates whether the card merges several models, and reviewer names are never returned. This is exactly the kind of contextual detail an agent needs before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core output, then adds the conditional statistics behavior and a privacy caveat. There is no filler, and every sentence contributes operational value without requiring the agent to parse a long block of prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, the description is complete: it covers what the reviews contain, the conditional statistics behavior, the multicard scope implication, and the reviewer-name privacy constraint. Nothing essential for an agent to call and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all 11 parameters with high coverage (100%), so the baseline is 3. The description adds no per-parameter syntax or format details; its extra notes about unfiltered requests and scope are behavior-level observations rather than parameter semantics. The schema carries the weight here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately identifies the resource as buyer reviews from dns-shop.ru and enumerates the concrete fields returned (date, stars, pros, cons, comment, usage period, bought variant, votes). This clearly distinguishes get_reviews from sibling tools like search_products, get_product, and compare_products, which are about product discovery and comparison rather than reviews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by the tool name and content: use this when you need buyer reviews or their statistics. However, the description never explicitly says when to use this instead of a sibling, nor does it mention any exclusions or alternative tools. The guidance is present but only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsARead-onlyIdempotent
Search DNS like the site does: 24 items per page, sorting, price window, stock filter.
Per item: code, name, short specs, the live city price (with pre-discount
price, online-payment discount as a conditional estimate, credit payment),
not-sold flag with the last sale price, marketplace seller, availability
summary, the card's rating (may merge variants) and DNS's reliability label.
DNS narrows every query to one category (resolved_category);
total_found_in_category counts only there, other_categories lists the rest.
Confirm finalists with get_product.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City as on dns-shop.ru ('Екатеринбург', 'Москва', 'Name, Region') or its GUID; default: DNS_CITY or Екатеринбург | |
| page | No | Result page, 24 items per page (fixed by DNS) | |
| sort | No | Order as on the site; 'reviews' = most reviewed first | popular |
| query | Yes | Search phrase as typed on the site (Russian works best) | |
| category | No | 16-hex category id (from `resolved_category` / `other_categories`); default: the category DNS picks | |
| price_max | No | Upper price bound, rubles | |
| price_min | No | Lower price bound, rubles | |
| availability | No | DNS's stock filter: 'any' = site default, INCLUDES products no longer sold; 'on_sale' = everything that can be bought (in stock or to order); 'in_stock' = in a store of the city now; 'today'/'tomorrow'/'later' = to order; 'out_of_stock' = not sold any more | any |
| with_availability | No | Also fetch each item's availability summary (+1 request) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only, idempotent, and non-destructive. The description adds substantial behavioral detail beyond that: fixed 24-item pages, conditional price estimates, merged ratings, the resolved_category behavior, total_found_in_category semantics, and the extra request cost of with_availability. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it front-loads the core search behavior, then details per-item fields, category narrowing, and the next step. The colon-list structure makes it scannable without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-parameter tool, the description covers the important behaviors: result shape, category resolution, pricing nuances, stock semantics, and the follow-up tool. An output schema exists, so the description does not need to restate return types. The only minor gap is not explicitly covering all sibling alternatives, but the tool is fully usable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 reinforces concepts like price window and stock filter but adds little meaning beyond what the schema already provides. It does not introduce new parameter semantics or clarify formats beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a DNS product search with site-like behavior: pagination, sorting, price window, and stock filter. It also differentiates itself from get_product by stating 'Confirm finalists with get_product', so an agent can distinguish search from detail retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is the discovery/search step and explicitly points to get_product as the follow-up for confirming finalists. It does not discuss when to prefer compare_products, get_reviews, or get_price_history, but the core usage context is unambiguous.
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.
5 tool updates
v0.1.0- First observed
compare_products - First observed
get_price_history - First observed
get_product - First observed
get_reviews - First observed
search_products
TDQS
Scored across 5 tools
Each tool targets a clearly distinct aspect: search discovers products, get_product gives one full card, get_reviews covers opinions, get_price_history tracks pricing over time, and compare_products does side-by-side offers. There is no meaningful overlap in purpose, and the descriptions reinforce the boundaries.
All five tools follow the same verb_noun snake_case pattern: search_products, get_product, get_reviews, get_price_history, compare_products. The verbs are consistent and predictable, and the objects clearly indicate what each tool operates on.
Five tools is well-scoped for a product information server: search, detail, reviews, price history, and comparison cover the core browsing workflow without redundancy or bloat. This feels like a focused, intentional set.
The set covers the full lifecycle of product discovery and evaluation: finding products, inspecting one deeply, reading reviews, viewing price trends, and comparing multiple products. Availability and seller details are embedded in get_product and compare_products, so there are no obvious dead ends or missing core operations.
Maintenance
Related MCP Connectors
Web search, page reading and structured extraction for AI agents, with strong RU coverage
AI-agent product catalog: search, lookup & purchase routing over verified merchant data.
Agent-native product catalog: 300M+ products, 150,000+ stores, deliver_to ranking.
Live web access for agents: scrape, SERP search, crawl/map, 74 collectors, datasets, proxies.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables querying DNS Shop product data via MCP: search, product details, reviews, specifications, variants, categories, brand catalogs, availability by city, and store listings.1218MIT
- AlicenseAqualityBmaintenanceEnables 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.5MIT
- AlicenseAqualityCmaintenanceEnables 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.4MIT
- AlicenseAqualityCmaintenanceEnables 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.4MIT