IDA Pro MCP Server
IDA Pro MCP サーバー
AI アシスタントが IDA Pro と対話してリバース エンジニアリングやバイナリ分析のタスクを実行できるようにするモデル コンテキスト プロトコル (MCP) サーバー。
概要
このプロジェクトは、AIアシスタントと、ソフトウェアのリバースエンジニアリングに使用される人気の逆アセンブラおよびデバッガであるIDA Proとの橋渡しとなるものです。3つの主要コンポーネントで構成されています。
IDA Pro リモート コントロール プラグイン(
ida_remote_server.py): IDA Pro 機能をリモートで制御するための HTTP サーバーを作成する IDA Pro プラグイン。IDA リモート クライアント(
idaremoteclient.ts): IDA Pro リモート コントロール サーバーと対話するための TypeScript クライアント。MCP サーバー(
index.ts): IDA Pro 機能を AI アシスタントに公開するモデル コンテキスト プロトコル サーバー。
Related MCP server: Binary Ninja MCP Server
特徴
IDA ProでAIアシスタントからPythonスクリプトを実行する
バイナリに関する情報を取得します。
文字列
輸入品
輸出
機能
高度なバイナリ分析機能:
命令内の即値を検索する
バイナリ内のテキスト文字列を検索する
特定のバイトシーケンスを検索する
アドレス範囲の逆アセンブリを取得する
標準化されたインターフェースを通じてIDA Proの操作を自動化
コンポーネント間の安全な通信
前提条件
IDA Pro 8.3以降
Node.js 18以降
タイプスクリプト
使用例 ida_remote_server.py
curl -X POST -H "Content-Type: application/json" -d '{"script":"print(\"Script initialization...\")"}' http://127.0.0.1:9045/api/execute
{"success": true, "output": "Script initialization...\n"}MCPサーバーの使用例

インストール
1. IDA Proリモートコントロールプラグインをインストールする
ida_remote_server.pyを IDA Pro プラグイン ディレクトリにコピーします。Windows:
%PROGRAMFILES%\IDA Pro\pluginsmacOS:
/Applications/IDA Pro.app/Contents/MacOS/pluginsLinux:
/opt/idapro/plugins
IDA Pro を起動し、バイナリ ファイルを開きます。
プラグインは
127.0.0.1:9045で HTTP サーバーを自動的に起動します。
2. MCPサーバーをインストールする
このリポジトリをクローンします:
git clone <repository-url> cd ida-server依存関係をインストールします:
npm installプロジェクトをビルドします。
npm run buildAI アシスタントの MCP 設定ファイルで MCP サーバーを構成します。
{ "mcpServers": { "ida-pro": { "command": "node", "args": ["path/to/ida-server/dist/index.js"], "env": {} } } }
使用法
MCP サーバーをインストールして構成すると、AI アシスタントに次のツールが提供されます。
実行IDAコマンド
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_countAI アシスタントは、このスクリプトを次のように使用できます。
<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>get_exports
バイナリからエクスポートのリストを取得します。
パラメータ:
不要
例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_exports</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>get_strings
バイナリから文字列のリストを取得します。
パラメータ:
不要
例:
<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/フォーム) を実行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ライセンスの下で提供されています。詳細はLICENSEファイルをご覧ください。
著者
フロリアン・ドレクスラー (@fdrechsler) fd@fdrechsler.com
Available Tools
12 toolsget_disassemblyC
Get disassembly for an address range
| Name | Required | Description | Default |
|---|---|---|---|
| startAddress | Yes | Start address for disassembly | |
| endAddress | No | End address for disassembly (optional) | |
| count | No | Number of instructions to disassemble (optional) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Source address to find references from | |
| type | No | Type of references to find (code, data, all) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Target address to find references to | |
| type | No | Type of references to find (code, data, all) |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | script |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| scriptPath | Yes | absolute Path to the script file to execute | |
| outputPath | No | absolute Path to save the scripts output to |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bytes | Yes | Byte sequence to search for (e.g., "90 90 90" for three NOPs) | |
| startAddress | No | Start address for search (optional) | |
| endAddress | No | End address for search (optional) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Value to search for (number or string) | |
| radix | No | Radix for number conversion (default: 16) | |
| startAddress | No | Start address for search (optional) | |
| endAddress | No | End address for search (optional) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Pattern to search for in names | |
| caseSensitive | No | Whether the search is case sensitive (default: false) | |
| type | No | Type of names to search for (function, data, import, export, label, all) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to search for | |
| caseSensitive | No | Whether the search is case sensitive (default: false) | |
| startAddress | No | Start address for search (optional) | |
| endAddress | No | End address for search (optional) |
TDQS
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.
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.
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.
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.
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.
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.
12 tool updates
- First observed
get_disassembly - First observed
get_exports - First observed
get_functions - First observed
get_strings - First observed
get_xrefs_from - First observed
get_xrefs_to - First observed
run_ida_command - First observed
run_ida_command_filebased - First observed
search_byte_sequence - First observed
search_immediate_value - First observed
search_in_names - First observed
search_text
TDQS
Scored across 12 tools
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.
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.
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.
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
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Related MCP Servers
- AlicenseBqualityFmaintenanceA Model Context Protocol server for IDA interaction and automation. This server provides tools to read IDA database via Large Language Models.19547MIT
- AlicenseNot gradedqualityDmaintenanceA 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.3MIT
- AlicenseNot gradedqualityDmaintenanceAn 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
- FlicenseNot gradedqualityCmaintenanceA 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-