binaryninja-mcp
by MCPPhalanx
The MCP (Model Context Protocol) Server for Binary Ninja allows external tools to interact with Binary Ninja for tasks like renaming symbols and retrieving code snippets. It supports both UI plugin and headless modes, providing a versatile interface for reverse engineering workflows.
Last updated: N/A
Another™ MCP Server for Binary Ninja
<div align="center"><strong>The MCP (Model Context Protocol) Server for Binary Ninja</strong>
PyPI Apache licensed Python Version GitHub Discussions
English | 中文
Demo
The tests/binary/beleaf.elf is taken from CSAW'19: Beleaf - Nightmare. You can also find the complete writeup from the link above!

demo
... but why Another?
See: Key Differences from the Existing Plugin
Installation
Server Setup
There are two ways to run the MCP server:
-
Binary Ninja UI Plugin:
- Install the plugin via Binary Ninja's plugin manager
- The MCP server will start automatically when first file is loaded.
- Auto start is configurable via
Settings - MCP Server - Auto Start
- Listen port is configurable via
Settings - MCP Server - Server port number
- Auto start is configurable via
- All opened files are exposed to separate resources, see Available Resources section below
-
Binary Ninja Headless Mode:
uvx binaryninja-mcp install-api # only run once uvx binaryninja-mcp server <filename> [filename]...
filename
could be any binary files or BNDB, like in UI mode, all opened files are available to the MCP client.- Server runs on default port 7000
- Use
--port
flag to specify a different port
MCP Client Setup
-
Claude Desktop (stdio relay client): Configure the client to connect via stdio transport using built-in relay.
{ "mcpServers": { "binaryninja": { "command": "uvx", "args": ["binaryninja-mcp", "client"] } } }
-
Cherry Studio:
- SSE endpoint (recommanded): URL:
http://localhost:7000/sse
- stdio client:
- Command:
uvx
- Arguments:
binaryninja-mcp client
- Command:
- SSE endpoint (recommanded): URL:
Add --port 12345
to both server and client command line if you prefer to run
MCP server on port other than default.
Available Tools for MCP Clients
The MCP server provides the following tools:
rename_symbol
: Rename a function or a data variablepseudo_c
: Get pseudo C code of a specified functionpseudo_rust
: Get pseudo Rust code of a specified functionhigh_level_il
: Get high level IL of a specified functionmedium_level_il
: Get medium level IL of a specified functiondisassembly
: Get disassembly of a function or specified rangeupdate_analysis_and_wait
: Update analysis for the binary and wait for completionget_triage_summary
: Get basic information from BinaryNinja Triage viewget_imports
: Get dictionary of imported symbolsget_exports
: Get dictionary of exported symbolsget_segments
: Get list of memory segmentsget_sections
: Get list of binary sectionsget_strings
: Get list of strings found in the binaryget_functions
: Get list of functionsget_data_variables
: Get list of data variables
Available Resources for MCP Clients
MCP Resources can be accessed via URIs in the format:
binaryninja://{filename}/{resource_type}
The server provides these resource types for each binary:
triage_summary
: Basic information from BinaryNinja Triage viewimports
: Dictionary of imported symbols/functionsexports
: Dictionary of exported symbols/functionssegments
: List of memory segmentssections
: List of binary sectionsstrings
: List of strings found in the binaryfunctions
: List of functionsdata_variables
: List of data variables
Development
uv is the recommanded package management tool for this project.
Clone directory to Binary Ninja Plugin Directory
git clone https://github.com/MCPPhalanx/binaryninja-mcp.git "${env:APPDATA}\Binary Ninja\plugins\MCPPhalanx_binaryninja_mcp"
Setup Python Environment
Binary Ninja API must be installed into virtualenv manually.
uv venv
uv sync --dev
# install binaryninja API
binaryninja-mcp install-api
# check API is correctly installed
uv run python -c 'import binaryninja as bn; print(f"ui_enabled={bn.core_ui_enabled()}")'
Setup MCP Client for Development
For MCP clients with stdio transport like Claude Desktop, change working directory to development folder.
{
"mcpServers": {
"binaryninja": {
"command": "uv",
"args": [
"--directory",
"C:/path/to/binaryninja-mcp",
"run",
"binaryninja-mcp",
"client"
]
}
}
}
SSE-enabled MCP clients can connect using: http://localhost:7000/sse
Build
uv build
Test
pytest
# To update test snapshots:
pytest --snapshot-update
Version Bump
The PyPI package version is automatically derived from Binary Ninja's
plugin.json
(using package.json format), maintaining version consistency
between the BN plugin and PyPI package.
# bump alpha version
uvx hatch version a
# bump release version
uvx hatch version minor,rc
uvx hatch version release
See: Versioning - Hatch
Release
uv publish