get_function_by_name(name)LABSCO SUMMARY
The notes store is what makes it more than a remote control for IDA.
Renaming a function and setting a prototype improve the database; attaching a note to an address, tagged and retrievable by binary, captures the reasoning that the database itself cannot hold — and that is the thing you lose between sessions on a long engagement. The IDAPython escape hatch covers everything else, and it returns captured output rather than leaving you guessing whether the script ran.
What it is
An MCP server for reverse engineering with IDA Pro. It exposes the analysis surface an agent needs — functions, cross references, decompilation, renaming and typing — plus a notes store so findings survive between sessions.
What you get
- Finding your way:
list_functions,get_function_by_name,get_function_by_address,get_current_address,get_current_function,get_entrypoints,get_metadata - Reading code:
decompile_functionthrough Hex-Rays,disassemble_functionwith addresses and comments,get_function_blocksandget_function_cfg - Following the graph:
get_xrefs_toandget_xrefs_fromfor any address - Writing your understanding back into the database:
rename_function,rename_local_variable,set_function_prototype,set_local_variable_type,create_structure_type - Annotating:
set_decompiler_commentandset_disassembly_commentat a given address repl_idapythonruns IDAPython and captures stdout and stderr, for anything the tools do not cover- Engagement notes tied to the binary:
add_note,update_note,get_notesfiltered by file, address or tag, anddelete_note
Requirements
IDA Pro with Hex-Rays for the decompiler tools, and uv. Clone the repository and add it to your client config, running server.py from the checkout directory. The project is based on IDA Pro MCP and is MIT licensed.
Setup effort
Build from source — clone the repository, then follow the project's own run instructions
USE CASES
Understanding an unfamiliar function
Decompile it, then follow the cross references in and out to see how it is reached.
Making the database readable as you go
Rename the function and its locals, set the prototype, and fix the variable types.
Recording why you concluded something
Attach a tagged note at the address, so the reasoning is there when you come back next week.
Recovering a structure from usage
Read the accesses in the decompilation, then create the structure type and apply it.
Doing something the tools do not cover
Run IDAPython directly and read the captured output instead of switching to the IDA console.
25 tools
Listed in project docs. Your client may show a different list.
get_function_by_address(address)get_current_address()get_current_function()list_functions()decompile_function(address)disassemble_function(address)get_entrypoints()get_function_blocks(address)get_function_cfg(address)get_xrefs_to(address)get_xrefs_from(address)set_decompiler_comment(address, comment)set_disassembly_comment(address, comment)rename_local_variable(function_address, old_name, new_name)rename_function(function_address, new_name)set_function_prototype(function_address, prototype)set_local_variable_type(function_address, variable_name, new_type)create_structure_type(name, members, is_union)get_metadata()repl_idapython(content)add_note(title, content, address, tags)update_note(note_id, title, content, tags)get_notes(file_md5, address, tag)delete_note(note_id)BEFORE YOU INSTALL
What to know first
Tools you get
25 tools named in the project's documentation.
Requires
uv on PATH
INSTALLATION
Connect your client
Add the block to your client, or run the command directly.
Server setup
Configuration file
{
"mcpServers": {
"pcm": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_PCM>",
"run",
"server.py"
]
}
}
}uv
uv --directory <YOUR_PATH_TO_PCM> run server.py