DonSeTch — веб-инструменты для AI-агентов: загрузка страниц, поиск и краулинг без API-ключей

· 6 мин чтения
mcp mcp-server web-search web-scraping ai-agents
📂 Исходный код на GitHub

Веб-инструменты для AI-агентов, написанные с нуля на Rust: загрузка страниц, поиск без ключей, краулинг и скриншоты. Один бинарник, MCP-сервер и CLI, без API-ключей и аккаунтов. Лицензия AGPL v3.

DonSeTch — веб-инструменты для AI-агентов: загрузка страниц, поиск и краулинг без API-ключей

DonSeTch — это набор веб-инструментов для AI-агентов: загрузка страниц, поиск по интернету, обход сайтов и скриншоты. Всё собрано в один бинарник на Rust и работает на вашей машине. API-ключи не нужны, аккаунты тоже. Проект называет себя «вебом для AI-агентов» и подключается как MCP-сервер (Claude Code, Cursor, OpenCode, Pi, Hermes) или работает как обычный CLI.

Транспорт написан с нуля: без hyper, без Playwright, без Selenium. По замыслу автора, это даёт одновременно скорость и невидимость для антиботов, а набор инструментов остаётся маленьким. Схема всех четырёх инструментов занимает 2369 токенов. Проект распространяется по лицензии AGPL v3, в репозитории больше 1300 тестов.

Установка и подключение

npm install -g donsetch

Также есть установка через Homebrew (brew tap dondai44423/donsetch && brew install donsetch), нативное расширение для агента Pi (pi install npm:donsetch) и плагин для DeepSeek Harness. npm-пакет скачивает готовый бинарник с GitHub Releases и проверяет его по SHA256.

Подключение к любому MCP-клиенту — один блок конфигурации:

{
  "mcpServers": {
    "donsetch": {
      "command": "donsetch",
      "args": ["mcp", "--supervised"]
    }
  }
}

Флаг --supervised запускает надзирающий демон: если процесс упадёт, он перезапустится, а сессия продолжит работать. Вместо глобальной установки можно указать "command": "npx", "args": ["donsetch", "mcp"]. Есть и HTTP-транспорт: donsetch mcp --http --port 8765.

Проверить установку:

donsetch doctor          # проверки конфигурации, поиска, TLS, браузера, DNS
donsetch doctor --fix    # починить то, что чинится автоматически

Четыре инструмента

Инструмент Что делает
web_fetch Превращает любой URL в чистый Markdown. Сначала обычный HTTP, при защитной стене — переход в headless-браузер. PDF с OCR, выбор секций, действия на странице.
web_search Поиск без ключей: больше 10 бэкендов параллельно, общий консенсус и локальный семантический переранжировщик. На выходе — ссылки и фрагменты, а не выкачанная статья.
web_crawl Обход сайтов в пределах одного домена по схеме «sitemap + очередь страниц», с приоритизацией по теме и честными причинами остановки.
web_screenshot Скриншот страницы в PNG через тот же браузерный уровень.

Каждая ошибка отдаётся структурированно: код (wall.challenge, guard.ssrf, deadline.hit), тип (permanent, transient, walled) и строка next_action. Агент ветвится по коду, а не разбирает текст ошибки.

Поиск без API-ключей

Без ключей работают шесть поисковых систем из четырёх независимых индексов плюс восемь отраслевых источников: семья Bing (Bing, DuckDuckGo, Yahoo), Brave, Mojeek, Google, а также GitHub, Wikipedia, Hacker News, Semantic Scholar, arXiv, StackExchange, MDN и Google News. Запросы уходят ко всем движкам параллельно, потом результаты сливаются, дедуплицируются и ранжируются.

Три вещи делают качество:

  • Консенсус. Ссылку, которую вернули несколько независимых индексов, поднимают в выдаче. У каждого результата видны оценка, число независимых источников и список движков.
  • Семантический переранжировщик. Локальная ONNX-модель (ms-marco-MiniLM-L-6-v2, 23 МБ) читает запрос, заголовок и фрагмент и пересчитывает порядок. Смешивается с консенсусом и BM25 в пропорции 60/40.
  • Честность. Флаг weak=true говорит, что согласие движков низкое. Статус каждого движка виден, фейковых «результатов нет» не бывает.

Ключевые показатели из репозитория: на 110 вопросах в 11 тематиках без единого ключа найденный ответ был в фрагменте выдачи в 95,5% случаев (для сравнения опубликованный результат Tavily — 93,3%, оценка проводилась LLM).

Платные провайдеры подключаются по желанию и никогда не обязательны: donsetch keys add tavily ..., exa, serper, serpapi, bravesearch, Bright Data и другие. Если провайдер упал или исчерпал кредиты, происходит автоматический откат на поиск без ключей. Любой другой сервис можно подключить своим плагином — обычной программой, которая по stdin получает запрос JSON и по stdout отдаёт результаты, на любом языке.

Как проект обходит защиту

  • Настоящий TLS Chrome. DonSeTch управляет BoringSSL из Chrome напрямую, поэтому его ClientHello совпадает с настоящим — вплоть до порядка расширений и алгоритмов подписи. Подделывать здесь нечего: отпечаток рождается из настоящего движка, а не из таблицы заготовленных значений, которая со временем протухает.
  • Временная скрытность. Возобновление TLS-сессий, повторная проверка по 304, постоянные куки, пул соединений, TCP Fast Open. Эти признаки выдают ботов сильнее самих байтов.
  • «Реши и отскочи» (solve-and-bounce). Браузер почти никогда не грузит сам контент. Он решает защитную задачу и возвращает куки первому уровню — обычному HTTP, который дальше качает страницу на полной скорости.
  • Самообучение. Срок жизни куки подстраивается под наблюдения. Стена, которая дважды обыграла настоящий браузер, уходит в паузу с растущей задержкой — вместо того чтобы жечь по 20–40 секунд на каждую попытку.

Интерактивные капчи (hCaptcha, reCAPTCHA, Turnstile) локально не решаются — это честная ошибка, а не зависание. Решить их может ключ третьего уровня (Bright Data Web Unlocker), настройка описана в документации. Без ключа DonSeTch работает полностью.

Экономия контекста

Главная боль агентов — это не скорость, а токены. DonSeTch режет страницу до нужного:

  • focus — только релевантные к запросу фрагменты с заголовками;
  • toc + section — сначала оглавление (~170 токенов), потом одна нужная секция (~840 токенов);
  • must_contain — проверить утверждение по всей странице и получить MATCH/NO-MATCH с тремя цитатами (~70 токенов вместо 4000);
  • since_last — перепроверка страницы сворачивается в одну строку (~30 токенов);
  • ссылки по умолчанию вырезаются — примерно 30% экономии.

Типичная лестница чтения: поиск → оглавление → нужная секция. Обрезанный вывод продолжается по next_offset, остановленный краулинг — по resume.

Краулинг, PDF и локальные правила

Краулер работает в трёх режимах: full (карта и содержимое), map (только список URL) и content (обход от стартовой страницы). Есть учёт robots.txt и rate-limit'ов, уважение Retry-After, токены возобновления на 30 минут и честные причины остановки (FrontierEmpty, MaxPages, CharBudget, Deadline).

PDF разбирается своим парсером поверх PDFium, без Python-подпроцессов. Глифы и пиксели берутся из одного потока, поэтому таблицы определяются по отрисованной сетке, а текст — по символам. Сканы уходят в OCR (каскад PP-OCR), формы AcroForm превращаются в тройки «имя/тип/значение». На корпусе из 40 документов — ноль мусора на выходе и в 6–14 раз быстрее Python-аналогов.

Локальные правила в donsetch.toml запрещают конкретный сайт или закрепляют за ним уровень до первого запроса: [rules.url."example.org"] с action = "deny" и своим сообщением, которое агент читает как инструкцию. Подробнее — в документации по правилам.

Честные ограничения

Автор прямо перечисляет, чего инструмент не умеет:

  • интерактивные капчи без ключа не решаются;
  • поиск без ключей ходит с вашего IP, поэтому при больших объёмах нужен прокси (donsetch proxy add ...);
  • OCR и переранжировщик не входят в сборку по умолчанию — их нужно собирать флагами ocr,rerank, а при первом запуске модели качаются (~24 МБ и ~37 МБ);
  • проект сделан для быстрых разовых исследований — поиск, одна-две загрузки, страница документации, один PDF. Массовый сбор документов с защищённого сайта подряд — это уже другой сценарий, и там высок риск получить блокировку IP.

CLI дублирует те же движки: donsetch fetch <url>, donsetch search <query>, donsetch crawl <url>, donsetch screenshot <url>, плюс doctor, status, keys, proxy, login, update. Сравнение с Hound, Crawl4AI, Jina Reader и Firecrawl в репозитории сводится к одной строке: сочетание настоящего TLS Chrome, поиска без ключей, PDF-слития пикселей и локальной работы в одном бинарнике есть только у DonSeTch.

Источник: https://github.com/dondai44423/donsetch