Web Search MCP Server: Búsqueda Web Local de LLM sin Claves API
Servidor Web Search MCP
Un Servidor Web Search MCP es un servidor MCP (Modelo de Protocolo de Contexto) ligero basado en TypeScript que brinda capacidades de búsqueda web en tiempo real y en local a los LLMs alojados localmente. Elimina la necesidad de APIs pagas al conectarse directamente a motores de búsqueda populares—Bing, Brave y DuckDuckGo—y extraer contenido completo de las páginas o fragmentos ligeros.
Por qué usarlo?
| Requisito | Por qué importa |
|---|---|
| Sin claves API | Muchas implementaciones de LLM evitan costos externos y latencia potencial. |
| Estrategia multi‑motor | Cambia de motor cuando falla otro. |
| Extracción de página completa | Obtiene el artículo completo para un contexto de alta calidad. |
| Procesamiento concurrente | Recupera múltiples resultados en paralelo, reduciendo el tiempo total de espera. |
| Soporte Playwright | Simula navegación humana para evitar detección de bots. |
| Configurable vía variables de entorno | Ajusta timeout, recuento de navegadores y umbrales de relevancia sin tocar el código. |
Instalación Rápida
# 1. Clonar el repositorio
git clone https://github.com/mrkrsl/web-search-mcp.git
cd web-search-mcp
# 2. Instalar Node.js v18+ y npm v8+
# (Usa instaladores oficiales o nvm para gestionar versiones.)
# 3. Instalar dependencias y navegadores Playwright
npm install
npx playwright install
# 4. Compilar el código TypeScript
npm run build
# 5. Ejecutar el servidor (modo desarrollo)
npm start # o "npm run dev" para recarga en caliente
Consejo: En Windows, reemplaza las barras inclinadas y usa comandos de PowerShell.
Configuración
Crea o edita mcp.json en la raíz de tu proyecto (o cualquier ubicación que prefieras) para indicar a tu cliente MCP dónde encontrar el binario del servidor.
{
"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"
}
}
}
}
command– típicamentenode.args– ruta absoluta adist/index.js.env– variables de entorno opcionales para afinar parámetros.
Variables de entorno comunes
| Variable | Valor por defecto | Propósito |
|---|---|---|
MAX_CONTENT_LENGTH |
500000 |
Máximo de caracteres a devolver de la extracción de página. |
DEFAULT_TIMEOUT |
6000 |
Tiempo de espera de la solicitud en milisegundos. |
MAX_BROWSERS |
3 |
Máximo de instancias de navegador concurrentes. |
BROWSER_TYPES |
chromium,firefox |
Los navegadores a lanzar. |
ENABLE_RELEVANCE_CHECKING |
true |
Activa la puntuación de calidad de búsqueda. |
RELEVANCE_THRESHOLD |
0.3 |
Puntaje mínimo de calidad. |
FORCE_MULTI_ENGINE_SEARCH |
false |
Obliga a consultar todos los motores incluso si uno responde. |
Visión General de la Herramienta MCP
El servidor expone tres herramientas distintas que pueden ser llamadas a través de cualquier cliente compatible con MCP (LM Studio, LibreChat, o tu propia aplicación).
1. full-web-search
| Característica | Detalle |
|---|---|
| Lógica de búsqueda | Prioriza Bing → Brave → DuckDuckGo. |
| Carga útil del resultado | Array de objetos con url, title, description, y opcionalmente content. |
| Personalización | limit (1‑10), includeContent (booleano). |
Ejemplo de solicitud
{
"name": "full-web-search",
"arguments": {
"query": "TypeScript MCP server",
"limit": 3,
"includeContent": true
}
}
2. get-web-search-summaries
Misma estrategia de búsqueda que full-web-search pero devuelve solo los fragmentos/descripciones—sin contenido completo de la página. Ideal para búsquedas rápidas o cuando el ancho de banda es limitado.
Ejemplo de solicitud
{
"name": "get-web-search-summaries",
"arguments": {
"query": "best TypeScript web search",
"limit": 5
}
}
3. get-single-web-page-content
Útil cuando ya conoces la URL deseada y solo necesitas el contenido principal.
Ejemplo de solicitud
{
"name": "get-single-web-page-content",
"arguments": {
"url": "https://example.com/article.html",
"maxContentLength": 5000
}
}
Usándolo con un Cliente LLM Local
A continuación se muestra un ejemplo minimalista para integrar el servidor en una configuración de LibreChat.
# librechat.yaml
mcpServers:
web-search:
type: stdio
command: node
args:
- /app/mcp/web-search-mcp/dist/index.js
env:
MAX_CONTENT_LENGTH: "10000"
serverInstructions: true
En un mensaje de chat:
{{{ full-web-search(query="nodejs web search", limit=5, includeContent=true) }}}
El LLM recibirá el JSON estructurado con URLs, títulos, descripciones y contenido completo, que se puede usar como contexto para la generación.
Consejos de rendimiento
| Ajuste | Por qué ayuda |
|---|---|
DEFAULT_TIMEOUT = 4000 |
Fallos más rápidos en redes lentas; reduce tiempo total de ida y vuelta. |
MAX_BROWSERS = 1 |
Reduce el consumo de memoria; útil en entornos con pocos recursos. |
BROWSER_HEADLESS = true |
Elimina el sobrecoste de renderizado en modo sin cabeza. |
RELEVANCE_THRESHOLD = 0.5 |
Filtro más estricto para obtener resultados de mayor calidad. |
Recuerda: Ajustar estos valores depende de tu red, CPU y el tamaño de las peticiones LLM.
Solución de problemas
| Síntoma | Causa Posible | Solución |
|---|---|---|
npm install falla |
Node/NPM desactualizados | Actualiza a Node 18+ y NPM 8+ |
| La instalación del navegador se queda colgada | Restricciones de proxy/red | Ejecuta npx playwright install --with-deps detrás de VPN o configura proxies |
| Resultados de búsqueda vacíos | Motor bloqueado | Incrementa BROWSER_FALLBACK_THRESHOLD o activa FORCE_MULTI_ENGINE_SEARCH |
| Memoria insuficiente | Demasiados navegadores | Reduce MAX_BROWSERS |
Errores inesperados HTTP/2 |
Problema de soporte de protocolo | El servidor cambia automáticamente; asegúrate de que BROWSER_HEADLESS=true |
Ampliando el Servidor
El código es modular. Se pueden añadir nuevas herramientas fácilmente:
- Crea un archivo bajo
src/tools/implementando una funciónrun. - Expórtalo en
src/index.ts. - Actualiza
package.jsonymcp.jsonsi es necesario.
Consejo: Aprovecha la validación de esquemas zod ya presente para garantizar los argumentos.
Licencia
El proyecto está licenciado bajo la Licencia MIT. Siéntete libre de bifurcar, modificar e incorporar en tus propias tuberías.
Conclusiones
El Servidor Web Search MCP cierra una brecha significativa para los desarrolladores de LLMs locales: navegación web instantánea y sin API. Combinando varios motores de búsqueda, extracción de contenido sofisticada e interfaz MCP limpia, ofrece tanto profundidad (contenido completo) como velocidad (modo resumen) en un solo repositorio. Ya sea que desarrolles un asistente de investigación pequeño o un chatbot de producción, esta herramienta brinda a tu LLM el conocimiento actualizado que necesita sin costos externos.
¡Feliz búsqueda!