AI Skill Hub 强烈推荐:Ghidra逆向工程MCP服务器 是一款优质的MCP工具。已获得 2.0k 颗 GitHub Star,AI 综合评分 8.5 分,在同类工具中表现稳健。如果你正在寻找可靠的MCP工具解决方案,这是一个值得深入了解的选择。
基于Ghidra的开源MCP工具集,提供200+个AI驱动的逆向工程工具和GUI插件。整合先进的二进制分析能力与AI能力,适合安全研究员、逆向工程师和恶意软件分析人员进行自动化代码分析和漏洞挖掘。
Ghidra逆向工程MCP服务器 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
基于Ghidra的开源MCP工具集,提供200+个AI驱动的逆向工程工具和GUI插件。整合先进的二进制分析能力与AI能力,适合安全研究员、逆向工程师和恶意软件分析人员进行自动化代码分析和漏洞挖掘。
Ghidra逆向工程MCP服务器 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/bethington/ghidra-mcp
# 方式二:手动配置 claude_desktop_config.json
{
"mcpServers": {
"ghidra----mcp---": {
"command": "npx",
"args": ["-y", "ghidra-mcp"]
}
}
}
# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
# 安装后在 Claude 对话中直接使用 # 示例: 用户: 请帮我用 Ghidra逆向工程MCP服务器 执行以下任务... Claude: [自动调用 Ghidra逆向工程MCP服务器 MCP 工具处理请求] # 查看可用工具列表 # 在 Claude 中输入:"列出所有可用的 MCP 工具"
// claude_desktop_config.json 配置示例
{
"mcpServers": {
"ghidra____mcp___": {
"command": "npx",
"args": ["-y", "ghidra-mcp"],
"env": {
// "API_KEY": "your-api-key-here"
}
}
}
}
// 保存后重启 Claude Desktop 生效
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. 209 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.
python -m tools.setup commands below (Maven is their default backend). Not needed if you build with the committed Gradle wrapper instead — see step 6Shared Ghidra Server users: Ghidra 12.1.4 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.4 ships Jython as an optional extension. Java scripts work by default, but.pyscripts inghidra_scripts/require installing the Jython extension from File > Install Extensions and restarting Ghidra.
Cause: Ghidra JARs not installed in local Maven repository (Maven backend only; Gradle reads them straight from the installation).
Solution:
```text
Every release ships the two pieces you need: the Ghidra extension (GhidraMCP-<version>.zip) and the MCP bridge (ghidra_mcp_bridge-<version>-py3-none-any.whl).
1. Install the prerequisites: Ghidra 12.1.4, Java 21 and uv. The extension only loads in the exact Ghidra version it was built for. 2. Install the extension: in Ghidra's project window, File > Install Extensions, click +, pick the GhidraMCP-<version>.zip you downloaded, and restart Ghidra. 3. Enable the plugin: in the project window, File > Configure > Utility > Configure, tick GhidraMCPPlugin. Check it answers:
curl http://127.0.0.1:8089/check_connection
# {"status": "ok", "server_kind": "gui", "version": "7.0.0"}
uv tool install https://github.com/bethington/ghidra-mcp/releases/download/v7.0.0/ghidra_mcp_bridge-7.0.0-py3-none-any.whl
5. Point your MCP client at it, using the absolute path (`which bridge-mcp-ghidra, or where.exe bridge-mcp-ghidra` on Windows):
{
"mcpServers": {
"ghidra-mcp": { "command": "/home/<you>/.local/bin/bridge-mcp-ghidra" }
}
}
On Windows: "command": "C:\\Users\\<you>\\.local\\bin\\bridge-mcp-ghidra.exe". A client launched from a GUI or a service does not see your shell's PATH, so a bare bridge-mcp-ghidra fails with spawn ENOENT.
Open a program in Ghidra and ask your AI tool to list its functions. Screenshots of steps 2-3: docs/INSTALL_GUI.md. Building from source, Docker, the HTTP transports and every bridge flag are further down.
Which version should I run? Tagged releases (7.0.0, 7.1.0, ...) are stable. Release candidates and main are beta: feature-complete and live-tested, but shapes can still change before final. dev is experimental: tools are merged, renamed and refactored there freely, so build nothing on its API.
The Quickstart above needs none of this. Build from source to run dev, to contribute, or to use python -m tools.setup deploy, which installs, configures and restarts Ghidra for you.
Recommended for all platforms: usepython -m tools.setupdirectly.ensure-prereqsinstalls runtime Python requirements plus the Ghidra JARs needed in the local Maven repository.deploycopies the build output, installs the user-profile extension, and patches Ghidra user config.
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
python -m tools.setup preflight --ghidra-path "F:\ghidra_12.1.4_PUBLIC"
python -m tools.setup ensure-prereqs --ghidra-path "F:\ghidra_12.1.4_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.4_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.
Prefer to click through Ghidra's own dialogs, or installing a release zip on a machine without the repo? Follow the illustrated manual GUI install guide.
# Skip automatic prerequisite setup
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.4_PUBLIC"
python -m tools.setup --help
python -m tools.setup build
Two Java backends are supported. Gradle is the default for local work — it reads Ghidra's jars straight out of the installation, so there is no install-file step and nothing to install beyond a JDK. CI builds and gates with Maven, so Maven is a maintained peer rather than a fallback.
# Gradle (default) -- the wrapper is committed, so no Gradle install is needed.
# -PGHIDRA_INSTALL_DIR or the GHIDRA_INSTALL_DIR env var both work.
# In Git Bash use forward slashes; a backslash path is mangled before Gradle sees it.
./gradlew buildExtension -PGHIDRA_INSTALL_DIR=/path/to/ghidra
# Maven (peer backend; what CI uses). Needs Ghidra's jars in the local .m2 first:
# python -m tools.setup ensure-prereqs --ghidra-path /path/to/ghidra
mvn clean package assembly:single -DskipTests
python -m tools.setup build routes to Maven by default; set TOOLS_SETUP_BACKEND=gradle to route it to Gradle instead.
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
sudo apt update && sudo apt install -y openjdk-21-jdk maven python3 python3-pip python3-venv curl jq unzip
Debian/Kali/Ubuntu 23.04+ note (PEP 668): these distros mark the system > Python as externally managed, so a barepip installfails with >error: externally-managed-environment. Don't work around it with >--break-system-packages— it can corrupt apt-managed tooling. Instead use > uv (recommended — it creates and manages a > project-local.venvautomatically, and is what this repo's commands use): > >> > or a classic virtual environment: > >> curl -LsSf https://astral.sh/uv/install.sh | sh > uv run bridge-mcp-ghidra # resolves deps into .venv and starts the bridge >> python3 -m venv .venv && source .venv/bin/activate > pip install -e . > bridge-mcp-ghidra >
python -m tools.setup preflight --ghidra-path ~/ghidra_12.1.4_PUBLIC
python -m tools.setup ensure-prereqs --ghidra-path ~/ghidra_12.1.4_PUBLIC
python -m tools.setup build
python -m tools.setup deploy --ghidra-path ~/ghidra_12.1.4_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
python -m tools.setup install-ghidra-deps --ghidra-path ~/ghidra_12.1.4_PUBLIC
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/.
brew install openjdk@21 maven python ghidra
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
python -m tools.setup install-ghidra-deps \
--ghidra-path /opt/homebrew/opt/ghidra/libexec
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.4_PUBLIC/Extensions/GhidraMCP/.
Note: the Homebrew path contains no version string, sotools.setupreads the Ghidra version fromGhidra/application.propertiesinside the installation instead.
/opt/homebrew/opt/ghidra/libexec/ghidraRun
The server starts with the plugin. Check it from the project window: Tools > GhidraMCP > Server Status
6. Configure Cursor/Claude MCP (~/.cursor/mcp.json) — use the absolute path to uv (which uv), not the bare name; GUI-launched clients do not inherit your shell's PATH (#441):
{
"mcpServers": {
"ghidra": {
"command": "/opt/homebrew/bin/uv",
"args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"]
}
}
}
macOS is the sharpest case: apps launched from Finder/Dock get launchd's PATH, which never contains ~/.local/bin or /opt/homebrew/bin.
@Pandoriaantje maintains community AUR packages:
ghidra-mcp-git — tracks mainghidra-mcp — tracks tagged releasesInstall with your AUR helper of choice, e.g.:
yay -S ghidra-mcp # or ghidra-mcp-git
curl http://127.0.0.1:8089/mcp/health
java -cp "target/GhidraMCP-<version>.jar:<ghidra jars>" \ com.xebyte.headless.GhidraMCPHeadlessServer --bind 0.0.0.0 --port 8089 ```
The headless server serves only its Unix domain socket unless --port or --bind is given; either one adds the TCP listener.
Cause: PEP 668. Debian-family distros (Debian 12+, Kali, Ubuntu 23.04+) mark the system Python as externally managed, so global pip install is blocked to protect apt-managed packages.
Solution: Use a virtual environment — never --break-system-packages. The recommended path is uv, which manages a project-local .venv automatically:
curl -LsSf https://astral.sh/uv/install.sh | sh
cd ghidra-mcp
uv run bridge-mcp-ghidra
Or a classic venv:
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
Cause: JAR file in wrong location.
Solution:
1. Manual install location: ~/.config/ghidra/ghidra_12.1.4_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar (%APPDATA%\ghidra\... on Windows, ~/Library/ghidra/... on macOS) 2. Or use: File > Install Extensions > Add and select the ZIP file — see the illustrated guide 3. Ensure JAR/ZIP was built for your Ghidra version
add_function_tag - Attach tags to ONE function (function + tags) OR MANY in one transaction (assignments=[{function,tags}, ...])batch_rename_function_components - Batch rename function componentsclear_flow_and_repair - Run Ghidra's GUI 'Clear Flow and Repair' action on a seed range: clears instruction flow reachable from the seed, then repairs function bodies and re-disassembles retained flow (ClearFlowAndRepairCmd with clear_data=false, clear_labels=false, repair=true)clear_instruction_flow_override - Clear flow overridecreate_function - Create function at addressdelete_function - Delete function at addressdelete_function_tag - Delete a program-wide function tag definitiondisassemble_bytes - Disassemble byte rangedisassemble_function - Disassemble functionforce_decompile - Force fresh decompilation (output stamped with language_id + variant; optional variant= is checked against the loaded one)get_functions - Everything about one or many functions in a single calllist_class_members - List the member functions of a C++ classlist_function_tags - List all program-wide function tag definitions with their use countsremove_function_tag - Detach one or more tags from a functionrename_function - Rename function by namerename_variables - Batch rename variablesset_function_no_return - Set no-return attributeset_function_prototype - Set function prototype (return type, param types, calling convention)set_function_tag_comment - Update the comment/description on an existing program-wide function tagset_function_this_type - Set the decompiler/database type of the implicit 'this' pointer (ECX on x86 thiscall/fastcall)set_variable_storage - Set variable storageset_variable_type - Set the data type of a function variable (local OR parameter) by name at the decompiler (high-level) layerset_variables - Set types and names for multiple variables atomicallyuv run bridge-mcp-ghidra # or: python -m bridge_mcp_ghidra
MCP client config (.mcp.json, ~/.cursor/mcp.json, Claude Desktop config, …). Use the absolute path to uv — see the note below for why:
{
"mcpServers": {
"ghidra-mcp": {
"command": "/home/<you>/.local/bin/uv",
"args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra", "--transport", "stdio"],
"env": { "GHIDRA_MCP_URL": "http://127.0.0.1:8089" }
}
}
}
On Windows the same config points at uv.exe, e.g. "command": "C:\\Users\\<you>\\.local\\bin\\uv.exe". Find your own path with which uv (POSIX) or where.exe uv (Windows), or just run python -m tools.setup preflight, which prints the resolved absolute path and a ready-to-paste snippet.
Why absolute?"command": "uv"fails under service and GUI launchers. The MCP client resolvescommandwith its own PATH, not your shell's. A client started from a systemd user service, a.desktopentry, or any other GUI session inherits that launcher's environment, which routinely lacks~/.local/binand~/.cargo/bin— the very directoriesuvinstalls into. The failure lands at process-spawn time asspawn uv ENOENT, before any bridge code runs, so there is nothing in any log to read. An absolute path makes the client's PATH irrelevant and works on the first try. The same applies topython,python3, and thebridge-mcp-ghidraconsole script. (#441)
To add the bridge to Autohand Code from a cloned checkout:
autohand mcp add ghidra /home/<you>/.local/bin/uv run --directory /path/to/ghidra-mcp bridge-mcp-ghidra
Add --scope project before ghidra to save the server in the current project's .autohand configuration instead of your user configuration.
uv run bridge-mcp-ghidra --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081
MCP client config for the HTTP transport (add to your client's MCP config file):
{
"mcpServers": {
"ghidra-mcp-http": {
"url": "http://127.0.0.1:8081/mcp"
}
}
}
Browser-based clients (e.g. MCP Inspector) work out of the box: the HTTP transports answer CORS preflight (OPTIONS) requests and expose the mcp-session-id / mcp-protocol-version headers to scripts. Allowed origins mirror the Host-header policy — loopback on any port is always permitted, plus the bind host and any hosts listed in GHIDRA_MCP_ALLOWED_HOSTS.
GHIDRA_MCP_ALLOWED_HOSTS also supports clients that route a loopback-bound bridge through another network namespace. For example, a container can address the host as host.containers.internal without exposing the bridge on a LAN interface:
GHIDRA_MCP_ALLOWED_HOSTS=host.containers.internal \
uv run bridge-mcp-ghidra --transport streamable-http \
--mcp-host 127.0.0.1 --mcp-port 8081
The setting extends DNS-rebinding Host/Origin validation only; it does not change the bind address or make the listener reachable on additional interfaces.
uv run bridge-mcp-ghidra --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
| Flag | Default | Description |
|---|---|---|
--transport | stdio | stdio (AI tools), streamable-http (web clients), sse (deprecated) |
--mcp-host | 127.0.0.1 | Bind host for HTTP transports |
--mcp-port | — | Port for HTTP transports |
--lazy | (default) | Load only the default tool groups on connect, and let the model pull in the rest with search_tools/load_tool_group. |
--no-lazy | off | Load all tool groups immediately on connect. Needed only by MCP clients that ignore tools/list_changed; **rejected outright by the Gemini API** (see below). |
--default-groups | listing,function,program | Comma-separated groups loaded on connect under --lazy. |
--tools-page-size | 0 | Serve tools/list in pages of this size (0 = one page). Only for a client that cannot take one large response; a client that ignores nextCursor sees only the first page. |
--json-response | off | streamable-http: answer POSTs with plain JSON instead of an SSE stream. Server-initiated messages such as tools/list_changed are then not delivered. |
--stateless-http | off | streamable-http: no session id and no server-initiated notifications, for running several bridge workers behind a load balancer. Pair it with --no-lazy, since a group loaded later can never be announced. |
To require a token from MCP clients of an HTTP transport, set GHIDRA_MCP_INBOUND_TOKEN=<secret>; clients must then send Authorization: Bearer <secret>. The bridge logs a warning when it binds a non-loopback --mcp-host without one. Separately, when GHIDRA_MCP_AUTH_TOKEN (the token the bridge sends to Ghidra) is set and the bridge binds a non-loopback host, clients must present that same token, so the bridge cannot be used to relay it.
Advertising all 209 endpoints in a single tools/list is over a hard limit for at least one major provider. Gemini compiles function declarations into a constrained-decoding state machine and rejects the whole request before any tool is ever called:
400 INVALID_ARGUMENT
The specified schema produces a constraint that has too many states for serving
That is not a degradation, it is an outright break, and no client-side setting could work around a server that only ever offered the full set. So the bridge now loads listing,function,program (68 endpoints plus the 8 static tools) on connect and registers the rest on demand.
If your client ignores tools/list_changed it will not notice tools that are registered later, and should turn lazy loading off:
uv run bridge-mcp-ghidra --no-lazy # when you control the command line
export GHIDRA_MCP_LAZY=0 # when you don't (Docker, uvx, some client configs)
GHIDRA_MCP_LAZY accepts 0/false/no/off and 1/true/yes/on; an explicit --lazy/--no-lazy on the command line wins over it. Startup logs which mode is in effect.
Set GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1 to make the bridge refuse any program-scoped call that omits a program selector, returning a clear error instead of letting the call ride the server's shared "current program" (the one switch_program and the active GUI tab move).
export GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1
uv run bridge-mcp-ghidra
Without this, a call that leaves program= out runs against whichever program is current, which is fine for a single-program workflow but a hazard once several programs are open: the call can read or edit the wrong binary with no error. The hazard is worse when more than one client shares a server, since each one moves that current-program global out from under the others.
With strict mode on, every program-scoped call must name its target. This covers every selector that picks an open program: plain program= and the cross-program tools' source_program/target_program or program_a/program_b (declared required, but the server still falls back to the current program when one arrives empty). A forgotten selector surfaces as a loud error on the first bad call instead of a silent write to the wrong binary. Tools with no program selector (open_program and close_program take path/name) are unaffected. Off by default: with the variable unset the bridge sends calls unchanged.
The bridge exposes a large catalog, so it loads only listing,function,program on connect (see above) and lets the model discover the rest on demand instead of registering everything:
- search_tools("rename function") — keyword-search the entire catalog, including tools whose group isn't loaded. Each result says whether it's callable now and, if not, the exact load_tool_group(...) call to enable it. - list_tool_groups() — list all categories and their load state. - load_tool_group("datatype") / unload_tool_group("datatype") — load or drop a category at runtime. - check_tools("rename_symbol,batch_set_comments") — confirm specific tools are callable right now.
search_tools works in both lazy and --no-lazy modes, so agents that honor tools/list_changed get full discovery without the upfront context cost.
Some MCP clients gate tools through an explicit allowlist. Cut it too far and the agent loses discovery — it cannot find entry points or enumerate functions through MCP, so it works around the allowlist by curl-ing the HTTP API on 127.0.0.1:8089 directly, which defeats the point of having one. The allowlist has to be small and self-sufficient.
Minimum viable read-only set (4 tools):
| Tool | Group | What it buys you |
|---|---|---|
get_metadata | program | Which binary is loaded — name, architecture, image base, function count. Orientation, and it confirms the bridge reached Ghidra at all. |
find_functions | listing | Paginated function enumeration (offset, limit); with no filter it lists the whole program, and name_pattern/regex turn it into a name search. **This is the discovery tool** — without it the agent cannot answer "what is in this binary". |
get_entry_points | listing | Where execution starts, so analysis has a root to work down from. |
get_functions | function | The payload. Takes function= (name or address) **or** functions= (comma-separated names *or* addresses, up to 20), and fields= to pick what comes back: decompiled_code, signature, callers, callees, xrefs, comments, and more. |
That set is genuinely closed: get_entry_points and find_functions supply the addresses and names that get_functions consumes, and its callees field names the next functions to feed straight back into it.
The three tools suggested in #441 were get_metadata, get_entry_points and decompile_function. The first two still exist under those names; decompile_function was folded into get_functions in 7.0.0 (fields=decompiled_code), and the migration guide maps every other removed name. find_functions is the one addition worth making: without it the agent can only reach code that is reachable by name from something it already decompiled, so anything not referenced from an entry point is invisible.
Useful next additions, in order:
| Tool | Group | Why |
|---|---|---|
get_function_call_graph | xref | A multi-level call graph (depth, direction) in one call. One level of callers and callees already comes from get_functions. |
get_xrefs_to | xref | Who touches this address — the standard question about a global. Takes addresses= for several at once. |
list_strings | listing | Strings are the cheapest orientation signal in an unknown binary. |
list_program_items | listing | kind=imports / kind=exports: the binary's external surface. Other kinds list segments, classes, namespaces, data items and external locations. |
Every tool above is a GET; none of them writes to the Ghidra database.
Two things to check when your allowlist is narrow:
- Groups, not just names. The bridge registers tools by group, and the group is the category on the Java @McpTool annotation (which the running server publishes at /mcp/schema) — not the category field in tests/endpoints.json, which is a separate hand-maintained column and does not always agree. All four tools in the minimum set fall inside the default listing,function,program groups, so they are registered even under --lazy. Of the additions above, only the xref ones fall outside: under --lazy you must either allow load_tool_group as well, or start the bridge with --default-groups listing,function,program,xref. - A narrow allowlist plus --lazy needs the group tools. If you allowlist only leaf tools and run lazily, the agent has no way to load anything else. Either run eagerly (--no-lazy; lazy is the default) or add search_tools, list_tool_groups, load_tool_group, and check_tools to the allowlist.
Verify any allowlist against the running server rather than against this table: curl http://127.0.0.1:8089/mcp/schema lists every tool with the category the bridge groups it by.
The bridge can proxy 22 debugger_* tools to an external dbgeng/WinDbg debugger server speaking the bridge's debugger HTTP API. That server is not part of this repository; this repo ships only the proxies. They are off by default and register only when you opt in:
```bash
```bash export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32) export GHIDRA_MCP_ALLOW_SCRIPTS=1 # only if your workflow needs it export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs
209 MCP tools backed by HTTP endpoints, grouped by catalog category. Generated from tests/endpoints.json by python -m tools.gen_readme_api_reference --write; the live schema at /mcp/schema is authoritative at runtime. Usage patterns: docs/prompts/TOOL_USAGE_GUIDE.md.
186 of these are served by both the GUI plugin and the standalone headless server. The rest are marked (GUI only) (19) or (headless only) (4) — calling one against the other server returns a 404, not an error message. See python -m tools.audit_server_scope for how the split is derived.
add_memory_reference - Create a user-defined cross-reference between two memory addresses that the auto-analyzer can't infer (runtime-populated pointer tables, vtables, late-bound function pointers, missed jump/switch tables)analyze_call_graph - Analyze function call graph patternsget_assembly_context - Get assembly contextget_full_call_graph - Get full call graphget_function_call_graph - Get call graphget_xrefs_from - Get references from addressget_xrefs_to - Get references to addressremove_reference - Remove memory cross-reference(s) from one address to another — the inverse of add_memory_referenceCompatibility 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/statusare advertised as names likedebugger_status_2when needed to avoid collisions with static bridge tools.
Ghidra MCP 服务概述:一个用于 Ghidra 的 Model Context Protocol (MCP) 服务器,提供二进制分析功能。
功能特性: - 二进制分析能力 - 函数分析 - 数据流分析 - 数据结构发现 - 字符串提取 - 自动部署 - 批量操作 - 原子事务 - 全面日志
环境依赖与系统要求: - Java 21 LTS - Apache Maven 3.9+ - Ghidra 12.1 - Python 3.10+ - 共享 Ghidra 服务器用户:Ghidra 12.1 客户端要求 Ghidra 服务器版本为 12.1、12.0.5 或更高版本
安装步骤说明: - 克隆仓库 - 安装系统依赖项 - 运行环境预检查 - 构建并部署
使用教程: - 基本使用 - 流式 HTTP 传输
配置说明: - 环境变量 - Docker 环境变量 - JVM 选项
API/接口说明: - 版本更新 - 命令参考
工作流 / 模块说明: - 全面 MCP 兼容性 - 244 MCP 工具 - 生产就绪可靠性 - 实时分析
FAQ 摘要: - 版本匹配错误
业界领先的AI赋能逆向工程平台,200+工具覆盖面广,Java实现稳定可靠,2k+ Stars验证其价值,活跃维护中。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ Apache 2.0 — 宽松开源协议,可商用,需保留版权声明和 NOTICE 文件,含专利授权条款。
总体来看,Ghidra逆向工程MCP服务器 是一款质量优秀的MCP工具,在同类工具中具备一定竞争力。AI Skill Hub 将持续追踪其更新动态,建议收藏备用,结合自身场景选择合适时机引入使用。
| 原始名称 | ghidra-mcp |
| 原始描述 | 开源MCP工具:Ghidra MCP Server — 200+ MCP tools for AI-powered reverse engineering. GUI plugi。⭐2.0k · Java |
| Topics | 逆向工程二进制分析Ghidra扩展安全研究AI工具集 |
| GitHub | https://github.com/bethington/ghidra-mcp |
| License | Apache-2.0 |
| 语言 | Java |
收录时间:2026-05-22 · 更新时间:2026-05-30 · License:Apache-2.0 · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端