JsHookMcp
El kit de herramientas de hook js que todo lo que necesitas
Documentación
@jshookmcp/jshook
Un espacio de trabajo de ingeniería inversa, centrado en la búsqueda y consciente del perfil, para agentes de IA.
Engancha la página, captura la red, desofusca el bundle, desensambla el WASM, instrumenta el proceso — y deja que un solo servidor MCP mantenga toda la superficie de ataque al alcance sin ahogar al modelo en esquemas.
English · 中文
Qué hace diferente · Capacidades · Casos de uso · Aspectos destacados · Transporte · Registro · Arquitectura · Compilación
Documentación · Primeros pasos · Configuración · Referencia de herramientas
Patrocinado por Swiftproxy
— Proxies residenciales premium para automatización web · Código de descuento del 10%: PROXY90
Qué hace diferente a jshook
La mayoría de los servidores MCP para análisis de JS exponen un puñado de herramientas hechas a mano o envuelven un único motor de navegador. jshook está más cerca de un sistema operativo para la ingeniería inversa de front-end — 36 dominios autodescubiertos, una meta-herramienta centrada en la búsqueda que mantiene el costo de tokens bajo control, y recuperación en tiempo de ejecución que sobrevive a páginas rotas y sesiones caídas:
- Centrado en la búsqueda, consciente del perfil. El perfil
searchcarga alrededor de 3K tokens de metadatos de herramientas; el perfilfullexpone las 735 herramientas completas con alrededor de 109K tokens (medido el 2026-10-10 — esta cifra escala con el número de herramientas, así que vuelve a medirla cuando el catálogo crezca). Los agentes se mueven entre ellos a medida que la tarea crece —search→workflow→full— en lugar de ahogarse en esquemas desde el primer turno. - Recuperación en tiempo de ejecución y aislamiento de sesión. Las sesiones HTTP transmisibles restauran los dominios activados, el estado de adjunto del navegador y el estado de cobertura después de reconexiones; el estado del lado del navegador por cliente permanece aislado para que dos agentes no puedan pisarse las sesiones CDP entre sí.
- Automatización de navegador de pila completa. Chromium y Camoufox vía CDP con anti-detección, un solucionador de CAPTCHA de entrada explícita (sin sondeo de página/características integrado), una CA de intercepción HTTPS autofirmada bajo demanda, y construcción de tramas HTTP/2.
- Ingeniería inversa real, no búsquedas de cadenas. Desensamblado WASM vía wabt (
wasm2wat/wasm-decompile/wasm-objdump), puentes Frida/Ghidra/IDA, escaneo FFI nativo, puntos de interrupción de hardware, introspección PE, puentes proxy GraphQL/Burp Suite, y transformaciones AST — ni una sola llamada regex envuelta como herramienta. - Extensibilidad dinámica. Plugins con recarga en caliente, flujos de trabajo declarativos y autodescubrimiento mantienen el servidor creciendo sin necesidad de redesplegar.
Resumen de capacidades
Un vistazo a lo que hay en la caja. Cada fila enlaza al Resumen de capacidades detallado más abajo.
| Área | Aspectos destacados |
|---|---|
| Perfiles de herramientas | search (~3K tokens, ranking BM25 + vectorial híbrido) · workflow (scripts compuestos) · full (las 735 herramientas) |
| Automatización de navegador | Chromium y Camoufox · adjunto CDP a objetivos existentes · ajustes preestablecidos de anti-detección · solucionador de CAPTCHA de entrada explícita · interceptores de ventanas emergentes, descargas, permisos y protocolo |
| Intercepción de red | Construcción de tramas HTTP/1.1 + HTTP/2 · proxy MITM con CA autogenerada · captura de WebSocket · ayudantes de introspección GraphQL · puente Burp Suite |
| Hooks JS y análisis | Desofuscación impulsada por LLM · detección de rutinas criptográficas · comprensión AST · reconstrucción de source-map · extracción y reproducción de scripts/scriptlets |
| Ingeniería inversa WASM | Desensamblado wabt / transpilación C (wasm2wat / wasm-decompile / wasm-objdump / wasm2c) · Binaryen wasm-opt · analizador de secciones puro en TS · listado de importaciones/exportaciones · extracción de cadenas agrupadas por sección con recuperación de tabla de nombres · diff binario a nivel de función · detección de ofuscación · instrumentación a nivel de función y bloque básico |
| Forense de procesos y memoria | Escaneo FFI nativo · grafos de referencias cruzadas · puntos de interrupción de hardware · introspección PE · adjunto a procesos en vivo · lectura/escritura de memoria con guardas de región |
| Instrumentación binaria | Puente Frida · puentes Ghidra e IDA · hooking de syscalls · keylog TLS y herramientas de sesión · análisis Mojo IPC |
| Análisis de Android y APK | Triage estático de APK · volcado y consulta de manifiesto · decodificación/compilación apktool · descompilación jadx y búsqueda de código · escaneo DEX · listado de librerías nativas · firma de APK · emulación unidbg · volcado DEX en tiempo de ejecución |
| Runtime nativo | Emulador nativo para muestras de arquitectura extranjera · introspección de plataforma · Mojo IPC · Dart Inspector · puente ADB para tráfico en dispositivo |
| Codificación y transformación | Codificadores URL/Base64/Hex/JWT/Protobuf · transformaciones AST · pipelines de decodificación en streaming |
| Coordinación | Cola de tareas en segundo plano con progreso, cancelación y modos asíncronos · coordinación multi-agente · informes de cobertura |
| Meta-herramientas schema-first | describe_tool · call_tool con validación de argumentos · coverage_report · search_tools |
| Registro de extensiones conectables | Plugins con recarga en caliente · flujos de trabajo declarativos · dominios autodescubiertos |
Casos de uso
| Escenario | Qué haces | Dominios involucrados |
|---|---|---|
| Hojear un bundle minificado | search_tools → deobfuscate → search_in_scripts → understand_code | core |
| Revertir un desafío CAPTCHA | Conducir una página Camoufox → captura de pantalla → resolver con entrada explícita → reproducir | browser, canvas |
| Capturar y reproducir un flujo OAuth | proxy_start (CA automática) → network_get_requests → graphql_introspect → graphql_replay | proxy, network, graphql |
| Revertir una rutina criptográfica WASM | wasm_dump → wasm_disassemble → generate_hooks → memory_breakpoint | wasm, binary-instrument, memory |
| Hacer triage de un APK sospechoso | apk_static_triage → apk_manifest_dump → jadx_decompile → dex_scan_file | binary-instrument |
| Recuperar una sesión de navegador caída | Reconectar HTTP transmisible → restaurar dominios activados y estado del navegador | browser, coordination |
| Auditar un proceso Node en busca de credenciales | process_list → memory_scan_filtered → binary_strings_extract | process, memory, binary-instrument |
| Construir un flujo de trabajo personalizado | list_extension_workflows → run_extension_workflow | workflow, extension-registry |
| Enganchar una función en un proceso en vivo | frida_spawn → frida_attach_interceptor → frida_run_script → frida_enumerate_functions | binary-instrument |
Inicio rápido
No se necesita instalación global — añádelo a la configuración de tu cliente MCP y listo.
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: usa la ruta absoluta npx.cmd si npx no se encuentra.)
Esta configuración ligera omite los paquetes opcionales ONNX, Z3, Binaryen, Camoufox y Playwright.
Elimina npm_config_omit cuando se requieran esos runtimes de perfil completo.
Compartir un daemon entre múltiples agentes
La configuración stdio predeterminada inicia un proceso jshook completo por host MCP. Para compartir el modelo de embeddings, el runtime del navegador y las cachés, inicia un daemon HTTP transmisible local:
pnpm build
pnpm daemon
La búsqueda vectorial está desactivada por defecto para procesos stdio por cliente y activada (carga diferida) para el
daemon HTTP compartido. Establece SEARCH_VECTOR_ENABLED=false cuando la búsqueda léxica sea suficiente.
Luego apunta cada cliente MCP a http://127.0.0.1:3000/mcp usando su configuración de servidor HTTP/URL.
Cada cliente recibe su propia sesión MCP y ruta de respuesta mientras los recursos de runtime pesados
permanecen en un solo proceso. Mantén el enlace de loopback predeterminado; establece MCP_AUTH_TOKEN
antes de exponer el endpoint más allá de localhost.
Promover un perfil a medida que la tarea crece
{
"env": {
"MCP_TOOL_PROFILE": "search" // start here, ~3K tokens of metadata
}
}
Cambia MCP_TOOL_PROFILE a workflow una vez que empieces a encadenar scripts compuestos, o a full
cuando necesites todas las herramientas. coverage_report muestra el conjunto activo bajo demanda.
Aspectos destacados
- Escalera de perfiles. Comienza en
search(~3K tokens de metadatos); promueve aworkflowal encadenar scripts compuestos; escala afullsolo cuando cada herramienta sea realmente necesaria.coverage_reportmuestra lo que está activo bajo demanda. - Meta-herramientas.
describe_tooldevuelve el JSON Schema;call_toolvalida argumentos antes de la invocación; cada herramienta incluyereadOnlyHint/destructiveHint/idempotentHint/openWorldHint. - Automatización de navegador. Chromium y Camoufox vía CDP, adjunto a objetivos existentes, ajustes preestablecidos de anti-detección, interceptores de ventanas emergentes/descargas/permisos, solucionador de CAPTCHA de entrada explícita, inyección JS/CSS en tres fases del documento, cobertura persistente entre reconexiones.
- Intercepción de red. CA de intercepción HTTPS autogenerada, construcción de tramas HTTP/1.1 + HTTP/2, captura de WebSocket, ayudantes GraphQL, puente Burp Suite — todo en la misma superficie de herramientas MCP.
- Ingeniería inversa. Desensamblado WASM wabt (
wasm2wat/wasm-decompile/wasm-objdump) y Binaryenwasm-opt, puentes Frida/Ghidra/IDA, puntos de interrupción de hardware, escaneo FFI nativo, introspección PE, hooking de syscalls, transformaciones AST, reconstrucción de source-map. - Recuperación de sesión. El transporte HTTP transmisible restaura dominios activados, estado de adjunto del navegador y estado de cobertura después de reconexiones; el estado del lado del navegador está aislado por cliente.
- Plugins y flujos de trabajo. Coloca un directorio, obtén un dominio. Escribe un pipeline YAML, ejecútalo como una herramienta. El registro se autodescubre.
Transporte y despliegue
El servidor soporta dos transportes listos para usar.
| Transporte | Cuándo usarlo | Notas |
|---|---|---|
| stdio | Predeterminado para Claude Desktop, Cursor y otros clientes de un solo host | Un proceso completo por host MCP; se recomienda el perfil ligero |
| HTTP transmisible | Múltiples agentes compartiendo el modelo de embeddings, el runtime del navegador y las cachés | Enlace de loopback por defecto; establece MCP_AUTH_TOKEN antes de exponer externamente |
Ambos transportes exponen la misma superficie de herramientas. coverage_report muestra qué dominios están
activados en cada sesión — las sesiones de larga duración restauran el estado de adjunto del navegador, el estado de cobertura
y las activaciones de herramientas entre reconexiones.
Para despliegues de producción consulta la Guía de seguridad y producción.
Notas recientes del runtime
- El transporte HTTP ahora multiplexa sesiones MCP independientes y restaura el estado del runtime después de reconexiones.
proxy_startautogenera una CA de intercepción HTTPS local cuando es necesario.- La resolución de CAPTCHA del navegador ahora está impulsada por entrada explícita: pasa
taskKind,siteKey,imageBase64,callbackNameyresponseSelectorsegún sea necesario. El sondeo integrado de firmas de widgets/páginas no se utiliza intencionalmente.
Instantánea del registro
La superficie integrada a continuación se genera a partir del registro del runtime y se verifica en CI.
- Versión del paquete:
0.4.2 - Herramientas integradas:
735 - Dominios:
adb-bridge,binary-instrument,browser,canvas,coordination,core,cross-domain,dart-inspector,debugger,encoding,exploit-dev,extension-registry,graphql,instrumentation,maintenance,memory,mojo-ipc,native-bridge,native-emulator,network,platform,process,protocol-analysis,proxy,session,sourcemap,streaming,syscall-hook,tasks,tls-inspector,trace,transform,v8-inspector,wasm,webgpu,workflow - Nota: esta instantánea se genera desde el registro en tiempo de ejecución; no edites los recuentos manualmente.
Arquitectura
- Registro en tiempo de ejecución — dominios auto-descubiertos mediante
manifest.ts; agrega un dominio creando un archivo. - Inicialización diferida — los manejadores se instancian en la primera llamada, no al inicio.
- Búsqueda BM25 + vectorial —
search_toolsmeta-herramienta con clasificación híbrida y pesos adaptativos. - MCP
ToolAnnotations— cada herramienta llevareadOnlyHint/destructiveHint/idempotentHint/openWorldHint. - Escalera de perfiles —
search(~3K tokens) →workflow(scripts compuestos) →full(las 735 herramientas). - Simetría de transporte — stdio y Streamable HTTP exponen la misma superficie; las sesiones están aisladas por cliente.
Consulta la Guía de arquitectura y la Referencia de configuración para los detalles canónicos.
Compilar desde el código fuente
Requisitos: 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
Los ayudantes nativos se agrupan mediante pnpm build; en la primera ejecución, el servidor puede descargar
tiempos de ejecución opcionales (ONNX, Z3, Binaryen, Camoufox, Playwright) según el perfil.