MCPcopy Index your code
hub / github.com/bethington/ghidra-mcp

github.com/bethington/ghidra-mcp @v5.14.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v5.14.2 ↗ · + Follow
4,910 symbols 17,653 edges 311 files 2,339 documented · 48% updated 3d agov5.14.2 · 2026-06-27★ 2,7144 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Ghidra MCP Server

Tests Release License GitHub Sponsors

Python Java Ghidra MCP

Stars Last commit Discussions Issues OpenSSF Scorecard

If you find this useful, please ⭐ star the repo — it helps others discover it!

If Ghidra MCP saves you time, consider sponsoring the project. One-time and recurring support both help fund compatibility updates, production hardening, docs, and new tooling.

A production-ready Model Context Protocol (MCP) server that bridges Ghidra's powerful reverse engineering capabilities with modern AI tools and automation frameworks. 251 MCP tools, battle-tested AI workflows, and the most comprehensive Ghidra-MCP integration available — now including P-code emulation, live debugger integration, and PCode-graph data flow analysis.

Why Ghidra MCP?

Most Ghidra MCP implementations give you a handful of read-only tools and call it a day. This project is different — it was built by a reverse engineer who uses it daily on real binaries, not as a demo.

  • 251 MCP tools — 3x more than any competing implementation. Not just read operations — full write access for renaming, typing, commenting, structure creation, script execution, P-code emulation, and live debugging.
  • Battle-tested AI workflows — Proven documentation workflows (V5) refined across hundreds of functions. Includes step-by-step prompts, Hungarian notation reference, batch processing guides, and orphaned code discovery.
  • Production-grade reliability — Atomic transactions, batch operations (93% API call reduction), configurable timeouts, and graceful error handling. No silent failures.
  • Cross-binary documentation transfer — SHA-256 function hash matching propagates documentation across binary versions automatically. Document once, apply everywhere.
  • Full Ghidra Server integration — Connect to shared Ghidra servers, manage repositories, version control, checkout/checkin workflows, and multi-user collaboration.
  • Headless and GUI modes — Run with or without the Ghidra GUI. Docker-ready for CI/CD pipelines and automated analysis at scale.
  • Opinionated by design — v5.0 moves naming conventions, type safety, and documentation standards into the tool layer. AI agents and human engineers produce consistent output without style guides in every prompt.

Convention Enforcement

You've been there: six months into a project you find ProcessItem, process_items, handleItem, and ItemProc in the same codebase — four functions doing the same thing, named by four different sessions or engineers with no shared contract. Fixing it takes longer than it should, and the problem will happen again.

v5.0 moves conventions from "things to remember" into the tool layer, where they can actually be enforced.

Tier Behavior Example
Auto-fix Applied silently count field on a uint32 → auto-prefixed dwCount on save
Warn Change goes through, warning returned processData → "name should be PascalCase with a verb: ProcessData"
Reject Change blocked with explanation undefined → undefined type change → "no-op rejected, type unchanged"

For AI agents, this means consistent output across every session, every model, every run — without pasting a style guide into every prompt. The tool knows the rules; the model just needs to make the call.

For teams, it eliminates the entire class of review comment that says "that's not our naming convention." Convention arbitration stays in the tool, not in code review.

For solo work at scale, analyze_function_completeness gives you a 0–100% score that measures honestly: structural deductions (unfixable compiler artifacts) are forgiven in your effective score, log-scaling prevents one bad category from burying everything else, and tiered plate comment quality means you know exactly what's missing and why.

🌟 Features

Core MCP Integration

  • Full MCP Compatibility — Complete implementation of Model Context Protocol
  • 251 MCP Tools — Comprehensive API surface covering every aspect of binary analysis
  • Production-Ready Reliability — Atomic transactions, batch operations, configurable timeouts
  • Real-time Analysis — Live integration with Ghidra's analysis engine

Compatibility note: MCP tool names are normalized for GitHub Copilot CLI and CAPI validation. Exposed tool names use lowercase letters, digits, underscores, and hyphens only; nested HTTP paths such as /debugger/status are advertised as names like debugger_status_2 when needed to avoid collisions with static bridge tools.

Binary Analysis Capabilities

  • Function Analysis — Decompilation, call graphs, cross-references, completeness scoring
  • Data Flow Analysis — PCode-graph value propagation (forward / backward) from any variable or register
  • Data Structure Discovery — Struct/union/enum creation with field analysis and naming suggestions
  • String Extraction — Regex search, quality filtering, and string-anchored function discovery
  • Import/Export Analysis — Symbol tables, external locations, ordinal import resolution
  • Memory & Data Inspection — Raw memory reads, byte pattern search, array boundary detection
  • Cross-Binary Documentation — Function hash matching and documentation propagation across versions

Dynamic Analysis (v5.4.0)

  • P-code Emulation — Run any function in isolation via Ghidra's EmulatorHelper; brute-force API hash resolution in milliseconds
  • Live Debugger Integration — 17 Java endpoints + 22 Python bridge tools over Ghidra's TraceRmi framework (dbgeng on Windows PE, gdb/lldb otherwise): attach, step, breakpoints, registers, memory reads, non-breaking function tracing, ASLR-aware static↔dynamic address translation

AI-Powered Reverse Engineering Workflows

  • Function Documentation Workflow V5 — 7-step process for complete function documentation with Hungarian notation, type auditing, and automated verification scoring
  • Batch Documentation — Parallel subagent dispatch for documenting multiple functions simultaneously
  • Orphaned Code Discovery — Automated scanner finds undiscovered functions in gaps between known code
  • Data Type Investigation — Systematic workflows for structure discovery and field analysis
  • Cross-Version Matching — Hash-based function matching across different binary versions

Development & Automation

  • Ghidra Script Management — Create, run, update, and delete Ghidra scripts entirely via MCP
  • Multi-Program Support — Switch between and compare multiple open programs
  • Batch Operations — Bulk renaming, commenting, typing, and label management (93% fewer API calls)
  • Headless Server — Full analysis without Ghidra GUI — Docker and CI/CD ready
  • Project & Version Control — Create projects, manage files, Ghidra Server integration
  • Analysis Control — List, configure, and trigger Ghidra analyzers programmatically

🚀 Quick Start

Prerequisites

  • Java 21 LTS (OpenJDK recommended)
  • Apache Maven 3.9+
  • Ghidra 12.1.2 (or compatible version)
  • Python 3.10+ with pip

Shared Ghidra Server users: Ghidra 12.1.2 clients require a Ghidra Server at 12.1, 12.0.5, or a newer compatible version. Upgrade the server before using this plugin from a 12.1 client.

Ghidra 12.1.2 ships Jython as an optional extension. Java scripts work by default, but .py scripts in ghidra_scripts/ require installing the Jython extension from File > Install Extensions and restarting Ghidra.

Installation

Recommended for all platforms: use python -m tools.setup directly.

ensure-prereqs installs runtime Python requirements plus the Ghidra JARs needed in the local Maven repository. deploy copies the build output, installs the user-profile extension, and patches Ghidra user config.

  1. Clone the repository: bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp

  2. Recommended: run environment preflight first: text python -m tools.setup preflight --ghidra-path "F:\ghidra_12.1.2_PUBLIC"

  3. Build and deploy to Ghidra: text python -m tools.setup ensure-prereqs --ghidra-path "F:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC"

deploy saves/closes an already-running matching Ghidra instance when needed, installs the extension, starts Ghidra, waits for MCP health, and runs schema smoke checks.

  1. Optional strict/manual mode (advanced): text # Skip automatic prerequisite setup python -m tools.setup build python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC"

  2. Show command help: text python -m tools.setup --help

  3. Optional build-only mode (advanced/troubleshooting): text python -m tools.setup build

Supported build path: python -m tools.setup build uses Maven under the hood and is the canonical workflow used by the repo tasks and docs.

bash # Manual Maven build (requires Ghidra deps already installed in local .m2) mvn clean package assembly:single -DskipTests

bash # Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks) GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension

Installation (Linux — Ubuntu/Debian)

  1. Clone the repository: bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp

  2. Install system prerequisites (if not already installed): bash sudo apt update && sudo apt install -y openjdk-21-jdk maven python3 python3-pip curl jq unzip

  3. Run environment preflight: bash python -m tools.setup preflight --ghidra-path ~/ghidra_12.1.2_PUBLIC

  4. Build and deploy to Ghidra (single command): bash python -m tools.setup ensure-prereqs --ghidra-path ~/ghidra_12.1.2_PUBLIC python -m tools.setup build python -m tools.setup deploy --ghidra-path ~/ghidra_12.1.2_PUBLIC

This will: - Install Ghidra JAR dependencies into your local ~/.m2/repository - Build GhidraMCP-<version>.zip with Maven - Extract the extension to ~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/ - Update preferences with LastExtensionImportDirectory - Install Python requirements

  1. Optional: setup only Maven dependencies: bash python -m tools.setup install-ghidra-deps --ghidra-path ~/ghidra_12.1.2_PUBLIC

  2. Show command help: bash python -m tools.setup --help

Linux paths: The extension is installed to $HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/. Ghidra config files are in $HOME/.config/ghidra/ghidra_<version>_PUBLIC/.

Installation (macOS — Homebrew)

  1. Install prerequisites: bash brew install openjdk@21 maven python ghidra

  2. Clone the repository: bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp

  3. Install Ghidra JARs into local Maven: bash python -m tools.setup install-ghidra-deps \ --ghidra-path /opt/homebrew/opt/ghidra/libexec

  4. Build and deploy: bash python -m tools.setup ensure-prereqs \ --ghidra-path /opt/homebrew/opt/ghidra/libexec python -m tools.setup build python -m tools.setup deploy \ --ghidra-path /opt/homebrew/opt/ghidra/libexec The extension is installed to ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.

Note: --ghidra-version is required when using the Homeb

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 2,906
Function 1,520
Class 420
Route 52
Interface 8
Enum 4

Languages

Python54%
Java45%
C1%

Modules by API surface

src/main/java/com/xebyte/GhidraMCPPlugin.java229 symbols
src/main/java/com/xebyte/headless/HeadlessEndpointHandler.java176 symbols
fun-doc/fun_doc.py148 symbols
fun-doc/web.py123 symbols
tests/integration/test_readonly_endpoints.py95 symbols
tests/unit/test_bridge_utils.py92 symbols
bridge_mcp_ghidra.py83 symbols
src/test/java/com/xebyte/offline/NamingConventionsTest.java75 symbols
debugger/engine.py74 symbols
tools/setup/ghidra.py71 symbols
src/main/java/com/xebyte/core/DataTypeService.java68 symbols
src/main/java/com/xebyte/core/FunctionService.java64 symbols

Datastores touched

bsimDatabase · 1 repos
dbDatabase · 1 repos
dbnameDatabase · 1 repos

For agents

$ claude mcp add ghidra-mcp \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page