Skip to main content
Glama

set_comment

Add or update comments at specific addresses in IDA Pro’s disassembly and pseudocode to enhance code analysis and documentation during reverse engineering tasks.

Instructions

Set a comment for a given address in the function disassembly and pseudocode

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
addressYesAddress in the function to set the comment for
commentYesComment text

Implementation Reference

  • Handler function for setting comments at specified addresses in both disassembly and decompiler views. This is the core implementation of the comment-setting tool (named 'set_comments').
    @tool
    @idawrite
    def set_comments(items: list[CommentOp] | CommentOp):
        """Set comments at addresses (both disassembly and decompiler views)"""
        if isinstance(items, dict):
            items = [items]
    
        results = []
        for item in items:
            addr_str = item.get("addr", "")
            comment = item.get("comment", "")
    
            try:
                ea = parse_address(addr_str)
    
                if not idaapi.set_cmt(ea, comment, False):
                    results.append(
                        {
                            "addr": addr_str,
                            "error": f"Failed to set disassembly comment at {hex(ea)}",
                        }
                    )
                    continue
    
                if not ida_hexrays.init_hexrays_plugin():
                    results.append({"addr": addr_str, "ok": True})
                    continue
    
                try:
                    cfunc = decompile_checked(ea)
                except IDAError:
                    results.append({"addr": addr_str, "ok": True})
                    continue
    
                if ea == cfunc.entry_ea:
                    idc.set_func_cmt(ea, comment, True)
                    cfunc.refresh_func_ctext()
                    results.append({"addr": addr_str, "ok": True})
                    continue
    
                eamap = cfunc.get_eamap()
                if ea not in eamap:
                    results.append(
                        {
                            "addr": addr_str,
                            "ok": True,
                            "error": f"Failed to set decompiler comment at {hex(ea)}",
                        }
                    )
                    continue
                nearest_ea = eamap[ea][0].ea
    
                if cfunc.has_orphan_cmts():
                    cfunc.del_orphan_cmts()
                    cfunc.save_user_cmts()
    
                tl = idaapi.treeloc_t()
                tl.ea = nearest_ea
                for itp in range(idaapi.ITP_SEMI, idaapi.ITP_COLON):
                    tl.itp = itp
                    cfunc.set_user_cmt(tl, comment)
                    cfunc.save_user_cmts()
                    cfunc.refresh_func_ctext()
                    if not cfunc.has_orphan_cmts():
                        results.append({"addr": addr_str, "ok": True})
                        break
                    cfunc.del_orphan_cmts()
                    cfunc.save_user_cmts()
                else:
                    results.append(
                        {
                            "addr": addr_str,
                            "ok": True,
                            "error": f"Failed to set decompiler comment at {hex(ea)}",
                        }
                    )
            except Exception as e:
                results.append({"addr": addr_str, "error": str(e)})
    
        return results
  • TypedDict defining the input schema for comment operations: address and comment text.
    class CommentOp(TypedDict):
        """Comment operation"""
    
        addr: Annotated[str, "Address (hex or decimal)"]
        comment: Annotated[str, "Comment text"]
  • Import of api_modify module in __init__.py which triggers registration of all @tool decorated functions including set_comments via the MCP_SERVER.tool decorator.
    from . import api_modify
    from . import api_stack
    from . import api_debug
    from . import api_python
    from . import api_resources
    
    # Re-export key components for external use
  • The @tool decorator definition that registers functions with the MCP server under their function name (e.g., 'set_comments').
    def tool(func):
        return MCP_SERVER.tool(func)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mrexodia/ida-pro-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server