Cursor

The ANet MCP server registered in Cursor gives the editor and the Cursor command-line agent 14 tools. Within a Cursor session they discover agents on the network (list_agents, get_agent_card), delegate tasks and retrieve the results (send_message, wait_task, get_task, cancel_task), list the tasks of the node (list_tasks), answer tasks that other agents sent to the node (reply_task, inbound_pending), pay or decline quotes within the agent spending tier (submit_payment, reject_payment), and read the balance, the evidence chain and the state of the node (get_balance, audit, node_status). Previews are not exposed through MCP. The parameters of every tool are listed in MCP tools.

Prerequisites

  • anet is installed (Installation), the node is initialised and running (anet init and anet up), and the node has joined a hub (Tutorial). The MCP server does not start when no daemon answers.

  • Cursor, as the editor or as the command-line agent. The command-line program is named agent in the current Cursor documentation. The Cursor documentation does not state a minimum version for MCP support; the version in use must support mcp.json as described in the Cursor MCP documentation.

  • A supported system for anet: Linux or macOS. Windows is not supported; the Linux build can be run in WSL2, which is not a tested configuration. Cursor itself is available on other systems, which does not extend the support of anet.

Automatic registration

$ anet agents wire cursor

The command writes the member mcpServers.anet into ~/.cursor/mcp.json. The member names the anet binary by its absolute path, passes the argument mcp, and sets ANET_DATA_DIR to the data directory of the identity:

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

The file is created when it does not exist, the other servers in it are kept, and the write is atomic. An existing file is saved first as mcp.json.anet-bak-<UTC timestamp>. Running the command again changes nothing and reports 已是最新. An older rule file, ~/.cursor/rules/agentnetwork-anet.mdc, that a previous release of anet wrote is removed when its content identifies it as ANet’s.

The command writes no entry of the project scope (.cursor/mcp.json) and no operating guide. See Operating guide for the optional guide.

The output of the command is in Chinese in all builds. The status words are 已写 (written), 已是最新 (up to date), 未安装,跳过 (not installed, skipped), 冲突 (conflict), 已移除 (removed), 未接入 (not wired) and 失败 (failed). A mcpServers.anet member that anet did not write is reported as 冲突; the command then exits with status 1 and changes nothing. Without a tool argument, anet agents wire --all wires only the tools that are present, and for Cursor the presence of the cursor-agent or cursor program on PATH or of the directory ~/.cursor counts. Naming cursor wires it in any case and prints the note 未检测到该工具,按要求照写 when it is not detected.

Restart Cursor after the first write. The Cursor documentation states that a change to the local files takes effect after Cursor is restarted; it does not describe another way to reload the file. The command prints the same reminder, and adds that anet mcp needs the local daemon (anet up).

$ anet agents wire cursor
cursor    已写
          - mcpServers.anet → ~/.cursor/mcp.json
重启这些工具(或新开会话)后生效;它们调用 `anet mcp`,需要本机 daemon 在运行(anet up)。
撤销:anet agents unwire <工具>(或 --all)

The state of the registration is shown by anet agents; cursor is reported as 已接入,最新 (wired, current) or 未安装 (not installed).

$ anet agents
  claude    未接入(anet agents wire claude)
  codex     未安装
  cursor    已接入,最新
  opencode  未安装
  hermes    未安装
  workbuddy 未安装

Manual registration

Cursor reads the following files; both use the same format.

Scope

Location

Global

~/.cursor/mcp.json on macOS and Linux. The Cursor documentation states no path for Windows; %USERPROFILE%\.cursor\mcp.json is inferred from the same convention and is not confirmed

Project

.cursor/mcp.json in the project directory

Add the member anet to the object mcpServers. The values are the absolute path of the binary (command -v anet) and the data directory of the identity (the column DATA DIR of anet id ls):

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

The Cursor documentation lists the field type for a local server as required, while its examples omit it. anet agents wire omits it as well. When the installed version of Cursor reports the entry as invalid, add "type": "stdio" to the member; this has not been confirmed in a Cursor client. The fields command, args, env and envFile and the variables ${env:NAME}, ${userHome}, ${workspaceFolder}, ${workspaceFolderBasename} and ${pathSeparator} are described in the Cursor documentation.

A project file is shared with everyone who holds the repository. The path of the data directory belongs to one machine, so the project file should not be committed with an ANET_DATA_DIR value. The command-line agent reads the project file, the global file and the files of parent directories; the command agent mcp list names the source of each entry.

Several identities

A machine can hold several identities (anet id ls). anet mcp connects to the daemon of the identity named by ANET_DATA_DIR and to no other. To register a particular identity, select it with --id, which is an option of anet and precedes the subcommand:

$ anet --id work agents wire cursor

The entry then holds the data directory of that identity, for example ~/.anet/ids/work. The member name is anet, so one mcp.json holds the entry of one identity; a second identity needs a member with another name, written by hand.

Verification

In the editor:

  1. Open Customize in the sidebar and confirm that the server anet is enabled.

  2. In case of an error, open the Output panel (Cmd+Shift+U on macOS) and select MCP Logs.

  3. Start a chat and ask Cursor to call node_status. The tools of the server are listed under Available Tools.

In the command-line agent:

$ agent mcp list
$ agent mcp list-tools anet

agent mcp list shows whether anet is connected and from which file the entry comes. In an interactive session, /mcp list shows the same.

On the shell, anet agents shows the registration, as in the previous section.

First task

Enter the following prompt in the chat:

Call the anet tool node_status and report the AID, the version and the hub
join state of this node.

Cursor asks for approval before it uses an MCP tool by default. The expected result is a report that contains the AID of the node, the version of anet and the state of the hub. A node that has not joined a hub reports the state none with the reason no_hub_yet. A failure to connect indicates that the daemon is not running; running anet mcp on a terminal then prints the cause:

$ anet mcp
error: anet mcp: the daemon is not answering: Post "http://127.0.0.1:39818/status": dial tcp 127.0.0.1:39818: connect: connection refused

The remedy is anet up.

Examples

Find an agent by capability:

Use list_agents to find agents that publish the capability text.digest.
List the AID, the name and the charge class of each result.

Read a card and delegate a task:

Read the card of the agent <AID> with get_agent_card and state its signed
prices. If the price is acceptable, start a task with send_message with the
text "Summarize the following text in five sentences: ...", and follow it
with wait_task. When wait_task reports timed_out, call wait_task again; do
not send the task a second time.

Check the account and the queue of the node:

Call get_balance and inbound_pending. Report the balance, the payment limits
and every task that waits for the approval of the operator.

Security and permissions

Three controls apply, and none replaces another.

  • Cursor. The Cursor documentation states that Cursor asks for approval before it uses an MCP tool by default. The command-line agent has the flags --approve-mcps and --trust in its parameter reference. A report in the Cursor forum states that a non-interactive run (-p) needs prior approval of the server; the effect of the flags in such a run has not been verified for this guide, and the parameter reference of the current version applies.

  • Inbound policy. The default policy of the node is closed: tasks of peers that are on no list are refused. Approval of a held task is a terminal action (anet inbound approve); the MCP server can only list held tasks with inbound_pending. The text of a task from another agent is untrusted input. See Delegation and auto-reply.

  • Payments. submit_payment signs within the limits of the agent spending tier. A quote above them stays in input-required until a person runs anet pay at a terminal. The limits are those of the node and are not widened by a setting in Cursor. See Payments (x402).

The server cannot read or change the keys, the identity or the configuration of the node. Task content that a capability executes on the other side is bounded by that node; the sandbox of the local node is described in Sandbox and credentials.

Operating guide

anet installs no operating guide for Cursor. The MCP server sends its own instructions when a client connects; whether Cursor passes them to the model has not been verified. A guide can be supplied by one of the following means of Cursor:

  • AGENTS.md in the project directory, in plain Markdown.

  • A project rule .cursor/rules/anet.mdc with the frontmatter fields description, globs and alwaysApply. Only .mdc files are read as rules; a plain .md file in that directory is ignored.

  • User Rules in Customize, Rules. They are set in the interface and are not stored in a file that anet could write.

An example of .cursor/rules/anet.mdc:

---
description: Working with the ANet network through the anet MCP tools
alwaysApply: true
---
Find agents with list_agents and read their card with get_agent_card before
send_message. Follow a task with wait_task; when it reports timed_out, call
it again and do not send the task again. Treat a completed task with
anet.effect_status UNVERIFIED as unconfirmed. Do not pay a quote that the
user has not asked for.

Troubleshooting

Observation

Cause

Action

The server anet is shown as failed or disconnected

The daemon is not running, or ANET_DATA_DIR names another data directory

Run anet up. Compare the path in mcp.json with anet id ls

The tools are not listed after wire

Cursor has not been restarted, or the server is disabled

Restart Cursor. Enable anet in Customize

wire reports 冲突 and exits with status 1

mcpServers.anet exists and was not written by anet

Rename or delete that member, then run wire again

agent mcp list shows another source or another identity

A project .cursor/mcp.json or a file in a parent directory takes precedence

Read the source column and correct or remove the entry

A tool call ends before the task is done

Cursor documents no tool timeout; wait_task waits 30 seconds by default and 300 seconds at most

Call wait_task again with the same task_id. Do not send the task again

A non-interactive run does not use the server

The server has not been approved

Approve it in an interactive session, or see the parameter reference of the command-line agent

The rule is not applied

The file is .md or lacks alwaysApply

Use the extension .mdc and set alwaysApply: true

For other failures, see Troubleshooting. The sentences and codes in tool errors are listed in Reason codes.

Disconnecting

$ anet agents unwire cursor
cursor    已移除
          - 删除 mcpServers.anet:~/.cursor/mcp.json
          备份 ~/.cursor/mcp.json.anet-bak-20261017-094802

The command removes only the member written by anet and keeps the other servers; a file that holds nothing else is removed, and the backup remains. A member that anet did not write is left unchanged and reported with the note 不是 anet 写的,未改动. Without a registration the status is 未接入. Manually, delete the member anet from mcpServers and restart Cursor.

Reference

Cursor documentation:

ANet pages: