
Headless Binary Ninja MCP server — AI एजेंटों को 180 उपकरणों के माध्यम से गहन रिवर्स-इंजीनियरिंग क्षमताएँ प्रदान कर रहा है।
एक हेडलेस Binary Ninja सर्वर जो MCP (मॉडल कॉन्टेक्स्ट प्रोटोकॉल) बोलता है, जो AI एजेंटों को डीप रिवर्स-इंजीनियरिंग वर्कफ़्लो — डिसअसेंबली, IL, पैचिंग, टाइप्स, xrefs, और बहुत कुछ — तक पूर्ण पहुँच देता है, बिना GUI के।
उसी Docker कंटेनर में चलाने के लिए डिज़ाइन किया गया है जहाँ एजेंट रनटाइम है। कोई साइडकार नहीं, कोई अतिरिक्त सेवा नहीं।
यह पूरा प्रोजेक्ट---कोड, परीक्षण और दस्तावेज़ीकरण---100% वाइब कोडेड है।
मौजूदा Binary Ninja MCP सर्वर या तो GUI-बाउंड हैं या सीमित टूल सतह प्रकट करते हैं। यह सर्वर केवल हेडलेस है और सैंडबॉक्स्ड VM/कंटेनर वातावरण में एजेंट-संचालित वर्कफ़्लो के लिए डिज़ाइन किया गया है: एजेंट को विश्लेषण प्रणाली पर पूर्ण नियंत्रण मिलता है, रिवर्स इंजीनियरिंग के बड़े हिस्सों को स्वचालित करता है, जबकि आप संवादात्मक रूप से प्रक्रिया पर चर्चा और मार्गदर्शन करते हैं।
लक्ष्य एक ऐसा इंटरफ़ेस है जहाँ एजेंट समय के साथ एक विश्लेषण का निरीक्षण, परिष्कृत और विस्तार कर सकते हैं — टाइप्स, प्रतीकों और मेटाडेटा को अपडेट करना, विश्लेषण डेटाबेस को वृद्धिशील रूप से सुधारना, पैच लागू करना और undo/redo के साथ सुरक्षित रूप से पुनरावृत्त करना, और जब किसी वर्कफ़्लो को विशिष्ट कुछ चाहिए तो कस्टम स्क्रिप्ट चलाना।
binja.eval और binja.call के माध्यम से जो कुछ भी टूल कैटलॉग कवर नहीं करता।3.11+binaryninja Python मॉड्यूल आपके रनटाइम में आयात करने योग्य हो (वास्तविक विश्लेषण के लिए)git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .
या क्लोन किए बिना सीधे रेपो रूट से इंस्टॉल करें:
pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git
Stdio ट्रांसपोर्ट (डिफ़ॉल्ट):
python3 binary_ninja_headless_mcp.py
TCP ट्रांसपोर्ट:
python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765
फ़ेक बैकएंड मोड (Binary Ninja की आवश्यकता नहीं):
python3 binary_ninja_headless_mcp.py --fake-backend
यह सर्वर stdio (डिफ़ॉल्ट) या tcp पर मानक MCP बोलता है, इसलिए कोई भी MCP-सक्षम एजेंट होस्ट इसका उपयोग कर सकता है।
claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py
या इसे अपने प्रोजेक्ट के .mcp.json में जोड़ें:
{
"mcpServers": {
"binary_ninja_headless_mcp": {
"command": "python3",
"args": ["binary_ninja_headless_mcp.py"],
"cwd": "/path/to/binary-ninja-headless-mcp"
}
}
}
codex mcp add binary_ninja_headless_mcp -- python3 binary_ninja_headless_mcp.py
binary_ninja_headless_mcp नाम का एक सर्वर पंजीकृत करें।python3 का उपयोग करें जिसमें args ["binary_ninja_headless_mcp.py"] हों जब cwd रेपो रूट हो, या args में पूर्ण स्क्रिप्ट पथ का उपयोग करें।cwd को रेपो पथ पर सेट करें यदि आप चाहते हैं कि सापेक्ष पथ जैसे samples/ls सही ढंग से हल हों।--fake-backend जोड़ें।health.ping पर कॉल करके कनेक्टिविटी सत्यापित करें, फिर session.open।अनुशंसित तैनाती मॉडल: एजेंट प्रक्रिया और इस MCP सर्वर को एक ही कंटेनर इमेज में चलाएँ।
उदाहरण आधारभूत:
FROM python:3.11-slim
WORKDIR /app
COPY . /app
RUN python -m pip install --upgrade pip && pip install ruff pytest
CMD ["python3", "binary_ninja_headless_mcp.py"]
यदि आपको कंटेनर में वास्तविक Binary Ninja विश्लेषण की आवश्यकता है, तो इसी इमेज में अपना Binary Ninja रनटाइम + लाइसेंस सेटअप जोड़ें और इस MCP सर्वर के साथ कॉन्फ़िगर किए गए एजेंट को शुरू करें।
initializepingtools/listtools/callshutdowntools/list व्यवहार:
offset या limit प्रदान किया गया है, तो पेजिनेटेड आउटपुट का उपयोग करता है (पेजेड मोड में डिफ़ॉल्ट offset=0, limit=50)।prefix (उदाहरण binary.)query (टूल नाम/विवरण के विरुद्ध सबस्ट्रिंग मिलान)offset, limit, total, has_more।has_more=true), तो next_offset और एक notice संकेत शामिल करता है।टूल कॉल प्रतिक्रिया व्यवहार:
structuredContent विहित पूर्ण पेलोड है।content[0].text एक संक्षिप्त सारांश स्ट्रिंग है (पूर्ण JSON डुप्लिकेशन नहीं)।यह रिपॉजिटरी अच्छी तरह से परीक्षित है और इसमें लागू गुणवत्ता द्वार हैं।
pytest --collect-only -q चलाएँ।ruff format --check .ruff check .pytestBINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 का उपयोग करता है ताकि चेक Binary Ninja इंस्टॉलेशन की आवश्यकता के बिना चलें।read_only=true)।binary.basic_blocks_at और function.basic_blocks पेजिनेटेड (offset/limit) हैं।memory.read में एक कठिन प्रतिक्रिया सीमा है: length <= 65536।stdio/tcp) डिफ़ॉल्ट रूप से अप्रमाणित है।binja.eval के माध्यम से मनमानी स्क्रिप्टिंग और binja.call के माध्यम से व्यापक API पहुँच को उजागर करता है।ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q
samples/ls के विरुद्ध व्यापक टूल सतह का अभ्यास करने के लिए अंतर्निहित MCP फ़ीचर फ़ज़र का उपयोग करें।
वास्तविक Binary Ninja बैकएंड:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337
फ़ेक बैकएंड स्मोक रन:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20
JSON कवरेज रिपोर्ट लिखें:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json
उपयोगी फ़्लैग:
--min-success-tools N: गैर-शून्य से बाहर निकलता है यदि N से कम उपकरण सफल हुए।--verbose: फ़ज़ करते समय प्रत्येक टूल कॉल प्रिंट करें।--update-analysis: update_analysis=true के साथ सीड सत्र खोलें।सर्वर वर्तमान में 36 फीचर समूहों में 181 उपकरण प्रदर्शित करता है।
analysis.status: विश्लेषण स्थिति प्राप्त करें।analysis.progress: विश्लेषण प्रगति स्नैपशॉट प्राप्त करें।analysis.update: अतुल्यकालिक विश्लेषण अद्यतन ट्रिगर करें।analysis.update_and_wait: विश्लेषण अद्यतन चलाएँ और पूर्णता की प्रतीक्षा करें।analysis.abort: विश्लेषण रद्द करें।analysis.set_hold: विश्लेषण कतार को होल्ड/रीलीज़ करें।annotation.rename_function: किसी फ़ंक्शन का नाम बदलें।annotation.rename_symbol: पते पर प्रतीक का नाम बदलें।annotation.undefine_symbol: पते पर उपयोगकर्ता प्रतीक को अपरिभाषित करें।annotation.define_symbol: पते पर प्रतीक परिभाषित करें।annotation.rename_data_var: डेटा चर का नाम बदलें।annotation.define_data_var: डेटा चर परिभाषित करें।annotation.undefine_data_var: डेटा चर को अपरिभाषित करें।annotation.set_comment: पते पर टिप्पणी सेट करें।annotation.get_comment: पते पर टिप्पणी प्राप्त करें।annotation.add_tag: पते पर उपयोगकर्ता डेटा टैग जोड़ें।annotation.get_tags: पते पर टैग प्राप्त करें।arch.info: आर्किटेक्चर और प्लेटफ़ॉर्म मेटाडेटा प्राप्त करें।arch.disasm_bytes: चयनित आर्किटेक्चर के साथ बाइट्स डिसअसेंबल करें।arch.assemble: चयनित आर्किटेक्चर के साथ निर्देश टेक्स्ट असेंबल करें।baseaddr.detect: आधार-पता पहचान चलाएँ।baseaddr.reasons: आधार-पता पहचान कारण प्राप्त करें।baseaddr.abort: आधार-पता पहचान रद्द करें।binary.summary: बाइनरी/सत्र सारांश प्राप्त करें।binary.save: वर्तमान बाइनरी दृश्य को फ़ाइल पथ पर सहेजें।binary.functions: पेजिनेशन के साथ फ़ंक्शन सूचीबद्ध करें।binary.strings: पेजिनेशन के साथ खोजे गए स्ट्रिंग्स सूचीबद्ध करें।binary.search_text: सत्र में कच्चा टेक्स्ट/बाइट्स खोजें।binary.sections: पेजिनेशन के साथ सेक्शन सूचीबद्ध करें।binary.segments: पेजिनेशन के साथ सेगमेंट सूचीबद्ध करें।binary.symbols: पेजिनेशन के साथ प्रतीक सूचीबद्ध करें।binary.data_vars: पेजिनेशन के साथ डेटा चर सूचीबद्ध करें।binary.get_function_at: पते से फ़ंक्शन खोजें।binary.get_function_disassembly_at: पते वाले फ़ंक्शन के लिए पूर्ण डिसअसेंबली प्राप्त करें।binary.get_function_il_at: पते वाले फ़ंक्शन के लिए पूर्ण IL प्राप्त करें।binja.info: Binary Ninja संस्करण/इंस्टॉल जानकारी लौटाएँ।binja.call: सामान्य API ब्रिज: bn.* या bv.* लक्ष्य पथ पर कॉल करें।binja.eval: bn, sessions, और वैकल्पिक bv के साथ Python कोड का मूल्यांकन करें।data.typed_at: पते पर टाइप किया गया डेटा चर प्राप्त करें।database.create_bndb: सत्र से .bndb बनाएँ।database.save_auto_snapshot: ऑटो स्नैपशॉट सहेजें।database.info: सत्र के लिए डेटाबेस स्थिति प्राप्त करें।database.snapshots: डेटाबेस स्नैपशॉट सूचीबद्ध करें।database.read_global: डेटाबेस वैश्विक स्ट्रिंग कुंजी पढ़ें।database.write_global: डेटाबेस वैश्विक स्ट्रिंग कुंजी लिखें।debug.parsers: इस दृश्य के लिए मान्य डीबग जानकारी पार्सर सूचीबद्ध करें।debug.parse_and_apply: डीबग जानकारी पार्स करें और इसे दृश्य पर लागू करें।disasm.linear: रैखिक डिसअसेंबली पंक्तियाँ प्राप्त करें।disasm.function: पते वाले फ़ंक्शन के लिए पूर्ण डिसअसेंबली प्राप्त करें।disasm.range: पता-सीमा डिसअसेंबली पंक्तियाँ।external.library_add: बाहरी पुस्तकालय जोड़ें।external.library_list: बाहरी पुस्तकालय सूचीबद्ध करें।external.library_remove: बाहरी पुस्तकालय निकालें।external.location_add: बाहरी स्थान मानचित्रण जोड़ें।external.location_get: बाहरी स्थान मानचित्रण प्राप्त करें।external.location_remove: बाहरी स्थान मानचित्रण निकालें।function.basic_blocks: पेजिनेशन के साथ किसी फ़ंक्शन में मूल ब्लॉक सूचीबद्ध करें।function.callers: किसी फ़ंक्शन के कॉलर।function.callees: किसी फ़ंक्शन के कैलीज़।function.variables: फ़ंक्शन चर सूचीबद्ध करें।function.var_refs: MLIL/HLIL में चर संदर्भ सूचीबद्ध करें।function.var_refs_from: किसी पते से उत्पन्न चर संदर्भ सूचीबद्ध करें।function.ssa_var_def_use: SSA चर परिभाषा और उपयोग प्राप्त करें।function.ssa_memory_def_use: मेमोरी संस्करण द्वारा SSA मेमोरी परिभाषा और उपयोग प्राप्त करें।function.metadata_store: कुंजी द्वारा फ़ंक्शन मेटाडेटा संग्रहीत करें।function.metadata_query: कुंजी द्वारा फ़ंक्शन मेटाडेटा क्वेरी करें।function.metadata_remove: कुंजी द्वारा फ़ंक्शन मेटाडेटा निकालें।health.ping: स्वास्थ्य जाँच।il.function: IL फ़ंक्शन सूची।il.instruction_by_addr: स्रोत पते द्वारा IL निर्देश प्राप्त करें।il.address_to_index: पते को IL सूचकांक/सूचकांकों में मैप करें।il.index_to_address: IL सूचकांक को स्रोत पते पर मैप करें।il.rewrite.capabilities: एक फ़ंक्शन और IL स्तर के लिए IL पुनर्लेखन समर्थन सूचीबद्ध करें।il.rewrite.noop_replace: नो-ऑप IL अभिव्यक्ति प्रतिस्थापन करें।il.rewrite.translate_identity: पहचान मैपिंग कॉलबैक के साथ IL अनुवाद करें।loader.rebase: BinaryView को रीबेस करें।loader.load_settings_types: लोडर सेटिंग्स प्रकार नाम सूचीबद्ध करें।loader.load_settings_get: लोडर सेटिंग्स मान प्राप्त करें।loader.load_settings_set: एक लोडर सेटिंग मान सेट करें।memory.read: दृश्य से बाइट्स पढ़ें (length <= 65536)।memory.write: दृश्य में बाइट्स (हेक्स) लिखें।memory.insert: दृश्य में बाइट्स (हेक्स) सम्मिलित करें।memory.remove: दृश्य से बाइट्स निकालें।memory.reader_read: BinaryReader के माध्यम से पूर्णांक मान पढ़ें।memory.writer_write: BinaryWriter के माध्यम से पूर्णांक मान लिखें।mcp.response_format: टूल परिणाम फ़ील्ड समझाएँ (structuredContent पूर्ण पेलोड, content[0].text सारांश)।metadata.store: कुंजी द्वारा मेटाडेटा संग्रहीत करें।metadata.query: कुंजी द्वारा मेटाडेटा क्वेरी करें।metadata.remove: कुंजी द्वारा मेटाडेटा निकालें।patch.assemble: पते पर निर्देश बाइट्स असेंबल और पैच करें।patch.status: पते पर पैच उपलब्धता का निरीक्षण करें।patch.convert_to_nop: निर्देश को NOP में पैच करें जब समर्थित हो।patch.always_branch: सशर्त शाखा को हमेशा शाखा में पैच करें जब समर्थित हो।patch.never_branch: सशर्त शाखा को कभी शाखा न करें में पैच करें जब समर्थित हो।patch.invert_branch: सशर्त शाखा को उलट कर पैच करें जब समर्थित हो।patch.skip_and_return_value: निर्देश को छोड़ने और मान लौटाने के लिए पैच करें जब समर्थित हो।plugin.valid_commands: संदर्भ-मान्य प्लगइन कमांड सूचीबद्ध करें।plugin.execute: एक संदर्भ-मान्य प्लगइन कमांड निष्पादित करें।plugin_repo.status: प्लगइन रिपॉजिटरी और प्लगइन स्थितियाँ सूचीबद्ध करें।plugin_repo.check_updates: प्लगइन रिपॉजिटरी अद्यतन जाँचें।plugin_repo.plugin_action: रिपॉजिटरी प्लगइन पर इंस्टॉल/अनइंस्टॉल/सक्षम/अक्षम कार्रवाई चलाएँ।project.create: प्रोजेक्ट बनाएँ।project.open: प्रोजेक्ट खोलें।project.close: ट्रैक किए गए प्रोजेक्ट को बंद करें।project.list: प्रोजेक्ट फ़ोल्डर/फ़ाइलें सूचीबद्ध करें।project.create_folder: प्रोजेक्ट फ़ोल्डर बनाएँ।project.create_file: base64 डेटा से प्रोजेक्ट फ़ाइल बनाएँ।project.metadata_store: प्रोजेक्ट मेटाडेटा संग्रहीत करें।project.metadata_query: प्रोजेक्ट मेटाडेटा क्वेरी करें।project.metadata_remove: प्रोजेक्ट मेटाडेटा निकालें।search.data: कच्चे बाइट पैटर्न (हेक्स स्ट्रिंग) खोजें।search.next_text: अगला टेक्स्ट मिलान खोजें।search.all_text: सीमा में सभी टेक्स्ट मिलान खोजें (रेगेक्स वैकल्पिक)।search.next_data: अगला डेटा/बाइट-पैटर्न मिलान खोजें।search.all_data: सीमा में सभी डेटा/बाइट-पैटर्न मिलान खोजें।search.next_constant: अगला स्थिरांक घटना खोजें।search.all_constant: सीमा में सभी स्थिरांक घटनाएँ खोजें।section.add_user: उपयोगकर्ता अनुभाग जोड़ें।section.remove_user: उपयोगकर्ता अनुभाग निकालें।segment.add_user: उपयोगकर्ता खंड जोड़ें।segment.remove_user: उपयोगकर्ता खंड निकालें।session.open: एक बाइनरी खोलें और एक सत्र बनाएँ।session.open_bytes: base64-एन्कोडेड बाइट्स से एक बाइनरी सत्र खोलें।session.open_existing: मौजूदा सत्र की फ़ाइल से दूसरा सत्र खोलें।session.close: एक खुले सत्र को बंद करें।session.list: खुले सत्र सूचीबद्ध करें।session.mode: सत्र सुरक्षा/निर्धारण मोड प्राप्त करें।session.set_mode: सत्र सुरक्षा/निर्धारण मोड अद्यतन करें।task.analysis_update: अतुल्यकालिक विश्लेषण अद्यतन कार्य शुरू करें।task.search_text: अतुल्यकालिक खोज कार्य शुरू करें।task.status: कार्य स्थिति प्राप्त करें।task.result: कार्य परिणाम प्राप्त करें।task.cancel: कार्य रद्द करें (सर्वोत्तम-प्रयास)।transform.inspect: ट्रांसफ़ॉर्म निष्कर्षण पाइपलाइन का निरीक्षण/प्रक्रिया करें।type.parse_string: एकल टाइप स्ट्रिंग पार्स करें।type.parse_declarations: टाइप्स/चर/फ़ंक्शन के लिए C घोषणाएँ पार्स करें।type.define_user: टाइप स्रोत से उपयोगकर्ता प्रकार परिभाषित करें।type.rename: एक प्रकार का नाम बदलें।type.undefine_user: एक उपयोगकर्ता प्रकार अपरिभाषित करें।type.import_library_type: टाइप लाइब्रेरी से प्रकार आयात करें।type.import_library_object: टाइप लाइब्रेरी से ऑब्जेक्ट प्रकार आयात करें।type.export_to_library: प्रकार को टाइप लाइब्रेरी में निर्यात करें।type_archive.create: एक प्रकार संग्रह बनाएँ और वैकल्पिक रूप से संलग्न करें।type_archive.open: एक प्रकार संग्रह खोलें और वैकल्पिक रूप से संलग्न करें।type_archive.list: संलग्न प्रकार संग्रह सूचीबद्ध करें।type_archive.get: एक ट्रैक किया गया प्रकार संग्रह प्राप्त करें।type_archive.pull: प्रकार संग्रह से प्रकार खींचें।type_archive.push: प्रकार संग्रह में प्रकार धकेलें।type_archive.references: एक प्रकार के लिए आर्काइव आने वाले/जाने वाले संदर्भ क्वेरी करें।type_library.create: एक प्रकार लाइब्रेरी बनाएँ और वैकल्पिक रूप से संलग्न करें।type_library.load: एक प्रकार लाइब्रेरी लोड करें और वैकल्पिक रूप से संलग्न करें।type_library.list: दृश्य से संलग्न प्रकार लाइब्रेरी सूचीबद्ध करें।type_library.get: एक ट्रैक की गई प्रकार लाइब्रेरी प्राप्त करें।uidf.parse_possible_value: उपयोगकर्ता-सूचित संभावित मान सेट स्ट्रिंग पार्स करें।uidf.set_user_var_value: फ़ंक्शन उपयोगकर्ता चर मान सेट करें।uidf.clear_user_var_value: फ़ंक्शन उपयोगकर्ता चर मान साफ़ करें।uidf.list_user_var_values: एक फ़ंक्शन के लिए सभी उपयोगकर्ता चर मान सूचीबद्ध करें।undo.begin: रद्दीकरण लेन-देन शुरू करें।undo.commit: रद्दीकरण लेन-देन प्रतिबद्ध करें।undo.revert: रद्दीकरण लेन-देन वापस लें।undo.undo: रद्दीकरण करें।undo.redo: पुनः करें।value.reg: किसी पते पर/बाद में रजिस्टर मान प्राप्त करें।value.stack: किसी पते पर/बाद में स्टैक सामग्री प्राप्त करें।value.possible: किसी पते पर IL संभावित मान सेट प्राप्त करें।value.flags_at: किसी पते पर उठाए गए IL फ़्लैग पढ़ने/लिखने की स्थिति प्राप्त करें।workflow.list: पंजीकृत वर्कफ़्लो सूचीबद्ध करें।workflow.describe: वर्कफ़्लो टोपोलॉजी और सेटिंग्स का वर्णन करें।workflow.clone: वर्कफ़्लो क्लोन करें।workflow.insert: एक गतिविधि से पहले गतिविधियाँ सम्मिलित करें।workflow.insert_after: एक गतिविधि के बाद गतिविधियाँ सम्मिलित करें।workflow.remove: वर्कफ़्लो गतिविधि निकालें।workflow.graph: वर्कफ़्लो ग्राफ़ सारांशित करें।workflow.machine.status: वर्कफ़्लो मशीन स्थिति प्राप्त करें।workflow.machine.control: वर्कफ़्लो मशीन रनटाइम नियंत्रित करें।xref.code_refs_to: एक पते के कोड संदर्भ।xref.code_refs_from: एक पते से कोड संदर्भ।xref.data_refs_to: एक पते के डेटा संदर्भ।xref.data_refs_from: एक पते से डेटा संदर्भ।अधिक जानकारी के लिए, Tim Blazytko (@mr_phrazer) से संपर्क करें।
binary.functions_at: पते पर फ़ंक्शन सूचीबद्ध करें।binary.basic_blocks_at: पेजिनेशन के साथ पते पर मूल ब्लॉक सूचीबद्ध करें।