Skip to content
MCP Shelf

Decompile, cross-reference and rename inside Ghidra from a chat.

  • Started in our test
  • ★ 11.6K GitHub stars
  • 62 downloads a week
  • Last commit 10 Oct 2026

At a glance

GhidraMCP pairs a Ghidra extension, which serves the open program over a small local HTTP server, with an MCP server that turns those endpoints into tools. The assistant can list functions, classes, imports and strings, decompile or disassemble a function, follow cross-references and write back better names, types and comments.

Unlike IDA Pro MCP it needs no paid licence: Ghidra is free. There is also a headless mode that imports and analyses a binary on its own through PyGhidra, with no Ghidra window open.

Made by
LaurieWired
GitHub stars
11.6K
Downloads
62 a week
Last commit
10 Oct 2026
Tools
30
Runs on
Your computer

Our check: We ran this exact config on 27 Oct 2026: it started and answered with 30 tools. The shared database ran "uvx ghidramcp". That PyPI name only holds a 0.0.dev0 placeholder, so we publish the install the project documents: straight from its GitHub source.

What's in the pod: its tools

We found 30 tools when we started it on 27 Oct 2026. 19 only read. The rest can change things, so keep your app's "ask before each tool call" setting on for them.

How we tested it: Started from the GitHub source without Ghidra running. It lists its tools on its own; calling them needs Ghidra open with the GhidraMCP extension.

Changes things11 tools · Can create, edit, send or delete.

ToolWhat it is for
decompile_functionDecompiles a function by name into C-like pseudocode.
decompile_function_by_addressDecompiles the function at an address, which avoids clashes between duplicate names.
disassemble_functionReturns a function's instructions with addresses, bytes and comments.
rename_dataRenames the label on a piece of data.
rename_functionRenames a function by its current name.
rename_function_by_addressRenames the function at an address.
rename_variableRenames a local variable or parameter in the decompiler view.
set_decompiler_commentAdds or clears a comment shown in the decompiler.
set_disassembly_commentAdds or clears an end-of-line comment in the disassembly.
set_function_prototypeSets a function's signature from a C prototype.
set_local_variable_typeSets the data type of a decompiler variable.

Only reads19 tools · Looks things up and changes nothing.

ToolWhat it is for
get_current_addressReturns the address you have selected in Ghidra's listing.
get_current_functionReturns the function you have selected in Ghidra.
get_function_by_addressReturns the function at an address: name, signature, range and calling convention.
get_function_callsShows one level of the call graph: who calls a function and what it calls.
get_function_xrefsLists the references to a function's entry point.
get_program_infoIdentifies the loaded program: format, architecture, compiler, image base, size and entry points.
get_xrefs_fromLists the references made from one instruction or data address.
get_xrefs_toLists every reference to an address and the function each comes from.
list_classesLists class namespaces.
list_data_itemsLists defined data with address, label, type and value.
list_exportsLists exported symbols and entry points.
list_functionsLists functions with their entry addresses, optionally filtered by name.
list_importsLists imported symbols and the libraries they come from.
list_methodsAn older name-only function list, kept for compatibility.
list_namespacesLists every non-global namespace.
list_segmentsLists memory blocks with their address ranges and permissions.
list_stringsLists strings found in the program, optionally filtered by their text.
read_memoryReads up to 4 KB of program memory as hex and ASCII.
search_functions_by_nameFinds functions whose name contains a piece of text.

Grouped and described by us. The README on GitHub lists the inputs each tool takes.

How clearly it describes its tools to your assistant

Tools with a description
30 of 30
Say if they change things
0 of 30
Context it takes, at least
~1,400 tokens

No tool says whether it only reads or can change things, so your client treats them all alike: keep approvals on.

From the tool list it sent us. The token figure counts names, descriptions and input names; the full schemas your client loads add more.

Set it up

  1. Download the latest release zip from the GhidraMCP repository.
  2. In Ghidra choose File → Install Extensions, click +, pick the zip and restart Ghidra.
  3. Make sure GhidraMCPPlugin is ticked under File → Configure → Developer, then open a program in the CodeBrowser.

Pick your app for the exact snippet and where it goes.

Where it goes: claude_desktop_config.json (Settings → Developer → Edit Config)

Claude Desktop
{
  "mcpServers": {
    "ghidra": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/LaurieWired/GhidraMCP",
        "ghidra-mcp",
        "--ghidra-server",
        "http://127.0.0.1:8080/"
      ]
    }
  }
}

Change the --ghidra-server address if you moved the plugin to another port under Edit → Tool Options.

New to this? See the setup guides for Claude Code, Cursor, Claude Desktop and ChatGPT.

Settings

Names are exactly as the project spells them. Required ones are marked.

SettingWhat it does
--ghidra-serverCommand line flagWhere the GhidraMCP plugin's HTTP server is listening. Defaults to localhost port 8080.--ghidra-server http://127.0.0.1:8080/
--transportCommand line flagRuns the MCP side as a streamable HTTP server for clients that connect by URL, together with --mcp-host and --mcp-port.--transport streamable-http --mcp-port 8081
--headlessCommand line flagImports and analyses a binary through PyGhidra with no Ghidra window open. Needs the headless extra, Python 3.10 to 3.13 and GHIDRA_INSTALL_DIR.--headless --binary /path/to/target
--projectCommand line flagIn headless mode, keeps the Ghidra project between runs so renames and comments are saved.--project /path/to/project-dir
GhidraMCP HTTP ServerConfigThe plugin's port, set in Ghidra under Edit → Tool Options. Change --ghidra-server to match.

What it can touch

It can read

  • The program open in Ghidra: functions, strings, imports, memory and decompiled code

It can change

  • Names, types, prototypes and comments in the Ghidra project

Safer setup: It never runs the binary, and all its changes are annotations. Keep a copy of the Ghidra project if you want to compare the model's renames with your own.

Before you start

  • Ghidra 12.1.4 with the GhidraMCP extension installed
  • uv (for uvx), or Python 3.10 or newer

If it does not work

Every tool returns a connection error
Ghidra must be running with a program open in the CodeBrowser, and GhidraMCPPlugin must be enabled under File → Configure → Developer.
The extension will not install
Each release is built for one Ghidra version. Use the zip that matches your Ghidra (12.1.4 for the current release) or build it from source with Gradle and Java 21.
Port 8080 is already taken
Change the port in Edit → Tool Options → GhidraMCP HTTP Server and pass the same address to --ghidra-server.
Headless mode fails on macOS
Build Ghidra's decompiler once with support/gradle/gradlew buildNatives from the Ghidra folder.

Peas in a pod: similar servers

How GhidraMCP lines up against other developer tools servers on the shelf.

ServerToolsRuns onLicenceStars
GhidraMCP30Your computer–11.6K
shadcn/ui MCP10Your computerMIT3.1K
jCodeMunch6Your computerLicenseRef-jCodeMunch-Dual-Use-12.8K
iOS Simulator MCP17Your computerMIT2.2K
Desktop Commander25Your computerMIT10.1K

Questions

Do I need a paid tool?

No. Ghidra is free and open source from the NSA, and GhidraMCP is Apache-2.0.

GhidraMCP or IDA Pro MCP?

If you already own IDA Pro, IDA Pro MCP fits your workflow. If not, GhidraMCP gives you similar decompile, rename and cross-reference tools without a licence.

Can it analyse a file without opening Ghidra?

Yes, with --headless and --binary, which imports and analyses the file through PyGhidra.

Is it safe to point at malware?

It only analyses the file statically and never runs it. Still work in an isolated machine, as you would with any malware sample.

Full docs on GitHubLaurieWired/GhidraMCP

Something wrong on this page? Tell us.

More in Developer tools