Rendex Screenshot
Captura capturas de pantalla de sitios web como PNG/JPEG mediante agentes de IA. Captura de página completa, modo oscuro, bloqueo de anuncios, viewports personalizados. Desplegado en el borde en Cloudflare Workers, nivel gratuito incluido.
Documentación
@copperline/rendex-mcp
Servidor MCP para Rendex — renderiza HTML crudo, Markdown o cualquier URL a una imagen o PDF mediante agentes de IA usando el Protocolo de Contexto de Modelo (MCP).
Inicio Rápido
Claude Desktop / Cursor / Windsurf (npx)
Añade a la configuración de tu cliente MCP:
{
"mcpServers": {
"rendex": {
"command": "npx",
"args": ["-y", "@copperline/rendex-mcp"],
"env": {
"RENDEX_API_KEY": "your-api-key"
}
}
}
}
Dónde añadirlo:
| Cliente | Ubicación de configuración |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) |
| Cursor | .cursor/mcp.json en la raíz del proyecto, o Settings > MCP |
| Windsurf | Settings > MCP Servers |
Claude Code (CLI)
Añade un .mcp.json a la raíz de tu proyecto con la misma configuración anterior. Luego reinicia Claude Code.
Importante: Añade
.mcp.jsona tu.gitignore— contiene tu clave de API.
Remoto (sin instalación, OAuth o clave de API)
Conéctate al servidor alojado en https://mcp.rendex.dev/mcp — no se necesita instalación.
Está protegido por OAuth 2.1 (código de autorización + PKCE S256), por lo que los clientes
compatibles con OAuth (ChatGPT, Claude, Cursor, el Inspector MCP) se conectan sin clave de API —
inicias sesión con un código de correo de un solo uso y cada llamada se factura contra su propio
plan y fondo de créditos de Rendex.
Los clientes que prefieran una clave estática pueden pasarla directamente:
{
"mcpServers": {
"rendex": {
"url": "https://mcp.rendex.dev/mcp",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
}
}
Herramientas
rendex_screenshot
Renderiza cualquier página web, HTML crudo o Markdown a una imagen o PDF.
"Take a screenshot of https://example.com"
"Capture the full page of https://news.ycombinator.com in dark mode"
"Generate a PDF of https://github.com with A4 page size"
"Capture https://amazon.de as seen from Germany"
"Render this HTML invoice as a PDF"
"Render this Markdown release note as a PDF"
Parámetros:
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
url | string | requerido* | URL de la página web a capturar. Mutuamente excluyente con html y markdown. |
html | string | — | HTML crudo a renderizar. Mutuamente excluyente con url y markdown. |
markdown | string | — | Markdown a renderizar (el servidor lo convierte a HTML). Mutuamente excluyente con url y html. |
data | object | — | Datos clave-valor para plantillas Mustache. Cuando se establece, la cadena html o markdown se renderiza como una plantilla Mustache sin lógica antes de la captura. Inválido con url. |
format | "png" | "jpeg" | "webp" | "pdf" | "png" | Formato de salida |
fullPage | boolean | false | Capturar la página completa desplazable |
darkMode | boolean | false | Emular esquema de color oscuro |
width | number | 1280 | Ancho de viewport (320-3840) |
height | number | 800 | Alto de viewport (240-2160) |
resizeWidth | number | — | Reducir la salida a este ancho en px (se preserva la relación de aspecto si resizeHeight se omite). Ignorado para PDF |
resizeHeight | number | — | Reducir la salida a este alto en px (se preserva la relación de aspecto si resizeWidth se omite). Ignorado para PDF |
quality | number | 80 | Calidad de imagen 1-100 (solo JPEG/WebP, predeterminado 80) |
delay | number | 0 | Esperar ms antes de la captura |
blockAds | boolean | true | Bloquear anuncios y rastreadores |
blockCookieBanners | boolean | — | Ocultar banners comunes de cookies/consentimiento (GDPR/CCPA) antes de la captura |
blockResourceTypes | string[] | — | Bloquear tipos de recursos: font, image, media, stylesheet, other |
device | string | — | Preajuste de dispositivo: desktop, iphone_15, iphone_se, pixel_8, ipad, ipad_pro — establece viewport, escala y agente de usuario de una sola vez. Anula width/height/deviceScaleFactor/userAgent |
deviceScaleFactor | number | 2 | Relación de píxeles del dispositivo (1-3). 2× Retina por predeterminado |
timeout | number | 30 | Máximo de segundos para esperar la carga de la página (5-60) |
waitUntil | string | "networkidle2" | Preparación de la página: load, domcontentloaded, networkidle0, networkidle2 |
waitForSelector | string | — | Selector CSS para esperar antes de la captura |
bestAttempt | boolean | true | Devolver renderizado parcial en caso de tiempo de espera agotado en lugar de fallar |
selector | string | — | Selector CSS del elemento a capturar en lugar de la página completa |
hideSelectors | string[] | — | Selectores CSS a ocultar (display:none) antes de la captura, p. ej. ['.modal', '#newsletter-popup']. Máximo 50 |
css | string | — | CSS personalizado a inyectar antes de la captura (máx. 50KB) |
js | string | — | JavaScript personalizado a ejecutar antes de la captura (máx. 50KB) |
cookies | array | — | Cookies a establecer para capturas autenticadas (máx. 50) |
headers | object | — | Cabeceras HTTP personalizadas para la solicitud de la página |
userAgent | string | — | Anular la cadena de agente de usuario del navegador |
pdfFormat | string | — | Tamaño de página PDF: A4, Letter, Legal, Tabloid, A3 |
pdfLandscape | boolean | — | Orientación horizontal del PDF |
pdfPrintBackground | boolean | true | Imprimir fondo en PDF |
pdfScale | number | 1 | Factor de escala del PDF (0.1-2) |
pdfMargin | object | — | Márgenes del PDF: {top, right, bottom, left} como valores CSS |
geo | string | — | Código de país ISO para captura geodirigida (Pro/Enterprise) |
geoCity | string | — | Ciudad para geodirigido (requiere geo) |
geoState | string | — | Estado para geodirigido (requiere geo) |
async | boolean | — | Procesar de forma asíncrona (devuelve ID de trabajo) |
webhookUrl | string | — | URL para recibir callback cuando la captura asíncrona se complete (Starter+; Free/Basic consultan el estado del trabajo) |
cacheTtl | number | — | Segundos para almacenar en caché el resultado (3600-2592000) |
rendex_extract
Extrae contenido limpio en modo lectura de cualquier página web como Markdown, JSON o HTML. Ejecuta el mismo proceso de renderizado Chromium que una captura de pantalla, por lo que captura contenido después de que JavaScript se ejecute — manejando SPAs que los lectores de solo búsqueda omiten. Elimina navegación, anuncios y contenido repetitivo, devolviendo el cuerpo del artículo más título, firma y extracto. Ideal para alimentar contenido de página a un LLM, resumir o ingesta RAG.
"Extract the article text from https://example.com/post as Markdown"
"Pull the readable content from this SPA as JSON so I can summarize it"
Parámetros:
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
url | string | requerido | URL de la página web de la que extraer contenido legible |
extractFormat | "markdown" | "json" | "html" | "markdown" | Forma de salida — markdown (prosa amigable para LLM), json (estructurado: título/firma/extracto/nombreSitio/longitud), o html (HTML en modo lectura limpio) |
device | string | — | Preajuste de dispositivo (desktop, iphone_15, iphone_se, pixel_8, ipad, ipad_pro) — extrae la versión móvil/tablet de una página |
blockAds | boolean | true | Bloquear anuncios y rastreadores antes de la extracción |
blockCookieBanners | boolean | — | Ocultar muros comunes de cookies/consentimiento antes de la extracción |
hideSelectors | string[] | — | Selectores CSS a ocultar antes de la extracción, p. ej. ['.modal', '#newsletter-popup']. Máximo 50 |
waitUntil | string | "networkidle2" | Preparación de la página: load, domcontentloaded, networkidle0, networkidle2 |
timeout | number | 30 | Máximo de segundos para esperar la carga de la página (5-60) |
rendex_render_link
Renderiza una URL, HTML crudo o Markdown y devuelve una URL de imagen firmada, alojada y con caché perimetral en lugar de los bytes — ideal para imágenes OG dinámicas. Coloca la URL en <meta property="og:image"> o una etiqueta <img> y Rendex sirve una copia en caché en cada compartido. Acepta los mismos parámetros que rendex_screenshot, más un expiresIn opcional. Devuelve { url, expiresAt, format, cacheTtl }.
"Make me a hosted OG-image URL for this Markdown release note"
"Give me a render link for this HTML card that I can drop into og:image"
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
(todos los parámetros de rendex_screenshot) | — | — | Mismas opciones de fuente (url/html/markdown), formato, tamaño y plantillas |
expiresIn | number | TTL del servidor | Segundos hasta que la URL firmada expire (60–2592000) |
render_artifact
Convierte Markdown o HTML en un artefacto descargable con marca — un PDF, un PNG y una página de compartido alojada — en una sola llamada. Ideal para salidas de agentes: informes, facturas, resúmenes, notas de versión, paneles. Aplica un logotipo, color de acento, fuente, cabecera y pie de página; elige tamaño/orientación/márgenes de página PDF. Devuelve URLs alojadas { pdfUrl, pngUrl, shareUrl, expiresAt } — no se necesita almacenamiento de tu lado. Cada formato solicitado cuesta 1 crédito de renderizado.
"Turn this Markdown report into a branded PDF and PNG with our logo and an orange accent"
"Render this invoice HTML to a PDF and give me a share link that expires in a week"
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
content | string | requerido | El cuerpo de Markdown o HTML a renderizar (hasta ~4MB) |
inputFormat | "markdown" | "html" | "markdown" | Cómo interpretar content — markdown se convierte a HTML con estilo; html se usa como fragmento de cuerpo |
formats | ("pdf" | "png")[] | ["pdf","png"] | Qué formatos producir. Cada uno cuesta 1 crédito |
accentColor | string | — | Color de acento CSS para la barra, enlaces y encabezados (p. ej. #EA580C) |
logo | string | — | URL http(s) de una imagen de logotipo mostrada en la cabecera |
header | string | — | línea de cabecera en texto plano mostrada junto al logotipo |
footer | string | — | línea de pie de página en texto plano mostrada en la parte inferior |
font | string | — | pila de font-family CSS para el cuerpo |
pageSetup | object | — | { size, orientation, margin{top,right,bottom,left}, scale, width, height, fullPage } |
data | object | — | Datos Mustache — cuando se establece, content se renderiza como una plantilla Mustache sin lógica (más {{logo}}/{{header}}/… de branding) antes de la conversión |
expiresIn | number | 86400 | Segundos hasta que las URLs alojadas expiren (3600–2592000). Predeterminado 24h |
Rendex Watch
Monitorea una URL en un horario y recibe notificaciones cuando cambie — diff visual en Chrome real (con una superposición resaltada), diff de texto extraído, o ambos. Ocho herramientas permiten a un agente configurar, inspeccionar, editar y eliminar monitoreos en la plataforma compartida de Rendex (una clave rdx_, un fondo de créditos).
"Watch https://example.com/pricing for visual changes and alert my webhook"
"Before I save it, test whether you can capture #pricing on that page"
"Show me the last few runs of watch <id> — did anything change?"
| Herramienta | Propósito | Entradas clave |
|---|---|---|
watch_create | Crear un monitoreo (activo → captura su línea base ahora) | url, name?, intervalMinutes?, diffMode? (visual/texto/ambos), threshold?, renderParams?, webhookUrl? (Starter+), notifyEmail?, paused? |
watch_test | Probar una configuración primero (no crea nada) | igual que watch_create |
watch_list | Listar tus monitoreos | status? (activo/pausado/todos), cursor?, limit? |
watch_get | Obtener un monitoreo (+ URL de línea base) | id |
watch_run | Ejecutar una verificación ahora (1 crédito) | id |
watch_runs | Historial de ejecuciones con URLs firmadas antes/después/superposición | id, cursor?, limit? |
watch_update | Editar un monitoreo en el lugar — intervalo, modo de diff, canales, parámetros de renderizado | id, más cualquier campo watch_create; webhookUrl/notifyEmail aceptan null para limpiar un canal |
watch_delete | Eliminar un monitoreo + sus ejecuciones | id |
renderParams lleva los controles de captura por verificación (fullPage predeterminado a true, selector, device, geo (Pro+), más controles de ruido ignoreRegions/ignoreText/minTextChars/suppressWhilePresent y uaMode). Los mínimos de intervalo son por plan (Free 1440 / Basic 180 / Starter 60 / Pro 30 / Enterprise 5). Los metadatos del monitoreo + URLs de imagen firmadas se devuelven como texto JSON.
rendex_account
Consulta la cuenta desde el agente: en qué plan está, cuántos créditos de render se han usado este mes frente al límite (y cuándo se restablece), el límite de velocidad por minuto y un enlace de actualización con un solo toque. Permite que un agente responda "¿cuánto he usado?" o "¿cómo obtengo más renders?" sin enviar al usuario al panel de control. Solo lectura: no cuesta créditos.
"How many Rendex renders do I have left this month?"
"What plan am I on, and how do I upgrade for more?"
Devuelve { plan, usage: { used, limit, remaining, unlimited, resetsAt }, rateLimitPerMinute, upgrade: { recommendedPlan, recommendedPlanCredits, upgradeUrl, manageBillingUrl } }.
Plantillas de datos
Convierte una plantilla reutilizable en muchos documentos. Pasa un objeto data junto con html
o markdown, y Rendex renderiza la cadena como una plantilla Mustache sin lógica
antes de la captura: interpolación {{var}}, bucles {{#items}}…{{/items}} y
acceso anidado a {{a.b}}. Ideal para facturas, informes, certificados y tarjetas OG.
"Render this HTML invoice template to a PDF, filling it with this data:
<h1>Invoice {{number}}</h1><p>Total: {{total}}</p>
data = { number: 'INV-014', total: '$2,400' }"
data es válido solo con html o markdown: combinarlo con url devuelve un
error de validación.
Autenticación
Obtén tu clave de API en rendex.dev.
Configura la variable de entorno RENDEX_API_KEY en la configuración de tu cliente MCP.
Precios
| Plan | Llamadas/Mes | Velocidad |
|---|---|---|
| Gratis | 100 | 3/min |
| Inicial | 10,000 | 60/min |
| Pro | 100,000 | 300/min |
| Empresa | Personalizado | 1,000/min |
Licencia
MIT — Copperline Labs LLC