Anyfetch

Búsqueda web y recuperación web sin claves de API. Lee los sitios que rechazan a los agentes de IA.

Documentación

Anyfetch

Búsqueda web y recuperación de páginas para agentes de IA. Un pequeño binario, sin claves API, y lee los sitios que rechazan a tu agente.

Gratuito y de código abierto, de los creadores de AliasMode.

Los entornos de agentes recuperan páginas con una identidad de bot, y gran parte de la web responde 403. Anyfetch envía la solicitud que envía un navegador real, para que tu agente obtenga la página.

97 sitios populares que bloquean agentes de IAPáginas leídas
Anyfetch75
curl47
Servidor de recuperación MCP de referencia41
WebFetch integrado de Claude Code36

Anyfetch leyó 21 sitios que ninguna otra herramienta de la tabla pudo leer. Entre ellos: The New York Times, Reuters, Bloomberg, The Washington Post, Medium, Reddit, Stack Overflow y YouTube.

30 preguntas de investigación, cada una hecha dos vecesRespondidas correctamente ambas veces
Agente con Anyfetch30
Mismo agente con WebSearch y WebFetch integrados de Claude Code25

Diez de las preguntas tratan sobre una página en un sitio que bloquea agentes de IA. La recuperación integrada no pudo leer ninguna de esas 10 páginas. Su búsqueda encontró la respuesta en otra fuente para 5 de ellas. Anyfetch leyó las 10. Las preguntas se escribieron a partir de páginas que Anyfetch puede leer, por lo que este grupo muestra lo que las herramientas integradas pasan por alto.

Una página, comenzando desde ceroTiempoMemoria máxima
Anyfetch0,19 s17 MB
Chromium sin interfaz1,15 s544 MB

Medido el 2026-10-11 desde un servidor en la nube, sin proxy. Consulta cómo lo medimos y cómo ejecutarlo de nuevo.

Lo que obtiene tu agente

  • Búsqueda sin clave. Resultados de Brave, Yahoo y DuckDuckGo, con filtros de dominio y fecha, frases entre comillas y paginación. Fuentes especializadas para GitHub, Stack Overflow, Hacker News, arXiv y artículos de investigación. O tu propio SearXNG.
  • Buscar y leer en una sola llamada. Solicita los mejores resultados junto con la lista de resultados y obtén las partes de cada página que coinciden con tu consulta.
  • Respuestas, no páginas completas. Proporciona una pregunta con la URL y obtén solo las partes de la página que coinciden. Las notas de la versión 3.15 de Python tienen 218.000 caracteres; la respuesta a una pregunta sobre ellas llegó en 2.200.
  • Markdown limpio. Los enlaces, tablas y bloques de código permanecen intactos. Las páginas largas llegan en partes.
  • PDFs. Los artículos e informes vuelven como texto, página por página.
  • Sitios que necesitan JavaScript. Anyfetch lee los datos dentro de la página y usa la API pública o el feed del sitio para Stack Overflow, Reddit, publicaciones de X, PyPI y crates.io. No se ejecuta ningún navegador. Para páginas que no contienen nada sin sus scripts, puede usar Lightpanda, un motor pequeño opcional.
  • Noticias y respuestas. Artículos completos en Reuters y Bloomberg, y las respuestas en Quora, a partir de los datos que estos sitios envían con la página.
  • Solicitudes de nivel de navegador. TLS de Safari, HTTP/2 y huella de cabecera. Una recuperación rechazada se reintenta automáticamente, como el mismo navegador o como un segundo.
  • Comprobaciones de Cloudflare. Cuando un sitio insiste en una comprobación de JavaScript, tu propio Firefox la supera una vez. Después, Anyfetch lee el sitio con solicitudes simples.
  • Rápido en repeticiones. Varias páginas en una llamada, recuperadas al mismo tiempo. Una página recuperada en los últimos 15 minutos proviene de una copia local.
  • Ligero. Un binario Rust de 16 MB. Sin navegador incluido, sin motor de JavaScript, sin Python, sin Node.
  • Funciona en todas partes. Un servidor MCP stdio para entornos de agentes y una CLI simple para todo lo demás.

Instalación

macOS y Linux:

curl -fsSL https://aliasmode.github.io/anyfetch/install.sh | sh

Windows, en PowerShell:

irm https://aliasmode.github.io/anyfetch/install.ps1 | iex

El instalador coloca anyfetch en ~/.local/bin. Luego conecta Anyfetch a cada entorno de agente que encuentra en la máquina: Claude Code, Codex, Gemini CLI, Hermes Agent, Pi, Cline, Amp, OpenClaw y Cursor. Inicia una nueva sesión de agente y el agente tiene web_search, web_fetch y web_fetch_many.

¿Instalaste un entorno después? Ejecuta anyfetch setup. Usa el comando propio de cada entorno, te dice a qué se conectó y es seguro ejecutarlo de nuevo.

¿Solo Claude Code, en macOS o Linux? Puedes instalar Anyfetch como plugin en su lugar. El plugin obtiene el programa en su primer inicio:

claude plugin marketplace add aliasmode/anyfetch && claude plugin install anyfetch@anyfetch

Dentro de Claude Code 2.1.275 o posterior, esto es un solo paso: /plugin install anyfetch --marketplace aliasmode/anyfetch. Usa el plugin o el instalador, no ambos, o el agente verá cada herramienta dos veces.

Conecta tu agente manualmente

anyfetch setup hace esto por ti. Para hacerlo manualmente, cada entorno necesita un comando.

Claude Code

claude mcp add --scope user anyfetch -- anyfetch mcp

Codex

codex mcp add anyfetch -- anyfetch mcp

o en ~/.codex/config.toml:

[mcp_servers.anyfetch]
command = "anyfetch"
args = ["mcp"]

Hermes Agent

hermes mcp add anyfetch --command anyfetch --args mcp

Hermes se conecta, lista las herramientas y pide habilitarlas. Responde Y.

Pi

pi mcp add anyfetch -- anyfetch mcp

Pi oculta las herramientas MCP detrás de su modo de código por defecto. Para mostrar las herramientas al modelo directamente, establece la exposición en ~/.pi/agent/mcp.json:

{
  "mcpServers": {
    "anyfetch": { "command": "anyfetch", "args": ["mcp"], "exposure": "direct" }
  }
}

Gemini CLI

gemini mcp add -s user anyfetch anyfetch mcp

OpenCode — en ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "anyfetch": { "type": "local", "command": ["anyfetch", "mcp"], "enabled": true }
  }
}

Cursor — en ~/.cursor/mcp.json:

{
  "mcpServers": {
    "anyfetch": { "command": "anyfetch", "args": ["mcp"] }
  }
}

Más entornos

EntornoComando
Clinecline mcp add anyfetch --yes -- anyfetch mcp
Ampamp mcp add anyfetch -- anyfetch mcp
OpenClawopenclaw mcp add anyfetch --command anyfetch --arg mcp
Goosegoose session --with-extension "anyfetch mcp"
VS Code (Copilot)code --add-mcp "{\"name\":\"anyfetch\",\"command\":\"anyfetch\",\"args\":[\"mcp\"]}"

Cualquier otro cliente MCP: añade un servidor stdio con el comando anyfetch y el argumento mcp.

Anyfetch está en el Registro MCP oficial como io.github.aliasmode/anyfetch.

¿Sin MCP? Dale la CLI al agente. Añade esto a AGENTS.md o al archivo de instrucciones del entorno:

## Web access
- Search the web: `anyfetch search "<query>"`
- Read pages: `anyfetch fetch <url> [<url>...] --format markdown`

Hazlo el predeterminado. Para que el agente use Anyfetch y no sus herramientas integradas, desactiva las integradas:

  • Claude Code, en ~/.claude/settings.json: "permissions": { "deny": ["WebFetch", "WebSearch"] }
  • Codex, en ~/.codex/config.toml: web_search = "disabled"

Úsalo desde la línea de comandos

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/

La salida es JSON por defecto, para que los scripts y agentes puedan analizarla. --format markdown imprime solo el contenido de la página.

Herramientas

web_fetch

EntradaSignificado
urlLa página a leer.
queryOpcional. Una pregunta o palabras clave. El resultado tiene solo las partes de la página que coinciden.
max_charsOpcional. La cantidad máxima de caracteres de contenido a devolver. El valor predeterminado es 50.000, o 5.000 con un query.
offsetOpcional. El primer carácter de contenido a devolver. No se usa con un query.
freshOpcional. Recuperar de nuevo incluso si existe una copia de los últimos 15 minutos.

El resultado tiene title, description, content (Markdown), total_chars, url (después de redirecciones), status y retrieved_at. Para leer una página larga en partes, llama de nuevo con un offset más alto hasta que alcance total_chars. Las partes provienen de la copia local, por lo que el sitio recibe una sola solicitud.

Con un query, la página se divide en sus párrafos, tablas y bloques de código. Las partes que mejor coinciden con las palabras de la consulta vuelven en orden de página, bajo sus encabezados, con [...] donde se omiten partes. El resultado entonces tiene focused: true. Una página sin partes coincidentes vuelve desde su inicio. Una segunda pregunta sobre la misma página usa la copia local.

HTML se convierte en Markdown. Un PDF se convierte en texto con marcas [Page N]. JSON, texto plano y feeds XML vuelven tal como están.

web_fetch_many

EntradaSignificado
urlsLas páginas a leer. Se recuperan al mismo tiempo.
queryOpcional. Como para web_fetch. Cada página da hasta 5.000 caracteres.
max_charsOpcional. La cantidad máxima de caracteres de contenido por página. Por defecto las páginas comparten 50.000.
freshOpcional. Como para web_fetch.

El resultado tiene pages: una entrada por URL, en orden. Cada entrada es la página, o su error.

web_search

EntradaSignificado
queryLa consulta de búsqueda. Las frases entre comillas funcionan.
providerOpcional. Consulta la lista a continuación. El valor predeterminado es auto.
siteOpcional. Mantener resultados de un dominio, por ejemplo docs.rs.
timeOpcional. day, week, month o year.
pageOpcional. La página de resultados, desde 1.
readOpcional. También devolver, de esta cantidad de mejores resultados, las partes de cada página que coinciden con la consulta.
searxng_urlLa URL base de tu instancia SearXNG, para el proveedor searxng. Debe tener la salida JSON activada.

Cada resultado tiene title, url y snippet, y content cuando estableces read.

ProveedorFuente
autoBrave, luego Yahoo, luego DuckDuckGo: cada uno cuando el anterior no da resultados.
braveBrave Search. Alrededor de 20 resultados por página.
yahooYahoo Search. 7 resultados por página. Sin filtro year.
duckduckgoDuckDuckGo. Solo primera página.
searxngTu propia instancia SearXNG.
githubRepositorios de GitHub, con estrellas y lenguaje.
stackoverflowPreguntas de Stack Overflow, con puntuación y número de respuestas.
hackernewsHistorias de Hacker News, con puntos y el enlace de discusión.
arxivArtículos de arXiv, con resúmenes.
papersArtículos de investigación de OpenAlex, con recuentos de citas y enlaces de acceso abierto.

site, time y las frases entre comillas se aplican a los motores web. Las fuentes especializadas son API públicas gratuitas con sus propios límites de solicitudes.

Errores

Una llamada fallida devuelve un objeto error con un code sobre el que el agente puede actuar:

CódigoSignificado
challenge_requiredEl sitio respondió con un desafío de bot que necesita un navegador.
http_errorEl sitio rechazó la solicitud. status tiene el código HTTP.
rate_limitedEl sitio pidió reducir la velocidad. retry_after tiene la espera, cuando se da.
timeoutEl sitio no respondió dentro de 30 segundos.
unsupported_contentLa URL no es texto o un PDF (una imagen, por ejemplo).
extraction_failedLa página no tiene contenido legible. Un PDF escaneado no tiene texto.

Comprobaciones de Cloudflare

Algunos sitios responden a cada primera solicitud con una comprobación de JavaScript. Anyfetch lo maneja en dos pasos:

  1. Tu propio Firefox supera la comprobación una vez. Se ejecuta oculto, con un perfil desechable, durante unos segundos.
  2. Anyfetch guarda la autorización para ese sitio y vuelve a las solicitudes simples. En Medium, una pasada es válida por un año.

En nuestra prueba, la primera página de un sitio así tardó unos 5 segundos y la siguiente menos de 2 segundos.

Esto necesita Firefox, o un navegador basado en Firefox, en la máquina. Sin uno, nada cambia: la recuperación devuelve challenge_required.

ConfiguraciónEfecto
ANYFETCH_BROWSER=offNunca iniciar un navegador.
ANYFETCH_BROWSER=/path/to/browserUsar este navegador basado en Firefox.

Para un servidor MCP, establece la variable en la entrada del servidor. En Claude Code:

claude mcp add --scope user anyfetch -e ANYFETCH_BROWSER=off -- anyfetch mcp

Notas:

  • Probado en Linux. En Windows, y para un Firefox empaquetado con snap (el predeterminado de Ubuntu), el navegador se usa solo cuando ANYFETCH_BROWSER lo nombra.
  • Una autorización pertenece a la dirección que la obtuvo, por lo que el navegador no se usa junto con un proxy.
  • Las autorizaciones guardadas están en ~/.config/anyfetch/clearance/. Elimina un archivo para olvidar un sitio.

Páginas que necesitan sus scripts

La mayoría de las páginas dan a Anyfetch su texto sin JavaScript: está en el HTML, en los datos de la página o detrás de una API pública. Algunas no contienen nada hasta que sus scripts se ejecutan. MSN, Spotify y Airbnb son ejemplos. Para esas, Anyfetch puede usar Lightpanda, un pequeño motor sin interfaz sin un navegador completo. Lightpanda es opcional y separado. Instálalo desde su README, pon lightpanda en tu PATH, y Anyfetch lo usa para las páginas que lo necesitan. En nuestra prueba, MSN pasó de no tener contenido a 154,000 caracteres en 12 segundos, y Spotify de no tener contenido a 23,000 caracteres en 3 segundos. Las páginas que ya funcionan no se renderizan, por lo que siguen siendo rápidas.

ConfiguraciónEfecto
ANYFETCH_RENDERER=offNunca iniciar el renderizador.
ANYFETCH_RENDERER=/path/to/lightpandaUsar este programa.

Notas:

  • Lightpanda hace sus propias solicitudes. No se usa junto con un proxy, y un sitio con verificación de bots puede rechazarlo.
  • Una página de aplicación renderizada, como un feed o un listado, vuelve como la página completa en Markdown.

Usar un proxy

Algunos sitios rechazan direcciones de servidores en la nube sin importar cómo se vea la solicitud. Si tu agente se ejecuta en un servidor, envía Anyfetch a través de un proxy residencial. Pon una línea en ~/.config/anyfetch/proxy:

host:port:username:password

Anyfetch entonces envía cada búsqueda y recuperación a través de ese proxy HTTP. El archivo contiene la contraseña en texto plano, así que mantenlo privado: chmod 600 ~/.config/anyfetch/proxy. Elimina el archivo para volver a la conexión directa.

¿Necesitas un proxy? NobleProxy es nuestro propio servicio: IPs residenciales estáticas que solo usas tú, con ancho de banda ilimitado y soporte HTTP.

Lo que no hace

Anyfetch en sí mismo no ejecuta JavaScript, no resuelve CAPTCHAs ni inicia sesión. Una página que muestra su contenido solo después de que sus scripts se ejecutan, sin datos dentro del HTML y sin API pública, devuelve su título y descripción a menos que Lightpanda esté instalado. Lee lo que un sitio envía a un visitante por primera vez. Una página que necesita un CAPTCHA, una cuenta o una suscripción para cargarse permanece cerrada, y Anyfetch lo indica con un código de error.

¿Tu agente necesita un navegador real, con inicios de sesión y sesiones guardadas? Usa AliasMode. Es nuestro navegador antidetect gratuito y de código abierto, y tiene su propio servidor MCP para agentes.

Benchmark

Los números al principio provienen de dos scripts y un conjunto de preguntas en bench/.

  • Páginas leídas. bench/bench.py lee cada uno de los 97 sitios en bench/sites.txt una vez con cada herramienta. Una página cuenta como leída cuando la herramienta devuelve al menos 500 caracteres de texto y el texto no es una verificación de bots. La misma regla se aplica a cada herramienta. Anyfetch se ejecutó tres veces y leyó 73, 76 y 75 páginas; la tabla muestra la ejecución intermedia. El WebFetch de Claude Code no se puede scriptear, así que un agente lo llamó una vez por sitio y registró si volvía contenido real.

  • Tiempo y memoria. bench/speed.py lee 10 páginas con cada programa, iniciado desde cero para cada página, e informa la mediana.

  • Preguntas de investigación. bench/tasks.json tiene 30 preguntas. Cada una tiene una respuesta exacta y la frase en la página fuente que lo demuestra. Las páginas son de julio a octubre de 2026, por lo que un modelo no puede responder de memoria. Un agente Claude Sonnet respondió las preguntas solo con Anyfetch, y nuevamente solo con el WebSearch y WebFetch integrados de Claude Code. Las instrucciones fueron las mismas: como máximo 8 llamadas web para cada pregunta, y la respuesta UNKNOWN cuando las herramientas no la dan. Anyfetch se ejecutó sin proxy, sin Firefox y sin Lightpanda. Cada herramienta se ejecutó dos veces, y una pregunta cuenta cuando ambas ejecuciones son correctas.

Grupo de preguntasAnyfetchHerramientas integradas
Una página en un sitio que bloquea agentes de IA10 de 105 de 10
Una página en un sitio abierto10 de 1010 de 10
Sin URL: buscar primero, luego leer10 de 1010 de 10

En cada ejecución individual, las herramientas integradas respondieron 26 preguntas, pero no las mismas 26. Tres cosas a saber sobre esta prueba. El escritor de preguntas usó Anyfetch para verificar cada respuesta, por lo que el primer grupo solo tiene páginas que Anyfetch puede leer. Cuatro sitios más en la lista del escritor (Reuters, Bloomberg, Financial Times y Quora) no tienen pregunta, porque no pudo leer una página de artículo allí. La prueba de sitios anterior lee la página de inicio de Reuters y Bloomberg, que Anyfetch puede leer. Desde la versión 0.7.0, Anyfetch también lee páginas de artículos en Reuters y Bloomberg y las respuestas en Quora. Financial Times requiere una suscripción. Un agente de prueba de Anyfetch se detuvo después de su primera pregunta, por lo que sus 5 preguntas se ejecutaron nuevamente. Cada respuesta está en bench/results/tasks.tsv.

Los resultados por sitio están en bench/results/. Los sitios cambian sus reglas a menudo, y los resultados difieren entre redes, así que ejecútalo tú mismo:

python3 bench/bench.py anyfetch curl
pip install mcp-server-fetch && python3 bench/bench.py reference
python3 bench/speed.py /path/to/chromium

Compilar desde el código fuente

Necesitas Rust 1.98, cmake y clang (la biblioteca TLS es BoringSSL). En Windows también necesitas NASM.

cargo install --git https://github.com/aliasmode/anyfetch

Licencia

Apache-2.0