ghidra mcp
Enables LLMs to perform binary analysis using Ghidra in headless mode, extracting functions, pseudocode, structs, and enums from binaries for interactive reverse-engineering.
Enables LLMs to perform binary analysis using Ghidra in headless mode, extracting functions, pseudocode, structs, and enums from binaries for interactive reverse-engineering.
This project lets you use Ghidra in headless mode to extract rich binary analysis data (functions, pseudocode, structs, enums, etc.) into a JSON file, and expose it to LLMs like Claude via Model Context Protocol (MCP).
It turns Ghidra into an interactive reverse-engineering backend.
ghidra_context.jsonlist_functions(), get_pseudocode(name)list_structures(), get_structure(name)list_enums(), get_enum(name)list_function_definitions(), get_function_definition(name)mcp CLI (install via pip install mcp)brew install --cask temurin@21
Then set it:
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 21)' >> ~/.zshrc
source ~/.zshrc
Check it:
java -version
Should say: openjdk version "21.0.x"...
Download and extract Ghidra 11.3.1
cd ghidra_mcp
gcc -Wall crackme.c -o crackme
mcp install main.py
This registers the MCP server so Claude or other clients can access it.
mcp dev main.py
This enables hot reload and developer logs.
| Tool | Description |
|---|---|
setup_context(...) |
Run Ghidra on a binary |
list_functions() |
All functions |
get_pseudocode(name) |
Decompiled pseudocode |
list_structures() |
All structs |
get_structure(name) |
Details of a struct |
list_enums() |
All enums |
get_enum(name) |
Enum values |
list_function_definitions() |
All function prototypes |
get_function_definition() |
Return type & args |
Analyze the binary file located at
➡️ Fix: Install Java 21, not 17 or 24:
brew install --cask temurin@21
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
spawn uv ENOENT (Claude Desktop can't find your UV binary)➡️ Claude can't locate uv by name. To fix:
which uv
Example output:
/Users/yourname/.cargo/bin/uv
open ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"ghidra": {
"command": "/Users/yourname/.cargo/bin/uv",
"args": [
"--directory",
"/Users/yourname/Documents/ghidra_mcp",
"run",
"main.py"
]
}
}
}
The operation couldn’t be completed. Unable to locate a Java Runtime.➡️ Fix: Java not installed or JAVA_HOME is unset. Follow setup instructions above.
| File | Purpose |
|---|---|
main.py |
MCP server with tools |
export_context.py |
Ghidra script that extracts JSON |
crackme.c |
Sample C binary |
crackme |
Compiled binary to test |