
pyghidra-mcp v0.2.5
Ghidra MCP en ligne de commande Python
PyGhidra-MCP - Serveur Model Context Protocol pour Ghidra
Aperçu
pyghidra-mcp est un serveur en ligne de commande Model Context Protocol (MCP) qui apporte toute la puissance analytique de Ghidra, une suite robuste de rétro-ingénierie logicielle (SRE), dans le monde des agents intelligents et de l'outillage basé sur les LLM.
Il fait le lien entre l'ProgramAPI et l'FlatProgramAPI de Ghidra et Python via pyghidra et jpype, puis expose ces fonctionnalités via le Model Context Protocol.
MCP est une interface unifiée qui permet aux modèles de langage, aux outils de développement (comme VS Code) et aux agents autonomes d'accéder à un contexte structuré, d'invoquer des outils et de collaborer intelligemment. Considérez MCP comme le pont entre les outils d'analyse puissants et l'écosystème des LLM.
Avec pyghidra-mcp, Ghidra devient un backend intelligent—prêt à répondre à des requêtes riches en contexte, à automatiser des tâches profondes de rétro-ingénierie et à s'intégrer dans des workflows assistés par IA.
pyghidra-mcp prend désormais en charge deux modes de fonctionnement :
- mode
headlesspour l'analyse et l'automatisation pilotées par CLI - mode
--gui, qui lance Ghidra viapyghidra-mcpet partage l'état du programme en direct avec l'interface graphique en cours d'exécution
[!NOTE] Ce projet bêta est en cours de développement actif. Nous serions ravis de recevoir vos retours, rapports de bugs, demandes de fonctionnalités et contributions de code.
Encore un autre Ghidra MCP ?
Oui, le ghidra-mcp original est fantastique. Mais pyghidra-mcp adopte une approche différente :
- 🐍 Headless-first, compatible GUI – Fonctionne entièrement via CLI pour une automatisation rationalisée, ou lance Ghidra avec
--guilorsque vous souhaitez une navigation et des modifications en direct dans l'interface graphique. - 🔁 Conçu pour l'automatisation – Idéal pour l'intégration avec les LLM, les pipelines CI et les outils nécessitant un comportement reproductible.
- ✅ Compatible CI/CD – Développé avec des tests unitaires et d'intégration robustes pour les sessions client et serveur.
- 🚀 Démarrage rapide – Le démarrage asynchrone permet au serveur de commencer à traiter les requêtes pendant que les binaires sont encore analysés en arrière-plan. Prend en charge un lancement rapide en ligne de commande avec une configuration minimale.
- 📦 Analyse à l'échelle du projet – Permet la rétro-ingénierie concurrente de tous les binaires d'un projet Ghidra
- 🤖 Prêt pour les agents – Conçu pour les workflows pilotés par des agents intelligents et l'automatisation de la rétro-ingénierie à grande échelle.
- 🔍 Recherche sémantique de code – Utilise des embeddings vectoriels (via ChromaDB) pour permettre une recherche rapide et approximative parmi les fonctions décompilées, les commentaires et les symboles—parfait pour l'exploration de pseudo-C et le triage piloté par agent.
Ce projet offre une expérience Python-first optimisée pour le développement local, les environnements headless et les workflows testables.
Schémas de configuration
Comment les éléments s'articulent
flowchart LR
subgraph Clients["Clients"]
Agent["MCP host / agent"]
Cli["pyghidra-mcp-cli"]
User["Ghidra user"]
end
subgraph Process["pyghidra-mcp process"]
Transport["streamable HTTP (recommended)<br/>stdio (local fallback)"]
Tools["MCP tools"]
Context["PyGhidra context"]
end
Project["Ghidra project<br/>.gpr / .rep"]
Artifacts["MCP artifacts<br/>ChromaDB + GZF cache"]
Gui["Ghidra GUI / CodeBrowser<br/>only with --gui"]
Agent -->|"HTTP (recommended)"| Transport
Cli -->|"HTTP only"| Transport
Transport --> Tools
Tools --> Context
Context --> Project
Context --> Artifacts
Context -.-> Gui
User -.-> Gui
Gui -.-> Project
Choisir un mode
flowchart TD
Start["What do you need?"]
Start --> Headless["Agent or automation"]
Start --> GuiNeed["Live Ghidra GUI control"]
Start --> Terminal["Interactive terminal client"]
Headless --> Http["pyghidra-mcp<br/>--transport streamable-http"]
GuiNeed --> GuiMode["pyghidra-mcp --gui<br/>--transport streamable-http<br/>--project-path project.gpr"]
Terminal --> HttpServer["Start pyghidra-mcp<br/>--transport streamable-http"]
HttpServer --> CliMode["Run pyghidra-mcp-cli commands"]
- MCP sans interface graphique : utilisez
streamable-http. Cela maintient Ghidra et son projet actifs en tant que serveur unique de longue durée et fonctionne à la fois avec les hôtes MCP et le client CLI. - Mode GUI :
pyghidra-mcplance Ghidra, ouvre le projet et expose des outils supplémentaires qui pilotent le CodeBrowser dans la même JVM. - Client CLI :
pyghidra-mcp-cliest un client HTTP. Démarrez d'abord un serveurstreamable-http, puis émettez des commandes terminal contre ce serveur en cours d'exécution. - stdio : conservez ceci uniquement pour les hôtes MCP qui ne peuvent pas se connecter à un point de terminaison HTTP.
Architecture détaillée et surface des outils
flowchart TD
subgraph Clients
Agent["LLM / MCP host"]
Cli["pyghidra-mcp-cli"]
Automation["scripts and CI"]
end
subgraph Transports
Stdio["stdio"]
Http["streamable-http"]
Sse["sse legacy"]
end
subgraph Server["pyghidra-mcp server"]
McpServer["MCPServer tool server"]
Context["PyGhidra context"]
Indexing["background analysis and Chroma indexing"]
subgraph Tools["MCP tools"]
Analysis["decompile, xrefs, bytes, callgraph"]
Search["symbols, strings, code"]
ProjectOps["import, delete, metadata, list binaries"]
Edits["rename function, rename variable, set type, set prototype, set comment"]
GuiOnly["GUI only: open program, goto, list open programs, set current program"]
end
end
subgraph GhidraRuntime["Ghidra runtime"]
PyGhidra["pyghidra"]
Jpype["JPype shared JVM"]
Project["Ghidra project"]
Programs["program databases"]
CodeBrowser["Ghidra GUI / CodeBrowser"]
end
Agent --> Http
Automation --> Http
Automation --> Sse
Cli --> Http
Stdio --> McpServer
Http --> McpServer
Sse --> McpServer
McpServer --> Context
Context --> PyGhidra
PyGhidra --> Jpype
Jpype --> Project
Project --> Programs
Context --> Indexing
Indexing --> Search
McpServer --> Tools
Tools --> Context
GuiOnly -.-> CodeBrowser
Context -.-> CodeBrowser