ruyipage-mcp
ruyipage-mcp
Expone las capacidades de automatización BiDi de Firefox de ruyiPage a través del MCP (Model Context Protocol) como un conjunto de herramientas invocables por IA.
Compatible con cualquier cliente MCP como Claude Code, Cursor, etc.
Características
34 herramientas que cubren todo el flujo de automatización del navegador: inicio/toma de control del navegador, navegación de páginas, búsqueda e interacción con el DOM, capturas de pantalla/PDF, Cookies/Almacenamiento, ejecución de JS, interceptación/escucha de red/recopilación de datos, gestión de pestañas, emulación de dispositivos, suscripción a eventos BiDi
Prioridad a acciones BiDi nativas — Las operaciones como clics, entradas de texto, arrastrar y soltar mantienen
isTrusted=true, siendo más adecuadas para escenarios de alto control de riesgosSoporte para tomar control de navegadores con huella digital — Puede detectar y tomar control automáticamente de navegadores con núcleo Firefox como ADS / FlowerBrowser
Gestión inteligente de elementos — Registro de elementos LRU, reciclaje automático + re-búsqueda automática de elementos caducados
Compresión automática de capturas de pantalla — Escalado automático de imágenes ultra anchas, compresión JPEG, guardado automático en disco para imágenes grandes
Transporte stdio — JSON-RPC 2.0 estándar, listo para usar
Related MCP server: MCP Selenium Server
Instalación
Requisitos previos
Python >= 3.10
ruyiPage >= 1.1.0
Navegador Firefox (se recomienda usar el núcleo de Firefox que acompaña a ruyiPage)
Instalación desde el código fuente
git clone https://github.com/LoseNine/ruyipage-mcp.git
cd ruyipage-mcp
pip install -e .También puedes pasarle directamente el enlace de GitHub a la IA para que te ayude con la instalación
Configuración
Claude Code
Opción 1: .mcp.json a nivel de proyecto (recomendado)
{
"mcpServers": {
"ruyipage": {
"command": "python",
"args": ["-m", "ruyipage_mcp"]
}
}
}Cursor / Otros clientes MCP
Añade lo siguiente en el archivo de configuración MCP correspondiente:
{
"mcpServers": {
"ruyipage": {
"command": "python",
"args": ["-m", "ruyipage_mcp"]
}
}
}Ejecución independiente
python -m ruyipage_mcpEl servidor transmite mensajes JSON-RPC a través de stdin/stdout y los registros se envían a stderr.
Configuración
Archivo de configuración
Copia ruyipage_mcp.example.json como ruyipage_mcp.json y modifícalo según sea necesario:
cp ruyipage_mcp.example.json ruyipage_mcp.json{
"browser_path": "E:\\ruyi_firefox\\firefox.exe",
"disable_run_js": false,
"disable_extensions": false,
"browser_path_whitelist": [],
"max_elements": 512,
"event_buffer_size": 500,
"wait_timeout_ceiling": 60
}Orden de búsqueda del archivo de configuración:
Ruta especificada por la variable de entorno
RUYIPAGE_MCP_CONFIGruyipage_mcp.jsonen el directorio de trabajo actualSi no se encuentra el archivo de configuración, se utilizan los valores predeterminados integrados
Opción de configuración | Tipo | Valor predeterminado | Descripción |
| string |
| Ruta del ejecutable de Firefox |
| bool |
| Establecer en |
| bool |
| Establecer en |
| list |
| Lista de rutas de navegador permitidas |
| int |
| Capacidad LRU del registro de elementos por sesión |
| int |
| Tamaño del búfer de eventos BiDi |
| int |
| Límite superior de tiempo de espera para todas las herramientas de espera (segundos) |
Sobrescritura mediante variables de entorno
Las variables de entorno tienen mayor prioridad que el archivo de configuración, ideales para CI o escenarios de sobrescritura temporal:
Variable de entorno | Opción de configuración correspondiente |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Especificar la ruta del archivo de configuración |
Resumen de herramientas (34)
session — Ciclo de vida del navegador
Herramienta | Descripción |
| Inicia un nuevo navegador Firefox. Soporta puerto personalizado, modo headless, modo privado, selector XPath, tamaño de ventana, etc. |
| Toma el control de un Firefox ya en ejecución mediante |
| Detecta y toma el control automáticamente de Firefox / ADS / FlowerBrowser según las características del proceso |
| Cierra la sesión del navegador. Las sesiones |
Flujo típico:
session_launch(port=9222)
→ 操作页面...
→ session_quit()# 接管已打开的指纹浏览器
session_auto_attach(latest_tab=true)
→ 操作页面...
→ session_quit() # 仅释放连接,浏览器继续运行nav — Navegación de página
Herramienta | Descripción |
| Abre una URL, soporta estrategias de espera |
| Atrás |
| Adelante |
| Actualizar |
| Obtiene la URL, título y estado de carga de la página actual |
dom — Búsqueda y lectura de elementos
Herramienta | Descripción |
| Busca un solo elemento, devuelve |
| Busca todos los elementos coincidentes, devuelve una lista (límite predeterminado 20, máximo 100) |
| Lee atributos del elemento: |
| Continúa buscando subelementos dentro de un elemento existente |
| Espera a que aparezca un elemento (con tiempo de espera) |
| Libera el manejador del elemento, recicla el espacio del registro |
Formato de localizadores:
Formato | Ejemplo | Descripción |
|
| Selector de ID |
|
| Selector CSS |
|
| XPath |
|
| Coincidencia de texto |
|
| Nombre de etiqueta |
act — Interacción con elementos
Herramienta | Descripción |
| Clic en el elemento. Soporta clic izquierdo / derecho / doble clic, clic JS opcional. Usa acciones BiDi nativas por defecto ( |
| Entrada de texto. Entrada de teclado BiDi nativa, opción para limpiar contenido existente. Soporta respaldo JS |
| Operaciones simples: |
| Ejecuta una cadena de acciones BiDi (matriz JSON), soporta teclas, clics, movimiento, arrastrar, rueda, pausa, etc. |
Acciones soportadas por act_chain:
[
{"action": "press", "key": "Enter"},
{"action": "click"},
{"action": "click", "element_id": "el_abc123"},
{"action": "move_to", "element_id": "el_abc123"},
{"action": "move_to", "x": 100, "y": 200},
{"action": "double_click"},
{"action": "right_click"},
{"action": "key_down", "key": "Shift"},
{"action": "key_up", "key": "Shift"},
{"action": "type", "text": "hello"},
{"action": "scroll", "x": 0, "y": -300},
{"action": "pause", "duration": 500}
]state — Estado de la página
Herramienta | Descripción |
| Captura de pantalla. Soporta captura de página completa, captura de elemento, guardar en archivo. Compresión automática, guardado en disco para imágenes muy grandes |
| Guarda la página actual como PDF |
| Gestión de cookies: |
| Gestión de localStorage / sessionStorage: |
js — Ejecución de JavaScript
Herramienta | Descripción |
| Ejecuta código JS en la página. Puede evaluarse como expresión ( |
| Gestión de scripts de precarga: |
net — Control de red
Herramienta | Descripción |
| Interceptación de solicitudes: |
| Escucha de red: |
| Recopilador de datos: |
| Establecer/limpiar encabezados de solicitud adicionales |
| Establecer comportamiento de caché: |
Flujo típico de interceptación de solicitudes:
net_intercept(op="start", url_patterns="api/login")
→ 触发页面操作
→ net_intercept(op="wait_and_resolve", action='{"mode":"mock","status":200,"body":"{}"}')
→ net_intercept(op="stop")Flujo típico de escucha de red:
net_listen(op="start", targets="api/data", method="POST")
→ 触发页面操作
→ net_listen(op="wait", timeout=10)
→ net_listen(op="stop")ctx — Gestión de contexto
Herramienta | Descripción |
| Gestión de pestañas: |
| Emulación de dispositivos: geolocalización, zona horaria, idioma, ajustes preestablecidos de dispositivos móviles, modo offline, interruptor JS |
| Suscripción a eventos BiDi: gestión de entrada unificada para |
Ejemplo de operación de emulación:
ctx_emulation(op="set_geolocation", latitude=39.9, longitude=116.4)
ctx_emulation(op="set_timezone", timezone_id="Asia/Tokyo")
ctx_emulation(op="set_locale", locales="ja-JP,ja")
ctx_emulation(op="apply_mobile_preset", width=390, height=844, device_pixel_ratio=3)
ctx_emulation(op="set_offline", enabled=true)
ctx_emulation(op="set_offline", enabled=false)meta — Información del servidor
Herramienta | Descripción |
| Devuelve el estado actual del servidor: sesiones activas, número de elementos, interruptores de configuración, lista de espacios de nombres de herramientas |
Conceptos clave
Gestión de sesiones
Cada conexión al navegador corresponde a una sesión, identificada por host:port (ej. 127.0.0.1:9222).
Cuando solo hay una sesión activa, el parámetro
session_idde todas las herramientas puede omitirse, se resuelve automáticamenteCuando hay múltiples sesiones, es necesario pasar explícitamente el
session_idsession_launchcrea una sesión owned,session_quitterminará el proceso del navegadorsession_attach/session_auto_attachcrean una sesión attached,session_quitsolo libera la conexión
Registro de elementos
Los elementos encontrados mediante dom_find / dom_find_all se registran en el registro de elementos de la sesión actual, devolviendo un ID corto (ej. el_a3f2b1).
Reciclaje LRU — Cuando se alcanza el límite de capacidad (predeterminado 512), el elemento menos utilizado recientemente se recicla automáticamente
Recuperación automática de caducidad — Al acceder a un elemento caducado, se intenta automáticamente volver a buscarlo usando el localizador original
El ID del elemento se puede pasar a todas las herramientas que requieran una referencia de elemento, como
act_click,act_input,dom_read,act_chain, etc.Todas las herramientas que aceptan el parámetro
targettambién pueden recibir directamente una cadena de localizador (ej.css:button.submit), sin necesidad de llamar primero adom_find
Formato de respuesta
Todas las herramientas (excepto state_screenshot) devuelven un sobre JSON unificado:
// 成功
{"ok": true, "data": ...}
// 失败
{"ok": false, "error": "error message"}state_screenshot devuelve directamente un objeto Image de MCP cuando el tamaño de la captura lo permite; cuando supera los 800KB, se guarda en disco y devuelve la ruta del archivo.
Proyectos relacionados
ruyiPage — Biblioteca central de automatización BiDi de Firefox
ruyipage-skill — Skill de ejecución de análisis de automatización por IA
Navegador con huella digital de Firefox — Entorno de huella digital de Firefox complementario
Arquitectura
python -m ruyipage_mcp
→ __main__.py → server.run()
→ 导入 tools/*.py(触发 @mcp.tool() 注册 34 个工具)
→ 注册 atexit 清理(退出时关闭 owned 浏览器)
→ mcp.run(transport="stdio")
ruyipage_mcp/
├── app.py # FastMCP("ruyipage-mcp") 单例
├── config.py # 环境变量配置
├── registries.py # SessionRegistry + ElementRegistry (LRU)
├── runtime.py # async/sync 桥接 + 响应封装 + 元素解析
├── server.py # 入口 + atexit 清理
└── tools/
├── session.py # 浏览器启动/接管/关闭
├── nav.py # 页面导航
├── dom.py # 元素查找/读取
├── act.py # 元素交互/动作链
├── state.py # 截图/PDF/Cookie/Storage
├── js.py # JS 执行/预加载脚本
├── net.py # 网络拦截/监听/采集
├── ctx.py # 标签页/模拟/事件
└── meta.py # 服务器状态ruyiPage es una biblioteca síncrona, MCP FastMCP es asyncio. Todas las llamadas a ruyiPage se conectan a través de asyncio.to_thread() para garantizar que el bucle de eventos de MCP no se bloquee.
Declaración de uso
Este proyecto sigue la declaración de uso de ruyiPage y está limitado únicamente a fines de investigación personal, intercambio técnico legal, conforme y sin fines de lucro.
Licencia
BSD-3-Clause
This server cannot be deployed
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for Firecrawl — web search, scraping, and biomedical/arXiv paper search.
Live browser debugging for AI assistants — DOM, console, network via MCP.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server paired with a Firefox extension that enables LLM clients to control the user's browser, supporting tab management, history search, and content reading.13 npm327MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server implementation that enables browser automation through standardized MCP clients, supporting features like navigation, element interaction, and screenshots across Chrome, Firefox, and Edge browsers.1,195 npmMIT
- AlicenseNot gradedqualityAmaintenanceAn MCP Server that enables AI assistants to interact with your local browsers.3,059 npm55MIT
- AlicenseCqualityCmaintenanceEnables AI assistants to read and drive a real, logged-in Firefox browser, including tabs, cookies, history, and site interactions, all through the Model Context Protocol.5215 npmMIT