Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/clearbluejar/pyghidra-mcp
組み込みシステムセキュリティ静的分析コード分析リバースエンジニアリングデバッガマルウェア分析バイナリ解析学習と教育AI支援リバースエンジニアリングファームウェア解析
GitHubclearbluejar/pyghidra-mcp

pyghidra-mcp

4045511日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Python コマンドライン Ghidra MCP

リポジトリを見る

GitHub Workflow Status (with event) PyPI - Downloads

PyGhidra-MCP - Ghidra Model Context Protocol サーバー

概要

pyghidra-mcp は、堅牢なソフトウェアリバースエンジニアリング(SRE)スイートである Ghidra の分析機能のすべてを、インテリジェントエージェントや LLM ベースのツールの世界にもたらすコマンドライン Model Context Protocol (MCP) サーバーです。 pyghidra と jpype を使用して Ghidra の ProgramAPI と FlatProgramAPI を Python に橋渡しし、その機能を Model Context Protocol を介して公開します。

MCP は、言語モデル、開発ツール(VS Code など)、自律エージェントが構造化されたコンテキストにアクセスし、ツールを呼び出し、インテリジェントに連携できるようにする統一インターフェースです。MCP は、強力な分析ツールと LLM エコシステムの間の架け橋だと考えてください。

pyghidra-mcp を使うと、Ghidra はインテリジェントなバックエンドになります。コンテキストが豊富なクエリに応答し、高度なリバースエンジニアリングタスクを自動化し、AI 支援ワークフローに統合する準備が整います。

pyghidra-mcp は現在、2 つの動作モードをサポートしています。

  • CLI 駆動の分析と自動化のための headless モード
  • pyghidra-mcp を通じて Ghidra を起動し、実行中の GUI とライブなプログラム状態を共有する --gui モード

[!NOTE] このベータプロジェクトは活発に開発中です。フィードバック、バグ報告、機能リクエスト、コードをお待ちしています。

また別の Ghidra MCP?

ええ、元の ghidra-mcp は素晴らしいです。しかし pyghidra-mcp は異なるアプローチを取ります:

  • 🐍 ヘッドレス優先、GUI 対応 – 効率的な自動化のため CLI だけで完全に実行するか、ライブな GUI ナビゲーションと編集が必要な場合は --gui で Ghidra を起動します。
  • 🔁 自動化向け設計 – 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 Model Context Protocol Server](#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)
    - [Streamable 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)

## はじめに

[Pythonパッケージ](https://pypi.org/p/pyghidra-mcp)をCLIコマンドとして[`uv`](https://docs.astral.sh/uv/guides/tools/)で実行します:```bash
uvx pyghidra-mcp # Creates pyghidra_mcp_projects directory by default
ツールをダウンロード

MCP からライブの Ghidra GUI を起動・制御するには、streamable-http で --gui を使用します:```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 のサーフェスを意図的に狭く保つことで、エージェントクライアントがツールの発見と引数選択に費やすトークンを削減します。

  • 短いツール説明: MCP ツールの docstring はコンパクトに保たれるため、FastMCP のツールスキーマは小さく、モデルへの送信コストも低く抑えられます。
  • コンテキストの制約: ツールはデフォルトでプログラム全体のコンテキストをダンプするのではなく、焦点を絞った構造化データを返します。逆コンパイル、シンボル検索、相互参照の結果は、一度の大きなレスポンスではなく反復的な分析をサポートするように構成されています。
  • 関連する場合にのみ GUI ツール: open_program_in_gui、list_open_programs、set_current_program、goto などの GUI 専用コントロールは、サーバーが --gui 付きで起動された場合にのみ公開されます。
  • CLI はオプション: MCP が好みのインターフェースでない場合は、pyghidra-mcp-cli が HTTP 経由の直接的なコマンドラインクライアントを提供し、一般的な編集および分析ワークフロー向けにグループ化されたコマンドを備えています。

これにより、デフォルトサーバーは、ヘッドレスセッションで不要なツールサーフェスや GUI 専用コントロールを公開することなく、LLM エージェント、IDE 統合、自動化に使用できます。

CLI クライアント

よりインタラクティブなコマンドライン操作を求める場合は、別途提供される pyghidra-mcp-cli パッケージを使用できます。これは、実行中の pyghidra-mcp サーバーと対話するための使いやすいインターフェースを提供します。

インストール

CLI クライアントは uv を使用してインストールします(推奨):```bash uvx pyghidra-mcp-cli

root@kitploit:~
またはpipでインストール:```bash
pip install pyghidra-mcp-cli

CLIでのクイックスタート

  1. サーバーを起動する(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 は、コマンドごとに新しい Ghidra プロセスを起動する際の 10〜60 秒の起動オーバーヘッドを避けるため、HTTP 経由で pyghidra-mcp に接続します。完全なドキュメントについては、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`、ユニットテスト、および1つの軽量な統合スモークテスト
- GitHub Actions: Linuxヘッドレスでの完全な統合テストカバレッジ、`Xvfb` によるLinux GUI、CLIカバレッジ、および現在のmacOSスモークテスト
- 定期CI: 旧バージョンのmacOS / Ghidra互換性カバレッジ
- ローカル/手動: より重い環境固有のGUIデバッグとリリースの健全性チェック

## API

### ツール

LLMがアクションを実行し、決定論的な計算を行い、外部サービスと対話できるようにします。

#### バッチ操作

`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コールグラフを生成します。複数の可視化タイプで、「calling」(ターゲットによって呼び出される関数)と「called」(ターゲットを呼び出す関数)の両方向をサポートします。

- `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)`: 名前またはアドレスで関数を逆コンパイルします。単一のターゲットまたはバッチ逆コンパイル用のリストを受け入れます。リッチレスポンスフラグは、各結果にcallees、strings、および/またはxrefsを添付します。`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)`: 指定されたアドレスのメモリから生のバイトを読み取ります。16進アドレスには `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ウィンドウが開きます。可能な場合は表示中のCodeBrowserを再利用するには、`new_window=false` を設定します。
- `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での使用

`pyghidra-mcp`は、[MCPO](https://github.com/open-webui/mcpo)(MCP-to-OpenAPIプロキシ)を使用して、[OpenWeb-UI](https://github.com/open-webui/open-webui)と統合できます。これにより、`pyghidra-mcp`のツールを標準的なRESTful APIを通じて公開し、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のContainer Registry(ghcr.io/clearbluejar/pyghidra-mcp)に公開されています。``` docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

root@kitploit:~
デフォルトでは、Dockerコンテナは `streamable-http` サーバーを起動するため、イメージ名の後に `-t stdio` を含め、[インタラクティブ](https://docs.docker.com/reference/cli/docker/container/run/#interactive) stdio モードで `-i` を指定して実行してください。

### 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トランスポートは、クライアントからサーバーへの通信とサーバーからクライアントへの通信のために、Server-Send Eventsによるサーバーからクライアントへのストリーミングを可能にします。詳細は仕様を参照してください。

デフォルトでは、サーバーはクライアント接続を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

統合

[!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 Team](https://github.com/clearbluejar/pyghidra-mcp) によって ❤️ を込めて作られました