logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

idb-mcp-gateway

Facilitate programmatic access and automated manipulation of IDA Pro database contents leveraging Large Language Models via the Model Context Protocol. Enhances reverse engineering workflows through LLM-driven database querying.

Author

idb-mcp-gateway logo

MxIris-Reverse-Engineering

MIT License

Quick Info

GitHub GitHub Stars 478
NPM Weekly Downloads 0
Tools 1
Last Updated 2026-02-19

Tags

idaapisdatabasesida databasessearch idaautomate ida

IDA Database Model Context Protocol Service Interface

[!IMPORTANT] The native idalib operational mode is currently undergoing refinement. Future iterations of this feature (requiring IDA Pro 9.0 or newer) will decouple functionality from the need for explicit IDA plugin installation or running the main IDA executable.

Service Overview

This server acts as an MCP endpoint specifically engineered for interfacing with IDA Pro's internal database structures. It exposes IDA data to be interpreted and queried by Large Language Models.

Be advised that the mcp-server-ida project remains in its nascent stages. Its current feature set and exposed tooling are provisional and subject to substantial iteration and expansion as development progresses.

Setup Procedures

Preferred Method: Utilizing uv

When employing the uv package manager, direct installation is circumvented. We leverage uvx to execute the mcp-server-ida utility immediately upon demand.

Standard Installation: Using PIP

Alternatively, the package can be acquired via the standard Python package installer:

pip install mcp-server-ida

Once installed, execution is facilitated via the Python module runner:

python -m mcp_server_ida

IDA Pro Integration Requirements

For full functionality, copy the following files from your repository source into IDA Pro's designated plugin folder:

  • repository/plugin/ida_mcp_server_plugin.py
  • The directory repository/plugin/ida_mcp_server_plugin

Target Locations:

  • Windows: %APPDATA%\Hex-Rays\IDA Pro\plugins
  • Unix-like Systems (Linux/macOS): $HOME/.idapro/plugins (e.g., ~/.idapro/plugins)

Reference for Plugin Management: Igor's Tip of the Week #103

Configuration for Claude Desktop

Integrate the following configuration stanza into your claude_desktop_config.json file:

Configuration for uvx Execution
"mcpServers": {
  "ida": {
    "command": "uvx",
    "args": [
        "mcp-server-ida"
    ]
  }
}
Configuration for PIP Installation Execution
"mcpServers": {
  "ida": {
    "command": "python",
    "args": [
        "-m", 
        "mcp_server_ida"
    ]
  }
}

Diagnostics and Inspection

Debugging connectivity or server output can be achieved using the MCP inspector tool. For installations managed by uvx:

npx @modelcontextprotocol/inspector uvx mcp-server-ida

If you are operating from a local development checkout or a manually specified installation path:

cd /path/to/mcp-server-ida/src
npx @modelcontextprotocol/inspector uv run mcp-server-ida

Server operational logs, useful for troubleshooting, can be monitored in real-time using standard logging utilities:

tail -n 20 -f ~/Library/Logs/Claude/mcp*.log

Local Development Testing

For developers actively modifying the source code, testing changes can be performed in two primary ways:

  1. Running the MCP inspector utility to immediately validate protocol functionality. Refer to the Debugging section for execution details.

  2. Direct interaction testing via the Claude desktop application. This requires updating claude_desktop_config.json as follows:

UVX Development Configuration

{
"mcpServers": {
  "ida": {
    "command": "uv",
    "args": [ 
      "--directory",
      "/<path to mcp-server-ida>",
      "run",
      "mcp-server-ida"
    ]
  }
}

Visual Documentation

== The XMLHttpRequest API ==

The XMLHttpRequest (XHR) API furnishes a JavaScript object interface designed to dispatch HTTP requests between a web browser environment and a remote web server. Its core functionality empowers client-side applications, operational post-page-load, to asynchronously solicit information from the server and receive data back. XHR is foundational to the Asynchronous JavaScript and XML (Ajax) programming paradigm. Before Ajax gained prominence, server communication was predominantly handled via traditional hyperlink navigation and HTML form submissions, operations that invariably necessitated a full page reload.

== Genesis ==

The underlying concept for XMLHttpRequest was first conceptualized around the year 2000 by engineers working on Microsoft Outlook. This concept was subsequently integrated into the Internet Explorer 5 browser release (1999). However, the initial implementation did not utilize the standardized XMLHttpRequest string identifier. Instead, developers relied on COM object instantiation via ActiveXObject("Msxml2.XMLHTTP") or ActiveXObject("Microsoft.XMLHTTP"). By the time Internet Explorer 7 was released (2006), all major browsers had adopted the official XMLHttpRequest identifier.

Today, this identifier serves as the established convention across all primary browser rendering engines, including Mozilla's Gecko (since 2002), Safari 1.2 (2004), and Opera 8.0 (2005).

=== Standardization Efforts ===

The World Wide Web Consortium (W3C) formally published a Working Draft specification for the XMLHttpRequest object on April 5, 2006. A subsequent Working Draft for Level 2 followed on February 25, 2008, introducing enhancements such as mechanisms for tracking request progress, enabling cross-origin communication (CORS), and methods for handling raw byte streams. By the close of 2011, the Level 2 additions were merged back into the primary specification document. In late 2012, the maintenance of this specification was transferred to the WHATWG, which now maintains a live document utilizing Web IDL definitions.

== Operational Workflow ==

Executing a typical network request using XMLHttpRequest necessitates adherence to a sequence of programmatic phases:

  1. Instantiation: Create an instance of the XMLHttpRequest object by invoking its constructor.
  2. Setup: Invoke the open() method to define the request method (e.g., GET, POST), specify the Uniform Resource Identifier (URI) of the target resource, and declare whether the operation will be synchronous or asynchronous.
  3. Event Handling (Asynchronous Only): For asynchronous operations, assign a callback function (listener) that will be triggered upon changes in the request's state.
  4. Transmission: Commence the actual network transfer by executing the send() method, optionally supplying request payload data.
  5. Response Processing: Monitor the state changes within the event handler. Upon successful completion (state transitions to 4, the "done" state), the server's response content is typically accessible via the responseText property.

Beyond these fundamental steps, XHR offers advanced controls. Custom HTTP headers can be injected to guide server behavior, and data can be transmitted to the server via the argument passed to send(). Response data can be automatically deserialized from JSON format into native JavaScript objects or processed incrementally as chunks arrive, avoiding wait times for full document reception. Furthermore, requests can be forcefully terminated prematurely or configured with timeouts to prevent indefinite blocking.

== Cross-Origin Interactions ==

In the nascent stages of the World Wide Web, it was observed that permitting unrestricted communication between a document hosted on one domain and a server on a different domain could lead to security vulnerabilities (e.g., clickjacking or data exfiltration). The initial architecture presented barriers to such cross-domain resource fetching, a limitation that later required the development of specific security policies and mechanisms (like CORS) to facilitate controlled external data access.

See Also

`