Skip to main content
Glama
DavidCastilloAlvarado

dsh-google-chrome-search

dsh-google-chrome-search

CI license: MIT node: >=18

Un plugin de DeepSeek Harness (DSH) que permite a un agente de IA ejecutar una búsqueda web real en Google manejando el Chrome local a través de CDP (Chrome DevTools Protocol), y renderizar cualquier página para extraer su contenido. No se necesita clave de API de búsqueda — funciona con el Chrome ya instalado en la máquina.

Google sirve con frecuencia una página de verificación humana (CAPTCHA / "tráfico inusual") para el tráfico automatizado y de centros de datos. Cuando eso ocurre, este plugin abre una ventana visible de Chrome apuntando a la página de verificación, espera a que el humano la resuelva, y luego extrae los resultados de la sesión ya confiable. Ese es el paso de "preguntar al humano" — por diseño, el agente nunca intenta resolver un CAPTCHA por sí mismo.

La página de verificación de Google, tal como se muestra al humano

Qué obtienes

Pieza

Ruta

Propósito

Motor central

src/search.mjs

Búsqueda en Google con Chrome/CDP + verificación CAPTCHA + extracción de resultados

Motor de página

src/fetch.mjs

Renderizar cualquier URL + extraer contenido legible (Mozilla Readability) + search_and_fetch

Servidor MCP

src/server.mjs

Expone search, fetch, search_and_fetch sobre stdio → nativo mcp__google__* en DSH

CLI

bin/google-search.mjs

dsh-google-search "<consulta>" y dsh-google-search fetch "<url>" para uso directo

Skill

skill/SKILL.md

Enseña al agente cómo usarlo + el flujo de verificación humana

Related MCP server: browser-search-mcp

Requisitos

  • Node.js ≥ 18 (probado en Node 22)

  • Un binario local de Chrome/Chromium (p. ej. google-chrome, chromium). Se detecta automáticamente desde rutas comunes; se puede sobrescribir con CHROME_PATH o --chrome.

  • Para el paso de verificación visible, se necesita una sesión de escritorio con pantalla (para que la ventana de Chrome pueda mostrarse al humano). Headless/SSH aún pueden detectar el CAPTCHA e informarlo (con una captura de pantalla).

Instalación

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

Dependencias: puppeteer-core (maneja tu Chrome — no descarga un navegador), @modelcontextprotocol/sdk (para el servidor MCP), @mozilla/readability (extracción de contenido), y zod (validación de esquemas).

Opcionalmente, enlaza el CLI globalmente para que esté en PATH:

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

Usar el 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

Códigos de salida: 0 = éxito (resultados / contenido obtenido), 2 = se requiere verificación (CAPTCHA), 3 = sin resultados / obtención bloqueada o fallida, 1 = error, 64 = uso.

Obtener una página (renderizar + extraer)

El plugin también puede renderizar cualquier URL y extraer su contenido principal legible:

  • Ejecuta la página en el mismo perfil de Chrome dedicado (para que los sitios que ven una huella consistente y confiable se comporten mejor).

  • Espera a que la página cargue por completo (incluido el contenido SPA tardío).

  • Extrae el artículo con Mozilla Readability, ejecutado dentro de la página viva. Si la página no tiene un artículo distintivo, recurre al texto completo de la página.

  • Salida limitada (por defecto 8,000 caracteres por página) para que sea amigable con el contexto del agente.

  • Detecta muros anti-bot e informa blocked en lugar de devolver basura. Cuando un sitio sirve un desafío de verificación humana (p. ej. el muro de "deslizar para continuar" de DataDome), abre una ventana visible de Chrome con la página, espera hasta verifyTimeoutMs a que el humano la pase, y luego extrae el contenido real — la misma filosofía de mano al humano que el flujo de CAPTCHA de Google. La cookie de sesión confiable persiste en el perfil, por lo que las páginas posteriores de ese sitio suelen pasar headless. Usa --no-verify / autoVerify: false para simplemente informar blocked en su lugar.

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

Dos formas de combinar búsqueda y lectura:

Qué

Cómo

Buscar y luego leer las N páginas principales en una llamada

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

Buscar y luego leer un resultado específico

search, luego fetch con la URL elegida

Las páginas se renderizan secuencialmente (un navegador, una página a la vez) — espera ~1–3 s por página.

Usarlo como herramienta nativa de DSH (MCP)

Registra el servidor MCP con el @deepseek-ai/dsh-mcp-client de DSH en tu configuración de perfil (ejemplo — ajusta las rutas de command y args a tu entorno):

- 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

Después de reiniciar DSH, el agente obtiene tres herramientas nativas:

Herramienta

Qué hace

mcp__google__search

Búsqueda web en Google → enlaces + fragmentos

mcp__google__fetch

Renderizar una URL → contenido legible extraído (título, autor, texto, HTML/captura opcional)

mcp__google__search_and_fetch

Buscar → renderizar las N páginas principales → contenido extraído por página en una llamada

Notas:

  • Las llamadas están serializadas (Chrome permite un proceso por perfil), por lo que las llamadas de herramientas concurrentes se ponen en cola en lugar de ejecutarse en paralelo.

  • search_and_fetch es más lento que la búsqueda simple: mantén toolCallTimeoutMs en 300000 (5 min) como se muestra arriba.

  • El flujo de verificación humana se aplica tanto a la búsqueda de Google (CAPTCHA) como a las páginas de resultados que bloquean el navegador (deslizador anti-bot): se abre una ventana visible de Chrome para el humano, y la sesión persiste en el perfil después.

Usarlo como skill de DSH

skill/SKILL.md enseña al agente cómo ejecutar la búsqueda y cómo manejar la entrega del CAPTCHA al humano. Para instalarlo, cópialo en tu directorio de skills de DSH, p. ej.:

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

Antes de compartirlo/usarlo en otra máquina, edita el marcador <INSTALL_DIR> dentro de SKILL.md para que apunte a donde clonaste este repositorio (o pon el CLI de npm link en PATH y funcionará directamente).

Configuración (env / opciones)

Opción / Env

Por defecto

Significado

chromePath / CHROME_PATH

auto-detección

Ejecutable de Chrome

profileDir / GSEARCH_PROFILE

~/.dsh-chrome-google

Perfil de Chrome persistente y dedicado (mantiene las cookies "verificadas")

maxResults

8

Resultados orgánicos a devolver (máx. 20)

verifyTimeoutMs

150000

Cuánto tiempo esperar a que el humano resuelva un CAPTCHA

autoVerify

true

Si es false, nunca abrir una ventana visible — solo informar

gl / hl

us / en

Región / idioma

maxChars

8000

Máximo de caracteres extraídos por página obtenida (fetch / search_and_fetch)

fetchTop

3

Cuántas páginas de resultados renderizar en search_and_fetch (máx. 5)

includeHtml / screenshot

false

Opciones de fetch: también devolver HTML extraído / una captura de pantalla

timeoutMs

20000

Tiempo de espera de navegación por página obtenida

El flujo de verificación humana, paso a paso

  1. Chrome ejecuta la búsqueda en modo headless (un perfil dedicado y aislado — nunca tu navegador real).

  2. Si hay resultados presentes → devuélvelos (status: ok).

  3. Si Google sirve un CAPTCHA:

    • Toma una captura de pantalla.

    • Abre una ventana visible de Chrome (mismo perfil) en la página de verificación.

    • Espera hasta verifyTimeoutMs a que el humano lo resuelva, sondeando la página.

    • Si se resuelve → extrae y devuelve los resultados (marcados verifiedViaHuman: true). Si se agota el tiempo → devuelve status: verification_required con la última captura.

  4. La sesión verificada persiste en el perfil, por lo que la siguiente búsqueda suele tener éxito en headless.

Pruebas

npm test

Inicia el servidor MCP, comprueba que las herramientas search, fetch y search_and_fetch estén listadas y, si hay un binario de Chrome disponible en la máquina, realiza una búsqueda en vivo con autoVerify: false. En entornos sin navegador (p. ej. CI), la llamada en vivo se omite con elegancia.

Solución de problemas

Síntoma

Solución

Could not find Chrome / error de lanzamiento

Instala Chrome/Chromium o establece CHROME_PATH / --chrome

Se ejecuta como root en un contenedor, error de sandbox

El valor predeterminado es --no-sandbox (para aislamiento); si quieres el sandbox activado, pasa noSandbox: false

CAPTCHA en cada búsqueda

Mantén el perfil dedicado (~/.dsh-chrome-google) — eliminarlo restablece las cookies "verificadas". Las IP de centros de datos reciben CAPTCHAs con más frecuencia.

No aparece ninguna ventana visible en SSH

Usa una máquina con pantalla, o establece autoVerify: false y resuelve el CAPTCHA manualmente en el contexto del navegador de la captura impresa.

ECONNREFUSED / bloqueo obsoleto en el perfil

Cierra todas las instancias de Chrome que usen ese perfil y vuelve a intentarlo (el perfil es separado del personal). No ejecutes dos llamadas CLI a la vez — un proceso por perfil.

fetch abre una ventana con un deslizador / "confirma que eres humano"

Eso es el paso de verificación humana funcionando como se espera: pasa el desafío en la ventana, luego reintenta y mantiene la sesión. --no-verify omite la ventana y solo informa blocked.

fetch devuelve blocked (sin ventana)

El sitio bloquea los navegadores headless y autoVerify está desactivado (o no hay pantalla). Prueba con otra fuente para el mismo tema, o ejecuta con verificación habilitada.

fetch devuelve texto vacío

La página es muy dependiente de JS y no había terminado de renderizar; reintenta (se estabiliza en hasta ~7 s), o aumenta --timeout.

Revertir / limpiar

  • Configuración: elimina la entrada mcp-google de tu configuración de perfil de DSH.

  • Skill: rm -rf ~/.dsh/skills/google-chrome-search

  • Perfil/capturas: rm -rf ~/.dsh-chrome-google

Licencia

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