Fetch, parse, screenshot and browse pages via MCP without a real browser -- no JS execution.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
mcp-name: io.github.MauricioPerera/kite-lite
Motor web ligero, autocontenido y orientado a agentes. Está diseñado para ejecutarse fuera de Cloudflare en un VPS o contenedor, con un parser HTML, JavaScript aislado, renderizado SVG determinista y una superficie CDP pequeña.
El núcleo DOM en Rust:
fetch/CDP)
mediante un cliente HTTP con cookie jar propio;{x, y, width, height} en
Element.layout) usando una hoja de estilos por defecto fija por tag
(tamaños/negrita de h1-h6, márgenes de p/li/blockquote), con ajuste de
texto (word wrap) — ver la sección "Layout mÃnimo" para las limitaciones;
permite click/escritura/submit de formularios por CDP sin ejecutar JS de
la página — ver "Interacción: click, escritura y submit de formularios";
renderiza a PNG y PDF además de SVG — ver "Renderizado PNG/PDF";
se puede correr como servidor MCP por stdio — ver "Servidor MCP".kite-lite le da a un agente acceso a la web sin arrastrar un navegador real
(Chromium/Playwright) — pico de memoria medido de ~4-7 MiB (ver "Recursos
mÃnimos"), arranque en milisegundos, corre bajo --network=none/
--cap-drop=ALL/--read-only sin romperse. Eso cambia el cálculo de costo:
en vez de una instancia pesada compartida, es viable levantar una por tarea,
en paralelo, en un VPS chico.
Lo que habilita, concretamente:
fetch_page) — resumen liviano
(tÃtulo/texto/links), no el DOM completo con layout. Ahorra contexto
frente a devolver HTML crudo cuando el agente solo necesita "qué dice
esta página".browser_navigate + cookies/redirecciones
persistentes) — flujos de varios pasos (login → página protegida),
mientras el flujo no dependa de JS del lado cliente.type o name.eval_js) — extraer un valor calculado o
probar una expresión, con garantÃas reales de sandboxing: sin red, sin
filesystem, en un proceso separado que ni siquiera puede linkear
reqwest/tokio (ver "Servidor MCP").render_screenshot/browser_screenshot) — para
verificación aproximada o reportes, no para QA visual pixel-perfect (ver
"Layout mÃnimo").webmcp-lint, a11y-lint, seo-lint, social-lint) le dan a
un agente que construye o revisa sitios un gate determinista y barato,
sin gastar una llamada a un modelo para chequear si falta un
<meta description>.browser_call_tool) — si el sitio objetivo
publica formularios anotados, el agente consume una interfaz con schema
en vez de adivinar selectores (ver "Soporte declarativo de WebMCP").Los lÃmites duros, por diseño — no son bugs, son la contracara directa de lo anterior (ver "Próximas capas" para el porqué):
fetch del lado cliente, cualquier framework que renderiza
en el navegador, es invisible.onclick ni ningún evento de
verdad, solo navegación (<a>) y submit GET.method="post" real no se puede
enviar con cuerpo.Runtime.callFunctionOn contra un DOM vivo (asà opera
Playwright internamente) no funciona (ver "Compatibilidad CDP").Tiene sentido para: contenido servido en HTML plano (blogs, docs, la mayorÃa de sitios de contenido, APIs que devuelven HTML, formularios GET simples), lectura/extracción/auditorÃa en volumen donde el costo de un navegador real no se justifica, o cualquier caso donde el aislamiento (sin red desde el JS, sin DOM vivo) es una ventaja de seguridad, no una limitación. Para SPAs, interacción compleja, o sitios que validan con JS del cliente, hace falta un navegador real — no hay atajo.
render (and POST /v1/render, via ?format=png|pdf|svg) picks the output
format from the --output path's extension (.svg is the default for
anything else).
--js evaluates a script in a fresh Boa JavaScript context with no filesystem,
network, or host bindings. The page snapshot exposes document.title,
document.body.innerText, and a limited document.querySelector() for the
first h1, h2, h3, p, a, or button. --svg writes a deterministic
rendering driven by the minimal layout described below (see "Layout
mÃnimo"): every leaf element with text gets word-wrapped and positioned
according to a fixed default style per tag.
Example:
The JavaScript context now has source-size, recursion, and VM stack limits. The
CLI additionally runs page scripts in a separate kite-lite-js process and
terminates it after 1.5 seconds. That evaluator binary does not link
reqwest/tokio at all, so it cannot make network requests regardless of
what a script tries to do — the isolation is a property of what's compiled
into the executable, not just of what the code chooses to call. This is a
useful local isolation boundary; production deployments should still add
OS-level resource limits and containers or microVMs.
La imagen Docker ejecuta el binario como usuario sin privilegios. Para una prueba con lÃmites estrictos de recursos:
El acceso de red es necesario en este modo para descargar la URL. Para páginas
ya serializadas, se puede ejecutar el evaluador sin red — y desde que el
evaluador (kite-lite-js) es un binario separado que no enlaza reqwest ni
tokio, --network=none es una garantÃa real del binario, no solo de la
configuración del contenedor:
El renderizado también puede ejecutarse sin red:
fetch, Page.navigate/Page.reload en CDP, y POST /v1/parse calculan un
layout de bloque simple sobre el árbol y lo guardan en Element.layout
({x, y, width, height}) antes de devolver el Page. render_svg vuelve a
calcularlo internamente al ancho exacto que se le pide renderizar (no
reutiliza el guardado en el JSON, para no desalinearse si se pide un ancho
distinto).
Esto no es un motor de CSS:
<style> ni style="..." ni clases/ids — los tamaños, negrita y
márgenes son fijos por nombre de tag (h1-h6, p, li, blockquote, strong/b),
una imitación mÃnima de una hoja de estilos de usuario por defecto;text (sin
conservar el orden ni los nodos de texto como hermanos), asà que texto
suelto junto a un hijo — por ejemplo <p>Hola <a href="/x">link</a></p> —
no tiene dónde calcularse por separado una vez que el padre tiene un hijo
elemento; solo el texto propio de los nodos hoja se ajusta (word wrap) y
se dibuja;x siempre es 0.0: no hay eje horizontal en el layout, solo apilado
vertical;render_svg se puede rasterizar a PNG (resvg + tiny-skia, Rust puro, sin
depender de un navegador ni de herramientas externas) y ese PNG se puede
envolver en un PDF de una sola página (printpdf).
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/kite-lite)<a href="https://allmcps.com/mcp/kite-lite"><img src="https://allmcps.com/api/badge/kite-lite?style=directory" alt="Kite Lite on AllMCPs" /></a>