Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ghidra-mcp — Servidor MCP que conecta la ingeniería inversa de Ghidra con herramientas de IA: 256 herramientas para descompilación, emulación P-code, depuración en vivo, análisis de flujo de datos, operaciones por lotes y aplicación de convenciones en modos headless y GUI. | Kitploit
Herramientas/GitHubGitHub/bethington/ghidra-mcp
Análisis EstáticoAnálisis Dinámico (Sandboxing)Ingeniería InversaScripting y AutomatizaciónDepuradoresFuzzingUtilidades y FrameworksAnálisis de BinariosAprendizaje y EducaciónReversing Asistido por IA
GitHubbethington/ghidra-mcp
3.3k97hace 9 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

ghidra-mcp

Servidor MCP que conecta la ingeniería inversa de Ghidra con herramientas de IA: 256 herramientas para descompilación, emulación P-code, depuración en vivo, análisis de flujo de datos, operaciones por lotes y aplicación de convenciones en modos headless y GUI.

Ver Repositorio

Ghidra MCP Server

Tests Release License GitHub Sponsors

Python Java Ghidra MCP

Stars Last commit Discussions Issues OpenSSF Scorecard

Si te resulta útil, por favor ⭐ da una estrella al repositorio — ¡ayuda a que otros lo descubran!

Si Ghidra MCP te ahorra tiempo, considera patrocinar el proyecto. Tanto el apoyo único como el recurrente ayudan a financiar actualizaciones de compatibilidad, endurecimiento para producción, documentación y nuevas herramientas.

Un servidor Model Context Protocol (MCP) listo para producción que une las potentes capacidades de ingeniería inversa de Ghidra con herramientas modernas de IA y marcos de automatización. 271 herramientas MCP, flujos de trabajo de IA probados en batalla, y la integración Ghidra-MCP más completa disponible — incluyendo emulación P-code, integración con depurador en vivo y análisis de flujo de datos con PCode-graph.

¿Por qué Ghidra MCP?

La mayoría de las implementaciones de Ghidra MCP ofrecen un puñado de herramientas de solo lectura y ya está. Este proyecto es diferente — fue construido por un ingeniero inverso que lo usa a diario en binarios reales, no como demostración.

  • 271 herramientas MCP — 3 veces más que cualquier implementación competidora. No solo operaciones de lectura — acceso completo de escritura para renombrar, tipar, comentar, crear estructuras, ejecutar scripts, emulación P-code y depuración en vivo.
  • Flujos de trabajo de IA probados en batalla — Flujos de trabajo de documentación probados (V5) refinados a lo largo de cientos de funciones. Incluye indicaciones paso a paso, referencia de notación húngara, guías de procesamiento por lotes y descubrimiento de código huérfano.
  • Fiabilidad de grado de producción — Transacciones atómicas, operaciones por lotes (reducción del 93% de llamadas API), tiempos de espera configurables y manejo elegante de errores. Sin fallos silenciosos.
  • Transferencia de documentación entre binarios — Coincidencia de hash SHA-256 de funciones propaga documentación entre versiones de binarios automáticamente. Documenta una vez, aplica en todas partes.
  • Integración completa con Servidor Ghidra — Conéctate a servidores Ghidra compartidos, gestiona repositorios, control de versiones, flujos de trabajo de checkout/checkin y colaboración multiusuario.
  • Modos headless y GUI — Ejecuta con o sin la interfaz gráfica de Ghidra. Preparado para Docker para pipelines CI/CD y análisis automatizado a escala.
  • Diseñado con opinión por diseño — v5.0 traslada las convenciones de nombres, seguridad de tipos y estándares de documentación a la capa de herramientas. Los agentes de IA y los ingenieros humanos producen resultados consistentes sin guías de estilo en cada indicación.

Cumplimiento de convenciones

Te ha pasado: seis meses en un proyecto encuentras ProcessItem, process_items, handleItem, y ItemProc en la misma base de código — cuatro funciones haciendo lo mismo, nombradas por cuatro sesiones o ingenieros diferentes sin un contrato compartido. Arreglarlo lleva más tiempo del necesario, y el problema volverá a ocurrir.

v5.0 traslada las convenciones de "cosas para recordar" a la capa de herramientas, donde pueden ser realmente aplicadas.

Para agentes de IA, esto significa resultados consistentes en cada sesión, cada modelo, cada ejecución — sin pegar una guía de estilo en cada indicación. La herramienta conoce las reglas; el modelo solo necesita tomar la decisión.

Para equipos, elimina toda la clase de comentarios de revisión que dicen "esa no es nuestra convención de nombres". El arbitraje de convenciones permanece en la herramienta, no en la revisión de código.

Para trabajo en solitario a escala, analyze_function_completeness te da una puntuación del 0–100% que mide honestamente: las deducciones estructurales (artefactos del compilador no solucionables) se perdonan en tu puntuación efectiva, el escalado logarítmico evita que una categoría mala entierre todo lo demás, y la calidad de los comentarios por niveles significa que sabes exactamente qué falta y por qué.

🌟 Características

Integración MCP principal

  • Compatibilidad total MCP — Implementación completa del Model Context Protocol
  • 271 herramientas MCP — Superficie API exhaustiva que cubre cada aspecto del análisis binario
  • Fiabilidad de grado de producción — Transacciones atómicas, operaciones por lotes, tiempos de espera configurables
  • Análisis en tiempo real — Integración en vivo con el motor de análisis de Ghidra

Nota de compatibilidad: Los nombres de las herramientas MCP están normalizados para la CLI de GitHub Copilot y la validación CAPI. Los nombres de herramientas expuestos usan solo letras minúsculas, dígitos, guiones bajos y guiones; las rutas HTTP anidadas como /debugger/status se anuncian como nombres como debugger_status_2 cuando es necesario para evitar colisiones con herramientas puente estáticas.

Capacidades de análisis binario

  • Análisis de funciones — Descompilación, grafos de llamadas, referencias cruzadas, puntuación de completitud
  • Análisis de flujo de datos — Propagación de valores PCode-graph (hacia adelante / atrás) desde cualquier variable o registro
  • Descubrimiento de estructuras de datos — Creación de struct/union/enum con análisis de campos y sugerencias de nombres
  • Extracción de cadenas — Búsqueda regex, filtrado de calidad y descubrimiento de funciones ancladas a cadenas
  • Análisis de importación/exportación — Tablas de símbolos, ubicaciones externas, resolución de importaciones ordinales
  • Inspección de memoria y datos — Lecturas de memoria sin procesar, búsqueda de patrones de bytes, detección de límites de arrays
  • Documentación entre binarios — Coincidencia de hash de funciones y propagación de documentación entre versiones

Análisis dinámico (v5.4.0)

  • Emulación P-code — Ejecuta cualquier función de forma aislada mediante EmulatorHelper de Ghidra; resuelve hashes API por fuerza bruta en milisegundos
  • Integración con depurador en vivo — 17 endpoints Java + 22 herramientas puente Python sobre el framework TraceRmi de Ghidra (dbgeng en Windows PE, gdb/lldb en otros casos): adjuntar, paso a paso, puntos de interrupción, registros, lecturas de memoria, trazado de funciones sin interrupción, traducción de direcciones estática↔dinámica consciente de ASLR

Flujos de trabajo de ingeniería inversa potenciados por IA

  • Flujo de trabajo de documentación de funciones V5 — Proceso de 7 pasos para documentación completa de funciones con notación húngara, auditoría de tipos y puntuación de verificación automatizada
  • Documentación por lotes — Despacho de subagentes paralelo para documentar múltiples funciones simultáneamente
  • Descubrimiento de código huérfano — Escáner automatizado encuentra funciones no descubiertas en huecos entre código conocido
  • Investigación de tipos de datos — Flujos de trabajo sistemáticos para descubrimiento de estructuras y análisis de campos
  • Coincidencia entre versiones — Coincidencia de funciones basada en hash entre diferentes versiones de binarios

Desarrollo y automatización

  • Gestión de scripts de Ghidra — Crear, ejecutar, actualizar y eliminar scripts de Ghidra completamente a través de MCP
  • Soporte multiprograma — Cambiar entre y comparar múltiples programas abiertos
  • Operaciones por lotes — Renombrado, comentado, tipado y gestión de etiquetas masivos (93% menos llamadas API)
  • Servidor headless — Análisis completo sin interfaz gráfica de Ghidra — listo para Docker y CI/CD
  • Control de proyectos y versiones — Crear proyectos, gestionar archivos, integración con Servidor Ghidra
  • Control de análisis — Listar, configurar y ejecutar analizadores de Ghidra mediante programación

🚀 Inicio rápido

Requisitos previos

  • Java 21 LTS (OpenJDK recomendado)
  • Apache Maven 3.9+
  • Ghidra 12.1.2 (o versión compatible)
  • Python 3.10+ con uv (recomendado) o pip + venv

Usuarios de Servidor Ghidra compartido: los clientes Ghidra 12.1.2 requieren un Servidor Ghidra en versión 12.1, 12.0.5, o una versión compatible más reciente. Actualiza el servidor antes de usar este plugin desde un cliente 12.1.

Ghidra 12.1.2 incluye Jython como extensión opcional. Los scripts Java funcionan por defecto, pero los scripts .py en ghidra_scripts/ requieren instalar la extensión Jython desde File > Install Extensions y reiniciar Ghidra.

Instalación

Recomendado para todas las plataformas: usa python -m tools.setup directamente.

ensure-prereqs instala los requisitos de Python en tiempo de ejecución más los JARs de Ghidra necesarios en el repositorio Maven local. deploy copia la compilación de salida, instala la extensión de perfil de usuario y parchea la configuración de usuario de Ghidra.

  1. Clonar el repositorio: ```bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp
    root@kitploit:~
  2. Recomendado: ejecute primero la verificación previa del entorno: ```text python -m tools.setup preflight --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
    root@kitploit:~
  3. Construir y desplegar en Ghidra: ```text python -m tools.setup ensure-prereqs --ghidra-path "F:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
    root@kitploit:~

deploy guarda/cierra una instancia de Ghidra coincidente que ya se está ejecutando cuando sea necesario, instala la extensión, inicia Ghidra, espera la salud de MCP y ejecuta comprobaciones rápidas de esquema.

  1. Modo estricto/manual opcional (avanzado): ```text

    Skip automatic prerequisite setup

    python -m tools.setup build python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
    root@kitploit:~
  2. Mostrar ayuda del comando: ```text python -m tools.setup --help
    root@kitploit:~
  3. Modo opcional solo de compilación (avanzado/solución de problemas): ```text python -m tools.setup build
    root@kitploit:~

Ruta de compilación compatible: python -m tools.setup build usa Maven internamente y es el flujo de trabajo canónico utilizado por las tareas del repositorio y la documentación. ```bash

Manual Maven build (requires Ghidra deps already installed in local .m2)

mvn clean package assembly:single -DskipTests

root@kitploit:~
## Ligero y Extensible
- Dependencias mínimas: Solo usa la biblioteca estándar de `Python` cuando es posible, bibliotecas de terceros opcionales.
- Arquitectura de plugins: Amplía la funcionalidad con plugins personalizados para tareas únicas.   ```bash
# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension

Instalación (Linux — Ubuntu/Debian)

  1. Clonar el repositorio: ```bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp
    root@kitploit:~
  2. Instalar los requisitos previos del sistema (si aún no están instalados): ```bash sudo apt update && sudo apt install -y openjdk-21-jdk maven python3 python3-pip python3-venv curl jq unzip
    root@kitploit:~

Nota para Debian/Kali/Ubuntu 23.04+ (PEP 668): estas distribuciones marcan el Python del sistema como gestionado externamente, por lo que un simple pip install falla con error: externally-managed-environment. No lo evites con --break-system-packages — puede corromper herramientas gestionadas por apt. En su lugar usa uv (recomendado — crea y gestiona automáticamente un .venv local del proyecto, y es lo que usan los comandos de este repositorio):

root@kitploit:~
curl -LsSf https://astral.sh/uv/install.sh | sh
uv run bridge-mcp-ghidra    # resuelve dependencias en .venv e inicia el puente

o un entorno virtual clásico:

root@kitploit:~
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
  1. Ejecutar preconfiguración del entorno: ```bash python -m tools.setup preflight --ghidra-path ~/ghidra_12.1.2_PUBLIC
    root@kitploit:~
  2. Construir y desplegar en Ghidra (comando único): ```bash python -m tools.setup ensure-prereqs --ghidra-path ~/ghidra_12.1.2_PUBLIC python -m tools.setup build python -m tools.setup deploy --ghidra-path ~/ghidra_12.1.2_PUBLIC
    root@kitploit:~

Esto hará:

  • Instalar las dependencias JAR de Ghidra en tu ~/.m2/repository local
  • Compilar GhidraMCP-<version>.zip con Maven
  • Extraer la extensión a ~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/
  • Actualizar preferences con LastExtensionImportDirectory
  • Instalar los requisitos de Python
  1. Opcional: configurar solo dependencias de Maven: ```bash python -m tools.setup install-ghidra-deps --ghidra-path ~/ghidra_12.1.2_PUBLIC
    root@kitploit:~
  2. Mostrar ayuda del comando: ```bash python -m tools.setup --help
    root@kitploit:~

Rutas de Linux: La extensión se instala en $HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/. Los archivos de configuración de Ghidra están en $HOME/.config/ghidra/ghidra_<version>_PUBLIC/.

Instalación (macOS — Homebrew)

  1. Instalar requisitos previos: ```bash brew install openjdk@21 maven python ghidra
    root@kitploit:~
  2. Clonar el repositorio: ```bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp
    root@kitploit:~
  3. Instalar los JARs de Ghidra en Maven local: ```bash python -m tools.setup install-ghidra-deps
    --ghidra-path /opt/homebrew/opt/ghidra/libexec
    root@kitploit:~
  4. Construir e implementar: ```bash python -m tools.setup ensure-prereqs
    --ghidra-path /opt/homebrew/opt/ghidra/libexec python -m tools.setup build python -m tools.setup deploy
    --ghidra-path /opt/homebrew/opt/ghidra/libexec
    root@kitploit:~

La extensión se instala en ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.

Nota: --ghidra-version es necesario al usar la ruta de Homebrew porque la ruta no contiene una cadena de versión.

  1. Inicie Ghidra y habilite el complemento: ```bash /opt/homebrew/opt/ghidra/libexec/ghidraRun
    root@kitploit:~

En la ventana principal del proyecto: Tools > GhidraMCP > Start MCP Server

  1. Configurar Cursor/Claude MCP (~/.cursor/mcp.json): ```json { "mcpServers": { "ghidra": { "command": "uv", "args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"] } } }
    root@kitploit:~

Instalación (Arch Linux — AUR)

@Pandoriaantje mantiene los paquetes comunitarios de AUR:

  • ghidra-mcp-git — sigue la rama main
  • ghidra-mcp — sigue las versiones etiquetadas

Instálelo con su ayudante de AUR preferido, por ejemplo:

root@kitploit:~
yay -S ghidra-mcp-git
# or
paru -S ghidra-mcp
``````bash
yay -S ghidra-mcp        # or ghidra-mcp-git

Uso Básico

Opción 1: Transporte Stdio (Recomendado para herramientas de IA)```bash

uv run bridge-mcp-ghidra # or: python -m bridge_mcp_ghidra

root@kitploit:~
Para agregar el puente a [Autohand Code](https://github.com/autohandai/code-cli/) desde un checkout clonado:```bash
autohand mcp add ghidra uv run --directory /path/to/ghidra-mcp bridge-mcp-ghidra

Agrega --scope project antes de ghidra para guardar el servidor en la configuración .autohand del proyecto actual en lugar de la configuración de usuario.

Opción 2: Streamable HTTP Transport (Recomendado para clientes web/HTTP)```bash

uv run bridge-mcp-ghidra --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081

root@kitploit:~
Configuración del cliente MCP para el transporte HTTP (agregar al archivo de configuración MCP de su cliente):```json
{
  "mcpServers": {
    "ghidra-mcp-http": {
      "url": "http://127.0.0.1:8081/mcp"
    }
  }
}

Clientes basados en navegador (ej. MCP Inspector) funcionan sin configuración adicional: los transportes HTTP responden a las solicitudes de preflight CORS (OPTIONS) y exponen los encabezados mcp-session-id / mcp-protocol-version a los scripts. Los orígenes permitidos siguen la política del encabezado Host — el loopback en cualquier puerto siempre está permitido, además del host de enlace y cualquier host listado en GHIDRA_MCP_ALLOWED_HOSTS.

Opción 3: Transporte SSE (Obsoleto — use streamable-http en su lugar)```bash

uv run bridge-mcp-ghidra --transport sse --mcp-host 127.0.0.1 --mcp-port 8081

root@kitploit:~
#### Banderas avanzadas del puente

| Indicador | Valor predeterminado | Descripción |
|-----------|---------------------|-------------|
| `--transport` | `stdio` | `stdio` (herramientas de IA), `streamable-http` (clientes web), `sse` (obsoleto) |
| `--mcp-host` | `127.0.0.1` | Host de enlace para transportes HTTP |
| `--mcp-port` | — | Puerto para transportes HTTP |
| `--lazy` | off | Carga solo los grupos de herramientas predeterminados al conectar. Inicio más rápido, pero los clientes MCP que no soportan `tools/list_changed` verán una lista de herramientas incompleta. No recomendado para Claude Code. |
| `--no-lazy` | (default) | Carga todos los grupos de herramientas inmediatamente al conectar. Requerido para la mayoría de los clientes de IA. |
| `--default-groups` | `listing,function,program` | Grupos separados por comas cargados al conectar cuando se establece `--lazy`. |

#### Enrutamiento estricto de programas (seguridad multiprograma)

Establece `GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1` para que el puente rechace cualquier llamada con ámbito de programa que omita un selector de programa, devolviendo un error claro en lugar de permitir que la llamada utilice el "programa actual" compartido del servidor (el que mueven `switch_program` y la pestaña activa de la GUI).```bash
export GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1
uv run bridge-mcp-ghidra

Sin esto, una llamada que omita program= se ejecuta contra el programa que esté activo, lo cual está bien para un flujo de trabajo con un solo programa, pero es un riesgo una vez que varios programas están abiertos: la llamada puede leer o editar el binario equivocado sin error. El riesgo es peor cuando más de un cliente comparte un servidor, ya que cada uno mueve la variable global del programa actual por debajo de los demás.

Con el modo estricto activado, cada llamada con ámbito de programa debe nombrar su objetivo. Esto cubre todo selector que elija un programa abierto: el simple program= y los source_program/target_program o program_a/program_b de las herramientas entre programas (declarados como obligatorios, pero el servidor aún recurre al programa actual cuando uno llega vacío). Un selector olvidado se manifiesta como un error ruidoso en la primera llamada incorrecta en lugar de una escritura silenciosa en el binario equivocado. Las herramientas sin selector de programa (open_program y close_program toman path/name) no se ven afectadas. Desactivado por defecto: con la variable sin establecer, el puente envía las llamadas sin cambios.

Reducción de la sobrecarga del contexto de herramientas

El puente expone un catálogo grande. Para mantener pequeña la superficie de herramientas del modelo, ejecuta con --lazy (carga solo listing,function,program al conectar) y deja que el modelo descubra el resto bajo demanda en lugar de registrar todo:

  • search_tools("rename function") — búsqueda por palabras clave en el catálogo completo, incluyendo herramientas cuyo grupo no está cargado. Cada resultado indica si se puede llamar ahora y, si no, la llamada exacta load_tool_group(...) para habilitarlo.
  • list_tool_groups() — lista todas las categorías y su estado de carga.
  • load_tool_group("datatype") / unload_tool_group("datatype") — cargar o eliminar una categoría en tiempo de ejecución.
  • check_tools("rename_or_label,batch_set_comments") — confirma que herramientas específicas se pueden llamar en este momento.

search_tools funciona tanto en modo eager como en modo --lazy, por lo que los agentes que respetan tools/list_changed obtienen descubrimiento completo sin el costo inicial de contexto.

Opcional: Iniciar el servidor de depuración independiente```bash

uv sync --group debugger uv run python -m debugger

root@kitploit:~
El servidor de depuración escucha en `http://127.0.0.1:8099/` por defecto y es necesario para las herramientas proxy `debugger_*` expuestas por el puente MCP.

Banderas del servidor de depuración:

| Bandera | Predeterminado | Descripción |
|------|---------|-------------|
| `--port` | `8099` | Puerto del servidor HTTP |
| `--host` | `127.0.0.1` | Dirección de enlace (`0.0.0.0` para exponer en LAN) |
| `--exports-dir` | — | Ruta a un directorio `dll_exports/` para resolución de ordinal a nombre |
| `--log-level` | `INFO` | `DEBUG`, `INFO`, `WARNING` o `ERROR` |

Establece `GHIDRA_DEBUGGER_URL` en `.env` si cambias el puerto o host predeterminado para que el puente pueda encontrarlo.

#### En Ghidra
1. Inicia Ghidra y abre una ventana de **CodeBrowser**
2. En **CodeBrowser**, habilita el plugin mediante **File > Configure > Configure All Plugins > GhidraMCP**
3. Opcional: configura el puerto personalizado mediante **CodeBrowser > Edit > Tool Options > GhidraMCP HTTP Server**
4. Inicia el servidor mediante **Tools > GhidraMCP > Start MCP Server**
5. El servidor se ejecuta en `http://127.0.0.1:8089/` por defecto

#### Verificar que funciona```bash
# Quick health check
curl http://127.0.0.1:8089/check_connection
# Expected: "Connected: GhidraMCP plugin running with program '<name>'"

# Get version info
curl http://127.0.0.1:8089/get_version

Apoya este proyecto

Si Ghidra MCP te ahorra tiempo de ingeniería o ingeniería inversa, considera patrocinar el proyecto.

  • El patrocinio único ayuda a financiar correcciones, actualizaciones de compatibilidad y trabajo de lanzamiento.
  • El patrocinio recurrente ayuda a mantener el avance de mantenimiento, documentación y endurecimiento de producción.
  • El apoyo empresarial ayuda a priorizar la confiabilidad a largo plazo del puente, el servidor sin cabeza, la integración del depurador y las herramientas de flujo de trabajo.

🔒 Seguridad

GhidraMCP está diseñado para desarrollo solo en localhost. La configuración predeterminada — servidor HTTP vinculado a 127.0.0.1, sin autenticación — es segura en una estación de trabajo confiable de un solo usuario y coincide con el comportamiento anterior a v5.4.1.

Si expones el servidor más allá del loopback, configura primero estas tres variables de entorno. El servidor se niega a iniciarse en un enlace que no sea loopback sin un token.

La aplicación de la calidad de nombres es independiente de la seguridad. Por defecto, rename_function_by_address y los endpoints de escritura global rechazan nombres que fallan las puertas de calidad incorporadas, y las escrituras de campos de struct aplican la convención de prefijo de campo incorporada. Desactive la capa de convención incorporada con Edit > Tool Options > GhidraMCP HTTP Server > Strict Naming Enforcement. La misma casilla de Tool Options cubre rename_data, rename_global_variable, set_global, la guarda de prefijo/tipo de apply_data_type, y las autocorrecciones de prefijo húngaro de campos de struct en create_struct, add_struct_field, y modify_struct_field. La configuración se lee cuando el servidor MCP se inicia o reinicia. Las advertencias de convención de funciones/globales aún se devuelven cuando la aplicación está deshabilitada.

Ejemplo: exponer a una LAN privada con autenticación```bash

export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32) export GHIDRA_MCP_ALLOW_SCRIPTS=1 # only if your workflow needs it export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs

java -jar GhidraMCPHeadless.jar --bind 0.0.0.0 --port 8089

root@kitploit:~
### Autenticación del servidor Ghidra

Al conectarse a un servidor Ghidra compartido, GhidraMCP puede suprimir el diálogo de contraseña automáticamente. Resuelve las credenciales en este orden (el primer valor no vacío es el que se usa):

Nota de compatibilidad: Los clientes Ghidra 12.1.2 requieren Ghidra Server 12.1.2,
12.0.5 o un servidor compatible más reciente. Los servidores compartidos antiguos no son objetivos seguros para una actualización del cliente 12.1.

1. `GHIDRA_SERVER_PASSWORD` variable de entorno (o archivo `.env` en el directorio de instalación de Ghidra o `~`)
2. `~/.ghidra-cred` — archivo de contraseña de una sola línea en tu directorio personal
3. `<ghidra-install-dir>/.ghidra-cred`

El nombre de usuario se resuelve de manera similar: `GHIDRA_SERVER_USER` variable de entorno → propiedad del sistema `user.name`.

Si no se encuentra una contraseña, Ghidra muestra su diálogo GUI normal. Configúralos en `.env` (consulta `.env.template` para el bloque completo) para habilitar la autenticación silenciosa.

### Migración de v5.4.0 → v5.4.1

- **Los endpoints de scripts ahora están desactivados por defecto.** Si dependías de `/run_script_inline` o `/run_ghidra_script`, exporta `GHIDRA_MCP_ALLOW_SCRIPTS=1`. Este es un cambio deliberado que rompe la compatibilidad; el valor predeterminado anterior no era seguro.
- **Las implementaciones solo en localhost no necesitan cambios.** La autenticación, el rechazo de enlace y las comprobaciones de ruta raíz son opcionales.

## ❓ Solución de problemas

### El menú "GhidraMCP" no aparece en Herramientas

**Causa:** Plugin no habilitado o instalado incorrectamente.

**Solución:**
1. Verifica que la extensión esté instalada: **Archivo > Instalar extensiones** — GhidraMCP debería aparecer listado
2. Habilita el plugin: **Archivo > Configurar > Configurar todos los plugins > GhidraMCP** (marca la casilla)
3. **Reinicia Ghidra** después de la instalación/habilitación

### El servidor no responde / Conexión rechazada

**Causa:** Servidor no iniciado o puerto incorrecto.

**Solución:**
1. Asegúrate de haber iniciado el servidor: **Herramientas > GhidraMCP > Iniciar servidor MCP**
2. Verifica el puerto configurado: **Editar > Opciones de herramienta > Servidor HTTP GhidraMCP**
3. Verifica si el puerto está en uso:   ```bash
   # Linux/macOS
   lsof -i :8089
   # Windows
   netstat -ano | findstr :8089
  1. Busca errores en la consola de Ghidra: Window > Console

pip install falla con error: externally-managed-environment

Causa: PEP 668. Las distribuciones de la familia Debian (Debian 12+, Kali, Ubuntu 23.04+) marcan el Python del sistema como administrado externamente, por lo que el pip install global está bloqueado para proteger los paquetes administrados por apt.

Solución: Usa un entorno virtual — nunca --break-system-packages. La ruta recomendada es uv, que gestiona automáticamente un .venv local del proyecto:```bash curl -LsSf https://astral.sh/uv/install.sh | sh cd ghidra-mcp uv run bridge-mcp-ghidra

root@kitploit:~
O un venv clásico:```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra

python -m debugger falla con ModuleNotFoundError para pybag o comtypes

Causa: El servidor de depuración independiente utiliza dependencias opcionales de Python solo para Windows que no están instaladas por defecto.

Solución:```text uv sync --group debugger uv run python -m debugger

root@kitploit:~
Si tienes tanto un Python global como un venv de proyecto, asegúrate de instalar
y ejecutar desde el mismo intérprete.

### Errores internos del servidor 500

**Causa:** Excepción del lado del servidor, a menudo debido a datos de programa faltantes.

**Solución:**
1. Asegúrate de que un binario esté cargado en CodeBrowser
2. Ejecuta primero el análisis automático: **Analysis > Auto Analyze**
3. Revisa la consola de Ghidra (**Window > Console**) en busca de excepciones de Java
4. Algunas operaciones requieren binarios completamente analizados

### Errores 404 No encontrado

**Causa:** El endpoint no existe o la URL es incorrecta.

**Solución:**
1. Verifica que el endpoint exista: `curl http://127.0.0.1:8089/get_version`
2. Revisa si hay errores tipográficos en el nombre del endpoint
3. Asegúrate de estar usando el método HTTP correcto (GET vs POST)

### Los scripts de Python en Ghidra fallan con "No script provider found"

**Causa:** En Ghidra 12.1.2, el soporte de Jython ya no está habilitado por
defecto. Los scripts `.py` necesitan la extensión Jython incluida; los scripts de Python 3
deben usar PyGhidra en lugar del Ghidra Script Manager.

**Solución:**
1. En la interfaz principal de Ghidra, abre **File > Install Extensions**.
2. Marca **Jython**, reinicia Ghidra, luego actualiza el Script Manager.
3. Para nueva automatización, prefiere scripts Java de Ghidra o PyGhidra.

### La extensión no aparece en Install Extensions

**Causa:** El archivo JAR está en una ubicación incorrecta.

**Solución:**
1. Ubicación de instalación manual: `~/.ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar`
2. O usa: **File > Install Extensions > Add** y selecciona el archivo ZIP
3. Asegúrate de que el JAR/ZIP fue compilado para tu versión de Ghidra

### La compilación falla con "Ghidra dependencies not found"

**Causa:** Los JARs de Ghidra no están instalados en el repositorio local de Maven.

**Solución:**```text
# Windows (recommended)
python -m tools.setup install-ghidra-deps --ghidra-path "C:\ghidra_12.1.2_PUBLIC"

📊 Rendimiento de Producción

  • Herramientas MCP: 271 herramientas completamente implementadas
  • Velocidad: Respuesta en menos de un segundo para la mayoría de las operaciones
  • Eficiencia: 93% de reducción en llamadas API mediante operaciones por lotes
  • Fiabilidad: Transacciones atómicas con semántica de todo o nada
  • Flujos de Trabajo IA: Indicaciones de documentación comprobadas y refinadas en cientos de funciones reales
  • Despliegue: Script de despliegue automatizado y consciente de versiones

🛠️ Referencia de la API

271 herramientas MCP respaldadas por puntos finales HTTP, agrupadas por categoría de catálogo. Generado desde tests/endpoints.json por python -m tools.gen_readme_api_reference --write; el esquema en vivo en /mcp/schema es autoritativo en tiempo de ejecución. Patrones de uso: docs/prompts/TOOL_USAGE_GUIDE.md.

Gestión de Programas y Sesiones

  • analysis_status - Obtener el estado de auto-análisis para programas abiertos
  • close_program - Cerrar un programa abierto por ruta o nombre de proyecto
  • create_property_map - Crear un mapa de propiedades de usuario para almacenar valores tipados indexados por dirección
  • delete_property_map - Eliminar un mapa de propiedades de usuario y todos los valores que contiene
  • exit_ghidra - Guardar y salir de Ghidra
  • get_address_spaces - Listar todos los espacios de direcciones físicos y superpuestos en el programa (las superposiciones incluyen la bandera is_overlay y el nombre del espacio superpuesto)
  • get_current_program_info - Obtener información del programa actual
  • get_language_metadata - Volcar la descripción del lenguaje del programa: espacios de direcciones, registros, símbolos predeterminados, endianidad, tamaño de puntero (issue #192)
  • get_program_options - Leer todas las opciones en un grupo de opciones de programa con tipos, valores actuales, valores predeterminados y descripciones
  • get_property - Leer el valor almacenado en una dirección en un mapa de propiedades

Organización de Proyectos

  • create_folder - Crear una carpeta en el proyecto
  • delete_file - Eliminar un archivo del proyecto
  • delete_project - Eliminar un proyecto Ghidra
  • list_projects - Listar proyectos Ghidra disponibles
  • move_file - Mover un archivo a otra carpeta del proyecto
  • move_folder - Mover una carpeta a otra ubicación
  • project_info - Obtener información detallada del proyecto incluyendo herramientas en ejecución y programas abiertos

Ciclo de Vida del Proyecto y Programa Headless

Disponible en el servidor headless independiente (GhidraMCPHeadlessServer).

  • archive_project - Archivar el proyecto actualmente abierto en un archivo .gar nativo de Ghidra
  • checkin_program - Registrar un programa abierto de nuevo en el Servidor Ghidra compartido como una nueva versión
  • close_project - Cerrar el proyecto actualmente abierto
  • create_project - Crear un nuevo proyecto Ghidra
  • export_program - Exportar un programa abierto o residente en el proyecto a un Archivo Zip Ghidra (.gzf)
  • get_project_info - Obtener información sobre el proyecto actualmente abierto
  • import_program - Importar un Archivo Zip Ghidra (.gzf) en el proyecto actualmente abierto como un nuevo DomainFile dentro de target_folder (por defecto '/')
  • load_program - Cargar un archivo binario en el servidor headless para análisis
  • load_program_from_project - Cargar programa desde el proyecto Ghidra (headless)
  • open_project - Abrir un proyecto Ghidra existente (archivo .gpr o directorio)
  • restore_project - Restaurar un archivo .gar de Ghidra en un proyecto nuevo en disco en

Listado y Enumeración

  • list_bookmarks - Listar marcadores
  • list_calling_conventions - Listar convenciones de llamada disponibles
  • list_classes - Listar nombres de espacios de nombres/clases
  • list_data_items - Listar datos definidos
  • list_data_items_by_xrefs - Listar datos ordenados por cantidad de referencias cruzadas
  • list_exports - Listar símbolos exportados
  • list_external_locations - Listar ubicaciones externas
  • list_functions - Listar funciones con direcciones
  • list_functions_enhanced - Listar funciones con metadatos
  • list_globals - Listar variables globales
  • list_imports - Listar símbolos importados
  • list_methods - Listar todos los nombres de funciones con paginación

Contexto y Búsquedas

  • get_current_address - Obtener dirección del cursor (solo GUI)
  • get_current_function - Obtener función en el cursor (solo GUI)
  • get_current_selection - Obtener rangos de direcciones resaltados en el listado de CodeBrowser (solo GUI)
  • get_entry_points - Obtener puntos de entrada del programa
  • get_enum_values - Obtener valores de enumeración
  • get_external_location - Obtener detalles de ubicación externa
  • get_full_call_graph - Obtener grafo de llamadas completo
  • get_function_by_address - Obtener función en dirección
  • get_function_call_graph - Obtener grafo de llamadas
  • get_function_callees - Obtener funciones llamadas
  • get_function_callers - Obtener funciones llamantes
  • - Devolver el número de funciones en el programa cargado

Búsqueda

  • find_similar_functions - Encontrar funciones similares
  • search_byte_patterns - Buscar patrones de bytes
  • search_data_types - Buscar tipos de datos
  • search_functions - Buscar funciones por nombre
  • search_functions_enhanced - Búsqueda avanzada de funciones
  • search_strings - Buscar cadenas definidas por un patrón regex/subcadena

Descompilación y Desensamblado

  • decompile_function - Descompilar función
  • disassemble_bytes - Desensamblar rango de bytes
  • disassemble_function - Desensamblar función
  • force_decompile - Forzar descompilación nueva

Etiquetas, Variables y Atributos de Función

  • add_function_tag - Adjuntar una o más etiquetas a una función
  • batch_add_function_tags - Adjuntar etiquetas a muchas funciones en una sola transacción
  • batch_remove_function_tags - Desvincular etiquetas de muchas funciones en una sola transacción
  • clear_flow_and_repair - Ejecutar la acción de GUI 'Clear Flow and Repair' de Ghidra en un rango semilla: limpia el flujo de instrucciones alcanzable desde la semilla, luego repara cuerpos de función y re-desensambla el flujo retenido (ClearFlowAndRepairCmd con clear_data=false, clear_labels=false, repair=true)
  • create_function_tag - Crear una definición de etiqueta de función a nivel de programa con un comentario opcional
  • delete_function_tag - Eliminar una definición de etiqueta de función a nivel de programa
  • get_function_tags - Listar todas las etiquetas asignadas a una función específica
  • list_class_members - Listar las funciones miembro de una clase C++
  • list_function_tags - Listar todas las definiciones de etiquetas de función a nivel de programa con sus conteos de uso
  • remove_function_tag - Desvincular una o más etiquetas de una función

Referencias Cruzadas

  • add_memory_reference - Crear una referencia cruzada definida por el usuario entre dos direcciones de memoria que el auto-analizador no puede inferir (tablas de punteros pobladas en tiempo de ejecución, vtables, punteros a funciones de enlace tardío, tablas de salto/switch omitidas)
  • get_bulk_xrefs - Obtener referencias cruzadas para múltiples direcciones
  • get_function_xrefs - Obtener referencias cruzadas de funciones
  • get_xrefs_from - Obtener referencias desde una dirección
  • get_xrefs_to - Obtener referencias hacia una dirección
  • remove_reference - Eliminar referencia(s) cruzada(s) de memoria de una dirección a otra — la inversa de add_memory_reference

Tipos de Datos y Estructuras

  • add_struct_field - Agregar campo de estructura
  • analyze_global_completeness - Puntuar la completitud de documentación de una variable global en una escala presupuestada de 0 a 100 — el análogo de dirección de datos de analyze_function_completeness
  • apply_data_type - Aplicar tipo de dato
  • audit_global - Auditar el estado de documentación de una variable global
  • audit_globals_in_function - Auditar cada variable global referenciada desde dentro de una función en una sola llamada
  • batch_set_variable_types - Establecer múltiples tipos de variables
  • clone_data_type - Clonar tipo de dato
  • create_array_type - Crear tipo de arreglo
  • create_data_type_category - Crear categoría de tipo de dato
  • create_enum - Crear enumeración
  • create_function_signature - Crear tipo de firma de función

Renombrado y Etiquetas

  • batch_create_labels - Crear múltiples etiquetas
  • batch_delete_labels - Eliminar múltiples etiquetas
  • batch_rename_function_components - Renombrar por lotes componentes de función
  • create_label - Crear etiqueta
  • delete_label - Eliminar etiqueta en dirección
  • rename_data - Renombrar símbolo de dato
  • rename_external_location - Renombrar ubicación externa
  • rename_function - Renombrar función por nombre
  • rename_function_by_address - Renombrar función por dirección
  • rename_global_variable - Renombrar variable global
  • rename_label - Renombrar etiqueta
  • rename_or_label - Renombrar o crear etiqueta

Comentarios y Marcadores

  • batch_set_comments - Establecer múltiples comentarios
  • clear_function_comments - Limpiar todos los comentarios de una función
  • delete_bookmark - Eliminar marcador
  • get_comment - Obtener comentarios de listado (plate/pre/eol/post/repeatable) en CUALQUIER dirección, incluyendo direcciones de datos (a diferencia de get_plate_comment que requiere una función)
  • get_plate_comment - Obtener comentario de placa
  • set_bookmark - Establecer marcador
  • set_comment - Establecer un comentario de listado de un tipo dado (plate/pre/eol/post/repeatable) en CUALQUIER dirección, incluyendo direcciones de datos
  • set_decompiler_comment - Establecer PRE_COMMENT
  • set_disassembly_comment - Establecer EOL_COMMENT
  • set_plate_comment - Establecer comentario de placa

Análisis

  • analyze_api_call_chains - Analizar cadenas de llamadas API
  • analyze_call_graph - Analizar patrones de grafo de llamadas de funciones
  • analyze_control_flow - Analizar flujo de control
  • analyze_data_region - Analizar región de datos
  • analyze_dataflow - Rastrear propagación de valores a través de una función (grafo PCode, hacia adelante/atrás)
  • analyze_for_documentation - Análisis compuesto de documentación RE (descompilar + clasificar + variables + completitud)
  • analyze_function_complete - Análisis completo de función en una sola llamada
  • analyze_function_completeness - Analizar completitud de documentación
  • analyze_struct_field_usage - Analizar uso de campos de estructura
  • apply_data_classification - Aplicar clasificación de datos
  • batch_analyze_completeness - Analizar completitud por lotes para múltiples funciones

Documentación y Archivo Cruzado entre Binarios

  • archive_ingest_function - Ingerir la documentación de una única función en el archivo entre versiones (re_kb.functions en bsim Postgres)
  • archive_ingest_program - Ingerir masivamente cada función de un programa en el archivo de documentación entre versiones
  • batch_string_anchor_report - Informe de cadenas de archivo fuente y sus funciones FUN_*
  • bulk_fuzzy_match - Coincidencia masiva de funciones entre binarios
  • find_similar_functions_fuzzy - Coincidencia difusa de funciones entre binarios
  • merge_program_documentation - Fusión masiva: copiar toda la documentación RE (nombres de función, firmas, comentarios de placa, comentarios de instrucción en EOL/PRE/POST, etiquetas no predeterminadas y símbolos globales) de un programa a otro en direcciones coincidentes

Utilidad y Transferencia de Documentación

  • apply_function_documentation - Aplicar documentación de función
  • check_connection - Punto final de verificación de estado
  • compare_programs_documentation - Comparar documentación entre programas
  • convert_number - Convertir número entre bases
  • diff_functions - Diferenciar dos funciones
  • find_undocumented_by_string - Encontrar funciones sin documentar que referencian una cadena
  • get_bulk_function_hashes - Obtener hashes masivos de funciones
  • get_function_documentation - Exportar documentación de función
  • get_function_hash - Obtener hash de función
  • get_function_signature - Obtener firma característica de función
  • get_metadata - Obtener metadatos del programa
  • - Obtener versión del plugin

Emulación

  • emulate_function - Emular una sola función con entradas controladas de registros/memoria
  • emulate_hash_batch - Resolución por fuerza bruta de hash API

Scripting

  • run_ghidra_script - Ejecutar script con captura de salida
  • run_script_inline - Ejecutar código de script en línea

Servidor Ghidra y Control de Versiones

  • server_admin_set_permissions - Establecer permisos de usuario en un repositorio
  • server_admin_terminate_all_checkouts - Terminar todas las reservas en una carpeta de forma recursiva
  • server_admin_terminate_checkout - Terminar todas las reservas en un solo archivo
  • server_admin_users - Listar todos los usuarios en el servidor
  • server_authenticate - Registrar credenciales del servidor para autenticación programática
  • server_checkouts - Listar todos los archivos reservados en una carpeta, incluyendo reservas del lado del servidor
  • server_connect - Conectar a un servidor Ghidra
  • server_disconnect - Desconectar del servidor Ghidra
  • server_repositories - Listar repositorios en el servidor conectado
  • server_repository_create - Crear un nuevo repositorio en el servidor
  • server_repository_file - Obtener información de archivo de un repositorio del servidor

Depurador (Ghidra TraceRmi — solo GUI)

En hosts Windows donde el proxy del depurador WinDbg del puente está activo (GHIDRA_DEBUGGER_URL), los nombres que colisionan reciben un sufijo _2 (por ejemplo, debugger_status_2).

  • debugger_dynamic_to_static - Traducir una dirección dinámica en tiempo de ejecución del rastreo actual de vuelta a una dirección estática del programa Ghidra
  • debugger_interrupt - Interrumpir (irrumpir en) el objetivo en ejecución
  • debugger_launch - Lanzar un ejecutable a través del lanzador de depurador Trace RMI de Ghidra
  • debugger_launch_offers - Listar opciones disponibles de lanzamiento/adjuntar del depurador para el programa actual
  • debugger_list_breakpoints - Listar todos los puntos de interrupción en el rastreo actual
  • debugger_modules - Listar módulos (DLLs/EXEs) cargados en el proceso depurado
  • debugger_read_memory - Leer memoria del proceso depurado
  • debugger_registers - Leer registros de la CPU de la instantánea de rastreo de depuración actual
  • debugger_remove_breakpoint - Eliminar un punto de interrupción en una dirección
  • debugger_resume - Reanudar la ejecución del proceso depurado

Sistema

  • prompt_policy - Habilitar, deshabilitar o consultar temporalmente el manejo de indicaciones de automatización con ámbito

Herramientas Estáticas del PuenteDefinido en el propio puente de Python (descubrimiento de instancias, gestión de grupos de herramientas); siempre disponible incluso antes de una conexión con Ghidra. El puente también actúa como proxy de 22 herramientas debugger_* de WinDbg cuando GHIDRA_DEBUGGER_URL apunta al servidor de depuración independiente.

  • check_tools - Informar qué herramientas están actualmente registradas y se pueden invocar
  • connect_instance - Conectar el puente a una instancia específica de Ghidra
  • import_file - Importar un binario desde el disco al proyecto actual y abrirlo
  • list_instances - Descubrir instancias de Ghidra MCP en ejecución (UDS + escaneo de puertos TCP)
  • list_tool_groups - Listar grupos de herramientas y su estado de carga
  • load_tool_group - Registrar las herramientas dinámicas de un grupo de herramientas con el cliente MCP
  • search_tools - Buscar en el catálogo completo de herramientas por palabra clave
  • unload_tool_group - Desregistrar las herramientas dinámicas de un grupo de herramientas

Ver CHANGELOG.md para el historial de versiones.

🏗️ Arquitectura```

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ AI/Automation │◄──►│ MCP Bridge │◄──►│ Ghidra Plugin │ │ Tools │ │ (bridge_mcp_ │ │ (GhidraMCP.jar) │ │ (Claude, etc.) │ │ ghidra/) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ MCP Protocol HTTP REST Ghidra API (stdio/streamable-http) (localhost:8089) (Program, Listing)

root@kitploit:~
### Componentes

- **python/bridge_mcp_ghidra/** — Paquete del servidor MCP en Python (se distribuye como el wheel `ghidra-mcp-bridge`; script de consola `bridge-mcp-ghidra`) que traduce el protocolo MCP a llamadas HTTP (225 entradas del catálogo)
- **GhidraMCP.jar** — Plugin de Ghidra que expone capacidades de análisis a través de HTTP (175 puntos finales de GUI)
- **GhidraMCPHeadlessServer** — Servidor headless independiente — 183 puntos finales, no requiere GUI
- **ghidra_scripts/** — Colección de scripts de automatización para tareas comunes

## 🔧 Desarrollo

### Construcción desde el código fuente```bash
# Recommended: direct Python-first workflow
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"

# Version bump (updates all maintained version references atomically)
python -m tools.setup bump-version --new X.Y.Z

El sistema de compilación autoritativo hoy en día es Maven. tools.setup, las tareas de VS Code y el flujo de despliegue documentado compilan a través de pom.xml y escriben artefactos en target/. build.gradle permanece en el repositorio como respaldo manual para los usuarios directos de Ghidra/Gradle, pero no es la ruta principal.

Command Reference

Banderas comunes aceptadas por la mayoría de los comandos:

Los niveles de prueba de despliegue son optativos porque los niveles de referencia pueden importar/restablecer Benchmark.dll y BenchmarkDebug.exe en el proyecto Ghidra activo. Use --test release antes de lanzar versiones, o establezca GHIDRA_MCP_DEPLOY_TESTS=release en un .env local cuando desee que cada despliegue en su máquina ejecute la regresión de referencia en vivo. Consulte Testing and Release Regression.```text

Standard first-time setup and deploy

python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"

Preflight check before deploying

python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"

Version bump and tag

python -m tools.setup bump-version --new X.Y.Z --tag

Run offline Java tests

python -m tools.setup run-tests

Show full help

python -m tools.setup --help

root@kitploit:~
### Estructura del proyecto```
ghidra-mcp/
├── pyproject.toml           # uv project (ghidra-mcp-bridge wheel + dependency groups)
├── python/bridge_mcp_ghidra/ # MCP server package (Python, 225 catalog entries)
├── src/main/java/           # Ghidra plugin + headless server (Java)
│   └── com/xebyte/
│       ├── GhidraMCPPlugin.java         # GUI plugin (196 endpoints)
│       ├── headless/                    # Headless server (183 endpoints)
│       └── core/                        # Shared service layer (12 services)
├── debugger/                # Optional standalone debugger server (port 8099)
├── ghidra_scripts/          # Automation scripts for batch workflows
├── tests/                   # Python unit tests + endpoint catalog
│   ├── unit/               # Catalog consistency, schema, tool function tests
│   └── endpoints.json      # Endpoint specification (225 entries)
├── docs/                    # Documentation
│   ├── prompts/            # AI workflow prompts (V5 documentation workflows)
│   ├── releases/           # Version release notes
│   └── project-management/ # Contributor planning docs (Gradle migration, etc.)
├── tools/setup/             # Build and deployment CLI (python -m tools.setup)
├── fun-doc/                 # Internal RE curation tool — not part of the MCP plugin
│                            #   Priority-queue worker, LLM scoring, web dashboard.
│                            #   See fun-doc/README.md for details.
└── .github/workflows/      # CI/CD pipelines

Dependencias de bibliotecas

Los JARs de Ghidra deben instalarse en su repositorio local de Maven (~/.m2/repository) antes de la compilación. Esta es una configuración única por máquina, y de nuevo cuando su versión de Ghidra cambie. -Deploy ahora instala estos automáticamente por defecto.

La herramienta impone consistencia de versiones entre:

  • pom.xml (ghidra.version)
  • segmento de versión de --ghidra-path (por ejemplo, ghidra_12.1.2_PUBLIC)

Si estos no coinciden, el despliegue falla rápidamente con un error claro.

Solución de problemas: Desajuste de versión

Si ve un error de desajuste de versión, alinee ambos valores:

  1. pom.xml → ghidra.version
  2. segmento de versión de --ghidra-path (ghidra_X.Y.Z_PUBLIC)

Luego vuelva a ejecutar:

root@kitploit:~
mvn clean install -Deploy
``````text
python -m tools.setup preflight --ghidra-path "C:\ghidra_12.1.2_PUBLIC"

I notice that the input content after "INPUT:" is empty — there is no Markdown text provided to translate. Since there is nothing to translate, I will output nothing. If you have the actual content, please provide it and I will translate it according to the rules.```text

Windows

python -m tools.setup install-ghidra-deps --ghidra-path "C:\path\to\ghidra_12.1.2_PUBLIC"

root@kitploit:~
**Bibliotecas requeridas (14 JARs, ~37MB):**

| Biblioteca | Ruta de origen | Propósito |
|---------|------------|---------|
| **Base.jar** | `Features/Base/lib/` | Funcionalidad principal de Ghidra |
| **Decompiler.jar** | `Features/Decompiler/lib/` | Motor de descompilación |
| **PDB.jar** | `Features/PDB/lib/` | Soporte de símbolos PDB de Microsoft |
| **FunctionID.jar** | `Features/FunctionID/lib/` | Identificación de funciones |
| **SoftwareModeling.jar** | `Framework/SoftwareModeling/lib/` | API del modelo de programa |
| **Project.jar** | `Framework/Project/lib/` | Gestión de proyectos |
| **Docking.jar** | `Framework/Docking/lib/` | Marco de acoplamiento de IU |
| **Generic.jar** | `Framework/Generic/lib/` | Utilidades genéricas |
| **Utility.jar** | `Framework/Utility/lib/` | Utilidades principales |
| **Gui.jar** | `Framework/Gui/lib/` | Componentes de interfaz gráfica |
| **FileSystem.jar** | `Framework/FileSystem/lib/` | Soporte de sistema de archivos |
| **Graph.jar** | `Framework/Graph/lib/` | Análisis de grafos/grafos de llamadas |
| **DB.jar** | `Framework/DB/lib/` | Operaciones de base de datos |
| **Emulation.jar** | `Framework/Emulation/lib/` | Emulación de P-código |

> **Nota**: Las bibliotecas NO están incluidas en el repositorio (ver `.gitignore`). Debe instalarlas desde su instalación de Ghidra antes de compilar.

> **Punto de entrada de automatización**:
> - `python -m tools.setup` es la interfaz compatible de configuración/compilación/despliegue/versión
> - use `ensure-prereqs`, `build`, `deploy`, `preflight`, `clean-all` y `bump-version` directamente
> - estos comandos actualmente usan Maven como el backend de compilación Java canónico

### Funcionalidades de desarrollo
- **Despliegue automatizado**: Script de despliegue consciente de versiones
- **Operaciones por lotes**: Reduce las llamadas a la API en un 93%
- **Transacciones atómicas**: Semántica de todo o nada
- **Registro completo**: Capacidades de depuración y rastreo

## 📚 Documentación

### Documentación principal
- [Índice de documentación](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/README.md) - Navegación completa por la documentación
- [Estructura del proyecto](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/PROJECT_STRUCTURE.md) - Guía de organización del proyecto
- [Pruebas y Regresión de versión](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/TESTING.md) - Pruebas locales, CI, regresión en vivo de Ghidra y puertas de versión
- [Convenciones de nomenclatura](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/NAMING_CONVENTIONS.md) - Estándares de nomenclatura de código
- [Notación húngara](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/HUNGARIAN_NOTATION.md) - Guía de nomenclatura de variables

### Indicaciones de flujo de trabajo de IA
- [Documentación de funciones V5](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/prompts/FUNCTION_DOC_WORKFLOW_V5.md) — Flujo de trabajo principal: proceso de 7 pasos con notación húngara, auditoría de tipos y puntuación de verificación
- [Documentación por lotes V5](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/prompts/FUNCTION_DOC_WORKFLOW_V5_BATCH.md) — Despacho paralelo de subagentes para procesamiento multifunción
- [Descubrimiento de código huérfano](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/prompts/ORPHANED_CODE_DISCOVERY_WORKFLOW.md) — Escáner automatizado para funciones no descubiertas
- [Investigación de tipos de datos](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/prompts/DATA_TYPE_INVESTIGATION_WORKFLOW.md) — Descubrimiento sistemático de estructuras
- [Coincidencia entre versiones](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/prompts/CROSS_VERSION_MATCHING_COMPREHENSIVE.md) — Coincidencia de funciones basada en hash
- [Indicación de inicio rápido](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/prompts/QUICK_START_PROMPT.md) — Flujo de trabajo simplificado para principiantes
- [Todas las indicaciones](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/prompts/README.md) — Índice completo de indicaciones

### Historial de versiones
- [Registro de cambios completo](https://github.com/bethington/ghidra-mcp/blob/HEAD/CHANGELOG.md) - Notas de todas las versiones
- [Notas de versión](https://github.com/bethington/ghidra-mcp/blob/HEAD/docs/releases/) - Documentación detallada de versiones

## 🐳 Servidor sin interfaz gráfica (Docker)

GhidraMCP incluye un modo de servidor sin interfaz gráfica para análisis automatizado sin la GUI de Ghidra.

### Inicio rápido con Docker```bash
# Build and run
docker-compose up -d ghidra-mcp

# Test connection
curl http://localhost:8089/check_connection
# Connection OK - GhidraMCP Headless Server v5.17.0

Flujo de trabajo de API sin cabeza```bash

1. Load a binary

curl -X POST -d "file=/data/program.exe" http://localhost:8089/load_program

2. Run auto-analysis (identifies functions, strings, data types)

curl -X POST http://localhost:8089/run_analysis

3. List discovered functions

curl "http://localhost:8089/list_functions?limit=20"

4. Decompile a function

curl "http://localhost:8089/decompile_function?address=0x401000"

5. Get metadata

curl http://localhost:8089/get_metadata

root@kitploit:~
### Endpoints Headless Clave

| Endpoint | Método | Descripción |
|----------|--------|-------------|
| `/load_program` | POST | Cargar archivo binario para análisis |
| `/run_analysis` | POST | Ejecutar análisis automático de Ghidra |
| `/list_functions` | GET | Listar todas las funciones descubiertas |
| `/list_exports` | GET | Listar símbolos exportados |
| `/list_imports` | GET | Listar símbolos importados |
| `/decompile_function` | GET | Descompilar función a código C |
| `/create_function` | POST | Crear función en dirección |
| `/get_metadata` | GET | Obtener metadatos del programa |
| `/create_project` | POST | Crear un proyecto Ghidra |
| `/list_analyzers` | GET | Listar analizadores disponibles |
| `/server/status` | GET | Verificar conexión al servidor Ghidra |

### Configuración

Variables de entorno para Docker:
- `GHIDRA_MCP_PORT` - Puerto del servidor (por defecto: 8089)
- `GHIDRA_MCP_BIND_ADDRESS` - Dirección de enlace (por defecto: 0.0.0.0 en Docker)
- `JAVA_OPTS` - Opciones de JVM (por defecto: -Xmx4g -XX:+UseG1GC)

## 🤝 Contribuciones

Consulte [CONTRIBUTING.md](https://github.com/bethington/ghidra-mcp/blob/HEAD/CONTRIBUTING.md) para obtener pautas detalladas de contribución.

### Inicio Rápido
1. Haga un fork del repositorio
2. Cree una rama de funcionalidad (`git checkout -b feature/amazing-feature`)
3. Compile y pruebe sus cambios (`mvn clean package assembly:single -DskipTests` o `GHIDRA_INSTALL_DIR=/ruta/a/ghidra gradle buildExtension`)
4. Actualice la documentación según sea necesario
5. Confirme sus cambios (`git commit -m 'Agregar funcionalidad increíble'`)
6. Suba a la rama (`git push origin feature/amazing-feature`)
7. Abra un Pull Request

## 📄 Licencia

Este proyecto está licenciado bajo la Licencia Apache 2.0; consulte el archivo [LICENSE](https://github.com/bethington/ghidra-mcp/blob/HEAD/LICENSE) para obtener más detalles.

## 🏆 Estado de Producción

| Métrica | Valor |
|---------|-------|
| **Versión** | 5.17.0 |
| **Herramientas MCP** | 249 totalmente implementadas |
| **Endpoints GUI** | 196 (GhidraMCPPlugin) |
| **Endpoints Headless** | 195 (GhidraMCPHeadlessServer) |
| **Compilación** | ✅ 100% éxito |
| **Eficiencia de Procesamiento por Lotes** | 93% de reducción de llamadas API |
| **Flujos de Trabajo de IA** | 7 flujos de trabajo de documentación probados |
| **Scripts de Ghidra** | Scripts de automatización incluidos |
| **Documentación** | Completa con indicaciones de IA |

Consulte [CHANGELOG.md](https://github.com/bethington/ghidra-mcp/blob/HEAD/CHANGELOG.md) para el historial de versiones y notas de la versión.

## 🙏 Agradecimientos

Este proyecto se derivó originalmente de [LaurieWired/GhidraMCP](https://github.com/LaurieWired/GhidraMCP) en agosto de 2025 y desde entonces ha sido reescrito y ampliado sustancialmente. Reconocemos el trabajo original de LaurieWired como punto de partida. Consulte [NOTICE](https://github.com/bethington/ghidra-mcp/blob/HEAD/NOTICE) para la atribución de la licencia.

## 👥 Contribuyentes

Este proyecto se ha beneficiado del trabajo de contribuyentes dedicados:

### Contribuyentes Principales

**[@heeen](https://github.com/heeen)** — Contribuciones significativas que incluyen:
- Coincidencia difusa de funciones y diff estructurado para comparación entre binarios (#13)
- Mejoras en la ejecución de scripts y corrección de errores (#12)
- Nuevos endpoints de API: `save_program`, `exit_ghidra`, `delete_function`, `create_memory_block`, `run_script_inline` (#11)
- Visión arquitectónica: diseño basado en anotaciones, transporte UDS, propuestas de optimización del puente Python

**[@huehuehuehueing](https://github.com/huehuehuehueing)** — Contribuciones significativas que incluyen:
- Soporte de prefijo de espacio de direcciones: se agregó la sintaxis `<space>:<hex>` (ej., `mem:1000`, `code:ff00`) al análisis de direcciones en toda la superficie de endpoints, desbloqueando objetivos multi-espacio como firmware embebido (#84, cierra #65)
- Parámetro `program` opcional + correcciones de esquema de parámetros requeridos: se hizo `program` opcional en cada endpoint con un fallback sensato de currentProgram, y se corrigieron varios errores de esquema requerido vs opcional que el catálogo había heredado (#92)
- Sembró #44 (herramientas de tipo de dato / enum) — el problema que motivó la capa de aplicación de enum + struct de v5.0


- **Equipo de Ghidra** - Por la increíble plataforma de ingeniería inversa
- **Protocolo de Contexto de Modelo** - Por el marco estandarizado de integración de IA
- **Contribuyentes** - Por las pruebas, comentarios y mejoras

---

## 🔗 Proyectos Relacionados

- [re-universe](https://github.com/bethington/re-universe) — Plataforma Ghidra BSim PostgreSQL para análisis de similitud binaria a gran escala. Se combina perfectamente con GhidraMCP para flujos de trabajo de ingeniería inversa impulsados por IA.
- [cheat-engine-server-python](https://github.com/bethington/cheat-engine-server-python) — Servidor MCP para análisis dinámico de memoria y depuración.

---

**Listo para implementación en producción con confiabilidad de nivel empresarial y capacidades integrales de análisis binario.**
Descargar herramienta
NivelComportamientoEjemplo
Auto-arregloAplicado silenciosamenteCampo count en un uint32 → se auto-prefija dwCount al guardar
AdvertenciaEl cambio se aplica, se devuelve una advertenciaprocessData → "el nombre debe ser PascalCase con un verbo: ProcessData"
RechazoCambio bloqueado con explicaciónCambio de tipo undefined → undefined → "no-op rechazado, tipo sin cambios"
Variable de entornoEfecto
GHIDRA_MCP_AUTH_TOKENCuando se configura, cada solicitud HTTP debe llevar Authorization: Bearer <token>. Comparación segura en tiempo. /mcp/health, /health, /check_connection están exentos.
GHIDRA_MCP_ALLOW_SCRIPTSEstablézcalo en 1, true o yes para habilitar /run_script_inline y /run_ghidra_script. Desactivado por defecto a partir de v5.4.1 — estos endpoints ejecutan Java arbitrario contra el proceso de Ghidra. En modo sin cabeza también activa la inicialización de BundleHost de OSGi al inicio del servidor (framework Felix, ~cientos de ms); desactívelo si no necesita ejecución de scripts.
GHIDRA_MCP_FILE_ROOTCuando se establece en una ruta de directorio, los endpoints de rutas del sistema de archivos (/load_program, /import_file, /open_project, /delete_file, etc.) canonican la entrada y requieren que esté bajo esta raíz. Previene path-traversal.
  • import_file - Importar un archivo binario desde el disco al proyecto Ghidra actual y abrirlo
  • list_open_programs - Listar programas abiertos
  • list_option_groups - Listar grupos de opciones de programa (por ejemplo
  • list_project_files - Listar archivos del proyecto
  • list_properties - Listar entradas (dirección, valor) almacenadas en un mapa de propiedades, con paginación
  • list_property_maps - Listar mapas de propiedades definidos por el usuario — almacenes tipados por dirección clave→valor
  • open_program - Abrir programa desde el proyecto
  • reanalyze - Activar auto-análisis completo en un programa
  • remove_program_option - Eliminar una opción de un grupo de opciones de programa
  • remove_property - Eliminar el valor almacenado en una única dirección en un mapa de propiedades
  • save_all_programs - Guardar todos los programas abiertos
  • save_program - Guardar el programa actual
  • set_image_base - Establecer la dirección base del programa (reubica todas las direcciones)
  • set_program_option - Establecer una opción de programa tipada
  • set_property - Establecer un valor en una dirección en un mapa de propiedades
  • switch_program - Cambiar de programa actual
  • parent_dir/project_name
  • server_status - Verificar el estado de conexión del servidor headless
  • list_namespaces - Listar todos los espacios de nombres
  • list_scripts - Listar scripts Ghidra disponibles
  • list_segments - Listar segmentos de memoria
  • list_strings - Listar cadenas definidas
  • get_function_count
  • get_function_jump_targets - Obtener objetivos de salto
  • get_function_labels - Obtener etiquetas en la función
  • get_function_variables - Listar todas las variables en una función
  • get_struct_layout - Obtener diseño de estructura
  • get_valid_data_types - Obtener nombres de tipos de datos válidos
  • search_functions_by_tag - Listar todas las funciones que tienen una etiqueta especificada adjunta
  • set_decompiler_variable_type - Establecer el tipo de una variable o parámetro de descompilador (alto nivel) por nombre
  • set_function_no_return - Establecer el atributo de no retorno
  • set_function_tag_comment - Actualizar el comentario/descripción en una etiqueta de función existente a nivel de programa
  • set_function_this_type - Establecer el tipo de descompilador/base de datos del puntero 'this' implícito (ECX en x86 __thiscall/__fastcall)
  • set_variables - Establecer tipos y nombres para múltiples variables atómicamente
  • create_pointer_type - Crear tipo de puntero
  • create_struct - Crear estructura
  • create_typedef - Crear typedef
  • create_union - Crear unión
  • delete_data_type - Eliminar tipo de dato
  • embed_struct_field - Reemplazar un campo de estructura con un tipo de estructura incrustado por valor (por ejemplo
  • get_data_type_size - Obtener tamaño de tipo de dato en bytes
  • get_type_size - Obtener tamaño e información del tipo de dato
  • import_data_types - Importar tipos de datos desde GDT
  • list_data_type_categories - Listar categorías de tipos de datos
  • list_data_types - Listar tipos de datos
  • modify_struct_field - Modificar campo de estructura
  • modify_struct_field_type - Establecer el tipo de un campo de estructura por nombre o desplazamiento (offset:N)
  • move_data_type_to_category - Mover tipo de dato a categoría
  • recreate_struct - Reemplazar una estructura en un paso: opcionalmente eliminar un tipo existente con el mismo nombre, luego crear con campos JSON (misma forma que create_struct)
  • remove_struct_field - Eliminar campo de estructura
  • resize_struct - Agrandar o reducir una estructura existente por tamaño total en bytes
  • resolve_duplicate_type - Encontrar tipos de datos duplicados por nombre simple; eliminar stubs no utilizados /Demangler de tamaño 1 cuando existe un tipo canónico más grande
  • set_function_prototype - Establecer prototipo de función (tipo de retorno, tipos de parámetros, convención de llamada)
  • set_global - Aplicar atómicamente nombre + tipo + comentario de placa + longitud de arreglo a una variable global
  • set_local_variable_type - Establecer tipo de variable
  • set_parameter_type - Establecer tipo de parámetro
  • set_variable_storage - Establecer almacenamiento de variable
  • validate_data_type - Validar sintaxis de tipo de dato
  • validate_data_type_exists - Verificar si existe un tipo de dato
  • validate_function_prototype - Validar prototipo de función
  • rename_variable - Renombrar una variable en una función
  • rename_variables - Renombrar por lotes variables
  • batch_apply_documentation - Aplicar toda la documentación a una función en una sola llamada
  • batch_decompile - Descompilar múltiples funciones a la vez
  • can_rename_at_address - Verificar si se puede renombrar en una dirección
  • clear_instruction_flow_override - Limpiar anulación de flujo
  • configure_analyzer - Configurar un plugin de análisis
  • create_function - Crear función en dirección
  • create_memory_block - Crear bloque de memoria
  • delete_function - Eliminar función en dirección
  • detect_array_bounds - Detectar límites de arreglo
  • detect_crypto_constants - Detectar constantes criptográficas
  • detect_malware_behaviors - Detectar comportamientos de malware
  • extract_iocs_with_context - Extraer IOCs con contexto
  • find_anti_analysis_techniques - Encontrar técnicas anti-análisis
  • find_code_gaps - Encontrar huecos de bytes indefinidos entre funciones en memoria ejecutable
  • find_dead_code - Encontrar código muerto
  • find_next_undefined_function - Encontrar la siguiente función sin definir
  • get_assembly_context - Obtener contexto de ensamblador
  • get_field_access_context - Obtener contexto de acceso a campo
  • get_function_pcode - Volcar P-code sin procesar para una función (issue #192)
  • inspect_memory_content - Inspeccionar bytes de memoria
  • list_analyzers - Listar plugins de análisis disponibles
  • read_memory - Leer memoria sin procesar
  • run_analysis - Ejecutar auto-análisis en el programa actual
  • search_instructions - Buscar instrucciones por mnemónico y/o subcadena de operando
  • suggest_field_names - Sugerir nombres de campos
  • get_version
  • health - Punto final de verificación de estado para servidor headless
  • mcp_health - Estado del servidor HTTP: estadísticas del pool, tiempo de actividad, memoria, conteo de solicitudes activas
  • mcp_schema - Esquema de API legible por máquina con metadatos de puntos finales
  • tool_goto_address - Navegar el listado de CodeBrowser y el descompilador a una dirección específica
  • tool_launch_codebrowser - Abrir un archivo en CodeBrowser, lanzando uno nuevo si es necesario
  • tool_running_tools - Listar todas las ventanas de herramientas Ghidra en ejecución
  • server_repository_files - Listar archivos en una carpeta de repositorio del servidor
  • server_version_control_add - Agregar un archivo al control de versiones
  • server_version_control_checkin - Registrar un archivo bajo control de versiones
  • server_version_control_checkout - Reservar un archivo bajo control de versiones
  • server_version_control_undo_checkout - Deshacer la reserva de un archivo
  • server_version_history - Obtener historial de versiones de un archivo
  • debugger_set_breakpoint - Establecer un punto de interrupción de ejecución de software en una dirección del rastreo
  • debugger_stack_trace - Obtener el backtrace de la pila de llamadas para el hilo actual
  • debugger_static_to_dynamic - Traducir una dirección estática del programa Ghidra a una dirección dinámica en tiempo de ejecución en el rastreo actual
  • debugger_status - Obtener estado del depurador: rastreo activo, hilo, estado de ejecución, conteo de módulos
  • debugger_step_into - Ejecutar paso a paso dentro de la siguiente instrucción (sigue llamadas)
  • debugger_step_out - Salir de la función actual (ejecutar hasta el retorno)
  • debugger_step_over - Ejecutar paso a paso sobre la siguiente instrucción (no sigue llamadas)
  • debugger_traces - Listar todos los rastreos de depuración abiertos
  • CommandWhat it does
    ensure-prereqsInstalar dependencias de Python y JAR de Maven de Ghidra de una sola vez. Comience aquí en una máquina nueva.
    preflightValidar Python, herramienta de compilación, ruta de Ghidra y disponibilidad de JAR sin realizar cambios. Agregue --strict para verificar también la accesibilidad de red.
    buildCompilar el JAR del plugin y el ZIP de extensión mediante Maven (o Gradle cuando TOOLS_SETUP_BACKEND=gradle).
    deployCopiar la extensión compilada al perfil de Ghidra y parchear FrontEndTool.xml para activación automática.
    start-ghidraLanzar la instalación configurada de Ghidra.
    cleanEliminar las salidas de compilación de Maven/Gradle (target/, build/).
    clean-allEliminar las salidas de compilación más los artefactos de caché local (JAR de Ghidra en .m2, etc.).
    install-ghidra-depsInstalar solo los JAR de Ghidra en ~/.m2. Útil cuando el entorno de compilación cambia.
    install-python-depsInstalar los grupos de dependencias de Python mediante uv sync.
    run-testsEjecutar la suite de pruebas Java sin conexión (no se necesita Ghidra en ejecución).
    verify-versionVerificar que las cadenas de versión sean consistentes en pom.xml, CHANGELOG.md y README.md.
    bump-version --new X.Y.ZActualizar atómicamente todas las referencias de versión. Pase --tag para crear una etiqueta git.
    FlagDescription
    --ghidra-path PATHDirectorio de instalación de Ghidra. Por defecto GHIDRA_PATH de .env.
    --dry-runImprimir acciones sin ejecutarlas.
    --forceReinstalar JAR de Ghidra incluso si ya están presentes (install-ghidra-deps, ensure-prereqs).
    --with-debuggerForzar instalación de requisitos de Python del depurador (solo Windows).
    --use-debugger-toggleLeer INSTALL_DEBUGGER_DEPS de .env para decidir si instalar dependencias del depurador.
    --test TIER(deploy solamente) Optar por niveles de regresión de despliegue en vivo como release o debugger-live.
    --strict(preflight solamente) También verificar accesibilidad de red para Maven Central y PyPI.