Browser Use

Un servidor de automatización de navegador impulsado por IA para control en lenguaje natural e investigación web, con acceso a CLI.

Documentación

mcp-server-browser-use

Servidor MCP que brinda a los asistentes de IA la capacidad de controlar un navegador web.

License


Tabla de Contenidos


¿Qué es esto?

Esto envuelve browser-use como un servidor MCP, permitiendo que Claude (o cualquier cliente MCP) automatice un navegador real—navegar páginas, completar formularios, hacer clic en botones, extraer datos y más.

¿Por qué HTTP en lugar de stdio?

Las tareas de automatización del navegador toman 30-120+ segundos. El transporte estándar stdio de MCP tiene problemas de tiempo de espera con operaciones de larga duración—las conexiones se caen a mitad de la tarea. El transporte HTTP resuelve esto ejecutándose como un demonio persistente que maneja solicitudes de manera confiable sin importar la duración.


Instalación

Plugin de Claude Code (Recomendado)

Instala como un plugin de Claude Code para configuración automática:

# Install the plugin
/plugin install browser-use/mcp-browser-use

El plugin automáticamente:

  • Instala los navegadores de Playwright en la primera ejecución
  • Inicia el demonio HTTP cuando Claude Code se inicia
  • Registra el servidor MCP con Claude

Establece tu clave API (el agente del navegador necesita un LLM para decidir acciones):

# Set API key (environment variable - recommended)
export GEMINI_API_KEY=your-key-here

# Or use config file
mcp-server-browser-use config set -k llm.api_key -v your-key-here

¡Eso es todo! Claude ahora puede usar las herramientas de automatización del navegador.

Instalación Manual

Para otros clientes MCP o uso independiente:

# Clone and install
git clone https://github.com/Saik0s/mcp-browser-use.git
cd mcp-server-browser-use
uv sync

# Install browser
uv run playwright install chromium

# Start the server
uv run mcp-server-browser-use server

Agregar a Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "browser-use": {
      "type": "streamable-http",
      "url": "http://localhost:8383/mcp"
    }
  }
}

Para clientes MCP que no soportan transporte HTTP, usa mcp-remote como proxy:

{
  "mcpServers": {
    "browser-use": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:8383/mcp"]
    }
  }
}

Interfaz Web

Accede al visor de tareas en http://localhost:8383 cuando el demonio esté ejecutándose.

Características:

  • Lista de tareas en tiempo real con estado y progreso
  • Detalles de tareas con registros de ejecución
  • Estado de salud del servidor y tiempo de actividad
  • Monitoreo de tareas en ejecución

La interfaz web proporciona visibilidad de las tareas de automatización del navegador sin requerir comandos CLI.


Panel Web

Accede al panel completo en http://localhost:8383/dashboard cuando el demonio esté ejecutándose.

Características:

  • Pestaña de Tareas: Historial completo de tareas con filtrado, actualizaciones de estado en tiempo real y registros de ejecución detallados
  • Pestaña de Habilidades: Explora, inspecciona y gestiona habilidades aprendidas con estadísticas de uso
  • Pestaña de Historial: Vista histórica de todas las tareas completadas con filtrado por estado y tiempo

Capacidades Clave:

  • Ejecutar habilidades existentes directamente desde el panel con parámetros personalizados
  • Iniciar sesiones de aprendizaje para capturar nuevas habilidades
  • Eliminar habilidades obsoletas o inválidas
  • Monitorear tareas en ejecución con actualizaciones de progreso en vivo
  • Ver resultados completos de tareas y detalles de errores

El panel proporciona una interfaz web integral para gestionar todos los aspectos de la automatización del navegador sin comandos CLI.


Configuración

La configuración se almacena en ~/.config/mcp-server-browser-use/config.json.

Ver configuración actual:

mcp-server-browser-use config view

Cambiar configuración:

mcp-server-browser-use config set -k llm.provider -v openai
mcp-server-browser-use config set -k llm.model_name -v gpt-4o
# Note: Set API keys via environment variables (e.g., ANTHROPIC_API_KEY) for better security
# mcp-server-browser-use config set -k llm.api_key -v sk-...
mcp-server-browser-use config set -k browser.headless -v false
mcp-server-browser-use config set -k agent.max_steps -v 30

Referencia de Configuración

ClavePredeterminadoDescripción
llm.providergoogleProveedor de LLM (anthropic, openai, google, azure_openai, groq, deepseek, cerebras, ollama, bedrock, browser_use, openrouter, vercel)
llm.model_namegemini-3-flash-previewModelo para el agente del navegador
llm.api_key-Clave API para el proveedor (prefiere variables de entorno: GEMINI_API_KEY, ANTHROPIC_API_KEY, etc.)
browser.headlesstrueEjecutar navegador sin interfaz gráfica
browser.cdp_url-Conectar a Chrome existente (ej., http://localhost:9222)
browser.user_data_dir-Directorio de perfil de Chrome para inicios de sesión/cookies persistentes
browser.chromium_sandboxtrueHabilitar sandboxing de Chromium por seguridad
agent.max_steps20Pasos máximos por tarea del navegador
agent.use_visiontrueHabilitar capacidades de visión para el agente
research.max_searches5Búsquedas máximas por tarea de investigación
research.search_timeout-Tiempo de espera para búsquedas individuales
server.host127.0.0.1Dirección de enlace del servidor
server.port8383Puerto del servidor
server.results_dir-Directorio para guardar resultados
server.auth_token-Token de autenticación para conexiones fuera de localhost
skills.enabledfalseHabilitar sistema de habilidades (beta - deshabilitado por defecto)
skills.directory~/.config/browser-skillsUbicación de almacenamiento de habilidades
skills.validate_resultstrueValidar resultados de ejecución de habilidades

Prioridad de Configuración

Environment Variables > Config File > Defaults

Las variables de entorno usan el prefijo MCP_ + sección + _ + clave (ej., MCP_LLM_PROVIDER).

Usando Tu Propio Navegador

Opción 1: Perfil Persistente (Recomendado)

Usa un perfil de Chrome dedicado para preservar inicios de sesión y cookies:

# Set user data directory
mcp-server-browser-use config set -k browser.user_data_dir -v ~/.chrome-browser-use

Opción 2: Conectar a Chrome Existente

Conecta a una instancia de Chrome existente (útil para depuración avanzada):

# Launch Chrome with debugging enabled
google-chrome --remote-debugging-port=9222

# Configure CDP connection (localhost only for security)
mcp-server-browser-use config set -k browser.cdp_url -v http://localhost:9222

Referencia de CLI

Gestión del Servidor

mcp-server-browser-use server          # Start as background daemon
mcp-server-browser-use server -f       # Start in foreground (for debugging)
mcp-server-browser-use status          # Check if running
mcp-server-browser-use stop            # Stop the daemon
mcp-server-browser-use logs -f         # Tail server logs

Llamando Herramientas

mcp-server-browser-use tools           # List all available MCP tools
mcp-server-browser-use call run_browser_agent task="Go to google.com"
mcp-server-browser-use call run_deep_research topic="quantum computing"

Configuración

mcp-server-browser-use config view     # Show all settings
mcp-server-browser-use config set -k <key> -v <value>
mcp-server-browser-use config path     # Show config file location

Observabilidad

mcp-server-browser-use tasks           # List recent tasks
mcp-server-browser-use tasks --status running
mcp-server-browser-use task <id>       # Get task details
mcp-server-browser-use task cancel <id> # Cancel a running task
mcp-server-browser-use health          # Server health + stats

Gestión de Habilidades

mcp-server-browser-use call skill_list
mcp-server-browser-use call skill_get name="my-skill"
mcp-server-browser-use call skill_delete name="my-skill"

Consejo: Las habilidades también se pueden gestionar a través del panel web en http://localhost:8383/dashboard para una interfaz visual con ejecución de un clic y sesiones de aprendizaje.


Herramientas MCP

Estas herramientas se exponen a través de MCP para clientes de IA:

HerramientaDescripciónDuración Típica
run_browser_agentEjecutar tareas de automatización del navegador60-120s
run_deep_researchInvestigación multi-búsqueda con síntesis2-5 min
skill_listListar habilidades aprendidas<1s
skill_getObtener definición de habilidad<1s
skill_deleteEliminar una habilidad<1s
health_checkEstado del servidor y tareas en ejecución<1s
task_listConsultar historial de tareas<1s
task_getObtener detalles completos de tarea<1s

run_browser_agent

La herramienta principal. Dile lo que quieres en lenguaje natural:

mcp-server-browser-use call run_browser_agent \
  task="Find the price of iPhone 16 Pro on Apple's website"

El agente lanza un navegador, navega a apple.com, encuentra el producto y devuelve el precio.

Parámetros:

ParámetroTipoDescripción
taskstringQué hacer (requerido)
max_stepsintSobrescribir pasos máximos predeterminados
skill_namestringUsar una habilidad aprendida
skill_paramsJSONParámetros para la habilidad
learnboolHabilitar modo de aprendizaje
save_skill_asstringNombre para la habilidad aprendida

run_deep_research

Investigación web multi-paso con síntesis automática:

mcp-server-browser-use call run_deep_research \
  topic="Latest developments in quantum computing" \
  max_searches=5

El agente busca en múltiples fuentes, extrae hallazgos clave y compila un informe en markdown.


Investigación Profunda

La investigación profunda ejecuta un flujo de trabajo de 3 fases:

┌─────────────────────────────────────────────────────────┐
│  Phase 1: PLANNING                                       │
│  LLM generates 3-5 focused search queries from topic     │
└─────────────────────────────┬───────────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────┐
│  Phase 2: SEARCHING                                      │
│  For each query:                                         │
│    • Browser agent executes search                       │
│    • Extracts URL + summary from results                 │
│    • Stores findings                                     │
└─────────────────────────────┬───────────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────┐
│  Phase 3: SYNTHESIS                                      │
│  LLM creates markdown report:                            │
│    1. Executive Summary                                  │
│    2. Key Findings (by theme)                            │
│    3. Analysis and Insights                              │
│    4. Gaps and Limitations                               │
│    5. Conclusion with Sources                            │
└─────────────────────────────────────────────────────────┘

Los informes se pueden guardar automáticamente configurando research.save_directory.


Observabilidad

Todas las ejecuciones de herramientas se rastrean en SQLite para depuración y monitoreo.

Ciclo de Vida de Tareas

PENDING ──► RUNNING ──► COMPLETED
               │
               ├──► FAILED
               └──► CANCELLED

Etapas de Tareas

Durante la ejecución, las tareas progresan a través de etapas granulares:

INITIALIZING → PLANNING → NAVIGATING → EXTRACTING → SYNTHESIZING

Consultando Tareas

Listar tareas recientes:

mcp-server-browser-use tasks
┌──────────────┬───────────────────┬───────────┬──────────┬──────────┐
│ ID           │ Tool              │ Status    │ Progress │ Duration │
├──────────────┼───────────────────┼───────────┼──────────┼──────────┤
│ a1b2c3d4     │ run_browser_agent │ completed │ 15/15    │ 45s      │
│ e5f6g7h8     │ run_deep_research │ running   │ 3/7      │ 2m 15s   │
└──────────────┴───────────────────┴───────────┴──────────┴──────────┘

Obtener detalles de tarea:

mcp-server-browser-use task a1b2c3d4

Salud del servidor:

mcp-server-browser-use health

Muestra tiempo de actividad, uso de memoria y tareas actualmente en ejecución.

Herramientas MCP para Observabilidad

Los clientes de IA pueden consultar el estado de las tareas directamente:

  • health_check - Estado del servidor + lista de tareas en ejecución
  • task_list - Tareas recientes con filtro de estado opcional
  • task_get - Detalles completos de una tarea específica

Almacenamiento

  • Base de datos: ~/.config/mcp-server-browser-use/tasks.db
  • Retención: Las tareas completadas se eliminan automáticamente después de 7 días
  • Formato: SQLite con modo WAL para concurrencia

Sistema de Habilidades (Súper Alfa)

Advertencia: Esta característica es experimental y está en desarrollo activo. Espera bordes ásperos.

Las habilidades están deshabilitadas por defecto. Actívalas primero:

mcp-server-browser-use config set -k skills.enabled -v true

Las habilidades te permiten "enseñar" al agente una tarea una vez, luego reproducirla 50 veces más rápido reutilizando endpoints de API descubiertos en lugar de la automatización completa del navegador.

El Problema

La automatización del navegador es lenta (60-120 segundos por tarea). Pero la mayoría de los sitios web tienen APIs detrás de su interfaz. Si podemos descubrir esas APIs, podemos llamarlas directamente.

La Solución

Las habilidades capturan las llamadas API realizadas durante una sesión del navegador y las reproducen directamente a través de CDP (Protocolo de DevTools de Chrome).

Without Skills:  Browser navigation → 60-120 seconds
With Skills:     Direct API call    → 1-3 seconds

Aprendiendo una Habilidad

mcp-server-browser-use call run_browser_agent \
  task="Find React packages on npmjs.com" \
  learn=true \
  save_skill_as="npm-search"

Lo que sucede:

  1. Grabación: CDP captura todo el tráfico de red durante la ejecución
  2. Análisis: El LLM identifica la "solicitud clave"—la llamada API que devuelve los datos
  3. Extracción: Los patrones de URL, encabezados y reglas de análisis de respuesta se guardan
  4. Almacenamiento: La habilidad se guarda como YAML en ~/.config/browser-skills/npm-search.yaml

Usando una Habilidad

mcp-server-browser-use call run_browser_agent \
  skill_name="npm-search" \
  skill_params='{"query": "vue"}'

Dos Modos de Ejecución

Cada habilidad soporta dos rutas de ejecución:

1. Ejecución Directa (Ruta Rápida) ~2 segundos

Si la habilidad capturó un endpoint de API (SkillRequest):

Initialize CDP session
    ↓
Navigate to domain (establish cookies)
    ↓
Execute fetch() via Runtime.evaluate
    ↓
Parse response with JSONPath
    ↓
Return data

2. Ejecución Basada en Pistas (Respaldo) ~60-120 segundos

Si la ejecución directa falla o no se encontró API:

Inject navigation hints into task prompt
    ↓
Agent uses hints as guidance
    ↓
Agent discovers and calls API
    ↓
Return data

Formato de Archivo de Habilidad

Las habilidades se almacenan como YAML en ~/.config/browser-skills/:

name: npm-search
description: Search for packages on npmjs.com
version: "1.0"

# For direct execution (fast path)
request:
  url: "https://www.npmjs.com/search?q={query}"
  method: GET
  headers:
    Accept: application/json
  response_type: json
  extract_path: "objects[*].package"

# For hint-based execution (fallback)
hints:
  navigation:
    - step: "Go to npmjs.com"
      url: "https://www.npmjs.com"
  money_request:
    url_pattern: "/search"
    method: GET

# Auth recovery (if API returns 401/403)
auth_recovery:
  trigger_on_status: [401, 403]
  recovery_page: "https://www.npmjs.com/login"

# Usage stats
success_count: 12
failure_count: 1
last_used: "2024-01-15T10:30:00Z"

Parámetros

Las habilidades soportan URLs parametrizadas y cuerpos de solicitud:

request:
  url: "https://api.example.com/search?q={query}&limit={limit}"
  body_template: '{"filters": {"category": "{category}"}}'

Los parámetros se sustituyen en el momento de la ejecución desde skill_params.

Recuperación de Autenticación

Si una API devuelve 401/403, las habilidades pueden activar la recuperación de autenticación:

auth_recovery:
  trigger_on_status: [401, 403]
  recovery_page: "https://example.com/login"
  max_retries: 2

El sistema navegará a la página de recuperación (permitiéndote iniciar sesión) y reintentará.

Limitaciones

  • Descubrimiento de API: Solo funciona si el sitio tiene una API. Los sitios que renderizan todo en el servidor no producirán habilidades útiles.
  • Estado de Autenticación: Las habilidades dependen de las cookies del navegador. Si estás desconectado, pueden fallar.
  • Cambios de API: Si un sitio cambia su API, la habilidad se rompe. Se recurre a la ejecución basada en pistas.
  • Flujos Complejos: Los flujos de trabajo de múltiples pasos (inicio de sesión → navegación → búsqueda) pueden no capturarse limpiamente.

Referencia de API REST

El servidor expone endpoints REST para acceso HTTP directo. Todos los endpoints devuelven JSON a menos que se especifique lo contrario.

URL Base

http://localhost:8383

Salud y Estado

GET /api/health

Verificación de salud del servidor con información de tareas en ejecución.

curl http://localhost:8383/api/health

Respuesta:

{
  "status": "healthy",
  "uptime_seconds": 1234.5,
  "memory_mb": 256.7,
  "running_tasks": 2,
  "tasks": [...],
  "stats": {...}
}

Tareas

GET /api/tasks

Listar tareas recientes con filtrado opcional.

# List all tasks
curl http://localhost:8383/api/tasks

# Filter by status
curl http://localhost:8383/api/tasks?status=running

# Limit results
curl http://localhost:8383/api/tasks?limit=50

GET /api/tasks/{task_id}

Obtener detalles completos de una tarea específica.

curl http://localhost:8383/api/tasks/abc123

GET /api/tasks/{task_id}/logs (SSE)

Transmisión de progreso de tareas en tiempo real a través de Eventos Enviados por el Servidor.

const events = new EventSource('/api/tasks/abc123/logs');
events.onmessage = (e) => console.log(JSON.parse(e.data));

Habilidades

GET /api/skills

Listar todas las habilidades disponibles.

curl http://localhost:8383/api/skills

Respuesta:

{
  "skills": [
    {
      "name": "npm-search",
      "description": "Search for packages on npmjs.com",
      "success_rate": 92.5,
      "usage_count": 15,
      "last_used": "2024-01-15T10:30:00Z"
    }
  ],
  "count": 1,
  "skills_directory": "/Users/you/.config/browser-skills"
}

GET /api/skills/{name}

Obtener definición completa de habilidad como JSON.

curl http://localhost:8383/api/skills/npm-search

DELETE /api/skills/{name}

Eliminar una habilidad.

curl -X DELETE http://localhost:8383/api/skills/npm-search

POST /api/skills/{name}/run

Ejecutar una habilidad con parámetros (inicia tarea en segundo plano).

curl -X POST http://localhost:8383/api/skills/npm-search/run \
  -H "Content-Type: application/json" \
  -d '{"params": {"query": "react"}}'

Respuesta:

{
  "task_id": "abc123...",
  "skill_name": "npm-search",
  "message": "Skill execution started",
  "status_url": "/api/tasks/abc123..."
}

POST /api/learn

Iniciar una sesión de aprendizaje para capturar una nueva habilidad (inicia tarea en segundo plano).

curl -X POST http://localhost:8383/api/learn \
  -H "Content-Type: application/json" \
  -d '{
    "task": "Search for TypeScript packages on npmjs.com",
    "skill_name": "npm-search"
  }'

Respuesta:

{
  "task_id": "def456...",
  "learning_task": "Search for TypeScript packages on npmjs.com",
  "skill_name": "npm-search",
  "message": "Learning session started",
  "status_url": "/api/tasks/def456..."
}

Actualizaciones en Tiempo Real

GET /api/events (SSE)

Transmisión de Eventos Enviados por el Servidor para todas las actualizaciones de tareas.

const events = new EventSource('/api/events');
events.onmessage = (e) => {
  const data = JSON.parse(e.data);
  console.log(`Task ${data.task_id}: ${data.status}`);
};

Formato de evento:

{
  "task_id": "abc123",
  "full_task_id": "abc123-full-uuid...",
  "tool": "run_browser_agent",
  "status": "running",
  "stage": "navigating",
  "progress": {
    "current": 5,
    "total": 15,
    "percent": 33.3,
    "message": "Loading page..."
  }
}

Arquitectura

Resumen de Alto Nivel

┌─────────────────────────────────────────────────────────────────────────┐
│                           MCP CLIENTS                                    │
│              (Claude Desktop, mcp-remote, CLI call)                      │
└─────────────────────────────────┬───────────────────────────────────────┘
                                  │ HTTP POST /mcp
                                  ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         FastMCP SERVER                                   │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │                      MCP TOOLS                                    │   │
│  │  • run_browser_agent    • skill_list/get/delete                  │   │
│  │  • run_deep_research    • health_check/task_list/task_get        │   │
│  └──────────────────────────────────────────────────────────────────┘   │
└────────┬──────────────┬─────────────────┬────────────────┬──────────────┘
         │              │                 │                │
         ▼              ▼                 ▼                ▼
┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐
│   CONFIG    │  │  PROVIDERS  │  │   SKILLS    │  │    OBSERVABILITY    │
│  Pydantic   │  │ 12 LLMs     │  │  Learn+Run  │  │   Task Tracking     │
└─────────────┘  └─────────────┘  └─────────────┘  └─────────────────────┘
                                         │
                                         ▼
                              ┌─────────────────────────┐
                              │      browser-use        │
                              │   (Agent + Playwright)  │
                              └─────────────────────────┘

Estructura de Módulos

src/mcp_server_browser_use/
├── server.py            # FastMCP server + MCP tools
├── cli.py               # Typer CLI for daemon management
├── config.py            # Pydantic settings
├── providers.py         # LLM factory (12 providers)
│
├── observability/       # Task tracking
│   ├── models.py        # TaskRecord, TaskStatus, TaskStage
│   ├── store.py         # SQLite persistence
│   └── logging.py       # Structured logging
│
├── skills/              # Machine-learned browser skills
│   ├── models.py        # Skill, SkillRequest, AuthRecovery
│   ├── store.py         # YAML persistence
│   ├── recorder.py      # CDP network capture
│   ├── analyzer.py      # LLM skill extraction
│   ├── runner.py        # Direct fetch() execution
│   └── executor.py      # Hint injection
│
└── research/            # Deep research workflow
    ├── models.py        # SearchResult, ResearchSource
    └── machine.py       # Plan → Search → Synthesize

Ubicaciones de Archivos

QuéDónde
Configuración~/.config/mcp-server-browser-use/config.json
Base de datos de tareas~/.config/mcp-server-browser-use/tasks.db
Habilidades~/.config/browser-skills/*.yaml
Registro del servidor~/.local/state/mcp-server-browser-use/server.log
PID del servidor~/.local/state/mcp-server-browser-use/server.json

Proveedores de LLM Soportados

  • OpenAI
  • Anthropic
  • Google Gemini
  • Azure OpenAI
  • Groq
  • DeepSeek
  • Cerebras
  • Ollama (local)
  • AWS Bedrock
  • OpenRouter
  • Vercel AI

Licencia

MIT