Web Search

Realiza pesquisas na web e extrai o conteúdo completo das páginas dos resultados de busca.

Documentação

Servidor MCP Web Search para uso com LLMs Locais

Um servidor MCP (Model Context Protocol) em TypeScript que fornece capacidades abrangentes de pesquisa na web usando conexões diretas (sem necessidade de chaves de API) com múltiplas ferramentas para diferentes casos de uso.

Recursos

  • Pesquisa Web Multi-Mecanismo: Prioriza Bing > Brave > DuckDuckGo para confiabilidade e desempenho ideais
  • Extração Completa de Conteúdo de Página: Busca e extrai o conteúdo completo das páginas dos resultados de pesquisa
  • Múltiplas Ferramentas de Pesquisa: Três ferramentas especializadas para diferentes casos de uso
  • Estratégia Inteligente de Requisições: Alterna entre navegadores playwright e requisições axios rápidas para garantir que os resultados sejam retornados
  • Processamento Concorrente: Extrai conteúdo de múltiplas páginas simultaneamente

Como Funciona

O servidor fornece três ferramentas especializadas para diferentes necessidades de pesquisa na web:

1. full-web-search (Ferramenta Principal)

Quando uma pesquisa abrangente é solicitada, o servidor usa uma estratégia de pesquisa otimizada:

  1. Pesquisa Bing baseada em navegador - Método principal usando instância dedicada do Chromium
  2. Pesquisa Brave baseada em navegador - Opção secundária usando instância dedicada do Firefox
  3. Pesquisa DuckDuckGo via Axios - Fallback final usando HTTP tradicional
  4. Isolamento dedicado de navegador: Cada mecanismo de pesquisa recebe sua própria instância de navegador com limpeza automática
  5. Extração de conteúdo: Tenta axios primeiro, depois recorre ao navegador com simulação de comportamento humano
  6. Processamento concorrente: Extrai conteúdo de múltiplas páginas simultaneamente com proteção de timeout
  7. Recuperação de erros HTTP/2: Alterna automaticamente para HTTP/1.1 quando ocorrem erros de protocolo

2. get-web-search-summaries (Alternativa Leve)

Para resultados de pesquisa rápidos sem extração completa de conteúdo:

  1. Realiza a mesma pesquisa multi-mecanismo otimizada que full-web-search
  2. Retorna apenas os trechos/descrições dos resultados de pesquisa
  3. Não segue links para extrair o conteúdo completo da página

3. get-single-web-page-content (Ferramenta Utilitária)

Para extrair conteúdo de uma página web específica:

  1. Recebe uma única URL como entrada
  2. Segue a URL e extrai o conteúdo principal da página
  3. Remove navegação, anúncios e outros elementos que não são conteúdo

Compatibilidade

Este servidor MCP foi desenvolvido e testado com LM Studio e LibreChat. Não foi testado com outros clientes MCP.

Compatibilidade de Modelos

Importante: Priorize o uso de modelos mais recentes designados para uso de ferramentas.

Modelos mais antigos (mesmo aqueles com uso de ferramentas especificado) podem não funcionar ou funcionar de forma errática. Este parece ser o caso com Llama e Deepseek. Qwen3 e Gemma 3 atualmente têm os melhores resultados.

  • ✅ Funciona bem com: Qwen3
  • ✅ Funciona bem com: Gemma 3
  • ✅ Funciona com: Llama 3.2
  • ✅ Funciona com: Llama 3.1 recente (ex: 3.1 swallow-8B)
  • ✅ Funciona com: Deepseek R1 recente (ex: 0528 funciona)
  • ⚠️ Pode ter problemas com: Algumas versões de Llama e Deepseek R1
  • ❌ Pode não funcionar com: Versões mais antigas de Llama e Deepseek R1

Instalação (Recomendada)

Requisitos:

  • Node.js 18.0.0 ou superior
  • npm 8.0.0 ou superior
  1. Baixe o arquivo zip da versão mais recente na página de Releases

  2. Extraia o arquivo zip para um local no seu sistema (ex: ~/mcp-servers/web-search-mcp/)

  3. Abra um terminal na pasta extraída e execute:

    npm install
    npx playwright install
    npm run build
    

    Isso criará uma pasta node_modules com todas as dependências necessárias, instalará os navegadores Playwright e compilará o projeto.

    Nota: Você deve executar npm install na raiz da pasta extraída (não em dist/).

  4. Configure seu mcp.json para apontar para o arquivo dist/index.js extraído:

{
  "mcpServers": {
    "web-search": {
      "command": "node",
      "args": ["/path/to/extracted/web-search-mcp/dist/index.js"]
    }
  }
}

Caminhos de exemplo:

  • macOS/Linux: ~/mcp-servers/web-search-mcp/dist/index.js
  • Windows: C:\\mcp-servers\\web-search-mcp\\dist\\index.js

No LibreChat, você pode incluir o servidor MCP no librechat.yaml. Se você estiver executando o LibreChat no Docker, deve primeiro montar seu diretório local no docker-compose.override.yml.

em docker-compose.override.yml:

services:
  api:
    volumes:
    - type: bind
      source: /path/to/your/mcp/directory
      target: /app/mcp

em librechat.yaml:

mcpServers:
  web-search:
    type: stdio
    command: node
    args:
    - /app/mcp/web-search-mcp/dist/index.js
    serverInstructions: true

Solução de problemas:

  • Se npm install falhar, tente atualizar o Node.js para a versão 18+ e o npm para a versão 8+
  • Se npm run build falhar, certifique-se de ter a versão mais recente do Node.js instalada
  • Para versões mais antigas do Node.js, você pode precisar usar uma versão mais antiga deste projeto
  • Problemas de Comprimento de Conteúdo: Se você tiver comportamento estranho devido aos limites de comprimento de conteúdo, tente definir "MAX_CONTENT_LENGTH": "10000", ou outro valor, nas variáveis de ambiente do seu mcp.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"
      }
    }
  }
}

Variáveis de Ambiente

O servidor suporta várias variáveis de ambiente para configuração:

  • MAX_CONTENT_LENGTH: Comprimento máximo de conteúdo em caracteres (padrão: 500000)
  • DEFAULT_TIMEOUT: Timeout padrão para requisições em milissegundos (padrão: 6000)
  • MAX_BROWSERS: Número máximo de instâncias de navegador a manter (padrão: 3)
  • BROWSER_TYPES: Lista separada por vírgulas de tipos de navegador a usar (padrão: 'chromium,firefox', opções: chromium, firefox, webkit)
  • BROWSER_FALLBACK_THRESHOLD: Número de falhas do axios antes de usar o fallback do navegador (padrão: 3)

Qualidade de Pesquisa e Seleção de Mecanismo

  • ENABLE_RELEVANCE_CHECKING: Ativar/desativar validação de qualidade dos resultados de pesquisa (padrão: true)
  • RELEVANCE_THRESHOLD: Pontuação mínima de qualidade para resultados de pesquisa (0.0-1.0, padrão: 0.3)
  • FORCE_MULTI_ENGINE_SEARCH: Tentar todos os mecanismos de pesquisa e retornar os melhores resultados (padrão: false)
  • DEBUG_BROWSER_LIFECYCLE: Ativar registro detalhado do ciclo de vida do navegador para depuração (padrão: false)

Solução de Problemas

Tempos de Resposta Lentos

  • Timeouts otimizados: Timeout padrão reduzido para 6 segundos com processamento concorrente para resultados mais rápidos
  • Extração concorrente: O conteúdo agora é extraído de múltiplas páginas simultaneamente
  • Reduza ainda mais os timeouts: Defina DEFAULT_TIMEOUT=4000 para respostas ainda mais rápidas (pode reduzir a taxa de sucesso)
  • Use menos navegadores: Defina MAX_BROWSERS=1 para reduzir o uso de memória

Falhas de Pesquisa

  • Verifique a instalação do navegador: Execute npx playwright install para garantir que os navegadores estejam disponíveis
  • Tente o modo headless: Certifique-se de BROWSER_HEADLESS=true (padrão) para ambientes de servidor
  • Restrições de rede: Algumas redes bloqueiam automação de navegador - tente uma rede diferente ou VPN
  • Problemas de HTTP/2: O servidor lida automaticamente com erros de protocolo HTTP/2 com fallback para HTTP/1.1

Problemas de Qualidade de Pesquisa

  • Ative a verificação de qualidade: Defina ENABLE_RELEVANCE_CHECKING=true (ativado por padrão)
  • Ajuste o limite de qualidade: Defina RELEVANCE_THRESHOLD=0.5 para requisitos de qualidade mais rigorosos
  • Force a pesquisa multi-mecanismo: Defina FORCE_MULTI_ENGINE_SEARCH=true para tentar todos os mecanismos e retornar os melhores resultados

Uso de Memória

  • Limpeza automática: Os navegadores são limpos automaticamente após cada operação para evitar vazamentos de memória
  • Limite os navegadores: Reduza MAX_BROWSERS (padrão: 3)
  • Avisos do EventEmitter: Corrigido - os navegadores são fechados corretamente para evitar acúmulo de listeners

Para Desenvolvimento

git clone https://github.com/mrkrsl/web-search-mcp.git
cd web-search-mcp
npm install
npx playwright install
npm run build

Desenvolvimento

npm run dev    # Development with hot reload
npm run build  # Build TypeScript to JavaScript
npm run lint   # Run ESLint
npm run format # Run Prettier

Ferramentas MCP

Este servidor fornece três ferramentas especializadas para diferentes necessidades de pesquisa na web:

1. full-web-search (Ferramenta Principal)

A ferramenta de pesquisa web mais abrangente que:

  1. Recebe uma consulta de pesquisa e um número opcional de resultados (1-10, padrão 5)
  2. Realiza uma pesquisa web (tenta Bing, depois Brave, depois DuckDuckGo se necessário)
  3. Busca o conteúdo completo da página de cada URL de resultado com processamento concorrente
  4. Retorna dados estruturados com resultados de pesquisa e conteúdo extraído
  5. Confiabilidade aprimorada: Recuperação de erros HTTP/2, timeouts reduzidos e melhor tratamento de erros

Exemplo de Uso:

{
  "name": "full-web-search",
  "arguments": {
    "query": "TypeScript MCP server",
    "limit": 3,
    "includeContent": true
  }
}

2. get-web-search-summaries (Alternativa Leve)

Uma alternativa leve para resultados de pesquisa rápidos:

  1. Recebe uma consulta de pesquisa e um número opcional de resultados (1-10, padrão 5)
  2. Realiza a mesma pesquisa multi-mecanismo otimizada que full-web-search
  3. Retorna apenas trechos/descrições dos resultados de pesquisa (sem extração de conteúdo)
  4. Mais rápido e eficiente para pesquisas rápidas

Exemplo de Uso:

{
  "name": "get-web-search-summaries",
  "arguments": {
    "query": "TypeScript MCP server",
    "limit": 5
  }
}

3. get-single-web-page-content (Ferramenta Utilitária)

Uma ferramenta utilitária para extrair conteúdo de uma página web específica:

  1. Recebe uma única URL como entrada
  2. Segue a URL e extrai o conteúdo principal da página
  3. Remove navegação, anúncios e outros elementos que não são conteúdo
  4. Útil para obter conteúdo detalhado de uma página web conhecida

Exemplo de Uso:

{
  "name": "get-single-web-page-content",
  "arguments": {
    "url": "https://example.com/article",
    "maxContentLength": 5000
  }
}

Uso Autônomo

Você também pode executar o servidor diretamente:

# If running from source
npm start

Documentação

Consulte API.md para detalhes técnicos completos.

Licença

Licença MIT - consulte LICENSE para detalhes.

Feedback

Este é um projeto de código aberto e recebemos feedback com prazer! Se você encontrar problemas ou tiver sugestões de melhorias, por favor:

  • Abra uma issue no GitHub
  • Envie um pull request