开发工具#MCP

PushGo:可自建的跨平台消息推送与事件告警

PushGo 把通知拆成消息、事件、对象三个模型,Rust 网关可自建,QUIC/MQTT 5 通道加 MCP 网关,AI 助手也能直接发推送。

项目资料

GitHub Ecosystem
仓库地址github.com/AldenClark/pushgo-gateway
许可证
MIT
主语言
Rust
星标
39
核查时间
2026-10-14

以上快照资料以核查当日为准,可能随版本或运营策略变化。

自托管推送的常见形态是 ntfy 或 Gotify:一条文本推到手机,够用,但告警一多,「哪个对象、出了什么事、要不要处理」全靠自己在标题里写清楚。公众号「Mason的小窝」10 月 13 日介绍的 PushGo 把这件事拆成了结构:通知不再是孤立的字符串,而是消息、事件、对象三个模型——对象是你在盯的服务器、NAS 或门锁,事件是对象上的状态变化,消息才是投递到设备的正文。网关用 Rust 写成、MIT 开源,官方 iOS/macOS/watchOS 客户端已经上了 App Store。

核心功能

  • 消息、事件、对象三个模型:App Store 页面对它的定位是「给开发者、DevOps、自托管与智能家居的推送与事件告警」——对象承载「是什么在变」,事件承载「怎么变的、要不要处理」,消息负责正文,告警不再是需要人脑解码的一行字。
  • 一个网关四种通道:公开的 HTTP API(设备、频道、消息、事件)之外,私有实时通道支持 QUIC、Raw TCP、WSS 和 MQTT 5(仅 QoS 1),按部署环境挑着开;MQTT 下行是实时出口,不落 outbox。
  • 投递先落盘再发送:下行先写应用 outbox,收到确认(PUBACK)才清除,重连后重放;发送端可用 op_id 做幂等重试——同一个 op_id 换了 payload 会返回 409,投递状态用 /send_status/{op_id} 查询;单条 MQTT 包上限默认 32KB(32768 字节)。
  • 内置 MCP 网关:--mcp-enabled 会在同一 HTTP 端口挂载 /mcp 与 OAuth 流程,支持预定义客户端——AI 助手作为 MCP 客户端绑定频道后可以直接发推送。
  • 官方客户端齐全:Apple 端(iOS 17+/macOS 14+/watchOS 10+)在 App Store 有签名的正式包,TestFlight 也在更新,Android 是 GitHub 上的 Kotlin 客户端;App Store 页面称推送走 APNs 且支持端到端加密(E2EE)。
  • 自建或托管两便:官方托管分全球区(*.pushgo.dev)与中国区(*.pushgo.cn,默认 token 服务指向后者);自建有 Docker Compose 与 systemd 模板,小规模 SQLite 起步,大流量换 PostgreSQL/MySQL。

典型使用场景

  • 家里有 NAS、智能家居和一堆脚本的人:设备作为「对象」接入,异常变成「事件」,手机收到的是结构化的告警而不是一行要猜的文本。
  • 管着若干服务器的运维:告警、处理进度、恢复通知按对象串起来,op_id 幂等重试保证脚本重跑不会重复轰炸。
  • 想让 AI 助手主动汇报的人:MCP 客户端绑定频道后,跑长任务的 agent 可以在关键节点自己推送进度。

快速上手

最短路径是 App Store 装 PushGo,配好官方 token 服务即收推送;自建从 pushgo-gateway 的 README 进,Docker Compose 与 systemd unit 模板都在仓库里,最小配置是 PUSHGO_DB_URL(SQLite 或 Postgres/MySQL)加 --private-transports 选通道(如 quic,tcp,wss,mqtt,QUIC 需配 TLS 证书)。

小结

适合把「消息可靠到达」看得比什么都重的自托管玩家和运维;想要大社区和现成教程的人现在还得不到——项目很早期(截至 2026-10-14 网关 39 star、Apple 客户端 52 star、Android 10 star),README 以协议细节为主。网关 Rust、客户端 Swift/Kotlin,三个仓库都是 MIT。

两个使用前要知道的点:MQTT 下行不持久化,离线的 MQTT 接收者不补投,要可靠补投走客户端通道;「端到端加密」目前是 App Store 商店页的口径,网关 README 落在通道层 TLS 与频道密码上,自建部署的加密边界需要自己核实。同为「把消息可靠送到」的路线,Mailflare 管的是邮件怎么落到自己的 Cloudflare 账号里,PushGo 管的是事件怎么推到口袋里。