English | äøę
The tests/binary/beleaf.elf is taken from CSAW'19: Beleaf - Nightmare. You can also find the complete writeup from the link above!
See: Key Differences from the Existing Plugin
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
-
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.
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
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
uv is the recommanded package management tool for this project.
git clone https://github.com/MCPPhalanx/binaryninja-mcp.git "${env:APPDATA}\Binary Ninja\plugins\MCPPhalanx_binaryninja_mcp"
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; assert bn._init_plugins() is None; assert bn.core_ui_enabled() is not None; print("BN API check PASSED!!")'
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
uv build
pytest
# To update test snapshots:
pytest --snapshot-update
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
uv publish