Rust-native, multi-session IDA Pro headless MCP server
IDA Headless MCP has 34 tools with inconsistent quality. Naming is generally verb-based (get_, open_, close_) but lacks clarity in distinguishing supervisor vs worker variants (idb_open vs open_idb). Descriptions are present but brief (10-50 chars), below the 50-200 char baseline for LLM optimization. Input schemas are visible in source but many parameters lack descriptions or type constraints. No output schemas documented. Error handling is minimal, no recovery guidance or actionable error messages visible. Tool composition has redundancy (idb_open/open_idb, idb_close/close_idb) that forces LLM disambiguation. Security concerns: run_script and sdk_mutation expose dangerous operations without dry-run or confirmation patterns.
Get the current analysis status of the database
Analyze functions in the database
Add a bookmark at an address
Get functions called by a function
Get functions that call a function
Get the call graph for a function
Close the current IDA database
Append a comment to an address
Duplicate tool pairs (idb_open/open_idb, idb_close/close_idb) create ambiguity. LLMs cannot distinguish supervisor vs worker variants without explicit documentation. Consolidate or rename with clear suffixes (_supervisor, _worker).
Descriptions are uniformly brief (10-50 chars), below the 50-200 char baseline. Examples: 'Open an IDA database' lacks WHEN to use, prerequisites, or return value hints. Expand to explain context and guide LLM selection.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields (e.g., does get_function return function_id for use in patch?). Add explicit return type schemas for all tools.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2025-06-18+ | v2 |
Decompile a function to pseudocode
Get disassembly for an address range
Get information about a function
Get list of all functions in the database
Close an IDA database session
List all open IDA database sessions
Get metadata about the current database
Open an IDA database (supervisor session tool)
Infer types for variables and functions
Load debug information into the current database
Apply function signatures from Lumina
Look up function signatures in Lumina
Read memory from the debugged process
Write memory to the debugged process
Open a decompiler database
Open an IDA database (worker-local)
Patch bytes at an address
Get recent operations performed on the database
Rename a function or variable
Run a Python script in IDA
Perform SDK-level mutations on the database
Get server health status
Get the status of background analysis tasks
Search the tool catalog by intent
Get detailed help for a specific tool
Get cross-references to an address
Dangerous tools (run_script, sdk_mutation, patch, memory_write) lack dry-run, confirmation, or rate-limiting. An agent in a retry loop could execute arbitrary code or corrupt memory. Add confirmation_request pattern.
Parameter descriptions missing or minimal. 'address' appears in 15+ tools but is never explained (hex vs decimal? with 0x prefix?). 'operation' in sdk_mutation has no enum or valid values. Add detailed parameter descriptions with format/constraint hints.