返回资讯中心
外部精选
软件工程
#开发者实时流

Jshook: Open-source MCP server for runtime reverse engineering

A search-first, profile-aware reverse-engineering workspace for AI agents.

Hacker News 最新vmoranv2026/10/17 · 20 天前18 分钟阅读

以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。

A search-first, profile-aware reverse-engineering workspace for AI agents.

Hook the page, capture the network, deobfuscate the bundle, disassemble the WASM, instrument the process — and let one MCP server keep the whole attack surface in reach without drowning the model in schemas.

What's different · Capabilities · Use cases · Highlights · Transport · Registry · Architecture · Build

Documentation · Getting Started · Configuration · Tool Reference

Sponsored by Swiftproxy — Premium Residential Proxies for Web Automation · 10% off code: PROXY90

Most MCP servers for JS analysis expose a handful of hand-rolled tools or wrap a single browser engine. jshook is closer to an operating system for front-end reverse engineering — 36 self-discovered domains, a search-first meta-tool that keeps token cost under control, and runtime recovery that survives broken pages and dropped sessions:

A scan of what's in the box. Each row links to the detailed Capability overview below.

Scenario What you do Domains involved

Skim a minified bundle search_tools → deobfuscate → search_in_scripts → understand_code core

Reverse a CAPTCHA challenge Drive a Camoufox page → screenshot → solve with explicit input → replay browser, canvas

Capture and replay an OAuth flow proxy_start (auto CA) → network_get_requests → graphql_introspect → graphql_replay proxy, network, graphql

Reverse a WASM crypto routine wasm_dump → wasm_disassemble → generate_hooks → memory_breakpoint wasm, binary-instrument, memory

Triage a suspicious APK apk_static_triage → apk_manifest_dump → jadx_decompile → dex_scan_file binary-instrument

Recover a dropped browser session Reconnect Streamable HTTP → restore activated domains and browser state browser, coordination

Audit a Node process for credentials process_list → memory_scan_filtered → binary_strings_extract process, memory, binary-instrument

Build a custom workflow list_extension_workflows → run_extension_workflow workflow, extension-registry

Hook a function in a live process frida_spawn → frida_attach_interceptor → frida_run_script → frida_enumerate_functions binary-instrument

Quick start

No global install needed — add to your MCP client config and you're ready.

Claude Desktop / Cursor (claude_desktop_config.json):

{ "mcpServers": { "jshook": { "command": "npx", "args": ["-y", "@jshookmcp/jshook@latest"], "env": { "MCP_TOOL_PROFILE": "search", "npm_config_omit": "optional" } } } }

(Windows: use npx.cmd absolute path if npx is not found.)

This lightweight configuration skips optional ONNX, Z3, Binaryen, Camoufox, and Playwright packages. Remove npm_config_omit when those full-profile runtimes are required.

The default stdio configuration starts one full jshook process per MCP host. To share the embedding model, browser runtime, and caches, start one local Streamable HTTP daemon:

pnpm build pnpm daemon

Vector search defaults to off for per-client stdio processes and on (lazy-loaded) for the shared HTTP daemon. Set SEARCH_VECTOR_ENABLED=false when lexical search is sufficient.

Then point every MCP client at http://127.0.0.1:3000/mcp using its HTTP/URL server configuration. Each client receives its own MCP session and response route while heavyweight runtime resources remain in one process. Keep the default loopback bind; set MCP_AUTH_TOKEN before exposing the endpoint beyond localhost.

{ "env": { "MCP_TOOL_PROFILE": "search" // start here, ~3K tokens of metadata } }

Switch MCP_TOOL_PROFILE to workflow once you start chaining composite scripts, or to full when you need every tool. coverage_report shows the active set on demand.

Profile ladder. Start in search (~3K tokens of metadata); promote to workflow when chaining composite scripts; escalate to full only when every tool is actually needed. coverage_report shows what's active on demand.

Meta tools. describe_tool returns the JSON Schema; call_tool validates arguments before invocation; every tool ships with readOnlyHint / destructiveHint / idempotentHint / openWorldHint.

Browser automation. Chromium and Camoufox via CDP, attach to existing targets, anti-detection presets, popup/download/permission interceptors, explicit-input CAPTCHA solver, JS/CSS injection at three document phases, persisted coverage across reconnects.

Network interception. Auto-generated HTTPS interception CA, HTTP/1.1 + HTTP/2 frame building, WebSocket capture, GraphQL helpers, Burp Suite bridge — all on the same MCP tool surface.

Reverse engineering. wabt WASM disassembly (wasm2wat / wasm-decompile / wasm-objdump) and Binaryen wasm-opt, Frida/Ghidra/IDA bridges, hardware breakpoints, native FFI scanning, PE introspection, syscall hooking, AST transforms, source-map reconstruction.

Session recovery. Streamable HTTP transport restores activated domains, browser attach state, and coverage state after reconnects; browser-side state is isolated per client.

Plugins and workflows. Drop a directory, get a domain. Write a YAML pipeline, run it as one tool. The registry self-discovers.

Transport and deployment

The server supports two transports out of the box.

Both transports expose the same tool surface. coverage_report shows which domains are activated in each session — long-running sessions restore browser attach state, coverage state, and tool activations across reconnects.

For production deployments see the Security and Production guide.

HTTP transport now multiplexes independent MCP sessions and restores runtime state after reconnects.

proxy_start auto-generates a local HTTPS interception CA when needed.

Browser CAPTCHA solving is now explicit-input driven: pass taskKind, siteKey, imageBase64, callbackName, and responseSelector as needed. Built-in widget/page signature probing is intentionally not used.

Registry snapshot

The built-in surface below is generated from the runtime registry and checked in CI.

Runtime registry — domains auto-discovered via manifest.ts; add a domain by creating one file.

Lazy initialization — handlers instantiated on first call, not at startup.

BM25 + vector search — search_tools meta-tool with hybrid ranking and adaptive weights.

MCP ToolAnnotations — every tool carries readOnlyHint / destructiveHint / idempotentHint / openWorldHint.

Profile ladder — search (~3K tokens) → workflow (composite scripts) → full (all 735 tools).

Transport symmetry — stdio and Streamable HTTP expose the same surface; sessions are isolated per client.

See the Architecture guide and Configuration reference for the canonical details.

Requirements: Node.js 22.22.2+, pnpm 10.x.

pnpm install pnpm build pnpm start # run the built server from dist/ pnpm dev # run from source under tsx watch pnpm check # drift guards (metadata + openapi + domain + event contracts) + lint + format check + typecheck + unit tests pnpm test # Vitest unit suites pnpm test:e2e # end-to-end browser/tooling suites pnpm daemon # run the Streamable HTTP daemon after build

Native helpers are bundled via pnpm build; on first run the server may download optional runtimes (ONNX, Z3, Binaryen, Camoufox, Playwright) depending on the profile.

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →