jjx-js-reverse-mcp
A unified MCP server for JavaScript reverse engineering that provides full hook, breakpoints, script debugging, and browser automation with CDP anti-detection, supporting both ATTACH and LAUNCH modes.
README
jjx-js-reverse-mcp
统一的 JavaScript 逆向 MCP:全量 Hook / 断点 / 脚本调试 + 浏览器操作链路 + CDP 反检测。
一个进程只连接一个浏览器,解决同时挂 js-reverse-mcp 与 chrome-devtools-mcp 导致开两个窗口的问题。
模式由启动参数决定,不是由对话提示词决定。
提示词无法让 MCP「自动识别」ATTACH / LAUNCH;要换模式请改mcp.json后 Reload,或注册两套 MCP 条目后选用。
快速选型
| 你的场景 | 推荐模式 | 关键参数 |
|---|---|---|
| 已用 bat / 手动开浏览器并登录,要保登录态 | ATTACH | --remoteDebuggingPort 9333(或你的端口) |
| 从零自动化、可重登、不在乎黄条 | LAUNCH | --executablePath + 建议 --isolated |
| 日常逆向、减少 Agent 工具噪声 | 任意模式 + | --toolProfile slim(含 AI 反混淆/理解,不含 heap/trace) |
| 只做侦察(读脚本/网络,禁导航关页) | 任意模式 + | --toolProfile observe |
| 专注 Hook / 断点 | 任意模式 + | --toolProfile hook |
| 需要性能 trace / 堆快照 / 深层 Wasm decompile | 任意模式 + | --toolProfile full(默认) |
| 纯调试、关闭 CDP leak guard | 任意模式 + | --no-stealth |
双模式浏览器生命周期
| 模式 | 何时使用 | CLI(互斥) | 退出时 |
|---|---|---|---|
| ATTACH | 浏览器已带 --remote-debugging-port 打开,并已访问目标站 |
--browserUrl / --remoteDebuggingPort / --wsEndpoint / --autoConnect |
只 disconnect,不杀用户浏览器 |
| LAUNCH | 需要 MCP 自己启动 Chrome/CloakBrowser | --executablePath / --channel |
关闭 MCP 启动的实例 |
- ATTACH 与 LAUNCH 参数互斥(不能同时写
--remoteDebuggingPort和--executablePath)。 - ATTACH 失败时不会偷偷新开浏览器(避免「以为接管,其实又起了一个」)。
- 运行时可调
attach_browser动态接管;没有对称的「动态 launch」工具——真要自启必须用 LAUNCH 启动参数。
工具:get_browser_mode / attach_browser / check_browser_health
ATTACH:CLI 示例
# 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 示例
node build/src/index.js ^
--executablePath "你的chrome.exe路径" ^
--isolated ^
--toolProfile slim
Cursor mcp.json:按场景复制
全局配置路径一般是:%USERPROFILE%\.cursor\mcp.json
改完后务必:Settings → Tools & MCP → Reload 对应 server。
路径请按本机修改:你的jjx-js-reverse-mcp路径、你的chrome.exe路径。
场景 1 — ATTACH 日常逆向(推荐)
适合:保登录态、少开新窗、配合 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"
]
}
}
}
流程:先开 bat → 手动打开目标站 → Reload MCP(若未加载)→ 对话里要求「禁止 new_page / 禁止 launch,先 list_pages」。
场景 2 — ATTACH 经典 9222
浏览器用 --remote-debugging-port=9222 启动时:
{
"mcpServers": {
"jjx-js-reverse-mcp": {
"command": "cmd",
"args": [
"/c",
"node",
"你的jjx-js-reverse-mcp路径/build/src/index.js",
"--remoteDebuggingPort",
"9222",
"--toolProfile",
"slim"
]
}
}
}
场景 3 — LAUNCH 自启 Cloak(自动化 / 可重登)
适合:不需要已有登录态;接受可能出现「Chrome 正受到自动测试软件的控制」黄条。
{
"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:临时 profile,减少「browser already running / profile 占用」。- 不要与已占用同一 profile 的 bat 实例抢目录;冲突时先关多余浏览器,或改回 ATTACH。
场景 4 — 两套并存(ATTACH + LAUNCH,对话时选用)
不想反复改配置时,注册两个 server,在 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"
]
}
}
}
注意:两个都启用时,Agent 可能调到「错的」那套;提示词里写明用 jjx-attach 或 jjx-launch,或只启用其中一个。
场景 5 — 工具面更小(observe / hook)
只改 --toolProfile,模式参数不变。
侦察(更少工具、决策更快):
--toolProfile observe
Hook / 断点为主:
--toolProfile hook
全量(含 performance / heapsnapshot / 重型 AI / 深层 Wasm):
--toolProfile full
| Profile | 大约用途 | 说明 |
|---|---|---|
full |
全能力 | 默认;含 close_page、performance trace、heapsnapshot、深层 Wasm |
slim |
日常逆向 | 推荐;含 deobfuscate_code / understand_code / analyze_wasm_module;不含 close_page(防误关登录页)、不含 heap/trace |
observe |
只读侦察 | 不含 navigate_page / new_page / close_page / 点击填表 |
hook |
Hook + 调试 | 聚焦注入与断点 |
场景 6 — 关闭 Stealth(纯调试)
在 ATTACH 或 LAUNCH 的 args 末尾追加:
"--no-stealth"
强风控站点逆向一般保持默认 Stealth(勿加该项)。
场景 7 — ATTACH 自动探测端口
探测本机 9222–9225;找不到则报错且不 launch:
{
"mcpServers": {
"jjx-js-reverse-mcp": {
"command": "cmd",
"args": [
"/c",
"node",
"你的jjx-js-reverse-mcp路径/build/src/index.js",
"--autoConnect",
"--toolProfile",
"slim"
]
}
}
}
桌面 bat 若固定 9333,不在 9222–9225 范围内时请用场景 1 的显式端口,不要依赖 --autoConnect。
提示词与配置的关系
| 你想做的事 | 正确做法 |
|---|---|
| 接管 bat 已开浏览器 | mcp.json 用 ATTACH + 端口一致;提示词写「禁止 launch / new_page」 |
| MCP 自己开浏览器 | mcp.json 改成 LAUNCH 并 Reload(或用 jjx-launch 条目) |
| 只改提示词切换模式 | 无效——服务端不读聊天内容 |
本地可参考话术模版:
你的ATTACH模式提示词模版路径你的LAUNCH模式提示词模版路径
更多说明:docs/guides/browser-modes.md、docs/guides/anti-detect.md
CDP 反检测(精简)
默认开启基础 CDP leak guard(可用 --no-stealth 关闭):
CdpLeakGuard:清理cdc_*/ selenium 全局、修补navigator.webdriver、最小chrome.*、Error stack 脱敏;新文档预注入 + 导航后补注evaluate_script/ 注入路径:优先 CDPRuntime.evaluate,减少__puppeteer_evaluation_script__泄漏- 已移除:
StealthScripts2025(Chrome 131 UA / Canvas / WebGL / Audio 等指纹伪装)——过时且易与真实内核冲突
工具:enable_cdp_guard / inject_stealth(等同基础 guard)/ stealth_status
手动 UA:set_user_agent(不改 Client Hints)
强风控请用 CloakBrowser 原生指纹 + 真实登录态 ATTACH。本 MCP 不做「可过强检测」的全家桶 stealth;协议级方案(如 rebrowser-patches)需单独集成,未内置。
详见 docs/guides/anti-detect.md。
能力概览
- Hook:
create_hook/inject_hook(默认 persist 跨导航)/get_hook_data/remove_hook(顺带清页面 store)/hook_function… - 调试:脚本源码、断点、XHR break、步进、callframe evaluate(
hook_function等走 CDPsafeEvaluateIife) - 浏览器:导航、snapshot+uid 点击/填表、
fill_form、网络/控制台、会话态 - 逆向:采集、反混淆、加密检测、Wasm、rebuild、证据导出
- 观测:
performance_*(含 Insight)、take_heapsnapshot、轻量page_vitals_audit——多在full;performance_start_trace的reload默认 false - 采集保会话:已在目标 URL 时
collect_code/collect_wasm默认不goto;显式forceNavigate=true才刷新;MCP 选中页上不会强改 UA - DOM / session:
query_dom、存取 localStorage 等优先 CDP,减少 puppeteer sourceURL 泄漏
稳定性注意(逆向流程)
- 先
list_pages+select_page:未选中页时 collector 会直接报错,不会再偷偷连默认 9222。 collect_code只采集一次:修复了旧版returnMode=full双次collect;大站优先returnMode=summary。inject_hook默认 persist:导航后 hook 仍在;若 hook 了JSON.stringify等全局,可能干扰后续页内 JSON 序列化——慎用或及时remove_hook/ 刷新。restore_session_state默认不导航:需跳转时传navigateToSavedUrl=true。attach_browser:若当前是 LAUNCH 会话,shutdown 会关掉自启浏览器再改连(响应里有previousLaunchClosed)。--autoConnect只扫 9222–9225:其他端口请用--remoteDebuggingPort。
开发
npm install
npm run build
npm start -- --remoteDebuggingPort 9333 --toolProfile slim
压测:
# LAUNCH + ATTACH 主流程
node scripts/stress-reverse-flow.mjs
# 扫描修复项回归(profile / safeEval / getActivePage / hook persist)
node scripts/stress-fix-regression.mjs
要求:Node ^20.19 || ^22.12 || >=23
License
Apache-2.0。基于 chrome-devtools-mcp 与 js-reverse-strong-mcp 演进,见 NOTICE。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。