mcpField
T
t3-watch

t3-watch

本地服务
github.com云与基础设施03 天前更新

关于 t3-watch

t3-watch 是持续监控 CI、云账户、API 密钥、网址和定时任务的服务,面向希望在出现变化时才介入的团队与个人。它以定时运行的代码执行检查,并可让 Agent 调查故障、编写检查和发送提醒。

主要功能

  1. 01监控 CI、云账户与 API
  2. 02按计划运行代码检查
  3. 03扫描项目并建议检查
  4. 04故障调查与检查编写
  5. 05网页查看状态及历史
  6. 06Slack 与线程提醒

适用场景

  1. 01发现 CI 工作流失败
  2. 02监测 API 服务可用性
  3. 03确认定时任务是否运行
  4. 04故障变化时通知 Slack 或线程

MCP 相关

提供 MCP 服务,供 MCP 客户端中的 Agent 查询监控状态、调查失败并编写检查。安装命令可将服务配置到 Codex 和 Claude Code。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"ai-lfglabs-t3-watch": {
"command": "npx",
"args": [
"-y",
"@lfg-labs/t3-watch"
]
}
}
}
启动命令npx -y @lfg-labs/t3-watch

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@lfg-labs/t3-watch0.6.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

t3-watch

为无人值守之事随时待命的 Agent。检查可免费运行;只有发生变化时,你的 Agent 才会唤醒。

Watch 会留意你运行的系统:CI、云账号、API 密钥、URL 和定时任务。它会根据你机器上已有的项目和登录信息完成设置,并按自己的时钟以纯代码运行检查,因此不会消耗模型令牌。

  • 页面用于了解情况并做出决策:哪些出了问题、哪些事情在等你处理,以及一键启用、暂停和添加密钥。密钥只在这里粘贴,绝不放进聊天中。Details 可以编辑检查的名称、运行频率和设置,也可以删除检查;删除的检查会保留历史记录,并且可以恢复。
  • 聊天用于理解情况和编写检查。在 T3 Code 中的“Watch”对话线程(或任何 MCP 客户端)可以调查故障、编写新检查,并在聊天中内嵌显示页面。

60 秒演示:一条命令即可启动;首页突出显示故障检查及 Agent 对它的备注;启用由 Agent 编写的检查;打开产品及其检查;Details 显示密钥和已签名的测试警报

60 秒演示,使用示例数据,通过 npx @lfg-labs/t3-watch demo 录制。点击查看更清晰的 MP4,GitHub 会将其作为下载文件提供。

网站 · MCP Registry

先试用

npx @lfg-labs/t3-watch demo

使用 Node 24 或更高版本,演示会在这台机器上运行带有示例检查的 Watch,并打印用于打开页面的登录链接。其中的每项检查和警报都会得到预设答复;演示既不会扫描,也不会获取密钥,因此不会访问你的任何账号,也不会向机器外发送任何内容。登录演示不会使你自己的 Watch 登录。按 Ctrl-C 可停止并移除演示。这里的视频和截图均由演示生成。

各产品及其检查在 Details 中编辑检查
展开后的产品列表,每个产品都列出其检查及最新结果打开编辑表单的 Details:名称、运行频率和以 JSON 格式表示的设置

安装

Watch 需要运行在持续开机的机器上,并使用 Node 24 或更高版本。

npm install -g @lfg-labs/t3-watch
t3-watch install

install 会让 Watch 在登录时于后台运行(Linux 上使用 systemd,macOS 上使用 launchd),将其 MCP 服务添加到 Codex 和 Claude Code,并打印用于打开页面的登录链接。登录链接只能使用一次,且 10 分钟后失效,因此用过后,留在终端、日志或聊天中的链接副本就无法再用。对于其他浏览器,运行 t3-watch url 可生成新链接,也可以向 Watch 对话线程索取页面链接。每个浏览器都有自己的会话,不会获得 Agent 使用的访问令牌;运行 t3-watch signout 会让所有浏览器退出登录,但 Agent 仍可继续工作。

T3 Code 可以为同一个提供商运行多个账号,每个账号都有独立的主目录。t3-watch install --all 还会将 Watch 的 MCP 服务添加到 T3 设置中所有已启用的 Claude Code 和 Codex 主目录,因此任何账号中的 Watch 对话线程都能使用它;t3-watch uninstall --all 则会将其从这些主目录中移除。

如需从检出目录运行,请先克隆此仓库,再运行 pnpm install && pnpm build,然后运行 node bin/t3-watch.js install。

在 Linux 上,运行 loginctl enable-linger $USER 可让它在你注销后继续运行。

如果机器上运行着 Tailscale,install 会通过 tailscale serve 在 tailnet 上使用 HTTPS 提供页面服务,不会使用 funnel,端口为 8461 或下一个空闲端口,登录链接也会指向该地址。该页面只会在你自己的设备上打开,其他地方无法访问。Tailscale 只允许其操作员执行此操作:如果 install 提示需要设置,请运行一次 sudo tailscale set --operator=$USER,然后重新安装。--no-tailscale 会让页面仅在本机提供服务;你在 ~/.t3-watch/config.json 中设置的 publicUrl 会保持不变;uninstall 会停止安装时创建的路由。如果其中的 host 是 tailnet 地址,Watch 也会监听 127.0.0.1,以便 tailscale serve 将流量转发至此。

首次运行

打开页面。页面首先会显示 Watch 可能读取的内容:它会查看的文件夹——~/Projects 以及存在的 ~/code、~/src 和 ~/dev,并显示每个文件夹包含的 Git 仓库数量;还有三种登录信息:GitHub CLI、AWS CLI 配置文件,以及 .env 文件中的供应商密钥。 取消勾选你不想让 Watch 读取的项目,也可以添加文件夹,然后按 扫描这些项目。Watch 只会读取勾选的项目:它会查找你的代码使用了哪些供应商,测试你允许使用的登录信息,并 运行每项建议的检查一次。取消勾选不需要的检查,然后按 监控这些项目。 添加服务会在之后每次扫描前显示相同的选项,Agent 也可以通过 watch_sources 读取这些选项。

Watch 只会读取。它找到的密钥会加密存储在 ~/.t3-watch 中,其值绝不会显示在页面、日志或 Agent 中。

Watch 线程

install 会在 T3 Code 中添加一个名为 Watch 的项目,放在独立文件夹中且不含代码,因此在其中启动的线程不会加载任何仓库的钩子、技能或记忆。在其中启动一个线程,并说“Show me Watch”。Agent 会调用 watch_home。在 Codex 线程中,页面会内嵌显示,且其中的按钮可以使用;在其他提供商中,你会看到相同状态的文本形式。install --no-project 会跳过该项目,而 uninstall 会保留该项目及其线程。

可以这样询问:

  • “哪里出问题了?”或“为什么 api 的 CI 失败了?”
  • “暂停 Stripe 检查,直到周一。”
  • “确认夜间导入任务已运行。”Agent 会起草一项检查,运行一次,然后留给你启用。
  • “也监控 Missive。”Agent 会编写供应商说明,并使用你的密钥进行测试。
  • “将 shop.example 归到 Storefront 下。”主页会按产品对检查分组,产品名称根据名称推测;如果网站的仓库名称不同,Agent 会为产品命名,仓库则会随之归类。
  • “设置告警。”页面 详情中的告警设置会引导你完成三个步骤。按 生成签名密钥,页面只会显示一次。然后在此处说“设置告警”:Agent 会创建一个绑定到该线程的 T3 webhook 任务,用于验证 Watch 的签名;它会让你将密钥粘贴到一张私密 T3 卡片中,为 Watch 提供任务地址,并发送测试告警。只有持有 Watch 密钥时,该任务才会接受告警。你可以按页面上的 发送测试告警,或在终端运行 t3-watch alerts test,随时再发送一条告警进行检查;t3-watch alerts 会说明最近一次告警的结果。密钥绝不会经过聊天传递,Watch 会拒绝通过 MCP 发送的密钥,页面上也只会显示 webhook 的主机名。从此以后,如果某项检查开始失败、恢复正常或无法运行,就会唤醒该线程,Agent 会在你打开线程前调查问题。持续通过的检查不会发送任何内容。如果原本通过的检查连续两次未通过,才会被视为失败;Watch 会在第一次检查后的一分钟内再次运行,因此单次请求丢失不会唤醒任何人。恢复则会立即生效。

Slack 提醒

在 Details 的 Alerts 中,将你自己的 Slack incoming webhook URL 粘贴到密码字段,然后点击 Save Slack webhook。Watch 使用与供应商密钥相同的安装密钥对其加密,不会再次显示该 URL,也绝不会将它交给 Agent。Send Slack test 会检查频道是否接受消息。你可以在那里替换 URL,或点击 Disconnect Slack 停止发送。演示不会使用真实的 Slack URL。

在 Slack 应用中创建 incoming webhook,并选择对应频道。支持 Slack 和 GovSlack。Slack 无需 T3 Code 账户,T3 线程提醒也会继续正常工作。每个目标都有自己的发送队列。新建或替换目标后,只会发送之后发生的变更,不会发送旧事件。

Watch 每次发送一条 Slack 变更通知,发送间隔至少为 1 秒。发送失败时会按服务的分钟计时器重试;遇到 HTTP 429 时会遵循 Slack 的 Retry-After,并在尝试 20 次后停止。Details 会显示最新的测试和发送结果。Slack 通知会报告变更;自动调查仍需要 T3 线程 webhook。

Watch 自身连接断开时

当需要联网的检查未通过时,Watch 会先检查自身是否能连接互联网。如果 https://www.gstatic.com/generate_204 和 https://one.one.one.one/cdn-cgi/trace 都未在 5 秒内响应,Watch 就会暂缓处理该结果:本次运行会在该检查的历史记录中标记为已暂缓,检查保留上次结果,也不会发送提醒。Home 和 Watch 线程的状态会显示 Watch 何时失去连接。本机上的心跳和检查不会暂缓;如果连续运行中检查失败,最多会暂缓一小时,以防被屏蔽的是探测地址。

网络较慢时也会采取同样的处理方式。当 Web 或供应商检查连接公共网站时发生超时、断开或无法完成名称查询,Watch 会测量探测耗时。如果耗时达到或超过 1 秒,或者在 2 分钟内有 2 个或更多网站以这种方式新近发生故障,说明 Watch 自身的网络连接较慢,这类失败会像离线情况一样暂缓处理。连接被拒绝、证书错误、HTTP 响应、GitHub 和 AWS 检查,以及通过地址或 nas、fritz.box 之类的名称访问你自己网络的检查,仍会计入结果。某项检查在暂缓后再次运行时,会等待 45 秒获取响应,而不是 15 秒。Home 和 Watch 线程的状态会显示连接何时变慢;当探测或请求在 400 ms 内得到响应,或者探测不再显示连接较慢时,这段较慢状态就会结束。

如果你的网络屏蔽了这两个地址,请在 ~/.t3-watch/config.json 中将网络允许访问的地址列入 probeUrls,然后重启 Watch。将列表设为空会关闭暂缓处理。Watch 会自动检测地址列表是否被屏蔽:如果检查刚刚成功连接互联网后,这些地址在一小时内连续两次失败,Watch 就会停止暂缓处理,并在 Home 上说明原因,直到其中一个地址响应或 Watch 重启。如果某个 Web 请求刚好比探测等待时间更长,则属于例外情况:此时是网络连接较慢,而不是地址列表被屏蔽。

供应商

每个供应商对应 catalog/ 中的一个 JSON 文件:如何在项目中识别它、哪个变量保存其密钥、如何发送密钥、哪个只读调用可以验证密钥是否有效,以及提供哪些检查。添加供应商只需添加一个文件,无需发布新版本。Watch 只会向描述中指定的 API 源发送 GET 请求。

已支持:Stripe、Pipedrive、Missive、Asana、Airtable、Jotform、Calendly、Vimeo、Sentry、OpenAI、Anthropic、Vercel、Cloudflare、Neon、Supabase、Render、SendGrid、Resend、GitLab.com 和 DigitalOcean。这些新增的描述只能验证 API 访问权限,不能验证部署状态或邮件是否送达。端点、所需权限和限制说明应使用哪个密钥,其中包括 Resend 对完整访问权限的要求,以及 Twilio 和 Linear 目前尚不受支持的原因。系统可以识别 Xero,但目前尚不支持登录类供应商。

无需供应商文件的检查类型:http、github(通过 gh;对于定时工作流,请在 workflow 中指定其名称并添加 maxAgeSeconds,这样 GitHub 跳过或禁用了定时任务时,检查会失败,而不是一直显示正常)、 aws_metric(通过 AWS CLI)和 heartbeat(任务会 ping 一个 URL;失败时添加 ?status=fail)。

对于已有运行记录的仓库,GitHub 的运行记录 API 有时会在一段时间内返回空列表。如果某项 GitHub 检查曾列出其仓库、分支和工作流的运行记录,那么当 GitHub 处于离线状态时,Watch 会像保留失败状态一样保留这个空列表:从 GitHub 返回结果起,最多保留一小时的运行记录,且不会进行探测。如果空列表持续超过该时限,检查会说明情况,例如“GitHub 列出 main 在 owner/repo 中没有运行记录,但此前曾有记录”;如果检查的是任意分支上的某个工作流,则会显示“GitHub 列出 owner/repo 上的 refresh.yml 没有运行记录”。如果列表中没有已完成的运行记录,则仍会显示“No finished runs yet”。编辑其他分支或工作流会重置该检查记忆的状态。

开发

pnpm dev          # the service from source, on 127.0.0.1:8460
pnpm test         # unit and integration tests
pnpm typecheck
pnpm build        # server, page and the inline view
node scripts/record-demo.ts   # the README's demo video again, with Chrome and ffmpeg

设计和需求位于 openspec/。

许可证

根据 MIT license 授权,免费且开源。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。