Secure communication protocol for Binary Ninja and MCP servers

BinjaLattice
BinjaLattice is a secure communication protocol for Binary Ninja that enables interaction with external Model Context Protocol (MCP) servers and tools. It provides a structured way to acquire information from Binary Ninja and the ability to modify an active Binary Ninja database over HTTP with a REST API.
Demo
Features
- Secure Authentication: Token-based authentication system
- Encrypted Communication: Optional SSL/TLS encryption
- Binary Analysis Context: Export pseudocode, disassembly, variable names, binary information etc.
- Binary Modification: Update function names, add comments, rename variables
- Token Management: Automatic expiration and renewal of authentication tokens
Installation
Windows (Automated)
Run the PowerShell installer for a one-shot setup:
.\scripts\install_windows.ps1
This will:
- Install the plugin to
%APPDATA%\Binary Ninja\plugins\ - Create a Python virtual environment (
.venv) - Install all dependencies
- Output a ready-to-use MCP configuration
Manual Installation (All Platforms)
Copy
plugin/lattice_server_plugin.pyto your Binary Ninja plugins directory:- Linux:
~/.binaryninja/plugins/ - macOS:
~/Library/Application Support/Binary Ninja/plugins/ - Windows:
%APPDATA%\Binary Ninja\plugins\
- Linux:
Create a virtual environment:
python -m venv .venvActivate and install dependencies:
# Linux/macOS source .venv/bin/activate # Windows .venv\Scripts\activate pip install -r requirements.txt
Usage
Starting the Server in Binary Ninja
- Open Binary Ninja and load a binary file
- Go to
Plugins > Start Lattice Protocol Server - The server will start and display the API key in the log console
- Set the API key as the
BNJLATenvironment variable in your MCP configuration
Example MCP configuration (mcp.json):
{
"mcpServers": {
"binja-lattice-mcp": {
"command": "/path/to/BinjaLattice/.venv/bin/python",
"args": ["/path/to/BinjaLattice/mcp_server.py"],
"env": {
"BNJLAT": "your_api_key_here"
}
}
}
}
On Windows, use backslashes:
{
"mcpServers": {
"binja-lattice-mcp": {
"command": "C:\\path\\to\\BinjaLattice\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\BinjaLattice\\mcp_server.py"],
"env": {
"BNJLAT": "your_api_key_here"
}
}
}
}
Tip: The Windows installer outputs a ready-to-paste configuration with the correct paths.
Available MCP Tools
The following tools are available through the MCP server:
Binary Information
get_binary_info: Get metadata about the binary (filename, architecture, entry point, segments, sections, function count)get_all_function_names: List all function names in the binaryget_strings: Get strings with optional min_length and substring filterget_imports: List imported functions with addresses and source librariesget_exports: List exported functions with addressesget_analysis_progress: Get Binary Ninja analysis status and progress percentage
Function Analysis
get_function_disassembly: Get assembly instructions for function by nameget_function_pseudocode: Get decompiled C-like pseudocode for functionget_function_variables: Get parameters, local variables, and global variablesget_cross_references_to_function: List functions that call the specified functionget_call_graph: Get callers and callees of function with configurable depthget_global_variable_data: Read data from global variable referenced in function
Data Access
get_data_at_address: Read bytes at address with optional type interpretationsearch_bytes: Search for hex byte pattern with wildcard support (e.g., '48 89 ?? 24')
Type Management
get_types: List defined types (structs, enums, typedefs) with optional filtercreate_struct: Create a new struct type with JSON member definitionsupdate_struct: Update an existing struct type
Annotations
update_function_name: Rename a functionupdate_variable_name: Rename a variable in a functionset_variable_type: Set variable type annotation (C-style like 'uint32_t')set_function_signature: Set function prototype (C-style like 'int foo(char* arg1)')add_comment_to_address: Add comment at addressadd_comment_to_function: Add comment to functioncreate_tag: Create tag at address with type and optional descriptionget_tags: List all tags with optional type filter
Client Library Usage
The Lattice client library provides a Python interface for interacting with the BinjaLattice server:
from lib.lattice import Lattice
# Initialize c
Tools (5)
get_binary_infoGet metadata about the binary including architecture, entry point, and segments.get_function_pseudocodeGet decompiled C-like pseudocode for a specific function.update_function_nameRename a function within the Binary Ninja database.add_comment_to_addressAdd a comment at a specific memory address.search_bytesSearch for hex byte patterns with wildcard support.Environment Variables
BNJLATrequiredThe API key generated by the Binary Ninja plugin server.Configuration
{"mcpServers": {"binja-lattice-mcp": {"command": "/path/to/BinjaLattice/.venv/bin/python", "args": ["/path/to/BinjaLattice/mcp_server.py"], "env": {"BNJLAT": "your_api_key_here"}}}}