返回 MCP 目录
public公开dns本地运行

mcp-relay

Relay是一个简单工具,用于在Claude Desktop和Claude Code之间传递文件、代码、数据等信息,保持两者上下文独立,通过用户控制的获取机制实现协作。

article

README

🚀 Relay

Relay 是一款极其简单的工具,它能在 Claude Desktop 和 Claude Code 之间传递信息,包括文件、代码、数据、注释、说明等,同时保持它们的主上下文窗口相互独立。

Claude Desktop 和 Claude Code 都能自主发送消息,当一方需要另一方的输入时,会自动发送。当有消息到达时,你会收到系统通知,待准备好后即可获取。

为何需要它? Desktop 和 Code 各有优势。Desktop 更适合进行对话,如规划、头脑风暴、审核和完善文本;Code 则更擅长执行任务,如编辑文件、运行命令和处理错误。但它们之间无法共享上下文。如果你在 Desktop 中起草了内容,想让 Code 来实现,或者想听取 Desktop 对正在编写的代码的意见,就不得不手动在两个应用程序之间复制粘贴。

Relay 能在无需你手动指定问题和在窗口间复制粘贴的情况下,将它们连接起来。这本应是 Anthropic 集成的基本功能。

你能完全掌控:获取消息通常是用户的主动操作,你可以输入 get/get。模型在需要另一方的输入时可以自主发送或获取消息,但不会进行自动的后台同步,避免出现无节制的大语言模型间对话消耗你的令牌。

🚀 快速开始

以下是一个快速示例,展示了如何使用 Relay 在 Claude Desktop 和 Claude Code 之间传递信息:

[在 Desktop 中]
你:     将我上一条错误消息发送到 Code。
Desktop: [通过中继发送]

[Code 的终端中弹出通知]

[在 Code 中]
你:     /get
Code:    已获取。错误来自 parser.py 文件的第 47 行,正则表达式不匹配。
         [修复了该错误]

✨ 主要特性

  • 信息传递:能在 Claude Desktop 和 Claude Code 之间轻松传递各类信息,如文件、代码、数据等。
  • 自主消息发送:两个 Claude 工具都能自主发送消息,当需要另一方输入时自动执行。
  • 系统通知:有新消息到达时,会及时推送系统通知,方便用户及时获取消息。
  • 用户掌控:获取消息主要由用户手动操作,避免自动同步带来的问题。
  • 独立使用:Desktop 和 Code 仍可独立使用,Relay 仅在需要时进行连接。

📦 安装指南

前提条件

什么是 uvx? uvx 可以直接运行 Python 包,而无需全局安装。它会自动处理依赖项。如果你还没有安装 uvx,可以运行以下命令进行安装:

curl -LsSf https://astral.sh/uv/install.sh | sh

更多信息请参考 astral.sh/uv

配置步骤

1. 配置 Claude Desktop

在你的 Claude Desktop 配置文件中添加以下内容:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux:~/.config/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "relay": {
      "command": "uvx",
      "args": ["mcp-server-relay", "--client", "desktop", "--sound"]
    }
  }
}

重启 Claude Desktop,然后让它记住以下指令:

记住:当用户单独输入 "get" 或 "/get" 时,使用 relay_fetch 从中继获取最近的消息。

你可以通过输入 "Show me my memory edits." 来验证该指令是否已被记录。

2. 配置 Claude Code

在项目根目录的 .mcp.json 文件中添加以下内容:

{
  "mcpServers": {
    "relay": {
      "command": "uvx",
      "args": ["mcp-server-relay", "--client", "code"]
    }
  }
}

注意:只有 Desktop 需要 --sound 参数,因为它负责处理双方的通知。

3. 安装 /get 斜杠命令(可选)

uvx mcp-server-relay --setup-code

此命令会将斜杠命令复制到 ~/.claude/commands/ 目录。

从 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 (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"]
    }
  }
}

Claude Code (.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 替换为你实际克隆的仓库路径。

💻 使用示例

基础用法

[在 Code 中]
你:     我的分类器准确率一直停留在 72%。将训练配置和上一轮的指标发送到 Desktop。
Code:    [通过中继发送 config.yaml 和指标]

[系统通知显示消息已发送到 Desktop]

[在 Desktop 中]
你:     /get
Desktop: [获取配置和指标]
         损失曲线表明你可能存在欠拟合问题。对于这个规模的模型,学习率 1e-5 过于保守...

你:     你会尝试什么方法?
Desktop: 将学习率提高到 3e-5,增加预热步骤,并且你的批量大小为 8,有点小。如果内存允许,尝试使用 16。此外,类别不平衡问题很严重,比例为 80/15/5。考虑使用加权损失或对少数类别进行过采样。

你:     指定具体更改。
Desktop: [通过中继发送更新后的配置]

[系统通知显示消息已发送到 Code]

[在 Code 中]
你:     /get
Code:    已获取。正在更新 config.yaml 并在损失函数中添加类别权重。
         [编辑文件,开始训练]

         第 12 轮:准确率提高到 79%,但类别 2 的精度下降了。想听听 Desktop 的看法吗?

你:     是的,发送混淆矩阵。
Code:    [通过中继发送]

[在 Desktop 中]
你:     /get
Desktop: 类别 2 与类别 0 容易混淆,它们在语义上可能很接近。我需要更多示例。
         [通过中继自动向 Code 发送请求]

高级用法

  • 命令变体
    • /get — 从 Desktop 获取并执行消息
    • /get status — 显示消息数量和最后活动时间
    • /get clear — 清除缓冲区中的所有消息
    • /get <message> — 向 Desktop 发送消息
  • 资源访问:你还可以使用 @relay:messages://latest 直接引用消息。这比 /get 更快,并且在计划模式下也能使用。
  • 启动预览:当 Code 启动时,你会看到来自 Desktop 的任何待处理消息的预览。使用 /get 可以完整读取这些消息。

发送消息非常简单且隐式。当你说 "Ask Desktop if this looks right" 或 "Send the README to Code" 时,模型会识别意图并自动调用中继。

📚 详细文档

通知设置

当有消息到达时,你会收到系统通知,无需手动轮询。不同平台的通知方法如下: | 平台 | 方法 | 注意事项 | |------|------|----------| | macOS | osascript | 使用原生通知中心 | | Linux | notify-send | 需要安装 libnotify | | Windows | PowerShell toast | 使用原生 Toast 通知 |

声音设置:添加 --sound 参数可启用通知声音。如果不指定值,则使用平台默认声音;如果指定值,则使用指定的声音: | 平台 | 默认声音 | 自定义示例 | |------|---------|----------------| | macOS | blow | --sound tink | | Linux | freedesktop 消息声音 | --sound /path/to/sound.oga | | Windows | 系统默认声音 | --sound ms-winsoundevent:Notification.IM |

通知的持续时间和显示行为由你的操作系统设置控制。

工具说明

| 工具 | 描述 | |------|-------------| | relay_send(message, sender) | 发送消息(sender 可以是 "desktop" 或 "code") | | relay_fetch(limit, reader, unread_only) | 获取最近的消息,可选择标记为已读 | | relay_clear() | 删除缓冲区中的所有消息 |

🔧 技术细节

  • 缓冲区:使用 SQLite 数据库,存储在 ~/.relay_buffer.db
  • 滚动窗口:最多存储 20 条消息,旧消息先被移除。
  • 消息限制:每条消息最大为 64 KB。
  • 空闲超时:1 小时,服务器在无活动时会自动退出。
  • 传输方式:使用标准输入输出(标准 MCP)。
  • Python 版本:需要 Python 3.9 及以上版本。

📄 许可证

文档中未提及相关信息,故跳过该章节。

作者

Michael Coen — mhcoen@alum.mit.edu · mhcoen@gmail.com

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端