Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Token-efficient Ghidra RE: decompile, xrefs, Swift/ObjC, ELF/Mach-O, async analysis
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
GHIDRA_INSTALL_DIRNecesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"pyghidra-lite": {
"command": "uvx",
"args": [
"pyghidra-lite"
],
"env": {
"GHIDRA_INSTALL_DIR": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add pyghidra-lite --env GHIDRA_INSTALL_DIR=your-value -- uvx pyghidra-liteCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"pyghidra-lite": {
"command": "uvx",
"args": [
"pyghidra-lite"
],
"env": {
"GHIDRA_INSTALL_DIR": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"pyghidra-lite": {
"type": "stdio",
"command": "uvx",
"args": [
"pyghidra-lite"
],
"env": {
"GHIDRA_INSTALL_DIR": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
GHIDRA_INSTALL_DIR envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub johnzfitch, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.9.1) llegó al registro hace 28 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, SwarmMemo
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Talk with agent swarms: rooms, private messages and paid tasks for AI agents
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
[][pypi] [][pypi] [][pypi] [](LICENSE)
[][ci] [][registry] [][mcp] [](#claude-code-plugin) [][ghidra] [](#quick-start)
Token-efficient MCP server for Ghidra-based reverse engineering. Analyze ELF, Mach-O, and PE binaries with Swift, Objective-C, and Hermes support — decompile, disassemble, trace calls and value flow, recover data types, and map addresses back to file offsets. Runs on Linux, macOS, and Windows; ships as a Claude Code plugin with a bundled reverse-engineering skill.
Bottom line: a lean, security-first Ghidra MCP. It is read-only by default — analysis tools never mutate your binaries or the server's configuration (which is frozen for the life of the process). The one tool that writes, annotate (rename / comment / prototype), is opt-in (--allow-write) and human-confirmed: every change is approved by you through an MCP elicitation prompt before it's committed, and it fails closed if your client can't ask. You get an analyst-agent that can persist its findings — under supervision — without giving up the read-only safety story.
1. Prerequisites
A 64-bit JDK 21+ and Ghidra 11.x or 12.x are required (tested with Ghidra 12.1.2 and JDK 21).
# macOS
brew install openjdk@21 brew install ghidra
sudo apt install openjdk-21-jdk
sudo pacman -S jdk21-openjdk yay -S ghidra
Ghidra installed via Homebrew (brew install ghidra) or to /opt/ghidra or ~/ghidra is found automatically. Elsewhere — including any Windows install — point GHIDRA_INSTALL_DIR at the extracted ghidra_ _PUBLIC folder.
2. Install — pick one
Claude Code plugin (recommended for Claude Code) MCP server + reverse-engineering skill in one step; prompts for your Ghidra directory. Needs uv on PATH .
/plugin install pyghidra-lite --marketplace johnzfitch/pyghidra-lite
Any MCP client Install the package, then add it to your client (Claude Code: .mcp.json in your project or ~/.claude.json ; other clients: see MCP Configuration ).
pip install pyghidra-lite
{
"mcpServers": { "pyghidra-lite": { "command": "pyghidra-lite" } } }
3. Check the environment
pyghidra-lite doctor # Ghidra, JDK, decompiler, project dir, locks; exits 1 on problems
[!TIP]
Plugin users without a shell install can run the same check with
uvx pyghidra-lite doctor.
4. Use it
You: Analyze the binary at /path/to/binaries/app
Claude: [calls load, info, code...]
Installs the MCP server (run with uvx, so uv must be on PATH) together with the pyghidra-lite:reverse-engineering workflow skill, and asks for your Ghidra directory, cache directory, optional path restriction and whether to allow annotate:
/plugin install pyghidra-lite --marketplace johnzfitch/pyghidra-lite
/plugin marketplace add johnzfitch/pyghidra-lite first, then /plugin install pyghidra-lite@pyghidra-lite./reload-plugins (or start a new session) to switch to it./config.[!WARNING]
If you also have a manual
pyghidra-liteentry in.mcp.jsonor~/.claude.json,
remove it — otherwise every tool appears twice.
pip install pyghidra-lite
yay -S python-pyghidra-lite
git clone https://github.com/johnzfitch/pyghidra-lite
cd pyghidra-lite pip install -e .
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": { "pyghidra-lite": { "command": "uvx", "args": ["pyghidra-lite"] } } }
uvx auto-installs pyghidra-lite from PyPI on first run. Ghidra is auto-detected; set GHIDRA_INSTALL_DIR in env if needed:
{
"mcpServers": { "pyghidra-lite": { "command": "uvx", "args": ["pyghidra-lite"], "env": { "GHIDRA_INSTALL_DIR": "/path/to/ghidra" } } } }
Create .mcp.json in your project (or ~/.claude.json for global):
{
"mcpServers": { "pyghidra-lite": { "command": "pyghidra-lite" } } }
For single-session use or debugging, run the server directly:
{
"mcpServers": { "pyghidra-lite": { "command": "pyghidra-lite", "args": ["serve"] } } }
{
"mcpServers": { "pyghidra-lite": { "command": "pyghidra-lite", "args": [ "serve", "--ghidra-dir", "/path/to/ghidra" ] } } }
By default, pyghidra-lite can load binaries from any path (the MCP client handles permissions). Use --restrict-path to lock down access:
{
"mcpServers": { "pyghidra-lite": { "command": "pyghidra-lite", "args": [ "serve", "--restrict-path", "/home/user/binaries", "--restrict-path", "/opt/targets" ] } } }
The HTTP/SSE transports are shared and apply DNS-rebinding protection (Host/Origin validation). Binding to a non-loopback address additionally requires both --restrict-path and a bearer token:
pyghidra-lite serve -t streamable-http --host 0.0.0.0 \
--restrict-path /opt/targets \ --auth-token "$PYGHIDRA_LITE_AUTH_TOKEN" \ --allowed-host re.example.com:8000 # if fronted under another hostname
Clients then send Authorization: Bearer on every request. Terminate TLS at a reverse proxy for remote access.
pyghidra-lite provides 8 read-only analysis tools plus 1 opt-in write tool, all auto-detecting format (ELF/Mach-O/PE) and language (Swift/ObjC/Hermes):
| Tool | Purpose | Key Parameters |
|---|---|---|
load | Import and analyze binary | path, profile?, fresh?, bootstrap?, bootstrap_mode? |
delete | Remove binary and cancel jobs | name |
binaries | List binaries + job status | jobs?, rank_sources? |
info | Binary overview | binary, detail? (summary/full/format/sections/entropy) |
functions | List/search functions, imports, exports | binary, query?, type? (all/swift/objc/imports/exports/types/got/dylibs), limit? |
code | Decompile, disassemble, p-code, bytes | binary, target, what? (decompile/asm/pcode/bytes/string), cfg? |
xrefs | References and call graphs | binary, target, direction?, depth?, diff? |
search | Find strings, bytes, symbols, data types | binary, query, type? (strings/symbols/bytes/all/blob/extract/types), mode?, bg? |
annotate 🔒 | Rename / comment / set prototype | binary, target, action, name?/comment?/prototype? |
🔒 annotate is the only tool that writes. It is disabled unless the server is started with --allow-write, and every change requires interactive confirmation (MCP elicitation) before it is committed — clients that can't confirm get a preview only. See Writing back.
# Import and analyze
load("/path/to/binary", profile="fast")
load("/path/to/new.bin", profile="deep", bootstrap="old.bin", bootstrap_mode="all")
info("mybinary", detail="full")
functions("mybinary", type="swift")
code("mybinary", "main", cfg=True)
search("mybinary", ["password", "api_key"], bg=True)
xrefs("mybinary", "malloc", depth=2)
code("mybinary", "parse_header", what="pcode")
code("mybinary", "parse_header,param_2", what="pcode")
code("mybinary", "0x4011a0,64", what="bytes") # -> hex, ascii, file_offset, block
search("mybinary", "sockaddr", type="types")
All tools automatically detect:
Use the type and detail parameters to access format/language-specific features.
bootstrap_mode="named": transfer only meaningful source names (default).bootstrap_mode="all": also assign stable synthetic labels to source FUN_* functions during transfer, which is useful for large version-to-version bootstrap workflows where uniqueness matters more than semantics.By default pyghidra-lite is read-only — no tool mutates your binaries. To let an agent persist findings (rename a function, attach a comment, fix a prototype), start the server with --allow-write:
pyghidra-lite serve --allow-write # or PYGHIDRA_LITE_ALLOW_WRITE=1
Then the annotate tool becomes usable:
annotate("mybinary", target="FUN_00401000", action="rename", name="parse_header")
annotate("mybinary", target="parse_header", action="comment", comment="validates the v2 header") annotate("mybinary", target="parse_header", action="prototype", prototype="int parse_header(char *buf, int len)")
Every call is human-confirmed: the server sends an MCP elicitation prompt showing the exact old -> new change, and only commits if you accept. If the server was started without --allow-write, the tool refuses; if your MCP client doesn't support elicitation,
Solo se muestra el principio; lee el resto en el repo