> For the complete documentation index, see [llms.txt](https://docs.hex-rays.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hex-rays.com/add-ons/assist/concepts/mesh.md).

# Assist Mesh

Real targets rarely fit in one database: a main executable, its plugins, a bootloader, a driver. With the **Assist Mesh**, every IDA instance you run with Assist on the same machine joins one mesh, so work that starts in one database can draw on the others. You can ask across all the files you have open, whether you ask from the Assist panel or through an MCP client.

![Assist Mesh in the Assist guide](https://492083732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFP6ibt8r6WPBHTqekG9u%2Fuploads%2Fgit-blob-66734420b0025a1fe97f38737b7126bf81a0e091%2Fmesh-assist.png?alt=media)

## Nodes

A **node** is one IDA instance running Assist. It joins the mesh once it has a database open, with nothing to set up. It stays on the mesh even with its Assist panel closed, unless you turn off **Keep linked when chat is closed** in the [mesh settings](#mesh-settings). A call routed to a node runs in that node: on its database, under its permissions.

Each node has an ID and one of two roles:

* **Mesh MCP listener**: the one instance that leads the mesh. It holds the Mesh MCP listener and routes calls to the rest.
* **Node**: every other open instance.

If the leading instance closes, another open instance takes over, and the MCP clients you allowed stay allowed.

MCP clients, such as Claude Code, connect to the mesh through [Assist MCP](#assist-mcp), but they are not nodes themselves.

In the example below, `lockctl` is open in one IDA instance and its three libraries in others. From `lockctl`, a call can target one peer by name or run across the whole mesh. One node holds the gateway socket that `assist --mcp` connects to.

![An Assist Mesh with four nodes and an external agent connected through Assist MCP](https://492083732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFP6ibt8r6WPBHTqekG9u%2Fuploads%2Fgit-blob-9302c31dd1961f27d483f37c0957aada06d7b0d4%2Fmesh-diagram-assist.png?alt=media)

## Working across databases

* **From the Assist panel.** Ask from any IDA window. The agent can work in every other linked database you have not hidden. For example, from the panel of a main executable, ask how it calls into a plugin open in another window.
* **From an MCP client.** Connect once through Mesh MCP, then choose which open database to work in.

### Status in the Assist panel

The Assist panel shows the mesh status in two indicators:

* **Assist MCP**: green once Assist is connected in this window and has joined Mesh MCP, red when it has not. Hover it to see clients waiting for your approval.
* **Linked**: how many databases are linked, counting this one. It shows once another database joins. Click it to hide or show nodes.

### Hide a node

Click **Linked** in the Assist panel and uncheck a node to hide it. The current window stops counting the hidden node and stops sending work to it. The node stays open in IDA.

Hiding works in one direction only. A hidden node can still read the current database, because linked databases read each other's analysis without asking.

### Findings travel on request

Assist can send confirmed findings, stored as [memories](/add-ons/assist/concepts/memory.md), to your other databases. By default, Assist asks you before each send. Memories that arrive from linked databases are always held for your review. To change how sending works, use **Send memories** in the [mesh settings](#mesh-settings).

Incoming memories wait in the Memory browser (**Settings → Memory**, `/memory`) with the **INBOUND-PENDING** badge. They're never used until you click **Accept**. See [Memory → Provenance badges and linked databases](/add-ons/assist/concepts/memory.md#provenance-badges-and-linked-databases).

## Assist MCP

Assist provides its own MCP server, **Assist MCP**, so that external agents, such as Claude Code, Codex or Grok in a terminal, can use your open databases through Assist. It is set up from the onboarding wizard, under [Bring your terminal agent](/add-ons/assist/getting-started.md#bring-your-terminal-agent-optional).

An MCP client starts the bundled `assist` program over stdio with `assist --mcp`. It speaks Assist's local protocol to the mesh gateway, so an external client gets the same tools, the same permission checks and the same mesh as the Assist panel. The first time a client connects, IDA asks whether to allow it.

{% hint style="info" %}
Assist MCP is not the same as [IDA MCP](/add-ons/mcp/overview.md). Assist MCP connects external agents to the IDA instances you have open, through Assist. IDA MCP is a separate add-on for bulk, headless analysis and agentic pipelines.
{% endhint %}

### Which database runs a call

When an MCP client calls a tool, Assist picks the target database in this order:

1. An explicit target in the call.
2. `scope: "mesh"`, to run across the mesh.
3. The database the connection selected with `use_database`.
4. The only open database, if there is just one.
5. Otherwise, the call is refused. Assist never falls back to a database you did not choose.

### When IDA is not available

The connection is designed so that an external agent never runs a call twice by accident:

| Situation                             | What happens                                                                                                    |
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| IDA is not running                    | Tools are listed from the last live list or the built-in manifest. Calls return "not reachable, safe to retry". |
| IDA comes up                          | The next call reconnects and runs; a `tools/list_changed` notification follows.                                 |
| The connection drops mid-call         | No blind retry: the client is told the call "may already have run".                                             |
| The gateway moves to another instance | The bridge replays `initialize` and `use_database`, and the session continues.                                  |

## Permissions still apply

Every call is checked against [Permissions](/add-ons/assist/concepts/permissions-and-privacy.md) in the instance where it runs. Mesh and MCP calls cannot ask for approval, so anything set to **Ask when needed** is refused. Read-only analysis always runs. Whether any caller, including mesh calls, may change a database is set in **Settings → Permissions**.

## Mesh settings

Open the mesh settings in **Settings → Preferences… → Sharing & network**, or type `/sharing` in the Assist panel. The page has three parts: **Mesh**, **Mesh MCP** and **Network endpoint**.

### Mesh

* **Keep linked when chat is closed**: keeps the instance on the mesh while its Assist panel is closed. Turn it off to have the instance leave the mesh when you close the panel.
* **Send memories**: whether Assist asks before this database sends memories to linked databases. Memories that arrive from linked databases are always held for review.
* **Connected nodes**: the linked databases, with their node ID and state. Use **Manage linked databases** to manage them.

Linked databases on the same machine read each other's analysis without asking. They run as you, on your machine, and each database's own [permissions](/add-ons/assist/concepts/permissions-and-privacy.md) still apply.

### Mesh MCP

One local endpoint connects external agents to every open IDA instance. This part lists ready-to-copy commands that register [Assist MCP](#assist-mcp) with Claude Code, Codex, Grok and Antigravity CLI, plus a JSON snippet for other agents (`mcp.json` or `config.json`). The bundled `assist` command finds the current endpoint itself, so there is no credential to copy.

### Network endpoint

Nodes talk over private sockets that only your user account can open. Nothing listens on a network address unless you open the network endpoint.

The network endpoint lets an external MCP agent running in a VM or on another computer connect to your open IDA session. To turn it on, tick **Open a network endpoint** (`/network`).

* The change applies immediately: clicking **Cancel** in Preferences doesn't undo it.
* The endpoint is off by default and is never saved across restarts. The port closes and its connection code expires when you untick the checkbox, or when no IDA instance on the machine is linked anymore.
* When it's on, Assist opens a temporary TCP port (`20000`–`32767`) on the address you choose, or on `127.0.0.1` for an SSH tunnel, and generates a connection code. The code stays valid while the endpoint is on, and changes when you turn it off and on again.
* To connect a client, copy the agent configuration from this page. It runs `assist --mcp --connect <ip:port>`, with the code in `ASSIST_MCP_CONNECTION_CODE`.

A client that connects from another machine always needs your approval, unless **New connections** is set to **Deny all**. See [Permissions & Privacy → Assist Mesh and external MCP clients](/add-ons/assist/concepts/permissions-and-privacy.md#assist-mesh-and-external-mcp-clients).

{% hint style="info" %}
Check the Assist integrated guide via **Settings → Guide → Assist Mesh**.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.hex-rays.com/add-ons/assist/concepts/mesh.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
