Skip to main content
Glama

ruyipage-mcp

Stellt die Firefox BiDi-Automatisierungsfunktionen von ruyiPage über das MCP (Model Context Protocol) als eine für KI aufrufbare Tool-Sammlung bereit.

Unterstützt beliebige MCP-Clients wie Claude Code, Cursor usw.


Funktionen

  • 34 Tools, die den gesamten Prozess der Browser-Automatisierung abdecken: Starten/Übernehmen von Browsern, Seitennavigation, DOM-Suche und -Interaktion, Screenshots/PDF, Cookies/Storage, JS-Ausführung, Netzwerk-Interception/Monitoring/Datenerfassung, Tab-Management, Geräteemulation, BiDi-Event-Abonnement

  • Native BiDi-Aktionen bevorzugt — Aktionen wie Klicken, Eingeben, Ziehen usw. behalten isTrusted=true bei, was besser für Szenarien mit hohem Risikoschutz geeignet ist

  • Unterstützung für die Übernahme von Fingerprint-Browsern — Kann automatisch ADS / FlowerBrowser und andere Firefox-basierte Fingerprint-Browser erkennen und übernehmen

  • Intelligentes Element-Management — LRU-Element-Registry, automatische Bereinigung + automatische erneute Suche nach abgelaufenen Elementen

  • Automatische Screenshot-Komprimierung — Automatische Skalierung von überbreiten Bildern, JPEG-Komprimierung, automatische Speicherung großer Bilder auf der Festplatte

  • stdio-Übertragung — Standard JSON-RPC 2.0, sofort einsatzbereit


Related MCP server: MCP Selenium Server

Installation

Voraussetzungen

Installation aus dem Quellcode

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

Konfiguration

Claude Code

Methode 1: Projektbezogene .mcp.json (empfohlen)

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

Cursor / Andere MCP-Clients

Fügen Sie Folgendes zur entsprechenden MCP-Konfigurationsdatei hinzu:

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

Unabhängiger Betrieb

python -m ruyipage_mcp

Der Server überträgt JSON-RPC-Nachrichten über stdin/stdout, Protokolle werden nach stderr ausgegeben.


Konfiguration

Konfigurationsdatei

Kopieren Sie ruyipage_mcp.example.json nach ruyipage_mcp.json und passen Sie sie nach Bedarf an:

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
}

Suchreihenfolge für die Konfigurationsdatei:

  1. Pfad, der durch die Umgebungsvariable RUYIPAGE_MCP_CONFIG angegeben ist

  2. ruyipage_mcp.json im aktuellen Arbeitsverzeichnis

  3. Falls keine Konfigurationsdatei gefunden wird, werden die eingebauten Standardwerte verwendet

Konfigurationsoption

Typ

Standardwert

Beschreibung

browser_path

string

E:\ruyi_firefox\firefox.exe

Pfad zur Firefox-Programmdatei

disable_run_js

bool

false

Auf true setzen, um das js_run-Tool zu deaktivieren

disable_extensions

bool

false

Auf true setzen, um erweiterungsbezogene Funktionen zu deaktivieren

browser_path_whitelist

list

[] (beliebige Pfade erlaubt)

Liste der erlaubten Browser-Pfade

max_elements

int

512

LRU-Kapazität der Element-Registry pro Sitzung

event_buffer_size

int

500

Größe des BiDi-Event-Puffers

wait_timeout_ceiling

int

60

Timeout-Obergrenze für alle Warte-Tools (in Sekunden)

Überschreiben durch Umgebungsvariablen

Umgebungsvariablen haben eine höhere Priorität als die Konfigurationsdatei, was für CI oder temporäre Überschreibungen geeignet ist:

Umgebungsvariable

Entsprechende Konfigurationsoption

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 (durch Kommas getrennt)

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

Pfad zur Konfigurationsdatei angeben


Tool-Übersicht (34)

session — Browser-Lebenszyklus

Tool

Beschreibung

session_launch

Startet einen neuen Firefox-Browser. Unterstützt benutzerdefinierte Ports, Headless-Modus, Privatsphäre-Modus, XPath Picker, Fenstergröße usw.

session_attach

Übernimmt einen bereits laufenden Firefox über host:port

session_auto_attach

Erkennt und übernimmt Firefox / ADS / FlowerBrowser automatisch anhand von Prozessmerkmalen

session_quit

Schließt die Browsersitzung. owned-Sitzungen beenden den Prozess direkt, attached-Sitzungen geben nur die Verbindung frei

Typischer Ablauf:

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

nav — Seitennavigation

Tool

Beschreibung

nav_get

Öffnet eine URL, unterstützt Warte-Strategien wie complete / interactive / none

nav_back

Zurück

nav_forward

Vorwärts

nav_refresh

Aktualisieren

nav_info

Ruft URL, Titel und Ready-State der aktuellen Seite ab

dom — Element-Suche und -Lesen

Tool

Beschreibung

dom_find

Sucht ein einzelnes Element und gibt element_id zurück. Unterstützt #id, css:, xpath:, text:, tag: als Selektoren

dom_find_all

Sucht alle passenden Elemente und gibt eine Liste zurück (Standard-Limit 20, Maximum 100)

dom_read

Liest Element-Attribute: text / html / inner_html / outer_html / value / attrs / rect / all

dom_query_in

Sucht innerhalb eines bereits gefundenen Elements nach Unterelementen

dom_wait_for

Wartet auf das Erscheinen eines Elements (mit Timeout)

dom_release

Gibt das Element-Handle frei und gibt Speicher in der Registry frei

Locator-Formate:

Format

Beispiel

Beschreibung

#id

#search-box

ID-Selektor

css:

css:div.card > a

CSS-Selektor

xpath:

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

XPath

text:

text:登录

Text-Übereinstimmung

tag:

tag:input

Tag-Name

act — Element-Interaktion

Tool

Beschreibung

act_click

Klickt auf ein Element. Unterstützt Links-/Rechtsklick / Doppelklick, optional JS-Klick. Verwendet standardmäßig native BiDi-Aktionen (isTrusted=true)

act_input

Gibt Text ein. Native BiDi-Tastatureingabe, optionales Leeren vorhandener Inhalte. Unterstützt JS-Fallback

act_simple

Einfache Aktionen: hover / clear / focus / scroll_into_view

act_chain

Führt eine BiDi-Aktionskette (JSON-Array) aus, unterstützt Tastendruck, Klicken, Bewegen, Ziehen, Scrollen, Pausieren usw.

Von act_chain unterstützte Aktionen:

[
  {"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 — Seitenstatus

Tool

Beschreibung

state_screenshot

Screenshot. Unterstützt Vollseiten-Screenshot, Element-Screenshot, Speichern in Datei. Automatische Komprimierung, automatische Speicherung großer Bilder auf der Festplatte

state_save_pdf

Speichert die aktuelle Seite als PDF

state_cookies

Cookie-Management: get / set / delete. Unterstützt Filterung nach Name/Domain

state_storage

localStorage / sessionStorage-Management: items / get / set / delete / clear

js — JavaScript-Ausführung

Tool

Beschreibung

js_run

Führt JS-Code auf der Seite aus. Kann als Ausdruck (as_expr=true) oder Funktionskörper ausgeführt werden. Kann über Umgebungsvariablen deaktiviert werden

js_preload

Verwaltet Preload-Skripte: add (wird vor jedem Laden der Seite injiziert) / remove

net — Netzwerkkontrolle

Tool

Beschreibung

net_intercept

Request-Interception: start → wait_and_resolve (continue/mock/fail) → stop

net_listen

Netzwerk-Monitoring: start → wait (Filterung nach URL/Methode) → stop

net_collector

Datensammler: add → get (ruft Request/Response-Body nach request_id ab) → remove

net_headers

Setzt/Löscht zusätzliche Request-Header

net_cache

Setzt Cache-Verhalten: default (normales Caching) / bypass (erzwingt erneute Anfrage)

Typischer Ablauf für Request-Interception:

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

Typischer Ablauf für Netzwerk-Monitoring:

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

ctx — Kontext-Management

Tool

Beschreibung

ctx_tabs

Tab-Management: list / create / close / activate / reload

ctx_emulation

Geräteemulation: Geolocation, Zeitzone, Sprache, Mobilgeräte-Presets, Offline-Modus, JS-Schalter

ctx_events

BiDi-Event-Abonnement: Einheitlicher Einstiegspunkt für page.events / page.navigation / page.downloads

Beispiel für Emulations-Aktionen:

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 — Server-Informationen

Tool

Beschreibung

ruyipage_describe_capabilities

Gibt den aktuellen Serverstatus zurück: aktive Sitzungen, Elementanzahl, Konfigurationsschalter, Liste der Tool-Namespaces


Kernkonzepte

Sitzungsmanagement

Jede Browser-Verbindung entspricht einer Sitzung, identifiziert durch host:port (z. B. 127.0.0.1:9222).

  • Wenn nur eine aktive Sitzung vorhanden ist, kann der session_id-Parameter bei allen Tools weggelassen werden; er wird automatisch aufgelöst

  • Bei mehreren Sitzungen muss die session_id explizit übergeben werden

  • session_launch erstellt eine owned-Sitzung, session_quit beendet den Browser-Prozess

  • session_attach / session_auto_attach erstellen eine attached-Sitzung, session_quit gibt nur die Verbindung frei

Element-Registry

Elemente, die über dom_find / dom_find_all gefunden wurden, werden in der Element-Registry der aktuellen Sitzung registriert und geben eine kurze ID zurück (z. B. el_a3f2b1).

  • LRU-Bereinigung — Wenn die Kapazitätsgrenze (Standard 512) erreicht ist, wird das am längsten nicht verwendete Element automatisch entfernt

  • Automatische Wiederherstellung bei Ablauf — Beim Zugriff auf ein abgelaufenes Element wird automatisch versucht, es mit dem ursprünglichen Locator erneut zu finden

  • Die Element-ID kann an alle Tools übergeben werden, die eine Element-Referenz benötigen, wie act_click, act_input, dom_read, act_chain usw.

  • Alle Tools, die einen target-Parameter akzeptieren, können auch direkt einen Locator-String (z. B. css:button.submit) entgegennehmen, ohne dass dom_find vorher aufgerufen werden muss

Antwortformat

Alle Tools (außer state_screenshot) geben einen einheitlichen JSON-Umschlag zurück:

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

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

state_screenshot gibt bei zulässiger Screenshot-Größe direkt ein MCP-Image-Objekt zurück; bei Überschreitung von 800 KB wird das Bild auf der Festplatte gespeichert und der Dateipfad zurückgegeben.


Zugehörige Projekte


Architektur

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 ist eine synchrone Bibliothek, MCP FastMCP basiert auf asyncio. Alle ruyiPage-Aufrufe werden über asyncio.to_thread() gebrückt, um sicherzustellen, dass die MCP-Ereignisschleife nicht blockiert wird.


Nutzungserklärung

Dieses Projekt folgt der Nutzungserklärung von ruyiPage und ist ausschließlich für legale, regelkonforme und nicht-kommerzielle Zwecke der persönlichen Forschung und des technischen Austauschs bestimmt.

Lizenz

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