GhidraMCP

Un servidor MCP integrado para Ghidra, que expone datos de programas y funcionalidades de ingeniería inversa.

Documentación

GitHub release (latest by date) Build Status Tested Ghidra Version License GitHub stars GitHub forks

Install MCP Server

Si tu navegador/GitHub bloquea los manejadores de URI personalizados, usa la alternativa web: Alternativa de instalación para Cursor

GhidraMCP

Conecta Ghidra a clientes compatibles con MCP

Proyecto relacionado: Servidor MCP de WinDbg


✨ Características

  • 14 herramientas MCP que cubren análisis, inspección, edición, flujos de trabajo de proyectos y seguimiento de versiones
  • Recursos MCP para vistas comunes de programas, como información del programa, listado, importaciones/exportaciones, cadenas, RTTI y descompilación
  • Prompts MCP integrados y autocompletado de argumentos para flujos de trabajo comunes de ingeniería inversa
  • Respuestas estructuradas con límites explícitos por llamada y cursores opacos para conjuntos de datos grandes
  • Las salidas grandes están limitadas por argumentos de herramientas como page_size, max_lines o max_results; pasa los valores de next_cursor devueltos como cursor para continuar
  • Soporte de depurador para conectar/aceptar/iniciar Trace RMI, ciclo de vida del objetivo, descubrimiento de trazas/hilos/pilas/objetos, operaciones en vivo de memoria/registros/vigilancia, mapeos estáticos, métodos remotos y emulación
  • El mapeo de memoria tipado aplica un tipo de datos y devuelve filas limitadas de byte a campo para la memoria del programa o la traza activa del depurador
  • Los flujos de trabajo de proyectos pueden reubicar las bases de imagen del programa explícitamente o desde la ImageBase declarada de un binario PE
  • Las operaciones enfocadas de CodeBrowser y Depurador navegan automáticamente la interfaz activa de Ghidra del usuario a la función o dirección relevante

Comandos de herramientas

  • Análisis e inspección: analyze, inspect, script_guidance
  • Cambios en el programa: annotate, functions, symbols, data_types, memory, delete
  • Depuración: debugger
  • Flujos de trabajo de proyectos: project, batch_operations
  • Seguimiento de versiones: vt_sessions, vt_operations

Plantillas de recursos

  • Resumen del proyecto: ghidra://programs
  • Vistas del programa: ghidra://program/{name}/info, ghidra://program/{name}/functions, ghidra://program/{name}/symbols, ghidra://program/{name}/datatypes, ghidra://program/{name}/memory
  • Vistas de triaje: ghidra://program/{name}/imports, ghidra://program/{name}/exports, ghidra://program/{name}/strings, ghidra://program/{name}/rtti
  • Vistas de código: ghidra://program/{name}/listing/{address}, ghidra://program/{name}/function/{address}/decompile

Prompts

  • analyze_function
  • analyze_vtable
  • compare_binaries
  • find_vulnerabilities
  • map_data_structures
  • rename_analysis
  • triage_binary

🚀 Instalación

Requiere Ghidra 12.1.4.

  1. Descarga el archivo zip de la última versión desde la página de Versiones.
  2. En Ghidra, ve a File -> Install Extensions....
  3. Haz clic en el botón + (Agregar extensión) en la esquina superior derecha.
  4. Navega hasta el archivo zip descargado y selecciónalo.
  5. Asegúrate de que la extensión GhidraMCP esté marcada en la lista y haz clic en OK.
  6. Reinicia Ghidra.

▶️ Uso

  1. Inicia Ghidra con la extensión GhidraMCP habilitada.
  2. Confirma el puerto del servidor en Configuración.
  3. Apunta tu cliente MCP a http://127.0.0.1:8080/mcp (o a tu puerto personalizado).

[!WARNING] Diálogos de error de scripts: Algunas operaciones impulsadas por scripts pueden abrir un diálogo de error de Ghidra. Cierra el diálogo antes de continuar, o las solicitudes pueden parecer que se cuelgan.

[!TIP] Encontrar nombres de programas: Usa el recurso ghidra://programs para ver los nombres exactos de los programas disponibles en el proyecto actual.

⚙️ Configuración

El servidor GhidraMCP se puede configurar a través de la configuración a nivel de aplicación de Ghidra:

  1. En Ghidra, ve a Browser → Edit → Tool Options.
  2. En el panel izquierdo, expande Miscellaneous y selecciona GhidraMCP HTTP Server.
  3. Configura las siguientes opciones:
    • Server Port: El número de puerto para el servidor MCP (predeterminado: 8080)
    • Auto-start Server: Si se debe iniciar automáticamente el servidor cuando Ghidra se lance
    • Request Timeout (seconds): Tiempo máximo permitido para una solicitud MCP antes de que expire (predeterminado: 600)
  4. Haz clic en OK para guardar tu configuración.

🛠️ Compilar desde el código fuente

Si estás instalando desde un zip de versión de GitHub, puedes omitir esta sección. Los pasos a continuación son solo para compilar desde el código fuente.

  1. Clona el repositorio:

    git clone https://github.com/themixednuts/GhidraMCP.git
    
  2. Asegúrate de tener JDK 21 o posterior instalado.

  3. Compila el proyecto con just:

    just package
    

    Para ejecutar las mismas verificaciones que usa el CI de compilación principal:

    just ci
    

    O usa el envoltorio de Gradle directamente:

    bash ./gradlew package
    

    En Windows PowerShell, usa:

    .\gradlew.bat package
    

    Los jars de Ghidra se obtienen automáticamente del zip de versión oficial en la primera ejecución.

    Puntos de entrada útiles para desarrollo:

    • just test ejecuta la suite de pruebas unitarias
    • just test-e2e ejecuta la suite de pruebas de extremo a extremo
    • just update-verification-metadata actualiza las sumas de verificación de verificación de dependencias de Gradle después de cambios manuales de dependencias
    • El flujo de trabajo manual de "Dependency Maintenance" de GitHub valida candidatos de actualización de dependencias y de Ghidra sin abrir PRs de bots
  4. El archivo zip instalable se escribe en target/ (por ejemplo, target/GhidraMCP-0.9.0.zip). Instálalo usando los pasos anteriores.

Opcional: Instalar verificaciones locales de pre-commit

Para ejecutar verificaciones de formato y pruebas de integración completas antes de cada commit:

just install-hooks

El hook de pre-commit instalado ejecuta:

  • just fmt-check
  • just test
  • just test-e2e

🔌 Configurar un cliente MCP

Usa esta URL de servidor en tu cliente:

  • http://127.0.0.1:8080/mcp (o tu puerto personalizado)

La mayoría de los clientes usan una configuración como:

{
  "mcpServers": {
    "ghidra": {
      "url": "http://127.0.0.1:8080/mcp"
    }
  }
}

Instrucciones de configuración del cliente

Claude Claude Desktop

Ruta de configuración:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

Agrega la configuración JSON anterior y luego reinicia Claude Desktop.

Claude Claude Code (CLI)
claude mcp add ghidra "http://127.0.0.1:8080/mcp" --transport http
Cursor Cursor

Ruta de configuración manual: ~/.cursor/mcp_settings.json

OpenCode OpenCode

Usa ~/.config/opencode/opencode.json (o opencode.json a nivel de proyecto):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ghidra": {
      "type": "remote",
      "url": "http://127.0.0.1:8080/mcp",
      "enabled": true
    }
  }
}
Codex Codex CLI
codex mcp add ghidra --url http://127.0.0.1:8080/mcp

O agrega esto a ~/.codex/config.toml:

[mcp_servers.ghidra]
url = "http://127.0.0.1:8080/mcp"

[!IMPORTANT] El puerto predeterminado es 8080 (configurable en Ghidra: Browser → Edit → Tool Options → Miscellaneous → GhidraMCP HTTP Server). Si cambias el puerto, actualiza la configuración de tu cliente en consecuencia. Ghidra debe estar ejecutándose con la extensión habilitada para que el cliente se conecte.

[!NOTE] Problemas de tiempo de espera: Si encuentras problemas de tiempo de espera, consulta la guía de configuración de tiempo de espera de Ghidra.

🤝 Contribuciones

¡Las contribuciones son bienvenidas! No dudes en enviar solicitudes de extracción o abrir problemas.


Agradecimientos

Este proyecto está fuertemente inspirado y basado en el trabajo de LaurieWired. En lugar de usar un puente, este plugin integra directamente el servidor en el plugin.