{"_id":"js-reverse-mcp","_rev":"39-49fb21a165620700979960d4f287f58c","name":"js-reverse-mcp","dist-tags":{"latest":"4.0.5"},"versions":{"1.0.0":{"name":"js-reverse-mcp","version":"1.0.0","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.0.0","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"0752f898f396f0eab2d0740024710d0417146d55","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.0.0.tgz","fileCount":693,"integrity":"sha512-PExHCunAoOpCKO0mg4rNl8lypE6U2wB6yvlD6yG0Ar5413Xt9r8Yq6URN/5AsQlShvSyRfCXP7EMATVKXDMSPg==","signatures":[{"sig":"MEYCIQDJAmihxbiw00EGs4j8RBJ7ETNzj8LIbhiMGg0lp0FQywIhAO5dQH2B4qlShT8fBRyx5PQp29zxl3luTTIz4doNbBwz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5817269},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"608202064eca174b72eb01227ebab98ab5665b37","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"debug":"4.4.3","sinon":"^21.0.0","yargs":"18.0.0","eslint":"^9.35.0","rollup":"4.53.3","core-js":"3.47.0","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","patchright":"^1.51.1","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","devtools-protocol":"^0.0.1425554","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@modelcontextprotocol/sdk":"1.21.1","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.0.0_1773560253342_0.5429604147616205","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"js-reverse-mcp","version":"1.0.1","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.0.1","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"4aa501269fe1566b6dcec2a3578f806df36ba00a","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.0.1.tgz","fileCount":693,"integrity":"sha512-0VcRHMPojDV42CLPbnAEwVRJ/V7+kpHy0B5j5nGs7qk4fG4ZekNnpZDj1z5i4d3DH//Y+oTspuJ9K667kalJ2A==","signatures":[{"sig":"MEYCIQDZMRCJVgA4HeSEmRCmf46ok3dVXhtsRUTgm+VN8f7kCgIhAPI2GjyWdcYoLfKIvkW+463N2/8lfPsCMgXhenkP6G3d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5816951},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"e6b9b2a70255165d49bc66ad69d1c2c4e1389a4e","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"debug":"4.4.3","sinon":"^21.0.0","yargs":"18.0.0","eslint":"^9.35.0","rollup":"4.53.3","core-js":"3.47.0","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","patchright":"^1.51.1","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","devtools-protocol":"^0.0.1425554","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@modelcontextprotocol/sdk":"1.21.1","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.0.1_1773562981233_0.4511575906656595","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"js-reverse-mcp","version":"1.0.2","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.0.2","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"eebaf8a116ed1a26345c8f5367b83280202bfe34","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.0.2.tgz","fileCount":690,"integrity":"sha512-JJQ4NXn0c0nOrJUzXC9kTr6tYZUEEFeFQ26iNRQDyrupvq2pmOQycwUliBPGenJRx3oR6bLbawo2fXI6zlI83A==","signatures":[{"sig":"MEUCIBGW/sul3Eu6Co1A172cBTsHITekG55fM8kQNGUFsDH+AiEA3dPVQax1i0BzTb7/PidZVgg6sEEJdUwE2CzV0eeNspY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5806605},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"88dc5c390c7ea32394eb3056a1efa803ecb21dc6","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.1","dependencies":{"core-js":"3.47.0"},"_hasShrinkwrap":false,"devDependencies":{"debug":"4.4.3","sinon":"^21.0.0","yargs":"18.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","patchright":"^1.51.1","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","devtools-protocol":"^0.0.1425554","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@modelcontextprotocol/sdk":"1.21.1","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.0.2_1773654658532_0.5844002951908329","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"js-reverse-mcp","version":"1.0.3","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.0.3","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"013273094d57d6b882e14b762a9d553b201e7d93","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.0.3.tgz","fileCount":690,"integrity":"sha512-Oz5CVAD55X/xm1IKb9hFZRnnogn1C/kFFUdpeuyuZwGX7kLDywmypvbBx3botBKQX4GwKSA03vVRCpTPHgP5KA==","signatures":[{"sig":"MEUCIGmbsbbCyfpoD/35nuaX30nZto7bymCmovlwJ/mSYdzsAiEAiAfIHnF0YlUDTPCVPLumZs4M6uR/KYQCCwRBlY+Ip8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5806605},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"d319aa428e398935f4947f9738d62b49680e16c7","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.1","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.0.3_1773655145972_0.6216467424786265","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"js-reverse-mcp","version":"1.1.0","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.1.0","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"6fe7463b3ba51b142c6a9d8c1bcdc50254221162","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.1.0.tgz","fileCount":690,"integrity":"sha512-Us5Oswj1mJ8KTe/0LhgR9ACp/XLdTQyrR87OL88QH0bGJr+ziD1tV1MiMPV/jjzFrqZXB0D3tEtEGL7Q9iysMQ==","signatures":[{"sig":"MEYCIQDybmS+XMFky4LEM2HK5t3aeyC/owcnRAmv1l2rDv4z7AIhAId2JSfQyNvtSWX7pW/2kCSBbUF805vMOcYJXgjnml4j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5802322},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"d40fde60c5b58a70e0464630e72a818eeba11d9e","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.1.0_1773677736142_0.27947222140562644","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"js-reverse-mcp","version":"1.1.1","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.1.1","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"883bed5d39c4a8e4693068fd33b89d983c44b575","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.1.1.tgz","fileCount":690,"integrity":"sha512-X7x+vjaWl3SGgYpHA/RSPcnjBcD87yF714KN/KDM2HamhepVCuVO7Po7v9p1W9MOmf+5vBZE2szjh9ZH0RUU1Q==","signatures":[{"sig":"MEYCIQDpxg4HzhTClWUi1IPf/MqXqSYAB7uOqKjFSeumZzHVOwIhAJRvOTNOMFBHcGHX0cYFmoJ/S9221AtiZX8k4+0G9Z62","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5802981},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"0877c0141f9bb6b648a4ef1d8e88a4bb7e25d8a8","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.1.1_1773678480820_0.9045102917358987","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"js-reverse-mcp","version":"1.2.0","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.2.0","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"962d7d3ab2851fca3a6623ee920088917e144bd7","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.2.0.tgz","fileCount":690,"integrity":"sha512-eXxdcS+mC0qKQ5M7mBd0+hyyE0Taqtv/VijT0hvofhxQY67xLbo6TbweRFBoiYEJGx+tXPnVRjMbt1vlJr/PTw==","signatures":[{"sig":"MEYCIQDTYhBCWMkeStBM8LtyUVjJGy51a7Okv3lWknEC15J5fwIhAIDkrsQn5Do31cZY+W9marYvZkwUNMRXZBfRnIRyyz6Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5805215},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"6f4b17e50f7a2bd6b0a75a192809f01030c74c2a","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.1","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.2.0_1773679346301_0.27798868943330013","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"js-reverse-mcp","version":"1.2.1","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.2.1","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"93014a2c32d7c31cf1fd4806eea0ec5c11465191","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.2.1.tgz","fileCount":690,"integrity":"sha512-13QwdOCD6LaRza6y+3AzhvW1h01bTLPBXXo28uEwqPg/MJVdsmEPAXpPUoerdtGnE4B703RhDFKSMjsf6B8CVg==","signatures":[{"sig":"MEUCIQCQSr8MQ8DbNX6KDrYnyNAcANzF72QFmIojl2BrvdIYvwIgaeu2kbQ0BA3/A3g4Bjun9QfSYdmMqSQao9bTx+fTFtY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5810868},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"fb74ebf122cb26b229ebaf8ed5921b1acec0cdb5","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.2","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.2.1_1777023885286_0.48836967886428684","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"js-reverse-mcp","version":"1.3.0","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.3.0","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"80f1f72ff082e51095e40f1d9c8e1a2582de11e7","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.3.0.tgz","fileCount":690,"integrity":"sha512-0VbgFUmaLHAJgPjuukZX/L43cFnTpj46maa+XWLdLlQ6h1soQWAMxvNfgVu8KEC0c39TQPncILoWGyp4ro0iSw==","signatures":[{"sig":"MEYCIQDCU7AzId3Pvpd8Pzew/EAwZ+F1wjdvh9PLefKncdvC/QIhAI2CQDiRcVsAJx1hsIHum82n4LdhzBFZXG2D3l/cPNmO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5802380},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"a3dbdf32f018210c273c317181026860df26f51f","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.2","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","prettier":"^3.6.2","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.3.0_1778120300277_0.31977741522799286","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"js-reverse-mcp","version":"1.3.1","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.3.1","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"09da0a62d2102aa715f749fd3392225ff15b54dd","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.3.1.tgz","fileCount":690,"integrity":"sha512-nNic7zepHtP7oVU6rrhYOYaODFo7VGWB4PtHLbT4IGukEH5qR+pSF2sutDjhWgI5XEJe4fiUhnYFYQLQnfYpkg==","signatures":[{"sig":"MEUCIQCn0wKUcnYJNTq2TYj9a7lmn1JNXL3qIzQyjgd+ONgxBQIgEipXyVzAxfZvGilQBut/8JNUk9WFrQoSJgLGvHV6MA8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5802380},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"e9844ffa62712e4fdd4e439a159418bf1f431757","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.2","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.3.1_1778173789839_0.6135496766936637","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"js-reverse-mcp","version":"1.3.2","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@1.3.2","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"ba957aea9b1f7a20bbaf3d9f1906c2f6a50eecac","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-1.3.2.tgz","fileCount":690,"integrity":"sha512-VVRjcnIlRC7EbUuwgiG/omkdvTh+s29AsEtkAYXLUNJgAYMU5qC6UtRnW+OvJ+3XDZq9eIS8TKXgrny1KaqxNg==","signatures":[{"sig":"MEUCIQC1aVmbuaY1FPdaTwErZdsW+u9k80xelKvMoSzltjYN3gIgYzX3xMDV44fe0FhX/NX3KtkuN78I0XDNKLIUsnbJH24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5802478},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"02f1f75a66e2a44c8fbf900a5efeabd357598c79","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.2","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_1.3.2_1778492402691_0.9027967159031598","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"js-reverse-mcp","version":"2.0.0","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.0.0","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"6fe3fc1d41be74efc0defee48baaaf099af85abf","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.0.0.tgz","fileCount":690,"integrity":"sha512-Q4usToCnP5wRbljpIcXjHpAe7FWGYMbyZuCDR6OkO7a5TqBZv+FCsQ+cY08L/xu9grQGGDijGDyAyQOLCHhcIg==","signatures":[{"sig":"MEUCICjIQeRGJKPwo84Dtxt7gMq0wje1LIocyqki2tUhnH7zAiEAnJn2faVmK2Mgz1fA4SKIiZez2j9mm7OjUidAvg5qZ0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5799000},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"fdfbcd91d1ed3569285f627fa108f9690eb66e60","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.2","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.0.0_1779009656912_0.05383863415791401","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"js-reverse-mcp","version":"2.0.1","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.0.1","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"084579698ceedddaf746d0fe5a2fbfff1b11d383","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.0.1.tgz","fileCount":690,"integrity":"sha512-3T1MmrNjgCdgavU5nYJDW/FORDbQNiJF5MVFIj4lbIRRuJW0sbpk1WZkofCaNhG3hTiNITW4oi+fGQEYg2VPpg==","signatures":[{"sig":"MEUCIF4tzBhdGwoWMCg87Ffmwef2Ao/rPcdD3BsBNL+33EdQAiEAxyDvCICjKxVwo5YtlnxQVNb8yilLGiitzouTDKiGQyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5798688},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"38ede55425fcfeedbbb36462f9b115755a6879a0","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.2","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.0.1_1779010760773_0.5228129808197493","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"js-reverse-mcp","version":"2.0.2","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.0.2","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"2f72e16de8591ffa137a3774a3c427061293eaef","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.0.2.tgz","fileCount":690,"integrity":"sha512-1uCe+VHJI6VA3G4vYzFFWOhiMOCQtxpI+hdx2LJ7YM+EHseBmEKiKNHFq70floeq/8b3LEmrPYtA/el+GH3TiA==","signatures":[{"sig":"MEUCID4it1geCKMqqOiY1cD5OFyLn/PemCrZHlgmfV0gb+i0AiEAlW63Tkj01JmfYHjGbtRGyHqxCCga0N8u5fRQ21Kwo7Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5799317},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"2f93badd656c50f445b9114b87548d095c4e7589","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.2","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.0.2_1779109411818_0.5658654868220991","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"js-reverse-mcp","version":"2.0.4","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.0.4","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"a017f86af2e01140b19a07e2bad6aba27fc33596","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.0.4.tgz","fileCount":690,"integrity":"sha512-CbHCo68iE/kORti1bO3xsDxqdllPZ9I7iGa+GpWjJUmcvsubYHgkmaBKf/2Uc5LtUvbuiEBtvRWoBM+S3mylMA==","signatures":[{"sig":"MEQCIFgtNve2KCirBuf0AmTvTvGjaFXh0LtVztoBI7fMlJ9uAiB0T93byrpukXXBqKo6g4hHKTKX6bDf67ZYaMf0Am/JwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5813582},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"a165816a4a4b99f5d81d4116a66de54176d273b8","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.0.4_1781666041382_0.40512673341056304","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"js-reverse-mcp","version":"2.0.5","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.0.5","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"efb52b22e8fd6307b12887727a3badb08bfb2474","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.0.5.tgz","fileCount":690,"integrity":"sha512-T4mPO4l+IEUdwS8EMGsYyLMXkcBfd4tECqXGjFgJa1RgVSQGjHvE7oJZJVHnQMFbA4q8EHdLxl6BNlIjVsFYNw==","signatures":[{"sig":"MEQCIDacdXUsYIiA4pGkDEY8I1t4ntI5Ms5F/topp0B1+hyGAiBKJHQggCNvOgYSfoDecgI5r/kh7F3R551eXKZNnOzR2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5816064},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"76df7b7861bb4038f3bda1c377d4fd4aeab658de","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.0.5_1781666720280_0.8856205645138728","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"js-reverse-mcp","version":"2.0.6","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.0.6","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"d1fb59381643f91942bdd3ca88a7059368b28a55","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.0.6.tgz","fileCount":690,"integrity":"sha512-AUCE7ZHRXzt+7j68dhTr7bpD5Gbyx7Ip6Jhu/IPQL19WKn8G7gSwWA1mZosJZLz3rNBZui8zy4vz5ZST6qWJ4w==","signatures":[{"sig":"MEUCIQDJ5mU2cQqAxBmCIK88sjy1BTx81Sv4yrigP/EVn7auNQIgFWtJl0I6iUO8gogKcwhwGhRDLs8EsJca1ehT+Q1ZDdA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5816452},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"6d1759d306392799e10d0d720d694fe0eb7ca763","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.0.6_1781667091494_0.29362662906588133","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"js-reverse-mcp","version":"2.1.0","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.1.0","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"f83bc12b81195fa8234a31786cbf03e2e4b65bdd","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.1.0.tgz","fileCount":692,"integrity":"sha512-62KAoiLpVX0uitUzCfDbqho6YoYbaCkmNgIgafJZWGQZ695furnVikWSMAIrGvW2hnUSdagdOnpaGcxC4rohcw==","signatures":[{"sig":"MEUCIQCX2CmX7Oj4XS0eKdJZHLGAtklCX2W8XWjYb0A3PrdOfQIgUrdHBWW6virkFz/14PaQJd0kSvp7cSSZth8M3/rfEDY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5831324},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"df0fa4ca5cc6d156b848533ccff1f85ac0b512c6","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.1.0_1781673759489_0.6804209244852988","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"js-reverse-mcp","version":"2.1.1","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.1.1","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"6de4b9919e80516333e8accdccb563a76ad88cdf","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.1.1.tgz","fileCount":692,"integrity":"sha512-i+aKkFhzijVPKIOBnFPqlWLhnoO0M4JEPnv1ZGytxIIIlZ7xQpzbQqdaL1AKG4BcbE+o9M5m1qgZUfeai59lCg==","signatures":[{"sig":"MEQCIDijZKaQSAnzUttzescuo+SlDnUFv/0ZM463UJAWmPdnAiBbWoSNsaueKglm2mxefKaFyr+yxgKXXDCLrH9u5F0SRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5832590},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"9050f5d8b4a2ba3bd326a4d7405aa4d8f0df9539","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.1.1_1781674045157_0.5663956646651127","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"js-reverse-mcp","version":"2.1.2","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.1.2","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"375d7fd678083d776a306ab4b831786c4231add5","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.1.2.tgz","fileCount":692,"integrity":"sha512-3yPM9AkpjgEX3ilZWGFcid6KyUR8SII/3Yc+UmvBU9lY+GmvDQ3QLjoSzFrCTOFayJjo2p6pqxsH4NB/dvUlAQ==","signatures":[{"sig":"MEUCIQDFTgDuGytVKJ+jAQzkovlCbxeFrLcMfhGN58yrBtIDZQIgKnO23TQetiNqV9X+JwQUXpHa30AnsrNFI9pm7Tm42YU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5840898},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"616eb53c78eb0790137332317cbe7fc45b923aef","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.1.2_1782023685621_0.9219600880369787","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"js-reverse-mcp","version":"2.1.3","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.1.3","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"db1807b1dfb9986e8a4961e9d9fac301bb33dbf2","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.1.3.tgz","fileCount":692,"integrity":"sha512-KQaCVkWdIk0irbS/qejWHp9dgNqTGm+AmVWjNlL0jZ3DhAt8M7xCewVEhPxeXjEt3GqE6PN8e3EKK64WaIRziA==","signatures":[{"sig":"MEYCIQCtX03eWMuEv4W3kPkGlI7R3DM3cvcj7SV+WYfM2pxcmQIhAL8so0LHwfQnNleckJbWi7ZjyTqAYGSK9QIGr20rabOO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5847863},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"859ed3d581d279bd1c47bb541ac3d230712d56d4","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.1.3_1782026848929_0.7566240439674297","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"js-reverse-mcp","version":"2.1.4","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.1.4","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"d289a151fc123be7733af8ed3589856364a87297","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.1.4.tgz","fileCount":692,"integrity":"sha512-IsFkUQQVYM4gRXNx4rI7Ia032RALs7OycwUczXuQq0NBwyZrXmR9ws0Y2p6z7k6byWNai6JSAj7L4j6wO2/m9Q==","signatures":[{"sig":"MEUCIDbx0SUSpKYb8Djf4T18WY0Af1gudCmXX7+0livf7C2dAiEAnXyBoMaupjDaYBb0NolfrNBMYyT8HBhF6elxxvvFmPg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5850940},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"7081e670234d139a3812fe2ec71f61664fdcdb86","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.1.4_1782027148994_0.045429709754224445","host":"s3://npm-registry-packages-npm-production"}},"2.1.5":{"name":"js-reverse-mcp","version":"2.1.5","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.1.5","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"e67856c7940541dc18c2905f8aa95b77531a4790","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.1.5.tgz","fileCount":692,"integrity":"sha512-oAWYCna1YQS0LroVuW49Z876Rf/VW24ShxB+I6s2Bzmi1rbwcEz51IEgtSshVWpJM2aKbItRc3JGt3d96J8AsQ==","signatures":[{"sig":"MEUCIDwRoD+7dnXUDUUt/08/47pSTJDpdqfr+I5EYIXdiTd8AiEAkp5oZTeY1SZ3PptCAyq8hNbgchhiRfTzKuukD9PrDNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5851209},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"3f73b679585dd00c208f83f3886b7567577f3f21","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.1.5_1782029931304_0.7386545130376487","host":"s3://npm-registry-packages-npm-production"}},"2.1.6":{"name":"js-reverse-mcp","version":"2.1.6","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@2.1.6","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"5880d902200114c93b5f7c00cb18ca109b9f53f8","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-2.1.6.tgz","fileCount":692,"integrity":"sha512-XbZQnfgCHS91i/YRWuRsVrcCmC1BcYAAEcV0EYqO3rZUFCpR2X8CElDyCDTG3ejYKQ10lNhKhkynn62xLPNpiA==","signatures":[{"sig":"MEUCIQDpBIbi+/2WkPEQ3wn/PwDkKJkohbugWsFLlGoFpbQwgQIgNapIn0Evm4+kLCJ4cyR55GX0elmU7tzWjA264MGB+K8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5852649},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"630d7b1dc7c2b2d078122682676b0826e5cf4c05","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_2.1.6_1782030475275_0.8672560073677817","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"js-reverse-mcp","version":"3.0.0","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.0","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"2eb97a3dee9d95ea024a7e5a609c92d94ce98ff8","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.0.tgz","fileCount":692,"integrity":"sha512-wlTsS0fx1m4VsRQ7GIfgwVPFNqVt2INICWj4xslI4atR7PJ/JsZjJFC6dGFHwpG9oKIbGjmoQdsLXDuOukKVzQ==","signatures":[{"sig":"MEQCIFG2U4isoo8kHn8H8vyqt4Xrt/vgiPj82gjfYtLtFBSVAiAy+FZdV2hS+8binBniwOgoPK7tc0UWXvoMBXhPD9IvpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5855975},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"06f02a2c9c9e165d13706820b338809ad156d30f","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.22.3","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.0_1782058693670_0.6315657436187239","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"js-reverse-mcp","version":"3.0.1","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.1","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"694da82db1d852e450517718dd94309be2e724cb","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.1.tgz","fileCount":692,"integrity":"sha512-YUa2uVUSbhi/CufMLFBawRgUPN3370V8mM7sbuCZNeiSBA1vyLh0L417F0DKBG3zgUGoivdwOOO1gSpt+sOLWA==","signatures":[{"sig":"MEUCIHRYLJJ4ehtW4p54m85mQjQH90d6GbNJMsojdlROeoEoAiEA7FJHSvbwx7Jf82khQgPNAT0TNV0MTYF9MCXKHy6XvCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5864372},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"1f79109e52df8cf9eedb347e133524768ba447c0","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.1_1782492034769_0.44179390294787235","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"js-reverse-mcp","version":"3.0.2","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.2","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"eedb6dbf58726e1c17a4727d45599e00fd89570b","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.2.tgz","fileCount":692,"integrity":"sha512-JkKH2fliQzyRUbk4BGbtf9LuO0qShwWeXpVI93giBlO6A1CBW6tvCVmBfTbJLpVkMwiY9Uo9G+HFr/FRPSEaGg==","signatures":[{"sig":"MEUCIFV2u6VB/R9cM5gdXCDQfXqbHyTTwBzBBrsaKmY+4rKpAiEAgmPULKEG6qjBBVwYmJ2gb0t0jKyOI24muy5Nqp5PIYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5865901},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"06da0f8d37af4fc4298ab1f6dea4ae01317eb300","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.2_1782494044132_0.21338344257066844","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"js-reverse-mcp","version":"3.0.3","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.3","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"7c5b20dede59eb8bf9823ad744fba7955166e350","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.3.tgz","fileCount":692,"integrity":"sha512-PRpJACwiUP5GgZmp35vuWw3NOP+K1mhbRIcqgfhJLuGMbvPI9K2Wflf1kypumrP601j0R6+JTeGluJ/4Unwc7A==","signatures":[{"sig":"MEYCIQD8ASdcPIF3475EEz2aqjhOqXbWy7AtnRrkmBy3y4DfagIhAP5Uvmxl2gkhPFYce3TbaWPyl5nrCTyI2ZWiJM8Qj9Xy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5870585},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"17dd163e82677fbcc054d5e5da6930d561df6a61","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.3_1782495201924_0.34803791054887334","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"js-reverse-mcp","version":"3.0.4","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.4","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"da03041bec13e8fd42bd1d5770892d79c6c693b5","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.4.tgz","fileCount":692,"integrity":"sha512-mXCuncVjVYugSj/NHghpDNOSCwgslsdPkJJO5xdrTiAFq5aUPYkfDuAuz5lCzd00dnRa3Llbso9qNAS+kOBBEA==","signatures":[{"sig":"MEYCIQC9PhyHzPcBhCA9nVKEARpMkbGqihEYPQnv8+Mo4L2IgQIhAKqHB/lp7sw3SSgDv8ypGMCafmaS20UAk0i3MWFenlst","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5872297},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"81260bb7e51281a22fe337c07f90e7ebd2dc7e8d","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.4_1782496142662_0.6598529899224221","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"js-reverse-mcp","version":"3.0.5","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.5","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"df25a7ba69f9d447a2b00fa493fef904fb07ddc3","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.5.tgz","fileCount":692,"integrity":"sha512-sOjn21iiPrzQhBqs8tvX++QwdKK18uh3OLCgrwPgu1rtD16qhgEdomKhpM9RURC/kgB50Ru+xY1+r9ok8YvhnQ==","signatures":[{"sig":"MEUCIQCtQUNSGV3N9f++L7dsu3TEQ4DKvaGI7HxdORjjJoyrOAIgLYNfnuQuQ9iqc2QsPT/WGpqU8pANKdeVXWj0aAKpM5A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5872584},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"a6894f67978414345ac15cae86359e2136f3729f","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.5_1782496575038_0.9600436918858826","host":"s3://npm-registry-packages-npm-production"}},"3.0.6":{"name":"js-reverse-mcp","version":"3.0.6","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.6","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"bcfc818121910bede9b826a263784660bf9dd913","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.6.tgz","fileCount":692,"integrity":"sha512-x4kQ8C0f4EXLgeVRin72b8ywD+tyzArZnAuU+kia+PQMyT9imy7OPDZqyycakhdHQxfUk5TzRte8Wuvtwn28uA==","signatures":[{"sig":"MEQCICG8+2rjfwitdHJc6DxYkSIcpEE5o2Ra2dtfBMcw3e3QAiAHZmPthg+SiR7BfL/jYQU6752bu09fm7fMr770QCzkTg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5874103},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"9eed0a05bb0730114489ad35fa98383763e495b2","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.6_1782709033754_0.36907250586211315","host":"s3://npm-registry-packages-npm-production"}},"3.0.7":{"name":"js-reverse-mcp","version":"3.0.7","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.7","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"99fa204a14e5c396e4d229efe9994fb8b9a54473","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.7.tgz","fileCount":692,"integrity":"sha512-9sSoR/hwMU4OkrecdcbsJONYG4uiPZG38Q4EuHLg+7T53ioo6b+pqt9XO8uJWBI9eIYwBE53/Flle3nPvEZWvg==","signatures":[{"sig":"MEQCIGpaJgxJkfdLGOuqP11u9wVsbkzM4eKFAOmnZlmjiJiDAiAUrTeP4+4ROkzZcBUx/BUiS5tF6oRLCd0AB31AUWKVaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5874086},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"25894a38d6e75afcd0c1ad7fc83d30f449984755","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.7_1782717312815_0.8835234901675826","host":"s3://npm-registry-packages-npm-production"}},"3.0.8":{"name":"js-reverse-mcp","version":"3.0.8","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.8","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"3fbcce41f9191d6c5964aa3fb67c21fd13f037ee","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.8.tgz","fileCount":692,"integrity":"sha512-RR3kMopbLt1dfxGfqsid13jb8NeqcQmymtHm4oDjy83iKiIM2DAYbkUhDwbj0pbLsxzvj5QMWdHIPF/bIYhFQA==","signatures":[{"sig":"MEYCIQDzCsAt38JxEwI/+aE7ALqnV8QfB4Tu9In56Gq5zF5W+AIhAKNEl7XoBI3Q5Qw58Q484rxaHjBHGlyBpwLPql+BQz4Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5884230},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"8ee0c6785a24f35401b5f30a1b7ef15eb9f3b0ea","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.1","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.8_1782894071120_0.5009998644817373","host":"s3://npm-registry-packages-npm-production"}},"3.0.9":{"name":"js-reverse-mcp","version":"3.0.9","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@3.0.9","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"7b6630f0f046e844878e11f7f0acb4299a4852fc","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-3.0.9.tgz","fileCount":692,"integrity":"sha512-EDJhAJM/vLR+h/NgXL/EoETuq1UQMUxuRiltr4gLxIgC2qbRVjaHJRRtKHgb3p0n8y8rKD9u5U0vCNdY5Eyq1w==","signatures":[{"sig":"MEUCIDZbJsxuK7HpIwu84+OJfhX2EcaCHDBfPwejMG6oEsuOAiEAwphhfq4WLRlwZArSAwMmu68DAy/AWuxkwoy/8bHI+mg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5884746},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"0e19693f496b4600dbc9381e76293d7afa96c001","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test \"build/tests/**/*.test.js\"","build":"tsc && node --experimental-strip-types --no-warnings=ExperimentalWarning scripts/post-build.ts","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","bundle":"npm run clean && npm run build && rollup -c rollup.config.mjs","format":"eslint --cache --fix . && prettier --write --cache .","prepare":"node --experimental-strip-types scripts/prepare.ts","test:only":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","typecheck":"tsc --noEmit","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test:node20":"node --require ./build/tests/setup.js --test-reporter spec --test-force-exit --test build/tests","check-format":"eslint --cache . && prettier --check --cache .;","docs:generate":"node --experimental-strip-types scripts/generate-docs.ts","test:only:no-build":"node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-reporter spec --test-force-exit --test --test-only \"build/tests/**/*.test.js\"","test:update-snapshots":"npm run build && node --require ./build/tests/setup.js --no-warnings=ExperimentalWarning --test-force-exit --test --test-update-snapshots \"build/tests/**/*.test.js\"","verify-server-json-version":"node --experimental-strip-types scripts/verify-server-json-version.ts"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.0","dependencies":{"debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.21.1"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","rollup":"4.53.3","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@types/filesystem":"^0.0.36","typescript-eslint":"^8.43.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-import":"^2.32.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-license":"^3.6.0","@rollup/plugin-commonjs":"^29.0.0","@stylistic/eslint-plugin":"^5.4.0","chrome-devtools-frontend":"1.0.1547571","@typescript-eslint/parser":"^8.43.0","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.3.28"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_3.0.9_1782896992442_0.449676366095515","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"js-reverse-mcp","version":"4.0.0","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@4.0.0","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"e044af6fa527060a82f30d4ea98413a4bf6d4044","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-4.0.0.tgz","fileCount":43,"integrity":"sha512-G9FnO+y1GF5L1HQluaCFPJz4wmwgM2737ADa+1pLR7+pz43yxjSxzBjkxefE93NjPQvsBudJIZd3ImUWmgvnHg==","signatures":[{"sig":"MEUCICIEC3VOU8UOQuJUm4BhbDjzms5HF7zhEzMlasOs02D7AiEAsUdBcr1j3tAuMSQD0J6t+Qx6Yo/FVjEdebBChRGQQGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":423602},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"efb521f7ee66b780e6c1b1c67999903650168a68","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && npm run test:run","build":"npm run clean && tsc","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","format":"eslint --cache --fix . && prettier --write --cache .","test:run":"node build/scripts/run-tests.js","presubmit":"npm run typecheck && npm run check-format && npm test && npm run docs:check && npm run audit:prod && npm pack --dry-run","test:only":"npm run build && npm run test:run -- --test-only","typecheck":"tsc --noEmit","audit:prod":"npm audit --omit=dev --audit-level=high","docs:check":"npm run build && node build/scripts/generate-docs.js --check","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","check-format":"eslint --cache . && prettier --check --cache .","docs:generate":"node build/scripts/generate-docs.js","prepublishOnly":"npm run presubmit","test:only:no-build":"npm run test:run -- --test-only","test:update-snapshots":"npm run build && npm run test:run -- --test-update-snapshots"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"overrides":{"tar":"7.5.19"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","typescript-eslint":"^8.43.0","eslint-plugin-import":"^2.32.0","@stylistic/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.4.10"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_4.0.0_1783666818353_0.24263574697974244","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"js-reverse-mcp","version":"4.0.1","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@4.0.1","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"672fc553a06c6840becb9b383ae5ff5848c334f8","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-4.0.1.tgz","fileCount":43,"integrity":"sha512-PmEiKI69PTneIjzjTCw737GX0cLSG5T5Yk4C+zJvh72o+JEnsepDgCief8LtglH+T8K4cS2h6ra/bUTz1FtuBQ==","signatures":[{"sig":"MEUCIA7lhGI9DJU7w3XaPNYM4s4UJeY/MB18eNwi4C4TxkckAiEA2EjJKZOlqYXr3ua+pbgMNQag/izDed7uUgVOz146qGc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440563},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"a850f3e6b81a5c566c06f41155f3607785445b90","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && npm run test:run","build":"npm run clean && tsc","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","format":"eslint --cache --fix . && prettier --write --cache .","test:run":"node build/scripts/run-tests.js","presubmit":"npm run typecheck && npm run check-format && npm test && npm run eval:routing:validate && npm run docs:check && npm run audit:prod && npm pack --dry-run","test:only":"npm run build && npm run test:run -- --test-only","typecheck":"tsc --noEmit","audit:prod":"npm audit --omit=dev --audit-level=high","docs:check":"npm run build && node build/scripts/generate-docs.js --check","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","check-format":"eslint --cache . && prettier --check --cache .","eval:routing":"npm run build && node build/scripts/evaluate-tool-routing.js --live","docs:generate":"node build/scripts/generate-docs.js","prepublishOnly":"npm run presubmit","test:only:no-build":"npm run test:run -- --test-only","eval:routing:validate":"npm run build && node build/scripts/evaluate-tool-routing.js --validate-only","test:update-snapshots":"npm run build && npm run test:run -- --test-update-snapshots"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"overrides":{"tar":"7.5.19"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","patchright":"^1.51.1","devtools-protocol":"^0.0.1425554","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","typescript-eslint":"^8.43.0","eslint-plugin-import":"^2.32.0","@stylistic/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.4.10"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_4.0.1_1783678525058_0.5020309682255555","host":"s3://npm-registry-packages-npm-production"}},"4.0.2":{"name":"js-reverse-mcp","version":"4.0.2","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@4.0.2","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"0f6c02d8e868786550cd92ec9e03cd2eab12c569","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-4.0.2.tgz","fileCount":43,"integrity":"sha512-eqXMT5TNmNiey66ks7hRLKNutIBgvlK2pU8bB7DoTkkU3JYfzMZBvBzEbs+qsQtZCyYlIP3Q7bYdT0o1Y/Hw0A==","signatures":[{"sig":"MEUCIB7gXZYs6aE2Pcpye47PgZywcQ7TNFI51TlP926BowltAiEAjUld8y8NBK24aPvocMdPb8X3wOKr6IdG9aaIEocOuSI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440739},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"e6e13c82512cb9d7116ad9adc6b8cbfe53f64b12","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && npm run test:run","build":"npm run clean && tsc","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","format":"eslint --cache --fix . && prettier --write --cache .","test:run":"node build/scripts/run-tests.js","presubmit":"npm run typecheck && npm run check-format && npm test && npm run eval:routing:validate && npm run docs:check && npm run audit:prod && npm pack --dry-run","test:only":"npm run build && npm run test:run -- --test-only","typecheck":"tsc --noEmit","audit:prod":"npm audit --omit=dev --audit-level=high","docs:check":"npm run build && node build/scripts/generate-docs.js --check","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","check-format":"eslint --cache . && prettier --check --cache .","eval:routing":"npm run build && node build/scripts/evaluate-tool-routing.js --live","docs:generate":"node build/scripts/generate-docs.js","prepublishOnly":"npm run presubmit","test:only:no-build":"npm run test:run -- --test-only","eval:routing:validate":"npm run build && node build/scripts/evaluate-tool-routing.js --validate-only","test:update-snapshots":"npm run build && npm run test:run -- --test-update-snapshots"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"overrides":{"tar":"7.5.19"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","devtools-protocol":"^0.0.1425554","@zhizhuodemao/patchright":"1.61.1-mcp.1","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","typescript-eslint":"^8.43.0","eslint-plugin-import":"^2.32.0","@stylistic/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.4.10"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_4.0.2_1787212124046_0.0998180025281421","host":"s3://npm-registry-packages-npm-production"}},"4.0.3":{"name":"js-reverse-mcp","version":"4.0.3","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","_id":"js-reverse-mcp@4.0.3","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"bin":{"js-reverse-mcp":"build/src/index.js"},"dist":{"shasum":"19323cf857bbb93e8d2e2271888c83c63b4ec2e7","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-4.0.3.tgz","fileCount":43,"integrity":"sha512-FVyrup/3v5COt1P4slilR0vbimtAWn2VJFhROGkza6jSOfu+MTqv+R/P4t1YypEd2hI03HPPeDL5759RljhxjQ==","signatures":[{"sig":"MEUCIEgpR24Jm3ZPU8wIfXmmAMQP49ikAqGys68rIxqBX3zMAiEAx/+DfSLNY8qkQH7TJHJX3jtHAOJdY0T6NbaBm4/eBnw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":441995},"main":"build/src/index.js","type":"module","engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"gitHead":"dad4a00e2ba68fcb6a7d0994afbf12efd82f5a54","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","scripts":{"docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","test":"npm run build && npm run test:run","build":"npm run clean && tsc","clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","start":"npm run build && node build/src/index.js","format":"eslint --cache --fix . && prettier --write --cache .","test:run":"node build/scripts/run-tests.js","presubmit":"npm run typecheck && npm run check-format && npm test && npm run eval:routing:validate && npm run docs:check && npm run audit:prod && npm pack --dry-run","test:only":"npm run build && npm run test:run -- --test-only","typecheck":"tsc --noEmit","audit:prod":"npm audit --omit=dev --audit-level=high","docs:check":"npm run build && node build/scripts/generate-docs.js --check","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","check-format":"eslint --cache . && prettier --check --cache .","eval:routing":"npm run build && node build/scripts/evaluate-tool-routing.js --live","docs:generate":"node build/scripts/generate-docs.js","prepublishOnly":"npm run presubmit","test:only:no-build":"npm run test:run -- --test-only","eval:routing:validate":"npm run build && node build/scripts/evaluate-tool-routing.js --validate-only","test:update-snapshots":"npm run build && npm run test:run -- --test-update-snapshots"},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"overrides":{"tar":"7.5.22"},"repository":{"url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","debug":"4.4.3","yargs":"18.0.0","core-js":"3.47.0","prettier":"^3.6.2","devtools-protocol":"^0.0.1425554","@zhizhuodemao/patchright":"1.61.1-mcp.2","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^21.0.0","eslint":"^9.35.0","globals":"^16.4.0","@eslint/js":"^9.35.0","typescript":"^5.9.2","@types/node":"^24.3.3","@types/debug":"^4.1.12","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","typescript-eslint":"^8.43.0","eslint-plugin-import":"^2.32.0","@stylistic/eslint-plugin":"^5.4.0","@typescript-eslint/parser":"^8.43.0","@typescript-eslint/eslint-plugin":"^8.43.0","eslint-import-resolver-typescript":"^4.4.4"},"optionalDependencies":{"cloakbrowser":"^0.4.10"},"_npmOperationalInternal":{"tmp":"tmp/js-reverse-mcp_4.0.3_1787219808488_0.4110463100730668","host":"s3://npm-registry-packages-npm-production"}},"4.0.5":{"name":"js-reverse-mcp","version":"4.0.5","description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"type":"module","bin":{"js-reverse-mcp":"build/src/index.js"},"main":"build/src/index.js","scripts":{"clean":"node -e \"require('fs').rmSync('build', {recursive: true, force: true})\"","build":"npm run clean && tsc","typecheck":"tsc --noEmit","format":"eslint --cache --fix . && prettier --write --cache .","check-format":"eslint --cache . && prettier --check --cache .","docs":"npm run build && npm run docs:generate && prettier --write --cache docs/","docs:generate":"node build/scripts/generate-docs.js","docs:check":"npm run build && node build/scripts/generate-docs.js --check","eval:routing":"npm run build && node build/scripts/evaluate-tool-routing.js --live","eval:routing:validate":"npm run build && node build/scripts/evaluate-tool-routing.js --validate-only","audit:prod":"npm audit --omit=dev --audit-level=high","start":"npm run build && node build/src/index.js","start-debug":"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/index.js","test":"npm run build && npm run test:run","test:run":"node build/scripts/run-tests.js","test:only":"npm run build && npm run test:run -- --test-only","test:only:no-build":"npm run test:run -- --test-only","test:update-snapshots":"npm run build && npm run test:run -- --test-update-snapshots","presubmit":"npm run typecheck && npm run check-format && npm test && npm run eval:routing:validate && npm run docs:check && npm run audit:prod && npm pack --dry-run","prepublishOnly":"npm run presubmit"},"repository":{"type":"git","url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git"},"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","mcpName":"io.github.zhizhuodemao/js-reverse-mcp","devDependencies":{"@eslint/js":"^9.35.0","@stylistic/eslint-plugin":"^5.4.0","@types/debug":"^4.1.12","@types/node":"^24.3.3","@types/sinon":"^21.0.0","@types/yargs":"^17.0.33","@typescript-eslint/eslint-plugin":"^8.43.0","@typescript-eslint/parser":"^8.43.0","eslint":"^9.35.0","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-import":"^2.32.0","globals":"^16.4.0","sinon":"^21.0.0","typescript":"^5.9.2","typescript-eslint":"^8.43.0"},"dependencies":{"@modelcontextprotocol/sdk":"1.29.0","@zhizhuodemao/patchright":"1.61.1-mcp.2","core-js":"3.47.0","debug":"4.4.3","devtools-protocol":"^0.0.1425554","prettier":"^3.6.2","yargs":"18.0.0","zod":"^4.4.3"},"optionalDependencies":{"cloakbrowser":"^0.4.10"},"overrides":{"tar":"7.5.22"},"engines":{"node":"^20.19.0 || ^22.12.0 || >=23"},"_id":"js-reverse-mcp@4.0.5","gitHead":"bf7dc506e8743ba1ec5bd3325c91818b9192e40e","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-T69/SwCu8ew6VD/+BfChEUD2Gy1edsudyl4oo5rOCj3o227nbKGXhTBTzmkfwjxn1q/ytOZ86LKra0IrOFTT7A==","shasum":"bc9e814412c044615797bc40d2031841e47df42f","tarball":"https://registry.npmjs.org/js-reverse-mcp/-/js-reverse-mcp-4.0.5.tgz","fileCount":43,"unpackedSize":443338,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDL41BegMul/47HWpd/dQ8gQamg2oEO6w68CCYw98jfvgIhANRU2nynR+PJYAC9udurf7PIgr3kkOiz1Iw3Ptv7jp7j"}]},"_npmUser":{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"},"directories":{},"maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/js-reverse-mcp_4.0.5_1788436008803_0.17538653497829482"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-15T07:37:33.281Z","modified":"2026-09-03T11:46:49.102Z","1.0.0":"2026-03-15T07:37:33.514Z","1.0.1":"2026-03-15T08:23:01.480Z","1.0.2":"2026-03-16T09:50:58.793Z","1.0.3":"2026-03-16T09:59:06.163Z","1.1.0":"2026-03-16T16:15:36.396Z","1.1.1":"2026-03-16T16:28:01.079Z","1.2.0":"2026-03-16T16:42:26.500Z","1.2.1":"2026-04-24T09:44:45.519Z","1.3.0":"2026-05-07T02:18:20.586Z","1.3.1":"2026-05-07T17:09:50.068Z","1.3.2":"2026-05-11T09:40:02.876Z","2.0.0":"2026-05-17T09:20:57.109Z","2.0.1":"2026-05-17T09:39:20.974Z","2.0.2":"2026-05-18T13:03:32.086Z","2.0.4":"2026-06-17T03:14:01.587Z","2.0.5":"2026-06-17T03:25:20.490Z","2.0.6":"2026-06-17T03:31:31.690Z","2.1.0":"2026-06-17T05:22:39.728Z","2.1.1":"2026-06-17T05:27:25.377Z","2.1.2":"2026-06-21T06:34:45.811Z","2.1.3":"2026-06-21T07:27:29.148Z","2.1.4":"2026-06-21T07:32:29.167Z","2.1.5":"2026-06-21T08:18:51.482Z","2.1.6":"2026-06-21T08:27:55.455Z","3.0.0":"2026-06-21T16:18:14.213Z","3.0.1":"2026-06-26T16:40:34.959Z","3.0.2":"2026-06-26T17:14:04.365Z","3.0.3":"2026-06-26T17:33:22.134Z","3.0.4":"2026-06-26T17:49:02.851Z","3.0.5":"2026-06-26T17:56:15.271Z","3.0.6":"2026-06-29T04:57:13.933Z","3.0.7":"2026-06-29T07:15:13.028Z","3.0.8":"2026-07-01T08:21:11.358Z","3.0.9":"2026-07-01T09:09:52.596Z","4.0.0":"2026-07-10T07:00:18.524Z","4.0.1":"2026-07-10T10:15:25.229Z","4.0.2":"2026-08-20T07:48:44.204Z","4.0.3":"2026-08-20T09:56:48.638Z","4.0.5":"2026-09-03T11:46:48.943Z"},"bugs":{"url":"https://github.com/zhizhuodemao/js-reverse-mcp/issues"},"author":{"name":"zhizhuodemao"},"license":"Apache-2.0","homepage":"https://github.com/zhizhuodemao/js-reverse-mcp#readme","keywords":["mcp","mcp-server","javascript","reverse-engineering","devtools","debugging","anti-detection","stealth","patchright","chrome","cdp","ai-agent","js-reverse"],"repository":{"type":"git","url":"git+https://github.com/zhizhuodemao/js-reverse-mcp.git"},"description":"JS reverse engineering MCP server with agent-first tool design and built-in anti-detection. 为 AI Agent 设计的 JS 逆向 MCP Server，内置反检测。","maintainers":[{"name":"zhizhuodemao","email":"vmbmvbv@qq.com"}],"readme":"# JS Reverse MCP\n\n[English](README_en.md) | 中文\n\nAI-first / AI-native 的 JavaScript 逆向工程 MCP Server，让你的 AI 编码助手（如 Claude、Cursor、Copilot）能够像分析师一样持续调试、定位、保存和复盘网页中的 JavaScript 行为。\n\n它不是把 Chrome DevTools API 原样搬给模型，而是把脚本、断点、网络、WebSocket、浏览器状态和本地文件 I/O 重新组织成适合 AI Agent 连续推理和操作的工具。反检测是其中一部分能力：默认使用为本 MCP 重新编译发布、独立维护的 [Patchright fork](https://github.com/zhizhuodemao/patchright-mcp) 提供协议层 stealth，对强反爬站点可选启用 [CloakBrowser](https://github.com/CloakHQ/CloakBrowser) 源码层指纹模式。\n\n## ☁️ 赞助 · Sponsored by IPWO\n\n<p align=\"center\">\n  <a href=\"https://www.ipwo.net/?ref=githubmcp\">\n    <img src=\"images/ipwo-residential-proxy.png\" alt=\"IPWO 住宅代理：稳定连接、全球节点、多协议支持\" width=\"100%\">\n  </a>\n</p>\n\nIPWO 住宅代理支持灵活的代理配置，开发者可以根据不同任务选择相应的网络环境，用于网页访问、请求测试、地区化内容分析及自动化工作流。\n\n对于涉及 JS 逆向、浏览器调试和 Web 网络分析的项目，住宅代理也可以作为网络环境的一种补充选择，帮助开发者更灵活地满足不同地区的访问与测试需求。\n\n👉 [免费测试入口](https://www.ipwo.net/?ref=githubmcp)，9 折优惠码：`0204`\n\n## ☁️ 赞助 · Sponsored by Infistar.cc 无限星河\n\n<p align=\"center\">\n  <a href=\"https://www.infistar.cc/register?aff=JJXMRC86&amp;ref_source=link\">\n    <img src=\"images/infistar-model-api.png\" alt=\"Infistar.cc 无限星河：一站式全球大模型 API 服务平台\" width=\"100%\">\n  </a>\n</p>\n\n**js-reverse-mcp × Infistar.cc 无限星河｜全模型 API · 稳定驱动 AI 辅助调试**\n\n感谢 Infistar.cc 无限星河赞助并为 js-reverse-mcp 提供模型服务支持！\n\n- ⚡ **稳定承载复杂调试任务**：提供企业级高并发通道与多节点冗余，价格低至官方渠道 1 折，减少限流、429 和长任务断连问题。\n- 🧠 **一个 API Key 接入主流模型**：支持 ChatGPT、Claude、Gemini、Kimi、GLM、DeepSeek 等模型，适配 Claude Code、Codex、Cursor 等 AI 编程工具。\n- 🔎 **助力授权调试与安全研究**：适用于脚本检索、断点分析、网络请求追踪、调用栈检查和代码逻辑理解等多步骤任务。\n- 📦 **项目用户专属福利**：通过 [专属推广链接](https://www.infistar.cc/register?aff=JJXMRC86&ref_source=link) 注册并完成首次调用，即可领取 5 美元等值测试额度 / 首充专属优惠。\n\n定位：Claude Code / Codex 模型 API 配置支持。\n\n## 功能特点\n\n- **AI-native 工具设计**：工具粒度、输出边界和错误提示都围绕 Agent 决策设计，避免把模型推向无效下一步\n- **可复盘工作流**：脚本源码、网络原始数据、二进制结果都能导出到本地文件，再作为后续分析输入\n- **断点上下文执行**：暂停时可直接在 call frame 中求值，检查作用域变量，单步执行并返回源码上下文\n- **脚本分析**：列出所有加载的 JS，搜索代码，获取/保存源码，自动格式化大型压缩脚本\n- **网络与 WebSocket 分析**：请求调用栈、XHR 断点、Set-Cookie 识别、原始 body/header 导出、WebSocket 消息分组\n- **浏览器状态重放**：清理当前站点 cookies / cache / storage / sessionStorage，配合 reload 复现 cookie 和风控流程\n- **默认有头 + 持久化登录态**：看得到浏览器，cookies / localStorage 跨会话保留\n- **专用 Patchright 内核**：默认依赖本项目独立维护的 Patchright fork，持续修复上游已知的共享实现特征\n- **可选反检测层**：专用 Patchright 协议层 stealth 默认启用；强反爬站点可加 `--cloak` 使用 CloakBrowser 二进制\n\n## 专用 Patchright fork\n\njs-reverse-mcp 不再直接依赖 Patchright 的大众发行包，而是使用专门为本 MCP 编译发布的 [`@zhizhuodemao/patchright`](https://www.npmjs.com/package/@zhizhuodemao/patchright)。这个 fork 会在独立仓库持续维护，并随本 MCP 的实际检测样本演进。\n\n- 不再直接依赖 Patchright 大众发行包\n- 针对已确认的上游共享实现特征进行协议层调整并重新编译发布\n- 反检测调整不依赖页面级 JS 注入\n- 保留 evaluate、locator 和页面控制等原始能力\n- fork 在面向本 MCP 的专用仓库中持续维护\n\n公开文档仅说明设计边界，不展开内部检测样本与实现细节。专用 fork 的目标是减少已确认的共享实现特征，而不是承诺浏览器自动化绝对不可检测。\n\n## 系统要求\n\n- [Node.js](https://nodejs.org/) v20.19 或更新版本\n- [Chrome](https://www.google.com/chrome/) 稳定版\n\n## 快速开始（npx）\n\n无需安装，直接在 MCP 客户端配置中添加：\n\n```json\n{\n  \"mcpServers\": {\n    \"js-reverse\": {\n      \"command\": \"npx\",\n      \"args\": [\"js-reverse-mcp\"]\n    }\n  }\n}\n```\n\n### Claude Code\n\n```bash\nclaude mcp add js-reverse npx js-reverse-mcp\n```\n\n如果你还没有可用的模型 API，或者需要配置自定义 API 地址，可以参考：[Claude Code / Codex 第三方模型 API 配置教程](docs/model-api-setup.md)。\n\n### Codex\n\n```bash\ncodex mcp add js-reverse -- npx js-reverse-mcp\n```\n\n如果你还没有可用的模型 API，或者需要配置自定义 API 地址，可以参考：[Claude Code / Codex 第三方模型 API 配置教程](docs/model-api-setup.md)。\n\n### Cursor\n\n进入 `Cursor Settings` -> `MCP` -> `New MCP Server`，使用上面的配置。\n\n### VS Code Copilot\n\n```bash\ncode --add-mcp '{\"name\":\"js-reverse\",\"command\":\"npx\",\"args\":[\"js-reverse-mcp\"]}'\n```\n\n## 本地安装（可选）\n\n```bash\ngit clone https://github.com/zhizhuodemao/js-reverse-mcp.git\ncd js-reverse-mcp\nnpm install\nnpm run build\n```\n\n然后在 MCP 配置中使用本地路径：\n\n```json\n{\n  \"mcpServers\": {\n    \"js-reverse\": {\n      \"command\": \"node\",\n      \"args\": [\"/你的路径/js-reverse-mcp/build/src/index.js\"]\n    }\n  }\n}\n```\n\n## AI-first 设计\n\n这个项目的核心目标不是“能操作浏览器”，而是让 AI Agent 能稳定完成一轮真实 JS 逆向任务：打开页面、过风控、定位脚本、保存源码、设置断点、触发行为、检查运行时、导出网络材料、复现状态，然后继续推理。\n\n几个设计取向贯穿在代码里：\n\n- **工具是 Agent primitives，不是 DevTools 菜单映射**：`list_network_requests` 既能列索引，也能按 `reqid` 查详情，还能用 `outputFile` 导出精确材料；`evaluate_script` 既能在页面执行，也能在断点 call frame 执行，还能接收 `localFilePath` 输入。\n- **输出要能指导下一步**：列表输出保持短而可扫描；详情输出有边界；长结果提示导出；pending 请求会明确提示先恢复执行，避免 Agent 等一个永远不会完成的 response。\n- **本地文件是分析工作台**：`save_script_source`、`list_network_requests(..., outputFile)`、`evaluate_script(..., localFilePath)` 让 Agent 能在浏览器、网络和本地文件之间往返，而不是把大段代码或二进制数据塞进聊天上下文。\n- **状态可清理、流程可重放**：默认 profile 保留登录态；`--isolated` 提供一次性干净环境；`clear_site_data` 只清当前站点相关状态，用来反复复现 cookie 生成、风控初始化和请求链路。\n- **反检测服务于调试链路**：CDP 静默导航、真实视口、Google referer、专用 Patchright fork 和 CloakBrowser 的目标都是让 Agent 能进入目标页面继续分析，而不是把项目变成一个泛用爬虫框架。\n\n## 反检测机制（支撑能力）\n\n反检测是 js-reverse-mcp 的底层支撑能力之一。包装层（这个 MCP 自己）**零 JS 注入**、不做 `Object.defineProperty` hack（那本身就是检测信号）。所有反检测都在两个互不重叠的层：\n\n| 层                             | 默认模式                                                                                                                                              | `--cloak` 模式                                                                                                                    |\n| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| **协议层**（CDP）              | 专用 Patchright fork：不调 `Runtime.enable` / `Console.enable`，在 isolated world 里执行 evaluate，移除自动化 launch flag，并持续修复已知共享实现特征 | 同                                                                                                                                |\n| **源码层**（C++ 二进制 patch） | 无 —— 直接用系统 Google Chrome                                                                                                                        | CloakBrowser 二进制（按平台提供源码层指纹 patch，覆盖 `navigator.webdriver`、canvas、WebGL、audio、GPU、字体、屏幕、WebRTC、TLS） |\n| **Profile 目录**               | `~/.cache/chrome-devtools-mcp/chrome-profile`（持久化登录态）                                                                                         | `~/.cache/chrome-devtools-mcp/cloak-profile`（与默认物理隔离）                                                                    |\n| **实际浏览器**                 | 你装的 Google Chrome（带 Web Store、扩展、sync）                                                                                                      | 定制 Chromium 编译版（无 Google 服务、无 Web Store）                                                                              |\n\n另外几个导航级措施（两种模式都生效）：\n\n- **CDP 静默导航** —— 页面加载时不激活 `Network.enable` / `Debugger.enable`，请求/控制台收集只走 Playwright 监听器，直到某个工具显式需要 CDP 才激活\n- **Google Referer** —— `new_page` 默认带 `referer: https://www.google.com/`\n- **真实视口** —— 关掉 Playwright 默认的 1280×720 假视口，浏览器展示真实屏幕尺寸\n\n**何时开 `--cloak`**：只在以上还不够、被站点指纹拦截时才用。详见 [docs/cloak.md](docs/cloak.md)。\n\n## 工具列表（24 个）\n\n### 页面与导航\n\n| 工具              | 描述                                       |\n| ----------------- | ------------------------------------------ |\n| `select_page`     | 列出打开的页面，或按索引选择调试上下文     |\n| `new_page`        | 创建新页面并导航到 URL                     |\n| `navigate_page`   | 导航、后退、前进或刷新页面                 |\n| `select_frame`    | 列出所有 frame（iframe），或选择执行上下文 |\n| `click_element`   | 严格匹配并点击当前 frame 中的单个可见元素  |\n| `take_screenshot` | 截取页面截图                               |\n\n### 脚本分析\n\n| 工具                 | 描述                                                   |\n| -------------------- | ------------------------------------------------------ |\n| `list_scripts`       | 列出页面中所有加载的 JavaScript 脚本                   |\n| `get_script_source`  | 获取脚本源码片段，支持行范围或字符偏移                 |\n| `save_script_source` | 保存完整脚本源码到本地文件（适用于大型/压缩/WASM文件） |\n| `search_in_sources`  | 在所有脚本中搜索字符串或正则表达式                     |\n\n### 断点与执行控制\n\n| 工具                     | 描述                                            |\n| ------------------------ | ----------------------------------------------- |\n| `set_breakpoint_on_text` | 通过搜索代码文本自动设置断点（适用于压缩代码）  |\n| `break_on_xhr`           | 按 URL 模式设置 XHR/Fetch 断点                  |\n| `remove_breakpoint`      | 用显式 action 按 ID、URL 或全部移除断点         |\n| `list_breakpoints`       | 列出所有活动断点                                |\n| `get_paused_info`        | 获取暂停状态、调用栈和作用域变量                |\n| `pause_or_resume`        | 用显式 action 暂停或恢复执行                    |\n| `step`                   | 单步调试（over/into/out），返回位置和源码上下文 |\n\n### 网络与 WebSocket\n\n| 工具                     | 描述                                                        |\n| ------------------------ | ----------------------------------------------------------- |\n| `list_network_requests`  | 列出网络请求、查看详情，或导出 header/body/query 等原始材料 |\n| `clear_network_requests` | 显式确认后清空当前页面已收集的请求和 body cache             |\n| `get_request_initiator`  | 获取网络请求的 JavaScript 调用栈                            |\n| `get_websocket_messages` | 列出 WebSocket 连接、分析消息模式或获取消息详情             |\n\n### 浏览器状态\n\n| 工具              | 描述                                                                                      |\n| ----------------- | ----------------------------------------------------------------------------------------- |\n| `clear_site_data` | 清理当前站点相关 cookies、origin storage 和 sessionStorage；可显式选择清理全局 HTTP cache |\n\n### 检查工具\n\n| 工具                    | 描述                                                                          |\n| ----------------------- | ----------------------------------------------------------------------------- |\n| `evaluate_script`       | 在页面或断点上下文执行 JavaScript，支持主世界、保存结果和读取一个本地输入文件 |\n| `list_console_messages` | 列出控制台消息，或按 msgid 获取单条详情                                       |\n\n## 使用示例\n\n### JS 逆向基本流程\n\n1. **打开目标页面**\n\n```\n打开 https://example.com 并列出所有加载的 JS 脚本\n```\n\n2. **查找目标函数**\n\n```\n在所有脚本中搜索包含 \"encrypt\" 的代码\n```\n\n3. **设置断点**\n\n```\n在加密函数入口处设置断点\n```\n\n4. **触发并分析**\n\n```\n在页面上触发操作，断点命中后检查参数、调用栈和作用域变量\n```\n\n### WebSocket 协议分析\n\n```\n列出 WebSocket 连接，分析消息模式，查看特定类型的消息内容\n```\n\n### Agent 推荐的完整捕获流程\n\n因为导航阶段会刻意保持 CDP 静默，首次进入目标页时不会立即打开 Network / Debugger 域。推荐流程是先过风控，再刷新捕获：\n\n```\n1. new_page 打开目标页\n2. 调用 list_network_requests 激活 collectors\n3. navigate_page(type=\"reload\") 刷新页面\n4. 再次 list_network_requests 查看完整请求\n5. 对关键 reqid 使用 outputFile 导出原始材料\n```\n\n### Cookie / 风控重放流程\n\n```\n1. clear_site_data(confirm=true) 清理当前站点状态\n2. navigate_page(type=\"reload\") 重新触发初始化\n3. list_network_requests 找到设置 cookie 或提交 sensor 的请求\n4. 导出 requestBody / responseHeaders / responseBody\n5. 用 evaluate_script + localFilePath 在页面上下文中复算或验证\n```\n\n## 配置选项\n\nCLI 保持精简，所有 flag 都是可选项。**99% 场景默认即可**。涉及本地文件时，建议用 `--allowedRoots` 限定 Agent 可读写的目录。\n\n| 选项               | 描述                                                                                                                                                                                                                      | 默认值  |\n| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |\n| `--cloak`          | 切换到 CloakBrowser 隐身二进制（取代系统 Chrome）。启用按平台提供的 C++ 源码层指纹 patch。首次启动自动下载 ~200MB 二进制；指纹身份按 profile 持久化。详见 [docs/cloak.md](docs/cloak.md)。                                | `false` |\n| `--isolated`       | 使用临时 user-data-dir（cookies/localStorage 不保留，关闭时自动清理）                                                                                                                                                     | `false` |\n| `--browserUrl, -u` | 连接到已运行的 Chrome 实例（CDP HTTP 端点，如 `http://127.0.0.1:9222`）。MCP 会自动探测出 WebSocket debugger URL。本地 Chrome、AdsPower、BitBrowser 等怎么拿到这个端点详见 [docs/cdp-endpoint.md](docs/cdp-endpoint.md)。 | –       |\n| `--logFile`        | 写入 `0600` 普通文件的 MCP 调试日志；详细日志仅使用 `DEBUG=mcp:*`。不要使用 `DEBUG=*`，浏览器协议日志可能泄露页面、Cookie、脚本和凭据。                                                                                   | –       |\n| `--allowedRoots`   | 可重复指定 Agent 允许读写的本地目录；解析真实路径并拒绝符号链接越界。启用时禁用 `file:`、`view-source:file:` 和 `filesystem:file:` 浏览器页面。未指定时本地文件访问不受目录限制，启动时会打印安全警告。                   | –       |\n\n### 示例配置\n\n**默认 —— 系统 Chrome + 持久化登录态**（绝大多数调试场景推荐）：\n\n```json\n{\n  \"mcpServers\": {\n    \"js-reverse\": {\n      \"command\": \"npx\",\n      \"args\": [\"js-reverse-mcp\"]\n    }\n  }\n}\n```\n\n**`--cloak` —— 强反爬站点**（Cloudflare Turnstile / DataDome / FingerprintJS 防护）：\n\n> **强烈推荐：先把二进制预下载好**（一次性，~30–60 秒）。**不做这一步**的话，首次启动带 `--cloak` 的 MCP 会**静默下载 ~200MB**，看起来像 MCP 卡住了：\n>\n> ```bash\n> npx cloakbrowser install\n> ```\n>\n> （`cloakbrowser` 包已经通过 `optionalDependencies` 一起装好，这条命令只是触发它自带的二进制下载逻辑，有进度条）\n\n```json\n{\n  \"mcpServers\": {\n    \"js-reverse-cloak\": {\n      \"command\": \"npx\",\n      \"args\": [\"js-reverse-mcp\", \"--cloak\"]\n    }\n  }\n}\n```\n\n**两套并行** —— 两个 MCP 实例 profile 物理隔离，根据目标站点切换：\n\n```json\n{\n  \"mcpServers\": {\n    \"js-reverse\": {\n      \"command\": \"npx\",\n      \"args\": [\"js-reverse-mcp\"]\n    },\n    \"js-reverse-cloak\": {\n      \"command\": \"npx\",\n      \"args\": [\"js-reverse-mcp\", \"--cloak\"]\n    }\n  }\n}\n```\n\n**`--isolated` —— 每次全新 profile**（不保留 cookies/localStorage）：\n\n```json\n{\n  \"mcpServers\": {\n    \"js-reverse\": {\n      \"command\": \"npx\",\n      \"args\": [\"js-reverse-mcp\", \"--isolated\"]\n    }\n  }\n}\n```\n\n### 连接到已运行的 Chrome / 第三方指纹浏览器\n\n`--browserUrl` 只接受 **CDP endpoint**（能响应 `/json/version` 的 HTTP 端点），不接受厂商私有 Local API。本地 Chrome、AdsPower、BitBrowser 等场景下怎么拿到 CDP 端口，详见专门的文档：\n\n📖 **[docs/cdp-endpoint.md —— 如何拿到 CDP 调试端口](docs/cdp-endpoint.md)**\n\n最短路径（本地 Chrome）：\n\n```bash\n# 先关掉所有 Chrome 窗口，然后\n/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome \\\n  --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"js-reverse\": {\n      \"command\": \"npx\",\n      \"args\": [\"js-reverse-mcp\", \"--browserUrl\", \"http://127.0.0.1:9222\"]\n    }\n  }\n}\n```\n\n指纹浏览器（AdsPower、BitBrowser 等）的 CDP 端口是**每次启动随机变化**的，必须通过厂商 Local API 启动浏览器后再提取，操作步骤和示例脚本都在上面那篇文档里。\n\n## 故障排除\n\n### 被反爬系统拦截\n\n如果访问某些站点被拦截（如知乎返回 40362、Cloudflare 挑战死循环）：\n\n1. **先试 `--isolated`** —— 用全新 profile 排除残留状态污染：\n   ```json\n   \"args\": [\"js-reverse-mcp\", \"--isolated\"]\n   ```\n2. **还不行就开 `--cloak`** —— 启用按平台提供的源码层指纹 patch：\n   ```json\n   \"args\": [\"js-reverse-mcp\", \"--cloak\"]\n   ```\n3. **最后再考虑手动清持久化 profile**（会丢登录态）：\n   ```bash\n   rm -rf ~/.cache/chrome-devtools-mcp/chrome-profile\n   ```\n\n什么时候该开 `--cloak`、什么时候不该开，详见 [docs/cloak.md](docs/cloak.md)。\n\n## Agent 路由评测（维护者）\n\n`npm run eval:routing:validate` 会离线校验实际 MCP `tools/list`、server instructions 与 `evals/tool-routing.json` 的 30 条工具选择契约；该命令不会访问模型端点，并已纳入 presubmit。\n\n真实模型评测是显式 opt-in，会逐条调用 OpenAI-compatible Chat Completions 端点并可能产生费用：\n\n```bash\nMCP_ROUTING_EVAL_ENDPOINT=https://api.example.com/v1/chat/completions \\\nMCP_ROUTING_EVAL_MODEL=model-name \\\nMCP_ROUTING_EVAL_API_KEY=secret \\\nnpm run eval:routing\n```\n\n`MCP_ROUTING_EVAL_API_KEY` 对无需认证的本地端点可省略；带凭据的远程端点必须使用 HTTPS，HTTP 仅允许 loopback。可用 `MCP_ROUTING_EVAL_TIMEOUT_MS` 调整单条请求超时。默认要求 100% 通过，跨模型对比时可用 `MCP_ROUTING_EVAL_MIN_PASS_RATE` 设置 `(0, 1]` 阈值。评测不会输出 API key、endpoint 或端点错误响应正文。\n\n## 安全提示\n\n此工具会将浏览器内容暴露给 MCP 客户端，允许检查、调试和修改浏览器中的任何数据。请勿在包含敏感信息的页面上使用。\n\n`evaluate_script.localFilePath`、各类 `outputFile`/`filePath` 会让 MCP 进程读取或写入宿主机文件。生产或共享环境应使用一个或多个 `--allowedRoots` 收窄到专用工作目录；未配置时访问范围不受限制。启用 `--allowedRoots` 后，`file:`、`view-source:file:` 和 `filesystem:file:` 浏览器页面也会被拒绝，避免通过浏览器导航绕过目录边界；需要调试本地页面时，只能在明确接受本地文件暴露风险的会话中不配置该选项。\n\n## 许可证\n\nApache-2.0\n","readmeFilename":"README.md"}