关于 three.ws Herald
Herald 是一个 MCP 服务,让 Agent 在任务完成或卡住时,通过浏览器中的 3D 角色用语音主动告知用户。它面向希望及时收到重要提醒、而不是翻阅日志的用户,并通过稀少的打断机制控制干扰。
主要功能
- 013D 角色在浏览器标签页中播报消息
- 02announce 工具可设置重要度、语气与链接
- 03announce_result 根据任务结果自动决定紧急程度
- 04check_rail 无打扰地验证密钥与通道
- 05按账户所有者的在线会话投递,不可指定其他接收者
适用场景
- 01长时间任务完成后通知用户
- 02任务失败或服务异常时及时提醒
- 03需要用户做出决定时主动发出通知
MCP 相关
Herald 以 MCP 服务形式运行,向 MCP 客户端暴露 announce、announce_result 和 check_rail 三个工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @three-ws/herald-mcpTHREE_WS_API_KEY密钥A three.ws API key (sk_live_… / sk_test_…) with the herald:announce scope, or an OAuth access token for the same account, carried as Authorization: Bearer. Required: an announcement is always delivered to the key owner's own sessions. Aliases: THREE_WS_TOKEN, THREE_WS_BEARER. Treat like a password.THREE_WS_BASEBase URL of the three.ws API. Override only when self-hosting or targeting a preview deployment.THREE_WS_TIMEOUT_MSPer-request timeout in milliseconds for the announce call.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
3收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | string | 否 | 去重键。共享同一键的公告只会播报一次,因此重试任务可以在每次尝试时调用此项,而不会重复播报。 |
| url | string | 否 | 点击后跳转到的位置:绝对 https URL 或 three.ws 路径。 |
| from | string | 否 | 消息的来源归属,会作为署名说出(“your build”、“Stripe”或 Agent 名称)。 |
| text | string | 是 | 要大声说出的一句话。限一句。写成口语,不要写成日志行。 |
| tone | enum | 否 | 设置气泡颜色并选择默认手势。默认值为 alert。neutral | alert | celebrate | error |
| emote | enum | 否 | 头像出现时做出的手势。不支持该动作的 rig 会改为挥手。wave | dance | punch | backflip |
| importance | integer | 否 | 0-100,默认值为 70。客户端会丢弃低于自身下限(默认值为 50)的内容,并且仅允许重要性达到 90+ 的内容在安静时段发送。故障或阻塞任务时使用 90+;任务完成时使用 60-80;可以等待查看收件箱的内容使用 50 以下。 |
详细介绍
@three-ws/herald-mcp
让你的 Agent 当面告诉你一件事。
这是一个只有一个理念的 MCP 服务:当 Agent 完成了重要任务,或遇到阻碍时,它不该只在你永远不会回头查看的日志里添上一行。它应该走到你面前,告诉你。
接入后,它就会这么做。你专属的 3D 伙伴会出现在当前打开的任意浏览器标签页角落,做出手势,并大声说出这句话,同时提供一个可点击的链接。
you: run the migration, then the backfill, and tell me when it's done
agent: [runs for 22 minutes]
[calls announce_result: task "the backfill", outcome succeeded, 1320s]
your browser: your avatar walks on: "the backfill finished in 22m"
工具
| 工具 | 功能 |
|---|---|
announce | 说一句话,并设置重要性(0-100)、语气、手势和可选链接。 |
announce_result | 报告任务已完成。紧急程度会根据结果选择,因此失败通知会穿透安静时段,而成功通知不会。 |
check_rail | 验证密钥和通道是否正常工作,同时不打扰任何人(以重要性 0 排队,所有客户端都会丢弃此通知)。 |
安装
npx -y @three-ws/herald-mcp
Claude Code:
claude mcp add herald -e THREE_WS_API_KEY=sk_live_... -- npx -y @three-ws/herald-mcp
Claude Desktop / Cursor(mcp.json):
{
"mcpServers": {
"herald": {
"command": "npx",
"args": ["-y", "@three-ws/herald-mcp"],
"env": { "THREE_WS_API_KEY": "sk_live_..." }
}
}
}
密钥
在 three.ws/dashboard/developers 创建一个密钥,并授予 herald:announce 权限,然后将其放入 THREE_WS_API_KEY。
公告始终会发送给密钥所有者自己的在线会话。 没有接收者参数:此服务无法指定给其他任何人,因此密钥泄露后,最坏的情况也只是惹恼泄露密钥的人。可在同一页面撤销密钥。
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
THREE_WS_API_KEY | 是 | 具有 herald:announce 权限的 API 密钥,或 OAuth 访问令牌。别名:THREE_WS_TOKEN、THREE_WS_BEARER。 | |
THREE_WS_BASE | 否 | https://three.ws | 用于自托管或预览部署的覆盖值。 |
THREE_WS_TIMEOUT_MS | 否 | 20000 | 每次请求的超时时间。 |
何时使用(以及何时不使用)
公告之所以稀少,是刻意为之。接收客户端会应用重要性下限、速率限制、去重、安静时段和时效窗口,因此未达到门槛的内容会被丢弃,而不会排队。这正是它的特点:只有在打扰足够少见时,打断才有效。
适合:耗时任务已完成、任务失败、需要做决定、出现故障、资金发生变动。
不适合:进度更新、“开始第 3 步,共 7 步”之类的内容,以及任何之后可以阅读的信息。这些内容应放在通知收件箱中(@three-ws/notifications-mcp)。
如果没有打开任何页面接收通知,这句话会在约五分钟后过期。此通道是实时通道,不是存档。
调用示例
// something broke, and it should wake somebody up
{ "name": "announce", "arguments": {
"text": "The payments worker has been failing for 10 minutes",
"from": "watchdog", "importance": 95, "tone": "error",
"url": "https://three.ws/dashboard", "key": "payments-worker-down" } }
// a long task finished, and it should not
{ "name": "announce_result", "arguments": {
"task": "the nightly backfill", "outcome": "succeeded", "seconds": 1320 } }
// wiring check
{ "name": "check_rail", "arguments": { "note": "claude-code" } }
如何将消息发送到浏览器
POST /api/herald/announce 会将这句话排入账户的通道;页面通过 SSE 监听,并将其交给 @three-ws/herald,由它判断是否符合用户自己的规则,然后通过 3D 伙伴发送通知(如果没有 GPU,则显示无障碍卡片)。
可在 three.ws/herald 试用完整流程,包括规则引擎。
许可证
Apache-2.0。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。