<a href="https://www.buymeacoffee.com/gitmotion" target="_blank" rel="noopener noreferrer">
<img src="https://gips1.baidu.com/it/u=4028654372,1962960725&fm=3081&app=3081&f=PNG?w=170&h=37" alt="买我一杯咖啡" width="105px" />
</a>
一个简化了的模型上下文协议(MCP)服务器,通过 ntfy 服务(公共或自托管并支持令牌)发送通知 📲
ntfy-me-mcp 提供了人工智能助手通过 ntfy 服务(无论是公共还是自托管并支持令牌)向您的设备发送实时通知的能力。当您的 AI 完成任务、遇到错误或达到重要里程碑时,您会收到通知——无需持续监控。
该服务器包括智能特性,如自动检测 URL 创建视图操作和智能 Markdown 格式检测,使得 AI 助手可以轻松创建丰富的交互式通知,而无需额外配置。
<img src="https://gips2.baidu.com/it/u=873516991,971963090&fm=3081&app=3081&f=PNG?w=834&h=824" alt="自动检测预览" width=50%>对于最简单的设置与兼容 MCP 的助手,添加以下内容到您的 MCP 配置:
{
"ntfy-me-mcp": {
"command": "npx",
"args": ["ntfy-me-mcp"],
"env": {
"NTFY_TOPIC": "您的主题名称"
}
}
}
{
"ntfy-me-mcp": {
"command": "npx",
"args": ["ntfy-me-mcp"],
"env": {
"NTFY_TOPIC": "您的主题名称",
"NTFY_URL": "https://您的-ntfy-服务器.com",
"NTFY_TOKEN": "您的-认证令牌" // 如果使用受保护的主题/服务器
}
}
}
在您的 VS Code 设置.json 文件中添加以下内容:
"mcp": {
"inputs": [
{ // 添加到您的输入数组
"type": "promptString",
"id": "ntfy_token",
"description": "Ntfy 令牌",
"password": true
}
],
"servers": {
// 其他服务器...
"ntfy-me-mcp": {
"command": "npx",
"args": ["ntfy-me-mcp"],
"env": {
"NTFY_TOPIC": "您的主题名称",
"NTFY_URL": "https://您的-ntfy-服务器.com",
"NTFY_TOKEN": "${input:ntfy_token}", // 使用输入 id 变量作为令牌
"PROTECTED_TOPIC": "true" // 启动时提示令牌并在配置中屏蔽它
}
}
}
}
这样设置后,VS Code 将在启动服务器时提示您输入令牌,并在输入时屏蔽令牌。
Docker 镜像:
gitmotion/ntfy-me-mcp:latest (Docker Hub)ghcr.io/gitmotion/ntfy-me-mcp:latest (GitHub Container Registry)在您的 MCP 配置(例如,VS Code 设置.json)中:
"mcp": {
"servers": {
"ntfy-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NTFY_TOPIC",
"-e",
"NTFY_URL",
"-e",
"NTFY_TOKEN",
"-e",
"PROTECTED_TOPIC",
"gitmotion/ntfy-me-mcp", // 或使用 ghcr.io/gitmotion/ntfy-me-mcp:latest
],
"env": {
"NTFY_TOPIC": "您的主题名称",
"NTFY_URL": "https://您的-ntfy-服务器.com",
"NTFY_TOKEN": "${input:ntfy_token}",
"PROTECTED_TOPIC": "true"
}
}
}
}
如果您需要直接安装和运行服务器(替代上述 MCP 配置):
npm install -g ntfy-me-mcp
npx ntfy-me-mcp
# 克隆仓库
git clone https://github.com/gitmotion/ntfy-me-mcp.git
cd ntfy-me-mcp
# 安装依赖
npm install
# 复制示例环境文件并配置
cp .env.example .env
# 使用您喜欢的编辑器编辑 .env 并更新变量
# nano .env # 或使用您喜欢的编辑器
# 构建项目
npm run build
# 启动服务器
npm start
如果您正在开发或定制服务器,可能希望直接使用 node 运行:
# 克隆仓库
git clone https://github.com/gitmotion/ntfy-me-mcp.git
cd ntfy-me-mcp
# 安装依赖
npm install
# 复制示例环境文件并配置
cp .env.example .env
# 编辑 .env 文件以设置您的 NTFY_TOPIC 和其他可选设置
# nano .env # 或使用您喜欢的编辑器
# 构建项目
npm run build
# 直接使用 node 运行
npm start
当配置您的 MCP 使用本地构建的版本时,请指定 node 命令和构建的 index.js 文件路径:
{
"ntfy-me": {
"command": "node",
"args": ["/path/to/ntfy-mcp/build/index.js"],
"env": {
"NTFY_TOPIC": "您的主题名称"
//"NTFY_URL": "https://您的-ntfy-服务器.com", // 如果使用自托管服务器
//"NTFY_TOKEN": "您的-认证令牌" // 如果使用受保护的主题/服务器
}
}
}
记得在 args 数组中使用到 build/index.js 文件的绝对路径。
要通过 Smithery 自动安装 ntfy-me-mcp 到 Claude Desktop:
npx -y @smithery/cli install @gitmotion/ntfy-me-mcp --client claude
在您的项目目录中创建一个 .env 文件,复制提供的示例文件:
# 复制示例文件
cp .env.example .env
# 使用您喜欢的编辑器编辑文件
nano .env # 或 vim, code 等
您的 .env 文件应包含这些变量:
# 必需
NTFY_TOPIC=您的主题名称
# 可选 - 如果使用私有/受保护的 ntfy 服务器,请配置这些
# NTFY_URL=https://ntfy.sh # 默认是 ntfy.sh,如果需要更改为您自托管的 ntfy 服务器 URL
# 如需包含端口,请按如下格式:https://您的-ntfy-服务器.com:8443
# NTFY_TOKEN=您的-访问令牌 # 对于受保护的主题/服务器,需要提供访问令牌
# PROTECTED_TOPIC=false # 如果您的主题需要认证,请设置为 "true"(有助于防止认证错误)
注意:
PROTECTED_TOPIC标志帮助应用程序确定是否需要对您的主题进行认证。当设置为 "true" 且未提供令牌时,您将被提示输入一个。这可以防止受保护主题的认证失败。
此服务器支持经过认证和未经认证的 ntfy 终端:
如果需要认证但未提供,您将收到一条清晰的错误消息,解释如何添加您的令牌。
NTFY_TOPIC 设置相同)本节涵盖使用 ntfy_me 工具发送通知的所有功能。
在与您的 AI 助手工作时,您可以使用自然短语,例如:
“当构建完成时给我发送通知”
“任务完成后通知我”
“生成代码后提醒我”
“过程结束后发信息给我”
“发送高优先级警报”
该工具接受以下参数:
| 参数 | 描述 | 必需 |
|---|---|---|
| taskTitle | 通知标题 | 是 |
| taskSummary | 通知正文 | 是 |
| priority | 消息优先级:min, low, default, high, max | 否 |
| tags | 通知标签数组(支持表情符号简码) | 否 |
| markdown | 启用 Markdown 格式的布尔值(true/false) | 否 |
| actions | 可点击链接的操作对象数组 | 否 |
示例:
{
taskTitle: "代码生成完成",
taskSummary: "您的 React 组件已成功创建,并具有正确的 TypeScript 类型。",
priority: "high",
tags: ["check", "code", "react"]
}
这将发送一个带有勾号表情符号的高优先级通知。
您可以通过 actions 参数添加可点击的操作按钮,或者让服务器自动检测消息中的 URL。
当消息正文中存在 URL 时,服务器会自动从检测到的第一个 URL 创建最多 3 个视图操作(ntfy 的最大限制),使包含可点击链接变得容易,而无需手动指定操作数组。
例如,此消息:
{
taskTitle: "构建完成",
taskSummary: "您的 PR 已合并!查看更改:https://github.com/org/repo/pull/123 或检查部署:https://staging.app.com"
}
将自动生成两个 URL 的视图操作,使其在通知中易于点击。
为了更多的控制,您可以手动指定操作:
| 属性 | 描述 | 必需 |
|---|---|---|
| action | 必须是 "view" |