Lectura de URL EnriProxy
web_fetchRetrieve and read the full content of any URL, including JavaScript-rendered, anti-bot protected pages, PDFs, and Office documents.
Instructions
Obtiene y lee el contenido de una URL mediante el servicio multi-nivel de EnriProxy.
Cuándo usarla:
Cuando necesite leer el contenido completo de una página web.
Cuando necesite acceder a documentación, artículos o archivos de código.
Cuando métodos de fetch más simples fallen por protección anti-bot.
Características:
Detección de APIs de registros de paquetes (npm, PyPI)
Fetch de archivos raw (GitHub raw, HuggingFace)
Fetch robusto para sitios estáticos, dinámicos y protegidos (best-effort)
Respaldo automático entre múltiples estrategias de recuperación (detalles omitidos intencionalmente)
Proyección controlable:
format('text' ligero por defecto, 'markdown' estructura completa, 'html' DOM saneado),content('main' por defecto elimina navegación/banners y conserva el artículo; use 'full' para todo),anchor(lee sólo una sección por id o título de encabezado),include_links(inventario de enlaces de la página, ACTIVO por defecto; envíe false para omitirlo) einclude_metadata(idioma/autor/fecha/imagen destacada)Render de páginas con JavaScript: cuando la página devuelve un cascarón sin contenido renderizado, el servidor reintenta automáticamente con tiers que sí renderizan antes de responder
Sitios con JavaScript pesado (Steam, Reddit, X, Instagram, tiendas) se renderizan con navegador real: entregan texto, reseñas, comentarios, imágenes y archivos descargables completos, organizados en secciones (DATOS, MEDIOS, ENLACES, ARCHIVOS PARA DESCARGAR, COMENTARIOS)
Controles
enri_*(sufijos que se agregan a la URL):?enri_find=TEXTObusca dentro de toda la captura y devuelve las líneas con offsets (ÚSELO PRIMERO en páginas grandes);?enri_parts=elige partes: sections,post,ld,imagenes,variantes,media,links,drive,nota,archivos,body (ej:?enri_parts=linkssolo enlaces, omita body para respuestas pequeñas);?enri_body_offset=N&enri_body_limit=Mventana del cuerpo en caracteresYouTube:
?enri_section=manifest (por defecto: inventario con instrucciones) | transcripcion | comentarios | descripcion | todo, conenri_transcript_offset/enri_transcript_limit(caracteres) yenri_comments_offset/enri_comments_limit(cantidad). Cada corte trae su URL de continuación ya construidaCarpetas de Google Drive/OneDrive: inventario de archivos con URL de descarga directa por elemento
PDFs: cualquier URL de PDF (incluso bitstreams de repositorios tras muros anti-bot) se devuelve como TEXTO EXTRAÍDO (hasta 40 páginas por pasada, con avisos de truncado); los PDFs ESCANEADOS sin capa de texto se transcriben renderizando sus páginas con visión del lado del servidor en la misma respuesta; cuando la transcripción no es posible, la respuesta lo declara y sugiere pasar la misma URL a la herramienta de análisis de media para el análisis completo (multipass: páginas, tablas, diagramas)
Documentos de Office: URLs o descargas de Word (.docx), Excel (.xlsx) y PowerPoint (.pptx) — incluso tras Content-Disposition o tipos genéricos application/octet-stream — se extraen a TEXTO PLANO en la misma respuesta (párrafos, textos compartidos y valores de celdas, diapositivas en orden); los archivos de texto plano (txt, csv) adjuntos se decodifican directo; un zip sin documento de Office reconocible se declara honestamente
Decodificación de páginas con encoding legado (windows-1252/ISO-8859-1) sin mojibake
Notas:
Proporcione la URL completa incluyendo protocolo (https://).
El contenido se limita con el parámetro
max_chars(por defecto: 200000).Si el resultado viene truncado e incluye un
cursor, vuelva a llamarweb_fetchconcursor+offset_chars+limit_charspara leer más sin volver a descargar.Envíe
urljunto concursorsiempre que la conozca: si el cursor expiró en el servidor (TTL ~10 minutos), la herramienta re-obtiene la url con los mismos parámetros y devuelve contenido fresco con cursor nuevo (camporecovered_from_expired_cursor) en vez de un error; sinurlel cursor expirado sigue devolviendo error.Los controles enri_* van pegados a la URL: web_fetch(url="https://ejemplo.com/pagina?enri_find=precio") — no son parámetros aparte de la herramienta.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL completa a obtener (http:// o https://). | |
| limit | No | Alias legado de limit_chars. Límite de lectura en caracteres (por defecto: max_chars; con `url` recorta localmente el contenido devuelto). Un valor 0 se ignora. | |
| action | No | Acción especial sobre un cursor: 'delete' libera en el servidor la captura asociada al cursor (envíelo junto con `cursor`; los demás parámetros se ignoran). La respuesta es {deleted, cursor}: true si existía y se liberó, false si ya no existía. Se recomienda liberar cursores que ya no usará (si no, expiran solos tras ~10 minutos). | |
| anchor | No | Selector de sección: id de un elemento (con o sin '#', ej. 'installation') o texto exacto de un encabezado (ej. 'Instalación'). Devuelve sólo esa sección hasta el siguiente encabezado del mismo nivel o superior. Mucho más barato que paginar con offset_chars a ciegas en documentos largos. Máximo 300 caracteres; el exceso se recorta. Si la sección no existe, la respuesta lo indica y devuelve el documento completo. | |
| cursor | No | Cursor opaco devuelto por una llamada previa de `web_fetch` para paginación. Nunca invente este valor. Envíe también `url` cuando la conozca para activar la recuperación automática si el cursor expiró. | |
| format | No | Formato del contenido para páginas HTML. 'text' (por defecto) devuelve texto estructurado ligero y gasta menos tokens. 'markdown' reproduce la estructura exacta de la página: enlaces con URL, énfasis, bloques de código, listas anidadas, imágenes y tablas. 'html' devuelve el marcado HTML saneado (sin scripts/estilos) para inspeccionar el DOM: formularios, atributos data-*, estructura de componentes. Para preguntas puntuales (versiones, precios, datos sueltos) deje el formato por defecto. Los valores inválidos se degradan a 'text'. | |
| offset | No | Alias legado de offset_chars. Offset de lectura en caracteres (por defecto: 0; con `url` aplica un rango local sobre el contenido devuelto). | |
| prompt | No | Pista opcional de extracción. Cuando el documento excede max_chars y el servidor reduce la respuesta (reduced=true), la pista guía la selección de extractos del paquete devuelto; en documentos que caben en el presupuesto no cambia el contenido devuelto. Nunca se envía al sitio de destino. | |
| ranges | No | Hasta 10 rangos {offset_chars, limit_chars} leídos en una sola llamada, para leer tramos no contiguos de un documento grande. Con `cursor`: cada rango se lee del servidor en paralelo y la respuesta es un objeto agrupado {range_applied, range_count, ranges[], range_hint}. Con `url`: primero se descarga el documento; si viene truncado con cursor, cada rango se lee por cursor en paralelo; si no, los rangos se recortan localmente del contenido devuelto. Ejemplo: [{"offset_chars": 0, "limit_chars": 5000}, {"offset_chars": 120000, "limit_chars": 5000}]. | |
| content | No | Alcance del contenido HTML. 'main' (por defecto) devuelve sólo el contenido principal (contenedor article/main, sin menús, barras laterales, banners de cookies ni pies): ahorra típicamente 60-80% de tokens en artículos, documentación y blogs. Use 'full' cuando necesite la estructura completa de la página. Combine content='main' con format='markdown' para la lectura óptima de artículos largos. Los valores inválidos se degradan a 'main'. | |
| max_chars | No | Longitud máxima del contenido (por defecto: 200000). | |
| screenshot | No | Captura de pantalla renderizada de la página (juegos en canvas, dashboards, mapas, splash pages donde el texto no describe lo que se ve). ES OBLIGATORIO elegirla según TU modelo: (1) Si tu modelo NO puede ver imágenes (sin visión): es OBLIGATORIO usar 'analyze' — el servidor captura la página (hasta 3 segmentos de scroll) y te devuelve un TEXTO que describe lo que se ve ('Análisis visual: ...'), sin imágenes; cualquier otro modo te entrega bloques de imagen que tu modelo NO puede procesar y el material visual se pierde. (2) Si tu modelo SÍ puede ver imágenes: omite el parámetro o usa 'auto' (captura sólo cuando el texto es escaso, <1,500 caracteres) o 'force' (captura siempre); las imágenes llegan como bloques de imagen MCP (~1,400 tokens de visión por segmento). (3) Si no necesitas nada visual y quieres ahorrar tokens: 'none'. Solo aplica a la lectura única completa por url (no cursor/ranges). Cuando no se captura, la respuesta lo indica con screenshot_status='skipped' y su razón. | |
| limit_chars | No | Límite de lectura en caracteres. Con `cursor`: límite del servidor (por defecto: max_chars). Con `url` (primera lectura): recorta localmente el contenido devuelto. Un valor 0 se ignora. Prefiera este nombre actual de campo de EnriProxy sobre limit. | |
| offset_chars | No | Offset de lectura en caracteres (por defecto: 0). Con `cursor`: ventana del servidor sobre la captura. Con `url` (primera lectura): rango local sobre el contenido devuelto; la primera lectura amplía automáticamente su presupuesto hasta alcanzar la ventana solicitada, así que los offsets más allá de max_chars SÍ devuelven contenido. Prefiera este nombre actual de campo de EnriProxy sobre offset. | |
| include_links | No | Por defecto es true: agrega al final un inventario ENLACES DE LA PÁGINA con los enlaces únicos (etiqueta y URL, hasta 200). Úselo para decidir a dónde navegar después (crawling informado), descargar documentos enlazados o pasar URLs de imágenes a una herramienta de análisis de media que acepte URLs http(s) directas. Envíe false para omitir el inventario y ahorrar tokens. También se acepta el alias camelCase `includeLinks`. | |
| include_metadata | No | Por defecto es false. Si es true, agrega al final un bloque METADATOS DE LA PÁGINA con idioma, autor, fecha de publicación e imagen destacada (og:image). Útil para citar fuentes o decidir frescura del contenido antes de gastar tokens en el fetch completo. También se acepta el alias camelCase `includeMetadata`. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL que se obtuvo. | |
| cursor | No | Cursor de paginación, cuando existe. | |
| ranges | No | Cortes por rango en orden de petición. | |
| status | No | Código HTTP de la lectura. | |
| content | No | Contenido obtenido (lectura única). | |
| deleted | No | Resultado de action 'delete': si el cursor existía y se liberó. | |
| reduced | No | Si el contenido se redujo a un paquete de extractos. | |
| has_more | No | Si existe más contenido tras este corte. | |
| truncated | No | Si el contenido quedó truncado. | |
| page_chars | No | Longitud de la página sin decoraciones dentro de `content` (ventanas de rangos direccionan esta base). | |
| range_hint | No | Guía de continuación para lecturas por rangos. | |
| limit_chars | No | Límite de lectura por cursor. | |
| range_count | No | Número de rangos devueltos. | |
| total_chars | No | Total de caracteres capturados. | |
| content_type | No | Tipo de contenido de la respuesta. | |
| offset_chars | No | Offset de lectura por cursor. | |
| range_applied | No | Marca de resultado por rangos agrupados. | |
| recovery_note | No | Nota en español describiendo la recuperación automática de cursor expirado. | |
| applied_max_chars | No | Presupuesto aplicado en el camino npm. | |
| fetched_truncated | No | Si el fetch aguas arriba se truncó. | |
| next_offset_chars | No | Offset exacto donde empieza la página siguiente (lecturas por cursor), cuando el servidor lo reporta. | |
| page_offset_chars | No | Offset base-cero dentro de `content` donde empieza la página sin decoraciones (lecturas url con encabezado de estado). | |
| screenshot_reason | No | Razón de captura o omisión: auto_thin_text, forced, analyze_requested, image_target (la URL apuntaba a una imagen y va adjunta inline), auto_rich_text, background_verification, http_error_status, capture_failed, lane_unsupported. | |
| screenshot_status | No | 'captured' cuando el proxy adjuntó capturas como bloques de imagen; 'analyzed' cuando las convirtió en texto del lado del servidor (modo 'analyze'); 'skipped' cuando no (solo cuando se pidió screenshot). | |
| screenshot_analyses | No | Descripciones en TEXTO de cada segmento de captura, generadas del lado del servidor con el modo screenshot='analyze' (para modelos que no pueden ver imágenes). Un elemento null significa que ese segmento falló el análisis. | |
| screenshot_segments | No | Número de segmentos de captura entregados como bloques de imagen MCP (el payload base64 no viaja en structuredContent). | |
| recovered_from_expired_cursor | No | True cuando el cursor enviado había expirado y la herramienta re-obtuvo la url con los mismos parámetros; los offsets aplican a la captura nueva. |