mcpField
B
BinAssist-MCP

BinAssist-MCP

Local
github.com/jtang613Security50Updated 3w ago

About BinAssist-MCP

BinAssistMCP is a Binary Ninja plugin that exposes its reverse engineering capabilities to LLM clients such as Claude through MCP. It targets reverse engineers and vulnerability researchers. The README notes the project is planned for archival because Binary Ninja now bundles a native MCP server.

Key features

  1. 01Consolidated wrapper of 45 analysis tools
  2. 02SSE and Streamable HTTP transports
  3. 03Eight browsable MCP resources
  4. 04Seven guided analysis prompts
  5. 05Concurrent analysis of multiple binaries

Use cases

  1. 01Using LLMs to assist function analysis and documentation
  2. 02Tracing network protocol data flows and reconstructing structures
  3. 03Auditing binaries for vulnerabilities

MCP support

BinAssistMCP is an MCP server that exposes Binary Ninja functions, symbols, cross-references and strings to MCP clients as tools, resources and prompts.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

BinAssistMCP

Important

Planned archival: BinAssistMCP is planned for archival as Binary Ninja introduces a bundled native MCP server. Native support removes the need to maintain a separate MCP integration and keeps it aligned with Binary Ninja itself. Please use Binary Ninja's native MCP server once it is available in your installed version. This repository will remain available for reference.

Comprehensive Model Context Protocol (MCP) server for Binary Ninja with AI-powered reverse engineering capabilities

Summary

BinAssistMCP is a powerful bridge between Binary Ninja and Large Language Models (LLMs) like Claude, providing comprehensive reverse engineering tools through the Model Context Protocol (MCP). It enables AI-assisted binary analysis by exposing Binary Ninja's advanced capabilities through Server-Sent Events (SSE) and Streamable HTTP transports.

Key Features
  • MCP 2025-11-25 Compliant: Full support for tool annotations, resources, and prompts
  • Dual Transport Support: SSE (Server-Sent Events) and Streamable HTTP transports
  • 45 Consolidated Tools: Streamlined Binary Ninja API wrapper with unified tool design
  • 8 MCP Resources: Browsable, cacheable binary metadata
  • 7 Guided Prompts: Pre-built workflows for common reverse engineering tasks
  • Multi-Binary Sessions: Concurrent analysis of multiple binaries with intelligent context management
  • Context-Rich Code Output: Function signatures and Binary Ninja comments are embedded in code results
  • Analysis-Safe Queries: Code retrieval uses already-loaded IL and never forces global reanalysis
  • Session-Independent Discovery: Direct tool calls discover open Binary Ninja views without requiring a prior listing call
  • Nonblocking Binary Opens: Large binaries and .bndb databases open asynchronously with pollable operation status
  • Thread-Safe: RLock-based synchronization for concurrent access
  • Auto-Integration: Seamless Binary Ninja plugin with automatic startup capabilities
Use Cases
  • AI-Assisted Reverse Engineering: Leverage LLMs for intelligent code analysis and documentation
  • Protocol Analysis: Trace network data flows and reconstruct protocol structures
  • Vulnerability Research: Systematic security audits with guided workflows
  • Automated Binary Analysis: Script complex analysis workflows with natural language
  • Code Understanding: Generate comprehensive documentation and explanations

Architecture

src/binassist_mcp/
├── server.py        # FastMCP server - SSE/Streamable HTTP transport, tool registration
├── tools.py         # Binary Ninja API wrapper - 45 MCP tools
├── plugin.py        # Binary Ninja plugin integration
├── context.py       # Thread-safe multi-binary session management
├── config.py        # Pydantic configuration with Binary Ninja settings
├── prompts.py       # 7 guided workflow prompts
├── resources.py     # 8 MCP resource definitions
├── cache.py         # Cache primitives (not currently connected to MCP tools)
├── tasks.py         # Task lifecycle support (tool dispatch is not yet implemented)
├── logging.py       # Binary Ninja logging integration
└── utils.py         # Utility functions

__init__.py          # Plugin entry point (root level)

Tools (45 Total)

BinAssistMCP provides 45 tools organized into functional categories. Tools include MCP annotations (readOnlyHint, idempotentHint) to help clients make informed decisions.

Binary Management
ToolDescription
list_binariesSynchronize with Binary Ninja and list all loaded binary files
get_binary_infoCheck analysis status and metadata
get_binary_statusPoll a queued open by operation ID, path, or name and report analysis progress
open_binaryQueue a nonblocking binary or .bndb open; raw binaries require a destination bndb_path
update_analysis_and_waitForce analysis update and wait for completion
export_programExport the patched binary or Binary Ninja database to disk

By default, open_binary validates its paths, schedules the Binary Ninja open, and immediately returns an operation_id with status="opening". Poll get_binary_status(operation_id) until it reports ready or failed. When ready, its name field is the final context name to pass to analysis tools. Concurrent requests for the same path reuse the active operation. Set wait_for_analysis=true only when legacy blocking behavior is explicitly required.

Code Analysis (Consolidated)
ToolDescription
get_codeRead analysis-safe code with signatures and comments; supports decompile, hlil, mlil, llil, disasm, and pseudo_c
get_function_low_level_ilGet Low-Level IL for a function
get_function_signatureGenerate the native masked byte signature for a function
analyze_functionComprehensive function analysis with control flow and complexity metrics
get_basic_blocksGet basic block information for control flow analysis
get_function_stack_layoutGet stack frame layout with variable offsets
get_code behavior

get_code is a read-only query. It does not clear analysis_skipped, request IL generation, or run global analysis. For format="decompile", it returns already-loaded HLIL when available, then falls back through MLIL and LLIL to instruction-aligned disassembly. Use update_analysis_and_wait explicitly when fresh analysis is desired.

The code string starts with the current function signature and includes function-level and instruction-level Binary Ninja comments. The response contains:

  • function and address: resolved function identity
  • format: requested format
  • actual_format: representation actually returned, or null when an explicitly requested IL is unavailable
  • fallback_used: whether decompile used a lower-level representation
  • code: rendered code, signature, and comments
  • note: present when a fallback explains why and what was returned
Cross-References (Consolidated)
ToolDescription
xrefsUnified cross-references with direction set to to, from, or both; optionally includes call relationships
Comments (Consolidated)
ToolDescription
commentsUnified comment management - actions: get, set, list, remove, set_function
Variables (Consolidated)
ToolDescription
variablesUnified variable management - actions: list, create, rename, set_type; rename supports local/global via scope
Types (Consolidated)
ToolDescription
typesUnified type management - actions: create, create_enum, create_typedef, create_class, add_member, info, list
get_classesList all classes and structures
Function Discovery
ToolDescription
get_functionsList all functions with metadata
search_functions_by_nameFind functions by name pattern
get_functions_advancedAdvanced filtering by size, complexity, parameters
search_functions_advancedMulti-target search (name, comments, calls, variables)
get_function_statisticsComprehensive statistics for all functions
Symbol Management
ToolDescription
rename_symbolRename functions and data variables
batch_renameRename multiple symbols in one operation
get_namespacesList namespaces and symbol organization
Binary Information
ToolDescription
get_importsImport table grouped by module
get_exportsExport table with symbol information
get_stringsPaginated string extraction
search_stringsSearch strings by pattern
get_segmentsMemory segment layout
get_sectionsBinary section information
get_entry_pointsList all binary entry points
Data Analysis
ToolDescription
create_data_varDefine data variables at addresses
get_data_varsList all defined data variables
get_data_atRead and analyze raw data
search_bytesSearch for byte patterns in binary
Patching
ToolDescription
patch_bytesPatch raw bytes in the binary at an address
assemble_codeAssemble instruction text at an address and optionally patch it
Navigation & Bookmarks
ToolDescription
get_current_addressGet current cursor position with context
get_current_functionIdentify function at current address
bookmarksUnified bookmark management - actions: list, set, remove
Task Management (Experimental)
ToolDescription
start_taskCreate a placeholder background task record; tool_name dispatch is not implemented yet
get_task_statusCheck status of async operations
list_tasksList all pending/running tasks
cancel_taskCancel a running task

These APIs currently exercise task lifecycle management only. They do not execute the named MCP tool in the background.


MCP Resources (8 Total)

Resources provide browsable, cacheable data that clients can access without tool calls.

URI PatternDescription
binassist://{filename}/triage_summaryComplete binary overview
binassist://{filename}/functionsAll functions with metadata
binassist://{filename}/importsImport table
binassist://{filename}/exportsExport table
binassist://{filename}/stringsString table
binja://{filename}/infoBinary metadata (arch, platform, entry point)
binja://{filename}/segmentsMemory segments with permissions
binja://{filename}/sectionsBinary sections

MCP Prompts (7 Total)

Pre-built prompts guide LLMs through structured analysis workflows.

PromptArgumentsDescription
analyze_functionfunction_name, filenameComprehensive function analysis workflow
identify_vulnerabilityfunction_name, filenameSecurity audit checklist (memory safety, input validation, crypto)
document_functionfunction_name, filenameGenerate Doxygen-style documentation
trace_data_flowaddress, filenameTrack data dependencies and taint propagation
compare_functionsfunc1, func2, filenameDiff two functions for similarity analysis
reverse_engineer_structaddress, filenameRecover structure definitions from usage patterns
trace_network_datafilenameTrace POSIX/Winsock send/recv for protocol analysis
Example: Network Protocol Analysis

The trace_network_data prompt guides analysis of network communication:

  1. Identify Network Functions: Finds POSIX (send/recv/sendto/recvfrom) and Winsock (WSASend/WSARecv) calls
  2. Trace Call Stacks: Maps application handlers down to network I/O
  3. Analyze Buffers: Identifies protocol structures (headers, length fields, TLV encoding)
  4. Reconstruct Protocols: Generates C struct definitions for message formats
  5. Security Assessment: Checks for buffer overflows, integer issues, information disclosure

Installation

Prerequisites
  • Binary Ninja: Version 5000 or higher
  • Python: 3.10+ (typically bundled with Binary Ninja and required by the pinned MCP SDK)
  • Platform: Windows, macOS, or Linux

NOTE: Windows users should start with: BinAssistMCP on Windows

Option 1: Binary Ninja Plugin Manager (Recommended)
  1. Open Binary Ninja
  2. Navigate to Tools → Manage Plugins
  3. Search for "BinAssistMCP"
  4. Click Install
  5. Restart Binary Ninja
Option 2: Manual Installation
# Clone the repository
git clone https://github.com/symgraph/BinAssistMCP.git
cd BinAssistMCP

# Install dependencies
pip install -r requirements.txt

Copy to your Binary Ninja plugins directory:

PlatformPath
Windows%APPDATA%\Binary Ninja\plugins\
macOS~/Library/Application Support/Binary Ninja/plugins/
Linux~/.binaryninja/plugins/

Configuration

Binary Ninja Settings

Open Edit → Preferences → binassistmcp:

SettingDefaultDescription
server.hostlocalhostServer bind address
server.port8000Server port
server.transportstreamablehttpTransport: streamablehttp or sse
binary.max_binaries10Maximum concurrent binaries
plugin.auto_startuptrueAuto-start server on file load
Environment Variables
export BINASSISTMCP_SERVER__HOST=localhost
export BINASSISTMCP_SERVER__PORT=8000
export BINASSISTMCP_SERVER__TRANSPORT=streamablehttp
export BINASSISTMCP_BINARY__MAX_BINARIES=10

Usage

Starting the Server

Via Binary Ninja Menu:

  1. Tools → BinAssistMCP → Start Server
  2. Check log panel for: BinAssistMCP server started on http://localhost:8000

Auto-Startup: Server starts automatically when Binary Ninja loads a file (configurable).

Connecting MCP Clients

Streamable HTTP (Default):

http://localhost:8000/mcp

Server-Sent Events:

http://localhost:8000/sse
Claude Desktop Configuration

Add to your Claude Desktop MCP configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "binassist": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

Integration Examples

Most binary-specific tools require the context name in filename. list_binaries returns these names, but it is not an initialization requirement: direct filename-based calls refresh the context from Binary Ninja automatically when necessary.

Basic Function Analysis
User: "Analyze the main function and explain what it does"

Claude uses:
1. list_binaries() - obtain the context filename
2. get_functions(filename='sample.bndb') - find main
3. get_code(filename='sample.bndb', function_name_or_address='main', format='decompile')
4. xrefs(filename='sample.bndb', address_or_name='main', direction='from')
5. analyze_function(filename='sample.bndb', function_name_or_address='main')
Vulnerability Research
User: "Find buffer overflow vulnerabilities in input handling functions"

Claude uses:
1. search_functions_advanced(filename='sample.bndb', search_term='strcpy', search_in='calls')
2. get_code(filename='sample.bndb', function_name_or_address='handler', format='decompile')
3. variables(filename='sample.bndb', action='list', function_name_or_address='handler')
4. comments(filename='sample.bndb', action='set', address='0x401000', text='Unchecked copy')
Protocol Reverse Engineering
User: "Analyze the network protocol used by this binary"

Claude uses the trace_network_data prompt:
1. Identifies send/recv call sites
2. Traces data flow from handlers to network I/O
3. Reconstructs message structures
4. Checks for network vulnerabilities

Troubleshooting

Server Issues
ProblemSolution
Server won't startCheck port 8000 availability, verify dependencies
Connection refusedEnsure server is running, check firewall settings
A requested IL is unavailableRun update_analysis_and_wait, then retry get_code
Binary name is rejectedCall list_binaries and use the returned context name
Performance
  • Memory usage: Reduce max_binaries setting
  • Code retrieval: get_code returns loaded analysis immediately and falls back rather than triggering analysis
Logs

Check Binary Ninja's Log panel for detailed error messages.


Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Follow existing code patterns (Pydantic models, type hints, docstrings)
  4. Test with multiple binary types
  5. Submit a pull request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.