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
pyghidra-mcp — Python Ghidra MCP de línea de comandos | Kitploit
Herramientas/GitHubGitHub/clearbluejar/pyghidra-mcp
Seguridad de Sistemas EmbebidosAnálisis EstáticoAnálisis de CódigoIngeniería InversaDepuradoresAnálisis de MalwareAnálisis de BinariosAprendizaje y EducaciónReversing Asistido por IAAnálisis de Firmware
GitHubclearbluejar/pyghidra-mcp
40455hace 12 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

pyghidra-mcp

Python Ghidra MCP de línea de comandos

Ver Repositorio

GitHub Workflow Status (with event) PyPI - Downloads

PyGhidra-MCP - Servidor del Protocolo de Contexto del Modelo de Ghidra

Visión general

pyghidra-mcp es un servidor de línea de comandos del Protocolo de Contexto del Modelo (MCP) que trae todo el poder analítico de Ghidra, un robusto conjunto de herramientas de ingeniería inversa de software (SRE), al mundo de los agentes inteligentes y las herramientas basadas en LLM. Conecta la ProgramAPI y la FlatProgramAPI de Ghidra con Python usando pyghidra y jpype, y luego expone esa funcionalidad a través del Protocolo de Contexto del Modelo.

MCP es una interfaz unificada que permite a los modelos de lenguaje, herramientas de desarrollo (como VS Code) y agentes autónomos acceder a contexto estructurado, invocar herramientas y colaborar inteligentemente. Piensa en MCP como el puente entre potentes herramientas de análisis y el ecosistema LLM.

Con pyghidra-mcp, Ghidra se convierte en un backend inteligente—listo para responder a consultas ricas en contexto, automatizar tareas profundas de ingeniería inversa e integrarse en flujos de trabajo asistidos por IA.

pyghidra-mcp ahora soporta dos modos de operación:

  • modo headless para análisis y automatización desde la línea de comandos
  • modo --gui, que inicia Ghidra a través de pyghidra-mcp y comparte el estado del programa en vivo con la GUI en ejecución

[!NOTE] Este proyecto beta está en desarrollo activo. Nos encantaría recibir tus comentarios, informes de errores, solicitudes de funciones y código.

¿Otro MCP de Ghidra?

Sí, el ghidra-mcp original es fantástico. Pero pyghidra-mcp adopta un enfoque diferente:

  • 🐍 Prioriza el modo headless, con capacidad de GUI – Ejecútalo completamente desde la línea de comandos para una automatización optimizada, o inicia Ghidra con --gui cuando quieras navegación y edición en vivo en la GUI.
  • 🔁 Diseñado para automatización – Ideal para integrarse con LLMs, pipelines de CI y herramientas que necesitan comportamiento repetible.
  • ✅ Amigable con CI/CD – Construido con pruebas unitarias y de integración robustas tanto para sesiones de cliente como de servidor.
  • 🚀 Inicio rápido – El inicio asíncrono permite que el servidor comience a manejar solicitudes mientras los binarios aún se analizan en segundo plano. Soporta lanzamiento rápido desde la línea de comandos con configuración mínima.
  • 📦 Análisis a nivel de proyecto – Permite la ingeniería inversa concurrente de todos los binarios en un proyecto de Ghidra
  • 🤖 Listo para agentes – Construido para flujos de trabajo impulsados por agentes inteligentes y automatización de ingeniería inversa a gran escala.
  • 🔍 Búsqueda semántica de código – Utiliza embeddings vectoriales (a través de ChromaDB) para permitir búsquedas rápidas y difusas en funciones descompiladas, comentarios y símbolos—perfecto para exploración de pseudo-C y clasificación impulsada por agentes.

Este proyecto ofrece una experiencia centrada en Python optimizada para el desarrollo local, entornos sin interfaz gráfica y flujos de trabajo comprobables.

Diagramas de configuración

Cómo se conectan las piezas```mermaid

flowchart LR subgraph Clients["Clients"] Agent["MCP host / agent"] Cli["pyghidra-mcp-cli"] User["Ghidra user"] end

root@kitploit:~
subgraph Process["pyghidra-mcp process"]
    Transport["stdio or streamable-http"]
    Tools["MCP tools"]
    Context["PyGhidra context"]
end

Project["Ghidra project<br/>.gpr / .rep"]
Artifacts["MCP artifacts<br/>ChromaDB + GZF cache"]
Gui["Ghidra GUI / CodeBrowser<br/>only with --gui"]

Agent -->|"stdio or HTTP"| Transport
Cli -->|"HTTP only"| Transport
Transport --> Tools
Tools --> Context
Context --> Project
Context --> Artifacts
Context -.-> Gui
User -.-> Gui
Gui -.-> Project
root@kitploit:~
### Eligiendo un Modo```mermaid
flowchart TD
    Start["What do you need?"]
    Start --> Headless["Agent or automation only"]
    Start --> GuiNeed["Live Ghidra GUI control"]
    Start --> Terminal["Interactive terminal client"]

    Headless --> Stdio["pyghidra-mcp -t stdio<br/>or -t streamable-http"]
    GuiNeed --> GuiMode["pyghidra-mcp --gui<br/>--transport streamable-http<br/>--project-path project.gpr"]
    Terminal --> HttpServer["Start pyghidra-mcp<br/>--transport streamable-http"]
    HttpServer --> CliMode["Run pyghidra-mcp-cli commands"]
  • Headless MCP: usa stdio para hosts MCP locales, o streamable-http cuando varios clientes necesitan el mismo proyecto Ghidra de larga duración.
  • Modo GUI: pyghidra-mcp lanza Ghidra, abre el proyecto y expone herramientas adicionales que dirigen el CodeBrowser en la misma JVM.
  • Cliente CLI: pyghidra-mcp-cli es un cliente HTTP. Primero inicia un servidor streamable-http, luego ejecuta comandos de terminal contra ese servidor en ejecución.
Arquitectura detallada y superficie de herramientas```mermaid flowchart TD subgraph Clients Agent["LLM / MCP host"] Cli["pyghidra-mcp-cli"] Automation["scripts and CI"] end
root@kitploit:~
subgraph Transports
    Stdio["stdio"]
    Http["streamable-http"]
    Sse["sse legacy"]
end

subgraph Server["pyghidra-mcp server"]
    FastMcp["FastMCP tool server"]
    Context["PyGhidra context"]
    Indexing["background analysis and Chroma indexing"]

    subgraph Tools["MCP tools"]
        Analysis["decompile, xrefs, bytes, callgraph"]
        Search["symbols, strings, code"]
        ProjectOps["import, delete, metadata, list binaries"]
        Edits["rename function, rename variable, set type, set prototype, set comment"]
        GuiOnly["GUI only: open program, goto, list open programs, set current program"]
    end
end

subgraph GhidraRuntime["Ghidra runtime"]
    PyGhidra["pyghidra"]
    Jpype["JPype shared JVM"]
    Project["Ghidra project"]
    Programs["program databases"]
    CodeBrowser["Ghidra GUI / CodeBrowser"]
end

Agent --> Stdio
Agent --> Http
Automation --> Stdio
Automation --> Http
Automation --> Sse
Cli --> Http

Stdio --> FastMcp
Http --> FastMcp
Sse --> FastMcp

FastMcp --> Context
Context --> PyGhidra
PyGhidra --> Jpype
Jpype --> Project
Project --> Programs
Context --> Indexing
Indexing --> Search

FastMcp --> Tools
Tools --> Context
GuiOnly -.-> CodeBrowser
Context -.-> CodeBrowser
root@kitploit:~
</details>

## Contenido

- [PyGhidra-MCP - Servidor de Protocolo de Contexto de Modelo Ghidra](#pyghidra-mcp---ghidra-model-context-protocol-server)
    - [Descripción general](#overview)
  - [¿Otro Ghidra MCP?](#yet-another-ghidra-mcp)
  - [Diagramas de configuración](#setup-diagrams)
    - [Cómo se conectan las piezas](#how-the-pieces-connect)
    - [Elegir un modo](#choosing-a-mode)
  - [Contenido](#contents)
  - [Primeros pasos](#getting-started)
  - [Optimizado para agentes](#optimized-for-agents)
  - [Cliente CLI](#cli-client)
    - [Instalación](#installation)
    - [Inicio rápido con CLI](#quick-start-with-cli)
  - [Creación, gestión y apertura de proyectos existentes](#project-creation-management-and-opening-existing-projects)
    - [Crear nuevos proyectos](#creating-new-projects)
      - [Estructura de proyecto autocontenida](#self-contained-project-structure)
      - [Creación básica de proyectos](#basic-project-creation)
      - [Creación personalizada de proyectos](#custom-project-creation)
      - [Creación de múltiples proyectos relacionados](#creating-multiple-related-projects)
    - [Apertura de proyectos Ghidra existentes](#opening-existing-ghidra-projects)
      - [Apertura mediante archivo .gpr](#opening-by-gpr-file)
    - [Modo GUI](#gui-mode)
    - [Valores predeterminados de inicio y proyectos grandes](#startup-defaults-and-large-projects)
  - [Desarrollo](#development)
    - [Configuración](#setup)
    - [Pruebas y calidad](#testing-and-quality)
  - [API](#api)
    - [Herramientas](#tools)
      - [Operaciones por lotes](#batch-operations)
      - [Herramientas de lectura/análisis](#read--analysis-tools)
      - [Operaciones de proyecto](#project-operations)
      - [Herramientas de edición/mutación](#edit--mutation-tools)
      - [Herramientas de control GUI (solo `--gui`)](#gui-control-tools---gui-only)
  - [Uso](#usage)
    - [Mapeo de binarios con Docker](#mapping-binaries-with-docker)
    - [Uso con OpenWeb-UI y MCPO](#using-with-openweb-ui-and-mcpo)
      - [Con `uvx`](#with-uvx)
      - [Con Docker](#with-docker)
    - [Entrada/Salida estándar (stdio)](#standard-inputoutput-stdio)
      - [Python](#python)
      - [Docker](#docker)
    - [HTTP transmisible](#streamable-http)
      - [Python](#python-1)
      - [Docker](#docker-1)
    - [Eventos enviados por el servidor (SSE)](#server-sent-events-sse)
      - [Python](#python-2)
      - [Docker](#docker-2)
  - [Integraciones](#integrations)
    - [Claude Desktop](#claude-desktop)
  - [Inspiración](#inspiration)
  - [Contribución, comunidad y ejecución desde el código fuente](#contributing-community-and-running-from-source)
    - [Flujo de trabajo del contribuyente](#contributor-workflow)

## Primeros pasos

Ejecuta el [paquete de Python](https://pypi.org/p/pyghidra-mcp) como un comando CLI usando [`uv`](https://docs.astral.sh/uv/guides/tools/):```bash
uvx pyghidra-mcp # Creates pyghidra_mcp_projects directory by default
Descargar herramienta

Para lanzar y controlar una interfaz gráfica de Ghidra en vivo desde MCP, usa --gui con streamable-http:```bash uvx pyghidra-mcp
--gui
--transport streamable-http
--host 127.0.0.1
--port 8000
--project-path /absolute/path/to/ghidra-projects
--project-name my_project

root@kitploit:~
> [!IMPORTANT]
> `--gui` inicia Ghidra a través de `pyghidra-mcp`. No se adjunta a una instancia externa de Ghidra ya en ejecución.

O, ejecútelo como un [contenedor Docker](https://ghcr.io/clearbluejar/pyghidra-mcp):```bash
docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

Optimizado para Agentes

pyghidra-mcp mantiene la superficie MCP intencionadamente estrecha para que los clientes agente gasten menos tokens en descubrimiento de herramientas y selección de argumentos.

  • Descripciones cortas de herramientas: las cadenas de documentación de las herramientas MCP se mantienen compactas para que los esquemas de herramientas FastMCP sean pequeños y económicos de enviar a los modelos.
  • Disciplina de contexto: las herramientas devuelven datos estructurados enfocados en lugar de volcar el contexto completo del programa por defecto. Los resultados de descompilación, búsqueda de símbolos y referencias cruzadas se configuran para apoyar el análisis iterativo en lugar de una respuesta grande única.
  • Herramientas GUI solo cuando sea relevante: controles solo GUI como open_program_in_gui, list_open_programs, set_current_program y goto solo se exponen cuando el servidor se inicia con --gui.
  • CLI es opcional: si MCP no es su interfaz preferida, pyghidra-mcp-cli proporciona un cliente de línea de comandos directo sobre HTTP con comandos agrupados para flujos de trabajo comunes de edición y análisis.

Esto mantiene el servidor predeterminado utilizable para agentes LLM, integraciones IDE y automatización, sin exponer superficie innecesaria de herramientas ni controles solo GUI en sesiones sin cabeza.

Cliente CLI

Para una experiencia de línea de comandos más interactiva, puede usar el paquete separado pyghidra-mcp-cli, que proporciona una interfaz amigable para interactuar con un servidor pyghidra-mcp en ejecución.

Instalación

Instale el cliente CLI usando uv (recomendado):```bash uvx pyghidra-mcp-cli

root@kitploit:~
O instalar con pip:```bash
pip install pyghidra-mcp-cli

Inicio rápido con CLI

  1. Iniciar el servidor (en una terminal):```bash pyghidra-mcp --transport streamable-http /bin/ls
root@kitploit:~
2. **Usa la CLI** (en otra terminal):```bash
# List available binaries
pyghidra-mcp-cli list binaries

# Decompile a function
pyghidra-mcp-cli decompile --binary ls main

# Decompile with callees, referenced strings, and cross-references
pyghidra-mcp-cli decompile --binary ls main --callees --strings --xrefs

# Search for symbols (supports regex patterns)
pyghidra-mcp-cli search symbols --binary ls printf -l 10

[!NOTE] El CLI se conecta a pyghidra-mcp a través de HTTP para evitar la sobrecarga de inicio de 10 a 60 segundos al crear un nuevo proceso de Ghidra para cada comando. Consulta el README del CLI para obtener documentación completa.

Creación, Gestión y Apertura de Proyectos Existentes

Creación de Nuevos Proyectos

Puedes crear nuevos proyectos de varias maneras, según tu flujo de trabajo:

Estructura de Proyecto Autocontenida

pyghidra-mcp crea una estructura de proyecto autocontenida donde cada proyecto tiene su propio proyecto de Ghidra y artefactos de pyghidra-mcp. Esto garantiza un aislamiento completo y una gestión sencilla del proyecto.

Creación Básica de Proyectos```bash

Create a new project with default settings

pyghidra-mcp

Creates:

$ tree pyghidra_mcp_projects/ pyghidra_mcp_projects/ ├── my_project.gpr ├── my_project-pyghidra-mcp │ ├── chromadb │ └── gzfs └── my_project.rep

root@kitploit:~
#### Creación de Proyecto Personalizado```bash
# Create project with custom name and location
pyghidra-mcp --project-path ~/analysis/malware_study --project-name malware_analysis

$ tree ~/analysis/ 
/home/vscode/analysis/
└── malware_study
    ├── malware_analysis.gpr
    ├── malware_analysis-pyghidra-mcp
    │   ├── chromadb
    │   └── gzfs
    └── malware_analysis.rep

Creando múltiples proyectos relacionados```bash

Create separate projects for different analysis focuses

mkdir ~/reverse_engineering_workspace

Project for suspicious binaries

pyghidra-mcp --project-path ~/reverse_engineering_workspace/suspicious_binaries --project-name suspicious_analysis

Project for packed malware

pyghidra-mcp --project-path ~/reverse_engineering_workspace/packed_malware --project-name packed_analysis

root@kitploit:~
### Abriendo proyectos existentes de Ghidra

Si tienes proyectos existentes de Ghidra (archivos `.gpr`), puedes abrirlos directamente con `pyghidra-mcp`:

#### Abriendo por archivo .gpr```bash
# Open existing Ghidra project (project name derived from filename)
pyghidra-mcp --project-path ~/existing/ghidra/my_research.gpr

# Result: ~/existing/ghidra/my_research-pyghidra-mcp/
# └── chromadb/, gzfs/ (pyghidra-mcp additions)

Modo GUI

Use el modo GUI cuando desee que las acciones de MCP operen sobre los mismos objetos de programa en vivo que Ghidra está mostrando.

  • --gui requiere --transport streamable-http (o --transport http como alias)
  • --project-path puede ser un directorio de proyecto más --project-name, o un archivo .gpr existente. Los proyectos faltantes se crean automáticamente.
  • Ghidra es lanzado por pyghidra-mcp, lo que mantiene las transacciones de GUI y MCP en la misma JVM
  • Las herramientas solo de GUI solo se exponen cuando se ejecuta con --gui

Ejemplo:```bash pyghidra-mcp
--gui
--transport streamable-http
--project-path /absolute/path/to/my_research.gpr

root@kitploit:~
El modo GUI es la opción correcta cuando deseas:

- abrir o cambiar programas en CodeBrowser
- navegar en el listado hacia una función o dirección
- renombrar funciones o agregar comentarios y ver inmediatamente esos cambios en Ghidra

### Valores Predeterminados de Inicio y Proyectos Grandes

`pyghidra-mcp` no requiere `--wait-for-analysis` por defecto. El servidor puede iniciar mientras el análisis y la indexación del lado de MCP continúan en segundo plano.

Esto es importante para proyectos grandes:

- iniciar un proyecto con muchos binarios no necesita bloquear el inicio del servidor
- `--wait-for-analysis` está disponible cuando deseas un proyecto completamente analizado antes de atender solicitudes
- para proyectos grandes existentes, espera que la preparación del análisis y la indexación varíe según el binario

Limitación actual:

- El estado de análisis de Ghidra y el estado de indexación de MCP están separados
- un binario puede estar completamente analizado en Ghidra mientras `search_strings` o `search_code` semántico aún esperan la indexación del lado de MCP
- esto es más notable al abrir proyectos existentes más grandes

En la práctica:

- la descompilación, navegación, renombrado y comentarios aún pueden funcionar para un binario mientras las funciones de búsqueda intensiva en indexación se ponen al día
- si la latencia de inicio importa más que la preparación inmediata de búsqueda, mantén el valor predeterminado `--no-wait-for-analysis`
- si la preparación inmediata importa más que el tiempo de inicio, usa `--wait-for-analysis`

## Desarrollo

Este proyecto utiliza un `Makefile` para agilizar el desarrollo y las pruebas. `ruff` se utiliza para linting y formateo, y los hooks de `pre-commit` se utilizan para garantizar la calidad del código.

### Configuración

1.  **Instalar `uv`**: Si no tienes `uv` instalado, puedes instalarlo usando pip:
    ```bash
    pip install uv
    ```
    O sigue la guía oficial de instalación de `uv`: [https://docs.astral.sh/uv/install/](https://docs.astral.sh/uv/install/)

2.  **Crear un entorno virtual e instalar dependencias**:
    ```bash
    make dev-setup
    source ./.venv/bin/activate
    ```

3.  **Establecer la variable de entorno de Ghidra**: Descarga e instala Ghidra, luego establece la variable de entorno `GHIDRA_INSTALL_DIR` en tu directorio de instalación de Ghidra.
    ```bash
    # For Linux / Mac
    export GHIDRA_INSTALL_DIR="/path/to/ghidra/"

    # For Windows PowerShell
    [System.Environment]:https://raw.githubusercontent.com/clearbluejar/pyghidra-mcp/HEAD/:SetEnvironmentVariable(%27GHIDRA_INSTALL_DIR%27,%27C:%5Cpath%5Cto%5Cghidra%27)
    ```

### Pruebas y Calidad

El `Makefile` proporciona varios objetivos para pruebas y calidad del código:

- `make run`: Ejecutar el servidor MCP.
- `make test`: Ejecutar la suite completa de pruebas (unitarias y de integración).
- `make test-unit`: Ejecutar pruebas unitarias.
- `make test-integration`: Ejecutar pruebas de integración.
- `make test-integration-fast`: Ejecutar la prueba de humo de integración ligera utilizada por pre-commit.
- `make test-integration-gui`: Ejecutar pruebas de integración de GUI. Requiere una instalación funcional de Ghidra y soporte de GUI.
- `make lint`: Verificar el estilo del código con `ruff`.
- `make format`: Formatear código con `ruff`.
- `make typecheck`: Ejecutar comprobaciones estáticas ligeras con `ruff`.
- `make check`: Ejecutar todas las comprobaciones de calidad.
- `make dev`: Ejecutar el flujo de trabajo de desarrollo (formatear y verificar).
- `make build`: Construir paquetes de distribución.
- `make clean`: Limpiar artefactos de compilación y caché.

División recomendada:

- pre-commit: `ruff`, `pyright`, pruebas unitarias y una prueba de humo de integración ligera
- GitHub Actions: cobertura completa de integración en Linux sin cabeza, GUI de Linux bajo `Xvfb`, cobertura de CLI y pruebas de humo actuales de macOS
- CI programada: cobertura de compatibilidad con macOS/Ghidra más antiguos
- local/manual: depuración de GUI específica del entorno más pesada y comprobaciones de cordura de lanzamiento

## API

### Herramientas

Permite que los LLMs realicen acciones, hagan cálculos deterministas e interactúen con servicios externos.

#### Operaciones por Lotes

`decompile_function` y `list_xrefs` aceptan un solo objetivo o una lista de objetivos, reduciendo los viajes de ida y vuelta al analizar cadenas de llamadas o múltiples símbolos a la vez.```jsonc
// Decompile three functions in one call, with callees and xrefs attached
{
  "binary_name": "firmware.bin",
  "name_or_address": ["main", "init_hardware", "0x08001234"],
  "include_callees": true,
  "include_xrefs": true
}

// Get cross-references for multiple symbols at once
{
  "binary_name": "firmware.bin",
  "name_or_address": ["malloc", "free", "realloc"]
}

Los errores por elemento se devuelven en línea (otros objetivos aún tienen éxito):```jsonc [ {"name": "main", "code": "void main() { ... }", "callees": ["init_hardware"], "xrefs": [...]}, {"name": "0xdeadbeef", "code": "", "error": "Function or symbol '0xdeadbeef' not found."} ]

root@kitploit:~
#### Herramientas de Lectura / Análisis

- `search_code(binary_name: str, query: str, limit: int = 5, offset: int = 0, search_mode: str = "semantic", include_full_code: bool = True, preview_length: int = 500, similarity_threshold: float = 0.0)`: Busca pseudo-C descompilado mediante búsqueda vectorial semántica o coincidencia literal.

- `list_xrefs(binary_name: str, name_or_address: str | list[str])`: Lista referencias cruzadas a función(es), símbolo(s) o dirección(es). Acepta un solo objetivo o una lista para búsqueda por lotes.

- `gen_callgraph(binary_name: str, function_name: str, direction: str = "calling", display_type: str = "flow", condense_threshold: int = 50, top_layers: int = 3, bottom_layers: int = 3, max_run_time: int = 120)`: Genera un gráfico de llamadas MermaidJS para una función específica. Admite ambas direcciones "llamadas" (funciones llamadas por el objetivo) y "llamantes" (funciones que llaman al objetivo) con múltiples tipos de visualización.

- `decompile_function(binary_name: str, name_or_address: str | list[str], include_callees: bool = False, include_strings: bool = False, include_xrefs: bool = False, timeout_sec: int = 30)`: Descompila función(es) por nombre o dirección. Acepta un solo objetivo o una lista para descompilación por lotes. Los indicadores de respuesta enriquecida adjuntan callees, cadenas y/o referencias cruzadas a cada resultado. `timeout_sec` se aplica por objetivo y acota cada intento de descompilación de forma independiente.

- `list_exports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`: Lista todas las funciones y símbolos exportados de un binario específico (regex compatible para la consulta).

- `list_imports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`: Lista todas las funciones y símbolos importados de un binario específico (regex compatible para la consulta).

- `read_bytes(binary_name: str, address: str, size: int = 32)`: Lee bytes sin procesar de la memoria en una dirección específica. Las direcciones hexadecimales pueden incluir u omitir el prefijo `0x`.

- `search_strings(binary_name: str, query: str, limit: int = 100)`: Busca cadenas dentro de un binario.

- `search_symbols_by_name(binary_name: str, query: str, functions_only: bool = False, offset: int = 0, limit: int = 25)`: Busca símbolos dentro de un binario por nombre. Admite patrones regex (p.ej., `^main$`, `func.*one`) con coincidencia sin distinción de mayúsculas, o consultas de subcadenas simples. Establece `functions_only=True` para excluir etiquetas, variables y otros símbolos que no sean funciones.

#### Operaciones de Proyecto

- `import_binary(binary_path: str)`: Importa un binario desde una ruta designada al proyecto actual de Ghidra. Si la ruta es un directorio, escaneará recursivamente e importará todos los archivos binarios compatibles, preservando la estructura de directorios dentro del proyecto de Ghidra.

- `list_project_binaries()`: Lista los binarios en el proyecto actual de Ghidra. En modo GUI, esto incluye los binarios del proyecto que existen en disco incluso si no están abiertos actualmente en CodeBrowser.

- `list_project_binary_metadata(binary_name: str)`: Recupera metadatos detallados de un binario específico, incluyendo arquitectura, compilador, formato ejecutable, métricas de análisis y hashes de archivos.

- `delete_project_binary(binary_name: str)`: Elimina un binario (programa) del proyecto de Ghidra.

#### Herramientas de Edición / Mutación

- `rename_function(binary_name: str, name_or_address: str, new_name: str)`: Renombra una función por nombre o dirección. En modo GUI, esto se ejecuta como una transacción en vivo de Ghidra y actualiza el programa abierto.

- `rename_variable(binary_name: str, function_name_or_address: str, variable_name: str, new_name: str)`: Renombra un parámetro de función o variable local por nombre exacto dentro de una función específica. Si el nombre falta o es ambiguo dentro de esa función, la herramienta devuelve un error en lugar de adivinar. En modo GUI, esto se ejecuta como una transacción en vivo de Ghidra y actualiza el programa abierto.

- `set_variable_type(binary_name: str, function_name_or_address: str, variable_name: str, type_name: str)`: Establece el tipo de dato de un parámetro de función o variable local por nombre exacto dentro de una función específica. Si el nombre falta o es ambiguo dentro de esa función, la herramienta devuelve un error en lugar de adivinar. `type_name` se analiza usando el analizador de tipos de datos de Ghidra contra el gestor de tipos de datos del programa.

- `set_function_prototype(binary_name: str, function_name_or_address: str, prototype: str)`: Establece un prototipo de función a partir de una cadena de firma completa. La herramienta siempre ejecuta el prototipo a través del analizador de firmas nativo de Ghidra y devuelve el error del analizador subyacente o de aplicación si el prototipo no es válido.

- `set_comment(binary_name: str, target: str, comment: str, comment_type: str)`: Establece un comentario de función/descompilador o comentario de lista. Los objetivos de comentarios de lista pueden ser direcciones, símbolos o funciones. Los valores admitidos de `comment_type` son `decompiler`, `plate`, `pre`, `eol`, `post` y `repeatable`.

#### Herramientas de Control de GUI (`--gui` solo)

Estas herramientas solo están disponibles cuando `pyghidra-mcp` se inicia con `--gui` y controlan lo que muestra la GUI en lugar de mutar los datos del proyecto directamente:

- `list_open_programs()`: Lista los programas actualmente abiertos en la GUI de Ghidra.
- `open_program_in_gui(binary_name: str, new_window: bool = True)`: Abre un binario del proyecto en CodeBrowser. Por defecto abre una nueva ventana de CodeBrowser. Establece `new_window=false` para reutilizar un CodeBrowser visible cuando sea posible.
- `set_current_program(binary_name: str)`: Hace que un programa abierto sea el programa activo/actual en el contexto de la herramienta GUI principal.
- `goto(binary_name: str, target: str, target_type: str)`: Navega la GUI de Ghidra a una dirección o función. `target_type` debe ser `address` o `function`.

## Uso

Este paquete de Python se publica en PyPI como [pyghidra-mcp](https://pypi.org/p/pyghidra-mcp) y se puede instalar y ejecutar con [pip](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/#install-a-package), [pipx](https://pipx.pypa.io/), [uv](https://docs.astral.sh/uv/), [poetry](https://python-poetry.org/), o cualquier gestor de paquetes de Python.```text
$ uvx pyghidra-mcp --help
Usage: pyghidra-mcp [OPTIONS] [INPUT_PATHS]...

  PyGhidra Command-Line MCP server

Options:
  -v, --version                       Show version and exit.
  -t, --transport [stdio|streamable-http|sse|http]
                                      Transport protocol. SSE is deprecated;
                                      use streamable-http instead. [default: stdio]
  -p, --port INTEGER                  Port for HTTP-based transports. [default: 8000]
  -o, --host TEXT                     Host for HTTP-based transports. [default: 127.0.0.1]
  --project-path PATH                 Directory for a pyghidra-mcp project or an
                                      existing Ghidra .gpr file. [default: pyghidra_mcp_projects]
  --project-name TEXT                 Ghidra project name. Ignored for .gpr paths.
                                      [default: my_project]
  --threaded / --no-threaded          Allow threaded analysis. [default: threaded]
  --max-workers INTEGER               Number of analysis workers; 0 means CPU count.
                                      [default: 0]
  --wait-for-analysis / --no-wait-for-analysis
                                      Wait for initial analysis before starting.
                                      [default: no-wait-for-analysis]
  --gui / --no-gui                    Launch Ghidra GUI in-process and serve MCP
                                      against GUI-open programs. Cannot attach to
                                      an already-running external Ghidra process.
                                      [default: no-gui]
  --list-project-binaries             List ingested project binaries and exit.
  --delete-project-binary TEXT        Delete a project binary by name and exit.
  --force-analysis / --no-force-analysis
                                      Force a new binary analysis each run.
                                      [default: no-force-analysis]
  --verbose-analysis / --no-verbose-analysis
                                      Verbose logging for analysis. [default: no-verbose-analysis]
  --no-symbols / --with-symbols       Turn off symbols for analysis. [default: with-symbols]
  --sym-file-path PATH                Single PDB symbol file for one binary.
  -s, --symbols-path PATH             Local symbols directory.
  --gdt PATH                          Path to GDT files. May be specified multiple times.
  --program-options PATH              JSON file with Ghidra program options.
  --gzfs-path PATH                    Location to store GZFs of analyzed binaries.
  -h, --help                          Show this message and exit.

Mapeo de binarios con Docker

Al usar el contenedor Docker, puedes mapear un directorio local que contenga tus binarios al espacio de trabajo del contenedor. Esto permite que pyghidra-mcp analice tus archivos.```bash

Create and populate the new directory

mkdir -p ./binaries cp /path/to/your/binaries/* ./binaries/

Run the Docker container with volume mapping

docker run -i --rm
-v "$(pwd)/binaries:/binaries"
ghcr.io/clearbluejar/pyghidra-mcp
/binaries/*

root@kitploit:~
### Usando con OpenWeb-UI y MCPO

Puedes integrar `pyghidra-mcp` con [OpenWeb-UI](https://github.com/open-webui/open-webui) usando [MCPO](https://github.com/open-webui/mcpo), un proxy de MCP a OpenAPI. Esto te permite exponer las herramientas de `pyghidra-mcp` a través de una API RESTful estándar, haciéndolas accesibles para interfaces web y otras herramientas.


https://github.com/user-attachments/assets/3d56ea08-ed2d-471d-9ed2-556fb8ee4c95


#### Con `uvx`

Puedes ejecutar `pyghidra-mcp` y `mcpo` juntos usando `uvx`:```bash
uvx mcpo -- \
  pyghidra-mcp /bin/ls

Con Docker

Puedes combinar mcpo con Docker:```bash uvx mcpo -- docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp /bin/ls

root@kitploit:~
### Entrada/Salida Estándar (stdio)

El transporte stdio permite la comunicación a través de flujos de entrada y salida estándar. Esto es particularmente útil para integraciones locales y herramientas de línea de comandos. Consulte la [especificación](https://modelcontextprotocol.io/docs/concepts/transports#built-in-transport-types) para más detalles.

#### Python```bash
pyghidra-mcp

Por defecto, el paquete de Python se ejecutará en modo stdio. Debido a que utiliza los flujos de entrada y salida estándar, parecerá que la herramienta está colgada sin ninguna salida, pero esto es esperado.

Docker

Este servidor está publicado en el Registro de Contenedores de GitHub (ghcr.io/clearbluejar/pyghidra-mcp)``` docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

root@kitploit:~
Por defecto, el contenedor Docker inicia el servidor `streamable-http`, así que incluya `-t stdio` después del nombre de la imagen y ejecute con `-i` para el modo stdio [interactivo](https://docs.docker.com/reference/cli/docker/container/run/#interactive).

### Streamable HTTP

Streamable HTTP permite respuestas en streaming sobre JSON RPC a través de solicitudes HTTP POST. Consulte la [especificación](https://modelcontextprotocol.io/specification/draft/basic/transports#streamable-http) para más detalles.

Por defecto, el servidor escucha en [http://127.0.0.1:8000/mcp](http://127.0.0.1:8000/mcp) para conexiones de clientes. Use `--host` / `--port` o las variables de entorno `MCP_HOST` / `MCP_PORT` para cambiar la dirección de enlace. _El servidor debe estar en ejecución para que los clientes se conecten a él._

#### Python```bash
pyghidra-mcp -t streamable-http

Por defecto, el paquete de Python se ejecutará en modo stdio, por lo que deberá incluir -t streamable-http.

El modo GUI utiliza este transporte:```bash pyghidra-mcp
--gui
--transport streamable-http
--project-path /absolute/path/to/my_project.gpr

root@kitploit:~
#### Docker```
docker run -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp

Eventos enviados por el servidor (SSE)

[!WARNING] La comunidad MCP considera este un protocolo de transporte heredado destinado a la retrocompatibilidad. Se recomienda Streamable HTTP como reemplazo.

El transporte SSE permite la transmisión de servidor a cliente con Server-Sent Events para la comunicación de cliente a servidor y de servidor a cliente. Consulte la especificación para más detalles.

Por defecto, el servidor escucha en http://127.0.0.1:8000/sse para conexiones de clientes. Utilice --host / --port o las variables de entorno MCP_HOST / MCP_PORT para cambiar la dirección de enlace. El servidor debe estar ejecutándose para que los clientes se conecten a él.

Python```bash

pyghidra-mcp -t sse

root@kitploit:~
Por defecto, el paquete de Python se ejecutará en modo `stdio`, por lo que tendrás que incluir `-t sse`.

#### Docker```
docker run -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp -t sse

Integraciones

[!NOTE] Esta sección está en proceso. Pronto añadiremos ejemplos para integraciones específicas.

Claude Desktop

Añade el siguiente bloque JSON a tu archivo claude_desktop_config.json:```json { "mcpServers": { "pyghidra-mcp": { "command": "uvx", "args": [ "--from", "git+https://github.com/clearbluejar/pyghidra-mcp", "pyghidra-mcp", "--project-path", "/tmp/pyghidra", // or path to writeable directory "/bin/ls" // ], "env": { "GHIDRA_INSTALL_DIR": "/path/to/ghidra/ghidra_12.0_PUBLIC" } } } }

root@kitploit:~
## Inspiración

La implementación y diseño de este proyecto se inspiraron en estos proyectos increíbles:

* [GhidraMCP](https://github.com/lauriewired/GhidraMCP)
* [semgrep-mcp](https://github.com/semgrep/mcp)
* [ghidrecomp](https://github.com/clearbluejar/ghidrecomp)
* [BinAssistMCP](https://github.com/jtang613/BinAssistMCP)

---

## Contribuir, comunidad y ejecución desde el código fuente

Creemos que el futuro de la ingeniería inversa es agentivo, contextual y escalable.  
`pyghidra-mcp` es un paso hacia ese futuro—hacer que los proyectos completos de Ghidra sean accesibles para agentes de IA y pipelines de automatización.

Estamos desarrollando activamente el proyecto y agradecemos comentarios, problemas y contribuciones.

> [!NOTE]
> Nos encantan sus comentarios, informes de errores, solicitudes de funciones y código.

### Flujo de trabajo del colaborador

Si estás añadiendo una nueva herramienta o integración, este es el flujo de trabajo recomendado:

- Etiqueta tu rama con el prefijo `feature/` para indicar una nueva capacidad.
- Añade tu herramienta usando el mismo estilo y estructura que las herramientas existentes en `pyghidra/tools/`.
- Escribe una prueba de integración que ejercite tu herramienta usando una instancia de `StdioClient`. Colócala en `tests/integration/`.
- Amplía las pruebas concurrentes añadiendo una llamada a tu herramienta en `tests/integration/test_concurrent_streamable_client.py`.
- Ejecuta `make test` y `make format` para asegurarte de que tus cambios pasan todas las pruebas y cumplen con las reglas de linting.

Esto asegura consistencia en todo el código base y nos ayuda a mantener herramientas robustas y escalables para flujos de trabajo de ingeniería inversa.

______________________________________________________________________

Hecho con ❤️ por el [PyGhidra-MCP Team](https://github.com/clearbluejar/pyghidra-mcp)