Skip to main content
Glama

jjx-js-reverse-mcp

Englische README

Einheitliches JavaScript-Reverse-MCP: Vollständiges Hook / Breakpoint / Script-Debugging + Browser-Aktionskette + CDP-Anti-Erkennung.

Ein Prozess verbindet nur einen Browser, um das Problem zu lösen, dass gleichzeitig js-reverse-mcp und chrome-devtools-mcp zwei Fenster öffnen.

Der Modus wird durch die Startparameter bestimmt, nicht durch den Dialog-Prompt.
Der Prompt kann das MCP nicht dazu bringen, ATTACH / LAUNCH „automatisch zu erkennen“; um den Modus zu wechseln, ändere mcp.json und lade neu, oder registriere zwei MCP-Einträge und wähle einen aus.

Schnellauswahl

Dein Szenario

Empfohlener Modus

Schlüsselparameter

Bereits mit bat / manuell Browser geöffnet und eingeloggt, Login-Zustand erhalten

ATTACH

--remoteDebuggingPort 9333 (oder dein Port)

Von Null automatisieren, erneutes Einloggen möglich, gelber Balken egal

LAUNCH

--executablePath + empfohlen --isolated

Tägliches Reverse, weniger Agent-Tool-Rauschen

Beliebig +

--toolProfile slim (enthält AI-Entschleierung/Verständnis, kein heap/trace)

Nur Aufklärung (Skripte/Netzwerk lesen, Navigation/Seiten schließen deaktiviert)

Beliebig +

--toolProfile observe

Fokus auf Hook / Breakpoint

Beliebig +

--toolProfile hook

Performance-Trace / Heap-Snapshot / tiefes Wasm-Decompile benötigt

Beliebig +

--toolProfile full (Standard)

Reines Debugging, CDP-Leak-Guard deaktivieren

Beliebig +

--no-stealth


Dual-Mode-Browser-Lebenszyklus

Modus

Wann verwenden

CLI (sich gegenseitig ausschließend)

Beim Beenden

ATTACH

Browser bereits mit --remote-debugging-port geöffnet und Zielseite besucht

--browserUrl / --remoteDebuggingPort / --wsEndpoint / --autoConnect

Nur disconnect, tötet nicht den Benutzer-Browser

LAUNCH

MCP soll Chrome/CloakBrowser selbst starten

--executablePath / --channel

Schließt die vom MCP gestartete Instanz

  • ATTACH- und LAUNCH-Parameter schließen sich gegenseitig aus (nicht gleichzeitig --remoteDebuggingPort und --executablePath schreiben).

  • Bei ATTACH-Fehler wird nicht heimlich ein neuer Browser geöffnet (vermeidet „denkt, er übernimmt, startet aber einen weiteren“).

  • Zur Laufzeit kann attach_browser dynamisch übernehmen; es gibt kein symmetrisches „dynamisches Launch“-Tool – für echten Selbststart muss LAUNCH-Startparameter verwendet werden.

Tools: get_browser_mode / attach_browser / check_browser_health

ATTACH: CLI-Beispiel

# 1) 手动启动(桌面 bat 常用 9333;也可 9222)
"你的chrome.exe路径" ^
  --remote-debugging-port=9333 --remote-allow-origins=*

# 2) 在浏览器里打开目标站并登录

# 3) MCP 接管(端口必须一致)
node build/src/index.js --remoteDebuggingPort 9333 --toolProfile slim
# 或
node build/src/index.js --browserUrl http://127.0.0.1:9333 --toolProfile slim

LAUNCH: CLI-Beispiel

node build/src/index.js ^
  --executablePath "你的chrome.exe路径" ^
  --isolated ^
  --toolProfile slim

Cursor mcp.json: Nach Szenario kopieren

Globaler Konfigurationspfad normalerweise: %USERPROFILE%\.cursor\mcp.json
Nach Änderung unbedingt: Settings → Tools & MCP → Reload des entsprechenden Servers.

Pfade bitte an dein System anpassen: deinjjx-js-reverse-mcp-Pfad, deinchrome.exe-Pfad.

Szenario 1 — ATTACH tägliches Reverse (empfohlen)

Geeignet: Login-Zustand erhalten, wenig neue Fenster, in Kombination mit Cloak Browser.bat.

{
  "mcpServers": {
    "jjx-js-reverse-mcp": {
      "command": "cmd",
      "args": [
        "/c",
        "node",
        "你的jjx-js-reverse-mcp路径/build/src/index.js",
        "--remoteDebuggingPort",
        "9333",
        "--toolProfile",
        "slim"
      ]
    }
  }
}

Ablauf: Zuerst bat öffnen → manuell Zielseite besuchen → MCP neu laden (falls nicht geladen) → im Dialog „new_page verbieten / launch verbieten, zuerst list_pages“ anfordern.

Szenario 2 — ATTACH klassisch 9222

Wenn Browser mit --remote-debugging-port=9222 gestartet wird:

{
  "mcpServers": {
    "jjx-js-reverse-mcp": {
      "command": "cmd",
      "args": [
        "/c",
        "node",
        "你的jjx-js-reverse-mcp路径/build/src/index.js",
        "--remoteDebuggingPort",
        "9222",
        "--toolProfile",
        "slim"
      ]
    }
  }
}

Szenario 3 — LAUNCH Selbststart Cloak (Automatisierung / erneutes Einloggen)

Geeignet: Kein vorhandener Login-Zustand nötig; akzeptiert möglichen gelben Balken „Chrome wird von automatisierter Testsoftware gesteuert“.

{
  "mcpServers": {
    "jjx-js-reverse-mcp": {
      "command": "cmd",
      "args": [
        "/c",
        "node",
        "你的jjx-js-reverse-mcp路径/build/src/index.js",
        "--executablePath",
        "你的chrome.exe路径",
        "--isolated",
        "--toolProfile",
        "slim"
      ]
    }
  }
}
  • --isolated: Temporäres Profil, reduziert „browser already running / profile belegt“.

  • Nicht mit dem gleichen Profilverzeichnis einer bat-Instanz konkurrieren; bei Konflikt zuerst überflüssige Browser schließen oder auf ATTACH zurückwechseln.

Szenario 4 — Zwei Sätze parallel (ATTACH + LAUNCH, Auswahl im Dialog)

Wenn du die Konfiguration nicht ständig ändern möchtest, registriere zwei Server und aktiviere/wähle den entsprechenden in Cursor:

{
  "mcpServers": {
    "jjx-attach": {
      "command": "cmd",
      "args": [
        "/c",
        "node",
        "你的jjx-js-reverse-mcp路径/build/src/index.js",
        "--remoteDebuggingPort",
        "9333",
        "--toolProfile",
        "slim"
      ]
    },
    "jjx-launch": {
      "command": "cmd",
      "args": [
        "/c",
        "node",
        "你的jjx-js-reverse-mcp路径/build/src/index.js",
        "--executablePath",
        "你的chrome.exe路径",
        "--isolated",
        "--toolProfile",
        "slim"
      ]
    }
  }
}

Hinweis: Wenn beide aktiviert sind, könnte der Agent den „falschen“ Satz ansprechen; im Prompt klarstellen, dass jjx-attach oder jjx-launch verwendet wird, oder nur einen aktivieren.

Szenario 5 — Kleinere Tool-Oberfläche (observe / hook)

Nur --toolProfile ändern, Modus-Parameter bleiben gleich.

Aufklärung (weniger Tools, schnellere Entscheidungen):

--toolProfile observe

Hook / Breakpoint im Fokus:

--toolProfile hook

Vollständig (mit performance / heapsnapshot / schweres AI / tiefes Wasm):

--toolProfile full

Profile

Ungefähre Verwendung

Beschreibung

full

Alle Fähigkeiten

Standard; enthält close_page, Performance-Trace, Heapsnapshot, tiefes Wasm

slim

Tägliches Reverse

Empfohlen; enthält deobfuscate_code / understand_code / analyze_wasm_module; enthält nicht close_page (verhindert versehentliches Schließen der Login-Seite), kein heap/trace

observe

Nur-Lesen-Aufklärung

Enthält nicht navigate_page / new_page / close_page / Klicken/Formular ausfüllen

hook

Hook + Debugging

Fokus auf Injection und Breakpoints

Szenario 6 — Stealth deaktivieren (reines Debugging)

Am Ende der args von ATTACH oder LAUNCH anhängen:

"--no-stealth"

Bei starken Risikokontroll-Seiten wird normalerweise Standard-Stealth beibehalten (diesen Eintrag nicht hinzufügen).

Szenario 7 — ATTACH automatische Port-Erkennung

Erkennt lokale Ports 9222–9225; falls nicht gefunden, Fehler und kein Launch:

{
  "mcpServers": {
    "jjx-js-reverse-mcp": {
      "command": "cmd",
      "args": [
        "/c",
        "node",
        "你的jjx-js-reverse-mcp路径/build/src/index.js",
        "--autoConnect",
        "--toolProfile",
        "slim"
      ]
    }
  }
}

Wenn das Desktop-bat fest 9333 verwendet und nicht im Bereich 9222–9225 liegt, verwende für Szenario 1 den expliziten Port, nicht --autoConnect.


Zusammenhang zwischen Prompt und Konfiguration

Was du tun möchtest

Richtige Vorgehensweise

Bereits geöffneten Browser von bat übernehmen

mcp.json mit ATTACH + gleichem Port; Prompt schreibe „launch / new_page verbieten“

MCP selbst Browser öffnen

mcp.json auf LAUNCH ändern und neu laden (oder jjx-launch-Eintrag verwenden)

Nur Prompt ändern, um Modus zu wechseln

Ungültig – Server liest Chat-Inhalt nicht

Lokale Vorlagentexte:

  • deinATTACH-Modus-Prompt-Vorlagenpfad

  • deinLAUNCH-Modus-Prompt-Vorlagenpfad

Weitere Erläuterungen: docs/guides/browser-modes.md, docs/guides/anti-detect.md


CDP-Anti-Erkennung (kompakt)

Standardmäßig aktivierter CDP-Leak-Guard (kann mit --no-stealth deaktiviert werden):

  1. CdpLeakGuard: Bereinigt cdc_* / selenium-Globals, repariert navigator.webdriver, minimiert chrome.*, Error-Stack-Desensibilisierung; Vorinjektion in neue Dokumente + Nachinjektion nach Navigation

  2. evaluate_script / Injektionspfad: Bevorzugt CDP Runtime.evaluate, reduziert __puppeteer_evaluation_script__-Leak

  3. Entfernt: StealthScripts2025 (Chrome 131 UA / Canvas / WebGL / Audio etc. Fingerabdruck-Tarnung) – veraltet und leicht mit echtem Kernel in Konflikt

Tools: enable_cdp_guard / inject_stealth (entspricht Basis-Guard) / stealth_status
Manuelles UA: set_user_agent (ändert keine Client Hints)

Bei starken Risikokontrollen verwende CloakBrowser native Fingerabdrücke + echten Login-Zustand ATTACH. Dieses MCP bietet kein „starke Erkennung überwindendes“ Komplett-Stealth; protokollbasierte Lösungen (wie rebrowser-patches) müssen separat integriert werden, sind nicht eingebaut.

Siehe docs/guides/anti-detect.md.


Fähigkeitsübersicht

  • Hook: create_hook / inject_hook (Standard persist über Navigation) / get_hook_data / remove_hook (gleichzeitig Seiten-Store leeren) / hook_function

  • Debugging: Skript-Quellcode, Breakpoints, XHR-Break, Step, Callframe-Evaluate (hook_function etc. über CDP safeEvaluateIife)

  • Browser: Navigation, Snapshot+uid Klicken/Formular ausfüllen, fill_form, Netzwerk/Konsole, Sitzungszustand

  • Reverse: Sammeln, Entschleierung, Verschlüsselungserkennung, Wasm, Rebuild, Beweis-Export

  • Beobachtung: performance_* (mit Insight), take_heapsnapshot, leichtes page_vitals_audit – meist in full; performance_start_trace reload standardmäßig false

  • Sammeln mit Sitzungserhalt: Bei bereits auf Ziel-URL collect_code / collect_wasm standardmäßig kein goto; explizit forceNavigate=true zum Aktualisieren; auf ausgewählter Seite des MCP wird nicht UA erzwungen

  • DOM / Session: query_dom, localStorage etc. bevorzugt CDP, reduziert puppeteer sourceURL-Leak

Stabilitätshinweise (Reverse-Ablauf)

  1. Zuerst list_pages + select_page: Ohne ausgewählte Seite gibt der Collector direkt einen Fehler, nicht heimlich wieder mit Standard 9222 verbinden.

  2. collect_code sammelt nur einmal: Behebt doppeltes collect bei altem returnMode=full; bei großen Seiten bevorzugt returnMode=summary.

  3. inject_hook standardmäßig persist: Hook bleibt nach Navigation erhalten; wenn globale wie JSON.stringify gehookt werden, könnte dies die JSON-Serialisierung auf nachfolgenden Seiten stören – vorsichtig verwenden oder rechtzeitig remove_hook / aktualisieren.

  4. restore_session_state standardmäßig keine Navigation: Bei Bedarf navigateToSavedUrl=true übergeben.

  5. attach_browser: Wenn aktuell LAUNCH-Sitzung, wird beim Shutdown der selbstgestartete Browser geschlossen und dann umgeschaltet (Antwort enthält previousLaunchClosed).

  6. --autoConnect scannt nur 9222–9225: Andere Ports bitte --remoteDebuggingPort verwenden.


Entwicklung

npm install
npm run build
npm start -- --remoteDebuggingPort 9333 --toolProfile slim

Stresstest:

# LAUNCH + ATTACH 主流程
node scripts/stress-reverse-flow.mjs

# 扫描修复项回归(profile / safeEval / getActivePage / hook persist)
node scripts/stress-fix-regression.mjs

Erfordert: Node ^20.19 || ^22.12 || >=23

Lizenz

Apache-2.0. Basierend auf chrome-devtools-mcp und js-reverse-strong-mcp weiterentwickelt, siehe NOTICE.

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • MCP server for understanding Javascript internals from ECMAScript specification.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

  • MCP server for Klever blockchain smart contract development.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Junjianxin/jjx-js-reverse-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server