Skip to main content
Glama
seleniumbase

SeleniumBase MCP Server

Official
by seleniumbase

Servidor MCP de SeleniumBase

Expone la automatización de navegador de SeleniumBase como herramientas a través del Model Context Protocol, para que cualquier cliente MCP (Claude Desktop, Claude Code, etc.) pueda controlar un navegador real.

Hay tres variantes de servidor en esta carpeta:

Archivo

Se basa en

Ideal para

cdp_server.py

seleniumbase.sb_cdp.Chrome() (Modo CDP Puro, síncrono)

Scraping/automatización contra detección de bots (Cloudflare, etc.). Sin WebDriver en absoluto. Incluye resolución de CAPTCHA.

driver_server.py

seleniumbase.Driver() (WebDriver)

Automatización general con soporte del ecosistema Selenium.

sb_server.py

seleniumbase.SB() (usado sin with, mediante __enter__/__exit__ manual)

La superficie de API más amplia: todo lo que ofrece Driver, más arrastrar y soltar, gestión de MFA, descargas de archivos, etc. Puede cambiar al Modo CDP a mitad de flujo mediante activate_cdp_mode

Los tres usan headless=False por defecto — la ventana del navegador es visible a menos que pases headless=True al iniciar una sesión.

Apunta la configuración de tu cliente MCP al *_server.py que se ajuste a la tarea (ver paso 3 a continuación) — o registra los tres con nombres diferentes.

1. Instalación

(Requiere Python 3.10+ y uv)

git clone https://github.com/seleniumbase/seleniumbase-mcp.git
cd seleniumbase-mcp
uv sync

uv sync lee pyproject.toml, crea un .venv/ en esta carpeta e instala las dos dependencias (mcp[cli], seleniumbase) junto con este proyecto en sí — que registra tres comandos de consola-script mediante [project.scripts]:

  • seleniumbase-driver

  • seleniumbase-cdp

  • seleniumbase-sb

Cada uno simplemente llama a la función main() de ese archivo de servidor (mcp.run(transport="stdio")). Esto es lo que permite que uv run <nombre> — sin ruta de python, sin ruta de venv, sin ruta de script — funcione como comando del cliente MCP en los pasos 3 y 4 a continuación.

# SeleniumBase's Driver() and SB() formats need a browser driver downloaded:
uv run seleniumbase get chromedriver
# (Not needed for the "seleniumbase-cdp" Pure CDP Mode MCP Server,
#  which doesn't use WebDriver at all.)

(¿No tienes uv? Un python3 -m venv venv && pip install -e . normal también funciona — solo sustituye python <script>.py por uv run <nombre> en todo lo siguiente, y usa rutas absolutas de venv/bin/python + rutas de script en la configuración de tu cliente MCP en lugar de las opciones sin ruta.)

Related MCP server: gotham-browser

2. Pruébalo de forma independiente (comprobación de sanidad opcional)

uv run mcp dev cdp_server.py

Eso abre el Inspector MCP para el Servidor MCP de "Modo CDP Puro" de SeleniumBase, donde puedes probar comandos ("Tools"). Ctrl+C para salir. La prueba real es conectarlo a un cliente (siguiente paso).

3. Conéctalo a Claude Desktop

Claude Desktop no se ejecuta desde un directorio de "proyecto" como lo hace Claude Code, por lo que un uv run <nombre> simple no garantiza que encuentre este repositorio. Dos formas de obtener una configuración estable:

Opción A — instalación global (recomendada, cero rutas en cualquier lugar):

uv tool install .          # from inside the repo, installs the 3 commands globally

Esto coloca seleniumbase-driver/seleniumbase-cdp/seleniumbase-sb en tu PATH de forma permanente (ejecuta uv tool ensurepath una vez si advierte que su directorio bin no está en PATH todavía). Entonces claude_desktop_config.json puede ser simplemente:

{
  "mcpServers": {
    "seleniumbase-cdp": { "command": "seleniumbase-cdp" },
    "seleniumbase-driver": { "command": "seleniumbase-driver" },
    "seleniumbase-sb": { "command": "seleniumbase-sb" }
  }
}

Opción B — apunta uv directamente al repositorio (una ruta absoluta, pero sin ruta de venv/intérprete que rastrear, y sin paso de instalación separado):

{
  "mcpServers": {
    "seleniumbase-cdp": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/seleniumbase-mcp", "run", "seleniumbase-cdp"]
    },
    "seleniumbase-driver": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/seleniumbase-mcp", "run", "seleniumbase-driver"]
    },
    "seleniumbase-sb": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/seleniumbase-mcp", "run", "seleniumbase-sb"]
    }
  }
}

La ubicación de claude_desktop_config.json depende de tu sistema:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Reinicia Claude Desktop. Deberías ver un icono de herramientas 🔨 que indica que el/los servidor(es) están conectados, con herramientas como start_browser, navigate, click, etc. disponibles. Mantén solo las entradas que realmente quieras — tres servidores separados de automatización de navegador es mucho si solo necesitas uno.

4. Conéctalo a Claude Code

El .mcp.json de este repositorio está verificado y listo para usar tal cual — sin necesidad de editar rutas, porque uv run <nombre> resuelve este proyecto desde pyproject.toml en el directorio actual:

{
  "mcpServers": {
    "seleniumbase-cdp": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "seleniumbase-cdp"]
    },
    "seleniumbase-driver": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "seleniumbase-driver"]
    },
    "seleniumbase-sb": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "seleniumbase-sb"]
    }
  }
}

Claude Code carga automáticamente .mcp.json desde el directorio en el que lanzas claude, así que mientras ejecutes claude desde dentro de este repositorio (o un clon del mismo), simplemente funciona — de forma idéntica para cada compañero que clone el repositorio, con cero ediciones específicas de máquina.

Si prefieres registrar los servidores manualmente en lugar de depender de .mcp.json:

claude mcp add seleniumbase-cdp -- uv run seleniumbase-cdp
claude mcp add seleniumbase-driver -- uv run seleniumbase-driver
claude mcp add seleniumbase-sb -- uv run seleniumbase-sb

(ejecutado desde dentro del directorio del repositorio, por la misma razón que arriba.)

Herramientas expuestas (driver_server.py)

Herramienta

Propósito

start_browser(browser, headless, uc, incognito)

Lanzar una sesión de navegador (headless por defecto es False)

close_browser()

Finalizar la sesión

navigate(url)

Ir a una URL

go_back() / go_forward() / refresh_page()

Navegación de historial

get_current_url() / get_title()

Metadatos de la página

get_page_source()

HTML completo

get_text(selector)

Texto visible de un elemento

find_elements_count(selector)

Contar coincidencias

is_element_visible(selector)

Comprobación de visibilidad

click(selector, by)

Hacer clic (CSS o XPath)

type_text(selector, text, clear_first)

Rellenar un campo

select_option(selector, option_text)

Elegir una opción de desplegable

wait_for_element(selector, timeout)

Espera explícita

switch_to_frame(selector) / switch_to_default_content()

Manejo de iframes

assert_text(text, selector)

Verificar que el texto está presente

screenshot(filename)

Guardar una captura de pantalla

execute_script(script)

Ejecutar un script JS

Notas de diseño / cosas a adaptar para tu caso de uso

  • Sesión global única. Cada servidor mantiene una sesión de navegador a la vez. Esto coincide con cómo se lanzan típicamente los servidores MCP (un proceso por conexión de cliente) y mantiene la superficie de herramientas simple. Si necesitas múltiples pestañas/sesiones de navegador concurrentes, tendrías que extender esto a un dict de sesiones nombradas y añadir un parámetro session_id a cada herramienta.

  • Llamadas bloqueantes. Las llamadas de SeleniumBase son síncronas y bloquearán el servidor mientras una página carga o se espera un elemento. Para una herramienta local de un solo usuario esto está bien; para un servidor multi-cliente querrías ejecutarlas en un grupo de hilos mediante asyncio.to_thread.

  • Headless vs. con ventana. El valor por defecto es con ventana (headless=False) para que puedas ver el navegador trabajar y para que los sitios que bloquean Chrome headless sigan funcionando. Pasa headless=True para uso en segundo plano/servidor una vez que hayas confirmado que un flujo funciona. El uc=True de sb_server.py (undetected-chromedriver) también ayuda contra muros de detección de bots.

Extensión

Añadir una herramienta es simplemente añadir una función decorada con @mcp.tool() que llame al método correspondiente de SeleniumBase — SeleniumBase tiene métodos para subidas de archivos, pasar el cursor, alertas, condiciones de red y más que aún no están envueltos arriba.


cdp_server.py — Modo CDP Puro

Envuelve seleniumbase.sb_cdp.Chrome, el modo más sigiloso de SeleniumBase: el navegador se controla enteramente a través del Chrome DevTools Protocol, sin WebDriver en el bucle en absoluto. Referencia: cdp_mode_methods.md.

Grupos de herramientas

Grupo

Ejemplos

Sesión

start_browser(url, headless, incognito, guest, proxy, ad_block), close_browser

Navegación

navigate, reload_page, go_back/go_forward, get_current_url, get_title

Búsqueda y lectura

find_element_info, find_all_info, get_text, get_html_source, get_element_attribute(s), is_element_present/visible

Interacción

click, click_if_visible, click_visible_elements, type_text, send_keys, set_value, select_option_by_text/value/index, nested_click

Espera

wait_for_element, wait_for_element_visible/not_visible/absent, wait_for_text

Aserciones

assert_element, assert_text, assert_exact_text, assert_title, assert_url(_contains)

Cookies y almacenamiento

get_all_cookies, save_cookies/load_cookies, get/set_local_storage_item, get/set_session_storage_item

Desplazamiento

scroll_into_view, scroll_to_top/bottom, scroll_up/down

Pestañas y ventanas

open_new_tab, switch_to_tab/switch_to_newest_tab, close_active_tab, maximize/minimize, get/set_window_rect

Captcha

solve_captcha

Salida

save_screenshot, save_page_source, save_as_pdf, evaluate

Notas de diseño específicas de CDP

  • Los elementos no cruzan el cable como identificadores. En el modo CDP nativo, find_element() devuelve un objeto vivo con sus propios métodos (el.click(), el.get_html(), ...). Las herramientas MCP solo pueden devolver datos serializables en JSON, por lo que find_element_info/find_all_info resuelven el elemento inmediatamente a un dict simple (tag_name, text, html) en lugar de devolver un identificador sobre el que pudieras llamar más métodos. Si necesitas actuar sobre uno de varios resultados, usa click_nth_element (actúa por posición) en lugar de "buscar y luego hacer clic" como dos pasos separados.

  • La resolución de captchas no es universal. solve_captcha gestiona los tipos de desafío compatibles (p. ej., Cloudflare Turnstile en la aplicación de demostración de SeleniumBase); no es un bypass garantizado para CAPTCHAs arbitrarios.

  • Finalización de sesión. sb.quit() (usado por close_browser) es la forma documentada de terminar una sesión; el navegador también se cierra automáticamente si el proceso sale sin llamarlo.

  • No envueltos: los métodos gui_* basados en PyAutoGUI (excluidos por diseño — consulte las notas de diseño de nivel superior), los mecanismos internos de bajo nivel (get_websocket_url, add_handler, concesiones de permisos, get_document/get_flattened_document sin procesar) y los alias exactos de métodos (open/goto frente a get) se omitieron para mantener la lista de herramientas enfocada — agrégalos de la misma manera que cualquier otra herramienta si los necesitas.


sb_server.py — SB() sin la sentencia with

Envuelve seleniumbase.SB(), normalmente usado como administrador de contexto:

with SB(uc=True) as sb:
    sb.goto(...)

Las llamadas a herramientas de un servidor MCP ocurren una a la vez en invocaciones de función separadas — no hay un único bloque indentado alrededor del cual poner with —, así que este servidor invoca el protocolo del administrador de contexto manualmente:

sb_context = SB(**kwargs)
sb = sb_context.__enter__()   # in start_browser
...
sb_context.__exit__(None, None, None)   # in close_browser

sb es una instancia de BaseCase, la API más amplia de SeleniumBase — un superconjunto de lo que expone Driver (en driver_server.py), más las utilidades de sigilo del modo UC y algunos extras que driver_server.py/cdp_server.py no tienen. Este servidor se centra en esos extras en lugar de re-envolver todo lo ya cubierto:

Grupo

Herramientas

Sigilo UC/CDP

activate_cdp_mode (cambia la misma sesión al modo CDP puro a mitad del flujo)

Interacciones adicionales

hover_and_click, drag_and_drop, double_click, context_click, choose_file (subida)

MFA

get_mfa_code, enter_mfa_code (códigos estilo TOTP/Google Authenticator a partir de una clave secreta)

Archivos

download_file

Salud del sitio

assert_no_404_errors, assert_no_js_errors

Retroalimentación visual

highlight, flash

Además, las mismas herramientas principales de navegación/interacción/espera/aserciones/cookies/ desplazamiento/pestañas/salida que los otros dos servidores, llamadas a través de los nombres de métodos de BaseCase (p. ej., sb.goto, sb.click, sb.assert_element) en lugar de los de Driver o CDP.

Notas de diseño específicas de SB()

  • El modo UC (modo sigiloso) requiere uc=True al inicio. Pásalo en start_browser desde el principio si los vas a necesitar.

  • activate_cdp_mode no inicia una nueva sesión. Cambia el modo subyacente de la sesión existente de sb a CDP puro para las acciones posteriores — es una escalada a mitad del flujo, no un navegador nuevo.

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.

  • Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…

  • Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seleniumbase/seleniumbase-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server