关于 FastMCP server that pages on-call via 100+ notification channels (Apprise wrappe
paging-mcp 是通过 Apprise 支持的通知渠道发送告警的 FastMCP 服务,适用于需要多渠道通知的值班团队和自动化系统,并提供凭据脱敏与渠道筛选。
主要功能
- 01通过多个渠道发送告警
- 02筛选已配置渠道
- 03向临时渠道发送通知
- 04预览通知而不实际发送
- 05在响应中隐藏凭据
- 06返回各渠道发送结果
适用场景
- 01将监控告警发送给值班人员
- 02通知运维人员批处理任务失败
- 03通过备用渠道发送安全告警
MCP 相关
向 MCP 客户端提供基于 Apprise 的通知工具,包括渠道列表、发送预览和通知分发。渠道通过 APPRISE_URLS 配置,工具响应会隐藏凭据。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
paging-mcp
基于 FastMCP 的服务,可通过 100 多种通知渠道向值班人员发送分页通知。它构建于 Apprise 之上,支持 WhatsApp、ntfy、Pushover、Telegram、Discord、Slack、Signal、Matrix、Gotify、mailto、Twilio SMS、AWS SNS 等数十种服务。
核心目标是独立于服务提供商。接入一个 MCP,按需配置任意数量的渠道,即可获得冗余通知;每次更换服务提供商时,无需重写集成代码。
为什么要开发它
如果你正在构建任何需要叫醒真人的系统——例如 B2B 流水线的合成监控、长时间运行的批处理作业或安全警报——你会需要:
- 并行使用多个渠道,这样单个服务提供商故障时也不会漏掉通知。
- 适合操作人员的渠道(例如,面向拉美地区的值班人员使用 WhatsApp,自托管用户使用 ntfy,个人手机使用 Pushover,而在仍适用的场景中使用 Twilio SMS)。
- 对工具响应中的凭据进行脱敏,避免读取输出的 Agent 将凭据泄露到对话记录中。
- 一个可供 Agent 从任何地方调用的 MCP(Claude Code、Codex、Cursor 等),无需为每个渠道单独部署新的 MCP。
Apprise 在 Python 中解决了第 1、2 点。此服务让 MCP 能够调用 Apprise,并在此基础上实现脱敏和渠道筛选。
安装
打开 Claude Code,粘贴:
/plugin marketplace add adelaidasofia/paging-mcp
/plugin install paging-mcp@paging-mcp
旧版安装方式
git clone https://github.com/adelaidasofia/paging-mcp ~/.claude/paging-mcp
cd ~/.claude/paging-mcp
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
配置
将 APPRISE_URLS 设置为一个或多个 Apprise URL。可使用换行符、分号或逗号分隔:
export APPRISE_URLS="
ntfys://ntfy.sh/<your-secret-topic>
whapi+https://gate.whapi.cloud/messages/text?token=<TOKEN>&to=+57...
pover://<USER_KEY>@<APP_TOKEN>
mailto://user:[email protected]/[email protected]
"
各服务提供商的 Apprise URL 示例:
| 服务提供商 | URL 模式 |
|---|---|
| WhatsApp Business(Whapi) | whapi+https://gate.whapi.cloud/messages/text?token=<TOKEN>&to=<+E164> |
| ntfy | ntfys://ntfy.sh/<topic> |
| Pushover | pover://<USER_KEY>@<APP_TOKEN> |
| Telegram 机器人 | tgram://<BOT_TOKEN>/<CHAT_ID> |
| Twilio SMS | twilio://<SID>:<TOKEN>@<FROM>/<TO> |
| Signal CLI | signal://<from>@<api-host>/<to> |
| Slack 入站 Webhook | slack://<token-a>/<token-b>/<token-c> |
| Discord Webhook | discord://<webhook-id>/<webhook-token> |
| SMTP 邮件 | mailto://<user>:<pass>@<host>:<port>/?to=<dest> |
| AWS SNS | sns://<KEY>/<SECRET>/<REGION>/<TOPIC> |
完整列表:https://github.com/caronc/apprise/wiki
注册到 Claude Code
项目级(<vault>/.mcp.json):
{
"mcpServers": {
"paging": {
"command": "/Users/<you>/.claude/paging-mcp/.venv/bin/python",
"args": ["/Users/<you>/.claude/paging-mcp/server.py"],
"env": {
"APPRISE_URLS": "ntfys://ntfy.sh/<your-secret-topic>"
}
}
}
}
用户级:
claude mcp add -s user paging \
/Users/<you>/.claude/paging-mcp/.venv/bin/python \
/Users/<you>/.claude/paging-mcp/server.py \
--env APPRISE_URLS="ntfys://ntfy.sh/<your-secret-topic>"
重启 Claude Code。使用 claude mcp list 验证。
工具
| 工具 | 功能 |
|---|---|
health_check | 服务自检 + Apprise 版本 + 已配置的频道数量。 |
list_configured_channels | 列出 paging-mcp 将发送通知的频道,凭据已隐藏。 |
notify(title, body, severity, channels?) | 向所有已配置的频道(或按已隐藏的 URL 筛选出的部分频道)发送通知。返回各频道的结果。 |
notify_one(url, title, body, severity) | 向单个临时 Apprise URL 发送通知(不会持久保存)。 |
dry_run(title, body, severity) | 展示 notify() 将发送的内容,但不实际发送。 |
severity 的取值为 info、success、warning 和 failure。使用颜色或图标标记的频道会根据此值进行标记。
测试
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m pytest tests/ -v
16 项单元和集成测试,覆盖 URL 隐藏、多频道发送、部分失败、频道筛选,以及带有 URL 凭据的端到端分页流程。
安全说明
- 工具响应绝不会回显凭据。对于将路径用作密钥的方案(ntfy、pushbullet、pover),也会隐藏最后一个路径段。
notify_one接受临时 URL;如果 Agent 传入明文凭据,仍有责任避免在对话中回显。建议在服务器启动时配置APPRISE_URLS。- 服务器不会持久保存频道或消息;所有数据都只存在于进程内。
遥测
此插件会在某台机器上的 Claude Code 会话中首次加载时,向 myceliumai.co 发送一条匿名安装信号。
发送的内容:
- 插件名称(例如:
slack-mcp) - 插件版本(例如:
0.1.0)
不会发送的内容:
- 不包含用户标识符、姓名、电子邮件、令牌或 API 密钥
- 不包含文件路径、消息内容或任何工作相关内容
- 去重处理后不会存储 IP 地址
原因: 帮助维护者了解用户实际安装了哪些插件,以便将精力投入到有人使用的插件上。
选择退出: 启动 Claude Code 前,将环境变量 MYCELIUM_NO_PING=1 设为指定值。此钩子将完全跳过网络调用。已发送过信号的安装会在 ~/.mycelium/onboarded-<plugin> 留下一个标记文件——如果要重置状态,请将其删除。
许可证
MIT — 参见 LICENSE。
由 Mycelium AI 构建。完整安装版或团队版请访问 diazroa.com。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。