Production-ready Model Context Protocol server for Ghidra reverse engineering platform. Provides REST API endpoints for binary analysis, decompilation, disassembly, and function documentation in headless mode without requiring the Ghidra GUI.
GhidraMCP exhibits significant definition quality gaps. Tool descriptions are present but generic (avg ~80 chars, below 194-char baseline). Most parameters lack type definitions in visible schemas, only function_name and address appear typed. No output schemas documented. Error handling is absent. Tool naming follows verb_noun convention (get_, list_, find_) but lacks specificity for distinguishing similar tools (get_program_info vs get_metadata are duplicates). No parameter descriptions visible for most tools. Security-sensitive operations (decompile, disassemble) lack permission gates or dry-run patterns. Composition is reasonable (single responsibility per tool) but chaining support unclear, no evidence that tool outputs include IDs needed for downstream calls.
Health check endpoint to verify the server is running.
Get decompiled C pseudocode for a function. This is the primary analysis tool - produces readable C-like code.
Get assembly listing for a function. Use when you need to see the actual machine code, especially for understanding calling conventions, analyzing register usage, and identifying inline assembly patterns.
Find functions that haven't been documented yet.
Get functions called by this function. Use to understand dependencies and function behavior.
Get functions that call this function. Use to understand usage context and importance.
Duplicate tools: get_program_info and get_metadata both retrieve program metadata with identical empty input schemas. LLMs cannot distinguish between them, causing wasted reasoning cycles and potential tool selection errors.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., function_id, address). Breaks tool chaining and forces agents to guess response structure.
Parameter descriptions missing or incomplete. 'pattern' in find_undocumented_functions lacks type; 'offset' and 'limit' in list_functions lack descriptions of valid ranges. LLMs cannot infer constraints and may pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
Get all parameters and local variables for a function. Essential for understanding function signatures and local state.
Get metadata about the currently loaded program.
Get metadata about the currently loaded program.
Get the version of the GhidraMCP server.
Get cross-references to and from an address.
List all functions in the program.
No error handling guidance. Tools like decompile and disassemble (which may timeout or fail on complex functions) provide no recovery hints. LLMs receive raw errors with no actionable next steps.
Destructive/sensitive operations lack permission gates or confirmation patterns. decompile with force_refresh=true and disassemble could be abused by untrusted agents without authorization checks.