
पायथन कमांड-लाइन घिड्रा एमसीपी
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/41597/82f9c5eb55db6134d47587275fce66c4ed32b86b5332f7e2d610fa0214070a7f.png" width=60% >
</p>
<p align="center">
<img align="center" alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/clearbluejar/pyghidra-mcp/pytest-devcontainer-repo-all.yml?style=for-the-badge&label=pytest">
<img align="center" alt="PyPI - Downloads" src="https://img.shields.io/pypi/dm/pyghidra-mcp?color=yellow&label=PyPI%20downloads&style=for-the-badge">
<img align="center" src="https://img.shields.io/github/stars/clearbluejar/pyghidra-mcp?style=for-the-badge">
</p>
# PyGhidra-MCP - Ghidra Model Context Protocol सर्वर
### अवलोकन
**`pyghidra-mcp`** एक कमांड-लाइन Model Context Protocol (MCP) सर्वर है जो [Ghidra](https://ghidra-sre.org/) की पूर्ण विश्लेषणात्मक शक्ति को, जो एक मजबूत सॉफ़्टवेयर रिवर्स इंजीनियरिंग (SRE) सूट है, बुद्धिमान एजेंटों और LLM-आधारित टूलिंग की दुनिया में लाता है।
यह Ghidra के [ProgramAPI](https://ghidra.re/ghidra_docs/api/ghidra/program/model/listing/Program.html) और [FlatProgramAPI](https://ghidra.re/ghidra_docs/api/ghidra/program/flatapi/FlatProgramAPI.html) को `pyghidra` और `jpype` का उपयोग करके Python से जोड़ता है, और फिर उस कार्यक्षमता को Model Context Protocol के माध्यम से उजागर करता है।
MCP एक एकीकृत इंटरफ़ेस है जो भाषा मॉडल, विकास उपकरण (जैसे VS Code), और स्वायत्त एजेंटों को संरचित संदर्भ तक पहुँचने, टूलिंग को आमंत्रित करने, और बुद्धिमानी से सहयोग करने की अनुमति देता है। MCP को शक्तिशाली विश्लेषण उपकरणों और LLM पारिस्थितिकी तंत्र के बीच सेतु के रूप में सोचें।
`pyghidra-mcp` के साथ, Ghidra एक बुद्धिमान बैकएंड बन जाता है—संदर्भ-समृद्ध प्रश्नों का उत्तर देने, गहरे रिवर्स इंजीनियरिंग कार्यों को स्वचालित करने, और AI-सहायता प्राप्त वर्कफ़्लो में एकीकृत होने के लिए तैयार।
`pyghidra-mcp` अब दो ऑपरेटिंग मोड का समर्थन करता है:
- `headless` मोड CLI-संचालित विश्लेषण और स्वचालन के लिए
- `--gui` मोड, जो `pyghidra-mcp` के माध्यम से Ghidra लॉन्च करता है और चल रहे GUI के साथ लाइव प्रोग्राम स्थिति साझा करता है
> [!NOTE]
> यह बीटा प्रोजेक्ट सक्रिय विकास के अधीन है। हमें आपकी प्रतिक्रिया, बग रिपोर्ट, फीचर अनुरोध, और कोड बहुत पसंद आएंगे।
## एक और Ghidra MCP?
हाँ, मूल [ghidra-mcp](https://github.com/LaurieWired/GhidraMCP) शानदार है। लेकिन `pyghidra-mcp` एक अलग दृष्टिकोण अपनाता है:
- 🐍 **Headless-first, GUI-capable** – सुव्यवस्थित स्वचालन के लिए पूरी तरह से CLI के माध्यम से चलाएँ, या जब आप लाइव GUI नेविगेशन और संपादन चाहते हैं तो `--gui` के साथ Ghidra लॉन्च करें।
- 🔁 **स्वचालन के लिए डिज़ाइन किया गया** – LLMs, CI पाइपलाइनों, और ऐसी टूलिंग के साथ एकीकरण के लिए आदर्श जिसे दोहराने योग्य व्यवहार की आवश्यकता होती है।
- ✅ **CI/CD अनुकूल** – क्लाइंट और सर्वर दोनों सत्रों के लिए मजबूत यूनिट और इंटीग्रेशन टेस्ट के साथ बनाया गया।
- 🚀 **त्वरित स्टार्टअप** – असिंक्रोनस स्टार्टअप सर्वर को अनुरोधों को संभालना शुरू करने की अनुमति देता है जबकि बाइनरीज़ अभी भी बैकग्राउंड में विश्लेषण की जा रही हों। न्यूनतम सेटअप के साथ तेज़ कमांड-लाइन लॉन्चिंग का समर्थन करता है।
- 📦 **प्रोजेक्ट-व्यापी विश्लेषण** – एक Ghidra प्रोजेक्ट में सभी बाइनरीज़ के समवर्ती रिवर्स इंजीनियरिंग को सक्षम बनाता है
- 🤖 **एजेंट-तैयार** – बुद्धिमान एजेंट-संचालित वर्कफ़्लो और बड़े पैमाने पर रिवर्स इंजीनियरिंग स्वचालन के लिए बनाया गया।
- 🔍 सेमांटिक कोड सर्च – डीकंपाइल किए गए फ़ंक्शन, टिप्पणियों, और प्रतीकों में तेज़, फ़ज़ी लुकअप को सक्षम करने के लिए वेक्टर एम्बेडिंग (ChromaDB के माध्यम से) का उपयोग करता है—स्यूडो-C अन्वेषण और एजेंट-संचालित ट्राइएज के लिए आदर्श।
यह प्रोजेक्ट स्थानीय विकास, हेडलेस वातावरण, और परीक्षण योग्य वर्कफ़्लो के लिए अनुकूलित Python-first अनुभव प्रदान करता है।
## सेटअप आरेख
### टुकड़े कैसे जुड़ते हैं
```mermaid
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
```
### मोड चुनना
```mermaid
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**: `streamable-http` का उपयोग करें। यह Ghidra और उसके प्रोजेक्ट को एक लंबे समय तक चलने वाले सर्वर के रूप में जीवित रखता है और MCP होस्ट और CLI क्लाइंट दोनों के साथ काम करता है।
- **GUI मोड**: `pyghidra-mcp` Ghidra लॉन्च करता है, प्रोजेक्ट खोलता है, और अतिरिक्त टूल्स को उजागर करता है जो उसी JVM में CodeBrowser को नियंत्रित करते हैं।
- **CLI क्लाइंट**: `pyghidra-mcp-cli` एक HTTP क्लाइंट है। पहले एक `streamable-http` सर्वर शुरू करें, फिर उस चल रहे सर्वर के विरुद्ध टर्मिनल कमांड जारी करें।
- **stdio**: इसे केवल उन MCP होस्ट के लिए बनाए रखें जो HTTP एंडपॉइंट से कनेक्ट नहीं कर सकते।
<details>
<summary>विस्तृत आर्किटेक्चर और टूल सरफेस</summary>
```mermaid
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
```
</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)
- [Docker के साथ बाइनरीज़ मैप करना](#mapping-binaries-with-docker)
- [Streamable HTTP](#streamable-http)
- [Python](#python)
- [Docker](#docker)
- [Claude Code](#claude-code)
- [Codex](#codex)
- [मानक इनपुट/आउटपुट (stdio)](#standard-inputoutput-stdio)
- [Python](#python-1)
- [Docker](#docker-1)
- [OpenWeb-UI और MCPO के साथ उपयोग करना](#using-with-openweb-ui-and-mcpo)
- [`uvx` के साथ](#with-uvx)
- [Docker के साथ](#docker-2)
- [सर्वर-भेजे गए इवेंट्स (SSE)](#server-sent-events-sse)
- [Python](#python-2)
- [Docker](#docker-3)
- [प्रेरणा](#inspiration)
- [योगदान, समुदाय, और स्रोत से चलाना](#contributing-community-and-running-from-source)
- [योगदानकर्ता वर्कफ़्लो](#contributor-workflow)
## शुरुआत करना
[Python पैकेज](https://pypi.org/p/pyghidra-mcp) और [`uv`](https://docs.astral.sh/uv/guides/tools/) का उपयोग करके एक स्थायी Streamable HTTP सर्वर शुरू करें:
```bash
uvx pyghidra-mcp \
--transport streamable-http \
--project-path /absolute/path/to/ghidra-projects \
/absolute/path/to/binary
```
सर्वर तब `http://127.0.0.1:8000/mcp` पर उपलब्ध होता है। इसे चलता रहने दें और अपने MCP क्लाइंट को उस URL का उपयोग करने के लिए कॉन्फ़िगर करें; नीचे दिए गए [Claude Code](#claude-code) और [Codex](#codex) उदाहरण अपेक्षित कॉन्फ़िगरेशन दिखाते हैं।
MCP से एक लाइव Ghidra GUI लॉन्च और नियंत्रित करने के लिए, `streamable-http` के साथ `--gui` का उपयोग करें:
```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 --rm -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp
```
## एजेंट्स के लिए अनुकूलित
`pyghidra-mcp` MCP सतह को जानबूझकर संकीर्ण रखता है ताकि एजेंट क्लाइंट टूल खोज और आर्गुमेंट चयन पर कम टोकन खर्च करें।
- **संक्षिप्त टूल विवरण**: MCP टूल डॉकस्ट्रिंग्स को संक्षिप्त रखा जाता है ताकि MCPServer टूल स्कीमा छोटे रहें और मॉडल्स को भेजने में सस्ते पड़ें।
- **कॉन्टेक्स्ट अनुशासन**: टूल्स डिफ़ॉल्ट रूप से पूरे-प्रोग्राम कॉन्टेक्स्ट को डंप करने के बजाय केंद्रित संरचित डेटा लौटाते हैं। डीकंपाइलेशन, सिंबल सर्च, और क्रॉस-रेफ़रेंस परिणामों को एक बड़े रिस्पॉन्स के बजाय पुनरावृत्तीय विश्लेषण का समर्थन करने के लिए आकार दिया जाता है।
- **GUI टूल्स केवल तभी जब प्रासंगिक हों**: `open_program_in_gui`, `list_open_programs`, `set_current_program`, और `goto` जैसे GUI-केवल नियंत्रण केवल तब उजागर होते हैं जब सर्वर `--gui` के साथ शुरू किया जाता है।
- **CLI वैकल्पिक है**: यदि MCP आपका पसंदीदा इंटरफ़ेस नहीं है, तो `pyghidra-mcp-cli` HTTP के ऊपर एक सीधा कमांड-लाइन क्लाइंट प्रदान करता है जिसमें सामान्य एडिट और विश्लेषण वर्कफ़्लो के लिए समूहीकृत कमांड होते हैं।
यह डिफ़ॉल्ट सर्वर को LLM एजेंट्स, IDE इंटीग्रेशन, और ऑटोमेशन के लिए उपयोगी बनाए रखता है, बिना अनावश्यक टूल सतह या हेडलेस सेशन्स में GUI-केवल नियंत्रण उजागर किए।
## CLI क्लाइंट
अधिक इंटरैक्टिव कमांड-लाइन अनुभव के लिए, आप अलग **pyghidra-mcp-cli** पैकेज का उपयोग कर सकते हैं, जो चल रहे pyghidra-mcp सर्वर के साथ इंटरैक्ट करने के लिए एक उपयोगकर्ता-मैत्रीपूर्ण इंटरफ़ेस प्रदान करता है।
### इंस्टॉलेशन
[`uv`](https://docs.astral.sh/uv/) का उपयोग करके CLI क्लाइंट इंस्टॉल करें (अनुशंसित):
```bash
uvx pyghidra-mcp-cli
```
pip से इंस्टॉल करें:
```bash
pip install pyghidra-mcp-cli
```
### CLI के साथ त्वरित शुरुआत
1. **सर्वर शुरू करें** (एक टर्मिनल में):
```bash
pyghidra-mcp --transport streamable-http /bin/ls
```
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
```
> [!NOTE]
> CLI, प्रत्येक कमांड के लिए एक नई Ghidra प्रक्रिया शुरू करने के 10-60 सेकंड के स्टार्टअप ओवरहेड से बचने के लिए HTTP के माध्यम से pyghidra-mcp से कनेक्ट होता है। पूर्ण दस्तावेज़ीकरण के लिए [CLI README](https://github.com/clearbluejar/pyghidra-mcp/blob/main/cli/README.md) देखें।
## प्रोजेक्ट निर्माण, प्रबंधन, और मौजूदा प्रोजेक्ट खोलना
### नए प्रोजेक्ट बनाना
आप अपने वर्कफ़्लो के आधार पर कई तरीकों से नए प्रोजेक्ट बना सकते हैं:
#### स्व-निहित प्रोजेक्ट संरचना
`pyghidra-mcp` एक **स्व-निहित प्रोजेक्ट संरचना** बनाता है जहाँ प्रत्येक प्रोजेक्ट का अपना Ghidra प्रोजेक्ट और pyghidra-mcp आर्टिफ़ैक्ट होते हैं। यह पूर्ण अलगाव और आसान प्रोजेक्ट प्रबंधन सुनिश्चित करता है।
#### बुनियादी प्रोजेक्ट निर्माण
```bash
# Create a new project with default settings
pyghidra-mcp
# Creates:
$ 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
```
#### एकाधिक संबंधित प्रोजेक्ट बनाना
```bash
# Create separate projects for different analysis focuses
mkdir ~/reverse_engineering_workspace
# Project for suspicious binaries
pyghidra-mcp --project-path ~/reverse_engineering_workspace/suspicious_binaries --project-name suspicious_analysis
# Project for packed malware
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 मोड
GUI मोड का उपयोग तब करें जब आप चाहते हैं कि MCP क्रियाएँ उन्हीं लाइव प्रोग्राम ऑब्जेक्ट्स पर कार्य करें जिन्हें Ghidra प्रदर्शित कर रहा है।
- `--gui` के लिए `--transport streamable-http` (या उपनाम के रूप में `--transport http`) आवश्यक है
- `--project-path` एक प्रोजेक्ट निर्देशिका और `--project-name`, या एक मौजूदा `.gpr` फ़ाइल हो सकता है। अनुपस्थित प्रोजेक्ट्स स्वचालित रूप से बनाए जाते हैं।
- Ghidra को `pyghidra-mcp` द्वारा लॉन्च किया जाता है, जो GUI और MCP लेनदेन को एक ही JVM में रखता है
- GUI-केवल टूल्स केवल `--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
# For Linux / Mac
export GHIDRA_INSTALL_DIR="/path/to/ghidra/"
# For Windows PowerShell
[System.Environment]:https://raw.githubusercontent.com/clearbluejar/pyghidra-mcp/main/: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` के साथ कोड फ़ॉर्मेट करें।
---
[Read more](https://github.com/clearbluejar/pyghidra-mcp)