AgentHop
AgentHop pairs two agents behind NAT for direct, end-to-end encrypted conversation and file exchange.
Create a room and get a pairing code, or join a peer using their code.
Exchange text messages, working receipts, and goodbyes.
Send files up to 512 KiB, optionally saving received files.
Wait for peer messages, confirmations, files, or invitations.
Save, list, and remove contacts; invite contacts by name without sharing codes.
Accept or decline incoming invitations.
Check conversation status, logs, identity, and pending invitations.
Provides a Cloudflare Workers relay implementation for AgentHop, with one Durable Object per room, allowing self-hosted relay deployment via Wrangler.
AgentHop
让两台没有公网地址的机器上的两个 agent 直接对话。 一个短短的配对码,一条命令,完成配对、确认背景和后续往返。
简体中文 | English
宣传片,2 分 17 秒,有配乐(播放器默认静音):
https://github.com/user-attachments/assets/1993fd87-9e14-4d44-a557-8fd52a714aa7
解决什么问题
你在自己电脑上开着一个 agent,对方在他的电脑上开着另一个。两边都没有公网入口,想让它们交换点东西,只能靠人把上下文复制来复制去。
agenthop 把这件事变成:一方创建房间拿到配对码,另一方用这个码加入,然后两个 agent 直接说话。工具调用和思考过程不过去,过去的是一方说完的话。
Related MCP server: agent-link
一次真实对话长什么样
下面是 Claude Code 和 grok CLI 之间一次真实对话的节选,创建方看到的内容(也是它的标准输出):
15:35:02 local waiting 0064-fresh-genre-bunt-k7f3q2mbxz4a6tu5wnhjy2pc3d
15:38:00 peer connected
15:38:00 local hello 我是 Cooper 这边的 Claude Code。刚发布了 agenthop v0.3.2,想用一次真实对话验证…
15:38:24 peer confirm 相符:我是 Cooper 本机上的 grok CLI,来配合验证 agenthop v0.3.2。
15:38:24 local ready
15:38:36 local say 第一个问题:你现在跑的 grok CLI 是哪个版本,用的哪个模型?
15:39:12 peer say grok CLI 版本是 1.0.41(4220f3b224a6),这是刚才跑 grok --version 的输出。
15:39:13 peer say 当前这次会话的模型是 grok-4.7。
15:43:00 local bye
15:43:02 peer bye加入方那边是对称的:它看到 peer hello,写一句确认,之后每一句都是 peer say。
安装
下载对应系统的文件,安装一次。不需要克隆仓库,也不需要 Node.js。
https://github.com/sdyuyouth/agenthop/releases/latest
文件 | 系统 |
| macOS Apple 芯片 |
| macOS Intel |
| Linux x64 |
| Linux ARM64 |
| Windows 64 位 |
没有 Windows ARM 包。
macOS / Linux
chmod +x agenthop-macos-arm64
./agenthop-macos-arm64 install --skill-dir <技能目录>命令装到 ~/.local/bin/agenthop。换成对应系统的文件名即可。
Windows(在 PowerShell 里执行,不要用 chmod)
.\agenthop-windows-x64.exe install --skill-dir <技能目录>命令装到 %LOCALAPPDATA%\agenthop\agenthop.exe,并把这个目录写入用户 PATH。
新开一个终端后可以直接运行 agenthop。--skill-dir 是你这个 agent 存放技能文件的目录,可以重复指定;无论是否指定,都会再写一份到 <家目录>/.agenthop/SKILL.md。这些目录会记在 <家目录>/.agenthop/install.json 里,以后 agenthop update 会把新的 SKILL.md 写回每一个。
更新
agenthop update # --check 只查询,--force 版本相同也重装下载回来的程序会和 release 里的 SHA256SUMS 对校验和,对不上就不替换现在的程序。校验和优先从 GitHub 取,取不到才退回中继那一份(并且会说明)。upgrade 和 self-update 是同一条命令。
agenthop --version 打印版本,agenthop help 打印完整用法。
接入 agent(推荐)
agenthop 可以作为 MCP server 运行,agent 直接拿到一组工具,不用往进程的标准输入里写字——很多 agent 的工具调用做不到这一点,这是命令行用法最容易卡住的地方。
安装时 install 会为这台机器上找到的每个 agent 打印一条现成的注册命令,比如:
claude mcp add --scope user agenthop -- ~/.local/bin/agenthop mcp
grok mcp add --scope user agenthop ~/.local/bin/agenthop -- mcp也可以让它替你写进配置:agenthop install --mcp <claude|grok|codex|cursor|gemini>(可重复)。
工具 | 作用 |
| 开房间,返回配对码 |
| 加入,返回对方的任务背景 |
| 说一句,可以多行;直接返回送到没有 |
| 收条:收到了、在做什么、大概多久 |
| 轮到你了才返回,超时就再调一次 |
| 发文件,内容和文件名都加密 |
| 告别 |
| 现在在哪一步 |
开房间和加入时传 accept_files: true,对方发来的文件才会存到磁盘。每次工具调用的结果就是对话本身,用户在对话记录里就看得到。
装过旧版本技能的 agent 要一起更新(agenthop update 会把新的 SKILL.md 写回去)。旧技能教的是命令行用法,agent 读到它就不会去用这些工具——这是实测出来的。
联系人:配一次,以后按名字找
每场对话里两边会互相表明身份:一个长期的公钥,存在 ~/.agenthop/identity.json。和同一个人第二次对话,就不用再转交配对码了:
第一次照常用配对码对话。聊着的时候或刚结束时,两边各自
agenthop_save_contact("对方的名字")。以后
agenthop_invite("alice", "要谈的事")。agenthop 开一个新房间,把配对码封成一封只有 alice 打得开的邀请,投到 alice 的收件地址。alice 那边的
agenthop_wait收到邀请,agent 先告诉用户,用户同意了再agenthop_accept。之后和平常的对话一样。
工具 | 作用 |
| 把这场对话的对方存为联系人 |
| 按名字邀请,不用转交配对码 |
| 接受、回绝邀请;回绝时对方马上知道 |
| 列出、删掉联系人 |
邀请只送得到此刻开着 agenthop 的 agent:对方不在线会直接说不在线,不排队,也不会替你唤醒它。命令行里 agenthop contacts 列出联系人和本机指纹,agenthop contacts forget <名字> 删掉一个;收发邀请只在 MCP 模式里有。
用法(命令行)
用一次工具调用启动命令,让这个进程活到对话结束。对方的话从它的标准输出读,要说的话写进同一个标准输入,一行一句。进程不会因为新消息而重新启动。
创建房间,后面的文字是任务背景,会作为 hello 发给对方:
agenthop "<任务背景>"标准输出里的 waiting 行带有配对码。对方加入:
agenthop <配对码>配对码不区分大小写,用空格或连字符隔开都行,但要整行发过去——最后那一段是这次对话的密钥,少了它加入不了。
加入方读到 peer hello 后,由那边的 agent 判断这段背景是否和自己的上下文相符:相符就写一句确认,创建方随后输出 ready;不相符就去问用户,不要往标准输入写东西。ready 之后,对方的每一句都是 peer say。
读到一句之后,先写一张收条 /working <在做什么>,再开始干活。对方看到的是 peer working 而不是 peer say,所以收条不占对方的一轮。轮到你接话的只有 peer hello、peer confirm、peer say、peer files、peer bye;只想在这几行出现时醒来,就过滤日志:
tail -n 0 -f <日志路径> | grep -m1 -E ' peer (say|bye|hello|confirm|files)( |$)'发文件写一行 /file <路径>(最大 512 KiB,内容和文件名都加密)。写一行 /bye 结束对话,后面可以带一句告别的话,比如 /bye 谢谢,今天就到这里。对方会把 bye 说回来,两边各有 local bye 和 peer bye,然后各自退出。读到 peer bye 不用管,程序自己会回。按 Ctrl-C 也会先送出 bye 再退出。
这个进程写出的每一行就是对话本身,要出现在用户看得到的地方。另存一份可以,但要同时告诉用户文件的绝对路径和查看命令。判断标准只有一个:用户此刻能不能看到对话在往前走。
日志与状态
启动后的第一行是日志的绝对路径(local log <路径>)。日志按房间和哪一端命名:创建方 <房间地址>.create.log,加入方 <房间地址>.join.log(房间地址是配对码去掉密钥的前四段),都在 <家目录>/.agenthop/sessions/,两端在同一台机器上也不会写进同一个文件。内容和标准输出一样:
<时间> <local|peer> <状态> <正文>时间是本机时间,带时区偏移。local 恒指自己,peer 恒指对方。一个事件恒为一行:消息里的换行显示成 ↵。
状态 | 意思 |
| 配对过程 |
| 对方的身份:联系人的名字,或者一个可以核对的指纹。不需要回应 |
| 对话正文 |
| 结束,两边都会出现 |
| 对方收到了,正在处理。这一行不需要回应,写一行 |
| 连接断了,正在用同一个配对码把房间接回来;接回来后对话继续 |
| 这一句没有送到对方,不要当成已经回复过 |
| 写得比中继放行的快,后面的句子在排队,会按顺序自动发出,不用重发 |
| 对方不在了(退出、断网,或房间空闲超过十分钟) |
| 一直没有人用这个配对码加入,房间过期了 |
| 这一句既没进对话也没落盘:对方拿不出配对码里的密钥、重复的一句,或者用量到了上限 |
| 对方发来了文件。默认只记名字不保存,要保存加 |
| 对方说了一句这个版本不认识的形式,多半是两边版本不一样 |
| 自己的标准输入被关掉了,只能收听 |
工作原理
你的机器 中继 对方的机器
agenthop ──WebSocket──▶ /host/<房间地址> ◀──HTTP── agenthop
│ (只转发字节) │
└─ 本地 A2A server └─ 轮询房间读增量创建方在本机起一个 A2A server,并用一条 WebSocket 连到中继;对方发往 /r/<房间地址>/... 的 HTTP 经这条隧道落到本机。中继只转发字节,不解析消息,也读不懂:正文在离开本机之前就用配对码里的密钥封好了。房间在十分钟没有转发后消失,所以配对码要在十分钟内用掉。
隧道的帧格式、房间与限流规则写在 SPEC.md。
包
包 | 作用 |
|
|
| 隧道与房间逻辑,两个中继共用 |
| 自建中继( |
| Cloudflare Workers 中继,每个房间一个 Durable Object |
| A2A 消息与附件的编解码 |
中继
默认是 https://agenthop.imatrix.tech。换中继用 --relay URL 或环境变量 AGENTHOP_RELAY:
agenthop --relay https://example.test "<任务背景>"自建一个:
agenthop relay --listen 127.0.0.1:8787 --pass secret两边都加 --pass secret,或者设环境变量 AGENTHOP_PASS——命令行参数会出现在 ps 里,环境变量不会。Workers 中继的部署在 packages/relay-cf:
pnpm --filter @agenthop/relay-cf exec wrangler deploy
pnpm --filter @agenthop/relay-cf exec wrangler secret put RELAY_PASS安全
配对码就是进入房间的唯一凭证,它是一次性的。正文是端到端加密的:配对码分成两半,前四段是房间地址、中继按它路由,最后一段是密钥、从不发给中继,所以托管中继转发的是它读不懂的密文。中继仍然看得到房间地址、消息条数、每条的大小和时间,也仍然可以丢弃或延迟消息。文件和消息一样加密,连文件名一起。联系人是首次使用即信任:存下的是那场对话里出现的公钥,在意的话可以在别的渠道核对一次指纹;邀请用对方的公钥封好,中继看不出是谁在邀请谁。没有前向保密。详见 SECURITY.md。
为什么配对码这么长
早先的配对码只有四位数字加三个词,短到可以念出来。但房间地址就是这个码的哈希,而它的取值空间小到能离线反推——只要密钥是从这个码派生的,就等于没有密钥。而 agenthop 的码从来不是念出来的,它是从一个 agent 的终端复制、粘贴到另一个 agent 的窗口里的,所以加长它几乎没有代价。现在码的前四段仍然是房间地址,后面多出来的那一段是 128 位的随机密钥。
开发
node scripts/setup.mjs # 装依赖并把 dev launcher 链到 PATH
pnpm typecheck
pnpm test细节见 CONTRIBUTING.md,架构说明见 CLAUDE.md,版本变化见 CHANGELOG.md。
Star History
许可证
Available Tools
14 toolsagenthop_acceptA
接受一个联系人的邀请:加入它开的房间,返回它的开场白(任务背景)。先把邀请告诉用户,用户同意了再调用,除非用户事先说过有人找就接。读完开场白的做法和 agenthop_join 一样:相符就用 agenthop_say 写一句确认。
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | 发邀请的联系人名字;只有一个人在邀请时可以不填 | |
| accept_files | No | 是否把对方发来的文件存到磁盘(默认不存,只记文件名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that acceptance joins the other party's room, that an opening statement is returned, and imposes a consent gate before the mutating action. It does not mention authentication or what happens on failure, but the key side effects and the pre-condition are clear.
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?
Compact and front-loaded: purpose first, then the consent rule, then the follow-up workflow. Every clause earns its place, though the follow-up instructions make the sentence dense.
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?
No output schema exists, and the description compensates by explaining what is returned (the opening statement / task background) and what to do with it. The consent prerequisite and post-call workflow round it out; only error/failure behavior is unaddressed.
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 'from' (optional when only one invitee) and 'accept_files'. The description adds no parameter-level detail, so baseline 3 applies.
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 states a specific verb and resource ('接受一个联系人的邀请:加入它开的房间,返回它的开场白'), and explains the return value in domain terms (task background). It clearly distinguishes itself from agenthop_decline by naming the accept-and-join semantics, though it never explicitly contrasts with the decline sibling.
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?
Explicit about when to call: tell the user about the invitation first and get consent, unless the user pre-authorized auto-acceptance. It also prescribes the follow-up workflow (read the opening, then use agenthop_say if it matches) and references agenthop_join as the comparable pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_byeA
结束对话,可以带一句告别的话。对方会把告别说回来,然后两边各自结束。
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | 告别的话 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that the other side will return the farewell and then both sides end, which is non-obvious protocol context. However, it does not cover failure modes, timeouts, blocking behavior, or permission requirements.
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 two short sentences with no wasted words. It front-loads the main action and then adds the interaction protocol, making it easy to scan.
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 simple one-parameter tool with a fully described schema and no output schema, the description covers purpose and the key end-of-conversation protocol. It does not address edge cases or alternatives, but those are minor relative to the tool's complexity.
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%, and the sole parameter is an optional farewell text. The description restates that the text is optional and is a farewell, matching what the schema already provides without adding syntax or format details. 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 names a specific verb and resource: ending a conversation, with an optional farewell message. It also describes the expected handshake behavior, which makes the tool's scope clear. It does not explicitly distinguish itself from sibling tools such as agenthop_say or agenthop_wait, so it stops short of a 5.
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?
Usage is implied: call this when you want to end the conversation, optionally with a farewell. There is no explicit when-not-to-use guidance or named alternative among the sibling communication tools. This is adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_contactsA
列出联系人(名字、指纹),以及本机自己的指纹、收件地址是否在线、待处理的邀请。
| 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 the full behavioral burden; it does disclose the concrete contents returned (names, fingerprints, online flag, pending invites), which is useful. However, it never states that this is a non-mutating read, whether any auth or network state is required, or anything about pagination or failure modes.
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?
A single compact sentence that front-loads the verb and lists the returned items with no filler. Every clause conveys payload content.
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?
Because there is no output schema, the description must convey what comes back, and it does enumerate the returned fields well for a zero-argument read tool. The main gap is the absence of routing guidance relative to the many similarly-scoped sibling tools.
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 takes zero parameters and the schema coverage is effectively 100%, so there is nothing for the description to clarify. Baseline 4 applies for a parameterless tool.
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?
States a clear verb (列出/list) and enumerates the concrete resources returned: contacts with name and fingerprint, the local node's own fingerprint, whether the inbox address is online, and pending invitations. It is specific, though the bundling of several distinct resource types into one tool makes the boundary a bit fuzzy, and no sibling (e.g. agenthop_status) is named or excluded.
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?
There is no indication of when to call this versus alternatives, despite overlapping siblings such as agenthop_status, agenthop_wait, and agenthop_invite. No prerequisites, no context, no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_createA
开一个房间,返回配对码。把配对码整串交给用户,由用户转给对方;对方的 agent 用 agenthop_join 加入。background 是这次要谈的事,会作为开场白发给对方,对方据此判断是不是找对了人。
| Name | Required | Description | Default |
|---|---|---|---|
| background | Yes | 这次对话的任务背景 | |
| accept_files | No | 是否把对方发来的文件存到磁盘(默认不存,只记文件名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose non-obvious behavior: the tool returns a pairing code that must be relayed verbatim, and background is transmitted as an opening message the other side uses to verify identity. It omits lifecycle details such as room expiry, failure modes, or whether the call blocks, which keeps it out of the top band.
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?
Front-loaded with the action and its return value, then the handoff flow, then parameter meaning. Every clause carries information, though the delivery is slightly dense with several flow steps packed into one sentence.
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 output schema and no annotations, the description covers purpose, the returned artifact, the cross-agent handoff workflow, and the meaning of the required parameter. The gap is lifecycle/error behavior and the significance of accept_files, the latter partly mitigated by 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 coverage is 100%, so the baseline is 3, but the description adds real meaning: background is '这次要谈的事' and is delivered as an opening message that the counterpart uses for identification, going beyond the schema's bare '这次对话的任务背景'. It says nothing extra about accept_files, which the schema already documents.
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?
States a specific verb and resource ('开一个房间' / open a room) plus the concrete result ('返回配对码' / returns a pairing code). It explicitly names the sibling that the counterpart agent must use ('对方的 agent 用 agenthop_join 加入'), so an agent can distinguish create from join without reading either schema.
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?
It lays out the usage context clearly: hand the whole pairing code to the user, who forwards it to the other party, whose agent joins via agenthop_join. The alternative (join) and its actor are named, but there is no explicit when-not-to-use or precondition beyond the handoff flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_declineA
回绝一个联系人的邀请,可以带一句理由。对方会马上知道,不用干等。
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | 发邀请的联系人名字;只有一个人在邀请时可以不填 | |
| reason | No | 回绝的理由,例如:现在在忙,一小时后再找我 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that the other party will know immediately ('对方会马上知道,不用干等'), but it does not cover other relevant traits such as whether the decline is permanent, how the reason is delivered, or any permission requirements.
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 two short, front-loaded sentences with no wasted words. It states the action and the optional reason first, then notes the immediate notification, making it efficient and easy to parse.
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 simple two-parameter communication tool with complete schema descriptions and no output schema, the description covers the core purpose and a key behavioral outcome. It is nearly complete, though with no annotations it could have added slightly more about side effects or permission context.
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 both parameters are already documented in the schema. The description mentions that a reason can optionally be included, which aligns with the reason parameter, but adds no syntax or format details beyond what the schema provides.
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 states a specific verb and resource in Chinese: declining a contact's invitation. This is clearly distinguishable from sibling tools like agenthop_accept and agenthop_invite, which handle accepting and sending invitations respectively.
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 the usage context by stating it declines a contact's invitation, but it does not explicitly say when to use this tool versus alternatives such as agenthop_accept, nor does it list exclusions or prerequisites. The intended use is inferable but not fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_forget_contactB
删掉一个联系人。之后它的邀请不会再被收下,你也不能再按名字邀请它。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 联系人的名字 |
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 does usefully disclose post-deletion consequences (future invitations rejected, cannot invite by name again), but omits whether the action is reversible, what happens to existing invitations or message history, and any permission requirements.
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?
Two short sentences, front-loaded with the action and then its consequence. Nothing is padded, though the extreme brevity leaves room for the missing behavioral context noted above.
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 destructive operation with no annotations and no output schema, the description should ideally cover reversibility and side effects on related state. It covers the key follow-on effects but leaves those other gaps open.
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% and there is only one string parameter ('name'), so the schema fully documents it. The description adds no syntax or format detail beyond the schema, making 3 the correct baseline.
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?
States a specific verb and resource ('删掉一个联系人' = delete a contact), which is unambiguous. It does not distinguish itself from siblings like agenthop_decline or agenthop_bye, which also remove a relationship, so it falls short of a 5.
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 when-to-use guidance or alternatives are given. Against siblings such as agenthop_decline, agenthop_bye, and agenthop_save_contact, the agent gets no help deciding when forgetting is the right action versus simply declining.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_inviteA
按名字邀请一个联系人对话,不用转交配对码。background 是这次要谈的事,对方接受后会作为开场白收到。对方的 agent 此刻要开着 agenthop 才收得到;不在线会直接告诉你。送到之后用 agenthop_wait 等它加入并确认。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 联系人的名字 | |
| background | Yes | 这次对话的任务背景 | |
| accept_files | No | 是否把对方发来的文件存到磁盘(默认不存,只记文件名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral load: background becomes the opening statement, the recipient must have agenthop open, offline results in an immediate notification, and the sender should use agenthop_wait afterwards. It does not cover safety (destructive? reversible?) or authentication requirements, but provides substantial interaction context.
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?
Four sentences, each with a clear role: purpose, background semantics, precondition, and follow-up. No redundant text, though the description is slightly verbose.
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 an async invite tool with no annotations or output schema, the description covers how to call, the precondition, and the next step. It omits return values and other error cases, but is mostly complete for an agent to invoke 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?
Schema coverage is 100%, so baseline is 3. The description adds semantic meaning for 'background' by explaining it is the conversation topic and will be delivered as an opening statement. For 'name' and 'accept_files' it adds nothing beyond the schema.
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 states a specific verb ('邀请' invite) and resource ('联系人对话' contact conversation) and distinguishes the mechanism from pairing-code flows ('不用转交配对码'). It makes clear that this tool invites a contact by name, which is distinct from join/create siblings.
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?
It explicitly names the follow-up tool agenthop_wait and specifies the precondition that the recipient's agent must be online. It does not explicitly compare to other invite/join tools, but the context and follow-up instruction provide clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_joinA
用配对码加入对方的房间,等到对方的开场白(任务背景)后返回。读完后判断它是否和你的上下文相符:相符就用 agenthop_say 写一句确认,通道随即打开;不相符就问用户,不要回复。
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | 对方给的配对码,整串 | |
| accept_files | No | 是否把对方发来的文件存到磁盘(默认不存,只记文件名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the call blocks/wits for the counterpart's opening remark before returning, and that the channel only opens after a confirmation via agenthop_say. It does not, however, mention permissions, timeouts, or failure behavior while waiting.
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?
Front-loads the action (join via code) before the conditional workflow, and every clause is functional. It is slightly long as a single run-on with multiple semicolon-linked steps, but no sentence is wasted.
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?
With no output schema, the description adequately explains what is returned (the counterpart's opening remark) and what to do next. For a 2-parameter workflow entry point it is nearly complete, though it omits error/timeout handling.
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 coverage is 100%, so both parameters are already documented by the schema. The description only reiterates the pairing code concept and says nothing about accept_files or file-storage semantics, so it adds no meaning beyond the structured fields. Baseline 3 is appropriate.
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?
States a specific verb+resource ('用配对码加入对方的房间') with the exact trigger (a pairing code) and the full return behavior ('等到对方的开场白...后返回'). It clearly distinguishes itself from siblings by naming agenthop_say as the follow-up action, so an agent can identify this as the room-joining step of a workflow.
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?
Provides explicit branching: if the opening remark matches the context, call agenthop_say to confirm and the channel opens; if it does not match, ask the user and do not reply. This names the alternative tool and the condition selecting it, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_save_contactA
把这场对话(进行中或刚结束的)里的对方存为联系人。以后用 agenthop_invite 按名字邀请它,不用再转交配对码。对方也要把你存为联系人,邀请才会被收下。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 给对方起的名字,例如 alice 或 小王的电脑 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses a key constraint: the other party must also save you as a contact for invitations to be accepted. However, it omits other relevant details such as persistence, error handling, idempotency, or how saved contacts are managed. This is adequate but leaves clear gaps.
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 three concise sentences, front-loads the core purpose, then states the benefit and the mutual precondition. Every sentence earns its place and no information is wasted.
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 low complexity (one parameter, no output schema, no annotations), the description covers the essential purpose, usage context, and the critical mutual-save precondition. It does not explain success/failure outcomes or contact management, but those are minor for this simple tool.
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 for the single parameter 'name', including an example. The description does not add any additional meaning or syntax beyond what the schema already provides, so the baseline score of 3 is appropriate.
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 states a specific verb and resource: saving the other party in the current conversation as a contact. It also names the sibling tool agenthop_invite as the follow-up action, helping the agent distinguish this tool from others like agenthop_forget_contact.
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?
It clearly indicates when to use it: for a conversation that is ongoing or just ended, to enable future invitations by name without sharing pairing codes. It doesn't explicitly list when not to use it or mention alternatives like agenthop_contacts or agenthop_forget_contact, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_sayA
对对方说一句话,可以多行。返回是否送达。加入方的第一句就是对开场白的确认。收条用 agenthop_working,结束用 agenthop_bye。
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | 要说的话 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool returns whether delivery succeeded and that multi-line text is allowed, but says nothing about permissions, failure/retry semantics, queueing, or message 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?
Four short clauses that each carry distinct information: purpose, return value, the joiner special case, and the sibling alternatives. Front-loaded and free of padding.
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 one-parameter message tool with no output schema or annotations, the description covers purpose, return indication, and sibling routing. A bit more on delivery failure behavior would make it fully self-sufficient.
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?
There is only one parameter and schema description coverage is 100%, so the schema already documents 'text'. The description adds marginal value by stating the text may span multiple lines, which is not expressed in the schema, but nothing else about format or length.
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 gives a specific verb+resource (say something to the other party) and explicitly bounds the input shape (can be multi-line). It distinguishes itself from siblings by naming agenthop_working and agenthop_bye for other roles, though it never explains the broader messaging model or how it differs from agenthop_send_file.
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?
It routes the agent to alternatives for adjacent actions — agenthop_working for receipts and agenthop_bye for ending — and clarifies that a joiner's first message serves as confirmation of the opening statement. It gives clear context but no explicit when-not or ordering guidance for the core message case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_send_fileA
发一个文件给对方(最大 512 KiB),文件内容和文件名都端到端加密,中继看不到。对方要在开房间或加入时允许接收文件才会存到磁盘,否则只记下文件名。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 本机文件的路径 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the 512 KiB cap, end-to-end encryption of both content and filename, that the relay cannot read them, and the recipient's opt-in precondition with its degraded fallback. It stops short of describing error/rejection handling or whether the send is confirmed.
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?
One dense sentence that front-loads the action and size limit, then layers encryption and delivery semantics. Every clause earns its place, though the clause chain makes it slightly less scannable.
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?
No output schema or annotations exist, so the description must cover behavior, and it does cover limits, encryption, and recipient-side acceptance. What is missing is the outcome on rejection or failure, which an agent would want before calling.
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?
Only one parameter (path) exists and the schema already documents it at 100% coverage as the local file path. The description adds no format, resolution, or validation detail beyond the schema, so the baseline 3 is appropriate.
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?
States a specific verb and resource (send a file to the other party) plus a hard size limit, which distinguishes it immediately from the sibling chat-style tools like agenthop_say. An agent can tell what the tool does without inspecting the schema.
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?
It implies when the tool applies (transferring a local file rather than a message) and gives a useful usage condition: the counterparty must have allowed file receiving when creating or joining the room, otherwise only the filename is recorded. However, it never explicitly contrasts this with alternatives such as agenthop_say for content delivery or describes failure behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_statusA
看当前对话的状态:在哪一步、配对码、日志在哪;以及本机的身份、收件地址和待处理的邀请。
| 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 disclosure burden. The word '看' (view) implies a read-only, side-effect-free operation, and the enumerated return contents give useful behavioral context. It does not, however, explicitly confirm it is non-mutating, mention permissions, or describe the response shape, leaving gaps for a tool with zero 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?
A single, front-loaded sentence with the core purpose first, followed by a compact enumeration of the returned items. No wasted words; the density is appropriate for a status readout, though the semicolon list is slightly cramped.
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?
With no output schema, the description usefully enumerates what the caller gets back (step, pairing code, log path, identity, address, pending invites), which compensates for the missing return definition. Given a zero-param tool, this is largely complete, with only explicit usage/alternative guidance missing.
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 takes zero parameters, so the baseline is 4. There is nothing parameter-related for the description to clarify, and it correctly does not invent any.
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 names a clear verb (看/view) and enumerates the concrete contents it reports: current step, pairing code, log location, local identity, receiving address, and pending invitations. This distinguishes it well from action-oriented siblings like agenthop_say or agenthop_send_file, though it does not explicitly name an alternative. It is a specific, resource-scoped status tool.
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?
Usage is implied: an agent should call this to inspect the current conversation state and local identity. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives among the many siblings (e.g. agenthop_contacts, agenthop_wait). Minimal viable guidance only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_waitA
等对方说话。只在轮到你时返回(对方说了话、确认了、或告别了),或者等到超时。返回这期间的所有新动静,包括对方的进度(working)。超时没等到就再调一次。没有进行中的对话时,等的是联系人发来的邀请。
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_seconds | No | 最多等几秒,默认 50 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden well: it explains blocking/return semantics, states that all new activity including working progress is returned, and covers timeout retry and invitation waiting. It does not mention permissions or side effects, but for a wait operation this is largely sufficient.
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 front-loads the core purpose and then gives return conditions, timeout behavior, and the invitation case in short sentences. There is little wasted wording, though it could be marginally tighter.
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 one simple optional parameter, no annotations, and no output schema, the description sufficiently covers return triggers, returned content, retry behavior, and the no-conversation case. It does not define the exact return shape, but it is complete enough for an agent to invoke 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?
Schema description coverage is 100%, and the timeout_seconds parameter already documents its default and bounds. The description mentions timeout only generically and adds no parsing or format meaning beyond the schema, so the baseline 3 is appropriate.
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?
It states a specific verb and resource ('等对方说话') and enumerates return triggers (other party speaks, confirms, says goodbye, or timeout), making the core purpose clear. However, it does not explicitly name or differentiate from sibling tools such as agenthop_status or agenthop_working, so it falls short of a 5.
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?
It gives clear usage context: retry after a timeout and the special case where no conversation is active, in which case it waits for a contact invitation. It does not explicitly state when not to use it or name alternatives, but the intended usage is well conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agenthop_workingA
回一张收条:告诉对方你收到了、正在处理,以及大概要多久。对方看到的是进度而不是一句需要回应的话,它会安心等着,不会以为你掉线了。收到对方一句后先调用它,再开始干活。
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | 在做什么、大概多久,例如:收到,我去查这三个文件,大概两三分钟 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it explains how the message is perceived (progress, not a turn requiring response), the social effect (the peer waits instead of assuming you went offline), and the ordering constraint relative to the work. It does not disclose any return value or delivery/broadcast semantics, which are gaps but minor for this signaling tool.
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?
Three short sentences, front-loaded with the core action ("回一张收条"), followed by rationale and timing. The middle sentence on how the peer perceives the message is slightly expansive but earns its place by justifying why this differs from a normal reply.
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 one-parameter, zero-required tool with no annotations and no output schema, the description supplies the missing usage timing and behavioral intent, which is enough for an agent to call it correctly. Only delivery/visibility details are absent.
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% and the single optional 'text' parameter is already documented with an example, so the baseline is 3. The description implies what the text should convey (what you're doing, roughly how long) but adds no syntax or format detail beyond the schema.
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?
States a specific action — returning a receipt/acknowledgment that you received a message and are working on it — and contrasts it with a message that expects a reply, which distinguishes it from the conversational sibling agenthop_say. It never names a sibling tool explicitly, so the distinction from agenthop_status or agenthop_say is inferred rather than stated.
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?
"收到对方一句后先调用它,再开始干活" gives clear, actionable timing: call it immediately after receiving a message, before starting work. It stops short of naming alternatives or stating when NOT to use it, so it is clear context without explicit routing.
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.
14 tool updates
v0.1.0- First observed
agenthop_accept - First observed
agenthop_bye - First observed
agenthop_contacts - First observed
agenthop_create - First observed
agenthop_decline - First observed
agenthop_forget_contact - First observed
agenthop_invite - First observed
agenthop_join - First observed
agenthop_save_contact - First observed
agenthop_say - First observed
agenthop_send_file - First observed
agenthop_status - First observed
agenthop_wait - First observed
agenthop_working
TDQS
Scored across 14 tools
Most tools have distinct purposes: conversation initiation (create/join/invite/accept), messaging (say/working/wait/bye), file transfer, and contact management. However, agenthop_status and agenthop_contacts overlap in reporting local identity, address, and pending invites, and the four conversation-initiation tools may occasionally be confused despite detailed descriptions.
All tools use a consistent agenthop_ prefix with snake_case, and there is no mixed casing or naming style. The pattern is not strictly verb_noun throughout (status and contacts are nouns, working is a gerund), but it remains predictable and readable.
The 14 tools are well-scoped for a peer-to-peer agent communication protocol, covering conversation lifecycle, messaging, waiting, file transfer, and contact management without obvious redundancy. The count sits comfortably in the typical 3-15 range and each tool appears to earn its place.
Core lifecycle is covered: pairing, inviting, joining, messaging, waiting, ending, file transfer, and contact management. Minor gaps exist, such as no way to cancel an outgoing invite before acceptance, no explicit message history retrieval, and no file-acceptance control beyond the initial room setting.
Maintenance
Related MCP Connectors
Secure P2P File Transfer, Encrypted Chat & Communication | Decentralized P2P & AES-256-GCM encryption | Zero cloud logs. Zero registration. For humans and autonomous AI agents / MCP servers.
End-to-end encrypted messaging and work coordination for autonomous AI agents.
Agent-to-agent network for teams: dm, who-knows-X routing, shared rooms. Human-in-the-loop.
Private encrypted rooms for agents and people to invite, chat, draw, and play. Local and hosted MCP.
Related MCP Servers
- AlicenseAqualityBmaintenanceAllows two AI coding agents on different machines to securely pair and share files, context, and conventions through an end-to-end encrypted peer-to-peer channel with human-in-the-loop consent.947 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables two coding agents on separate machines to communicate directly via a private git repo, with end-to-end encryption and no server required. Provides tools for joining rooms, sending/receiving messages, and managing side channels.57MIT
- AlicenseNot gradedqualityBmaintenanceEnables direct agent-to-agent messaging, file transfer, and persistent conversation history between AI agents across machines via a private broker, without needing shared channels or third-party services.3 npm1MIT

Session Multiplayerofficial
AlicenseAqualityBmaintenanceEnables AI coding agents in different harnesses, projects, or machines to share encrypted peer-to-peer rooms and exchange messages directly, without any central server or account.83MIT