Anyfetch
Busca e busca na web sem chaves de API. Lê os sites que recusam agentes de IA.
Documentação
Anyfetch
Busca e leitura web para agentes de IA. Um binário pequeno, sem chaves de API, e lê os sites que recusam seu agente.
Gratuito e de código aberto, feito pelos criadores do AliasMode.
Os harnesses de agentes buscam páginas com identidade de bot, e grande parte da web responde 403. O Anyfetch envia a requisição que um navegador real envia, então seu agente recebe a página.
| 97 sites populares que bloqueiam agentes de IA | Páginas lidas |
|---|---|
| Anyfetch | 75 |
| curl | 47 |
| Servidor de fetch MCP de referência | 41 |
WebFetch integrado do Claude Code | 36 |
O Anyfetch leu 21 sites que nenhuma outra ferramenta da tabela conseguiu ler. Entre eles: The New York Times, Reuters, Bloomberg, The Washington Post, Medium, Reddit, Stack Overflow e YouTube.
| 30 perguntas de pesquisa, cada uma feita duas vezes | Respondidas corretamente nas duas vezes |
|---|---|
| Agente com Anyfetch | 30 |
Mesmo agente com WebSearch e WebFetch integrados do Claude Code | 25 |
Dez das perguntas são sobre uma página em um site que bloqueia agentes de IA. O fetch integrado não conseguiu ler nenhuma dessas 10 páginas. Sua busca encontrou a resposta em outra fonte para 5 delas. O Anyfetch leu todas as 10. As perguntas foram escritas a partir de páginas que o Anyfetch consegue ler, então este grupo mostra o que as ferramentas integradas deixam passar.
| Uma página, começando do zero | Tempo | Pico de memória |
|---|---|---|
| Anyfetch | 0,19 s | 17 MB |
| Chromium headless | 1,15 s | 544 MB |
Medido em 2026-10-11 a partir de um servidor em nuvem, sem proxy. Veja como medimos e como executar novamente.
O que seu agente recebe
- Busca sem chave. Resultados do Brave, Yahoo e DuckDuckGo, com filtros de domínio e data, frases entre aspas e paginação. Fontes especializadas para GitHub, Stack Overflow, Hacker News, arXiv e artigos de pesquisa. Ou seu próprio SearXNG.
- Busca e leitura em uma única chamada. Peça os principais resultados junto com a lista de resultados e receba as partes de cada página que correspondem à sua consulta.
- Respostas, não páginas inteiras. Envie uma pergunta com a URL e receba apenas as partes da página que correspondem a ela. As notas de versão do Python 3.15 têm 218.000 caracteres; a resposta a uma pergunta sobre elas veio em 2.200.
- Markdown limpo. Links, tabelas e blocos de código permanecem intactos. Páginas longas vêm em partes.
- PDFs. Artigos e relatórios voltam como texto, página por página.
- Sites que precisam de JavaScript. O Anyfetch lê os dados dentro da página e usa a API pública ou o feed do site para Stack Overflow, Reddit, posts do X, PyPI e crates.io. Nenhum navegador é executado. Para páginas que não contêm nada sem seus scripts, ele pode usar o Lightpanda, um motor opcional e leve.
- Notícias e respostas. Artigos completos na Reuters e Bloomberg, e as respostas no Quora, a partir dos dados que esses sites enviam com a página.
- Requisições de nível de navegador. TLS do Safari, HTTP/2 e impressão digital de cabeçalho. Uma busca recusada é tentada novamente automaticamente, como o mesmo navegador ou como um segundo.
- Verificações do Cloudflare. Quando um site insiste em uma verificação de JavaScript, seu próprio Firefox a passa uma vez. Depois disso, o Anyfetch lê o site com requisições simples.
- Rápido em repetições. Várias páginas em uma chamada, buscadas ao mesmo tempo. Uma página buscada nos últimos 15 minutos vem de uma cópia local.
- Leve. Um binário Rust de 16 MB. Sem navegador embutido, sem motor JavaScript, sem Python, sem Node.
- Funciona em qualquer lugar. Um servidor MCP stdio para harnesses de agentes e uma CLI simples para todo o resto.
Instalação
macOS e Linux:
curl -fsSL https://aliasmode.github.io/anyfetch/install.sh | sh
Windows, no PowerShell:
irm https://aliasmode.github.io/anyfetch/install.ps1 | iex
O instalador coloca anyfetch em ~/.local/bin. Em seguida, conecta o Anyfetch a cada harness de agente que encontrar na máquina: Claude Code, Codex, Gemini CLI, Hermes Agent, Pi, Cline, Amp, OpenClaw e Cursor. Inicie uma nova sessão de agente e o agente terá web_search, web_fetch e web_fetch_many.
Instalou um harness depois? Execute anyfetch setup. Ele usa o próprio comando de cada harness, informa o que conectou e é seguro executar novamente.
Apenas Claude Code, no macOS ou Linux? Você pode instalar o Anyfetch como um plugin. O plugin obtém o programa no primeiro início:
claude plugin marketplace add aliasmode/anyfetch && claude plugin install anyfetch@anyfetch
Dentro do Claude Code 2.1.275 ou posterior, isso é uma única etapa: /plugin install anyfetch --marketplace aliasmode/anyfetch. Use o plugin ou o instalador, não ambos, ou o agente verá todas as ferramentas duas vezes.
Conecte seu agente manualmente
anyfetch setup faz isso por você. Para fazer manualmente, cada harness precisa de um comando.
Claude Code
claude mcp add --scope user anyfetch -- anyfetch mcp
Codex
codex mcp add anyfetch -- anyfetch mcp
ou em ~/.codex/config.toml:
[mcp_servers.anyfetch]
command = "anyfetch"
args = ["mcp"]
Hermes Agent
hermes mcp add anyfetch --command anyfetch --args mcp
O Hermes conecta, lista as ferramentas e pede para habilitá-las. Responda Y.
Pi
pi mcp add anyfetch -- anyfetch mcp
O Pi esconde as ferramentas MCP atrás do modo de código por padrão. Para mostrar as ferramentas diretamente ao modelo, defina a exposição em ~/.pi/agent/mcp.json:
{
"mcpServers": {
"anyfetch": { "command": "anyfetch", "args": ["mcp"], "exposure": "direct" }
}
}
Gemini CLI
gemini mcp add -s user anyfetch anyfetch mcp
OpenCode — em ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"anyfetch": { "type": "local", "command": ["anyfetch", "mcp"], "enabled": true }
}
}
Cursor — em ~/.cursor/mcp.json:
{
"mcpServers": {
"anyfetch": { "command": "anyfetch", "args": ["mcp"] }
}
}
Mais harnesses
| Harness | Comando |
|---|---|
| Cline | cline mcp add anyfetch --yes -- anyfetch mcp |
| Amp | amp mcp add anyfetch -- anyfetch mcp |
| OpenClaw | openclaw mcp add anyfetch --command anyfetch --arg mcp |
| Goose | goose session --with-extension "anyfetch mcp" |
| VS Code (Copilot) | code --add-mcp "{\"name\":\"anyfetch\",\"command\":\"anyfetch\",\"args\":[\"mcp\"]}" |
Qualquer outro cliente MCP: adicione um servidor stdio com o comando anyfetch e o argumento mcp.
O Anyfetch está no Registro MCP oficial como io.github.aliasmode/anyfetch.
Sem MCP? Dê a CLI ao agente. Adicione isto a AGENTS.md ou ao arquivo de instruções do harness:
## Web access
- Search the web: `anyfetch search "<query>"`
- Read pages: `anyfetch fetch <url> [<url>...] --format markdown`
Torne-o o padrão. Para que o agente use o Anyfetch e não suas ferramentas integradas, desative as integradas:
- Claude Code, em
~/.claude/settings.json:"permissions": { "deny": ["WebFetch", "WebSearch"] } - Codex, em
~/.codex/config.toml:web_search = "disabled"
Use pela linha de comando
anyfetch search "rust async runtime comparison"
anyfetch search "tokio select" --site docs.rs --time year
anyfetch search "postgres vacuum freeze" --read 3
anyfetch search "retrieval augmented generation" --provider papers
anyfetch fetch https://stackoverflow.com/questions/231767 --format markdown
anyfetch fetch https://arxiv.org/pdf/1706.03762 --max-chars 8000 --offset 8000
anyfetch fetch https://docs.python.org/3.15/whatsnew/3.15.html --query "sampling profiler rate"
anyfetch fetch https://www.rust-lang.org/ https://go.dev/ https://ziglang.org/
A saída é JSON por padrão, para que scripts e agentes possam analisá-la. --format markdown imprime apenas o conteúdo da página.
Ferramentas
web_fetch
| Entrada | Significado |
|---|---|
url | A página a ser lida. |
query | Opcional. Uma pergunta ou palavras-chave. O resultado tem apenas as partes da página que correspondem. |
max_chars | Opcional. O número máximo de caracteres de conteúdo a retornar. O padrão é 50.000, ou 5.000 com um query. |
offset | Opcional. O primeiro caractere de conteúdo a retornar. Não usado com um query. |
fresh | Opcional. Buscar novamente mesmo se existir uma cópia dos últimos 15 minutos. |
O resultado tem title, description, content (Markdown), total_chars, url (após redirecionamentos), status e retrieved_at. Para ler uma página longa em partes, chame novamente com um offset maior até que alcance total_chars. As partes vêm da cópia local, então o site recebe uma única requisição.
Com um query, a página é dividida em seus parágrafos, tabelas e blocos de código. As partes que melhor correspondem às palavras da consulta voltam na ordem da página, sob seus títulos, com [...] onde partes foram omitidas. O resultado então tem focused: true. Uma página sem parte correspondente volta do início. Uma segunda pergunta sobre a mesma página usa a cópia local.
HTML vira Markdown. Um PDF vira texto com marcas de [Page N]. JSON, texto simples e feeds XML voltam como estão.
web_fetch_many
| Entrada | Significado |
|---|---|
urls | As páginas a serem lidas. Elas são buscadas ao mesmo tempo. |
query | Opcional. Como para web_fetch. Cada página fornece até 5.000 caracteres. |
max_chars | Opcional. O número máximo de caracteres de conteúdo por página. Por padrão, as páginas compartilham 50.000. |
fresh | Opcional. Como para web_fetch. |
O resultado tem pages: uma entrada por URL, em ordem. Cada entrada é a página, ou seu error.
web_search
| Entrada | Significado |
|---|---|
query | A consulta de busca. Frases entre aspas funcionam. |
provider | Opcional. Veja a lista abaixo. O padrão é auto. |
site | Opcional. Manter resultados de um domínio, por exemplo docs.rs. |
time | Opcional. day, week, month ou year. |
page | Opcional. A página de resultados, a partir de 1. |
read | Opcional. Também retornar, deste número de principais resultados, as partes de cada página que correspondem à consulta. |
searxng_url | A URL base da sua instância SearXNG, para o provedor searxng. Ela deve ter a saída JSON ativada. |
Cada resultado tem title, url e snippet, e content quando você define read.
| Provedor | Fonte |
|---|---|
auto | Brave, depois Yahoo, depois DuckDuckGo: cada um quando o anterior não dá resultados. |
brave | Brave Search. Cerca de 20 resultados por página. |
yahoo | Yahoo Search. 7 resultados por página. Sem filtro year. |
duckduckgo | DuckDuckGo. Apenas a primeira página. |
searxng | Sua própria instância SearXNG. |
github | Repositórios do GitHub, com estrelas e linguagem. |
stackoverflow | Perguntas do Stack Overflow, com pontuação e contagem de respostas. |
hackernews | Histórias do Hacker News, com pontos e o link da discussão. |
arxiv | Artigos do arXiv, com resumos. |
papers | Artigos de pesquisa do OpenAlex, com contagens de citações e links de acesso aberto. |
site, time e frases entre aspas se aplicam aos mecanismos web. As fontes especializadas são APIs públicas gratuitas com seus próprios limites de requisição.
Erros
Uma chamada com falha retorna um objeto error com um code no qual o agente pode agir:
| Código | Significado |
|---|---|
challenge_required | O site respondeu com um desafio de bot que precisa de um navegador. |
http_error | O site recusou a requisição. status tem o código HTTP. |
rate_limited | O site pediu para desacelerar. retry_after tem o tempo de espera, quando fornecido. |
timeout | O site não respondeu em 30 segundos. |
unsupported_content | A URL não é texto ou PDF (uma imagem, por exemplo). |
extraction_failed | A página não tem conteúdo legível. Um PDF escaneado não tem texto. |
Verificações do Cloudflare
Alguns sites respondem a toda primeira requisição com uma verificação de JavaScript. O Anyfetch lida com isso em duas etapas:
- Seu próprio Firefox passa na verificação uma vez. Ele roda oculto, com um perfil descartável, por alguns segundos.
- O Anyfetch salva a liberação para aquele site e volta às requisições simples. No Medium, uma passagem é válida por um ano.
Em nosso teste, a primeira página de tal site levou cerca de 5 segundos e a próxima menos de 2 segundos.
Isso precisa do Firefox, ou de um navegador baseado no Firefox, na máquina. Sem um, nada muda: a busca retorna challenge_required.
| Configuração | Efeito |
|---|---|
ANYFETCH_BROWSER=off | Nunca iniciar um navegador. |
ANYFETCH_BROWSER=/path/to/browser | Usar este navegador baseado no Firefox. |
Para um servidor MCP, defina a variável na entrada do servidor. No Claude Code:
claude mcp add --scope user anyfetch -e ANYFETCH_BROWSER=off -- anyfetch mcp
Notas:
- Testado no Linux. No Windows, e para um Firefox empacotado como snap (o padrão do Ubuntu), o navegador é usado apenas quando
ANYFETCH_BROWSERo nomeia. - Uma liberação pertence ao endereço que a obteve, então o navegador não é usado junto com um proxy.
- Liberações salvas estão em
~/.config/anyfetch/clearance/. Exclua um arquivo para esquecer um site.
Páginas que precisam de seus scripts
A maioria das páginas dá ao Anyfetch seu texto sem JavaScript: está no HTML, nos dados da página ou atrás de uma API pública. Algumas não contêm nada até que seus scripts sejam executados. MSN, Spotify e Airbnb são exemplos. Para essas, o Anyfetch pode usar o Lightpanda, um pequeno motor headless sem um navegador completo.
Lightpanda é opcional e separado. Instale-o a partir do README dele, coloque lightpanda no seu PATH, e o Anyfetch o usa para as páginas que precisam dele. Em nosso teste, o MSN passou de nenhum conteúdo para 154.000 caracteres em 12 segundos, e o Spotify de nenhum conteúdo para 23.000 caracteres em 3 segundos. Páginas que já funcionam não são renderizadas, então continuam rápidas.
| Configuração | Efeito |
|---|---|
ANYFETCH_RENDERER=off | Nunca iniciar o renderizador. |
ANYFETCH_RENDERER=/path/to/lightpanda | Usar este programa. |
Notas:
- O Lightpanda faz as próprias solicitações. Ele não é usado junto com um proxy, e um site com verificação de bot pode recusá-lo.
- Uma página de aplicativo renderizada, como um feed ou uma listagem, volta como a página inteira em Markdown.
Usar um proxy
Alguns sites recusam endereços de servidores em nuvem, independentemente de como a solicitação pareça. Se seu agente roda em um servidor, envie o Anyfetch por um proxy residencial. Coloque uma linha no ~/.config/anyfetch/proxy:
host:port:username:password
O Anyfetch então envia toda busca e busca de página por esse proxy HTTP. O arquivo contém a senha em texto puro, então mantenha-o privado: chmod 600 ~/.config/anyfetch/proxy. Exclua o arquivo para voltar ao modo direto.
Precisa de um proxy? NobleProxy é nosso próprio serviço: IPs residenciais estáticos que só você usa, com largura de banda ilimitada e suporte a HTTP.
O que ele não faz
O Anyfetch em si não executa JavaScript, não resolve CAPTCHAs nem faz login. Uma página que mostra seu conteúdo apenas depois que seus scripts rodam, sem dados no HTML e sem API pública, retorna seu título e descrição, a menos que o Lightpanda esteja instalado. Ele lê o que um site envia a um visitante de primeira vez. Uma página que precisa de CAPTCHA, conta ou assinatura para carregar permanece fechada, e o Anyfetch informa isso com um código de erro.
Seu agente precisa de um navegador real, com logins e sessões salvas? Use AliasMode. É nosso navegador antidetecção gratuito e de código aberto, e tem seu próprio servidor MCP para agentes.
Benchmark
Os números no topo vêm de dois scripts e um conjunto de perguntas em bench/.
-
Páginas lidas.
bench/bench.pylê cada um dos 97 sites embench/sites.txtuma vez com cada ferramenta. Uma página conta como lida quando a ferramenta retorna pelo menos 500 caracteres de texto e o texto não é uma verificação de bot. A mesma regra é aplicada a todas as ferramentas. O Anyfetch rodou três vezes e leu 73, 76 e 75 páginas; a tabela mostra a execução do meio. OWebFetchdo Claude Code não pode ser scriptado, então um agente o chamou uma vez por site e registrou se conteúdo real voltou. -
Tempo e memória.
bench/speed.pylê 10 páginas com cada programa, iniciado do zero para cada página, e relata a mediana. -
Perguntas de pesquisa.
bench/tasks.jsontem 30 perguntas. Cada uma tem uma resposta exata e a frase na página de origem que a prova. As páginas são de julho a outubro de 2026, então um modelo não pode responder de memória. Um agente Claude Sonnet respondeu às perguntas apenas com o Anyfetch, e novamente apenas com oWebSearcheWebFetchintegrados do Claude Code. As instruções foram as mesmas: no máximo 8 chamadas web para cada pergunta, e a respostaUNKNOWNquando as ferramentas não a fornecem. O Anyfetch rodou sem proxy, sem Firefox e sem Lightpanda. Cada ferramenta rodou duas vezes, e uma pergunta conta quando ambas as execuções estão corretas.
| Grupo de perguntas | Anyfetch | Ferramentas integradas |
|---|---|---|
| Uma página em um site que bloqueia agentes de IA | 10 de 10 | 5 de 10 |
| Uma página em um site aberto | 10 de 10 | 10 de 10 |
| Sem URL: buscar primeiro, depois ler | 10 de 10 | 10 de 10 |
Em cada execução individual, as ferramentas integradas responderam 26 perguntas, mas não as mesmas 26. Três coisas para saber sobre este teste. O autor das perguntas usou o Anyfetch para verificar cada resposta, então o primeiro grupo tem apenas páginas que o Anyfetch consegue ler. Mais quatro sites na lista do autor (Reuters, Bloomberg, Financial Times e Quora) não têm pergunta, porque ele não conseguiu ler uma página de artigo lá. O teste de sites acima lê a página inicial da Reuters e da Bloomberg, que o Anyfetch consegue ler. Desde a versão 0.7.0, o Anyfetch também lê páginas de artigo na Reuters e na Bloomberg e as respostas no Quora. O Financial Times precisa de assinatura. Um agente de teste do Anyfetch parou após sua primeira pergunta, então suas 5 perguntas foram executadas novamente. Cada resposta está em bench/results/tasks.tsv.
Os resultados por site estão em bench/results/. Os sites mudam suas regras com frequência, e os resultados diferem entre redes, então execute você mesmo:
python3 bench/bench.py anyfetch curl
pip install mcp-server-fetch && python3 bench/bench.py reference
python3 bench/speed.py /path/to/chromium
Compilar a partir do código-fonte
Você precisa de Rust 1.98, cmake e clang (a biblioteca TLS é BoringSSL). No Windows, você também precisa de NASM.
cargo install --git https://github.com/aliasmode/anyfetch
Licença
Apache-2.0