Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
pyghidra-mcp — Python Command-Line Ghidra MCP | Kitploit
工具/GitHubGitHub/clearbluejar/pyghidra-mcp
Embedded Systems SecurityStatic AnalysisCode AnalysisReverse EngineeringDebuggersMalware AnalysisBinary AnalysisLearning & EducationAI-Assisted ReversingFirmware Analysis
GitHubclearbluejar/pyghidra-mcp

pyghidra-mcp

4045512天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Python Command-Line Ghidra MCP

查看仓库

GitHub Workflow Status (with event) PyPI - Downloads

PyGhidra-MCP - Ghidra 模型上下文协议服务器

概述

pyghidra-mcp 是一个命令行模型上下文协议 (MCP) 服务器,它将 Ghidra(一款强大的软件逆向工程 (SRE) 套件)的全部分析能力引入智能代理和基于 LLM 的工具世界。 它通过 pyghidra 和 jpype 将 Ghidra 的 ProgramAPI 和 FlatProgramAPI 桥接到 Python,然后通过模型上下文协议暴露这些功能。

MCP 是一个统一接口,允许语言模型、开发工具(如 VS Code)和自主代理访问结构化上下文、调用工具并进行智能协作。可以将 MCP 视为强大分析工具与 LLM 生态系统之间的桥梁。

使用 pyghidra-mcp,Ghidra 成为一个智能后端——随时准备响应上下文丰富的查询、自动化深度逆向工程任务,并集成到 AI 辅助工作流中。

pyghidra-mcp 现在支持两种操作模式:

  • headless 模式,用于 CLI 驱动的分析和自动化
  • --gui 模式,通过 pyghidra-mcp 启动 Ghidra 并与运行中的 GUI 共享实时程序状态

[!NOTE] 此 Beta 项目正在积极开发中。我们欢迎您的反馈、错误报告、功能请求和代码贡献。

又一个 Ghidra MCP?

是的,原版 ghidra-mcp 非常出色。但 pyghidra-mcp 采取了不同的方法:

  • 🐍 首选无头模式,支持 GUI – 完全通过 CLI 运行以实现精简自动化,或在使用 --gui 启动 Ghidra 时进行实时 GUI 导航和编辑。
  • 🔁 专为自动化设计 – 非常适合集成到 LLM、CI 管道和需要可重复行为的工具中。
  • ✅ CI/CD 友好 – 包含针对客户端和服务器会话的强大单元测试和集成测试。
  • 🚀 快速启动 – 异步启动允许服务器在处理请求的同时后台分析二进制文件。支持快速命令行启动,设置最小化。
  • 📦 项目范围分析 – 支持并发逆向工程 Ghidra 项目中的所有二进制文件
  • 🤖 代理就绪 – 为智能代理驱动的工作流和大规模逆向工程自动化而构建。
  • 🔍 语义代码搜索 – 使用向量嵌入(通过 ChromaDB)实现对反编译函数、注释和符号的快速模糊查找——非常适合伪 C 代码探索和代理驱动的分类。

该项目提供以 Python 为先的体验,针对本地开发、无头环境和可测试工作流进行了优化。

设置图

各部分如何连接```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:~
### 选择模式```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"]
  • 无头 MCP:为本地 MCP 主机使用 stdio,或在多个客户端需要同一个长期运行的 Ghidra 项目时使用 streamable-http。
  • GUI 模式:pyghidra-mcp 启动 Ghidra、打开项目,并暴露额外的工具,用于在同一 JVM 中操控 CodeBrowser。
  • CLI 客户端:pyghidra-mcp-cli 是一个 HTTP 客户端。先启动一个 streamable-http 服务器,然后向该运行中的服务器发出终端命令。
详细架构及工具界面```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>

## 目录

- [PyGhidra-MCP - Ghidra 模型上下文协议服务器](#pyghidra-mcp---ghidra-model-context-protocol-server)
    - [概述](#overview)
  - [又一个 Ghidra MCP?](#yet-another-ghidra-mcp)
  - [设置图](#setup-diagrams)
    - [各部分如何连接](#how-the-pieces-connect)
    - [选择模式](#choosing-a-mode)
  - [目录](#contents)
  - [开始使用](#getting-started)
  - [针对智能体优化](#optimized-for-agents)
  - [CLI 客户端](#cli-client)
    - [安装](#installation)
    - [CLI 快速开始](#quick-start-with-cli)
  - [项目创建、管理及打开现有项目](#project-creation-management-and-opening-existing-projects)
    - [创建新项目](#creating-new-projects)
      - [自包含项目结构](#self-contained-project-structure)
      - [基本项目创建](#basic-project-creation)
      - [自定义项目创建](#custom-project-creation)
      - [创建多个相关项目](#creating-multiple-related-projects)
    - [打开现有 Ghidra 项目](#opening-existing-ghidra-projects)
      - [通过 .gpr 文件打开](#opening-by-gpr-file)
    - [GUI 模式](#gui-mode)
    - [启动默认值和大项目](#startup-defaults-and-large-projects)
  - [开发](#development)
    - [设置](#setup)
    - [测试与质量](#testing-and-quality)
  - [API](#api)
    - [工具](#tools)
      - [批量操作](#batch-operations)
      - [读取/分析工具](#read--analysis-tools)
      - [项目操作](#project-operations)
      - [编辑/更改工具](#edit--mutation-tools)
      - [GUI 控制工具(仅 `--gui`)](#gui-control-tools---gui-only)
  - [用法](#usage)
    - [使用 Docker 映射二进制文件](#mapping-binaries-with-docker)
    - [与 OpenWeb-UI 和 MCPO 一起使用](#using-with-openweb-ui-and-mcpo)
      - [使用 `uvx`](#with-uvx)
      - [使用 Docker](#with-docker)
    - [标准输入/输出(stdio)](#standard-inputoutput-stdio)
      - [Python](#python)
      - [Docker](#docker)
    - [可流式 HTTP](#streamable-http)
      - [Python](#python-1)
      - [Docker](#docker-1)
    - [服务器发送事件(SSE)](#server-sent-events-sse)
      - [Python](#python-2)
      - [Docker](#docker-2)
  - [集成](#integrations)
    - [Claude Desktop](#claude-desktop)
  - [灵感](#inspiration)
  - [贡献、社区及从源码运行](#contributing-community-and-running-from-source)
    - [贡献者工作流](#contributor-workflow)

## 开始使用

使用 [`uv`](https://docs.astral.sh/uv/guides/tools/) 将 [Python 包](https://pypi.org/p/pyghidra-mcp) 作为 CLI 命令运行:```bash
uvx pyghidra-mcp # Creates pyghidra_mcp_projects directory by default
下载工具

要从MCP启动并控制一个实时的Ghidra图形界面,请使用--gui与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` 通过 `pyghidra-mcp` 启动 Ghidra。它不会附加到已运行的外部 Ghidra 实例。

或者,作为 [Docker 容器](https://ghcr.io/clearbluejar/pyghidra-mcp) 运行:```bash
docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

为代理进行优化

pyghidra-mcp 有意保持 MCP 表面狭窄,以便代理客户端在工具发现和参数选择上花费更少的 tokens。

  • 简短的工具描述:MCP 工具文档字符串保持紧凑,以便 FastMCP 工具模式保持小巧,发送给模型成本低廉。
  • 上下文约束:工具默认返回聚焦的结构化数据,而不是倾倒整个程序上下文。反编译、符号搜索和交叉引用结果以支持迭代分析而非一次性大响应的方式进行塑造。
  • 仅在相关时显示 GUI 工具:仅当服务器以 --gui 启动时,才公开如 open_program_in_gui、list_open_programs、set_current_program 和 goto 等仅限 GUI 的控制项。
  • CLI 是可选的:如果 MCP 不是您偏好的接口,pyghidra-mcp-cli 提供了一个通过 HTTP 的直接命令行客户端,并带有分组命令,用于常见的编辑和分析工作流。

这使得默认服务器可用于 LLM 代理、IDE 集成和自动化,而不会在无头会话中暴露不必要的工具表面或仅限 GUI 的控制项。

CLI 客户端

为了获得更交互式的命令行体验,您可以使用独立的 pyghidra-mcp-cli 包,它提供了一个用户友好的界面,用于与正在运行的 pyghidra-mcp 服务器交互。

安装

使用 uv 安装 CLI 客户端(推荐):```bash uvx pyghidra-mcp-cli

root@kitploit:~
或者使用pip安装:```bash
pip install pyghidra-mcp-cli

快速开始使用 CLI

  1. 启动服务器(在一个终端中):```bash pyghidra-mcp --transport streamable-http /bin/ls
root@kitploit:~
2. **使用CLI**(在另一个终端中):```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] CLI 通过 HTTP 连接到 pyghidra-mcp,以避免为每个命令生成新 Ghidra 进程所需的 10-60 秒启动开销。完整文档请参见 CLI README。

创建、管理和打开现有项目

创建新项目

根据工作流程,您可以通过多种方式创建新项目:

自包含项目结构

pyghidra-mcp 创建 自包含项目结构,每个项目都有自己的 Ghidra 项目及 pyghidra-mcp 工件,从而确保完全隔离并简化项目管理。

基本项目创建```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:~
#### 自定义项目创建```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

创建多个相关项目```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:~
### 打开现有 Ghidra 项目

如果你已有 Ghidra 项目 (`.gpr` 文件),你可以直接通过 `pyghidra-mcp` 打开它们:

#### 通过 .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)

GUI 模式

当你希望 MCP 操作针对 Ghidra 当前显示的同一个实时程序对象执行时,请使用 GUI 模式。

  • --gui 需要配合 --transport streamable-http(或别名 --transport http)使用
  • --project-path 可以是项目目录加 --project-name,也可以是现有的 .gpr 文件。缺失的项目会自动创建。
  • Ghidra 由 pyghidra-mcp 启动,这样 GUI 和 MCP 事务运行在同一个 JVM 中
  • GUI 专用工具仅在以 --gui 运行时才会暴露

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

root@kitploit:~
GUI模式是当你想在以下情况下选择的正确方式:

- 在CodeBrowser中打开或切换程序
- 导航列表到函数或地址
- 重命名函数或添加注释,并立即在Ghidra中看到这些更改

### 启动默认设置与大型项目

`pyghidra-mcp` 默认不需要 `--wait-for-analysis`。服务器可以在分析和MCP端索引在后台继续时启动。

这对大型项目很重要:

- 启动包含许多二进制文件的项目不需要阻塞服务器启动
- 当你希望在服务请求之前获得完全分析的项目时,可以使用 `--wait-for-analysis`
- 对于大型现有项目,预计分析和索引就绪状态因二进制文件而异

当前限制:

- Ghidra分析状态和MCP索引状态是分开的
- 一个二进制文件在Ghidra中可能已经完全分析,而 `search_strings` 或语义 `search_code` 仍在等待MCP端索引
- 这在打开较大的现有项目时更为明显

实际使用中:

- 反编译、导航、重命名和注释仍然可以用于一个二进制文件,而索引密集型搜索功能正在追赶
- 如果启动延迟比即时搜索就绪更重要,则保持默认 `--no-wait-for-analysis`
- 如果即时就绪比启动时间更重要,则使用 `--wait-for-analysis`

## 开发

该项目使用 `Makefile` 来简化开发和测试。使用 `ruff` 进行代码检查和格式化,并使用 `pre-commit` 钩子确保代码质量。

### 设置

1.  **安装 `uv`**:如果你没有安装 `uv`,可以使用 pip 安装:
    ```bash
    pip install uv
    ```
    或者,按照官方 `uv` 安装指南:[https://docs.astral.sh/uv/install/](https://docs.astral.sh/uv/install/)

2.  **创建虚拟环境并安装依赖**:
    ```bash
    make dev-setup
    source ./.venv/bin/activate
    ```

3.  **设置 Ghidra 环境变量**:下载并安装 Ghidra,然后将 `GHIDRA_INSTALL_DIR` 环境变量设置为你的 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)
    ```

### 测试与质量

`Makefile` 提供了多个测试和代码质量目标:

- `make run`: 运行 MCP 服务器。
- `make test`: 运行完整的测试套件(单元测试和集成测试)。
- `make test-unit`: 运行单元测试。
- `make test-integration`: 运行集成测试。
- `make test-integration-fast`: 运行用于 pre-commit 的轻量级集成冒烟测试。
- `make test-integration-gui`: 运行 GUI 集成测试。需要可用的 Ghidra 安装和 GUI 支持。
- `make lint`: 使用 `ruff` 检查代码风格。
- `make format`: 使用 `ruff` 格式化代码。
- `make typecheck`: 使用 `ruff` 运行轻量级静态检查。
- `make check`: 运行所有质量检查。
- `make dev`: 运行开发工作流(格式化和检查)。
- `make build`: 构建分发包。
- `make clean`: 清理构建产物和缓存。

推荐的分工:

- pre-commit: `ruff`, `pyright`, 单元测试,以及一个轻量级集成冒烟测试
- GitHub Actions: 完整的 Linux 无头集成测试覆盖、在 `Xvfb` 下的 Linux GUI 测试、CLI 覆盖,以及当前的 macOS 冒烟测试
- 定时 CI: 较旧的 macOS / Ghidra 兼容性覆盖
- 本地/手动: 更重的特定环境 GUI 调试和发布完整性检查

## API 接口

### 工具

允许 LLMs 执行操作、进行确定性计算并与外部服务交互。

#### 批量操作

`decompile_function` 和 `list_xrefs` 接受单个目标或目标列表,在分析调用链或同时分析多个符号时减少往返次数。```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"]
}

每项错误以内联方式返回(其他目标仍然成功):```jsonc [ {"name": "main", "code": "void main() { ... }", "callees": ["init_hardware"], "xrefs": [...]}, {"name": "0xdeadbeef", "code": "", "error": "Function or symbol '0xdeadbeef' not found."} ]

root@kitploit:~
#### 读取/分析工具

- `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)`:使用语义向量搜索或字面匹配搜索反编译的伪C代码。

- `list_xrefs(binary_name: str, name_or_address: str | list[str])`:列出函数、符号或地址的交叉引用。接受单个目标或列表进行批量查找。

- `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)`:为指定函数生成MermaidJS调用图。支持“调用”(目标调用的函数)和“被调用”(调用目标的函数)两种方向,并提供多种可视化类型。

- `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)`:按名称或地址反编译函数。接受单个目标或列表进行批量反编译。丰富的响应标志可为每个结果附加被调用者、字符串和/或交叉引用。`timeout_sec` 应用于每个目标,并独立限制每次反编译尝试。

- `list_exports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`:列出指定二进制文件中的所有导出函数和符号(查询支持正则表达式)。

- `list_imports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`:列出指定二进制文件的所有导入函数和符号(查询支持正则表达式)。

- `read_bytes(binary_name: str, address: str, size: int = 32)`:从指定地址的内存中读取原始字节。十六进制地址可以包含或省略 `0x` 前缀。

- `search_strings(binary_name: str, query: str, limit: int = 100)`:在二进制文件中搜索字符串。

- `search_symbols_by_name(binary_name: str, query: str, functions_only: bool = False, offset: int = 0, limit: int = 25)`:按名称在二进制文件中搜索符号。支持正则表达式模式(例如 `^main$`、`func.*one`)进行不区分大小写的匹配,或纯子字符串查询。设置 `functions_only=True` 可排除标签、变量和其他非函数符号。

#### 项目操作

- `import_binary(binary_path: str)`:从指定路径将二进制文件导入当前Ghidra项目。如果路径是目录,它将递归扫描并导入所有支持的二进制文件,并在Ghidra项目中保留目录结构。

- `list_project_binaries()`:列出当前Ghidra项目中的二进制文件。在GUI模式下,这包括磁盘上存在但当前未在CodeBrowser中打开的项目二进制文件。

- `list_project_binary_metadata(binary_name: str)`:检索指定二进制文件的详细元数据,包括架构、编译器、可执行格式、分析指标和文件哈希。

- `delete_project_binary(binary_name: str)`:从Ghidra项目中删除二进制文件(程序)。

#### 编辑/变异工具

- `rename_function(binary_name: str, name_or_address: str, new_name: str)`:按名称或地址重命名函数。在GUI模式下,此操作作为实时Ghidra事务运行并更新打开的程序。

- `rename_variable(binary_name: str, function_name_or_address: str, variable_name: str, new_name: str)`:在特定函数内按确切名称重命名函数参数或局部变量。如果该名称在函数内缺失或不明确,工具将返回错误而不是猜测。在GUI模式下,此操作作为实时Ghidra事务运行并更新打开的程序。

- `set_variable_type(binary_name: str, function_name_or_address: str, variable_name: str, type_name: str)`:在特定函数内按确切名称设置函数参数或局部变量的数据类型。如果该名称在函数内缺失或不明确,工具将返回错误而不是猜测。`type_name` 使用Ghidra的数据类型解析器针对程序数据类型管理器进行解析。

- `set_function_prototype(binary_name: str, function_name_or_address: str, prototype: str)`:从完整签名字符串设置函数原型。该工具始终通过Ghidra的原生签名解析器运行原型,如果原型无效则返回底层解析器或应用错误。

- `set_comment(binary_name: str, target: str, comment: str, comment_type: str)`:设置函数/反编译器注释或列表注释。列表注释目标可以是地址、符号或函数。支持的 `comment_type` 值为 `decompiler`、`plate`、`pre`、`eol`、`post` 和 `repeatable`。

#### GUI控制工具(仅限`--gui`)

这些工具仅在 `pyghidra-mcp` 以 `--gui` 启动时可用,用于控制GUI显示内容,而不是直接修改项目数据:

- `list_open_programs()`:列出当前在Ghidra GUI中打开的程序。
- `open_program_in_gui(binary_name: str, new_window: bool = True)`:在CodeBrowser中打开项目二进制文件。默认情况下会打开一个新的CodeBrowser窗口。设置 `new_window=false` 以尽可能重用可见的CodeBrowser。
- `set_current_program(binary_name: str)`:使打开的程序成为主GUI工具上下文中的活动/当前程序。
- `goto(binary_name: str, target: str, target_type: str)`:将Ghidra GUI导航到地址或函数。`target_type` 必须是 `address` 或 `function`。

## 用法

此Python包已发布到PyPI,名称为 [pyghidra-mcp](https://pypi.org/p/pyghidra-mcp),可以使用 [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/) 或任何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.

使用Docker映射二进制文件

使用Docker容器时,您可以将包含二进制文件的本地目录映射到容器的工作空间中。这样 pyghidra-mcp 就能分析您的文件。```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:~
### 与 OpenWeb-UI 和 MCPO 一起使用

您可以使用 [MCPO](https://github.com/open-webui/mcpo)(一个 MCP 到 OpenAPI 的代理)将 `pyghidra-mcp` 集成到 [OpenWeb-UI](https://github.com/open-webui/open-webui) 中。这样可以通过标准的 RESTful API 暴露 `pyghidra-mcp` 的工具,使其可供 Web 界面和其他工具访问。


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


#### 使用 `uvx`

您可以使用 `uvx` 同时运行 `pyghidra-mcp` 和 `mcpo`:```bash
uvx mcpo -- \
  pyghidra-mcp /bin/ls

使用 Docker

你可以将 mcpo 与 Docker 结合使用:```bash uvx mcpo -- docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp /bin/ls

root@kitploit:~
### 标准输入/输出 (stdio)

stdio传输通过标准输入和输出流实现通信。这对于本地集成和命令行工具特别有用。有关更多详细信息,请参阅[规范](https://modelcontextprotocol.io/docs/concepts/transports#built-in-transport-types)。

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

默认情况下,Python 包以 stdio 模式运行。因为它使用标准输入和输出流,所以工具看起来会像挂起一样没有输出,但这是正常现象。

Docker

该服务器已发布到 GitHub 的容器注册表(ghcr.io/clearbluejar/pyghidra-mcp)``` docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

root@kitploit:~
默认情况下,Docker 容器启动 `streamable-http` 服务器,因此需要在镜像名称后添加 `-t stdio`,并使用 `-i` 以交互式 stdio 模式运行。

### Streamable HTTP

Streamable HTTP 通过 HTTP POST 请求实现基于 JSON RPC 的流式响应。更多详情请参阅[规范](https://modelcontextprotocol.io/specification/draft/basic/transports#streamable-http)。

默认情况下,服务器监听于 [http://127.0.0.1:8000/mcp](http://127.0.0.1:8000/mcp) 以接受客户端连接。使用 `--host` / `--port` 或 `MCP_HOST` / `MCP_PORT` 环境变量可更改绑定地址。 _服务器必须处于运行状态,客户端才能连接。_

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

默认情况下,Python 包将运行在 stdio 模式下,因此您必须包含 -t streamable-http。

GUI 模式使用此传输方式:```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

服务器发送事件(SSE)

[!WARNING] MCP社区认为这是一种遗留传输协议,旨在向后兼容。推荐使用 Streamable HTTP 作为替代。

SSE传输利用服务器发送事件实现服务器到客户端的流式传输,用于客户端到服务器和服务器到客户端的通信。更多详情请参阅规范。

默认情况下,服务器监听在 http://127.0.0.1:8000/sse 以接受客户端连接。使用 --host / --port 或 MCP_HOST / MCP_PORT 环境变量来更改绑定地址。服务器必须运行,客户端才能连接。

Python```bash

pyghidra-mcp -t sse

root@kitploit:~
默认情况下,Python包将以`stdio`模式运行,因此您需要包含`-t sse`参数。

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

Integrations

[!NOTE] 此部分仍在完善中。我们将很快添加具体集成的示例。

Claude Desktop

将以下 JSON 块添加到您的 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:~
## 灵感

本项目的实现和设计受到了以下优秀项目的启发:

* [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)

---

## 贡献、社区与从源码运行

我们相信逆向工程的未来是智能代理化、上下文相关且可扩展的。  
`pyghidra-mcp` 是朝向这一未来迈出的一步——将完整的 Ghidra 项目开放给 AI 代理和自动化流水线。

我们正在积极开发本项目,欢迎反馈、问题报告和贡献。

> [!NOTE]
> 我们欢迎您的反馈、错误报告、功能请求和代码。

### 贡献者工作流程

如果您要添加新的工具或集成,请遵循以下推荐流程:

- 使用前缀 `feature/` 标记您的分支,以表明这是一个新功能。
- 采用与 `pyghidra/tools/` 中现有工具相同的风格和结构添加您的工具。
- 编写一个集成测试,通过 `StdioClient` 实例来测试您的工具。将其放置在 `tests/integration/` 中。
- 通过在 `tests/integration/test_concurrent_streamable_client.py` 中添加对您工具的调用来扩展并发测试。
- 运行 `make test` 和 `make format`,以确保您的更改通过所有测试并符合代码检查规则。

这可以确保代码库的一致性,并帮助我们为逆向工程工作流维护稳健、可扩展的工具集。

______________________________________________________________________

由 [PyGhidra-MCP 团队](https://github.com/clearbluejar/pyghidra-mcp) ❤️ 制作