Headless IDA Pro MCP server - automated binary analysis for AI agents
Server has 12 well-named tools with clear verb-noun patterns (open_binary, list_functions, decompile_function). All tools have descriptions (10 - 200 chars, within baseline 34 - 392 range). Input schemas are visible with type annotations via Annotated[]. However, output schemas are NOT documented, tools return dicts with undocumented field structures. Parameter descriptions are present but sparse (e.g., 'Session ID to close' lacks context on what happens). Error handling returns success/error dicts but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Missing: output schema documentation, parameter constraints (enums, ranges), and actionable error messages.
Close an analysis session and free its resources.
Decompile a function to C pseudocode using Hex-Rays decompiler. Requires Hex-Rays license.
Get assembly disassembly for a function or address range.
Get information about the currently active analysis session.
Get metadata about the currently loaded binary (filename, architecture, image base, hashes, etc.).
Get detailed information about a specific function (address, size, prototype, etc.).
List functions in the binary with optional name filtering and pagination.
Output schemas not documented. Tools return dicts (e.g., open_binary returns {success, session, message}) but LLMs cannot infer field types or structure. Downstream tools cannot reliably extract session_id or other chaining IDs.
Error responses lack recovery guidance. E.g., 'No active session. Use open_binary() to open a file first.' is good, but most errors return bare {success: False, error: str(e)} with no actionable next step for the LLM.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe read-only tools from destructive ones (e.g., save_database modifies state but has no annotation).
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2025-06-18+ | v2 |
List all open analysis sessions. Shows which session is currently active.
Open a binary file for analysis. Creates a new IDA session or reuses an existing one for the same file. This is the first tool you should call to start analyzing a binary.
Save the current IDA database to disk.
Switch the active analysis to a different open session. All subsequent analysis tools will operate on this session's database.
Wait for IDA auto-analysis to complete. Call this after open_binary if you want to ensure analysis is finished.
Parameter constraints missing. E.g., list_functions accepts filter_str (glob pattern) and count (max results) but no min/max bounds documented. LLMs may pass count=999999 or malformed patterns.
Pagination in list_functions returns has_more boolean but no next_cursor or explicit guidance on how to fetch next page. Offset-based pagination is fragile if results change between calls.