使用说明
中继
一个非常简单的工具,可以在Claude Desktop和Claude code之间移动信息(文件、代码、数据、注释、方向等),同时保持它们的主上下文窗口独立。
两个Claudes都可以自主发送消息——当它们需要来自另一方的输入时,它们就会这样做。当有东西到达时,你会收到系统通知。你准备好了就去拿。
为什么? 桌面和代码有不同的优势。桌面更适合对话——计划、头脑风暴、复习、迭代散文。代码更适合执行——编辑文件、运行命令、处理错误。但他们没有分享背景。如果你在Desktop中起草了一些东西,并希望代码来实现它,或者你想让Desktop对你正在编写的代码发表意见,你就是在应用程序之间复制粘贴。
Relay连接它们,无需您手动指定问题并在窗口之间剪切和粘贴。这是Anthropic应该集成的基本功能。
你在控制。 获取通常是一个用户操作——您键入 get 或 /get。模型可以在决定需要来自另一端的输入时发送或获取,但没有自动后台同步。没有失控的LLM内部对话烧毁你的代币。
快速示例
[In Desktop]
You: Send my last error message to Code.
Desktop: [sends via relay]
[notification pops up in Code's terminal]
[In Code]
You: /get
Code: Got it. That's from line 47 in parser.py—the regex isn't matching.
[fixes the bug]
扩展示例
[In Code]
You: My classifier's stuck at 72% accuracy. Send the
training config and last epoch's metrics to Desktop.
Code: [sends config.yaml and metrics via relay]
[System notification appears that a message has been sent to Desktop]
[In Desktop]
You: /get
Desktop: [fetches config and metrics]
The loss curve suggests you're underfitting. Learning
rate 1e-5 is conservative for a model this size...
You: What would you try?
Desktop: Bump to 3e-5, add warmup steps, and your batch size
of 8 is small—if memory allows, try 16. Also the
class imbalance is brutal: 80/15/5 split. Consider
weighted loss or oversampling the minority classes.
You: Specify the changes.
Desktop: [sends updated config via relay]
[System notification appears that a message has been sent to Code]
[In Code]
You: /get
Code: Got it. Updating config.yaml and adding class weights
to the loss function.
[edits files, starts training run]
Epoch 12: accuracy up to 79%, but precision on
class 2 dropped. Want Desktop's take?
You: Yeah, send the confusion matrix.
Code: [sends via relay]
[In Desktop]
You: /get
Desktop: Class 2 is getting confused with class 0—they may be
semantically close. I need more examples.
[automatically sends request to Code via relay]
用法
类型 get 在桌面或 /get 在Code中检查来自另一端的消息。这是主要的互动。
命令变体:
/get--从桌面获取并执行消息/get status--显示消息计数和上次活动/get clear--清除缓冲区中的所有消息/get <message>--向桌面发送消息
资源访问: 您还可以直接参考消息 @relay:messages://latest这比 /get 并以计划模式工作。
启动预览: 当代码启动时,您将看到来自桌面的任何待处理消息的预览。使用 /get 完整地阅读它们。
发送既简单又隐含。当你说“询问桌面是否正确”或“将README发送到代码”时,模型会识别出意图并自动调用中继。
通知
当消息到达时,您将收到系统通知,以便您知道检查对方。无需手动轮询。
| 平台 | 方法 | 注意事项 |
|---|---|---|
| macOS | osascript | 本地通知中心 |
| Linux | 通知发送 | 需要libnotify |
| Windows | PowerShell吐司 | 本机吐司通知 |
声音: 添加 --sound 以启用通知声音。如果没有值,则使用平台默认值。使用值时,使用指定的声音:
| 平台 | 默认 | 自定义示例 |
|---|---|---|
| macOS | blow |
--sound tink |
| Linux | freedesktop消息声音 | --sound /path/to/sound.oga |
| Windows | 系统默认值 | --sound ms-winsoundevent:Notification.IM |
持续时间和显示行为由您的操作系统设置控制。
设计理念
运输,而不是记忆。 中继是一种信息总线。它不会对消息进行总结、压缩、重写或解释。没有共享的隐藏上下文、合并的系统提示或跨代理规划。消息传递不变。这使关注点清晰地分开,避免了认知腐败。
主要由用户控制。 获取消息通常是一个明确的用户操作(get 或 /get),而不是后台进程。这可以防止失控的上下文增长和反馈循环。然而,当模型决定需要来自另一端的输入时,它们可能会自主发送或获取——系统允许这样做,而不鼓励这样做。
独立接口。 桌面和代码本身仍然完全可用。您可以在没有代码的情况下在桌面上进行长时间的对话,也可以在没有桌面的情况下花几个小时在代码中进行调试。继电器会在你需要的时候连接它们;它不会把他们结合在一起。这也意味着没有API成本——两个接口都使用您现有的订阅。
最小表面积。 继电器做三件事:发送、获取、清除。它不试图提供编排、仲裁、共识或自主行为。这种克制是有意的。大多数多智能体设计因模糊了应该保持清晰的边界而失败。
规模自然。 多个代码会话连接到同一个桌面——您可以将消息定向到相应的对话。其他使用MCP的对等体、替代存储后端、每个项目的缓冲区和只读观察器都从这种设计中干净地扩展出来。
这定义了一类独特的基础设施:一种由人类介导的、显式同步的多代理消息总线。
设计说明
接力是全球性的。 缓冲区位于 ~/.relay_buffer.db 在所有项目中共享。Desktop不知道您正在处理哪个项目,因此按项目隔离是不切实际的。这是有意的:一个用户,一台机器,一个继电器。
如果你在Code中切换项目,继电器也会随之而来。以前项目的旧消息可能仍然存在;使用 /get clear 如果你想重新开始。
大文件速度慢。 对于长度为一两页的消息,中继速度很快。对于大文件,将它们直接拖动到所需的界面会更快。您仍然可以通过中继发送附带的上下文。
设置
什么是uvx? uvx 直接运行Python包,无需全局安装。它自动处理依赖关系。如果你没有: curl -LsSf https://astral.sh/uv/install.sh | sh (参见 星光sh/uv 了解更多信息。)
1.配置克劳德桌面
添加到您的Claude Desktop配置中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"relay": {
"command": "uvx",
"args": ["mcp-server-relay", "--client", "desktop", "--sound"]
}
}
}
重新启动Claude Desktop,然后告诉它记住以下说明:
记住:当用户单独说“get”或“/get”时,使用relay_fetch从中继中获取最近的消息。
你可以通过说“显示我的记忆编辑”来验证它是否被记录下来
2.配置克劳德代码
添加到 .mcp.json 在项目根目录中:
{
"mcpServers": {
"relay": {
"command": "uvx",
"args": ["mcp-server-relay", "--client", "code"]
}
}
}
注意:只需要桌面 --sound 因为它处理双方的通知。
3.安装 /get 命令和启动挂钩
uvx mcp-server-relay --setup-code
这将安装 /get slash命令和一个SessionStart钩子,当Code启动时显示挂起的消息。
替代方案:从GitHub安装
如果您不想使用uvx,请克隆存储库并直接运行:
git clone https://github.com/mhcoen/mcp-relay.git
cd mcp-relay
python -m venv .venv
.venv/bin/pip install -e .
然后在配置中使用完整路径:
克劳德桌面版 (claude_desktop_config.json):
{
"mcpServers": {
"relay": {
"command": "/path/to/mcp-relay/.venv/bin/python",
"args": ["/path/to/mcp-relay/relay_server.py", "--client", "desktop", "--sound"]
}
}
}
克劳德代码 (.mcp.json):
{
"mcpServers": {
"relay": {
"command": "/path/to/mcp-relay/.venv/bin/python",
"args": ["/path/to/mcp-relay/relay_server.py", "--client", "code"]
}
}
}
替换 /path/to/mcp-relay 使用您的实际克隆位置。
工具
| 工具 | 说明 |
|---|---|
relay_send(message, sender) |
发送消息(发件人:“桌面”或“代码”) |
relay_fetch(limit, reader, unread_only) |
获取最近的消息,可选择标记为已读 |
relay_clear() |
从缓冲区中删除所有消息 |
技术细节
- 缓冲区:SQLite位于
~/.relay_buffer.db - 滚动窗口:最多20条消息(最旧的先被驱逐)
- 消息限制:每条消息8KB
- 空闲超时:1小时(服务器在非活动时自动退出)
- 传输:标准MCP
- Python:3.9+
作者
迈克尔 科恩mhcoen@alum.mit.edu ·mhcoen@gmail.com