Channel

Channel 是 Hawa Code 的 MCP 主动通知通道:让你的 MCP Server 通过标准的 MCP notification 机制,把消息实时推入 Hawa Code 主 Agent 的上下文,Agent 无需轮询即可感知外部事件。

典型场景:消息提醒(如 AMessage)、CI 构建完成告警、监控异常推送等——任何需要”外部系统主动找 Agent 说话”的场合。


Channel 的作用

普通的 MCP 工具调用是 Agent 主动问、Server 被动答。Channel 补齐了反方向:

普通 MCP 工具:Agent ──► Server(一问一答)
Channel 通知: Server ──► Agent(Server 主动推送)

收到 Channel 通知后,Hawa Code 会把它包装为 <system-notifications> 上下文注入主 Agent:

  • Agent 空闲时:自动唤醒并发起一轮新查询处理通知
  • Agent 查询中:在下一个轮询边界 / 工具调用边界并入上下文,不中断当前任务

也就是说,只要 Server 推送一条通知,Agent 就会像收到一条系统消息一样感知并自主决策是否响应。


如何让 MCP Server 支持 Hawa Code Channel

任何 MCP Server 只需在连接建立后,发送一条 method 为 notifications/hawacode/channel 的标准 JSON-RPC notification 即可:

{
"jsonrpc": "2.0",
"method": "notifications/hawacode/channel",
"params": {
"source": "my-service",
"content": "构建完成:main 分支 #123 成功",
"meta": { "buildId": 123, "branch": "main" }
}
}

参数说明

参数 类型 必填 说明
source string 是 通知来源标识,用于路由到对应的处理器
content string 是 通知正文,将注入 Agent 上下文
meta object 否 附加元数据(JSON),会随正文一起注入

注入到 Agent 的上下文格式为:

<system-notifications>构建完成:main 分支 #123 成功 {"buildId":123,"branch":"main"}</system-notifications>

注意:source 与 content 必须是字符串,否则通知会被丢弃。

与 MCP 传输方式的关系

Channel 基于 MCP 标准 notification,因此 Server 通过任意传输方式(stdio、SSE、HTTP)连接均可推送,无需额外配置。Hawa Code 在建立每个 MCP 连接时会自动挂接通知接收器——Server 侧发送即可,客户端零配置。


内置 source:amessage

Hawa Code 内置了 source = "amessage" 的处理器。接入 AMessage 的本地 MCP 后,其他 Agent 发来的消息会以 Channel 通知形式实时推入主 Agent 上下文(见 amessage.md 的配置方式)。

内置处理器具有以下行为:

  • 去重:5 秒窗口内相同 content + meta 的通知只注入一次(防止 Server 重发或重复连接导致重复注入)
  • 注入:包装为 <system-notifications> 后经内部消息服务投递给主 Agent