Web Search
Realiza búsquedas web y extrae el contenido completo de las páginas de los resultados de búsqueda.
Documentación
Servidor MCP Web Search para uso con LLMs locales
Un servidor MCP (Model Context Protocol) en TypeScript que proporciona capacidades completas de búsqueda web mediante conexiones directas (sin necesidad de claves API) con múltiples herramientas para diferentes casos de uso.
Características
- Búsqueda web multi-motor: Prioriza Bing > Brave > DuckDuckGo para una fiabilidad y rendimiento óptimos
- Extracción de contenido completo de páginas: Obtiene y extrae el contenido completo de las páginas de los resultados de búsqueda
- Múltiples herramientas de búsqueda: Tres herramientas especializadas para diferentes casos de uso
- Estrategia inteligente de solicitudes: Alterna entre navegadores de Playwright y solicitudes rápidas de axios para garantizar que se devuelvan resultados
- Procesamiento concurrente: Extrae contenido de múltiples páginas simultáneamente
Cómo funciona
El servidor proporciona tres herramientas especializadas para diferentes necesidades de búsqueda web:
1. full-web-search (Herramienta principal)
Cuando se solicita una búsqueda exhaustiva, el servidor utiliza una estrategia de búsqueda optimizada:
- Búsqueda en Bing mediante navegador - Método principal que utiliza una instancia dedicada de Chromium
- Búsqueda en Brave mediante navegador - Opción secundaria que utiliza una instancia dedicada de Firefox
- Búsqueda en DuckDuckGo con Axios - Último recurso mediante HTTP tradicional
- Aislamiento dedicado de navegadores: Cada motor de búsqueda tiene su propia instancia de navegador con limpieza automática
- Extracción de contenido: Intenta primero con axios y luego recurre al navegador con simulación de comportamiento humano
- Procesamiento concurrente: Extrae contenido de múltiples páginas simultáneamente con protección de tiempo de espera
- Recuperación de errores HTTP/2: Recurre automáticamente a HTTP/1.1 cuando se producen errores de protocolo
2. get-web-search-summaries (Alternativa ligera)
Para resultados de búsqueda rápidos sin extracción completa de contenido:
- Realiza la misma búsqueda optimizada multi-motor que
full-web-search - Devuelve solo los fragmentos/descripciones de los resultados de búsqueda
- No sigue los enlaces para extraer el contenido completo de la página
3. get-single-web-page-content (Herramienta de utilidad)
Para extraer contenido de una página web específica:
- Recibe una única URL como entrada
- Sigue la URL y extrae el contenido principal de la página
- Elimina la navegación, los anuncios y otros elementos que no son contenido
Compatibilidad
Este servidor MCP se ha desarrollado y probado con LM Studio y LibreChat. No se ha probado con otros clientes MCP.
Compatibilidad de modelos
Importante: Prioriza el uso de modelos más recientes diseñados para el uso de herramientas.
Los modelos más antiguos (incluso aquellos con uso de herramientas especificado) pueden no funcionar o funcionar de forma errática. Este parece ser el caso de Llama y Deepseek. Qwen3 y Gemma 3 ofrecen actualmente los mejores resultados.
- ✅ Funciona bien con: Qwen3
- ✅ Funciona bien con: Gemma 3
- ✅ Funciona con: Llama 3.2
- ✅ Funciona con: Llama 3.1 reciente (p. ej., 3.1 swallow-8B)
- ✅ Funciona con: Deepseek R1 reciente (p. ej., 0528 funciona)
- ⚠️ Puede tener problemas con: Algunas versiones de Llama y Deepseek R1
- ❌ Puede no funcionar con: Versiones antiguas de Llama y Deepseek R1
Instalación (Recomendada)
Requisitos:
- Node.js 18.0.0 o superior
- npm 8.0.0 o superior
-
Descarga el archivo zip de la última versión desde la página de Releases
-
Extrae el archivo zip a una ubicación de tu sistema (p. ej.,
~/mcp-servers/web-search-mcp/) -
Abre una terminal en la carpeta extraída y ejecuta:
npm install npx playwright install npm run buildEsto creará una carpeta
node_modulescon todas las dependencias necesarias, instalará los navegadores de Playwright y compilará el proyecto.Nota: Debes ejecutar
npm installen la raíz de la carpeta extraída (no endist/). -
Configura tu
mcp.jsonpara que apunte al archivodist/index.jsextraído:
{
"mcpServers": {
"web-search": {
"command": "node",
"args": ["/path/to/extracted/web-search-mcp/dist/index.js"]
}
}
}
Rutas de ejemplo:
- macOS/Linux:
~/mcp-servers/web-search-mcp/dist/index.js - Windows:
C:\\mcp-servers\\web-search-mcp\\dist\\index.js
En LibreChat, puedes incluir el servidor MCP en el archivo librechat.yaml. Si estás ejecutando LibreChat en Docker, primero debes montar tu directorio local en docker-compose.override.yml.
en docker-compose.override.yml:
services:
api:
volumes:
- type: bind
source: /path/to/your/mcp/directory
target: /app/mcp
en librechat.yaml:
mcpServers:
web-search:
type: stdio
command: node
args:
- /app/mcp/web-search-mcp/dist/index.js
serverInstructions: true
Solución de problemas:
- Si
npm installfalla, intenta actualizar Node.js a la versión 18+ y npm a la versión 8+ - Si
npm run buildfalla, asegúrate de tener instalada la última versión de Node.js - Para versiones antiguas de Node.js, es posible que necesites usar una versión anterior de este proyecto
- Problemas de longitud de contenido: Si experimentas un comportamiento extraño debido a los límites de longitud de contenido, intenta establecer
"MAX_CONTENT_LENGTH": "10000", u otro valor, en las variables de entorno de tumcp.json:
{
"mcpServers": {
"web-search": {
"command": "node",
"args": ["/path/to/web-search-mcp/dist/index.js"],
"env": {
"MAX_CONTENT_LENGTH": "10000",
"BROWSER_HEADLESS": "true",
"MAX_BROWSERS": "3",
"BROWSER_FALLBACK_THRESHOLD": "3"
}
}
}
}
Variables de entorno
El servidor admite varias variables de entorno para su configuración:
MAX_CONTENT_LENGTH: Longitud máxima de contenido en caracteres (predeterminado: 500000)DEFAULT_TIMEOUT: Tiempo de espera predeterminado para solicitudes en milisegundos (predeterminado: 6000)MAX_BROWSERS: Número máximo de instancias de navegador a mantener (predeterminado: 3)BROWSER_TYPES: Lista separada por comas de tipos de navegador a utilizar (predeterminado: 'chromium,firefox', opciones: chromium, firefox, webkit)BROWSER_FALLBACK_THRESHOLD: Número de fallos de axios antes de usar el navegador como respaldo (predeterminado: 3)
Calidad de búsqueda y selección de motor
ENABLE_RELEVANCE_CHECKING: Activar/desactivar la validación de calidad de los resultados de búsqueda (predeterminado: true)RELEVANCE_THRESHOLD: Puntuación mínima de calidad para los resultados de búsqueda (0.0-1.0, predeterminado: 0.3)FORCE_MULTI_ENGINE_SEARCH: Probar todos los motores de búsqueda y devolver los mejores resultados (predeterminado: false)DEBUG_BROWSER_LIFECYCLE: Activar el registro detallado del ciclo de vida del navegador para depuración (predeterminado: false)
Solución de problemas
Tiempos de respuesta lentos
- Tiempos de espera optimizados: El tiempo de espera predeterminado se ha reducido a 6 segundos con procesamiento concurrente para obtener resultados más rápidos
- Extracción concurrente: El contenido ahora se extrae de múltiples páginas simultáneamente
- Reduce aún más los tiempos de espera: Establece
DEFAULT_TIMEOUT=4000para respuestas aún más rápidas (puede reducir la tasa de éxito) - Usa menos navegadores: Establece
MAX_BROWSERS=1para reducir el uso de memoria
Fallos de búsqueda
- Comprueba la instalación del navegador: Ejecuta
npx playwright installpara asegurarte de que los navegadores estén disponibles - Prueba el modo sin interfaz gráfica: Asegúrate de que
BROWSER_HEADLESS=true(predeterminado) esté activado para entornos de servidor - Restricciones de red: Algunas redes bloquean la automatización del navegador: prueba con otra red o VPN
- Problemas de HTTP/2: El servidor maneja automáticamente los errores de protocolo HTTP/2 con respaldo a HTTP/1.1
Problemas de calidad de búsqueda
- Activa la comprobación de calidad: Establece
ENABLE_RELEVANCE_CHECKING=true(activado por defecto) - Ajusta el umbral de calidad: Establece
RELEVANCE_THRESHOLD=0.5para requisitos de calidad más estrictos - Fuerza la búsqueda multi-motor: Establece
FORCE_MULTI_ENGINE_SEARCH=truepara probar todos los motores y devolver los mejores resultados
Uso de memoria
- Limpieza automática: Los navegadores se limpian automáticamente después de cada operación para evitar fugas de memoria
- Limita los navegadores: Reduce
MAX_BROWSERS(predeterminado: 3) - Advertencias de EventEmitter: Corregido: los navegadores se cierran correctamente para evitar la acumulación de listeners
Para desarrollo
git clone https://github.com/mrkrsl/web-search-mcp.git
cd web-search-mcp
npm install
npx playwright install
npm run build
Desarrollo
npm run dev # Development with hot reload
npm run build # Build TypeScript to JavaScript
npm run lint # Run ESLint
npm run format # Run Prettier
Herramientas MCP
Este servidor proporciona tres herramientas especializadas para diferentes necesidades de búsqueda web:
1. full-web-search (Herramienta principal)
La herramienta de búsqueda web más completa que:
- Recibe una consulta de búsqueda y un número opcional de resultados (1-10, predeterminado 5)
- Realiza una búsqueda web (prueba Bing, luego Brave y luego DuckDuckGo si es necesario)
- Obtiene el contenido completo de la página de cada URL de resultado con procesamiento concurrente
- Devuelve datos estructurados con los resultados de búsqueda y el contenido extraído
- Fiabilidad mejorada: Recuperación de errores HTTP/2, tiempos de espera reducidos y mejor manejo de errores
Ejemplo de uso:
{
"name": "full-web-search",
"arguments": {
"query": "TypeScript MCP server",
"limit": 3,
"includeContent": true
}
}
2. get-web-search-summaries (Alternativa ligera)
Una alternativa ligera para resultados de búsqueda rápidos:
- Recibe una consulta de búsqueda y un número opcional de resultados (1-10, predeterminado 5)
- Realiza la misma búsqueda optimizada multi-motor que
full-web-search - Devuelve solo fragmentos/descripciones de los resultados de búsqueda (sin extracción de contenido)
- Más rápida y eficiente para investigaciones rápidas
Ejemplo de uso:
{
"name": "get-web-search-summaries",
"arguments": {
"query": "TypeScript MCP server",
"limit": 5
}
}
3. get-single-web-page-content (Herramienta de utilidad)
Una herramienta de utilidad para extraer contenido de una página web específica:
- Recibe una única URL como entrada
- Sigue la URL y extrae el contenido principal de la página
- Elimina la navegación, los anuncios y otros elementos que no son contenido
- Útil para obtener contenido detallado de una página web conocida
Ejemplo de uso:
{
"name": "get-single-web-page-content",
"arguments": {
"url": "https://example.com/article",
"maxContentLength": 5000
}
}
Uso independiente
También puedes ejecutar el servidor directamente:
# If running from source
npm start
Documentación
Consulta API.md para obtener detalles técnicos completos.
Licencia
Licencia MIT: consulta LICENSE para obtener más detalles.
Comentarios
Este es un proyecto de código abierto y agradecemos tus comentarios. Si encuentras algún problema o tienes sugerencias de mejora, por favor:
- Abre un issue en GitHub
- Envía un pull request