{"_id":"@ai-jshook/mcp","_rev":"11-a1bfe620a0bc3fa0e2caace2ecee9428","name":"@ai-jshook/mcp","dist-tags":{"latest":"0.1.11"},"versions":{"0.1.1":{"name":"@ai-jshook/mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://github.com/715494637","name":"op要喝op果奶"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.1","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/715494637/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/715494637/jshook-reverse-tool/issues"},"bin":{"ai-jshook-mcp":"dist/index.js"},"dist":{"shasum":"e10fc99a8ba69e1c1ea79485bfd3aac81fac0039","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.1.tgz","fileCount":271,"integrity":"sha512-oUtQFgn2UCSdJezXK7E21U7t1L/+JcVxjCMxTyPTAGQHvmLkiqqGcbGQURLOPdJ/3K09bSCVpBo1yeAw8WIPlw==","signatures":[{"sig":"MEYCIQC1pN0QXwYxdnrEMAnzEoWQSxORTO7I0khZ8gDBxe+w4wIhALkap3jM1yGD1xItkkT9Q1413vgPUNsU6s2z3ZwmnAcg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2155823},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"bcf27c5fe3fcc51258d95b9c6109e4fac42167ff","mcpName":"io.github.715494637/ai-jshook","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"tsc","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/715494637/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1770052408283_0.5220915907496415","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ai-jshook/mcp","version":"0.1.2","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://github.com/wuji1","name":"wuji1"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.2","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/wuji1/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/wuji1/jshook-reverse-tool/issues"},"bin":{"ai-jshook-mcp":"dist/index.js"},"dist":{"shasum":"20fcf33691ea0e4aacdd07c1678dabd83934fb24","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.2.tgz","fileCount":269,"integrity":"sha512-Az9O83hyLbat/q52HoDMUdY68a324mapSqTaENChJhTZlY86jZDgF+oRLwFOx8CMoIjZx7nQ7UO3lkdlaSCFHA==","signatures":[{"sig":"MEYCIQDoTd6/ErENS5NjYtbNgARmJGljKvqarliyqlMegKPnUAIhAJCFHY2YXBk1YikYdhlsFkFipHHWVd9XQCFcyq/4dMrw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1980608},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"mcpName":"io.github.wuji1/jshook-reverse-tool","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"node ./node_modules/typescript/bin/tsc","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/wuji1/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1772120997684_0.26648400528341765","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@ai-jshook/mcp","version":"0.1.3","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://www.npmjs.com/~opooo1830","name":"opooo1830"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.3","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/715494637/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/715494637/jshook-reverse-tool/issues"},"bin":{"ai-jshook-mcp":"dist/index.js"},"dist":{"shasum":"5a4e9c7f0296804078d6fbb21aa009c6bf52528f","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.3.tgz","fileCount":269,"integrity":"sha512-Pbs4os9JX4g5WaS6ihSRa8c3ZUp5GRjrJp6v3KMd4fQqZtjeXxkvp/8+Sdsg2BGuEf6lgMbbC9Exq0RCvgzGPg==","signatures":[{"sig":"MEYCIQDs1ACf5yX/fr6NQA9heTuQsJ73F/lU4tRQddYul6EnlAIhANJutusmyf0N2kJZ3JuSVs4SE8t7dDmhlv3qUfDAiKVh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1980351},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"mcpName":"io.github.ai-jshook.mcp","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"node ./node_modules/typescript/bin/tsc","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/715494637/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.3_1772121329947_0.7653262708012505","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@ai-jshook/mcp","version":"0.1.4","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://www.npmjs.com/~opooo1830","name":"opooo1830"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.4","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/715494637/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/715494637/jshook-reverse-tool/issues"},"bin":{"ai-jshook-mcp":"dist/index.js"},"dist":{"shasum":"1159098f9eeb298762522d075e71bac37280e983","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.4.tgz","fileCount":269,"integrity":"sha512-WbEVKf1bxk+tgUo543jKpbRdsqk6/CZWbxNnnMqpilQPYeyfPLw8dMaAKyDnp8xNT88M1RTL5EM4aTEc8Ha5WA==","signatures":[{"sig":"MEYCIQDSZe5n0KzGuBvYOp+sSh2R3iQMzK/zXwe+PpHx6pDKGAIhAP6upoC5ifhG3AYK85ecAX56Pl73dkdmzkxCR77ge2qy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1976777},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5e6c46e08d008405facfe05420faf614aa3c7470","mcpName":"io.github.ai-jshook.mcp","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"node ./node_modules/typescript/lib/tsc.js","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/715494637/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.4_1772279722300_0.10094111033585573","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@ai-jshook/mcp","version":"0.1.5","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://www.npmjs.com/~opooo1830","name":"opooo1830"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.5","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/715494637/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/715494637/jshook-reverse-tool/issues"},"bin":{"ai-jshook-mcp":"dist/index.js"},"dist":{"shasum":"93c99d68c797e747c5b0bb31c132d1eb48e53396","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.5.tgz","fileCount":269,"integrity":"sha512-NmzU5cHjOEg8AuRZ+3kWm/gr0mK0TnVTiSXQyYfcP0FvFkv4h75tzCoDm/my5q6OdZSHglhHwh6GcXldzbd2GQ==","signatures":[{"sig":"MEUCIQDLZZ9Av8qymcZgIJFaG3X06ZGvovUfODil9MSPmgzbwAIgJDoJw3ZF2IiERRwqEoE5rMptctqBdMsDCOFXyVwF4Sk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1976838},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5e6c46e08d008405facfe05420faf614aa3c7470","mcpName":"io.github.ai-jshook.mcp","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"node ./node_modules/typescript/lib/tsc.js","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/715494637/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2","puppeteer-extra-plugin-user-preferences":"^2.4.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.5_1772282816766_0.6603868553255527","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@ai-jshook/mcp","version":"0.1.6","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://github.com/wuji1","name":"wuji1"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.6","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/wuji1/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/wuji1/jshook-reverse-tool/issues"},"bin":{"jshook-reverse-tool":"dist/index.js"},"dist":{"shasum":"b76551820fc4d5d7fdc1f31499a878ab0808027b","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.6.tgz","fileCount":274,"integrity":"sha512-tYGpWoh1YMzbpx5uc17qQf909Z9gCDQjCMMNmjAmS4ikwcVzkyicStW/6Er3uLXpkoYZWoevsBUjrJlWeAl/oA==","signatures":[{"sig":"MEQCIEPIu+XAec0XQQL5xbmCEqDoxtWgw6K7cWJNmLWCeePkAiAAtVmVbS/CyaXoes93x063M15vg15WMy7KHv7GYtQrkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2009885},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5e6c46e08d008405facfe05420faf614aa3c7470","mcpName":"io.github.wuji1/jshook-reverse-tool","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"tsc","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/wuji1/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","jshook-reverse-tool":"^0.1.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.6_1772289935365_0.699067259803299","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@ai-jshook/mcp","version":"0.1.7","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://github.com/wuji1","name":"wuji1"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.7","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/wuji1/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/wuji1/jshook-reverse-tool/issues"},"bin":{"jshook-reverse-tool":"dist/index.js"},"dist":{"shasum":"3e818e75fdd8df6c45743d93eb58fccdf2e24ba7","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.7.tgz","fileCount":269,"integrity":"sha512-rhBixVlDKv/6ZXHziYFDDABSHYMmuCxnC8H7UtV37+Yxjj740bgUvT0w+pgtvRKKwLxXRjp83iywE/HVO/MF4Q==","signatures":[{"sig":"MEQCIBmTsmbKE5DO1Y27yXfI4EhUVdxXPL9iSmFAMyIR8KEEAiBTfb9tb6PoJ2bJeAbfr/bnXkDFeO6hxLZmWLmQF7JGZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1976786},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5e6c46e08d008405facfe05420faf614aa3c7470","mcpName":"io.github.wuji1/jshook-reverse-tool","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"tsc","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/wuji1/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","jshook-reverse-tool":"^0.1.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.7_1772290177965_0.4255745276445675","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@ai-jshook/mcp","version":"0.1.8","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://github.com/wuji1","name":"wuji1"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.8","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/wuji1/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/wuji1/jshook-reverse-tool/issues"},"bin":{"jshook-reverse-tool":"dist/index.js"},"dist":{"shasum":"054e58c557a22af4bab4a4bf0df40eb64ff3daa0","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.8.tgz","fileCount":269,"integrity":"sha512-KBuGI434phRsL+OCOtM90zsycx9nsmqSeDmGQZDplwhWZX1BThG1S4zOBcKx1L/ZB7OJsmL/UAXo4bP1GaZ2+w==","signatures":[{"sig":"MEUCIEDUao8RpHKSuAYxMcifbAryqVOxFRhEDlQ4NzneiZ6pAiEA5wg9+bSqhQVm5IgHopzrUgiG0j55boJ+RAcq12oBybI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2002539},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"c1525092ef15936aff31fb3517887e346a7d1018","mcpName":"io.github.wuji1/jshook-reverse-tool","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"tsc","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/wuji1/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","jshook-reverse-tool":"^0.1.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.8_1772424707704_0.6414789964317087","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@ai-jshook/mcp","version":"0.1.9","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://github.com/wuji1","name":"wuji1"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.9","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/wuji1/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/wuji1/jshook-reverse-tool/issues"},"bin":{"jshook-reverse-tool":"dist/index.js"},"dist":{"shasum":"2085cac75a71dffeef8dc48d3b056be1214e29b0","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.9.tgz","fileCount":270,"integrity":"sha512-dJdwg1u17fimbCSaoK4X3QFLSnTB3IHpGd8lTPP9t7JvmLuWQYMnOLBYTaDwGPEbSHXBOzrtmCMcZkJXFQqC6Q==","signatures":[{"sig":"MEYCIQCa7qEcXUwAOU8XkY9uhDP4nZqk5fvgDeyVUlsP1Ifa0gIhAMJ9Z6nFUru+KYHK1+dx16eW6eSI9+8EQ2wiqJw6DUBZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2014728},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b95c472e0cae89ae2f85eafbfe8bb9ac6cfefa58","mcpName":"io.github.wuji1/jshook-reverse-tool","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"tsc","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/wuji1/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","jshook-reverse-tool":"^0.1.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.9_1772427407071_0.8488599260902037","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@ai-jshook/mcp","version":"0.1.10","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"url":"https://github.com/wuji1","name":"wuji1"},"license":"MIT","_id":"@ai-jshook/mcp@0.1.10","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"homepage":"https://github.com/wuji1/jshook-reverse-tool#readme","bugs":{"url":"https://github.com/wuji1/jshook-reverse-tool/issues"},"bin":{"jshook-reverse-tool":"dist/index.js"},"dist":{"shasum":"f719a14c59cc750ca0edfaa68f83c59d6427fb1c","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.10.tgz","fileCount":274,"integrity":"sha512-S21wSYX0vwnvJba1J1UE0o0GfGVQRkV7xsc9m4RWxdYONFVmn5NvIACJMNd+77FsdFR7SQEJeeTKJYV5fb7Mvg==","signatures":[{"sig":"MEUCIBBjCQcS/hcZ/4X1gAM3M8DijwzmpfJvcgPj8T0hpMFRAiEA0PBv5k7TTx3irBmOfnMt2quPVm27RVAtF51P7n7p+Bo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3173870},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e562b47a1c6da21e738aa8859ce2532f34201ef0","mcpName":"io.github.wuji1/jshook-reverse-tool","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"jest","build":"tsc","check":"npm run lint && npm run build && npm run verify","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","verify":"tsx scripts/verify-modules.ts","package":"npm run build && npm pack","prepare":"npm run build","test:watch":"jest --watch","verify:build":"npm run build && npm run verify","prepublishOnly":"npm run build","test:integration":"jest tests/integration"},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"repository":{"url":"git+https://github.com/wuji1/jshook-reverse-tool.git","type":"git"},"_npmVersion":"10.9.3","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ora":"^8.1.1","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^4.73.0","commander":"^12.1.0","puppeteer":"^23.10.4","@babel/types":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","puppeteer-extra":"^3.3.6","@babel/generator":"^7.26.5","@anthropic-ai/sdk":"^0.32.1","jshook-reverse-tool":"^0.1.1","@modelcontextprotocol/sdk":"^1.0.4","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^29.7.0","eslint":"^9.17.0","nodemon":"^3.1.9","ts-jest":"^29.2.5","prettier":"^3.4.2","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.2","@types/babel__traverse":"^7.20.6","@types/babel__generator":"^7.6.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.10_1772431999544_0.5919739122622978","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@ai-jshook/mcp","version":"0.1.11","description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","mcpName":"io.github.wuji1/jshook-reverse-tool","main":"dist/index.js","type":"module","bin":{"jshook-reverse-tool":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/wuji1/jshook-reverse-tool.git"},"bugs":{"url":"https://github.com/wuji1/jshook-reverse-tool/issues"},"homepage":"https://github.com/wuji1/jshook-reverse-tool#readme","scripts":{"build":"tsc","dev":"tsx watch src/index.ts","start":"node dist/index.js","test":"jest","test:integration":"jest tests/integration","test:watch":"jest --watch","verify":"tsx scripts/verify-modules.ts","verify:build":"npm run build && npm run verify","lint":"eslint src --ext .ts","format":"prettier --write \"src/**/*.ts\"","prepare":"npm run build","check":"npm run lint && npm run build && npm run verify","package":"npm run build && npm pack","prepublishOnly":"npm run build"},"keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"author":{"name":"wuji1","url":"https://github.com/wuji1"},"license":"MIT","dependencies":{"@anthropic-ai/sdk":"^0.32.1","@babel/generator":"^7.26.5","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.5","@babel/types":"^7.26.3","@modelcontextprotocol/sdk":"^1.0.4","chalk":"^5.4.1","commander":"^12.1.0","dotenv":"^16.4.7","jshook-reverse-tool":"^0.1.1","openai":"^4.73.0","ora":"^8.1.1","puppeteer":"^23.10.4","puppeteer-extra":"^3.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"devDependencies":{"@types/babel__generator":"^7.6.8","@types/babel__traverse":"^7.20.6","@types/jest":"^29.5.14","@types/node":"^22.10.2","@typescript-eslint/eslint-plugin":"^8.19.1","@typescript-eslint/parser":"^8.19.1","eslint":"^9.17.0","jest":"^29.7.0","nodemon":"^3.1.9","prettier":"^3.4.2","ts-jest":"^29.2.5","tsx":"^4.20.6","typescript":"^5.7.2"},"engines":{"node":">=18.0.0"},"_id":"@ai-jshook/mcp@0.1.11","gitHead":"467de369e633ef2626521aa4363ed37b0c98daf2","types":"./dist/index.d.ts","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-/VSbRSrcs7t5iKxH+Kslm9UgsBrC/kK8yEmuvbFhESD1mNcXS6aTmuXxpQQzQ1GAmpwgtUq7BhbDWDbRfGTiwA==","shasum":"3104152893f1d32b39f83b4a84f3aba0882a9609","tarball":"https://registry.npmjs.org/@ai-jshook/mcp/-/mcp-0.1.11.tgz","fileCount":279,"unpackedSize":6486483,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDdzBOZAyarlhyWL2+rzYU1vhwtKYzsKVKg75F308h1CAiEA7WLDyz9BNsQ27AehQ66pnBF6Dxys8BgraYVHhxTfpA0="}]},"_npmUser":{"name":"opooo1830","email":"dypbing2@outlook.com"},"directories":{},"maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.11_1772441929915_0.7835829366372258"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-02T17:13:28.175Z","modified":"2026-03-02T08:58:50.416Z","0.1.1":"2026-02-02T17:13:28.497Z","0.1.2":"2026-02-26T15:49:57.895Z","0.1.3":"2026-02-26T15:55:30.336Z","0.1.4":"2026-02-28T11:55:22.488Z","0.1.5":"2026-02-28T12:46:57.015Z","0.1.6":"2026-02-28T14:45:35.583Z","0.1.7":"2026-02-28T14:49:38.179Z","0.1.8":"2026-03-02T04:11:47.928Z","0.1.9":"2026-03-02T04:56:47.363Z","0.1.10":"2026-03-02T06:13:19.753Z","0.1.11":"2026-03-02T08:58:50.329Z"},"bugs":{"url":"https://github.com/wuji1/jshook-reverse-tool/issues"},"author":{"name":"wuji1","url":"https://github.com/wuji1"},"license":"MIT","homepage":"https://github.com/wuji1/jshook-reverse-tool#readme","keywords":["mcp","model-context-protocol","javascript","reverse-engineering","hook","hooking","deobfuscation","ai","claude","puppeteer","chrome-devtools","debugger","web-scraping","anti-detection","captcha","browser-automation","network-monitoring","ast","obfuscation","cryptography-detection","code-analysis"],"repository":{"type":"git","url":"git+https://github.com/wuji1/jshook-reverse-tool.git"},"description":"AI-powered JavaScript reverse engineering tool with 80+ MCP tools for browser automation, debugging, network monitoring, and intelligent hooking","maintainers":[{"name":"opooo1830","email":"dypbing2@outlook.com"}],"readme":"# JSHook Reverse Tool\n\n<div align=\"center\">\n\n** AI-Powered JavaScript Reverse Engineering Tool**\n\n让 AI 助手成为你的浏览器逆向专家 | Let AI be your browser reverse engineering expert\n\n[![npm version](https://img.shields.io/npm/v/jshook-reverse-tool.svg)](https://www.npmjs.com/package/jshook-reverse-tool)\n[![npm downloads](https://img.shields.io/npm/dm/jshook-reverse-tool.svg)](https://www.npmjs.com/package/jshook-reverse-tool)\n[![MCP Registry](https://img.shields.io/badge/MCP-Registry-blue)](https://registry.modelcontextprotocol.io/servers/io.github.wuji1.jshook-reverse-tool)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node Version](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue)](https://www.typescriptlang.org/)\n[![MCP](https://img.shields.io/badge/MCP-Protocol-orange)](https://modelcontextprotocol.io/)\n\n[快速开始](#快速开始) • [核心功能](#核心功能) • [使用场景](#使用场景) • [文档](#文档)\n\n</div>\n\n---\n\n## ⚡ 一键安装\n\n### 从 npm 安装\n\n```bash\n# 使用 npx（无需安装）\nnpx jshook-reverse-tool\n\n# 或全局安装\nnpm install -g jshook-reverse-tool\n```\n\n### 从 MCP Registry 安装（推荐）\n\n本工具已发布到 [MCP 官方注册表](https://registry.modelcontextprotocol.io/servers/io.github.wuji1.jshook-reverse-tool)，支持 Claude Desktop 等 MCP 客户端直接发现和安装。\n\n在支持 MCP Registry 的客户端中搜索 `jshook-reverse-tool` 即可找到并安装。\n\n配置 Claude Desktop 后即可使用 80+ 专业逆向工具 → [查看配置教程](#快速开始)\n\n---\n\n## 什么是 JSHook？\n\nJSHook 是一个基于 **MCP (Model Context Protocol)** 的 JavaScript 逆向工程工具，通过 **80+ 个专业工具**，让 Claude、ChatGPT 等 AI 助手能够自动化完成复杂的网页分析、调试和逆向任务。\n\n### 为什么选择 JSHook？\n\n- **AI 原生设计** - 专为 AI 助手优化，自然语言即可操作\n- **反检测能力** - 集成 2024-2025 最新反爬虫技术\n- **深度调试** - Chrome DevTools Protocol 完整集成\n- **网络拦截** - 捕获所有 HTTP 请求/响应\n- **智能 Hook** - AI 自动生成 Hook 代码\n- **验证码识别** - AI 视觉识别各类验证码\n\n---\n\n## 核心功能\n\n### 1. 浏览器自动化 (35 个工具)\n\n完整的浏览器控制能力，从页面导航到 DOM 操作，从截图到设备模拟。\n\n```javascript\n// 示例：自动化登录流程\nbrowser_launch()\nstealth_inject()  // 注入反检测脚本\npage_navigate(url=\"https://example.com/login\")\npage_type(selector=\"#username\", text=\"user@example.com\")\npage_type(selector=\"#password\", text=\"********\")\npage_click(selector=\"#loginBtn\")\n```\n\n**亮点功能**:\n- ✅ 2024-2025 最新反检测技术（隐藏 webdriver、Canvas指纹处理）\n- ✅ AI 视觉验证码识别（滑块/图形/reCAPTCHA）\n- ✅ 智能等待和自动重试\n- ✅ 移动设备模拟\n\n### 2. 专业调试器 (38 个工具)\n\n基于 Chrome DevTools Protocol，提供 IDE 级别的调试能力。\n\n```javascript\n// 示例：调试加密算法\ndebugger_enable()\n\n// 在所有加密API调用处暂停\nxhr_breakpoint_set(urlPattern=\"*/api/sign*\")\nevent_breakpoint_set(eventName=\"fetch\")\n\n// 监控关键变量\nwatch_add(expression=\"window.crypto_params\", name=\"加密参数\")\n\n// 等待断点命中\ndebugger_wait_for_paused()\nget_call_stack()  // 查看调用栈\nwatch_evaluate_all()  // 查看所有监控变量\n```\n\n**亮点功能**:\n- ✅ 代码断点、条件断点、异常断点\n- ✅ XHR/Fetch 断点（拦截网络请求）\n- ✅ 事件断点（点击、定时器、WebSocket）\n- ✅ Watch 表达式、调用栈分析\n- ✅ Blackboxing（屏蔽第三方库）\n- ✅ 调试会话保存/加载\n\n### 3. 网络监控 (6 个工具)\n\n捕获和分析所有 HTTP 流量，支持请求过滤和响应解析。\n\n```javascript\n// 示例：分析 API 请求\nnetwork_enable()\npage_navigate(url=\"https://api.example.com\")\n\n// 过滤包含 \"api\" 的请求\nnetwork_get_requests(url=\"api\", method=\"POST\")\n\n// 查看响应体\nnetwork_get_response_body(requestId=\"xxx\")\n\n// 统计分析\nnetwork_get_stats()\n```\n\n**亮点功能**:\n- ✅ 捕获请求头、POST 数据、响应体\n- ✅ 智能过滤（URL、方法、类型）\n- ✅ 统计分析（请求数、失败率、耗时）\n\n### 4. AI Hook 生成器 (7 个工具)\n\n用自然语言描述需求，AI 自动生成专业的 Hook 代码。\n\n```javascript\n// 示例：Hook Fetch API\nai_hook_generate({\n  description: \"监控所有 API 请求，记录 URL 和参数\",\n  target: { type: \"api\", name: \"fetch\" },\n  behavior: {\n    captureArgs: true,\n    captureReturn: true,\n    logToConsole: true\n  },\n  condition: {\n    urlPattern: \".*api.*\"\n  }\n})\n\n// 注入 Hook（必须在页面加载前）\nai_hook_inject(hookId=\"fetch-hook\", method=\"evaluateOnNewDocument\")\n\n// 获取捕获的数据\nai_hook_get_data(hookId=\"fetch-hook\")\n```\n\n**支持的 Hook 类型**:\n- 🎯 函数 Hook（`btoa`, `atob`, `eval`）\n- 🎯 API Hook（`fetch`, `XMLHttpRequest`, `WebSocket`）\n- 🎯 对象方法（`crypto.subtle.encrypt`）\n- 🎯 属性拦截、事件监听\n\n### 5. 性能分析 (4 个工具)\n\nWeb Vitals 指标、代码覆盖率、内存快照。\n\n```javascript\nperformance_get_metrics(includeTimeline=true)\nperformance_start_coverage()  // 启动覆盖率收集\n// ... 操作页面 ...\nperformance_stop_coverage()   // 获取未使用的代码\nperformance_take_heap_snapshot()  // 内存分析\n```\n\n### 6. 缓存与预算管理 (6 个工具)\n\n智能管理 Token 预算和缓存，防止上下文溢出。\n\n```javascript\nget_token_budget_stats()  // 查看 Token 使用情况\nget_cache_stats()         // 查看缓存统计\n\n// Token 使用率 > 80% 时\nmanual_token_cleanup()    // 清理 Token\nsmart_cache_cleanup()     // 智能清理缓存\n```\n\n---\n\n## 使用场景\n\n### 🔓 网页逆向\n\n- 分析混淆加密的 JavaScript 代码\n- 定位加密算法和签名生成逻辑\n- 提取 API 请求参数\n\n### 🕷️ 爬虫开发\n\n- 突破反爬虫检测（webdriver、Canvas指纹）\n- 自动处理验证码（滑块/图形/reCAPTCHA）\n- 捕获动态加载数据\n\n### 🛡️ 安全测试\n\n- 漏洞挖掘和渗透测试\n- XSS/CSRF 检测\n- API 安全分析\n\n### ⚡ 性能优化\n\n- 识别无用代码（代码覆盖率）\n- 分析加载性能（Web Vitals）\n- 内存泄漏检测\n\n---\n\n## 快速开始\n\n### 环境要求\n\n- **Node.js**: >= 18.0.0\n- **操作系统**: Windows / macOS / Linux\n- **LLM API**: OpenAI 或 Anthropic API Key\n\n### 安装方式\n\n#### 方式一：直接使用 npx（推荐）⭐\n\n无需安装，直接配置即可使用。编辑 Claude Desktop 配置文件 `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"jshook\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"jshook-reverse-tool\"],\n      \"env\": {\n        \"OPENAI_API_KEY\": \"sk-...\",\n        \"DEFAULT_LLM_PROVIDER\": \"openai\"\n      }\n    }\n  }\n}\n```\n\n#### 方式二：全局安装\n\n```bash\nnpm install -g jshook-reverse-tool\n```\n\n配置文件：\n```json\n{\n  \"mcpServers\": {\n    \"jshook\": {\n      \"command\": \"jshook-reverse-tool\",\n      \"env\": {\n        \"OPENAI_API_KEY\": \"sk-...\",\n        \"DEFAULT_LLM_PROVIDER\": \"openai\"\n      }\n    }\n  }\n}\n```\n\n#### 方式三：从源码安装（开发者）\n\n```bash\ngit clone https://github.com/wuji1/jshook-reverse-tool.git\ncd jshook-reverse-tool\nnpm install\nnpm run build\n```\n\n配置文件：\n```json\n{\n  \"mcpServers\": {\n    \"jshook\": {\n      \"command\": \"node\",\n      \"args\": [\"C:/path/to/jshook/dist/index.js\"],\n      \"env\": {\n        \"OPENAI_API_KEY\": \"sk-...\",\n        \"DEFAULT_LLM_PROVIDER\": \"openai\"\n      }\n    }\n  }\n}\n```\n\n### 环境变量配置\n\n在 MCP 配置的 `env` 字段中设置以下变量：\n\n**必需配置**:\n```json\n{\n  \"OPENAI_API_KEY\": \"sk-...\",              // OpenAI API Key\n  \"DEFAULT_LLM_PROVIDER\": \"openai\"         // 使用 openai\n}\n```\n\n或使用 Anthropic:\n```json\n{\n  \"ANTHROPIC_API_KEY\": \"sk-ant-...\",       // Anthropic API Key\n  \"DEFAULT_LLM_PROVIDER\": \"anthropic\"      // 使用 anthropic\n}\n```\n\n**可选配置**:\n```json\n{\n  \"PUPPETEER_HEADLESS\": \"false\",           // 是否无头模式\n  \"PUPPETEER_TIMEOUT\": \"30000\",            // 超时时间(毫秒)\n  \"ENABLE_CACHE\": \"true\",                  // 启用缓存\n  \"LOG_LEVEL\": \"info\"                      // 日志级别\n}\n```\n\n### 启动使用\n\n重启 Claude Desktop，现在可以使用自然语言调用 JSHook 的所有工具了！\n\n```\n你：帮我分析 https://example.com 的加密算法\n\nClaude：\n1. 启动浏览器并注入反检测脚本\n2. 访问目标网站\n3. 获取所有脚本，查找加密相关代码\n4. 设置断点拦截加密函数调用\n5. 分析加密逻辑...\n```\n\n---\n\n## 典型工作流\n\n### 场景 1: 分析加密算法\n\n```\n用户：帮我分析 https://api.example.com 的签名算法\n\nAI 自动执行：\n1. browser_launch() + stealth_inject()\n2. network_enable() + debugger_enable()\n3. page_navigate(\"https://api.example.com\")\n4. get_all_scripts() → 找到可疑脚本\n5. xhr_breakpoint_set(urlPattern=\"*/api/*\") → 拦截 API 请求\n6. watch_add(\"window.signParams\") → 监控签名参数\n7. 触发请求 → debugger_wait_for_paused()\n8. 分析调用栈和变量 → 定位签名算法\n```\n\n### 场景 2: 验证码自动检测\n\n```\n用户：访问 https://login.example.com 并告诉我是否有验证码\n\nAI 自动执行：\n1. browser_launch()\n2. page_navigate(\"https://login.example.com\")\n3. captcha_detect() → AI 视觉识别\n   → 返回: { detected: true, type: \"slider\", vendor: \"geetest\" }\n4. captcha_wait(timeout=300000) → 等待用户完成\n```\n\n### 场景 3: Hook API 调用\n\n```\n用户：监控所有 Fetch 请求，记录 URL 和参数\n\nAI 自动执行：\n1. ai_hook_generate({\n     description: \"监控所有 Fetch 请求\",\n     target: { type: \"api\", name: \"fetch\" },\n     behavior: { captureArgs: true, captureReturn: true }\n   })\n2. ai_hook_inject(method=\"evaluateOnNewDocument\")\n3. page_navigate(\"https://target.com\")\n4. 用户操作页面...\n5. ai_hook_get_data() → 获取所有捕获的请求\n```\n\n---\n\n## 项目结构\n\n```\njshook-reverse-tool/\n├── src/\n│   ├── index.ts                 # MCP 服务器入口\n│   ├── server/\n│   │   ├── MCPServer.ts         # 主服务器类\n│   │   ├── *ToolDefinitions.ts  # 工具定义\n│   │   └── *ToolHandlers.ts     # 工具实现\n│   ├── modules/                 # 核心模块\n│   │   ├── collector/           # 浏览器自动化\n│   │   ├── debugger/            # 调试器\n│   │   ├── hook/                # Hook 管理\n│   │   ├── crypto/              # 加密检测\n│   │   └── captcha/             # 验证码识别\n│   ├── services/\n│   │   └── LLMService.ts        # AI 服务封装\n│   └── utils/                   # 工具函数\n├── docs/                        # 文档\n│   ├── MCP功能介绍.md           # 完整功能文档\n│   ├── 技术文档.md              # 技术实现细节\n│   └── 浏览器逆向实战教程.md     # 实战案例\n├── test/                        # 测试用例\n└── package.json\n```\n\n---\n\n## 开发命令\n\n```bash\n# 开发模式（自动重启）\nnpm run dev\n\n# 构建项目\nnpm run build\n\n# 运行测试\nnpm test\n\n# 代码检查\nnpm run lint\n\n# 格式化代码\nnpm run format\n\n# 完整检查（lint + build + verify）\nnpm run check\n```\n\n---\n\n## 文档\n\n- 📘 [MCP 功能介绍](./docs/MCP功能介绍.md) - 80+ 工具完整说明\n- 📗 [浏览器逆向实战教程](./docs/浏览器逆向实战教程.md) - 实战案例\n\n---\n\n## 常见问题\n\n### Q: 网络监控没有捕获到请求？\n\n**A**: 必须在 `page_navigate` **前**调用 `network_enable()`，或使用：\n```javascript\npage_navigate(url=\"...\", enableNetworkMonitoring=true)\n```\n\n### Q: 验证码检测失败？\n\n**A**: 确保使用支持 Vision API 的模型（GPT-4o、Claude 3.5 Sonnet）。如果使用不支持视觉的模型（如 DeepSeek），会返回截图让你手动分析。\n\n### Q: Token 用完了怎么办？\n\n**A**:\n```javascript\nmanual_token_cleanup()    // 清理 Token\nsmart_cache_cleanup()     // 智能清理缓存\nclear_all_caches()        // 完全重置（慎用）\n```\n\n### Q: 如何跳过第三方库代码？\n\n**A**:\n```javascript\nblackbox_add_common()  // 一键屏蔽常见库\n// 或手动添加\nblackbox_add(urlPattern=\"*jquery*\")\n```\n\n---\n\n## 安全与法律\n\nJSHook 是一个**合法的逆向工程和安全研究工具**。\n\n### ✅ 合法使用场景\n\n- 渗透测试授权项目\n- 安全研究和漏洞分析\n- CTF 竞赛和教育培训\n- 自己网站的性能优化\n- 爬虫开发和调试\n\n### ❌ 禁止用途\n\n- 未授权的攻击和破解\n- 大规模爬取他人数据\n- 绕过付费墙和版权保护\n- DoS 攻击和供应链投毒\n\n**使用本工具即表示你理解并遵守相关法律法规。**\n\n---\n\n## 技术栈\n\n- **运行时**: Node.js 18+, TypeScript 5.0+\n- **浏览器自动化**: Puppeteer, Chrome DevTools Protocol\n- **AI 集成**: OpenAI API, Anthropic API\n- **MCP 协议**: @modelcontextprotocol/sdk\n- **AST 处理**: @babel/parser, @babel/traverse\n- **测试**: Jest\n\n---\n\n## 贡献\n\n欢迎贡献代码、报告问题或提出建议！\n\n\n\n\n1. Fork 本仓库\n2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)\n3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)\n4. 推送到分支 (`git push origin feature/AmazingFeature`)\n5. 打开 Pull Request\n\n---\n\n## 许可证\n\n本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件\n\n---\n\n## 致谢\n\n- [Puppeteer](https://github.com/puppeteer/puppeteer) - 浏览器自动化\n- [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) - 调试协议\n- [Model Context Protocol](https://modelcontextprotocol.io/) - AI 工具协议\n- [Babel](https://babeljs.io/) - JavaScript 编译器\n\n---\n\n<div align=\"center\">\n\n**如果这个项目对你有帮助，请给一个 ⭐ Star！**\n\nMade with ❤️ by JSHook Team\n\n</div>\n","readmeFilename":"README.md"}