--- name: dns-connector description: Use this skill when the operator needs DNS-Shop electronics data — search or a product card. Trigger on "днс", "dns-shop", "dns", "ноутбук днс". Always needs the operator's Chrome over CDP (Qrator proof-of-work). Skip for non-DNS tasks. --- # DNS-Shop Connector Reads DNS-Shop inside the operator's Chrome over CDP. Qrator's JavaScript proof-of-work answers every dynamic page with HTTP 401 + a challenge script — no header trick clears it, but a real Chrome executes it natively. The connector renders the page and reads the DOM. ## When to use - Search DNS electronics catalog by text - One product's price, old price, availability ## Tools available - `dns_search(query)` — tiles from the rendered search page - `dns_card(product_url)` — one card. The URL carries `/product//`, where the id is a 16-hex string: `/product/b7a1667f9b19ed20/`. A bare id also works. **Not an MCP tool:** `dns_selfcheck()` is a tri-state canary. It is CLI-only — `marketplace-mcp doctor` runs every connector's canary at once. ## A green selfcheck does NOT mean the data is right This connector is why that sentence appears throughout this repo. In July 2026 the product-id regex was fixed, search began returning 24 links, and `dns_selfcheck` went green — while **every item still came back with `title: null` and `price: null`**. The transport was fine; the parser understood nothing. `dns_selfcheck` answers one question: did the page load and did the extractor return a shape. If a number has to be trusted, open the product page in the same Chrome and read it. ## The price on a DNS tile is not the smallest number on it Three traps, all confirmed against the live grid on 2026-07-28: - **An instalment sits next to the price.** A tile showing `58 999 ₽` also shows `от 5 751 ₽/ мес.`. Anything that takes the minimum reports the monthly payment — a number that validates, looks plausible and is wrong. The extractor reads the named price node and skips instalment and bonus nodes. - **The strikethrough price carries no currency glyph** — `.product-buy__prev` renders a bare `54 999`, so a filter keyed on `₽` never sees it. - **The first product anchor in a tile is the image link**, which has no text. Tiles are selected by the exact BEM block `.catalog-product`, never by walking up from an anchor. `price_rub` is `None` when no price could be read — never `0`, never a guess. If a whole page comes back unpriced the response carries a `no_prices_on_page` warning: that is drift to investigate, not "free". ## Gotchas - The first navigation pays the proof-of-work and is slow; later reads on the same session are fast. - Bursts get throttled by Qrator and degrade to `transport_down`. That is rate-limiting of the browser, not a parser fault — pace the calls. - From a datacenter address the site answers 401, so there is nothing to verify there. This connector is only meaningful from the operator's own machine. ## DSH activation In DeepSeek Harness, the default profile exposes only `compare_prices` and `compare_sources` through the cheap compare mount. Per-marketplace tools and `marketplace_sources` require `RU_MARKETPLACE_MCP_FULL=1` and a profile restart; do not call them in the default mode.