Skip to main content
Glama
DavidCastilloAlvarado

dsh-google-chrome-search

dsh-google-chrome-search

CI license: MIT node: >=18

Плагин DeepSeek Harness (DSH), который позволяет AI-агенту выполнять реальный поиск в Google путем управления локальным браузером Chrome через CDP (Chrome DevTools Protocol) и рендерить любую страницу для извлечения её содержимого. Ключ API для поиска не нужен — используется уже установленный Chrome.

Google часто показывает страницу проверки человека (CAPTCHA / «необычный трафик») для автоматизированного и дата-центрового трафика. Когда это происходит, плагин открывает видимое окно Chrome, указывающее на страницу проверки, ждёт, пока человек её пройдёт, а затем извлекает результаты из уже доверенной сессии. Это шаг «спросить человека» — по замыслу агент никогда не пытается решить CAPTCHA самостоятельно.

Страница проверки Google, как она показана человеку

Что вы получаете

Компонент

Путь

Назначение

Ядро

src/search.mjs

Поиск Google через Chrome/CDP + проверка CAPTCHA + извлечение результатов

Движок страниц

src/fetch.mjs

Рендер любого URL + извлечение читаемого содержимого (Mozilla Readability) + search_and_fetch

MCP-сервер

src/server.mjs

Предоставляет search, fetch, search_and_fetch через stdio → нативные mcp__google__* в DSH

CLI

bin/google-search.mjs

dsh-google-search "<запрос>" и dsh-google-search fetch "<url>" для прямого использования

Навык

skill/SKILL.md

Обучает агента использованию + рабочий процесс проверки человеком

Related MCP server: browser-search-mcp

Требования

  • Node.js ≥ 18 (протестировано на Node 22)

  • Локальный бинарник Chrome/Chromium (например, google-chrome, chromium). Автоопределение из стандартных путей; можно переопределить через CHROME_PATH или --chrome.

  • Для шага видимой проверки нужен рабочий стол с дисплеем (чтобы окно Chrome можно было показать человеку). Headless/SSH по-прежнему может обнаружить CAPTCHA и сообщить о ней (со скриншотом).

Установка

git clone https://github.com/davidcastilloalvarado/dsh-google-chrome-search.git
cd dsh-google-chrome-search
npm install

Зависимости: puppeteer-core (управляет вашим Chrome — он не скачивает браузер), @modelcontextprotocol/sdk (для MCP-сервера), @mozilla/readability (извлечение содержимого) и zod (валидация схем).

При желании можно глобально связать CLI, чтобы он был в PATH:

npm link        # gives you: dsh-google-search "<query>"

Использование CLI

# Search:
node bin/google-search.mjs "nodejs streams" --max 8
# or, after npm install / npm link:
npm run search -- "nodejs streams" --json

# Search, then render + extract the top 3 result pages:
node bin/google-search.mjs "nodejs streams" --max 8 --fetch-top 3 --fetch-max-chars 8000

# Fetch one URL directly (render + extract readable content):
node bin/google-search.mjs fetch "https://nodejs.org/api/stream.html" --max-chars 8000

Коды выхода: 0 = успех (результаты / полученное содержимое), 2 = требуется проверка (CAPTCHA), 3 = нет результатов / получение заблокировано или не удалось, 1 = ошибка, 64 = использование.

Получение страницы (рендер + извлечение)

Плагин также может рендерить любой URL и извлекать его читаемое основное содержимое:

  • Запускает страницу в том же выделенном профиле Chrome (поэтому сайты, которые видят согласованный, доверенный отпечаток, ведут себя лучше).

  • Ждёт полной загрузки страницы (включая поздний SPA-контент).

  • Извлекает статью с помощью Mozilla Readability, выполняемой внутри живой страницы. Если на странице нет отдельной статьи, используется полный текст страницы.

  • Ограничение вывода (по умолчанию 8 000 символов на страницу), чтобы он оставался удобным для контекста агента.

  • Обнаруживает анти-бот стены и сообщает blocked вместо мусора. Когда сайт показывает вызов проверки человека (например, стена DataDome «slide to continue»), открывается видимое окно Chrome со страницей, ожидание до verifyTimeoutMs для прохождения человеком, затем извлекается реальное содержимое — та же философия «передать человеку», что и в потоке CAPTCHA Google. Доверенный сессионный cookie сохраняется в профиле, поэтому последующие страницы этого сайта обычно проходят headless. Используйте --no-verify / autoVerify: false, чтобы просто сообщить blocked.

dsh-google-search fetch "https://example.com/article" --max-chars 10000
dsh-google-search fetch "https://example.com/article" --html --screenshot

Два способа объединить поиск и чтение:

Что

Как

Поиск, затем чтение топ-N страниц одним вызовом

search_and_fetch (MCP) / --fetch-top N (CLI)

Поиск, затем чтение конкретного результата

search, затем fetch с выбранным URL

Страницы рендерятся последовательно (один браузер, одна страница за раз) — ожидайте ~1–3 с на страницу.

Использование как нативного инструмента DSH (MCP)

Зарегистрируйте MCP-сервер с @deepseek-ai/dsh-mcp-client в конфигурации вашего профиля (пример — скорректируйте пути command и args под ваше окружение):

- insert:
    - id: mcp-google
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: google
        transport: stdio
        command: /path/to/node
        args: [ /path/to/dsh-google-chrome-search/src/server.mjs ]
        env:
          CHROME_PATH: /usr/bin/google-chrome   # optional — auto-detected if unset
        toolCallTimeoutMs: 300000

После перезапуска DSH агент получает три нативных инструмента:

Инструмент

Что делает

mcp__google__search

Поиск в Google → ссылки + сниппеты

mcp__google__fetch

Рендер одного URL → извлечённое читаемое содержимое (заголовок, автор, текст, опционально HTML/скриншот)

mcp__google__search_and_fetch

Поиск → рендер топ-N страниц → извлечённое содержимое каждой страницы одним вызовом

Примечания:

  • Вызовы сериализуются (Chrome допускает один процесс на профиль), поэтому одновременные вызовы инструментов ставятся в очередь, а не выполняются параллельно.

  • search_and_fetch медленнее обычного поиска: держите toolCallTimeoutMs на 300000 (5 минут), как показано выше.

  • Поток проверки человеком применяется как к поиску Google (CAPTCHA), так и к страницам результатов, которые блокируют браузер (анти-бот слайдер): открывается видимое окно Chrome для человека, и сессия сохраняется в профиле после этого.

Использование как навыка DSH

skill/SKILL.md обучает агента выполнять поиск и обрабатывать передачу CAPTCHA человеку. Для установки скопируйте его в каталог навыков DSH, например:

mkdir -p ~/.dsh/skills/google-chrome-search
cp skill/SKILL.md ~/.dsh/skills/google-chrome-search/

Перед использованием/передачей на другой машине отредактируйте заполнитель <INSTALL_DIR> внутри SKILL.md, указав путь, куда вы клонировали этот репозиторий (или добавьте CLI через npm link в PATH — и всё заработает).

Конфигурация (env / параметры)

Параметр / Env

По умолчанию

Значение

chromePath / CHROME_PATH

автоопределение

Исполняемый файл Chrome

profileDir / GSEARCH_PROFILE

~/.dsh-chrome-google

Постоянный выделенный профиль Chrome (сохраняет «проверенные» cookie)

maxResults

8

Органические результаты для возврата (макс. 20)

verifyTimeoutMs

150000

Сколько ждать, пока человек решит CAPTCHA

autoVerify

true

Если false, никогда не открывать видимое окно — только сообщать

gl / hl

us / en

Регион / язык

maxChars

8000

Максимум извлечённых символов на полученную страницу (fetch / search_and_fetch)

fetchTop

3

Сколько страниц результатов рендерить в search_and_fetch (макс. 5)

includeHtml / screenshot

false

Параметры fetch: также возвращать извлечённый HTML / скриншот страницы

timeoutMs

20000

Таймаут навигации для каждой полученной страницы

Поток проверки человеком, шаг за шагом

  1. Chrome выполняет поиск в headless-режиме (выделенный изолированный профиль — никогда ваш реальный браузер).

  2. Если результаты есть → возвращаются (status: ok).

  3. Если Google показывает CAPTCHA:

    • Сделать скриншот.

    • Открыть видимое окно Chrome (тот же профиль) на странице проверки.

    • Ждать до verifyTimeoutMs, пока человек решит её, опрашивая страницу.

    • Если решено → извлечь и вернуть результаты (с флагом verifiedViaHuman: true). Если время истекло → вернуть status: verification_required с последним скриншотом.

  4. Проверенная сессия сохраняется в профиле, поэтому следующий поиск обычно проходит headless.

Тестирование

npm test

Запускает MCP-сервер, проверяет, что инструменты search, fetch и search_and_fetch перечислены, и — если на машине доступен бинарник Chrome — выполняет живой поиск с autoVerify: false. В средах без браузера (например, CI) живой вызов пропускается корректно.

Устранение неполадок

Симптом

Исправление

Could not find Chrome / ошибка запуска

Установите Chrome/Chromium или задайте CHROME_PATH / --chrome

Запуск от root в контейнере, ошибка песочницы

По умолчанию используется --no-sandbox (для изоляции); если нужна песочница, передайте noSandbox: false

CAPTCHA при каждом поиске

Сохраняйте выделенный профиль (~/.dsh-chrome-google) — его удаление сбрасывает «проверенные» cookie. IP дата-центров получают CAPTCHA чаще.

Нет видимого окна при SSH

Используйте машину с дисплеем или установите autoVerify: false и решите CAPTCHA вручную в контексте браузера на напечатанном скриншоте.

ECONNREFUSED / устаревшая блокировка в профиле

Закройте все экземпляры Chrome, использующие этот профиль, затем повторите (профиль отделён от вашего личного). Не запускайте два вызова CLI одновременно — один процесс на профиль.

fetch открывает окно со слайдером / «подтвердите, что вы человек»

Это шаг проверки человеком работает как задумано: пройдите проверку в окне, затем он повторит и сохранит сессию. --no-verify пропускает окно и просто сообщает blocked.

fetch возвращает blocked (без окна)

Сайт блокирует headless-браузеры, а autoVerify выключен (или нет дисплея). Попробуйте другой источник по той же теме или запустите с включённой проверкой.

fetch возвращает пустой текст

Страница сильно зависит от JS и не завершила рендеринг; повторите (устаканивается до ~7 с) или увеличьте --timeout.

Откат / очистка

  • Конфигурация: удалите запись mcp-google из конфигурации профиля DSH.

  • Навык: rm -rf ~/.dsh/skills/google-chrome-search

  • Профиль/скриншоты: rm -rf ~/.dsh-chrome-google

Лицензия

MIT

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
4Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/DavidCastilloAlvarado/dsh-google-chrome-search'

If you have feedback or need assistance with the MCP directory API, please join our Discord server