r0idamcp is an IDA Pro debugger integration server with 5 tools, all read-only. Tool definitions are directly visible in r0idamcp.py via @idaread decorators and fastmcp registration. Naming follows verb_noun convention (all start with 'get_'), which is good. However, descriptions are present but minimal (10-30 chars), falling below the 50-200 char baseline for LLM-optimized descriptions. Input schemas are sparse, most tools have empty schemas {} (get_metadata, get_current_address, get_current_function), while two tools (get_function_by_name, get_function_by_address) have basic string parameters. Critically, parameter descriptions are missing or minimal. Output schemas are not documented, the code returns TypedDict-like structures (Metadata, Function) but no formal schema is exposed to the MCP client. Error handling exists (IDAError exception class) but error responses lack recovery guidance. Overall, the server is functional for IDA automation but falls short of production-grade LLM-agent patterns due to sparse documentation and undocumented output structures.
Get the address currently selected by the user
Get the function containing the currently selected address, or None if not in a function
Get a function by its address
Get a function by its name
Get metadata about the current IDB
Output schemas not documented. Tools return TypedDict structures (Metadata with path/module/base/size/md5/sha256/crc32/filesize; Function with address/name/size) but no formal JSON schema is exposed to MCP clients. LLMs cannot plan downstream calls or extract fields without documented output structure.
Tool descriptions too brief (10-30 chars). Baseline is 50-200 chars for LLM-optimized descriptions. Current descriptions ('Get metadata about the current IDB', 'Get a function by its name') lack WHEN to use, prerequisites, or relationship to other tools. LLMs cannot reliably select tools based on such minimal context.
Parameter descriptions missing or absent. get_function_by_name and get_function_by_address accept 'name' and 'address' strings but do not document expected format (hex prefix for address?), constraints (length limits?), or what to do if the function is not found.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 36 | <=2025-11-25 | v2 |
No error recovery guidance. IDAError exceptions are raised (e.g., 'No function found at address X', 'Failed to parse address') but error responses do not tell the LLM what to do next. Should suggest alternatives or retry strategies.
Tools with empty input schemas. get_metadata, get_current_address, and get_current_function have {} (no parameters) which is correct, but this makes them inflexible. If the IDA window is not active or multiple IDBs are open, there is no way to specify context.