Skip to main content
Glama

ruyipage-mcp

Предоставляет возможности автоматизации Firefox BiDi из ruyiPage в виде набора инструментов, вызываемых ИИ, через MCP (Model Context Protocol).

Поддерживает любые MCP-клиенты, такие как Claude Code, Cursor и другие.


Характеристики

  • 34 инструмента, охватывающих весь процесс автоматизации браузера: запуск/подключение к браузеру, навигация по страницам, поиск и взаимодействие с DOM, скриншоты/PDF, Cookie/Storage, выполнение JS, перехват/прослушивание сети/сбор данных, управление вкладками, эмуляция устройств, подписка на события BiDi.

  • Приоритет нативных действий BiDi — такие операции, как клик, ввод текста, перетаскивание, сохраняют isTrusted=true, что лучше подходит для сценариев с высокой защитой от ботов.

  • Поддержка подключения к браузерам с отпечатками (fingerprint browsers) — автоматическое обнаружение и подключение к Firefox-браузерам, таким как ADS / FlowerBrowser.

  • Интеллектуальное управление элементами — реестр элементов LRU, автоматическая очистка + повторный поиск устаревших элементов.

  • Автоматическое сжатие скриншотов — автоматическое масштабирование сверхшироких изображений, сжатие JPEG, сохранение больших файлов на диск.

  • Передача через stdio — стандартный JSON-RPC 2.0, готов к использованию «из коробки».


Related MCP server: MCP Selenium Server

Установка

Предварительные требования

Установка из исходного кода

git clone https://github.com/LoseNine/ruyipage-mcp.git
cd ruyipage-mcp
pip install -e .

Вы также можете просто передать ссылку на GitHub ИИ, чтобы он помог вам с установкой

Конфигурация

Claude Code

Способ 1: .mcp.json на уровне проекта (рекомендуется)

{
  "mcpServers": {
    "ruyipage": {
      "command": "python",
      "args": ["-m", "ruyipage_mcp"]
    }
  }
}

Cursor / Другие MCP-клиенты

Добавьте в соответствующий файл конфигурации MCP:

{
  "mcpServers": {
    "ruyipage": {
      "command": "python",
      "args": ["-m", "ruyipage_mcp"]
    }
  }
}

Автономный запуск

python -m ruyipage_mcp

Сервер передает сообщения JSON-RPC через stdin/stdout, логи выводятся в stderr.


Конфигурация

Файл конфигурации

Скопируйте ruyipage_mcp.example.json в ruyipage_mcp.json и измените его по мере необходимости:

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
}

Порядок поиска файла конфигурации:

  1. Путь, указанный в переменной окружения RUYIPAGE_MCP_CONFIG

  2. ruyipage_mcp.json в текущей рабочей директории

  3. Если файл не найден, используются встроенные значения по умолчанию

Параметр

Тип

По умолчанию

Описание

browser_path

string

E:\ruyi_firefox\firefox.exe

Путь к исполняемому файлу Firefox

disable_run_js

bool

false

Установите true для отключения инструмента js_run

disable_extensions

bool

false

Установите true для отключения возможностей, связанных с расширениями

browser_path_whitelist

list

[] (разрешен любой путь)

Список разрешенных путей к браузерам

max_elements

int

512

Емкость LRU реестра элементов для каждой сессии

event_buffer_size

int

500

Размер буфера событий BiDi

wait_timeout_ceiling

int

60

Максимальный лимит ожидания для всех инструментов ожидания (в секундах)

Переопределение через переменные окружения

Переменные окружения имеют приоритет над файлом конфигурации, что удобно для CI или временных изменений:

Переменная окружения

Соответствующий параметр

RUYIPAGE_MCP_BROWSER_PATH

browser_path

RUYIPAGE_MCP_DISABLE_RUN_JS

disable_run_js (1 = true)

RUYIPAGE_MCP_DISABLE_EXTENSIONS

disable_extensions (1 = true)

RUYIPAGE_MCP_BROWSER_PATH_WHITELIST

browser_path_whitelist (через запятую)

RUYIPAGE_MCP_MAX_ELEMENTS

max_elements

RUYIPAGE_MCP_EVENT_BUFFER_SIZE

event_buffer_size

RUYIPAGE_MCP_WAIT_TIMEOUT_CEILING

wait_timeout_ceiling

RUYIPAGE_MCP_CONFIG

Указание пути к файлу конфигурации


Обзор инструментов (34)

session — Жизненный цикл браузера

Инструмент

Описание

session_launch

Запуск нового браузера Firefox. Поддерживает пользовательский порт, headless-режим, приватный режим, XPath Picker, размер окна и т.д.

session_attach

Подключение к уже запущенному Firefox через host:port

session_auto_attach

Автоматическое обнаружение и подключение к Firefox / ADS / FlowerBrowser по характеристикам процесса

session_quit

Закрытие сессии браузера. Сессии owned завершают процесс, сессии attached только освобождают соединение

Типичный процесс:

session_launch(port=9222)
  → 操作页面...
  → session_quit()
# 接管已打开的指纹浏览器
session_auto_attach(latest_tab=true)
  → 操作页面...
  → session_quit()  # 仅释放连接,浏览器继续运行

nav — Навигация по странице

Инструмент

Описание

nav_get

Открытие URL, поддерживает стратегии ожидания complete / interactive / none

nav_back

Назад

nav_forward

Вперед

nav_refresh

Обновить

nav_info

Получение URL, заголовка и состояния готовности текущей страницы

dom — Поиск и чтение элементов

Инструмент

Описание

dom_find

Поиск одного элемента, возвращает element_id. Поддерживает локаторы #id, css:, xpath:, text:, tag:

dom_find_all

Поиск всех соответствующих элементов, возвращает список (лимит по умолчанию 20, максимум 100)

dom_read

Чтение атрибутов элемента: text / html / inner_html / outer_html / value / attrs / rect / all

dom_query_in

Поиск дочерних элементов внутри уже найденного элемента

dom_wait_for

Ожидание появления элемента (с таймаутом)

dom_release

Освобождение дескриптора элемента, очистка места в реестре

Форматы локаторов:

Формат

Пример

Описание

#id

#search-box

ID селектор

css:

css:div.card > a

CSS селектор

xpath:

xpath://button[text()='Login']

XPath

text:

text:登录

Сопоставление текста

tag:

tag:input

Имя тега

act — Взаимодействие с элементами

Инструмент

Описание

act_click

Клик по элементу. Поддерживает левую/правую кнопку, двойной клик, опциональный JS-клик. По умолчанию использует нативные действия BiDi (isTrusted=true)

act_input

Ввод текста. Нативный ввод с клавиатуры BiDi, опциональная очистка содержимого. Поддерживает откат к JS

act_simple

Простые операции: hover / clear / focus / scroll_into_view

act_chain

Выполнение цепочки действий BiDi (JSON-массив), поддерживает нажатия клавиш, клики, перемещения, перетаскивание, прокрутку, паузы и т.д.

Действия, поддерживаемые 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 — Состояние страницы

Инструмент

Описание

state_screenshot

Скриншот. Поддерживает скриншот всей страницы, элемента, сохранение в файл. Автоматическое сжатие, большие изображения сохраняются на диск

state_save_pdf

Сохранение текущей страницы в PDF

state_cookies

Управление Cookie: get / set / delete. Поддерживает фильтрацию по name/domain

state_storage

Управление localStorage / sessionStorage: items / get / set / delete / clear

js — Выполнение JavaScript

Инструмент

Описание

js_run

Выполнение JS-кода на странице. Может быть вычислено как выражение (as_expr=true) или выполнено как тело функции. Может быть отключено через переменные окружения

js_preload

Управление preload-скриптами: add (внедрение перед каждой загрузкой страницы) / remove

net — Сетевой контроль

Инструмент

Описание

net_intercept

Перехват запросов: start → wait_and_resolve (continue/mock/fail) → stop

net_listen

Прослушивание сети: start → wait (фильтрация по URL/method) → stop

net_collector

Сборщик данных: add → get (получение тела запроса/ответа по request_id) → remove

net_headers

Установка/очистка дополнительных заголовков запроса

net_cache

Настройка поведения кэша: default (обычный кэш) / bypass (принудительный повторный запрос)

Типичный процесс перехвата запросов:

net_intercept(op="start", url_patterns="api/login")
  → 触发页面操作
  → net_intercept(op="wait_and_resolve", action='{"mode":"mock","status":200,"body":"{}"}')
  → net_intercept(op="stop")

Типичный процесс прослушивания сети:

net_listen(op="start", targets="api/data", method="POST")
  → 触发页面操作
  → net_listen(op="wait", timeout=10)
  → net_listen(op="stop")

ctx — Управление контекстом

Инструмент

Описание

ctx_tabs

Управление вкладками: list / create / close / activate / reload

ctx_emulation

Эмуляция устройств: геолокация, часовой пояс, язык, пресеты мобильных устройств, автономный режим, переключатели JS

ctx_events

Подписка на события BiDi: единая точка входа для управления page.events / page.navigation / page.downloads

Пример операции эмуляции:

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 — Информация о сервере

Инструмент

Описание

ruyipage_describe_capabilities

Возвращает текущее состояние сервера: активные сессии, количество элементов, конфигурационные переключатели, список пространств имен инструментов


Основные концепции

Управление сессиями

Каждое соединение с браузером соответствует сессии, идентифицируемой по host:port (например, 127.0.0.1:9222).

  • Если активна только одна сессия, параметр session_id во всех инструментах можно опустить, он будет определен автоматически.

  • Если сессий несколько, необходимо явно передавать session_id.

  • session_launch создает owned-сессию, session_quit завершит процесс браузера.

  • session_attach / session_auto_attach создают attached-сессию, session_quit только освобождает соединение.

Реестр элементов

Элементы, найденные через dom_find / dom_find_all, регистрируются в реестре элементов текущей сессии и возвращают короткий ID (например, el_a3f2b1).

  • LRU-очистка — при достижении лимита емкости (по умолчанию 512) самые старые неиспользуемые элементы автоматически удаляются.

  • Автоматическое восстановление — при обращении к устаревшему элементу автоматически предпринимается попытка повторного поиска с использованием исходного локатора.

  • ID элемента можно передавать во все инструменты, требующие ссылки на элемент: act_click, act_input, dom_read, act_chain и т.д.

  • Все инструменты, принимающие параметр target, также могут принимать строку локатора (например, css:button.submit) напрямую, без предварительного вызова dom_find.

Формат ответа

Все инструменты (кроме state_screenshot) возвращают унифицированный JSON-конверт:

// 成功
{"ok": true, "data": ...}

// 失败
{"ok": false, "error": "error message"}

state_screenshot возвращает объект MCP Image, если размер скриншота позволяет; если он превышает 800 КБ, он сохраняется на диск и возвращается путь к файлу.


Сопутствующие проекты

  • ruyiPage — основная библиотека автоматизации Firefox BiDi

  • ruyipage-skill — Skill для запуска анализа автоматизации ИИ

  • Firefox Fingerprint Browser — сопутствующая среда Firefox с отпечатками


Архитектура

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 — это синхронная библиотека, MCP FastMCP — это asyncio. Все вызовы ruyiPage проходят через asyncio.to_thread(), чтобы гарантировать, что цикл событий MCP не блокируется.


Заявление об использовании

Данный проект следует заявлению об использовании ruyiPage и предназначен исключительно для законных, соответствующих требованиям и некоммерческих целей личных исследований и технического обмена.

Лицензия

BSD-3-Clause

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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 npm
    327
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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 npm
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    Enables 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.
    52
    15 npm
    MIT