design_architecture.md•4.01 kB
# Diseño de la Arquitectura del Servidor MCP con Selenium WebDriver
## 1. Componentes Principales
### 1.1 Servidor MCP (`FastMCP`)
El núcleo del sistema será un servidor MCP implementado con `FastMCP` del SDK de Python. Este servidor expondrá las funcionalidades de Selenium WebDriver como **herramientas (tools)** y, posiblemente, configuraciones o estados como **recursos (resources)**.
### 1.2 Módulo de Gestión de WebDriver (`webdriver_manager.py`)
Este módulo será responsable de:
- Iniciar y cerrar instancias de navegadores (Chrome, Firefox).
- Configurar opciones del navegador (modo headless, tamaño de ventana, etc.).
- Aplicar configuraciones de evasión de detección (plugins, argumentos de inicio).
- Gestionar proxies.
### 1.3 Módulo de Interacción con Selenium (`selenium_interactor.py`)
Este módulo contendrá las funciones que interactúan directamente con Selenium WebDriver para realizar las acciones solicitadas:
- Navegar a URLs.
- Encontrar elementos (por ID, XPath, CSS Selector, etc.).
- Hacer clic, escribir, interactuar con elementos.
- Acciones de ratón (hover, arrastrar y soltar).
- Manejo de entrada de teclado.
- Tomar capturas de pantalla.
- Subir archivos.
## 2. Estructura de Directorios
```
mcp_selenium_server/
├── server.py # Punto de entrada del servidor MCP
├── webdriver_manager.py # Lógica para gestionar WebDrivers y opciones
├── selenium_interactor.py # Funciones de interacción con Selenium
├── requirements.txt # Dependencias del proyecto
├── config.py # Archivo de configuración (opcional, para proxies, etc.)
└── Dockerfile # Para facilitar el despliegue (opcional)
```
## 3. Definición de Herramientas MCP (Tools)
Las siguientes funcionalidades de Selenium se expondrán como herramientas MCP. Cada herramienta recibirá los parámetros necesarios y devolverá el resultado de la operación.
- `start_browser(browser_type: str, options: dict = None, proxy: dict = None)`: Inicia una nueva sesión de navegador. Devuelve un ID de sesión.
- `navigate_to_url(session_id: str, url: str)`: Navega a una URL específica.
- `find_element(session_id: str, strategy: str, value: str)`: Encuentra un elemento. Devuelve información sobre el elemento (e.g., ID interno, tag, texto).
- `click_element(session_id: str, element_id: str)`: Hace clic en un elemento.
- `type_text(session_id: str, element_id: str, text: str)`: Escribe texto en un elemento.
- `take_screenshot(session_id: str, path: str)`: Toma una captura de pantalla.
- `upload_file(session_id: str, element_id: str, file_path: str)`: Sube un archivo.
- `execute_script(session_id: str, script: str, *args)`: Ejecuta JavaScript en el navegador.
- `close_browser(session_id: str)`: Cierra una sesión de navegador.
## 4. Manejo de la Evasión de Detección
- **Plugins/Extensiones:** Se explorará el uso de extensiones de navegador (e.g., `undetected_chromedriver`) o la carga de extensiones personalizadas a través de las opciones del navegador.
- **Configuraciones del Navegador:** Se configurarán opciones específicas del navegador (user-agent, resolución, WebGL, etc.) para simular un usuario real.
- **Proxies:** Se integrará el soporte para proxies HTTP/SOCKS para enmascarar la dirección IP.
## 5. Gestión de Sesiones
El `webdriver_manager.py` mantendrá un mapeo de `session_id` a instancias de WebDriver para permitir que múltiples clientes MCP controlen diferentes sesiones de navegador de forma independiente.
## 6. Dependencias Clave
- `mcp`: Para el servidor MCP.
- `selenium`: Para la automatización del navegador.
- `webdriver_manager`: Para la gestión automática de los controladores de navegador.
- `undetected_chromedriver` (opcional, pero recomendado para evasión de detección).
Este diseño proporciona una base sólida para construir el servidor MCP solicitado, separando las preocupaciones y facilitando la implementación y el mantenimiento.