MCP Servers

A collection of Model Context Protocol servers, templates, tools and more.

Turnkey installer + tutorial for hooking Ghidra to Claude, gemini-cli, or Ollama via the Model Context Protocol.

Created 5/18/2026
Updated about 4 hours ago
Repository documentation and setup instructions

ghidra-mcp-setup

A turnkey installer + tutorial for hooking Ghidra up to an LLM via the Model Context Protocol, so the model can list functions, read decompiled code, rename symbols, and reason about binaries directly in your chat.

Works with:

  • Claude Desktop (cloud)
  • Claude Code (CLI)
  • gemini-cli (cloud)
  • Ollama via Open WebUI (local LLMs)

This wraps LaurieWired/GhidraMCP — the canonical Ghidra MCP plugin — with a Python venv, a shell-agnostic launcher, and pre-generated client configs.

Gemma 4 31B running locally via Ollama, chaining list_functions and two decompile_function calls through GhidraMCP, then correctly identifying a stripped binary as GNU coreutils whoami — naming the entry → __libc_start_main → main flow, the setlocale/bindtextdomain locale init, and the geteuid → getpwuid → puts core logic

Gemma 4 31B (running locally on Ollama) chained list_functions and two decompile_function calls through GhidraMCP, then correctly identified a stripped binary as GNU coreutils whoami — from the entry__libc_start_main flow and the geteuidgetpwuidputs call pattern. No symbols, no cloud. Click to see the full reasoning trace.


Prerequisites

  • Linux or macOS (the installer is bash; works under fish or bash)
  • git, python3 (3.9+), curl
  • JDK 21+ (only needed when you actually launch Ghidra)
  • Ghidra 11.3+ installed somewhere on disk

Quickstart

git clone https://github.com/YOUR_USER/ghidra-mcp-setup.git
cd ghidra-mcp-setup
./install.sh

That:

  1. Clones the LaurieWired bridge source into ./GhidraMCP/
  2. Creates a Python venv at ./venv/ and installs the bridge's deps (mcp, requests)
  3. Downloads the latest Ghidra plugin ZIP into ./extensions/
  4. Writes ready-to-paste configs into ./configs/generated/

Then follow TUTORIAL.md to install the plugin inside Ghidra and wire up your chosen MCP client (3–5 more minutes).


What you end up with

ghidra-mcp-setup/
├── install.sh                  ← run this first
├── run-bridge.sh               ← shell-agnostic launcher (uses venv/bin/python)
├── TUTORIAL.md                 ← step-by-step walkthrough
├── ghidra-mcp-guide.md         ← background reading (plugin variants, RE workflow)
├── GhidraMCP/                  ← cloned bridge source (created by install.sh)
├── venv/                       ← Python venv (created by install.sh)
├── extensions/                 ← Ghidra plugin ZIPs (created by install.sh)
└── configs/
    ├── claude-desktop.json     ← template w/ __INSTALL_DIR__ placeholder
    ├── claude-code.mcp.json
    ├── gemini-cli.json
    ├── ollama-openwebui.md
    └── generated/              ← same configs with absolute paths filled in

Why a venv?

System Python on Arch, Debian, Ubuntu and other PEP-668 distros refuses to let pip install packages globally. The usual workarounds (--break-system-packages, --user) leak into your user environment. A project-local venv is cleaner and trivially deletable — rm -rf venv/ and you're back to a clean slate.

The included run-bridge.sh invokes venv/bin/python directly, so MCP clients don't need to know anything about activating a venv — and so the same setup works whether you use fish or bash.


Uninstall

rm -rf venv GhidraMCP extensions configs/generated

(And remove the "ghidra" entry from your MCP client config.)


Security

The installer does no sudo, no curl | bash, no system-wide writes; it only touches files under this repo and your venv. The plugin release URL is validated against the expected GitHub host and filename pattern before any download. See SECURITY.md for the full threat model, what the installer hardens against, and what's out of scope.

To pin the upstream to a specific tag/commit instead of tracking main:

GHIDRAMCP_REF=v1.4 ./install.sh

To refresh an existing checkout:

./install.sh --update

To use a non-default Ghidra plugin port (e.g. because Open WebUI is on 8080):

GHIDRA_PORT=9090 ./install.sh
# then change the port in Ghidra: Configure → gear → Options for GhidraMCPPlugin

License

MIT. See LICENSE.

The bundled bridge source is from LaurieWired/GhidraMCP under its own license.

Quick Setup
Installation guide for this server

Installation Command (package not published)

git clone https://github.com/cycloarcane/ghidra-mcp-setup
Manual Installation: Please check the README for detailed setup instructions and any additional dependencies required.

Cursor configuration (mcp.json)

{ "mcpServers": { "cycloarcane-ghidra-mcp-setup": { "command": "git", "args": [ "clone", "https://github.com/cycloarcane/ghidra-mcp-setup" ] } } }