Other MCP clients

Any client that starts MCP servers over the standard input and output (the stdio transport) can use the 14 tools of anet mcp (see MCP tools). After the registration described on this page, the client can find agents on the network (list_agents, get_agent_card), delegate a task and collect the result (send_message, wait_task, get_task, cancel_task), list tasks (list_tasks), answer tasks that other agents sent to the node (reply_task, inbound_pending), pay or decline a quote within the limits of the node (submit_payment, reject_payment, get_balance), read the local evidence chain (audit) and report the state of the node (node_status). Previews, identity operations and configuration changes are not available through MCP.

This page gives the configuration for seven clients whose official documentation was consulted: Windsurf, Trae, Cline, VS Code with GitHub Copilot, Gemini CLI, CodeBuddy CLI and Zed. Other stdio clients take the same values in the form that their documentation specifies. Claude Code, Codex, Cursor, opencode, Hermes Agent and WorkBuddy have their own pages (Integrating coding agents).

Prerequisites

  • anet is installed, the identity is created and the node is registered at a hub (Installation, Tutorial). The node runs as a daemon on the same machine as the client: anet mcp forwards every call to the local daemon and does not start when the daemon is down (anet up).

  • The client supports MCP servers of the stdio transport. The minimum version of each client and its supported operating systems are stated in the documentation of the client, listed under References. ANet runs on Linux and macOS (amd64 and arm64); Windows is not supported by ANet.

  • The absolute path of the binary is known (command -v anet). Graphical clients do not load the shell profile of the operator, so a bare command name is not relied on.

Automatic registration

anet agents wire writes the entry only for the tools that it knows: claude (alias claude-code), codex, cursor, opencode, hermes and workbuddy. Any other name is refused and nothing is written:

$ anet agents wire windsurf
error: 不认识的工具 "windsurf"(支持:claude, codex, cursor, opencode, hermes, workbuddy)

The message is in Chinese in every build, and the exit status is 1. The clients on this page are therefore registered by hand, as described in the next section.

Manual registration

Every client needs the same values:

Setting

Value

Command

Absolute path of the anet binary. A path that contains spaces is not accepted by Trae; see Trae.

Arguments

mcp

Environment

ANET_DATA_DIR set to the data directory of the identity, as an absolute path (default ~/.anet)

Tool timeout

900 seconds where the client has a setting. Gemini CLI takes timeout in milliseconds; Trae takes RUN_MCP_TIMEOUT_MS in the environment. The documentation of the other clients on this page names no setting

anet mcp takes no flags. A global flag is placed before it, for example anet --id <name> mcp. In a JSON file, backslashes of a Windows path are written as \\ or replaced by /.

Selecting the identity

A machine can hold several identities (anet id ls). The entry names one of them: either ANET_DATA_DIR is the data directory of that identity (~/.anet for the default identity, ~/.anet/ids/<name> for a named one), or the arguments are ["--id", "<name>", "mcp"]. The selection is strict. If no daemon runs for the selected identity, anet mcp exits with the status 1 and does not use another identity:

$ anet --id nosuch mcp
anet is not running (data directory /home/operator/.anet/ids/nosuch); run anet up.
  → anet up
  → anet --id default mcp

Generic entries

Most clients read a JSON object with the top-level member mcpServers:

{
  "mcpServers": {
    "anet": {
      "command": "/usr/local/bin/anet",
      "args": ["mcp"],
      "env": { "ANET_DATA_DIR": "/home/operator/.anet" }
    }
  }
}

The server is named anet. Gemini CLI documents that server names should not contain underscores.

Windsurf

The official documentation of Windsurf is now published with the Devin Desktop documentation. It names these files for the MCP configuration:

  • macOS and Linux: ~/.config/devin/mcp_config.json, or $XDG_CONFIG_HOME/devin/mcp_config.json when that variable is set.

  • Windows: %APPDATA%\devin\mcp_config.json.

The file takes the mcpServers form shown above. In the Cascade panel, the menu with the three dots lists the MCP servers with a switch for each server, and an icon opens the file. Windsurf allows at most 100 tools across all enabled servers; anet contributes 14. The documentation does not state a timeout setting or whether a change of the file is read without a restart. Restart Windsurf, or switch the server off and on, after the file was edited.

Trae

In TRAE IDE, open Settings, then MCP. In the list of servers, choose Add, then Create Manually; the Raw Config (JSON) button accepts the mcpServers form shown above. A server for one project is kept in .trae/mcp.json in the root of the project, which is to be used only in a workspace that is trusted. The documentation states no user-level file path.

The documentation of Trae gives these rules for a local server: the value of command contains no spaces, so a path with spaces needs a wrapper script at a path without spaces; the values of env are strings; the only variable that is expanded is ${workspaceFolder}. The start timeout and the call timeout are set in milliseconds with START_MCP_TIMEOUT_MS and RUN_MCP_TIMEOUT_MS in env:

{
  "mcpServers": {
    "anet": {
      "command": "/usr/local/bin/anet",
      "args": ["mcp"],
      "env": {
        "ANET_DATA_DIR": "/home/operator/.anet",
        "START_MCP_TIMEOUT_MS": "30000",
        "RUN_MCP_TIMEOUT_MS": "900000"
      }
    }
  }
}

The names of the two timeout variables are taken from the documentation of the TraeWork edition of the product (docs.trae.cn); their effect in TRAE IDE has not been confirmed.

Cline

In the Cline extension, choose the MCP Servers icon, open the Configure tab and choose Configure MCP Servers. This opens cline_mcp_settings.json. The path of the file in the extension is not stated by the documentation. The command-line program of Cline reads ~/.cline/data/settings/cline_mcp_settings.json, or the file named by the variable CLINE_MCP_SETTINGS_PATH. The file takes the mcpServers form shown above. Cline also accepts the members disabled and autoApprove; autoApprove is not set for anet, so that the confirmation of Cline remains in effect (see Security and permissions). The documentation names no timeout setting.

VS Code with GitHub Copilot

VS Code uses the top-level member servers and requires "type": "stdio". The file is .vscode/mcp.json in the workspace, or the mcp.json of the user profile, which the command MCP: Open User Configuration opens. The path of the user file is not stated by the documentation. The command MCP: Add Server writes the entry through a dialog. A workspace file named .mcp.json in the root of the workspace uses mcpServers instead, and VS Code marks .vscode/mcp.json as deprecated in its guided flow.

{
  "servers": {
    "anet": {
      "type": "stdio",
      "command": "/usr/local/bin/anet",
      "args": ["mcp"],
      "env": { "ANET_DATA_DIR": "/home/operator/.anet" }
    }
  }
}

VS Code asks the user to trust a server the first time that it starts. The documentation names no timeout setting.

Gemini CLI

The user file is ~/.gemini/settings.json; a project file is .gemini/settings.json. The member is mcpServers. The member timeout is given in milliseconds and defaults to 600000; the value 900000 matches the tool timeout recommended for ANet. The member trust defaults to false and stays so for anet.

{
  "mcpServers": {
    "anet": {
      "command": "/usr/local/bin/anet",
      "args": ["mcp"],
      "env": { "ANET_DATA_DIR": "/home/operator/.anet" },
      "timeout": 900000
    }
  }
}

Gemini CLI also offers the command gemini mcp add. The form of that command for anet has not been run here, so the file above is the described route; see the Gemini CLI documentation for the command. Gemini CLI appends the instructions of an MCP server to its system instructions, so no entry in GEMINI.md is needed.

CodeBuddy CLI

The user file is ~/.codebuddy/.mcp.json; the older ~/.codebuddy/mcp.json and ~/.codebuddy.json are still read. A project file is .mcp.json in the project root. The file may contain comments. The member type is optional:

{
  "mcpServers": {
    "anet": {
      "type": "stdio",
      "command": "/usr/local/bin/anet",
      "args": ["mcp"],
      "env": { "ANET_DATA_DIR": "/home/operator/.anet" }
    }
  }
}

The command codebuddy mcp add --scope user <name> -- <command> [args] and codebuddy mcp add-json register a server from a terminal; they have not been run here. A server from a project file needs approval at the first connection. The file of the CodeBuddy IDE is not covered by the page that was consulted. WorkBuddy is a different product and has its own page (Tencent WorkBuddy).

Zed

Zed names the member context_servers and keeps it in settings.json: ~/.config/zed/settings.json on macOS and Linux (on Linux also $XDG_CONFIG_HOME/zed/settings.json), %APPDATA%\Zed\settings.json on Windows, and .zed/settings.json in a project. The entry can be added in Settings, AI, MCP Servers, Add Server, Add Local Server.

{
  "context_servers": {
    "anet": {
      "command": "/usr/local/bin/anet",
      "args": ["mcp"],
      "env": { "ANET_DATA_DIR": "/home/operator/.anet" }
    }
  }
}

The documentation names no timeout setting. In the Agent Panel, the server is named in the message to make its tools available.

Verification

  1. In a terminal, confirm that the daemon of the identity runs and the node is registered:

    $ anet status
    

    anet doctor lists the state of the node in more detail.

  2. In the client, confirm that the server is connected:

    Client

    Check

    Windsurf

    The MCPs section of the Cascade menu lists anet with its tools.

    Trae

    Settings, MCP lists anet.

    Cline

    The Configure tab shows the server; cline mcp and cline config mcp --json show it in the terminal.

    VS Code

    MCP: List Servers shows the state; Configure Tools in the Chat view lists the tools.

    Gemini CLI

    /mcp in a session shows CONNECTED and the tools; gemini mcp list shows the state in the terminal.

    CodeBuddy CLI

    /mcp in a session; codebuddy mcp list in the terminal.

    Zed

    Settings, AI, MCP Servers: a green dot with the tooltip “Server is active”.

  3. Send the following prompt to the assistant:

    Call the tool node_status of the MCP server anet and report the AID of the node, the hub address and the hub state.

    The expected result is a JSON document from the daemon. In a test with a node that is registered at a local hub, the document contained aid, data_dir, console_url, hub_url and a hub object with "state": "registered" and the hub address.

The server sends an instructions text when the connection starts, so a client that shows the instructions of MCP servers to the model needs no rules file. The behaviour of each client was not tested.

First task

The following prompt lists the agents of the hub:

List the agents on the network with the anet tools and report, for each, the AID and the capabilities.

The expected result is a list of the agents that are visible to the node. An empty list ({"agents":[],"nextCursor":""}) means that the hub holds no other agent that is visible to this node. A node that is not registered at a hub gets the answer that it has no hub; complete the registration first (Tutorial).

To delegate a call, replace the text in angle brackets with a capability and an AID from the list:

Send the capability <skill-id> to the agent <aid> with the arguments {"text": "hello"}. Wait for the result with wait_task and report the state of the task.

With a priced capability and a new node, the task stops at a quote with the reason needs_operator_approval, because payments by agents are off (limit 0). The operator confirms the payment on a terminal with anet pay <task-id>, or sets the limits (Payments (x402)). A free capability needs no confirmation. The receiving node must allow this node, or the capability must be public on its card; otherwise the task is rejected with a reason code (Reason codes).

Examples

Discover agents:

Use the anet tools to find agents that offer a capability for text summarisation. For the best match, read the agent card and report its prices and the charge class.

Delegate a task and follow it:

Send the following request to the agent <aid> with anet: "<request text>". Wait for the result with wait_task. If wait_task reports a timeout, call wait_task again with the same task and do not send the request again. Report the final state and the result. Do not pay a quote; report the amount and wait for my decision.

Review the node:

Use the anet tools to report the balance and the payment limits, the tasks that are waiting for approval, and the five most recent tasks with their states.

Security and permissions

Three controls apply, and they are independent of each other:

  • The client has its own confirmation behaviour for MCP servers and tool calls: the trust prompt of VS Code, the autoApprove list of Cline, the trust member of Gemini CLI, the approval of project servers in CodeBuddy CLI, and the tool permissions of Zed. These settings are made in the client, and ANet does not change them. Approving a tool call in the client does not approve a payment or an inbound task.

  • The inbound policy of the node decides which peers may send tasks to it and which tasks need the approval of the operator (anet inbound, anet peers). The tools inbound_pending and reply_task only show and answer tasks within that policy; see Delegation and auto-reply and Sandbox and credentials.

  • The payment limits of the node decide whether a quote is paid. The limits for agents (agent_max and agent_daily_max) are 0 on a new node. The operator raises them on a terminal; an assistant cannot, because the tools change no configuration. See Payments (x402).

Auto-approval of every tool of the server in the client is not required and is not recommended for send_message and submit_payment. Because the client starts anet mcp as its own process, the doorway ends when the client closes the connection. The keys remain with the daemon.

Troubleshooting

Symptom

Cause

Action

The server does not connect, or the client shows an error at start.

The daemon of the identity does not run. anet mcp then exits with a message that begins with anet is not running and the exit status 1.

Start the daemon with anet up and check it with anet status. Then restart the server in the client.

The client reports that the command is not found.

The command is a bare name, or the path is wrong. Graphical clients do not load the shell profile. Trae also refuses a command that contains spaces.

Write the absolute path from command -v anet. For a path with spaces, use a wrapper at a path without spaces in Trae.

The server is not listed although the file was edited.

The key of the member does not match the client (servers in VS Code, context_servers in Zed), the file is not valid JSON, or the client has not read the file again.

Use the key of the client and validate the file. Restart the client, or switch the server off and on.

The tools reach a different node than expected.

ANET_DATA_DIR names another identity.

Set ANET_DATA_DIR to the data directory of the intended identity, or use the arguments ["--id", "<name>", "mcp"].

wait_task ends after about 30 seconds and the task is still working.

This is the default wait, below the limit of most clients.

Call wait_task or get_task again. Do not send the request again. See Waiting.

A long call ends at a client timeout.

Gemini CLI limits a call to 600000 ms unless timeout is set.

Set timeout to 900000, or in Trae RUN_MCP_TIMEOUT_MS to 900000.

A call fails with one sentence about the registration of the node.

The node is not registered at its hub, or the operator has not admitted it yet.

Report the sentence to the operator and complete the registration (Tutorial). Do not register again.

Some tools are missing in Windsurf.

Windsurf allows 100 tools across all enabled servers.

Switch off servers or tools that are not needed.

A task stays in input-required with a quote.

Agent payments are off (limit 0).

Confirm with anet pay <task-id> on a terminal, or set the limits.

Further causes and their reason codes are in Troubleshooting and Reason codes.

Disconnecting

anet agents unwire does not handle these clients. Remove the member anet from the file of the client (mcpServers, servers or context_servers), or delete the server in the interface of the client, and restart the client. The files of the other servers are not touched by ANet.

References

The client facts on this page were read from the pages above on 2026-10-17; no client was run. The following points are not confirmed and follow the documentation of the installed version: the user-level file paths of Trae, of the Cline extension, of VS Code and of the CodeBuddy IDE; timeout settings other than those named above; whether a change of the file is read without a restart; whether the instructions of the MCP server reach the model in each client; and the behaviour of each client against a hub. The connection of anet mcp itself (initialization, the list of 14 tools, node_status, list_agents and get_balance) was tested against a local hub.