IDA-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| check_connectionA | Health check. Returns {ok, instance_id, pid, input_file, ...} for the resolved IDA instance. |
| list_databasesA | List all live IDA databases/instances ({instance_id, pid, headless, input_file}); pass one as instance_id on every tool call while several are live. |
| open_databaseA | Open a binary or .i64 database in a headless idalib worker (creates/analyzes the .i64). Call this first. Record the returned instance.instance_id — every subsequent tool call must carry it while multiple databases are open. |
| save_databaseB | Save the current (or specified) IDA database to disk (.i64). |
| close_databaseA | Release an IDA database worker: saved and shut down when the last user detaches; terminate=true forces shutdown. Use when its analysis is finished or no longer needed — the other instances are unaffected. |
| ida_python_referenceA | Search the official IDAPython API documentation (from the attached IDA runtime). Returns signatures + docstrings; pass 'modules' as query to list modules. |
| add_segmentC | Add a new memory segment to the IDB. |
| apply_patchC | Apply IDB byte patches to a copied input file and export it. |
| callgraphC | Build a call graph by walking call references from the root function(s). |
| convert_numberB | Convert number to hex/unsigned/signed representations. |
| create_functionC | Create a function at an address. |
| dbg_add_bpC | Add breakpoint(s) at address(es). |
| dbg_callstackB | Get current call stack (requires active debugger). |
| dbg_continueC | Continue execution. |
| dbg_delete_bpC | Delete breakpoint(s) at address(es). |
| dbg_enable_bpC | Enable or disable breakpoint(s). |
| dbg_exitC | Exit debugger. |
| dbg_list_bpsA | List all breakpoints (works without active debugger). |
| dbg_read_memC | Read memory from debugged process. |
| dbg_regsB | Get all debugger registers (requires active debugger). |
| dbg_run_toC | Run debugger to specific address. |
| dbg_startC | Start the debugger on the current input file. The local debugger is |
| dbg_statusB | Get debugger status: state, pid, threads, current instruction pointer. |
| dbg_step_intoC | Step into instruction. |
| dbg_step_overC | Step over instruction. |
| dbg_thread_regsA | Read registers of one or more debug threads (temporarily selects each thread, then restores). |
| dbg_write_memC | Write memory to debugged process. |
| declare_enumC | Declare or update an enum in the local type library. |
| declare_stackC | Create stack variable(s) at specified offset(s). |
| declare_structC | Declare or update a struct in the local type library. |
| declare_typedefC | Declare or update a typedef in the local type library. |
| decompileB | Decompile function(s) at given address(es). Requires Hex-Rays. |
| delete_functionC | Delete an existing function. |
| delete_segmentC | Delete a memory segment from the IDB. |
| delete_stackC | Delete stack variable(s) by name. |
| diff_before_afterB | Snapshot a function's decompilation, run a modification tool, return the unified diff. |
| disasmB | Disassemble function(s) into listing lines (hex addresses, no color tags). |
| find_bytesC | Search for byte pattern with wildcards (?? for any byte). |
| find_instructionsC | Find instructions by mnemonic and/or a regex over the instruction text. |
| find_regexB | Search symbol names (functions, globals, labels) with a regular expression. |
| find_xref_signaturesC | Find signatures for code locations that reference an address. For each |
| force_recompileA | Invalidate cached Hex-Rays decompilations so they are regenerated. |
| get_basic_blocksC | Get basic blocks with control flow information. |
| get_bytesC | Read raw bytes at address(es). |
| get_calleesC | Get callees grouped by target function and call sites. |
| get_callersC | Get callers grouped by calling function and call sites. |
| get_cursorC | Get current cursor position and context in IDA. |
| get_entry_pointsC | Get all program entry points. |
| get_function_signatureC | Get the best available function signature string. |
| get_metadataB | Get IDB metadata (input_file, arch, bits, endian, hash). |
| get_stringC | Read null-terminated string(s). |
| get_struct_infoB | Get detailed structure/union definition with fields. |
| infer_typesC | Guess the type at each address with IDA's type inference and apply it as a guessed type. |
| linear_disasmB | Linear disassemble from arbitrary address (not limited to functions). |
| list_exportsC | List exported functions/symbols. |
| list_functionsC | List functions with pagination and optional filtering. |
| list_globalsC | List global (non-function) symbols with pagination. |
| list_importsB | List imported functions with module names. |
| list_local_typesB | List all local types defined in the database. |
| list_segmentsC | List memory segments with permissions. |
| list_stringsC | List extracted strings with pagination. |
| list_structsB | List all structures/unions defined in the database. |
| make_codeC | Convert bytes at an address into code. |
| make_dataC | Create typed data items at an address. |
| make_signatureC | Create unique byte signatures for addresses. Generates the shortest |
| make_signature_for_functionC | Create unique byte signatures for function entry points. Resolves each |
| make_signature_for_rangeC | Create a byte signature for a specific address range (e.g. a selected |
| make_stringC | Create a string literal at an address. |
| patch_asmB | Assemble instruction text and patch it at address(es). Requires processor assembler support (e.g. x86). |
| patch_bytesC | Patch bytes at address(es). Each item: {address, bytes}. |
| py_evalC | Execute Python code in IDA context. |
| py_exec_fileC | Execute a Python script file in IDA context and capture output. |
| read_scalarC | Read scalar integer(s) with explicit width. |
| rename_functionC | Rename function. Accepts function name or address. |
| rename_global_variableD | Rename global variable. |
| rename_local_variableC | Rename local variable (Hex-Rays). |
| save_idbC | Save the current IDA database to disk. |
| search_textB | Search disassembly listing text (instructions, comments) across the database. |
| set_commentC | Set comments at address(es). Each item: {address, comment}. |
| set_function_prototypeC | Set function prototype (type signature). |
| set_global_variable_typeC | Set global variable type. |
| set_local_variable_typeB | Set local variable type (Hex-Rays). |
| set_op_typeB | Set the display type of an instruction operand (hex/dec/oct/bin/char/stkvar). |
| stack_frameC | Get stack frame variables for function(s). |
| survey_binaryC | High-level binary overview: metadata, entity counts, segments, entry points. |
| trace_data_flowC | Trace data references (reads/writes/offsets) to and from an address. |
| undefine_itemsD | Undefine items in a range. |
| wait_for_analysisA | Block until IDA auto-analysis (functions, xrefs, strings) completes. |
| xrefs_fromC | Get all cross-references from address(es). |
| xrefs_toB | Get all cross-references to address(es). |
| xrefs_to_fieldC | Search struct field references. Heuristic by default (name/offset text |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 91 tools
Most tools target clearly distinct IDA operations, especially with separate namespaces for database lifecycle, analysis, xrefs, types, patching, and debugging. However, save_database and save_idb are exact duplicates, dbg_regs/dbg_thread_regs overlap, and the signature-creation family plus apply_patch/patch_bytes require careful reading to choose correctly.
All names are snake_case, which helps, but the naming style is mixed: many verb_noun names, many bare verbs like disasm/decompile, noun names like callgraph/stack_frame/survey_binary, a dbg_ prefix for debugger tools, and xrefs_to/xrefs_from directional names. The set is readable but does not follow one predictable pattern.
With 91 tools, the surface is far beyond a reasonably scoped server and imposes high selection burden on an agent. Even though many tools are useful, the count is extreme for the apparent domain and includes duplicates and fine-grained variants that could be consolidated.
The surface is very comprehensive for IDA reverse engineering: database management, analysis, disassembly/decompilation, xrefs, functions, types, segments, strings, patching, signatures, debugging, and Python execution are all covered. Minor gaps exist around local-type deletion and richer per-function detail aggregation, but core workflows are well supported.