返回市场
通知-mcp

通知-mcp

作者:Tuurlijk5 星标更新:2025-05-21

项目介绍

Notify MCP Server 🔔

一个提供桌面通知功能的模型上下文协议(MCP)服务器。该服务器提供了一个工具,可以被MCP客户端用来发送带有自定义标题和消息的桌面通知。

这是一个对MCP使用的探索,如果你在本地运行此服务器并连接到一个可以在任务完成后通知你的客户端,则不会有任何用处。

特性 ✨

  • 符合MCP规范的服务器,使用SSE传输。
  • 发送桌面通知的简单API。
  • 集成到本机操作系统的通知系统中。
  • 支持Docker,包括运行时UID/GID配置以及从容器传递D-Bus通知。
  • 使用FROM scratch构建的最小Docker镜像。

快速开始 🚀

前提条件

  • Rust工具链(1.76.0或更高版本)。
  • 支持桌面通知的系统(适用于本地运行的Linux/macOS/Windows)。
  • Docker(如果使用容器化版本)。

安装与运行

1. 克隆仓库:

git clone https://github.com/Tuurlijk/notify-mcp.git
cd notify-mcp

2. 原生运行:

cargo build --release
cargo run --release

服务器将启动(默认在http://127.0.0.1:3000)。

3. 使用Docker构建和运行(推荐用于隔离性和可移植性):

首先,构建Docker镜像:

./build.sh

此脚本会:

  • 编译Rust应用程序为x86_64-unknown-linux-musl(静态二进制文件)。
  • 使用FROM scratch基础构建名为michielroos/notify-mcp的Docker镜像。

然后,使用run.sh脚本运行容器:

./run.sh

此脚本会:

  • 停止并移除任何已存在的名为notify-mcp-container的容器。
  • michielroos/notify-mcp镜像启动一个新的Docker容器。
  • 容器内的服务器将在由PORT环境变量指定的端口上监听(默认为3000),映射到主机上的相同端口。

Docker:自定义UID/GID和D-Bus通知(通过run.sh

  • 运行时UID/GIDrun.sh脚本允许你在Docker容器内以特定的UID和GID运行应用程序。默认情况下,它使用当前主机用户的UID/GID(如果可以通过id -u/id -g检测到)或回退到1000。你可以通过设置APP_UIDAPP_GID环境变量来定制这些值,在运行run.sh之前:
    APP_UID=1001 APP_GID=1001 ./run.sh
    
  • D-Bus用于从容器发送桌面通知:为了让容器化的服务器能够向主机系统发送桌面通知,run.sh脚本将挂载主机的D-Bus套接字(通常为$XDG_RUNTIME_DIR/bus)到容器中。它还会在容器内部设置必要的环境变量(DBUS_SESSION_BUS_ADDRESSXDG_RUNTIME_DIR),以便应用程序找到并使用这个套接字。这使得notify-rust(及其底层库)能够与主机的通知守护进程通信。
    • 安全提示:挂载D-Bus套接字会降低容器的隔离性。虽然对于此功能是必需的,但请注意,受损的容器可能潜在地与其他主机上的D-Bus服务进行交互。谨慎使用,尤其是在容器镜像来源不可完全信任或多用户环境中。

使用方法 📋

此服务器可以与支持SSE传输的任何MCP客户端一起使用,例如:

  • 在VS Code中的GitHub Copilot
  • Claude桌面应用(如果支持自定义MCP SSE服务器)
  • 自定义MCP客户端

将服务器添加到VS Code

  1. 打开VS Code(带有GitHub Copilot或其他启用MCP的扩展)。
  2. 运行命令:MCP: 添加服务器(或你的扩展对应的等效命令)。
  3. 选择“HTTP(服务器推送事件)”作为传输方式。
  4. 输入服务器URL。如果本地运行(原生或通过build.sh默认的Docker):http://127.0.0.1:3000/sse(或者如果你设置了PORT环境变量,则为自定义端口)。
  5. 从VS Code的MCP面板启动服务器。

示例用法

一旦连接,你可以指示你的MCP客户端使用notify工具:

@mcp notify title="来自MCP的问候" message="这条通知是通过服务器发送的!"

或者以更对话的方式与代理互动:

发送一条带有标题“提醒”和消息“会议还有5分钟”的通知。

可用工具 🛠️

通知工具 (notify)

发送带有自定义标题和消息的桌面通知。

参数:

  • title(字符串):通知的标题。
  • message(字符串):通知的正文文本。

开发 👨‍💻

该项目使用rust-mcp-sdk实现MCP服务器,并使用notify-rust实现桌面通知功能。

  • 添加工具:在src/tools.rs中定义新工具(结构体、#[mcp_tool]宏、call_tool逻辑),并将它们添加到tool_box!枚举中。
  • 处理逻辑:如果新工具需要不同的参数处理,或者新的MCP消息类型需要自定义处理,请更新src/handler.rs中的处理器。
  • 服务器配置:调整服务器设置(端口、主机、功能)在src/main.rs中。
  • 测试:使用cargo test运行测试。为新功能添加新的测试。

许可证 📄

本项目根据MIT许可证发布 - 查看LICENSE文件以获取详情(如果有创建,否则假设为MIT或具体说明)。

致谢 🙏