Web Search MCP
Extrai resultados de pesquisa do Google usando um navegador headless. Requer que o Chrome esteja instalado.
Documentação
Web Search MCP
Um servidor Model Context Protocol (MCP) que fornece funcionalidade de busca na web ao extrair resultados de pesquisa do Google, DuckDuckGo e Bing por meio de um navegador headless.
Recursos
- Busca Multi-Mecanismo: Pesquisa no Google, DuckDuckGo e Bing com fallback automático quando um mecanismo é bloqueado ou não retorna nada
- Resultados Estruturados: Títulos, URLs, domínios, trechos e classificações — com URLs de redirecionamento desembrulhadas para seus destinos reais
- Conteúdo de Páginas Web: Busca e extrai conteúdo de texto de qualquer página web
- Backends de Navegador Plugáveis: Selenium + Chrome headless (padrão) ou o navegador headless leve Obscura, selecionado por meio de uma variável de ambiente
- Compatível com MCP: Totalmente compatível com Claude Desktop e outros clientes MCP
Ferramentas Disponíveis
search_web
Pesquisa na web em vários mecanismos (Google → DuckDuckGo → Bing) com fallback automático e retorna resultados estruturados.
Parâmetros:
query(string): A string de consulta de pesquisamax_results(int, opcional): Número máximo de resultados a retornar (padrão: 10, máximo: 100)include_snippets(bool, opcional): Se deve incluir trechos de texto (padrão: true)
Retorna:
- Lista de resultados de pesquisa com:
title: Título da páginaurl: URL completa (wrappers de redirecionamento resolvidos para o destino real)domain: Nome do domíniosnippet: Trecho de texto (se habilitado)rank: Classificação do resultado de pesquisasource_engine: Qual mecanismo produziu o resultado (google,duckduckgooubing)
get_webpage_content
Busca e retorna o conteúdo de texto de uma página web.
Parâmetros:
url(string): A URL da página web a ser buscadamax_length(int, opcional): Comprimento máximo do conteúdo (padrão: 5000, máximo: 20000)
Retorna:
- Dicionário com:
url: A URL solicitadatitle: Título da páginacontent: Conteúdo de texto extraídolength: Comprimento do conteúdo em caracteres
get_search_engine_status
Informa o backend de navegador ativo e a disponibilidade de cada mecanismo de pesquisa.
Retorna:
- Dicionário com uma chave
backend(seleniumouobscura) além de cada nome de mecanismo mapeado paraavailableoublocked.
reset_search_engines
Limpa a lista de mecanismos marcados como bloqueados durante a sessão (útil se um mecanismo se recuperar).
Retorna:
- Uma mensagem de status em string.
Instalação
-
Instale as dependências:
# Using uv (recommended) uv sync # Or using pip pip install -e . -
Instale um backend de navegador (escolha um):
-
Selenium (padrão) — requer Chrome:
- No macOS:
brew install --cask google-chrome - No Ubuntu:
sudo apt-get install google-chrome-stable - No Windows: Baixe do site do Google Chrome
O ChromeDriver é baixado e gerenciado automaticamente pelo webdriver-manager.
- No macOS:
-
Obscura — não requer Chrome. Veja a seção Backends de Navegador abaixo.
-
Uso
Executando o Servidor MCP
# Run directly
python main.py
# Or using the installed script
web-search-mcp
O servidor iniciará e aguardará conexões MCP.
Usando com Claude Desktop
Adicione esta configuração às configurações MCP do seu Claude Desktop:
{
"mcpServers": {
"web-search-mcp": {
"command": "uvx",
"args": ["git+https://github.com/pranavms13/web-search-mcp"]
}
}
}
Exemplo de Uso no Claude
Uma vez conectado, você pode usar as ferramentas assim:
Search for "python web scraping tutorials" and show me the top 5 results.
Get the content from this webpage: https://example.com/article
Configuração
O buscador web usa estas opções de Chrome por padrão:
- Modo headless (sem janela de navegador visível)
- Tamanho da janela: 1920x1080
- User agent: Navegador Chrome moderno
- Flags de segurança para execução em contêineres
Backends de Navegador
O servidor pode renderizar páginas com um de dois backends intercambiáveis, selecionados por meio da variável de ambiente BROWSER_BACKEND:
| Backend | Valor | Notas |
|---|---|---|
| Selenium | selenium (padrão) | Chrome headless via Selenium + webdriver-manager. |
| Obscura | obscura | Navegador headless Obscura via sua CLI. Leve, furtivo, sem necessidade de Chrome. |
Ambos os backends produzem HTML totalmente renderizado por JS, que é então analisado com BeautifulSoup, portanto os resultados de pesquisa são idênticos em forma, independentemente do backend.
Usando Obscura
-
Instale o binário do Obscura (veja seus releases), por exemplo no macOS:
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-macos.tar.gz tar xzf obscura-x86_64-macos.tar.gz -
Execute o servidor com Obscura selecionado:
BROWSER_BACKEND=obscura web-search-mcp
Se obscura não estiver no seu PATH, aponte para ele explicitamente com OBSCURA_BIN=/full/path/to/obscura. Quando o binário não puder ser encontrado, o servidor registra um aviso e volta automaticamente para o backend Selenium.
O backend ativo é informado pela ferramenta get_search_engine_status sob a chave backend.
Tratamento de Erros
A ferramenta inclui tratamento abrangente de erros para:
- Timeouts de rede
- Falhas do WebDriver
- Erros de análise de página
- URLs inválidas
Erros são registrados e fallbacks suaves são fornecidos.
Requisitos
- Python 3.10+
- Um backend de navegador: Chrome (Selenium) ou o binário Obscura
- Conexão com a internet
Dependências
fastmcp: Framework do servidor MCPselenium: Automação de navegador web (backend Selenium)beautifulsoup4: Análise de HTMLwebdriver-manager: Gerenciamento do driver do Chrome (backend Selenium)lxml: Parser XML/HTML
O backend Obscura não tem dependência Python — ele é invocado como um binário CLI externo.
Limitações
- Mecanismos de pesquisa podem limitar a taxa ou bloquear acesso automatizado; o fallback multi-mecanismo mitiga, mas não elimina isso
- O Google em particular frequentemente bloqueia tráfego headless não furtivo — DuckDuckGo e Bing normalmente permanecem disponíveis como fallbacks
- Os resultados podem variar com base na localização e na classificação de cada mecanismo
- O backend Selenium requer Chrome; o backend Obscura requer o binário Obscura
Desenvolvimento
Para modificar ou estender a funcionalidade:
- Clone o repositório
- Instale em modo de desenvolvimento:
uv syncoupip install -e . - Faça suas alterações
- Execute a suíte de testes:
uv run pytest test.py -q - Faça um teste rápido no servidor:
python main.py(ouBROWSER_BACKEND=obscura OBSCURA_BIN=/path/to/obscura python main.py)
Licença
Este projeto é licenciado sob a Licença MIT. Você pode conferir em - LICENSE
Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.