SuperAPI AI 工具集

ntfy-mcp

ntfy-mcp 是一个面向 ntfy 推送通知服务的 Model Context Protocol(MCP)服务器。它让 Claude Code、Claude Desktop、Codex 等 MCP 客户端能够发送通知、读回已发送的消息、在任务运行期间原地更新同一条通知,并在拥有管理员账号时创建账户、授予或撤销其对主题的访问权限。该服务器通过一个名为 NTFY_TOPICS 的环境变量限定可操作的主题范围,避免主题名称进入模型上下文。写入默认开启,支持只读模式与工具过滤(如 essential 精选六件套),提供结构化输出并将返回内容标记为不可信数据。未配置时服务器仍可启动并列出工具,但调用会返回设置说明。

访问官网

工具介绍

ntfy-mcp 是 ntfy 的 Model Context Protocol(MCP)服务器。ntfy 是一个发布-订阅通知服务,只需一个 HTTP 请求即可向手机发送推送消息。该服务器让 Claude Code、Claude Desktop、Codex 等 MCP 客户端可以向用户发送通知、读回已发送的内容、在任务运行期间原地修订一条通知,并且在拥有管理员账号时创建账户、授予或撤销账户对主题的访问权限——这些操作原本需要在服务器上使用 ntfy 命令行完成。

主要能力

  • 发布通知、读取缓存消息、原地更新通知:publish_message 返回的 id 同时也是该通知的序列 id,update_message 可原地替换其内容,因此订阅者看到的是一条通知从“building”变为“deployed”,而不是收集到五条。
  • 用户与主题访问管理:使用管理员账号可创建账户并授予或撤销其对主题的访问权限。
  • 工具数量可调:最多注册十三个工具,也支持通过 NTFY_ALLOW_TOOLS=essential 注册精选的六个工具(get_server_info、check_topic_access、publish_message、list_messages、get_message、update_message)。六件套中有四个是读取工具,因此在 NTFY_READ_ONLY=true 下依然可用。从六个工具中选择比从十三个中选择更可靠。
  • 结构化输出:每个工具都声明 outputSchema,并在文本块之外返回 structuredContent,使客户端无需解析文字即可使用结果。

使用方式

  • 环境变量:NTFY_TOPICS 用于限定该服务器可触碰的主题,并在工具省略主题时提供默认值。NTFY_ALLOW_TOOLS 和 NTFY_DENY_TOOLS 接受逗号分隔的工具名,末尾的 * 可匹配整个工具族。
  • 凭证:凭证是可选的,允许匿名访问的实例无需凭证。同时设置 NTFY_TOKEN 与 NTFY_USERNAME / NTFY_PASSWORD 会在启动时被拒绝,而非按优先级规则解决,以避免凭证归属不明确。建议使用 https://,纯 http 下凭证未加密(basic auth 只是 base64,并非加密),除非主机为本地,否则服务器会打印警告。自签名证书建议使用正规内部 CA,而非 NTFY_INSECURE_TLS。
  • 未配置时:服务器仍会启动并列出其工具(便于注册表和检查器内省),但每次调用都会以设置说明失败,而不会访问 API。
  • 通过 mcp-hub:无法生成本地进程的客户端(ChatGPT connectors、Web 版 Claude、Cursor、LibreChat)可通过 mcp-hub 访问 ntfy-mcp。一个容器通过 Streamable HTTP 服务多个 stdio MCP 服务器,在单一密码后提供 OAuth 2.1 登录,并为无法使用 OAuth 的客户端提供长期令牌。其 /hub 端点将所有服务器置于六个元工具之后。

适用场景

  • 让 MCP 客户端在长时间任务运行期间发送进度通知,并保持为同一条通知。
  • 需要读回已发送消息或检查主题访问权限的场景。
  • 拥有管理员账号时,通过 MCP 客户端管理 ntfy 用户及其主题授权。

限制与注意事项

  • 写入默认开启:NTFY_READ_ONLY 默认为 false。设置 NTFY_READ_ONLY=true 时不注册写入工具;NTFY_DENY_TOOLS 也可按同一方向做更细的裁剪,被过滤的工具根本不会被构建。
  • NTFY_READ_ONLY 解析较为宽松:true、1、yes 均视为只读(不区分大小写),但 NTFY_READ_ONLY=ture 不属于其中,因此仍会启用写入工具。
  • 主题名即凭证:在 ntfy 上,知道主题名通常就等于拥有访问控制,应将主题名视为机密。服务器没有提供枚举主题的能力,因为 ntfy 没有此类 API,且枚举结果将等同于凭证列表。get_account 和 list_users 是现有主题名出现的仅有两个位置。
  • 读写按主题分别授予:只有写入权限的发布令牌无法轮询其所发布的主题,这是正确配置而非故障。check_topic_access 只测试读取侧,因此该处被拒并不意味着发布会失败。
  • 未实现的功能(有意为之):从已发布消息发送电子邮件或拨打电话;创建、读取或交换访问令牌;流式订阅(/sse、/ws、/raw);附件上传;预约、计费、Web 推送、邮件与电话验证以及 Matrix 网关。
  • 确认提示:在支持 MCP elicitation 的客户端中,delete_messages、delete_user、manage_user_access、create_user 和 update_message 会弹出模型无法代答的对话框;不支持的客户端回退为绑定到确切目标指纹的短期令牌。确认提示不会引用来自 ntfy 的内容,也不会包含 create_user 的密码。
  • 返回内容标记为不可信数据:通知中的一切内容均由能向该主题发布的人撰写。该标记出现在报告他人所写内容的四个工具上:list_messages、get_message、get_account、list_users。
  • 调用方提供的 URL 必须是 http 或 https。
  • 发布者可控制的每个字段都有边界:ntfy 将消息正文限制为 4096 字节,但不限制标题或标签列表,因此这些在此处被限制。

完整指南、工具参考和安全说明位于 ntfy-mcp.ni-c.de(源码在 docs/ 中)。

发布流程:发布由标签驱动。更新 package.json,将 CHANGELOG.md 中的 [Unreleased] 备注移动到新版本下,提交,然后执行发布。发布工作流通过 Trusted Publishing(OIDC,带 provenance)发布到 npm,将多架构容器镜像推送到 GHCR,根据 CHANGELOG 章节创建 GitHub release,并更新官方 MCP 注册表中的条目。

欢迎提交 issue、讨论和 pull request——参见 CONTRIBUTING.md。漏洞请使用私有报告而非公开 issue;策略见 SECURITY.md。

MIT © Willi Thiel