{ "name": "@jshookmcp/jshook", "version": "0.4.3", "description": "MCP server with built-in tools across multiple domains for AI-assisted JavaScript analysis and security analysis — browser automation, CDP debugging, network monitoring, JS hooks, code analysis, and workflow orchestration", "keywords": [ "ai", "anti-detection", "ast", "browser-automation", "captcha", "chrome-devtools", "claude", "code-analysis", "cryptography-detection", "debugger", "deobfuscation", "hook", "hooking", "javascript", "javascript-analysis", "mcp", "model-context-protocol", "network-monitoring", "obfuscation", "puppeteer", "security-analysis", "web-scraping" ], "homepage": "https://github.com/vmoranv/jshookmcp#readme", "bugs": { "url": "https://github.com/vmoranv/jshookmcp/issues" }, "license": "AGPL-3.0-only", "author": { "name": "vmoranv", "url": "https://github.com/vmoranv" }, "repository": { "type": "git", "url": "https://github.com/vmoranv/jshookmcp.git" }, "bin": { "jshook": "dist/index.mjs", "jshookmcp": "dist/index.mjs" }, "files": [ "DISCLOSURE", "dist", "workflows", "src/native/scripts" ], "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", "exports": { ".": { "import": "./dist/index.mjs", "types": "./dist/index.d.mts" }, "./plugin-api": { "import": "./dist/server/plugin-api.mjs", "types": "./dist/server/plugin-api.d.mts" }, "./fleet-api": { "import": "./dist/server/fleet-api.mjs", "types": "./dist/server/fleet-api.d.mts" } }, "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" }, "scripts": { "build": "node scripts/build.mjs", "build:dts": "node scripts/build.mjs --dts", "build:sdk": "corepack pnpm -C packages/extension-sdk build", "build:all": "corepack pnpm run build:dts && corepack pnpm run build:sdk", "build:analyze": "cross-env BUNDLE_ANALYZE=1 corepack pnpm run build && echo 'Open stats.html in browser to view bundle analysis'", "typecheck": "tsc --noEmit -p tsconfig.json && corepack pnpm -C packages/extension-sdk typecheck", "deps:update": "corepack pnpm update -r", "dev": "tsx --conditions=development watch src/index.ts", "dev:daemon": "cross-env MCP_TRANSPORT=http tsx --conditions=development watch src/index.ts", "start": "node dist/index.mjs", "daemon": "cross-env MCP_TRANSPORT=http node dist/index.mjs", "doctor": "tsx src/cli/doctor.ts", "docs:generate": "node scripts/generate-vitepress-reference.mjs", "docs:dev": "vitepress dev docs --host 127.0.0.1 --port 5173", "docs:build": "corepack pnpm run docs:generate && vitepress build docs", "docs:preview": "vitepress preview docs --host 127.0.0.1 --port 4173", "lint:md": "corepack pnpm dlx markdownlint-cli2 README.md README.zh.md CONTRIBUTING.md docs/**/*.md", "lint": "oxlint src/ tests/", "lint:fix": "oxlint --fix src/ tests/", "format": "oxfmt \"src/**\" \"tests/**\" \"!tests/tmp/**\" \"!tests/benchmarks/fixtures/**\" \"!src/server/registry/generated-tool-catalog.ts\" --write --no-error-on-unmatched-pattern", "format:check": "oxfmt \"src/**\" \"tests/**\" \"!tests/tmp/**\" \"!tests/benchmarks/fixtures/**\" \"!src/server/registry/generated-tool-catalog.ts\" --check --no-error-on-unmatched-pattern", "test": "node scripts/run-vitest-smart.mjs run", "bench:tools": "node scripts/bench-tools.mjs", "test:e2e": "node scripts/build.mjs && cross-env E2E_TARGET_URL=https://vmoranv.github.io/jshookmcp/ vitest run --config tests/e2e/vitest.e2e.config.ts", "test:e2e:portable": "cross-env E2E_TARGET_URL=https://vmoranv.github.io/jshookmcp/ PUPPETEER_HEADLESS=true vitest run --config tests/e2e/vitest.e2e.config.ts tests/e2e/portable-smoke.e2e.test.ts tests/e2e/process-lifecycle.test.ts", "test:e2e:protocol": "vitest run --config tests/e2e/vitest.e2e.config.ts tests/e2e/protocol-pure-compute.e2e.test.ts", "test:e2e:protocol-runtime": "vitest run --config tests/e2e/vitest.e2e.config.ts tests/e2e/protocol-runtime-assisted.e2e.test.ts", "test:e2e:perf": "cross-env E2E_TARGET_URL=https://vmoranv.github.io/jshookmcp/ E2E_COLLECT_PERFORMANCE=1 vitest run --config tests/e2e/vitest.e2e.config.ts", "test:coverage": "node -e \"require('fs').mkdirSync('coverage/.tmp', { recursive: true })\" && cross-env ENABLE_INJECTION_TOOLS=true COVERAGE_FULL=true node scripts/run-vitest-smart.mjs run --coverage", "prepack": "corepack pnpm run metadata:check && corepack pnpm run build:all", "package:verify-bin": "node scripts/verify-packed-bin.mjs", "package:verify-install": "node scripts/verify-packed-install.mjs", "package:verify-release": "node scripts/verify-release-artifact.mjs", "audit:tools": "tsx scripts/audit-tools.mjs", "audit:runtime": "node scripts/audit-runtime-probes.mjs", "audit:domains": "node scripts/audit-domain-integrity.mjs", "audit:events": "node scripts/audit-event-contracts.mjs", "audit:events:selftest": "node scripts/audit-event-contracts.selftest.mjs", "audit:promises": "node scripts/audit-promise-assertions.mjs", "audit:promises:selftest": "node scripts/audit-promise-assertions.selftest.mjs", "audit:readme-counts": "node scripts/audit-readme-counts.mjs", "audit:readme-counts:selftest": "node scripts/audit-readme-counts.selftest.mjs", "git:refresh-noise": "node scripts/refresh-git-noise.mjs", "check:core": "node scripts/run-check-parallel.mjs", "check": "corepack pnpm run metadata:check && corepack pnpm run openapi:check && corepack pnpm run audit:domains && corepack pnpm run audit:events && corepack pnpm run audit:promises && corepack pnpm run lint && corepack pnpm run format:check && corepack pnpm run check:core", "package": "corepack pnpm pack", "prepublishOnly": "corepack pnpm run check", "hooks:install": "node scripts/postinstall.cjs", "install:full": "corepack pnpm install && corepack pnpm exec camoufox-js fetch", "metadata:sync": "node scripts/generate-metadata.mjs --write", "metadata:check": "node scripts/generate-metadata.mjs --check", "openapi:generate": "node scripts/generate-openapi.mjs", "openapi:check": "node scripts/generate-openapi.mjs --check", "check:docs-format": "corepack pnpm run lint:md", "search:tune": "tsx scripts/search-tune/optimize.ts", "search:tune:report": "tsx scripts/search-tune/report.ts", "search:benchmark-model": "tsx scripts/search-tune/compare-static-model.ts", "bench:coverage": "node scripts/bench-coverage.mjs", "bench:e2e": "node scripts/bench-e2e.mjs", "bench:fetch-fixtures": "node scripts/fetch-bench-fixtures.mjs" }, "dependencies": { "@alexaltea/capstone-js": "^5.0.9", "@babel/generator": "^8.0.6", "@babel/parser": "^8.0.6", "@babel/traverse": "^8.0.6", "@babel/types": "^8.0.6", "@huggingface/tokenizers": "^0.2.0", "@modelcontextprotocol/client": "^2.3.1", "@modelcontextprotocol/core": "^2.3.1", "@modelcontextprotocol/node": "^2.1.1", "@modelcontextprotocol/server": "^2.3.1", "@msgpack/msgpack": "^3.1.3", "diff": "^9.0.0", "dns-packet": "^5.6.1", "dotenv": "^18.0.4", "fast-uri": "^4.1.4", "jsdom": "^30.0.1", "mockttp": "4.4.2", "protobufjs": "8.8.1", "quickjs-emscripten": "^0.32.0", "rebrowser-puppeteer-core": "^24.8.1", "yauzl": "^3.4.0", "zod": "^4.6.7" }, "devDependencies": { "@types/babel__generator": "^7.27.0", "@types/babel__traverse": "^7.28.0", "@types/better-sqlite3": "^9.6.0", "@types/dns-packet": "^5.6.5", "@types/jsdom": "^30.0.0", "@types/node": "^26.6.3", "@vitest/coverage-v8": "^4.1.11", "cross-env": "^10.1.0", "fallow": "^3.30.0", "lefthook": "^2.1.9", "medium-zoom": "^1.1.0", "oxfmt": "^0.70.0", "oxlint": "^1.81.0", "rollup-plugin-visualizer": "^7.0.1", "tinyglobby": "^0.2.17", "tsdown": "^0.23.0", "tsx": "^4.22.4", "typescript": "^7.0.2", "vite": "^8.3.0", "vitepress": "2.0.0-alpha.20", "vitest": "^4.1.11", "vue": "^3.5.43" }, "optionalDependencies": { "@devicefarmer/adbkit": "^4.0.0", "@opentelemetry/api": "^1.10.0", "@opentelemetry/exporter-metrics-otlp-http": "^0.300.0", "@opentelemetry/exporter-trace-otlp-http": "^0.300.0", "@opentelemetry/resources": "^3.0.0", "@opentelemetry/sdk-metrics": "^3.0.0", "@opentelemetry/sdk-trace-base": "^2.12.0", "better-sqlite3": "13.0.3", "camoufox-js": "^0.11.1", "https-proxy-agent": "^9.1.0", "koffi": "^3.3.1", "playwright-core": "^1.61.0", "webcrack": "2.16.0", "z3-solver": "^5.0.0" }, "engines": { "node": "^22.22.2 || ^24.15.0 || >=26.0.0" }, "packageManager": "pnpm@10.33.0", "pnpm": { "overrides": { "hono": ">=4.12.34", "@hono/node-server": "2.0.12", "@puppeteer/browsers": "^3.2.2", "express-rate-limit": "8.3.0", "basic-ftp": ">=5.3.1", "adm-zip": "0.6.1", "body-parser": ">=2.3.0", "brace-expansion": ">=5.0.9", "qs": ">=6.16.0", "minimatch": "10.2.4", "better-sqlite3": "13.0.3", "esbuild": ">=0.28.1", "isolated-vm": "6.1.2", "flatted": ">=3.4.2", "path-to-regexp": "8.4.0", "protobufjs": "8.8.1", "picomatch@^2.0.0": "2.3.2", "picomatch@^4.0.0": "4.0.4", "fast-uri": ">=4.1.3", "ip-address": ">=10.3.1", "postcss": ">=8.5.18", "ws": ">=8.21.0", "@babel/core": ">=7.29.6", "vite": "^8.3.0" }, "onlyBuiltDependencies": [ "better-sqlite3", "esbuild", "koffi", "lefthook", "protobufjs" ] }, "contentPolicy": { "class": "dual-use" }, "mcpName": "io.github.vmoranv/jshookmcp" }