¿web_fetch o navegador? Cómo leer webs y PDF con el Agents SDK de Cloudflare

Para que un agente de IA lea páginas web y PDF como Markdown, web_fetch del Agents SDK de Cloudflare es suficiente; para apps en JavaScript o sesiones con login, sigue necesitando un navegador. La herramienta llegó en agents@0.28.0 el 9 de octubre de 2026, y en yoDEV la desplegamos en un Worker real para comprobar qué devuelve de verdad.

:white_check_mark: yoDEV Tested · 13 de octubre de 2026
Desplegamos web_fetch de agents@0.28.0 en un Worker real con un binding de Workers AI y lo apuntamos a siete URL. Los resultados que reportamos como nuestros salen de esa prueba.

La misma versión también trajo una herramienta browser. Así que la pregunta útil no es solo cómo usar web_fetch, sino cuándo alcanza y cuándo tu agente necesita un navegador de verdad. Nuestra prueba responde eso con resultados reales, no con la documentación.

¿Qué es el Agents SDK de Cloudflare?

El Agents SDK es el framework de Cloudflare para construir y desplegar agentes de IA sobre Workers. Se publica en npm como agents y se desarrolla en el repositorio público cloudflare/agents de GitHub. Reúne las piezas que un agente necesita: estado, tareas programadas, WebSockets, clientes MCP y, desde ahora, herramientas listas para usar como web_fetch y browser, con adaptadores para AI SDK, TanStack AI y el harness Pi de Cloudflare.

¿Qué hace web_fetch?

web_fetch recibe una URL y devuelve su contenido como texto que el modelo puede leer, junto con la URL final, el código HTTP y el tipo de contenido. Según la documentación oficial:

Entrada Qué hace web_fetch
Página HTML La convierte a Markdown con Workers AI Markdown Conversion
Sitio compatible con Markdown for Agents Pide Markdown primero y se salta la conversión
PDF y documentos de Office compatibles Los convierte a Markdown con Workers AI
JSON Lo formatea para que sea legible
Contenido largo Devuelve una ventana de 20.000 caracteres por defecto, con un offset para seguir
Cualquier petición Aplica tu lista de hosts permitidos, controles de redirección, límite de bytes y timeout

Hace peticiones GET simples: no ejecuta JavaScript, no envía cookies y no inicia sesión.

¿Qué devuelve web_fetch? Lo probamos en un Worker real

El 13 de octubre de 2026 desplegamos un Worker temporal en la cuenta de Cloudflare de yoDEV con agents@0.28.0, la función fetchWeb() y un binding de Workers AI, y lo apuntamos a siete URL. Sin modelo y sin Durable Object: solo la salida de la herramienta. Al terminar, eliminamos el Worker.

Caso Resultado Tiempo
Página de documentación de Cloudflare 200 · text/markdown → markdown: el sitio entregó Markdown directamente, sin conversión · 13.245 caracteres 136 ms
Página de resumen de arXiv (HTML) 200 · text/html → markdown vía Workers AI · 8.347 caracteres 692 ms
PDF de “Attention Is All You Need” 200 · application/pdf → markdown · 39.813 caracteres ~2,0 s
Mismo PDF, segunda ventana (offset=1480) chars 1480–2601 of 39813 ~1,6 s
Excalidraw (app en JavaScript) 200 OK, solo 270 caracteres: título, descripción e imagen, sin el contenido de la app 159 ms
example.com (fuera de la lista permitida) Error web_fetch_disallowed_url, retryable: false 77 ms
localhost Error web_fetch_disallowed_url 74 ms

Cada tiempo corresponde a una sola ejecución desde una ubicación. Tómalos como referencia, no como benchmark.

Tres hallazgos importan más que los números:

  1. Una app en JavaScript no falla: devuelve casi nada. Excalidraw respondió 200 con un título y una descripción. Un agente que solo mira el código de estado creerá que leyó la página. La documentación describe un error web_fetch_blocked para los desafíos anti-bot, pero el cascarón vacío de una app renderizada en el cliente no produce ningún error.
  2. La salida de un PDF es útil, no impecable. El Markdown empieza con un bloque de metadatos del PDF (creador, productor, fechas) antes de ### Page 1, y en las primeras líneas algunas palabras quedan pegadas (“NeedAshish Vaswani”). Sirve para que un modelo lo lea y lo resuma; no para publicarlo tal cual.
  3. Cada offset vuelve a descargar y convertir el documento. La segunda ventana del PDF costó otros 1,6 segundos de conversión, tal como advierte la documentación. Además cortó en un salto de línea (2.601 en lugar del límite pedido), lo que evita partir frases a la mitad.

¿Cómo se instala web_fetch con Cloudflare Workers AI?

Necesitas el Agents SDK 0.28.0 o superior y un binding de Workers AI. Estos pasos salen de la documentación de Cloudflare.

Actualiza el SDK en tu proyecto de Worker:

npm i agents@latest

Agrega el binding de Workers AI a wrangler.jsonc, que web_fetch usa para convertir HTML y documentos:

{
  "ai": {
    "binding": "AI",
    "remote": true
  }
}

En desarrollo local, las conversiones se ejecutan de forma remota contra tu cuenta de Cloudflare. Markdown, JSON y texto plano no pasan por Workers AI.

Después, agrega la herramienta a tu llamada existente de AI SDK:

import { streamText } from "ai";
import { webFetchTool } from "agents/webfetch/ai-sdk";

const tools = {
  web_fetch: webFetchTool({ binding: env.AI }),
};

const result = streamText({ model, messages, tools });

El SDK también incluye adaptadores en agents/webfetch/tanstack-ai y agents/webfetch/pi.

¿Cómo extraer texto de un PDF o una página web sin llamar a un modelo?

Usa fetchWeb() de agents/webfetch. Devuelve la página completa ya convertida, y windowWebFetchPage() junto con renderWebFetchPage() producen el mismo resultado acotado que los adaptadores entregan al modelo. No necesita Durable Object ni navegador. Este es el núcleo del Worker que probamos:

import {
  fetchWeb,
  renderWebFetchPage,
  windowWebFetchPage,
} from "agents/webfetch";

const page = await fetchWeb(
  { url },
  { binding: env.AI, allowedHosts: ["developers.cloudflare.com", "arxiv.org"] },
);
const output = windowWebFetchPage(page, { offset: 0, pageChars: 20_000 });
return new Response(renderWebFetchPage(output));

Esto es lo que recibe el modelo (de nuestra prueba con el PDF):

web_fetch: https://arxiv.org/pdf/1706.03762 · 200 · application/pdf → markdown · chars 0–1480 of 39813 · continue with offset=1480
<untrusted_web_content>
...
</untrusted_web_content>

Si lo que buscas es convertir PDF a Markdown en tu propia máquina, sin Workers, revisa MarkItDown, la herramienta de Microsoft que convierte cualquier documento en contexto para tu IA.

¿Cómo leer un PDF largo por partes?

Pasa el offset del resultado anterior para obtener la siguiente ventana. Si escribes tu propio handler, guarda el WebFetchPage que devolvió fetchWeb() y vuelve a llamar a windowWebFetchPage() con el nuevo offset: así lees la siguiente parte sin descargar ni convertir el documento otra vez. En nuestra prueba, saltarse ese paso significó pagar dos veces la conversión del PDF.

¿Cómo limitar qué sitios puede leer tu agente?

Define la política de peticiones al crear la herramienta. El modelo solo elige url, offset y format; los límites los eliges tú:

Opción Valor por defecto Efecto
allowedHosts Cualquier host público Hosts que la herramienta puede leer; *.example.com cubre subdominios, no example.com
blockedHosts Ninguno Hosts siempre rechazados, se revisan primero
pageChars 20000 Máximo de caracteres por resultado
maxBytes 5000000 Tamaño máximo de la respuesta
timeoutMs 30000 Plazo total, incluidas redirecciones y conversión
maxRedirects 5 Redirecciones que sigue (de 0 a 20)
allowPrivateHosts false Permite hosts locales y privados, para desarrollo local

La fuente integrada también rechaza esquemas que no sean HTTP, credenciales en la URL, URL de más de 2.000 caracteres y redirecciones de HTTPS a HTTP, y vuelve a validar cada destino de redirección. Un límite que conviene conocer: bloquea IP privadas escritas literalmente y nombres de host locales, pero no resuelve DNS para comprobar a qué apunta un host público. En un agente que lee URL arbitrarias, allowedHosts es el control que de verdad reduce la superficie de ataque.

¿web_fetch o navegador: cuál necesita tu agente?

Usa web_fetch cuando el contenido viene en el HTML o en el archivo que envía el servidor: documentación, blogs, PDF, documentos de Office, APIs JSON. En nuestra prueba leyó todo eso entre milisegundos y un par de segundos, sin lanzar ningún navegador.

Usa un navegador (la herramienta browser de Cloudflare, que llegó en la misma versión 0.28.0) cuando el agente necesita:

  • Contenido renderizado con JavaScript. Nuestra prueba con Excalidraw devolvió 200 sin contenido.
  • Una sesión iniciada. web_fetch no envía cookies ni credenciales.
  • Interacción o capturas. Hacer clic, llenar formularios, ver cómo se ve la página.
  • Páginas detrás de un desafío anti-bot, que web_fetch reporta como web_fetch_blocked.

Una regla práctica: prueba primero con web_fetch, y si el resultado es sospechosamente corto para la página (como 270 caracteres para una app completa), pasa al navegador. Si quieres un Chrome headless como servicio HTTP, ya analizamos Browser Run de Cloudflare.

¿Qué límites tiene web_fetch?

  • Prompt injection. El contenido llega envuelto en <untrusted_web_content>, que lo marca como datos y no como instrucciones. La documentación de Cloudflare aclara que eso no garantiza protección contra prompt injection.
  • Costo. La conversión de HTML y documentos se ejecuta en Workers AI y se cobra a tu cuenta. Al momento de publicar esta nota no habíamos verificado el precio de Markdown Conversion; revísalo antes de procesar lotes grandes de PDF.
  • Contenido no compatible. No admite imágenes, audio ni video, y format: "raw" no puede devolver PDF.
  • Una API joven. Al 13 de octubre de 2026, web_fetch requiere el Agents SDK 0.28.0 o superior, y el paquete sigue en versiones 0.x. Espera cambios en imports y opciones; revisa la documentación antes de actualizar.

¿Y tú? ¿Qué tipo de contenido necesita leer tu agente: documentación, PDF o apps web?

¿Cómo lee la web tu agente hoy?
  • Con un fetch simple o una herramienta como web_fetch
  • Con un navegador headless (Playwright, Puppeteer, Browser Run)
  • Todavía no le doy acceso a la web
  • Prefiero otra opción (cuéntanos cuál)
0 votantes

Comenta abajo o, si este artículo te llegó por correo, responde directamente al email: tu respuesta se publica aquí.

Relacionado: MarkItDown: La Herramienta de Microsoft que Convierte Cualquier Documento en Contexto para tu IA