
Python Command-Line Ghidra MCP
pyghidra-mcp एक कमांड-लाइन मॉडल संदर्भ प्रोटोकॉल (MCP) सर्वर है जो Ghidra की पूर्ण विश्लेषणात्मक क्षमता, जो एक मजबूत सॉफ्टवेयर रिवर्स इंजीनियरिंग (SRE) सूट है, को बुद्धिमान एजेंटों और LLM-आधारित उपकरणों की दुनिया में लाता है।
यह pyghidra और jpype का उपयोग करके Ghidra के ProgramAPI और FlatProgramAPI को Python से जोड़ता है, और फिर उस कार्यक्षमता को मॉडल संदर्भ प्रोटोकॉल के माध्यम से प्रस्तुत करता है।
MCP एक एकीकृत इंटरफ़ेस है जो भाषा मॉडलों, विकास उपकरणों (जैसे VS Code), और स्वायत्त एजेंटों को संरचित संदर्भ तक पहुँचने, उपकरणों को लागू करने, और बुद्धिमानी से सहयोग करने की अनुमति देता है। MCP को शक्तिशाली विश्लेषण उपकरणों और LLM पारिस्थितिकी तंत्र के बीच के पुल के रूप में सोचें।
pyghidra-mcp के साथ, Ghidra एक बुद्धिमान बैकएंड बन जाता है—जो संदर्भ-समृद्ध प्रश्नों का उत्तर देने, गहन रिवर्स इंजीनियरिंग कार्यों को स्वचालित करने, और AI-सहायक वर्कफ़्लो में एकीकृत होने के लिए तैयार है।
pyghidra-mcp अब दो ऑपरेटिंग मोड का समर्थन करता है:
headless मोड CLI-संचालित विश्लेषण और स्वचालन के लिए--gui मोड, जो pyghidra-mcp के माध्यम से Ghidra लॉन्च करता है और चल रहे GUI के साथ लाइव प्रोग्राम स्थिति साझा करता है[!NOTE] यह बीटा परियोजना सक्रिय विकास के अंतर्गत है। हम आपकी प्रतिक्रिया, बग रिपोर्ट, सुविधा अनुरोध और कोड का स्वागत करते हैं।
हाँ, मूल ghidra-mcp शानदार है। लेकिन pyghidra-mcp एक अलग दृष्टिकोण लेता है:
--gui के साथ Ghidra लॉन्च करें।यह परियोजना स्थानीय विकास, हेडलेस वातावरण और परीक्षण योग्य वर्कफ़्लो के लिए अनुकूलित एक Python-प्रथम अनुभव प्रदान करता है।
flowchart LR subgraph Clients["Clients"] Agent["MCP host / agent"] Cli["pyghidra-mcp-cli"] User["Ghidra user"] end
subgraph Process["pyghidra-mcp process"]
Transport["stdio or streamable-http"]
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 -->|"stdio or HTTP"| Transport
Cli -->|"HTTP only"| Transport
Transport --> Tools
Tools --> Context
Context --> Project
Context --> Artifacts
Context -.-> Gui
User -.-> Gui
Gui -.-> Project
### एक मोड चुनना```mermaid
flowchart TD
Start["What do you need?"]
Start --> Headless["Agent or automation only"]
Start --> GuiNeed["Live Ghidra GUI control"]
Start --> Terminal["Interactive terminal client"]
Headless --> Stdio["pyghidra-mcp -t stdio<br/>or -t 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"]
stdio का उपयोग करें, या जब कई क्लाइंट को एक ही लंबे समय तक चलने वाले Ghidra प्रोजेक्ट की आवश्यकता हो तो streamable-http का उपयोग करें।pyghidra-mcp Ghidra को लॉन्च करता है, प्रोजेक्ट खोलता है, और अतिरिक्त टूल्स को उजागर करता है जो उसी JVM में CodeBrowser को संचालित करते हैं।pyghidra-mcp-cli एक HTTP क्लाइंट है। पहले एक streamable-http सर्वर प्रारंभ करें, फिर उस चल रहे सर्वर के विरुद्ध टर्मिनल कमांड जारी करें।subgraph Transports
Stdio["stdio"]
Http["streamable-http"]
Sse["sse legacy"]
end
subgraph Server["pyghidra-mcp server"]
FastMcp["FastMCP 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 --> Stdio
Agent --> Http
Automation --> Stdio
Automation --> Http
Automation --> Sse
Cli --> Http
Stdio --> FastMcp
Http --> FastMcp
Sse --> FastMcp
FastMcp --> Context
Context --> PyGhidra
PyGhidra --> Jpype
Jpype --> Project
Project --> Programs
Context --> Indexing
Indexing --> Search
FastMcp --> Tools
Tools --> Context
GuiOnly -.-> CodeBrowser
Context -.-> CodeBrowser
</details>
## विषय सूची
- [PyGhidra-MCP - Ghidra Model Context Protocol Server](#pyghidra-mcp---ghidra-model-context-protocol-server)
- [अवलोकन](#overview)
- [एक और Ghidra MCP?](#yet-another-ghidra-mcp)
- [सेटअप आरेख](#setup-diagrams)
- [भाग कैसे जुड़ते हैं](#how-the-pieces-connect)
- [मोड चुनना](#choosing-a-mode)
- [विषय सूची](#contents)
- [आरंभ करना](#getting-started)
- [एजेंटों के लिए अनुकूलित](#optimized-for-agents)
- [CLI क्लाइंट](#cli-client)
- [स्थापना](#installation)
- [CLI के साथ त्वरित आरंभ](#quick-start-with-cli)
- [प्रोजेक्ट निर्माण, प्रबंधन और मौजूदा प्रोजेक्ट खोलना](#project-creation-management-and-opening-existing-projects)
- [नए प्रोजेक्ट बनाना](#creating-new-projects)
- [स्व-निहित प्रोजेक्ट संरचना](#self-contained-project-structure)
- [बुनियादी प्रोजेक्ट निर्माण](#basic-project-creation)
- [कस्टम प्रोजेक्ट निर्माण](#custom-project-creation)
- [एकाधिक संबंधित प्रोजेक्ट बनाना](#creating-multiple-related-projects)
- [मौजूदा Ghidra प्रोजेक्ट खोलना](#opening-existing-ghidra-projects)
- [.gpr फ़ाइल द्वारा खोलना](#opening-by-gpr-file)
- [GUI मोड](#gui-mode)
- [स्टार्टअप डिफ़ॉल्ट और बड़े प्रोजेक्ट](#startup-defaults-and-large-projects)
- [विकास](#development)
- [सेटअप](#setup)
- [परीक्षण और गुणवत्ता](#testing-and-quality)
- [API](#api)
- [उपकरण](#tools)
- [बैच संचालन](#batch-operations)
- [पढ़ना/विश्लेषण उपकरण](#read--analysis-tools)
- [प्रोजेक्ट संचालन](#project-operations)
- [संपादन/उत्परिवर्तन उपकरण](#edit--mutation-tools)
- [GUI नियंत्रण उपकरण (केवल `--gui`)](#gui-control-tools---gui-only)
- [उपयोग](#usage)
- [डॉकर के साथ बाइनरी मैप करना](#mapping-binaries-with-docker)
- [OpenWeb-UI और MCPO के साथ उपयोग](#using-with-openweb-ui-and-mcpo)
- [`uvx` के साथ](#with-uvx)
- [डॉकर के साथ](#with-docker)
- [मानक इनपुट/आउटपुट (stdio)](#standard-inputoutput-stdio)
- [Python](#python)
- [डॉकर](#docker)
- [स्ट्रीम करने योग्य HTTP](#streamable-http)
- [Python](#python-1)
- [डॉकर](#docker-1)
- [सर्वर-भेजी गई घटनाएँ (SSE)](#server-sent-events-sse)
- [Python](#python-2)
- [डॉकर](#docker-2)
- [एकीकरण](#integrations)
- [Claude Desktop](#claude-desktop)
- [प्रेरणा](#inspiration)
- [योगदान, समुदाय और स्रोत से चलाना](#contributing-community-and-running-from-source)
- [योगदानकर्ता वर्कफ़्लो](#contributor-workflow)
## आरंभ करना
[Python पैकेज](https://pypi.org/p/pyghidra-mcp) को [`uv`](https://docs.astral.sh/uv/guides/tools/) का उपयोग करके CLI कमांड के रूप में चलाएँ:```bash
uvx pyghidra-mcp # Creates pyghidra_mcp_projects directory by default
MCP से लाइव Ghidra GUI को लॉन्च और नियंत्रित करने के लिए, --gui के साथ streamable-http का उपयोग करें:```bash
uvx pyghidra-mcp
--gui
--transport streamable-http
--host 127.0.0.1
--port 8000
--project-path /absolute/path/to/ghidra-projects
--project-name my_project
> [!IMPORTANT]
> `--gui` `pyghidra-mcp` के माध्यम से Ghidra लॉन्च करता है। यह पहले से चल रहे बाहरी Ghidra इंस्टेंस से अटैच नहीं होता है।
या, [Docker container](https://ghcr.io/clearbluejar/pyghidra-mcp) के रूप में चलाएँ:```bash
docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio
pyghidra-mcp MCP सतह को जानबूझकर संकीर्ण रखता है ताकि एजेंट क्लाइंट टूल डिस्कवरी और आर्गुमेंट चयन पर कम टोकन खर्च करें।
open_program_in_gui, list_open_programs, set_current_program, और goto केवल तब उजागर होते हैं जब सर्वर --gui के साथ प्रारंभ किया जाता है।pyghidra-mcp-cli HTTP पर सामान्य संपादन और विश्लेषण वर्कफ़्लो के लिए समूहित कमांड के साथ एक सीधा कमांड-लाइन क्लाइंट प्रदान करता है।यह डिफ़ॉल्ट सर्वर को LLM एजेंटों, IDE इंटीग्रेशन और ऑटोमेशन के लिए उपयोगी बनाए रखता है, बिना हेडलेस सत्रों में अनावश्यक टूल सतह या GUI-केवल नियंत्रण उजागर किए।
अधिक इंटरैक्टिव कमांड-लाइन अनुभव के लिए, आप अलग pyghidra-mcp-cli पैकेज का उपयोग कर सकते हैं, जो चल रहे pyghidra-mcp सर्वर के साथ इंटरैक्ट करने के लिए एक उपयोगकर्ता-अनुकूल इंटरफ़ेस प्रदान करता है।
uv का उपयोग करके CLI क्लाइंट स्थापित करें (अनुशंसित):```bash
uvx pyghidra-mcp-cli
या pip के साथ इंस्टॉल करें:```bash
pip install pyghidra-mcp-cli
2. **CLI का उपयोग करें** (दूसरे टर्मिनल में):```bash
# List available binaries
pyghidra-mcp-cli list binaries
# Decompile a function
pyghidra-mcp-cli decompile --binary ls main
# Decompile with callees, referenced strings, and cross-references
pyghidra-mcp-cli decompile --binary ls main --callees --strings --xrefs
# Search for symbols (supports regex patterns)
pyghidra-mcp-cli search symbols --binary ls printf -l 10
[!नोट] CLI, pyghidra-mcp से HTTP के माध्यम से जुड़ता है ताकि प्रत्येक कमांड के लिए एक नई Ghidra प्रक्रिया शुरू करने के 10-60 सेकंड के स्टार्टअप ओवरहेड से बचा जा सके। पूर्ण दस्तावेज़ीकरण के लिए CLI README देखें।
आप अपने वर्कफ़्लो के अनुसार कई तरीकों से नए प्रोजेक्ट बना सकते हैं:
pyghidra-mcp एक स्व-निहित प्रोजेक्ट संरचना बनाता है जहाँ प्रत्येक प्रोजेक्ट का अपना Ghidra प्रोजेक्ट और pyghidra-mcp आर्टिफैक्ट होते हैं। यह पूर्ण अलगाव और आसान प्रोजेक्ट प्रबंधन सुनिश्चित करता है।
pyghidra-mcp
$ tree pyghidra_mcp_projects/ pyghidra_mcp_projects/ ├── my_project.gpr ├── my_project-pyghidra-mcp │ ├── chromadb │ └── gzfs └── my_project.rep
#### अनुकूलित प्रोजेक्ट निर्माण```bash
# Create project with custom name and location
pyghidra-mcp --project-path ~/analysis/malware_study --project-name malware_analysis
$ tree ~/analysis/
/home/vscode/analysis/
└── malware_study
├── malware_analysis.gpr
├── malware_analysis-pyghidra-mcp
│ ├── chromadb
│ └── gzfs
└── malware_analysis.rep
mkdir ~/reverse_engineering_workspace
pyghidra-mcp --project-path ~/reverse_engineering_workspace/suspicious_binaries --project-name suspicious_analysis
pyghidra-mcp --project-path ~/reverse_engineering_workspace/packed_malware --project-name packed_analysis
### मौजूदा Ghidra प्रोजेक्ट्स खोलना
यदि आपके पास मौजूदा Ghidra प्रोजेक्ट्स (`.gpr` फ़ाइलें) हैं, तो आप उन्हें सीधे `pyghidra-mcp` के साथ खोल सकते हैं:
#### .gpr फ़ाइल द्वारा खोलना```bash
# Open existing Ghidra project (project name derived from filename)
pyghidra-mcp --project-path ~/existing/ghidra/my_research.gpr
# Result: ~/existing/ghidra/my_research-pyghidra-mcp/
# └── chromadb/, gzfs/ (pyghidra-mcp additions)
GUI मोड का उपयोग करें जब आप चाहते हैं कि MCP क्रियाएँ उसी लाइव प्रोग्राम ऑब्जेक्ट्स पर काम करें जिन्हें Ghidra प्रदर्शित कर रहा है।
--gui को --transport streamable-http की आवश्यकता है (या विकल्प के रूप में --transport http)--project-path एक प्रोजेक्ट निर्देशिका और --project-name हो सकता है, या एक मौजूदा .gpr फ़ाइल। गायब प्रोजेक्ट स्वचालित रूप से बनाए जाते हैं।pyghidra-mcp द्वारा लॉन्च किया जाता है, जो GUI और MCP लेन-देन को एक ही JVM में रखता है।--gui के साथ चलाने पर ही उजागर होते हैं।उदाहरण:```bash
pyghidra-mcp
--gui
--transport streamable-http
--project-path /absolute/path/to/my_research.gpr
GUI मोड तब सही विकल्प है जब आप यह करना चाहते हैं:
- CodeBrowser में प्रोग्राम खोलना या स्विच करना
- किसी फ़ंक्शन या पते पर लिस्टिंग नेविगेट करना
- फ़ंक्शन का नाम बदलना या टिप्पणियाँ जोड़ना और Ghidra में उन परिवर्तनों को तुरंत देखना
### स्टार्टअप डिफ़ॉल्ट और बड़े प्रोजेक्ट्स
`pyghidra-mcp` को डिफ़ॉल्ट रूप से `--wait-for-analysis` की आवश्यकता नहीं होती है। सर्वर तब शुरू हो सकता है जब पृष्ठभूमि में विश्लेषण और MCP-साइड इंडेक्सिंग जारी रहे।
यह बड़े प्रोजेक्ट्स के लिए मायने रखता है:
- कई बाइनरी वाले प्रोजेक्ट को शुरू करने के लिए सर्वर स्टार्टअप को ब्लॉक करने की आवश्यकता नहीं है
- `--wait-for-analysis` उपलब्ध है जब आप अनुरोधों को पूरा करने से पहले पूरी तरह से विश्लेषित प्रोजेक्ट चाहते हैं
- बड़े मौजूदा प्रोजेक्ट्स के लिए, विश्लेषण और इंडेक्सिंग तत्परता बाइनरी के अनुसार भिन्न होने की उम्मीद है
वर्तमान सीमा:
- Ghidra विश्लेषण स्थिति और MCP इंडेक्सिंग स्थिति अलग-अलग हैं
- एक बाइनरी Ghidra में पूरी तरह से विश्लेषित हो सकती है जबकि `search_strings` या सिमेंटिक `search_code` अभी भी MCP-साइड इंडेक्सिंग की प्रतीक्षा कर रहे हों
- यह बड़े मौजूदा प्रोजेक्ट्स को खोलते समय अधिक ध्यान देने योग्य है
व्यवहार में:
- डीकंपाइलेशन, नेविगेशन, नाम बदलना और टिप्पणियाँ अभी भी एक बाइनरी के लिए काम कर सकती हैं जबकि इंडेक्सिंग-भारी खोज सुविधाएँ पकड़ रही हों
- यदि स्टार्टअप विलंबता तत्काल खोज तत्परता से अधिक मायने रखती है, तो डिफ़ॉल्ट `--no-wait-for-analysis` रखें
- यदि तत्काल तत्परता स्टार्टअप समय से अधिक मायने रखती है, तो `--wait-for-analysis` का उपयोग करें
## विकास
यह प्रोजेक्ट विकास और परीक्षण को सुव्यवस्थित करने के लिए `Makefile` का उपयोग करता है। लिंटिंग और फ़ॉर्मेटिंग के लिए `ruff` का उपयोग किया जाता है, और कोड गुणवत्ता सुनिश्चित करने के लिए `pre-commit` हुक का उपयोग किया जाता है।
### सेटअप
1. **`uv` इंस्टॉल करें**: यदि आपके पास `uv` इंस्टॉल नहीं है, तो आप इसे pip का उपयोग करके इंस्टॉल कर सकते हैं:
```bash
pip install uv
```
या, आधिकारिक `uv` इंस्टॉलेशन गाइड का पालन करें: [https://docs.astral.sh/uv/install/](https://docs.astral.sh/uv/install/)
2. **एक वर्चुअल एनवायरनमेंट बनाएँ और डिपेंडेंसी इंस्टॉल करें**:
```bash
make dev-setup
source ./.venv/bin/activate
```
3. **Ghidra एनवायरनमेंट वेरिएबल सेट करें**: Ghidra डाउनलोड और इंस्टॉल करें, फिर `GHIDRA_INSTALL_DIR` एनवायरनमेंट वेरिएबल को अपनी Ghidra इंस्टॉलेशन डायरेक्टरी पर सेट करें।
```bash
# Linux / Mac के लिए
export GHIDRA_INSTALL_DIR="/path/to/ghidra/"
# Windows PowerShell के लिए
[System.Environment]:https://raw.githubusercontent.com/clearbluejar/pyghidra-mcp/HEAD/:SetEnvironmentVariable(%27GHIDRA_INSTALL_DIR%27,%27C:%5Cpath%5Cto%5Cghidra%27)
```
### परीक्षण और गुणवत्ता
`Makefile` परीक्षण और कोड गुणवत्ता के लिए कई लक्ष्य प्रदान करता है:
- `make run`: MCP सर्वर चलाएँ।
- `make test`: पूर्ण परीक्षण सूट चलाएँ (यूनिट और इंटीग्रेशन)।
- `make test-unit`: यूनिट परीक्षण चलाएँ।
- `make test-integration`: इंटीग्रेशन परीक्षण चलाएँ।
- `make test-integration-fast`: हल्का इंटीग्रेशन स्मोक टेस्ट चलाएँ जो pre-commit द्वारा उपयोग किया जाता है।
- `make test-integration-gui`: GUI इंटीग्रेशन परीक्षण चलाएँ। एक कार्यशील Ghidra इंस्टॉल और GUI समर्थन की आवश्यकता है।
- `make lint`: `ruff` से कोड शैली जाँचें।
- `make format`: `ruff` से कोड फ़ॉर्मेट करें।
- `make typecheck`: `ruff` से हल्की स्थैतिक जाँच चलाएँ।
- `make check`: सभी गुणवत्ता जाँच चलाएँ।
- `make dev`: विकास वर्कफ़्लो चलाएँ (फ़ॉर्मेट और जाँच)।
- `make build`: वितरण पैकेज बनाएँ।
- `make clean`: बिल्ड आर्टिफैक्ट और कैश साफ़ करें।
अनुशंसित विभाजन:
- pre-commit: `ruff`, `pyright`, यूनिट परीक्षण, और एक हल्का इंटीग्रेशन स्मोक टेस्ट
- GitHub Actions: पूर्ण Linux हेडलेस इंटीग्रेशन कवरेज, `Xvfb` के तहत Linux GUI, CLI कवरेज, और वर्तमान macOS स्मोक टेस्ट
- निर्धारित CI: पुराने macOS / Ghidra संगतता कवरेज
- स्थानीय/मैनुअल: भारी एनवायरनमेंट-विशिष्ट GUI डिबगिंग और रिलीज़ सैनिटी चेक
## API
### टूल्स
LLM को क्रियाएँ करने, नियतात्मक गणना करने और बाहरी सेवाओं के साथ इंटरैक्ट करने में सक्षम बनाता है।
#### बैच संचालन
`decompile_function` और `list_xrefs` एकल लक्ष्य या लक्ष्यों की सूची स्वीकार करते हैं, जिससे कॉल चेन या एक साथ कई प्रतीकों का विश्लेषण करते समय राउंड-ट्रिप कम हो जाती है।```jsonc
// Decompile three functions in one call, with callees and xrefs attached
{
"binary_name": "firmware.bin",
"name_or_address": ["main", "init_hardware", "0x08001234"],
"include_callees": true,
"include_xrefs": true
}
// Get cross-references for multiple symbols at once
{
"binary_name": "firmware.bin",
"name_or_address": ["malloc", "free", "realloc"]
}
प्रति-आइटम त्रुटियां इनलाइन लौटाई जाती हैं (अन्य लक्ष्य अभी भी सफल होते हैं):```jsonc [ {"name": "main", "code": "void main() { ... }", "callees": ["init_hardware"], "xrefs": [...]}, {"name": "0xdeadbeef", "code": "", "error": "Function or symbol '0xdeadbeef' not found."} ]
#### पढ़ने / विश्लेषण उपकरण
- `search_code(binary_name: str, query: str, limit: int = 5, offset: int = 0, search_mode: str = "semantic", include_full_code: bool = True, preview_length: int = 500, similarity_threshold: float = 0.0)`: डीकंपाइल्ड स्यूडो-सी को सिमैंटिक वेक्टर खोज या शाब्दिक मिलान का उपयोग करके खोजें।
- `list_xrefs(binary_name: str, name_or_address: str | list[str])`: फ़ंक्शन(ओं), प्रतीक(ओं), या पते(ओं) के क्रॉस-रेफरेंस सूचीबद्ध करें। एकल लक्ष्य या बैच लुकअप के लिए एक सूची स्वीकार करता है।
- `gen_callgraph(binary_name: str, function_name: str, direction: str = "calling", display_type: str = "flow", condense_threshold: int = 50, top_layers: int = 3, bottom_layers: int = 3, max_run_time: int = 120)`: निर्दिष्ट फ़ंक्शन के लिए MermaidJS कॉल ग्राफ़ उत्पन्न करता है। "calling" (लक्ष्य द्वारा कॉल किए जाने वाले फ़ंक्शन) और "called" (लक्ष्य को कॉल करने वाले फ़ंक्शन) दोनों दिशाओं का समर्थन करता है, जिसमें कई विज़ुअलाइज़ेशन प्रकार हैं।
- `decompile_function(binary_name: str, name_or_address: str | list[str], include_callees: bool = False, include_strings: bool = False, include_xrefs: bool = False, timeout_sec: int = 30)`: नाम या पते से फ़ंक्शन(ओं) को डीकंपाइल करें। एकल लक्ष्य या बैच डीकंपाइलेशन के लिए एक सूची स्वीकार करता है। समृद्ध प्रतिक्रिया फ़्लैग प्रत्येक परिणाम में कैलीज़, स्ट्रिंग्स, और/या xrefs संलग्न करते हैं। `timeout_sec` प्रति लक्ष्य लागू होता है और प्रत्येक डीकंपाइलेशन प्रयास को स्वतंत्र रूप से सीमित करता है।
- `list_exports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`: निर्दिष्ट बाइनरी से सभी निर्यातित फ़ंक्शन और प्रतीकों को सूचीबद्ध करता है (क्वेरी के लिए regex समर्थित)।
- `list_imports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`: निर्दिष्ट बाइनरी के लिए सभी आयातित फ़ंक्शन और प्रतीकों को सूचीबद्ध करता है (क्वेरी के लिए regex समर्थित)।
- `read_bytes(binary_name: str, address: str, size: int = 32)`: निर्दिष्ट पते पर मेमोरी से कच्चे बाइट्स पढ़ता है। हेक्स पते में `0x` उपसर्ग शामिल या छोड़ा जा सकता है।
- `search_strings(binary_name: str, query: str, limit: int = 100)`: बाइनरी के भीतर स्ट्रिंग्स खोजता है।
- `search_symbols_by_name(binary_name: str, query: str, functions_only: bool = False, offset: int = 0, limit: int = 25)`: बाइनरी के भीतर प्रतीकों को नाम से खोजें। केस-असंवेदनशील मिलान के साथ regex पैटर्न (जैसे `^main$`, `func.*one`) या सादे सबस्ट्रिंग क्वेरी का समर्थन करता है। लेबल, वेरिएबल और अन्य गैर-फ़ंक्शन प्रतीकों को बाहर करने के लिए `functions_only=True` सेट करें।
#### परियोजना संचालन
- `import_binary(binary_path: str)`: निर्दिष्ट पथ से Ghidra प्रोजेक्ट में एक बाइनरी आयात करता है। यदि पथ एक निर्देशिका है, तो यह सभी समर्थित बाइनरी फ़ाइलों को रिकर्सिवली स्कैन और आयात करेगा, Ghidra प्रोजेक्ट के भीतर निर्देशिका संरचना को संरक्षित करेगा।
- `list_project_binaries()`: वर्तमान Ghidra प्रोजेक्ट में बाइनरी सूचीबद्ध करता है। GUI मोड में इसमें प्रोजेक्ट बाइनरी शामिल हैं जो डिस्क पर मौजूद हैं, भले ही वे CodeBrowser में वर्तमान में खुले न हों।
- `list_project_binary_metadata(binary_name: str)`: किसी विशिष्ट बाइनरी के लिए विस्तृत मेटाडेटा प्राप्त करता है, जिसमें आर्किटेक्चर, कंपाइलर, निष्पादन योग्य प्रारूप, विश्लेषण मेट्रिक्स और फ़ाइल हैश शामिल हैं।
- `delete_project_binary(binary_name: str)`: Ghidra प्रोजेक्ट से एक बाइनरी (प्रोग्राम) हटाता है।
#### संपादन / म्यूटेशन उपकरण
- `rename_function(binary_name: str, name_or_address: str, new_name: str)`: किसी फ़ंक्शन को नाम या पते से नाम बदलें। GUI मोड में यह एक लाइव Ghidra लेन-देन के रूप में चलता है और खुले प्रोग्राम को अपडेट करता है।
- `rename_variable(binary_name: str, function_name_or_address: str, variable_name: str, new_name: str)`: किसी विशिष्ट फ़ंक्शन के भीतर सटीक नाम से फ़ंक्शन पैरामीटर या स्थानीय वेरिएबल का नाम बदलें। यदि नाम उस फ़ंक्शन के भीतर गायब या अस्पष्ट है, तो टूल अनुमान लगाने के बजाय एक त्रुटि देता है। GUI मोड में यह एक लाइव Ghidra लेन-देन के रूप में चलता है और खुले प्रोग्राम को अपडेट करता है।
- `set_variable_type(binary_name: str, function_name_or_address: str, variable_name: str, type_name: str)`: किसी विशिष्ट फ़ंक्शन के भीतर सटीक नाम से फ़ंक्शन पैरामीटर या स्थानीय वेरिएबल के लिए डेटा प्रकार सेट करें। यदि नाम उस फ़ंक्शन के भीतर गायब या अस्पष्ट है, तो टूल अनुमान लगाने के बजाय एक त्रुटि देता है। `type_name` को प्रोग्राम डेटाटाइप प्रबंधक के विरुद्ध Ghidra के डेटाटाइप पार्सर का उपयोग करके पार्स किया जाता है।
- `set_function_prototype(binary_name: str, function_name_or_address: str, prototype: str)`: पूर्ण हस्ताक्षर स्ट्रिंग से फ़ंक्शन प्रोटोटाइप सेट करें। टूल हमेशा प्रोटोटाइप को Ghidra के मूल हस्ताक्षर पार्सर के माध्यम से चलाता है और यदि प्रोटोटाइप अमान्य है तो अंतर्निहित पार्सर या लागू करने की त्रुटि लौटाता है।
- `set_comment(binary_name: str, target: str, comment: str, comment_type: str)`: फ़ंक्शन/डीकंपाइलर टिप्पणी या लिस्टिंग टिप्पणी सेट करें। लिस्टिंग टिप्पणी लक्ष्य पते, प्रतीक या फ़ंक्शन हो सकते हैं। समर्थित `comment_type` मान हैं `decompiler`, `plate`, `pre`, `eol`, `post`, और `repeatable`।
#### GUI नियंत्रण उपकरण (केवल `--gui`)
ये उपकरण केवल तब उपलब्ध होते हैं जब `pyghidra-mcp` को `--gui` के साथ शुरू किया जाता है और प्रोजेक्ट डेटा को सीधे बदलने के बजाय यह नियंत्रित करते हैं कि GUI क्या दिखा रहा है:
- `list_open_programs()`: Ghidra GUI में वर्तमान में खुले प्रोग्रामों को सूचीबद्ध करें।
- `open_program_in_gui(binary_name: str, new_window: bool = True)`: प्रोजेक्ट बाइनरी को CodeBrowser में खोलें। डिफ़ॉल्ट रूप से यह एक नया CodeBrowser विंडो खोलता है। जब संभव हो तो दृश्यमान CodeBrowser का पुन: उपयोग करने के लिए `new_window=false` सेट करें।
- `set_current_program(binary_name: str)`: एक खुले प्रोग्राम को प्राथमिक GUI टूल संदर्भ में सक्रिय/वर्तमान प्रोग्राम बनाएं।
- `goto(binary_name: str, target: str, target_type: str)`: Ghidra GUI को किसी पते या फ़ंक्शन पर नेविगेट करें। `target_type` को `address` या `function` होना चाहिए।
## उपयोग
यह Python पैकेज PyPI पर [pyghidra-mcp](https://pypi.org/p/pyghidra-mcp) के रूप में प्रकाशित है और इसे [pip](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/#install-a-package), [pipx](https://pipx.pypa.io/), [uv](https://docs.astral.sh/uv/), [poetry](https://python-poetry.org/), या किसी भी Python पैकेज प्रबंधक के साथ स्थापित और चलाया जा सकता है।```text
$ uvx pyghidra-mcp --help
Usage: pyghidra-mcp [OPTIONS] [INPUT_PATHS]...
PyGhidra Command-Line MCP server
Options:
-v, --version Show version and exit.
-t, --transport [stdio|streamable-http|sse|http]
Transport protocol. SSE is deprecated;
use streamable-http instead. [default: stdio]
-p, --port INTEGER Port for HTTP-based transports. [default: 8000]
-o, --host TEXT Host for HTTP-based transports. [default: 127.0.0.1]
--project-path PATH Directory for a pyghidra-mcp project or an
existing Ghidra .gpr file. [default: pyghidra_mcp_projects]
--project-name TEXT Ghidra project name. Ignored for .gpr paths.
[default: my_project]
--threaded / --no-threaded Allow threaded analysis. [default: threaded]
--max-workers INTEGER Number of analysis workers; 0 means CPU count.
[default: 0]
--wait-for-analysis / --no-wait-for-analysis
Wait for initial analysis before starting.
[default: no-wait-for-analysis]
--gui / --no-gui Launch Ghidra GUI in-process and serve MCP
against GUI-open programs. Cannot attach to
an already-running external Ghidra process.
[default: no-gui]
--list-project-binaries List ingested project binaries and exit.
--delete-project-binary TEXT Delete a project binary by name and exit.
--force-analysis / --no-force-analysis
Force a new binary analysis each run.
[default: no-force-analysis]
--verbose-analysis / --no-verbose-analysis
Verbose logging for analysis. [default: no-verbose-analysis]
--no-symbols / --with-symbols Turn off symbols for analysis. [default: with-symbols]
--sym-file-path PATH Single PDB symbol file for one binary.
-s, --symbols-path PATH Local symbols directory.
--gdt PATH Path to GDT files. May be specified multiple times.
--program-options PATH JSON file with Ghidra program options.
--gzfs-path PATH Location to store GZFs of analyzed binaries.
-h, --help Show this message and exit.
डॉकर कंटेनर का उपयोग करते समय, आप अपने बाइनरी वाले स्थानीय निर्देशिका को कंटेनर के वर्कस्पेस में मैप कर सकते हैं। इससे pyghidra-mcp आपकी फ़ाइलों का विश्लेषण कर सकता है।```bash
mkdir -p ./binaries cp /path/to/your/binaries/* ./binaries/
docker run -i --rm
-v "$(pwd)/binaries:/binaries"
ghcr.io/clearbluejar/pyghidra-mcp
/binaries/*
### OpenWeb-UI और MCPO के साथ उपयोग
आप `pyghidra-mcp` को [OpenWeb-UI](https://github.com/open-webui/open-webui) के साथ [MCPO](https://github.com/open-webui/mcpo) का उपयोग करके एकीकृत कर सकते हैं, जो एक MCP-to-OpenAPI प्रॉक्सी है। यह आपको `pyghidra-mcp` के उपकरणों को एक मानक RESTful API के माध्यम से प्रकट करने की अनुमति देता है, जिससे वे वेब इंटरफेस और अन्य उपकरणों के लिए सुलभ हो जाते हैं।
https://github.com/user-attachments/assets/3d56ea08-ed2d-471d-9ed2-556fb8ee4c95
#### `uvx` के साथ
आप `pyghidra-mcp` और `mcpo` को एक साथ `uvx` का उपयोग करके चला सकते हैं:```bash
uvx mcpo -- \
pyghidra-mcp /bin/ls
आप mcpo को Docker के साथ संयोजित कर सकते हैं:```bash uvx mcpo -- docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp /bin/ls
### मानक इनपुट/आउटपुट (stdio)
stdio परिवहन मानक इनपुट और आउटपुट स्ट्रीम के माध्यम से संचार सक्षम करता है। यह स्थानीय एकीकरण और कमांड-लाइन उपकरणों के लिए विशेष रूप से उपयोगी है। अधिक विवरण के लिए [विनिर्देश](https://modelcontextprotocol.io/docs/concepts/transports#built-in-transport-types) देखें।
#### Python```bash
pyghidra-mcp
डिफ़ॉल्ट रूप से, Python पैकेज stdio मोड में चलेगा। क्योंकि यह मानक इनपुट और आउटपुट स्ट्रीम का उपयोग कर रहा है, ऐसा लगेगा कि टूल बिना किसी आउटपुट के हैंग हो गया है, लेकिन यह अपेक्षित है।
यह सर्वर GitHub के कंटेनर रजिस्ट्री (ghcr.io/clearbluejar/pyghidra-mcp) पर प्रकाशित है।``` docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio
डिफ़ॉल्ट रूप से, Docker कंटेनर `streamable-http` सर्वर प्रारंभ करता है, इसलिए इमेज नाम के बाद `-t stdio` शामिल करें और [इंटरैक्टिव](https://docs.docker.com/reference/cli/docker/container/run/#interactive) stdio मोड के लिए `-i` के साथ चलाएँ।
### Streamable HTTP
Streamable HTTP JSON RPC पर HTTP POST अनुरोधों के माध्यम से स्ट्रीमिंग प्रतिक्रियाओं को सक्षम करता है। अधिक जानकारी के लिए [विनिर्देश](https://modelcontextprotocol.io/specification/draft/basic/transports#streamable-http) देखें।
डिफ़ॉल्ट रूप से, सर्वर क्लाइंट कनेक्शन के लिए [http://127.0.0.1:8000/mcp](http://127.0.0.1:8000/mcp) पर सुनता है। बाइंड पता बदलने के लिए `--host` / `--port` या `MCP_HOST` / `MCP_PORT` पर्यावरण चर का उपयोग करें। _क्लाइंट को इससे कनेक्ट करने के लिए सर्वर चालू होना चाहिए।_
#### Python```bash
pyghidra-mcp -t streamable-http
डिफ़ॉल्ट रूप से, Python पैकेज stdio मोड में चलेगा, इसलिए आपको -t streamable-http शामिल करना होगा।
GUI मोड इस ट्रांसपोर्ट का उपयोग करता है:```bash
pyghidra-mcp
--gui
--transport streamable-http
--project-path /absolute/path/to/my_project.gpr
#### Docker```
docker run -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp
[!WARNING] MCP समुदाय इसे पिछड़े संगतता के लिए एक विरासत परिवहन प्रोटोकॉल मानता है। स्ट्रीमेबल HTTP अनुशंसित प्रतिस्थापन है।
SSE परिवहन सर्वर से क्लाइंट स्ट्रीमिंग को सक्षम करता है जिसमें क्लाइंट-से-सर्वर और सर्वर-से-क्लाइंट संचार के लिए सर्वर-सेंड इवेंट्स का उपयोग किया जाता है। अधिक विवरण के लिए विनिर्देश देखें।
डिफ़ॉल्ट रूप से, सर्वर क्लाइंट कनेक्शन के लिए http://127.0.0.1:8000/sse पर सुनता है। बाइंड पता बदलने के लिए --host / --port या MCP_HOST / MCP_PORT पर्यावरण चर का उपयोग करें। क्लाइंट को जुड़ने के लिए सर्वर को चल रहा होना चाहिए।
pyghidra-mcp -t sse
डिफ़ॉल्ट रूप से, Python पैकेज `stdio` मोड में चलेगा, इसलिए आपको `-t sse` शामिल करना होगा।
#### Docker```
docker run -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp -t sse
[!NOTE] यह अनुभाग कार्य प्रगति पर है। हम जल्द ही विशिष्ट एकीकरणों के उदाहरण जोड़ेंगे।
अपने claude_desktop_config.json फ़ाइल में निम्नलिखित JSON ब्लॉक जोड़ें:```json
{
"mcpServers": {
"pyghidra-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/clearbluejar/pyghidra-mcp",
"pyghidra-mcp",
"--project-path",
"/tmp/pyghidra", // or path to writeable directory
"/bin/ls" //
],
"env": {
"GHIDRA_INSTALL_DIR": "/path/to/ghidra/ghidra_12.0_PUBLIC"
}
}
}
}
## प्रेरणा
इस परियोजना के कार्यान्वयन और डिज़ाइन को इन शानदार परियोजनाओं से प्रेरणा मिली:
* [GhidraMCP](https://github.com/lauriewired/GhidraMCP)
* [semgrep-mcp](https://github.com/semgrep/mcp)
* [ghidrecomp](https://github.com/clearbluejar/ghidrecomp)
* [BinAssistMCP](https://github.com/jtang613/BinAssistMCP)
---
## योगदान, समुदाय और स्रोत से चलाना
हम मानते हैं कि रिवर्स इंजीनियरिंग का भविष्य एजेंटिक, प्रासंगिक और स्केलेबल है।
`pyghidra-mcp` उस भविष्य की ओर एक कदम है—पूर्ण Ghidra परियोजनाओं को AI एजेंटों और ऑटोमेशन पाइपलाइनों के लिए सुलभ बनाना।
हम सक्रिय रूप से परियोजना विकसित कर रहे हैं और प्रतिक्रिया, समस्याओं और योगदान का स्वागत करते हैं।
> [!NOTE]
> हमें आपकी प्रतिक्रिया, बग रिपोर्ट, फीचर अनुरोध और कोड पसंद हैं।
### योगदानकर्ता कार्यप्रवाह
यदि आप एक नया उपकरण या एकीकरण जोड़ रहे हैं, तो अनुशंसित कार्यप्रवाह इस प्रकार है:
- अपनी शाखा को `feature/` उपसर्ग से लेबल करें ताकि एक नई क्षमता का संकेत मिले।
- अपने उपकरण को `pyghidra/tools/` में मौजूद उपकरणों के समान शैली और संरचना का उपयोग करके जोड़ें।
- एक एकीकरण परीक्षण लिखें जो `StdioClient` इंस्टेंस का उपयोग करके आपके उपकरण का परीक्षण करता है। इसे `tests/integration/` में रखें।
- `tests/integration/test_concurrent_streamable_client.py` में अपने उपकरण के लिए एक कॉल जोड़कर समवर्ती परीक्षण का विस्तार करें।
- सुनिश्चित करने के लिए `make test` और `make format` चलाएँ कि आपके परिवर्तन सभी परीक्षण पास करते हैं और लिंटिंग नियमों का पालन करते हैं।
यह कोडबेस में स्थिरता सुनिश्चित करता है और रिवर्स इंजीनियरिंग वर्कफ़्लो के लिए मजबूत, स्केलेबल उपकरण बनाए रखने में हमारी मदद करता है।
______________________________________________________________________
❤️ के साथ बनाया गया [PyGhidra-MCP टीम](https://github.com/clearbluejar/pyghidra-mcp) द्वारा