Servidor de navegador web MCP
Un servidor de navegación web avanzado para el Protocolo de Contexto de Modelo (MCP) impulsado por Playwright, que permite interacciones de navegador sin cabeza a través de una API flexible y segura.
🌐 Características
Navegación web sin interfaz gráfica : navegue a cualquier sitio web sin necesidad de validar el certificado SSL.
Extracción de contenido de página completa : recupera contenido HTML completo, incluido JavaScript cargado dinámicamente
Compatibilidad con múltiples pestañas : cree, administre y cambie entre múltiples pestañas del navegador
Herramientas avanzadas de interacción web :
Extraer contenido de texto
Haga clic en los elementos de la página
Introducir texto en los campos de formulario
Capturar capturas de pantalla
Extraer enlaces de páginas con capacidades de filtrado
Desplácese por las páginas en cualquier dirección
Ejecutar JavaScript en las páginas
Actualizar páginas
Espere a que se complete la navegación
Gestión de recursos : Limpieza automática de recursos no utilizados después de la inactividad
Información de página mejorada : obtenga metadatos detallados sobre la página actual
Related MCP server: Fetch Browser
🚀 Inicio rápido
Prerrequisitos
Python 3.10+
Kit de desarrollo de software de MCP
Dramaturgo
Instalación
# Install MCP and Playwright
pip install mcp playwright
# Install browser dependencies
playwright installConfiguración para Claude Desktop
Añade a tu claude_desktop_config.json :
{
"mcpServers": {
"web-browser": {
"command": "python",
"args": [
"/path/to/your/server.py"
]
}
}
}💡 Ejemplos de uso
Navegación web básica
# Browse to a website
page_content = browse_to("https://example.com")
# Extract page text
text_content = extract_text_content()
# Extract text from a specific element
title_text = extract_text_content("h1.title")Interacción web
# Navigate to a page
browse_to("https://example.com/login")
# Input text into a form
input_text("#username", "your_username")
input_text("#password", "your_password")
# Click a login button
click_element("#login-button")Captura de pantalla
# Capture full page screenshot
full_page_screenshot = get_page_screenshots(full_page=True)
# Capture specific element screenshot
element_screenshot = get_page_screenshots(selector="#main-content")Extracción de enlaces
# Get all links on the page
page_links = get_page_links()
# Get links matching a pattern
filtered_links = get_page_links(filter_pattern="contact")Navegación con múltiples pestañas
# Create a new tab
tab_id = create_new_tab("https://example.com")
# Create another tab
another_tab_id = create_new_tab("https://example.org")
# List all open tabs
tabs = list_tabs()
# Switch between tabs
switch_tab(tab_id)
# Close a tab
close_tab(another_tab_id)Interacciones avanzadas
# Scroll the page
scroll_page(direction="down", amount="page")
# Execute JavaScript on the page
result = execute_javascript("return document.title")
# Get detailed page information
page_info = get_page_info()
# Refresh the current page
refresh_page()
# Wait for navigation to complete
wait_for_navigation(timeout_ms=5000)🛡️ Funciones de seguridad
Omisión de la validación del certificado SSL
Gestión segura del contexto del navegador
Configuración personalizada del agente de usuario
Manejo de errores y registro completo
Configuraciones de tiempo de espera configurables
Control de derivación de CSP
Protección contra el robo de cookies
🔧 Solución de problemas
Problemas comunes
Errores del certificado SSL : se omiten automáticamente
Carga de página lenta : ajuste el tiempo de espera en el método
browse_to()Elemento no encontrado : Verifique los selectores cuidadosamente
Uso de recursos del navegador : limpieza automática después de un período de inactividad
Explotación florestal
Todos los eventos importantes se registran con información detallada para una fácil depuración.
📋 Parámetros de la herramienta
browse_to(url: str, context: Optional[Any] = None)
url: Sitio web al que navegarcontext: objeto de contexto opcional (actualmente sin uso)
extract_text_content(selector: Optional[str] = None, context: Optional[Any] = None)
selector: Selector CSS opcional para extraer contenido específicocontext: objeto de contexto opcional (actualmente sin uso)
click_element(selector: str, context: Optional[Any] = None)
selector: selector CSS del elemento en el que hacer cliccontext: objeto de contexto opcional (actualmente sin uso)
get_page_screenshots(full_page: bool = False, selector: Optional[str] = None, context: Optional[Any] = None)
full_page: Capturar una captura de pantalla de toda la páginaselector: Elemento opcional para captura de pantallacontext: objeto de contexto opcional (actualmente sin uso)
get_page_links(filter_pattern: Optional[str] = None, context: Optional[Any] = None)
filter_pattern: Patrón de texto opcional para filtrar enlacescontext: objeto de contexto opcional (actualmente sin uso)
input_text(selector: str, text: str, context: Optional[Any] = None)
selector: selector CSS del elemento de entradatext: Texto a introducircontext: objeto de contexto opcional (actualmente sin uso)
create_new_tab(url: Optional[str] = None, context: Optional[Any] = None)
url: URL opcional para navegar en la nueva pestañacontext: objeto de contexto opcional (actualmente sin uso)
switch_tab(tab_id: str, context: Optional[Any] = None)
tab_id: ID de la pestaña a la que cambiarcontext: objeto de contexto opcional (actualmente sin uso)
list_tabs(context: Optional[Any] = None)
context: objeto de contexto opcional (actualmente sin uso)
close_tab(tab_id: Optional[str] = None, context: Optional[Any] = None)
tab_id: ID opcional de la pestaña que se cerrará (predeterminado: la pestaña actual)context: objeto de contexto opcional (actualmente sin uso)
refresh_page(context: Optional[Any] = None)
context: objeto de contexto opcional (actualmente sin uso)
get_page_info(context: Optional[Any] = None)
context: objeto de contexto opcional (actualmente sin uso)
scroll_page(direction: str = "down", amount: str = "page", context: Optional[Any] = None)
direction: Dirección para desplazarse ('arriba', 'abajo', 'izquierda', 'derecha')amount: Cantidad a desplazar ('página', 'mitad' o un número)context: objeto de contexto opcional (actualmente sin uso)
wait_for_navigation(timeout_ms: int = 10000, context: Optional[Any] = None)
timeout_ms: Tiempo máximo de espera en milisegundoscontext: objeto de contexto opcional (actualmente sin uso)
execute_javascript(script: str, context: Optional[Any] = None)
script: código JavaScript para ejecutarcontext: objeto de contexto opcional (actualmente sin uso)
🤝 Contribuyendo
¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.
Configuración de desarrollo
# Clone the repository
git clone https://github.com/random-robbie/mcp-web-browser.git
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows use `venv\Scripts\activate`
# Install dependencies
pip install -e .[dev]📄 Licencia
Licencia MIT
🔗 Proyectos relacionados
💬 Soporte
Si tiene problemas o preguntas, abra un problema en GitHub.