跳到正文
FunCoding

搜索

搜索文档、智能体、博客、Skill 和 MCP

用 Channels 向会话推送事件

Channel 是把消息、告警和 webhook 推进运行中 Claude Code 会话的 MCP 服务器:支持的渠道(Telegram、Discord、iMessage)、fakechat 快速开始、安全、企业控制、研究预览限制与对比(研究预览)。

Channels 处于研究预览阶段:需要通过 claude.ai 或 Console API Key 的 Anthropic 认证,在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上不可用。Team 和 Enterprise 组织需要由管理员先明确启用。

Channel 是一个把事件推进你正在运行的 Claude Code 会话的 MCP 服务器,让 Claude 能对你不在终端前时发生的事情作出反应。Channel 可以是双向的:Claude 读到事件后,通过同一个 channel 回复,像一座聊天桥。事件只在会话打开期间到达,所以要做到常驻,就让 Claude 运行在后台进程或持久终端里。

与启动新云端会话或等你去轮询的集成不同,事件到达的是你已经打开的那个会话(对比见下面「Channels 与其他功能的比较」)。

你把 channel 作为插件安装,并用自己的凭据配置它。研究预览里包含 Telegram、Discord 和 iMessage。当 Claude 通过 channel 回复时,你在终端里看到的是收到的消息,而不是回复的文字:终端显示工具调用和一条确认(如「sent」),真正的回复出现在另一个平台上。

如果你管理 Team、Enterprise 或 Console 组织,见「为你的组织启用 channels」。要构建自己的 channel,见 Channels reference。

支持的渠道

每个受支持的渠道都是一个需要 Bun 的插件。在连接真实平台前,可以先用 fakechat 快速开始体验插件流程。

Telegram

  1. 创建 Telegram 机器人:在 Telegram 里打开 BotFather 发送 /newbot,给它一个显示名和一个以 bot 结尾的唯一用户名,复制 BotFather 返回的令牌。

  2. 安装插件:在 Claude Code 里运行 /plugin install telegram@claude-plugins-official。如果安装失败,按 Claude Code 报告的消息处理:Marketplace "claude-plugins-official" not found 时,先用 /plugin marketplace add anthropics/claude-plugins-official 添加市场再重试;插件在市场里找不到时,检查插件名称。安装询问范围时选用户范围,让插件在所有项目里可用。查看安装摘要:如果它报告 Run /reload-plugins to activate.,按「不重启应用插件改动」让插件的 configure 命令可用。

  3. 配置令牌:用 BotFather 给的令牌运行 /telegram:configure <token>,保存到 ~/.claude/channels/telegram/.env;也可以在启动 Claude Code 前在 shell 环境里设置 TELEGRAM_BOT_TOKEN。

  4. 启用 channel 重启:退出 Claude Code,带 channel 标志重启,这会启动 Telegram 插件并开始轮询你机器人的消息:

    claude --channels plugin:telegram@claude-plugins-official
  5. 配对你的账号:在 Telegram 里给你的机器人发任意消息,它会回复一个配对码。如果机器人没响应,确认 Claude Code 是带上一步的 --channels 运行的:机器人只有在 channel 活动时才能回复。回到 Claude Code 运行 /telegram:access pair <code>,然后锁定访问,让只有你的账号能发消息:/telegram:access policy allowlist。

Discord

  1. 创建 Discord 机器人:进入 Discord Developer Portal,点 New Application 并命名;在 Bot 部分创建用户名,然后点 Reset Token 并复制令牌。

  2. 启用 Message Content Intent:在机器人设置里滚动到 Privileged Gateway Intents,启用 Message Content Intent。

  3. 邀请机器人进入你的服务器:进入 OAuth2 > URL Generator,选 bot 范围并启用这些权限:View Channels、Send Messages、Send Messages in Threads、Read Message History、Attach Files、Add Reactions;打开生成的 URL,把机器人加到你的服务器。

  4. 安装插件:运行 /plugin install discord@claude-plugins-official,失败时的处理和选范围、/reload-plugins 的说明与 Telegram 相同。

  5. 配置令牌:用你复制的机器人令牌运行 /discord:configure <token>,保存到 ~/.claude/channels/discord/.env;也可以在启动前在 shell 环境里设置 DISCORD_BOT_TOKEN。

  6. 启用 channel 重启:退出 Claude Code 并带 channel 标志重启,连接 Discord 插件,让你的机器人能接收和回应消息:

    claude --channels plugin:discord@claude-plugins-official
  7. 配对你的账号:在 Discord 里私信你的机器人,它会回复配对码(机器人没响应时同样先确认 --channels 在运行)。回到 Claude Code 运行 /discord:access pair <code>,然后用 /discord:access policy allowlist 锁定访问,让只有你的账号能发消息。

iMessage

iMessage channel 直接读取你的 Messages 数据库,并通过 AppleScript 发送回复。它需要 macOS,不需要机器人令牌或外部服务。

  1. 授予完全磁盘访问权限:~/Library/Messages/chat.db 处的 Messages 数据库受 macOS 保护。服务器第一次读取它时,macOS 提示访问:点 Allow,提示里点名的是启动 Bun 的那个应用(如 Terminal、iTerm 或你的 IDE)。如果提示没出现或你点了不允许,在 System Settings > Privacy & Security > Full Disk Access 里手动授权并添加你的终端;没有它,服务器会立即以 authorization denied 退出。

  2. 安装插件:运行 /plugin install imessage@claude-plugins-official(失败时的处理同上,选用户范围)。如果安装摘要报告 Run /reload-plugins to activate.,这里不用处理,因为下一步重启会加载该插件。

  3. 启用 channel 重启:退出 Claude Code 并带 channel 标志重启:

    claude --channels plugin:imessage@claude-plugins-official
  4. 给自己发短信:在任何登录了你 Apple ID 的设备上打开 Messages,给自己发一条消息,它会立即到达 Claude:给自己发消息绕过访问控制,无需设置。Claude 发出的第一条回复会触发 macOS 的 Automation 提示,询问你的终端是否能控制 Messages,点 OK。

  5. 允许其他发送者:默认只有你自己的消息会通过。要让其他联系人能联系 Claude,添加他们的句柄:/imessage:access allow +15551234567。句柄是 +国家码 格式的电话号码,或 user@example.com 这样的 Apple ID 邮箱。

快速开始

Fakechat 是官方支持的演示 channel,在 localhost 上运行一个聊天界面,不需要认证,也没有外部服务要配置。安装并启用 fakechat 后,你可以在浏览器里输入,消息到达你的 Claude Code 会话;Claude 回复,回复又显示回浏览器。测试过 fakechat 界面后,再试 Telegram、Discord 或 iMessage。

要试 fakechat 演示,你需要:

  • 已安装并认证的 Claude Code,用 claude.ai 账号或 Claude Console API key。
  • 已安装的 Bun:预构建的 channel 插件都是 Bun 脚本。用 bun --version 检查;失败的话安装 Bun。
  • Team、Enterprise 或受管的 Console 组织:你的管理员必须在托管设置里启用 channels。

1. 安装 fakechat channel 插件。 启动一个 Claude Code 会话并运行安装命令:

/plugin install fakechat@claude-plugins-official

失败时的处理同上;询问安装范围时选用户范围。如果安装摘要报告 Run /reload-plugins to activate.,这里不用处理,因为下一步重启会加载该插件。

2. 启用 channel 重启。 退出 Claude Code,用 --channels 重启并传入你安装的 fakechat 插件:

claude --channels plugin:fakechat@claude-plugins-official

fakechat 服务器自动启动。启动画面显示一条 channels 通知,说明来自 plugin:fakechat@claude-plugins-official 的消息直接注入这个会话;如果插件没有安装或不在批准的允许列表里,该通知下方会出现点名问题的警告行。你可以向 --channels 传多个插件,用空格分隔。

3. 推送一条消息进来。 打开 http://localhost:8787 的 fakechat 界面并输入一条消息:

what's in my working directory?

消息到达你的 Claude Code 会话。终端把它显示为一行入站 channel 内容,如 ← fakechat · web: what's in my working directory?,而模型收到的是一个 <channel source="plugin:fakechat:fakechat"> 事件,使用插件的限定服务器名。Claude 读取它、完成工作并调用 fakechat 的 reply 工具;如果 Claude Code 为第一次回复请求权限,批准它,答案就显示在聊天界面里。

如果你离开终端时 Claude 遇到权限提示,会话会暂停到你响应为止。声明了权限中继能力的 channel 服务器可以把这些提示转发给你,让你远程批准或拒绝。无人值守使用时,--dangerously-skip-permissions 会绕过大多数提示,但只在你信任的环境里使用;即使这样,没有任何模式会自动批准的那些操作仍然适用。

当你用 -p 在非交互模式运行 channels 时,需要终端输入的工具(如多选问题和 plan 模式批准)被禁用,所以会话永远不会停下来等输入。

安全

每个获批的 channel 插件都维护一个发送者允许列表:只有你添加过的 ID 才能推送消息,其他所有人都被静默丢弃。

Telegram 和 Discord 通过配对来引导这个列表:

  1. 在 Telegram 或 Discord 里找到你的机器人并给它发任意消息。
  2. 机器人回复一个配对码。
  3. 在你的 Claude Code 会话里,出现提示时批准该代码。
  4. 你的发送者 ID 被加入允许列表。

iMessage 的做法不同:给自己发短信会自动绕过这道关口,其他联系人用 /imessage:access allow 按句柄添加。

除此之外,你用 --channels 控制每个会话启用哪些服务器,你的组织则在 claude.ai Team 和 Enterprise 套餐上以及部署了托管设置的 Console 组织上,通过 channelsEnabled 控制可用性。只在 .mcp.json 里是不足以推送消息的:服务器还必须在 --channels 里被点名。

如果 channel 声明了权限中继,允许列表也会管控它:任何能通过该 channel 回复的人都能批准或拒绝你会话里的工具使用,所以只把你信任拥有这种权限的发送者加入允许列表。

企业控制

管理员通过两个用户无法覆盖的托管设置控制可用性,默认值取决于你如何认证:

  • claude.ai Team 和 Enterprise:channels 被阻止,直到 Owner 启用它们。
  • 使用 API key 认证的 Anthropic Console:channels 默认允许;只有当你的组织部署了托管设置时才需要这个设置。

任何情况下,在用户用 --channels 为会话选择加入之前,没有 channel 会运行。

设置用途未配置时
channelsEnabled总开关。必须为 true,任何 channel 才能投递消息;关闭时阻止所有 channel,包括开发标志claude.ai Team 和 Enterprise:channels 被阻止;Console:channels 允许,除非你的组织部署了托管设置,此时在设置该键之前 channels 被阻止
allowedChannelPluginschannels 启用后哪些插件能注册;设置后会替换 Anthropic 维护的列表适用 Anthropic 的默认列表

没有组织的 Pro 和 Max 用户完全跳过这些检查:channels 可用,用户按会话用 --channels 选择加入。

为你的组织启用 channels

从 claude.ai → Admin settings → Claude Code → Channels 为你的组织启用 channels(需要 Owner 角色),或者在托管设置里把 channelsEnabled 设为 true。启用后,你组织里的用户可以用 --channels 把 channel 服务器选入单个会话。如果该设置被禁用或未设置,MCP 服务器仍然连接、它的工具也能用,但 channel 消息不会到达;启动警告会告诉用户让管理员启用这个设置。

限制哪些 channel 插件可以运行

默认情况下,Anthropic 维护的允许列表里的任何插件都能注册为 channel。Team 和 Enterprise 套餐的管理员可以在托管设置里设置 allowedChannelPlugins,用自己的列表替换它,用来限制允许哪些官方插件、批准来自你自己内部市场的 channel,或两者兼有。每个条目点名一个插件及其来源市场:

{
  "channelsEnabled": true,
  "allowedChannelPlugins": [
    { "marketplace": "claude-plugins-official", "plugin": "telegram" },
    { "marketplace": "claude-plugins-official", "plugin": "discord" },
    { "marketplace": "acme-corp-plugins", "plugin": "internal-alerts" }
  ]
}

如果你设置了空数组,就阻止了允许列表里的所有 channel 插件,但 --dangerously-load-development-channels 仍可以为本地测试绕过这个阻止;要连开发标志一起彻底阻止 channels,改为不设置 channelsEnabled。

该设置要求 channelsEnabled: true。如果用户向 --channels 传入了不在你列表里的插件,Claude Code 正常启动,但该 channel 不会注册,启动通知会说明该插件不在组织批准的列表里。如果你在 v2 MCP 客户端运行时把 MCP_PROTOCOL_NEGOTIATION 设为 auto,channel 也可能注册失败,因为 Claude Code 不注册协商协议修订版 2026-07-28 的 channel 服务器。

研究预览

Channels 是研究预览功能。可用性正在逐步推出,--channels 标志的语法和协议约定可能根据反馈变化。在预览期间,claude --help 里既不列出 --channels 也不列出 --dangerously-load-development-channels,这些标志虽然没有列出但可以使用。

预览期间,--channels 只接受来自 Anthropic 维护的允许列表的插件,或者管理员设置了 allowedChannelPlugins 时来自你组织的允许列表的插件;claude-plugins-official 里的 channel 插件是默认的批准集合。如果你传入的东西不在有效的允许列表上,Claude Code 正常启动,但该 channel 不注册,启动通知会告诉你原因。要测试你正在构建的 channel,用 plugin:<name>@<marketplace> 或 server:<name> 的形式把它传给 --dangerously-load-development-channels;测试你构建的自定义 channel 见 Channels reference 的「Test during the research preview」。问题或反馈报告到 Claude Code 的 GitHub 仓库。

Channels 与其他功能的比较

几个 Claude Code 功能连接终端之外的系统,各自适合不同种类的工作:

功能做什么适合
云端会话在从 GitHub 克隆的全新云沙盒里运行任务委派你稍后再查看的、自成一体的异步工作
Slack 里的 Claude从频道或线程里的 @Claude 提及启动一个云端会话直接从团队对话上下文发起任务
标准 MCP 服务器Claude 在任务期间查询它;没有东西被推送到会话让 Claude 按需读取或查询某个系统
Remote Control你从 claude.ai 或 Claude 移动应用驱动你的本地会话离开办公桌时引导进行中的会话

Channels 填补了这张清单里的空白:把来自非 Claude 来源的事件推进你已经在运行的本地会话。

  • 聊天桥:用手机通过 Telegram、Discord 或 iMessage 问 Claude 点什么,答案回到同一个聊天里,而工作在你的机器上针对你真实的文件运行。
  • Webhook 接收器:来自 CI、你的错误跟踪器、部署流水线或其他外部服务的 webhook,到达 Claude 已经打开了你的文件、并记得你在调试什么的地方。

自己构建 channel

想构建自己的 channel,见官方的 Channels reference:它讲如何做一个把 webhook、告警和聊天消息推进 Claude Code 会话的 MCP 服务器。想在事件发生时就响应而不是轮询,用 channel;想按计划重复运行提示词,用定时任务。

下一步

  • 为还没有插件的系统构建你自己的 channel。
  • Remote Control:从手机驱动本地会话,而不是把事件转发进去。
  • 定时任务:按计时器轮询,而不是对推送的事件作出反应。