Skip to main content
Glama

haden-browser

haden-browser es un navegador web rápido, pensado para IA, expuesto como un servidor local de Model Context Protocol. Ofrece a la IA la representación de página útil más pequeña para su objetivo actual en lugar de enviar capturas de pantalla y el código fuente de la página en cada turno.

Benchmark: 33 % menos de contexto de navegador para IA

Resultado principal: Haden utilizó 7.822 tokens de referencia para la sesión principal de navegación—un 32,7 % menos que Playwright MCP y un 32,5 % menos que Chrome DevTools MCP en modo completo. Entre los MCP de navegador probados que devolvieron referencias de acción semánticas y cobertura de texto alternativo de imágenes, Haden tuvo la menor huella de tokens.

Descripción general del benchmark de Browser MCP que muestra el uso de tokens, la latencia y la transferencia de origen

Mediana de cinco ejecuciones

Haden

Playwright MCP

Chrome Slim†

Chrome Full

Tokens de contexto principal

7.822

11.627

4.638

11.596

Tokens de esquema de herramienta

727

3.999

221

4.974

Tokens de flujo de trabajo de artículo

2.732

4.640

2.497

4.388

Primer artículo útil

1.044 ms

2.714 ms

3.005 ms

3.133 ms

Transferencia de origen del artículo

16,7 KB / 1 solicitud

95,0 KB / 10

95,0 KB / 10

95,0 KB / 10

Referencias de acción semánticas

15

172

0

143

Cobertura de texto alternativo de imagen

8/8

8/8

0/8

8/8

† Chrome Slim es el mínimo absoluto de tokens, pero es una base de control de JavaScript de bajo nivel: el modelo debe escribir los scripts de la página, y la ruta probada no devolvió referencias de acción semánticas ni texto alternativo de imágenes. Por lo tanto, se muestra con transparencia, pero no se trata como un equivalente de navegador semántico.

El contexto principal incluye una carga completa del esquema de herramientas, además de las llamadas y los resultados serializados de las herramientas MCP para la lectura de artículos, el envío de formularios y la inspección de estilos calculados. Los recuentos utilizan el tokenizador o200k_base. Los píxeles de las imágenes, los prompts de usuario/sistema y el razonamiento o la prosa del modelo se excluyen, por lo que el uso facturado real depende del host y del modelo de MCP.

Consulta el informe completo del benchmark, los datos brutos por ejecución y las instrucciones de reproducción.

Related MCP server: Charlotte

Por qué es diferente

  • Vistas basadas en objetivos — usan texto semántico compacto para la investigación, DOM saneado para la estructura o estilos calculados acotados para el trabajo visual.

  • Las imágenes se mantienen diferidas — una imagen se representa como su texto alternativo o [image img1]. Los datos de píxeles solo se devuelven cuando la IA llama explícitamente a haden_image.

  • Control de pocas idas y vueltas — cada interacción devuelve una instantánea nueva, por lo que la mayoría de los flujos de clic/escritura necesitan una llamada de herramienta por paso.

  • Referencias de acción estables — los controles visibles se convierten en e1, e2, etc., lo que resulta más económico y fiable que pedir a un modelo que invente selectores CSS.

  • Rápido por defecto — las solicitudes de imágenes, medios y fuentes se bloquean durante la navegación normal. CSS sigue disponible para la vista visual.

  • Ejecución local más segura — los esquemas no HTTP, las URL con credenciales y los destinos de redes privadas se bloquean a menos que el usuario lo habilite explícitamente.

flowchart LR
    AI[AI / MCP host] -->|stdio tools| MCP[haden-browser]
    MCP --> PW[Playwright Chromium]
    PW --> PAGE[Web page]
    PAGE -->|semantic text / DOM / computed CSS| MCP
    MCP -.->|only haden_image imgN| PIXELS[Image bytes]
    PIXELS -.-> AI

Vistas

Vista

Mejor para

Datos devueltos

text

Búsqueda, lectura, flujos de formulario

Encabezados, texto visible, enlaces y controles con referencias e, marcadores de posición de imagen

dom

Estructura y atributos HTML

HTML saneado; scripts y contenido incrustado eliminados; <img> reemplazado por <haden-image>

visual

Diseño y razonamiento CSS

Elementos visibles significativos con cajas y un conjunto acotado de propiedades CSS calculadas

text es la opción predeterminada y debe preferirse a menos que la tarea realmente necesite detalles de estructura o presentación.

Herramientas MCP

Herramienta

Propósito

haden_open

Abrir una URL HTTP(S) y devolver su primera instantánea

haden_read

Leer la página actual, opcionalmente dentro de un selector CSS

haden_interact

Hacer clic, rellenar, seleccionar, pulsar, desplazarse, navegar por el historial, recargar o esperar; luego devolver la instantánea actualizada

haden_image

Devolver los píxeles reales de la imagen para una referencia img de la última instantánea

haden_status

Informar de la página activa sin iniciar Chromium

Ejemplo de salida de texto:

# Example Domain
URL: https://example.com/
View: text
Interactive elements: 1
Images: 1 (use haden_image with an img ref only when visual inspection is needed)

# Example Domain
This domain is for use in illustrative examples.
[e1] link "More information" -> https://iana.org/domains/example
[image img1: "Example diagram"]

Las referencias están acotadas a la última instantánea. Vuelve a leer después de cambios sustanciales en la página antes de reutilizar una referencia e o img antigua.

Requisitos

  • Node.js 20 o superior

  • Chromium instalado mediante Playwright

Instalación desde este repositorio

git clone https://github.com/Haden-Min/haden-browser.git
cd haden-browser
npm ci
npm run setup-browser
npm run build

A continuación, configura un host de MCP para lanzar el servidor stdio compilado. Usa una ruta absoluta en la configuración real:

{
  "mcpServers": {
    "haden-browser": {
      "command": "node",
      "args": ["/absolute/path/to/haden-browser/dist/index.js"]
    }
  }
}

Durante el desarrollo, un host puede lanzar npx tsx /absolute/path/to/haden-browser/src/index.ts en su lugar.

Una vez que el paquete se publique en npm, la configuración prevista es:

{
  "mcpServers": {
    "haden-browser": {
      "command": "npx",
      "args": ["-y", "haden-browser"]
    }
  }
}

Ejecuta npx playwright install chromium una vez en esa máquina antes de la primera llamada del navegador.

Configuración

Variable de entorno

Valor predeterminado

Descripción

HADEN_HEADLESS

true

Ejecutar Chromium sin una ventana visible

HADEN_BLOCK_HEAVY_ASSETS

true

Bloquear imágenes, multimedia y fuentes durante la navegación normal

HADEN_ALLOW_PRIVATE_HOSTS

false

Permitir localhost y destinos de red privada

HADEN_NAVIGATION_TIMEOUT_MS

20000

Tiempo de espera de navegación y obtención de imágenes

HADEN_ACTION_TIMEOUT_MS

8000

Tiempo de espera de clic, relleno y localizador

HADEN_MAX_CHARS

30000

Límite de caracteres predeterminado de la instantánea

HADEN_MAX_IMAGE_BYTES

5242880

Máximo de bytes devueltos por haden_image

Las variables booleanas aceptan true/false, 1/0, yes/no y on/off.

Páginas de desarrollo local

Los hosts privados se bloquean por defecto para reducir el riesgo de SSRF. Para navegar por una aplicación en localhost, habilítalo solo para ese proceso de MCP:

{
  "mcpServers": {
    "haden-browser-local": {
      "command": "node",
      "args": ["/absolute/path/to/haden-browser/dist/index.js"],
      "env": { "HADEN_ALLOW_PRIVATE_HOSTS": "true" }
    }
  }
}

Desarrollo

npm install
npm run setup-browser
npm run check
npm run build

El conjunto de pruebas cubre la política de red, la conformación de texto, la extracción con Chromium real, las interacciones basadas en referencias, la recuperación diferida de imágenes y una conexión cliente/servidor MCP en memoria.

Limitaciones actuales

  • Se mantiene un contexto de navegador activo por conexión MCP stdio.

  • Las referencias de imagen cubren actualmente los elementos HTML <img> visibles, no las imágenes de fondo CSS, los canvas, los fotogramas de vídeo ni el contenido de los iframes.

  • La vista visual informa de las propiedades calculadas; no vuelca todas las reglas de las hojas de estilo.

  • Las descargas, la subida de archivos, las extensiones del navegador, los perfiles persistentes y la resolución de CAPTCHA quedan fuera del MVP.

  • El filtrado de hosts privados reduce la exposición a SSRF, pero no sustituye al aislamiento de red a nivel de sistema operativo/contenedor en entornos hostiles de múltiples inquilinos.

Consulta CONTRIBUTING.md para obtener orientación sobre el desarrollo y SECURITY.md para notificar vulnerabilidades.

Licencia

MIT

Available Tools

5 tools
haden_imageInspect imageA
Read-only

Return the actual pixels for one img ref from the latest snapshot. Use only after alt text/placeholders are insufficient for the goal.

NameRequiredDescriptionDefault
refYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering safety. The description adds context about the data source ('latest snapshot') and output nature ('actual pixels'), but doesn't detail return format or potential edge cases, which is acceptable given annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the primary action and followed by a usage condition. Every word is purposeful, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one param, no nested objects) and rich annotations (readOnly, openWorld, destructive), the description sufficiently covers what the tool does and when to use it. The absence of an output schema reduces the need to document return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter (ref) and schema description coverage of 0%, the description does not explicitly explain the parameter format. However, the schema pattern (^img\d+$) and the phrase 'one img ref' provide some meaning. The description adds minimal semantic value beyond what the schema already implies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb and resource: 'Return the actual pixels for one img ref from the latest snapshot.' This distinguishes it from sibling tools like haden_read or haden_open by focusing on image pixel retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit guidance on when to use the tool: 'Use only after alt text/placeholders are insufficient for the goal.' This implies alternatives (alt text/placeholders) and sets a clear condition, though it does not name specific sibling tools or list when-not-to-use scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

haden_interactInteract with pageA
Destructive

Perform one browser action and immediately return the updated snapshot, avoiding an extra read call. click/fill/select need a current e ref; press can target a ref or the page.

NameRequiredDescriptionDefault
keyNo
refNo
modeNotext
valueNo
actionYes
amountNo
waitMsNo
maxCharsNo
directionNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes the immediate return of the updated snapshot, adding value beyond the destructiveHint annotation. Does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff, well-structured and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Explains core behavior and return, but lacks detail on parameter usage and edge cases, which is somewhat expected given the 9 parameters and 3 enums.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only partially explains parameters (action, ref), leaving many (key, value, amount, waitMs, maxChars) undocumented. Schema enums help but description does not compensate sufficiently.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it performs a browser action and returns an updated snapshot, distinguishing it from read-only siblings like read and status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance on when to use (to avoid extra read calls) and which actions require a current ref, but does not explicitly contrast with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

haden_openOpen web pageA
Read-only

Open an HTTP(S) URL and return an AI-optimized snapshot. text is fastest; dom returns sanitized HTML; visual adds computed layout/CSS.

NameRequiredDescriptionDefault
urlYes
modeNotext
maxCharsNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint, so the safety profile is clear. The description adds valuable behavioral details: returning an AI-optimized snapshot and specifying sanitized HTML for dom mode. It does not contradict annotations and offers meaningful context beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core action and then efficiently outlines mode differences. Every clause adds value; there is no fluff or redundancy. It is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, no output schema, and moderate complexity, the description covers purpose and mode meanings but omits maxChars explanation and does not clarify what 'snapshot' encompasses beyond the modes. It is adequate but leaves room for improvement, especially since schema coverage is zero.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 0% of parameters, so the description must compensate. It effectively explains the mode parameter (text/dom/visual semantics), but fails to describe maxChars, leaving its purpose and constraints solely to the schema. Url is self-evident from its format but still lacks narrative. Given the low coverage, this is insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the primary action (open an HTTP(S) URL) and the result (AI-optimized snapshot), making the purpose clear. It doesn't explicitly compare with sibling tools, but the resource and verb are specific enough to differentiate from likely 'read' or 'interact' functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance on choosing output modes (text, dom, visual) with performance/reliability trade-offs, but lacks explicit direction on when to use this tool versus sibling tools like haden_read or haden_interact. The description implies usage for fetching web pages but does not state alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

haden_readRead current pageA
Read-only

Read the current page again, optionally limited to a CSS selector. Returns stable e refs for actions and img refs for optional image retrieval.

NameRequiredDescriptionDefault
modeNotext
maxCharsNo
selectorNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by disclosing that refs are stable and that image retrieval is optional. It does not contradict annotations, and the additional behavioral context (stable refs) goes beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence followed by a clarifying clause. It front-loads the core purpose and adds only high-value return info. No fluff, every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 3 parameters lacking schema descriptions, the description is incomplete. It covers the selector's purpose but ignores mode and maxChars, which are essential for understanding output types and limits. The refs info helps but does not bridge the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains 'selector' via 'optionally limited to a CSS selector', but gives no meaning for 'mode' (text/dom/visual) or 'maxChars'. This is a significant gap for effective tool invocation, as agents cannot infer the purpose of these parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads the current page, optionally limited by a CSS selector, and mentions it returns stable refs for actions and images. This specific verb+resource+scope distinguishes it from siblings like haden_interact or haden_open.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it ('Read the current page again') and mentions optional selector, which suggests targeted reading. However, it does not explicitly state when NOT to use it or compare with alternatives like haden_image for visual capture, though the context is reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

haden_statusBrowser statusA
Read-only

Report whether the browser is running and which page is active.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description aligns with the annotations (readOnlyHint=true, destructiveHint=false) and adds a small behavioral detail: it reports the active page, not just a running flag. However, it does not disclose what happens if the browser is not running, what 'active page' means in practice, or whether the tool returns a simple boolean, a URL, or both. With annotations already signaling safety, the description adds only modest context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word earns its place: it names the action, the target resource, and the exact two pieces of information reported.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only status tool with no output schema, the description is sufficiently complete. It clearly states what the tool reports, and no additional input or prerequisite detail is needed. The absence of an output schema is compensated by specifying that the tool reports both browser-running state and active page.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema contains no properties, so the description does not need to explain parameter meaning. The baseline for a parameterless tool is 4, and the description correctly focuses on behavior rather than inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Report') and a clear resource ('whether the browser is running and which page is active'), making the tool's purpose immediately obvious. It is also clearly differentiated from sibling tools like haden_open, haden_read, haden_interact, and haden_image, which describe actions rather than state inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance about when to use this tool versus alternatives, nor any when-not-to-use conditions. The context is implied by the name and siblings, but the description does not state that this should be used before acting on the browser or how it relates to the other browser tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedhaden_image
    • First observedhaden_interact
    • First observedhaden_open
    • First observedhaden_read
    • First observedhaden_status

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a unique, non-overlapping purpose: open, read, interact, image, and status. No ambiguity between them.

Naming Consistency5/5

All tools follow the consistent 'haden_' prefix with clear action verbs (open, read, interact, image, status). The pattern is uniform.

Tool Count5/5

Five tools provide a well-scoped set for browser automation—covering navigation, reading, interaction, visual capture, and state checking—without excess or deficiency.

Completeness4/5

The set covers core browser operations, but lacks explicit navigation controls (e.g., back, forward, refresh) and waiting mechanisms. These can be worked around via interact/open, but are minor gaps.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to browse and interact with web pages through compact, structured representations — page summaries, targeted element queries, and full detail on demand — instead of paying for a full accessibility-tree dump on every call. This cuts the token cost of reading content-heavy pages by up to ~140x while still supporting navigation, forms, clicks, screenshots, and session management.
    4 npm
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to browse and interact with web pages through compact, structured page representations instead of full accessibility-tree dumps, returning a lightweight orientation on arrival and targeted element queries on demand. Agents can navigate, search, fill forms, and control sessions while choosing detail levels to keep token usage low.
    4 npm
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Gives AI agents structured, token-efficient access to the web by returning compact page summaries and targeted queries instead of full accessibility-tree dumps, with tools for navigation, interaction, monitoring, and session management. Agents can drill into detail only when needed, cutting context costs dramatically on content-heavy pages.
    4 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to browse and interact with web pages through a compact, structured representation, returning a small orientation on arrival plus targeted queries for specific elements instead of a full accessibility-tree dump. Supports navigation, element interaction, form filling, screenshots, network monitoring, and session management while cutting token cost dramatically on content-heavy pages.
    4 npm
    MIT