Skip to main content
Glama

IDA Pro MCP 서버

AI 어시스턴트가 역엔지니어링 및 바이너리 분석 작업을 위해 IDA Pro와 상호 작용할 수 있도록 하는 MCP(모델 컨텍스트 프로토콜) 서버입니다.

개요

이 프로젝트는 AI 어시스턴트와 소프트웨어 리버스 엔지니어링에 널리 사용되는 디스어셈블러 및 디버거인 IDA Pro를 연결하는 다리 역할을 합니다. 이 프로젝트는 세 가지 주요 구성 요소로 구성됩니다.

  1. IDA Pro 원격 제어 플러그인 ( ida_remote_server.py ): IDA Pro 기능을 원격으로 제어하기 위한 HTTP 서버를 생성하는 IDA Pro 플러그인입니다.

  2. IDA 원격 클라이언트 ( idaremoteclient.ts ): IDA Pro 원격 제어 서버와 상호 작용하기 위한 TypeScript 클라이언트입니다.

  3. MCP 서버 ( index.ts ): AI 어시스턴트에 IDA Pro 기능을 제공하는 모델 컨텍스트 프로토콜 서버입니다.

Related MCP server: Binary Ninja MCP Server

특징

  • AI 어시스턴트에서 IDA Pro의 Python 스크립트 실행

  • 바이너리에 대한 정보를 검색합니다.

    • 문자열

    • 수입품

    • 수출

    • 기능

  • 고급 바이너리 분석 기능:

    • 지침에서 즉시 값 검색

    • 바이너리에서 텍스트 문자열 검색

    • 특정 바이트 시퀀스 검색

    • 주소 범위에 대한 분해를 얻으세요

  • 표준화된 인터페이스를 통해 IDA Pro 작업을 자동화하세요

  • 구성 요소 간 보안 통신

필수 조건

  • IDA Pro 8.3 이상

  • Node.js 18 이상

  • 타입스크립트

예시 사용 ida_remote_server.py

지엑스피1

MCP 서버 사용 예시

루 출력

설치

1. IDA Pro 원격 제어 플러그인 설치

  1. ida_remote_server.py IDA Pro 플러그인 디렉토리에 복사합니다.

    • Windows: %PROGRAMFILES%\IDA Pro\plugins

    • macOS: /Applications/IDA Pro.app/Contents/MacOS/plugins

    • 리눅스: /opt/idapro/plugins

  2. IDA Pro를 시작하고 바이너리 파일을 엽니다.

  3. 플러그인은 자동으로 127.0.0.1:9045 에서 HTTP 서버를 시작합니다.

2. MCP 서버 설치

  1. 이 저장소를 복제하세요:

    git clone <repository-url>
    cd ida-server
  2. 종속성 설치:

    npm install
  3. 프로젝트를 빌드하세요:

    npm run build
  4. AI 어시스턴트의 MCP 설정 파일에서 MCP 서버를 구성하세요.

    {
      "mcpServers": {
        "ida-pro": {
          "command": "node",
          "args": ["path/to/ida-server/dist/index.js"],
          "env": {}
        }
      }
    }

용법

MCP 서버를 설치하고 구성하면 AI 어시스턴트에 다음 도구가 제공됩니다.

run_ida_command

IDA Pro Python 스크립트를 실행합니다.

매개변수:

  • scriptPath (필수): 실행할 스크립트 파일의 절대 경로

  • outputPath (선택 사항): 스크립트 출력을 저장할 절대 경로

예:

# Example IDA Pro script (save as /path/to/script.py)
import idautils

# Count functions
function_count = len(list(idautils.Functions()))
print(f"Binary has {function_count} functions")

# Get the first 5 function names
functions = list(idautils.Functions())[:5]
for func_ea in functions:
    print(f"Function: {ida_name.get_ea_name(func_ea)} at {hex(func_ea)}")

# Return data
return_value = function_count

AI 비서는 이 스크립트를 다음과 함께 사용할 수 있습니다.

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>run_ida_command</tool_name>
<arguments>
{
  "scriptPath": "/path/to/script.py"
}
</arguments>
</use_mcp_tool>

검색_즉시_값

이진법 명령어에서 즉각적인 값을 검색합니다.

매개변수:

  • value (필수): 검색할 값(숫자 또는 문자열)

  • radix (선택 사항): 숫자 변환을 위한 기수(기본값: 16)

  • startAddress (선택 사항): 검색 시작 주소

  • endAddress (선택 사항): 검색 종료 주소

예:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_immediate_value</tool_name>
<arguments>
{
  "value": "42",
  "radix": 10
}
</arguments>
</use_mcp_tool>

검색_텍스트

바이너리에서 텍스트 문자열을 검색합니다.

매개변수:

  • text (필수): 검색할 텍스트

  • caseSensitive (선택 사항): 검색 시 대소문자를 구분하는지 여부(기본값: false)

  • startAddress (선택 사항): 검색 시작 주소

  • endAddress (선택 사항): 검색 종료 주소

예:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_text</tool_name>
<arguments>
{
  "text": "password",
  "caseSensitive": false
}
</arguments>
</use_mcp_tool>

검색_바이트_시퀀스

바이너리에서 특정 바이트 시퀀스를 검색합니다.

매개변수:

  • bytes (필수): 검색할 바이트 시퀀스(예: 3개의 NOP의 경우 "90 90 90")

  • startAddress (선택 사항): 검색 시작 주소

  • endAddress (선택 사항): 검색 종료 주소

예:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_byte_sequence</tool_name>
<arguments>
{
  "bytes": "90 90 90"
}
</arguments>
</use_mcp_tool>

get_disassembly

주소 범위에 대한 디스어셈블리를 가져옵니다.

매개변수:

  • startAddress (필수): 분해 시작 주소

  • endAddress (선택 사항): 분해를 위한 종료 주소

  • count (선택 사항): 분해할 명령어 수

예:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_disassembly</tool_name>
<arguments>
{
  "startAddress": "0x401000",
  "count": 10
}
</arguments>
</use_mcp_tool>

get_functions

바이너리에서 함수 목록을 가져옵니다.

매개변수:

  • 필요 없음

예:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_functions</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>

내보내기

바이너리에서 내보내기 목록을 가져옵니다.

매개변수:

  • 필요 없음

예:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_exports</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>

문자열 가져오기

바이너리에서 문자열 목록을 가져옵니다.

매개변수:

  • 필요 없음

예:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_strings</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>

IDA Pro 원격 제어 API

IDA Pro 원격 제어 플러그인은 다음과 같은 HTTP 엔드포인트를 제공합니다.

  • GET /api/info : 플러그인 정보 가져오기

  • GET /api/strings : 바이너리에서 문자열을 가져옵니다.

  • GET /api/exports : 바이너리에서 내보내기 가져오기

  • GET /api/imports : 바이너리에서 가져오기

  • GET /api/functions : 함수 목록 가져오기

  • GET /api/search/immediate : 명령어에서 즉시 값을 검색합니다.

  • GET /api/search/text : 바이너리에서 텍스트 검색

  • GET /api/search/bytes : 바이너리에서 바이트 시퀀스를 검색합니다.

  • GET /api/disassembly : 주소 범위에 대한 디스어셈블리를 가져옵니다.

  • POST /api/execute : Python 스크립트(JSON/Form) 실행

  • POST /api/executebypath : 파일 경로에서 Python 스크립트 실행

  • POST /api/executebody : 원시 본문에서 Python 스크립트 실행

보안 고려 사항

기본적으로 IDA Pro 원격 제어 플러그인은 보안상의 이유로 127.0.0.1 (로컬호스트)에서만 수신 대기합니다. 이로 인해 IDA Pro 인스턴스에 대한 원격 접근이 차단됩니다.

원격 액세스를 허용해야 하는 경우 ida_remote_server.py 에서 DEFAULT_HOST 변수를 수정할 수 있지만 보안에 영향을 미칠 수 있다는 점을 알고 있어야 합니다.

개발

소스에서 빌드

npm run build

테스트 실행

npm test

특허

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 라이선스 파일을 참조하세요.

작가

플로리안 드레흐슬러(@fdrechsler) fd@fdrechsler.com

Available Tools

12 tools
get_disassemblyC

Get disassembly for an address range

ParametersJSON Schema
NameRequiredDescriptionDefault
startAddressYesStart address for disassembly
endAddressNoEnd address for disassembly (optional)
countNoNumber of instructions to disassemble (optional)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'get' implies a read operation, it doesn't specify whether this requires specific permissions, what format the disassembly returns in (e.g., assembly text, structured data), potential limitations like maximum range size, or error conditions for invalid addresses. This leaves significant gaps for a tool that likely interacts with binary analysis systems.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a straightforward tool and front-loads the essential information without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of binary analysis tools and the absence of both annotations and an output schema, the description is insufficient. It doesn't explain what the disassembly output looks like (critical for interpretation), any behavioral constraints, or how it fits with sibling tools. For a tool with three parameters in this domain, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all three parameters with their types and optionality. The description adds no additional meaning beyond implying address range usage, which is already covered by the parameter names and schema descriptions. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get' and the resource 'disassembly for an address range', making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_functions' or 'get_strings' that also retrieve specific data types from the binary analysis context, leaving room for potential confusion about when to choose this tool over others.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_functions' and 'get_strings' available, there's no indication of whether this is for raw instruction retrieval versus higher-level analysis, or any prerequisites for its use in the binary analysis workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_exportsB

Get list of exports from the binary

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the action ('Get list') but lacks behavioral details: it doesn't specify if this is a read-only operation, what format the list returns (e.g., structured data, raw text), whether it's paginated or rate-limited, or if it requires specific binary states (e.g., loaded analysis). For a tool with zero annotation coverage, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse. No extraneous information is included, which is ideal for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema), the description is minimally adequate. It states what the tool does but lacks context about what 'exports' are, the return format, or behavioral traits. Without annotations or output schema, the agent might struggle to use this effectively in complex scenarios, but it's sufficient for basic understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details beyond the schema, but since there are no parameters, the baseline is 4. It appropriately avoids unnecessary parameter explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('list of exports from the binary'), making the purpose understandable. It distinguishes this tool from siblings like 'get_functions' or 'get_strings' by specifying 'exports' as the target resource. However, it doesn't explicitly differentiate from all siblings (e.g., 'get_xrefs_from' also retrieves data from the binary).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention what 'exports' are in this context (e.g., exported functions, symbols), when this tool is appropriate compared to other 'get_' tools, or any prerequisites. The agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_functionsB

Get list of functions from the binary

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read-only operation ('Get'), but doesn't disclose details like whether it returns all functions, includes metadata, has pagination, requires specific binary states, or handles errors. For a tool with zero annotation coverage, this is inadequate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It is front-loaded and every word earns its place, making it highly concise and well-structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a tool in this context. It doesn't explain what the returned list includes (e.g., function names, addresses, signatures), how it behaves with different binary types, or potential limitations. For a tool among siblings that perform complex binary analysis, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, and since there are none, it doesn't need to compensate for schema gaps. A baseline of 4 is applied as the description doesn't introduce confusion about non-existent parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get list of functions from the binary' clearly states the verb ('Get') and resource ('functions from the binary'), making the purpose immediately understandable. It distinguishes from siblings like get_exports or get_strings by specifying functions, though it doesn't explicitly contrast with get_disassembly which might also involve functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context (e.g., after loading a binary), or comparisons to siblings like get_disassembly or search_in_names that might overlap with function retrieval. This leaves the agent without explicit usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stringsB

Get list of strings from the binary

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states what the tool does but doesn't disclose behavioral traits like whether this is a read-only operation, what format the strings are returned in, if there are rate limits, or how it interacts with the binary. This leaves significant gaps for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a simple tool with 0 parameters, the description is incomplete. It doesn't explain what 'strings' means in this context (e.g., ASCII, Unicode, extracted from binary data), how results are structured, or any limitations, leaving the agent with insufficient information for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description doesn't need to add parameter details, and it correctly implies no parameters are required, earning a baseline score above 3 for this scenario.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'list of strings from the binary', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'search_text' or 'search_in_names' that might also retrieve string-related information, preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. With siblings like 'search_text' and 'search_in_names' that might retrieve strings in different ways, the description lacks any context about use cases, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_xrefs_fromC

Get cross-references from an address

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesSource address to find references from
typeNoType of references to find (code, data, all)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral context. It states what the tool does but doesn't disclose important traits like whether this is a read-only operation, what format the cross-references are returned in, potential limitations (e.g., only within current module), or error conditions. The description is functional but lacks operational transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized for a simple lookup tool and front-loads the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what cross-references are in this context (e.g., code calls, data accesses), what the return format looks like, or how results are structured. Given the technical nature of reverse engineering tools, more context about the output would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented in the schema itself. The description adds no additional parameter semantics beyond implying the 'address' is a source and 'type' filters reference types. This meets the baseline for high schema coverage where the description doesn't need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'cross-references' from a specific source 'address', making the purpose understandable. It distinguishes from sibling 'get_xrefs_to' by specifying direction 'from', but doesn't fully differentiate from other analysis tools like 'get_functions' or 'get_disassembly' in terms of what cross-references provide.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives like 'get_xrefs_to' (which presumably finds references to an address) or other analysis tools. The description implies usage for finding references from an address but doesn't specify scenarios, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_xrefs_toC

Get cross-references to an address

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesTarget address to find references to
typeNoType of references to find (code, data, all)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action but doesn't describe what 'cross-references' entail (e.g., format, scope, or limitations), whether it's read-only or has side effects, or any performance considerations like rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly, which is ideal for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete. It lacks details on what 'cross-references' means, the return format, or any behavioral traits, which is insufficient for a tool with parameters and siblings, especially in a context like IDA analysis where clarity is critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with both parameters ('address' and 'type') documented in the schema. The description adds no additional meaning beyond implying the tool finds references to an address, which aligns with the schema but doesn't enhance parameter understanding, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get cross-references') and the target resource ('to an address'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_xrefs_from' or explain what 'cross-references' means in this context, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. With sibling tools like 'get_xrefs_from' (likely for references from an address), the description doesn't clarify the distinction or suggest any prerequisites, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_ida_commandC

Execute an IDA Pro Script (IdaPython, Version IDA 8.3)

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYesscript

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool executes a script but doesn't describe execution context (e.g., sandboxed environment, permissions needed), potential side effects (e.g., modifying the IDA database), error handling, or output format. This leaves significant gaps for a tool that runs arbitrary code.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action. It could be slightly improved by adding a brief usage note, but it avoids redundancy and wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that executes arbitrary scripts with no annotations and no output schema, the description is incomplete. It lacks critical context such as execution environment, safety considerations, expected output, or error behavior, which are essential for an AI agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'script' parameter documented as 'script'. The description adds no additional meaning about the parameter (e.g., syntax examples, supported libraries, or constraints). Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute') and the resource ('an IDA Pro Script'), specifying the scripting language (IdaPython) and version (IDA 8.3). However, it doesn't explicitly differentiate from its sibling 'run_ida_command_filebased', which likely handles script files rather than inline scripts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'run_ida_command_filebased' or other analysis tools (e.g., 'get_functions', 'search_text'). There's no mention of prerequisites, typical use cases, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_ida_command_filebasedB

(FOR IDE USAGE) Execute an IDA Pro Script (IdaPython, Version IDA 8.3)

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptPathYesabsolute Path to the script file to execute
outputPathNoabsolute Path to save the scripts output to

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions execution of a script but lacks critical behavioral details: whether this is a read-only or destructive operation, what permissions or authentication are needed, how errors are handled, or if there are rate limits. The description is minimal and doesn't compensate for the lack of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single sentence that front-loads key information (IDE usage, execution, script type, version). Every word earns its place, and there's no wasted text, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of executing scripts in a tool like IDA Pro, with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns, error conditions, or behavioral constraints. For a tool that likely involves file I/O and script execution, more context is needed to be fully helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters (scriptPath and outputPath). The description adds no additional parameter semantics beyond what's in the schema, such as file format requirements or output specifics. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Execute') and resource ('an IDA Pro Script'), specifying it's for IDA 8.3 with IdaPython. It distinguishes from sibling 'run_ida_command' by indicating file-based execution, though not explicitly contrasting. The purpose is specific but could be more explicit about the sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context with '(FOR IDE USAGE)', suggesting it's intended for IDE environments, but doesn't provide explicit guidance on when to use this tool versus alternatives like 'run_ida_command' or other analysis tools. No when-not scenarios or prerequisites are mentioned, leaving usage somewhat vague.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_byte_sequenceB

Search for a byte sequence in the binary

ParametersJSON Schema
NameRequiredDescriptionDefault
bytesYesByte sequence to search for (e.g., "90 90 90" for three NOPs)
startAddressNoStart address for search (optional)
endAddressNoEnd address for search (optional)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral information. It doesn't disclose whether this is a read-only operation, what permissions might be required, how results are returned (e.g., list of addresses), or any performance characteristics like search scope limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and uses technical terminology appropriately for the domain without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with no annotations and no output schema, the description is insufficient. It doesn't explain what format results are returned in, whether searches are case-sensitive, how multiple matches are handled, or any limitations on search scope beyond the optional address parameters documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline for high schema coverage without adding extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Search for a byte sequence') and target resource ('in the binary'), distinguishing it from sibling tools like search_text or search_immediate_value. It uses precise technical terminology appropriate for binary analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like search_immediate_value or search_text, nor does it mention any prerequisites or contextual constraints. It simply states what the tool does without indicating appropriate use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_immediate_valueC

Search for immediate values in the binary

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesValue to search for (number or string)
radixNoRadix for number conversion (default: 16)
startAddressNoStart address for search (optional)
endAddressNoEnd address for search (optional)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral information. It doesn't disclose whether this is a read-only operation, what permissions might be needed, how results are returned, or any performance characteristics. The description only states what the tool does at a high level.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise - a single sentence that gets straight to the point without any wasted words. It's appropriately sized for what it communicates and is front-loaded with the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with 4 parameters and no annotations or output schema, the description is insufficient. It doesn't explain what constitutes an 'immediate value' in binary analysis, how results are formatted, whether there are limitations on search scope, or how this differs from other search tools on the server.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter information beyond what's in the schema. The baseline of 3 is appropriate when the schema does the heavy lifting for parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search for') and target ('immediate values in the binary'), which distinguishes it from siblings like search_byte_sequence or search_text. However, it doesn't fully explain what 'immediate values' means in this context compared to other search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like search_byte_sequence or search_text. There's no mention of specific use cases, prerequisites, or limitations that would help an agent choose between similar search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_in_namesC

Search for names/symbols in the binary

ParametersJSON Schema
NameRequiredDescriptionDefault
patternYesPattern to search for in names
caseSensitiveNoWhether the search is case sensitive (default: false)
typeNoType of names to search for (function, data, import, export, label, all)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions searching but doesn't specify what 'names/symbols' encompass (e.g., function names, variable names, imported symbols), how results are returned, whether it's read-only (implied but not stated), or any limitations like performance impact. This leaves significant gaps for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a tool that performs searches (which could have behavioral nuances like result formats or limitations), the description is incomplete. It doesn't explain what constitutes 'names/symbols', how results are structured, or any constraints, leaving the agent with insufficient context for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds no additional meaning beyond what's in the schema—it doesn't clarify what 'names/symbols' means in relation to the 'type' parameter or provide examples for the 'pattern'. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as searching for names/symbols in a binary, which is a specific verb+resource combination. However, it doesn't differentiate from sibling tools like get_functions, get_exports, or search_text, which all involve retrieving information from binaries but with different scopes or methods.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like get_functions (retrieves functions), get_exports (retrieves exports), and search_text (searches text), there's no indication of when this name/symbol search is preferred over those more specific tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_textC

Search for text in the binary

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to search for
caseSensitiveNoWhether the search is case sensitive (default: false)
startAddressNoStart address for search (optional)
endAddressNoEnd address for search (optional)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states what the tool does ('search for text') without mentioning behavioral traits like whether it returns all matches or first match, if it's paginated, what happens if no text is found, or performance implications. For a search tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's appropriately sized and front-loaded, directly stating the core functionality without unnecessary elaboration. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a search operation with 4 parameters, no annotations, and no output schema, the description is incomplete. It lacks information about return values (e.g., match addresses or counts), error conditions, or how results are formatted. For a tool with rich input schema but no other structured data, the description should provide more context to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning all parameters are documented in the schema. The description adds no additional meaning beyond what's in the schema (e.g., it doesn't explain address formats or search algorithms). With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'search' and the target 'text in the binary', which is specific and understandable. However, it doesn't explicitly differentiate this from sibling tools like 'search_byte_sequence' or 'search_immediate_value', which likely search for different types of patterns in the binary. The purpose is clear but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'search_byte_sequence' for binary data or 'search_immediate_value' for numeric values, nor does it specify contexts where text search is preferred. Without any usage context or exclusions, the agent must infer based on tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updates
    • First observedget_disassembly
    • First observedget_exports
    • First observedget_functions
    • First observedget_strings
    • First observedget_xrefs_from
    • First observedget_xrefs_to
    • First observedrun_ida_command
    • First observedrun_ida_command_filebased
    • First observedsearch_byte_sequence
    • First observedsearch_immediate_value
    • First observedsearch_in_names
    • First observedsearch_text

TDQS

B3.4/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have distinct purposes, but the two 'run_ida_command' variants could cause confusion as they differ only in file-based execution for IDE usage, which might not be clear to an agent without careful reading. The search tools (search_byte_sequence, search_immediate_value, search_in_names, search_text) are well-differentiated by their targets.

Naming Consistency5/5

Tool names follow a consistent snake_case pattern with clear verb_noun structures (e.g., get_disassembly, get_exports, search_byte_sequence). The two 'run_ida_command' tools maintain this pattern with descriptive suffixes, ensuring overall predictability.

Tool Count5/5

With 12 tools, this server is well-scoped for binary analysis in IDA Pro, covering core functions like disassembly, exports, functions, strings, cross-references, searches, and script execution. Each tool serves a specific purpose without bloat.

Completeness4/5

The toolset provides comprehensive coverage for static analysis tasks, including retrieval, searching, and script execution. A minor gap is the lack of tools for modifying the binary (e.g., patching or annotating), but this is reasonable for a read-focused analysis server.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables Large Language Models to interact with Binary Ninja for reverse engineering tasks like viewing assembly code, decompiled code, renaming functions, and adding comments.
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An Model Context Protocol server that enables LLMs to autonomously reverse engineer applications by exposing Ghidra's decompilation and analysis tools. It allows AI agents to list code structures, rename methods, and analyze binaries directly through MCP-compatible clients.
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    A lightweight MCP server that exposes IDA Pro's disassembly, decompilation, and symbol query capabilities to AI clients, with reduced tool set for lower token consumption.
    284
    -