GitHub release (latest by date) Build Status Tested Ghidra Version License GitHub stars GitHub forks
[![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](cursor://anysphere.cursor-deeplink/mcp/install?name=ghidra&config=eyJ1cmwiOiJodHRwOi8vMTI3LjAuMC4xOjgwODAvbWNwIn0%3D) If your browser/GitHub blocks custom URI handlers, use the web fallback: [Cursor install fallback](https://cursor.com/install-mcp?name=ghidra&config=eyJ1cmwiOiJodHRwOi8vMTI3LjAuMC4xOjgwODAvbWNwIn0%3D)

GhidraMCP

> Connect Ghidra to MCP-compatible clients Related project: [WinDbg MCP Server](https://github.com/themixednuts/windbg-mcp-server) --- ## ✨ Features - 14 MCP tools covering analysis, inspection, editing, project workflows, and Version Tracking - MCP resources for common program views such as program info, listing, imports/exports, strings, RTTI, and decompilation - Built-in MCP prompts and argument completions for common reverse engineering workflows - Structured responses with explicit per-call limits and opaque cursors for large datasets - Large outputs are bounded by tool arguments such as `page_size`, `max_lines`, or `max_results`; pass returned `next_cursor` values back as `cursor` to continue - Debugger support for Trace RMI connect/accept/launch, target lifecycle, trace/thread/stack/object discovery, live memory/register/watch operations, static mappings, remote methods, and emulation - Typed memory mapping applies a data type and returns bounded byte-to-field rows for program memory or the active debugger trace - Project workflows can rebase program image bases explicitly or from a PE binary's stated ImageBase - Focused CodeBrowser and Debugger operations automatically navigate the user's active Ghidra UI to the relevant function or address ### Tool Commands - **Analysis & inspection:** `analyze`, `inspect`, `script_guidance` - **Program changes:** `annotate`, `functions`, `symbols`, `data_types`, `memory`, `delete` - **Debugging:** `debugger` - **Project workflows:** `project`, `batch_operations` - **Version tracking:** `vt_sessions`, `vt_operations` ### Resource Templates - **Project overview:** `ghidra://programs` - **Program views:** `ghidra://program/{name}/info`, `ghidra://program/{name}/functions`, `ghidra://program/{name}/symbols`, `ghidra://program/{name}/datatypes`, `ghidra://program/{name}/memory` - **Triage views:** `ghidra://program/{name}/imports`, `ghidra://program/{name}/exports`, `ghidra://program/{name}/strings`, `ghidra://program/{name}/rtti` - **Code views:** `ghidra://program/{name}/listing/{address}`, `ghidra://program/{name}/function/{address}/decompile` ### Prompts - `analyze_function` - `analyze_vtable` - `compare_binaries` - `find_vulnerabilities` - `map_data_structures` - `rename_analysis` - `triage_binary` --- ## 🚀 Installation Requires Ghidra `12.1.4`. 1. Download the latest release `zip` file from the [Releases](https://github.com/themixednuts/GhidraMCP/releases) page. 2. In Ghidra, go to `File` -> `Install Extensions...`. 3. Click the `+` button (Add extension) in the top right corner. 4. Navigate to the downloaded `zip` file and select it. 5. Ensure the `GhidraMCP` extension is checked in the list and click `OK`. 6. Restart Ghidra. --- ## ▶️ Usage 1. Start Ghidra with the GhidraMCP extension enabled. 2. Confirm the server port in **Configuration**. 3. Point your MCP client to `http://127.0.0.1:8080/mcp` (or your custom port). > [!WARNING] > **Script Error Dialogs:** Some script-driven operations can open a Ghidra error > dialog. Close the dialog before continuing, or requests may appear to hang. > [!TIP] > **Finding program names:** Use the `ghidra://programs` resource to see the > exact program names available in the current project. ## ⚙️ Configuration The GhidraMCP server can be configured through Ghidra's application-level settings: 1. In Ghidra, go to **Browser** → **Edit** → **Tool Options**. 2. In the left panel, expand **Miscellaneous** and select **GhidraMCP HTTP Server**. 3. Configure the following options: - **Server Port**: The port number for the MCP server (default: 8080) - **Auto-start Server**: Whether to automatically start the server when Ghidra launches - **Request Timeout (seconds)**: Maximum time allowed for an MCP request before timing out (default: 600) 4. Click **OK** to save your settings. ## 🛠️ Building from Source If you are installing from a GitHub release zip, you can skip this section. The steps below are only for building from source. 1. Clone the repository: ```bash git clone https://github.com/themixednuts/GhidraMCP.git ``` 2. Ensure you have JDK 21 or later installed. 3. Build the project with `just`: ```bash just package ``` To run the same checks used by the main build CI: ```bash just ci ``` Or use the Gradle wrapper directly: ```bash bash ./gradlew package ``` On Windows PowerShell, use: ```powershell .\gradlew.bat package ``` Ghidra jars are fetched automatically from the official release zip on first run. Useful development entrypoints: - `just test` runs the unit suite - `just test-e2e` runs the end-to-end suite - `just update-verification-metadata` refreshes Gradle dependency verification checksums after manual dependency changes - The manual "Dependency Maintenance" GitHub workflow validates dependency and Ghidra update candidates without opening bot PRs 4. The installable `zip` file is written to `target/` (for example, `target/GhidraMCP-0.9.0.zip`). Install it using the steps above. ### Optional: Install Local Pre-commit Checks To run formatting checks and full integration tests before every commit: ```bash just install-hooks ``` The installed pre-commit hook runs: - `just fmt-check` - `just test` - `just test-e2e` --- ## 🔌 Configuring an MCP Client Use this server URL in your client: - `http://127.0.0.1:8080/mcp` (or your custom port) Most clients use a config like: ```json { "mcpServers": { "ghidra": { "url": "http://127.0.0.1:8080/mcp" } } } ``` ### Client Setup Instructions
Claude Claude Desktop Config path: - Windows: `%APPDATA%\Claude\claude_desktop_config.json` - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json` - Linux: `~/.config/Claude/claude_desktop_config.json` Add the JSON config above, then restart Claude Desktop.
Claude Claude Code (CLI) ```bash claude mcp add ghidra "http://127.0.0.1:8080/mcp" --transport http ```
Cursor Cursor - [Install via deep link](cursor://anysphere.cursor-deeplink/mcp/install?name=ghidra&config=eyJ1cmwiOiJodHRwOi8vMTI3LjAuMC4xOjgwODAvbWNwIn0%3D) - [Install via web fallback](https://cursor.com/install-mcp?name=ghidra&config=eyJ1cmwiOiJodHRwOi8vMTI3LjAuMC4xOjgwODAvbWNwIn0%3D) Manual config path: `~/.cursor/mcp_settings.json`
OpenCode OpenCode Use `~/.config/opencode/opencode.json` (or project-level `opencode.json`): ```json { "$schema": "https://opencode.ai/config.json", "mcp": { "ghidra": { "type": "remote", "url": "http://127.0.0.1:8080/mcp", "enabled": true } } } ```
Codex Codex CLI ```bash codex mcp add ghidra --url http://127.0.0.1:8080/mcp ``` Or add this to `~/.codex/config.toml`: ```toml [mcp_servers.ghidra] url = "http://127.0.0.1:8080/mcp" ```
--- > [!IMPORTANT] > The default port is `8080` (configurable in Ghidra: **Browser** → **Edit** → > **Tool Options** → **Miscellaneous** → **GhidraMCP HTTP Server**). If you > change the port, update your client configuration accordingly. Ghidra must be > running with the extension enabled for the client to connect. > [!NOTE] > **Timeout Issues:** If you encounter timeout problems, refer to the > [Ghidra timeout configuration guide](https://github.com/NationalSecurityAgency/ghidra/issues/1613#issuecomment-597165377). ## 🤝 Contributing Contributions are welcome! Please feel free to submit pull requests or open issues. --- ## Acknowledgements This project is heavily inspired by and based on the work of [LaurieWired](https://github.com/LaurieWired). Instead of using a bridge, this plugin directly embeds the server in the plugin.