dns-customer-mcp
Click on "Install 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-customer-mcpнайди смартфоны Xiaomi и покажи наличие в Казани"
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-customer-mcp
MCP-сервер для DNS Shop (сторона покупателя): поиск, карточки товаров, отзывы, характеристики, каталоги, наличие по городу и список магазинов через Model Context Protocol.
Репозиторий: dns-customer-mcp. Имя MCP-сервера и Docker-образа совпадает.
Работает в Cursor, Claude Desktop, VS Code и других MCP-клиентах.
Зачем
У DNS нет публичного consumer API. Сайт защищён Qrator — анонимный curl/requests с датацентрового IP получает HTTP 401.
Этот сервер держит сессию anti-detect браузера Camoufox, один раз проходит JS-челлендж и дальше читает страницы через in-page fetch (часто с X-Requested-With: XMLHttpRequest → { html }) или DOM-парсинг. Цены и наличие зависят от города сессии.
Архитектура: Node MCP (stdio) → Python Camoufox.
Related MCP server: marketplace-mcp
Инструменты
Tool | Назначение |
| Поиск товаров |
| Пакетный поиск (1–10 запросов) |
| Карточка (+ location) |
| Пакет 1–40 карточек |
| Отзывы ( |
| Характеристики |
| Конфигурации на карточке |
| Наличие по городу/магазинам |
| Магазины города |
| Аналоги / аксессуары |
| Сравнение 2–8 товаров |
| Товары в категории |
| Живое дерево категорий |
| Витрина / поиск по бренду |
| Фильтры поиска |
| Текущий город сессии |
| Поиск городов |
| Сменить город |
Seller/offers маркетплейса нет — DNS один продавец. Q&A не реализован.
Город
По умолчанию анонимная сессия ≈ Москва (cookie current_path / city_path).
dns_get_location
dns_search_cities({ query: "Каз" })
dns_set_city({ city: "Казань" })
dns_product_availability({ product: id })Идентификаторы
Товар: 16-hex id (
b7a1667f9b19ed20) или URLhttps://www.dns-shop.ru/product/{id}/Категория: slug из
dns_list_categories— не выдумывать путь
Быстрый старт
git clone <repo> dns-customer-mcp
cd dns-customer-mcp
docker build -t dns-customer-mcp:latest .MCP-конфиг (Docker)
Скопируйте docs/mcp.example.json в конфиг клиента или используйте .cursor/mcp.json:
{
"mcpServers": {
"dns-customer": {
"command": "docker",
"args": [
"run", "-i", "--rm", "--init",
"--stop-timeout=10",
"--shm-size=1g",
"--label", "dns-customer-mcp=1",
"dns-customer-mcp:latest"
]
}
}
}--shm-size=1g обязателен для браузера. Контейнер живёт пока открыт MCP-сеанс (--rm убирает его после выхода).
Локальный запуск (без Docker)
npm install
pip install -r python/requirements.txt
python -m camoufox fetch
npm startWindows: задайте DNS_PYTHON=python при необходимости.
Переменные окружения
Var | Default | Purpose |
|
| Camoufox headless |
|
| Camoufox geoip |
|
| Ожидание Qrator |
|
| Таймаут навигации |
|
| Пауза между запросами |
|
| Idle браузера (Python; выровнен с Node) |
|
| Idle Node → exit (Docker |
|
| Интерпретатор bridge |
| on | Background warmup ( |
|
| Базовый URL сайта |
|
| REST API отзывов |
|
| Allowlist для fetch_url (SSRF) |
|
| Таймаут MCP tool по умолчанию |
|
| Параллельные MCP handlers (очередь вне timeout) |
|
| Auto-retry SESSION_DROP + warmup |
|
| Token bucket на tool calls ( |
|
| Перезапуски Python bridge |
|
| Таймаут dns_search |
|
| TTL кэша product meta |
| — | Прокси (RU IP при бане Qrator) |
Разработка
npm test # node:test — парсеры + config allowlist
npm run test:parse # alias для npm test
npm run smoke:warmup # Camoufox + Qrator
npm run discover # снять XHR/DOM после warmup
npm run smoke # search → details → specs → reviews
npm run smoke:location # города (+ --set для смены)Маршруты зафиксированы в src/dns/ по live discovery (Aug 2026):
Cookie
current_path:{ city: UUID, cityName }(Москва =30b7c1f3-03fb-11dc-95ee-00151716f9f5)/catalog/+ XHR → JSON{ html, data, … }/search/— in-page fetch (XHR часто 302); цены черезPOST /ajax-state/product-buy/Карточка товара — Vue SPA (hydrate wait) + meta/og fallback
REST_API_URLиз Pinia:https://restapi.dns-shop.ru(снаружи за Qrator)/product/characteristics/{id}/может 404 — specs с карточки после hydrate
Парсер
Плитка: точный класс
.catalog-productЦена в SSR-HTML пустая — догрузка через AjaxState; в DOM —
.product-buy__price(не рассрочка «от N ₽/мес»)При срыве селекторов —
parser_drift: true, неprice: 0
Разработка
Тесты и CI
npm test # Node unit tests (parse, errors, bridge protocol, config parity)
npm run test:python # pytest (config, locations, shared config parity)
npm run test:all # оба набора
npm run lint # ESLint (JS)
npm run lint:python # Ruff (Python) — pip install -r python/requirements-dev.txt
npm run build:config # проверка parity shared/config.json ↔ runtime
npm run build:selectors # генерация python/dns_selectors.py из src/selectors.jsGitHub Actions (.github/workflows/test.yml): npm test, pytest, docker build на каждый push/PR.
Smoke-тесты (живой Camoufox + сеть):
npm run smoke
npm run smoke:warmup
npm run smoke:location
npm run discoverDiscovery-скрипты
Одноразовые скрипты для reverse-engineering HTML/API DNS лежат в tools/discovery/ (не входят в CI). Основные smoke/discover — в scripts/.
Протокол Node↔Python: docs/bridge-protocol.md.
Переменные окружения (доп.)
Переменная | По умолчанию | Назначение |
|
| Token bucket на MCP tool calls ( |
|
| Сериализация MCP handlers (таймаут не тикает в очереди) |
| on | Фоновый прогрев Camoufox при старте ( |
Ограничения
Только публичный каталог (не корзина / профиль / заказы)
Без CDP к локальному Chrome и без Parse/Apify
При бане Qrator — RU residential proxy через
HTTPS_PROXY
Лицензия
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityCmaintenanceProvides MCP tools for searching and comparing products on Wildberries (and Ozon planned), including product search, detailed card retrieval, and review fetching, normalized for LLM consumption.32
- AlicenseDqualityBmaintenanceEnables product search and price comparison across Ozon and Yandex Market via a read-only MCP server, returning normalized data with source URLs.6MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying and comparing prices, availability, ratings, reviews, and seller details from major Russian and Chinese marketplaces (Wildberries, Ozon, Yandex Market, and others) without requiring API keys, via a unified MCP interface.3MIT
- AlicenseAqualityAmaintenanceMCP server that reads product data from Russian and Chinese marketplaces (Wildberries, Ozon, Yandex Market, Avito, etc.) — prices, availability, ratings, reviews, and seller details — with price comparison across sources. Requires no API keys; some sources use your Chrome session for anti-bot access.3677MIT
Related MCP Connectors
Search ~8.5M products from 2,500+ Central European e-shops. Semantic, keyword, GTIN lookup.
Official DSers MCP for dropshipping: import, edit, price, and publish products to Shopify and Wix.
Federated commerce search across independent WooCommerce merchants. Keyless, read-only MCP server.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Raleose/dns-customer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server