桌面通知服务

一个基于Model Context Protocol (MCP)的服务器,提供桌面通知功能,支持自定义标题和消息,并可集成到MCP客户端中。

  • by Tuurlijk
  • Rust
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 Tuurlijk/notify-mcp

使用说明

通知MCP服务器🔔

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

这是对mcp使用情况的探索,如果您在本地运行此服务器并将其连接到客户端,然后客户端可以在任务完成时通知您,则没有用。

特性✨

  • 具有SSE传输的MCP兼容服务器。
  • 用于发送桌面通知的简单API。
  • 与本机操作系统通知系统集成。
  • Docker支持运行时UID/GID配置和D-Bus直通,用于容器通知。
  • 使用最小Docker镜像 FROM scratch.

入门指南🚀

先决条件

  • 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 (对于静态二进制文件)。
  • 构建一个名为的Docker镜像 michielroos/notify-mcp 使用a FROM scratch 基地。

然后,使用以下命令运行容器 run.sh 脚本:

./run.sh

此脚本将:

  • 停止并删除任何名为的现有容器 notify-mcp-container.
  • 从以下位置启动一个新的Docker容器 michielroos/notify-mcp 图像。
  • 容器内的服务器将侦听由指定的端口 PORT 环境变量(默认值为3000),映射到主机上的同一端口。

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

  • 运行时UID/GID:The run.sh 该脚本允许您使用特定的UID和GID在Docker容器内运行应用程序。默认情况下,它使用当前主机用户的UID/GID(如果可以通过以下方式检测到 id -u/id -g)或者回落到1000。您可以通过设置进行自定义 APP_UID 和 APP_GID 环境变量 之前 跑步 run.sh:
    APP_UID=1001 APP_GID=1001 ./run.sh
    
  • D-Bus用于来自容器的桌面通知:对于容器化服务器向您的主机系统发送桌面通知 run.sh 脚本挂载主机的D-Bus套接字(通常 $XDG_RUNTIME_DIR/bus)放入容器中。它还设置了必要的环境变量(DBUS_SESSION_BUS_ADDRESS, XDG_RUNTIME_DIR)在容器内,应用程序可以查找和使用此套接字。这允许 notify-rust (和底层库)与主机的通知守护进程通信。
    • 安全说明:安装D-Bus插座可减少容器隔离。虽然此功能是必要的,但请注意,受感染的容器可能会与主机上的其他D-Bus服务进行交互。请谨慎使用,特别是在容器映像源不完全受信任或处于多用户环境中的情况下。

用法📋

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

  • VS代码中的GitHub副本
  • Claude桌面应用程序(如果它支持自定义MCP SSE服务器)
  • 自定义MCP客户端

将服务器添加到VS代码

  1. 打开VS代码(使用GitHub Copilot或类似的启用MCP的扩展)。
  2. 运行命令: MCP: Add server (或与您的分机等效的)。
  3. 选择“HTTP(服务器发送的事件)”作为传输。
  4. 输入服务器URL。如果在本地运行(本机或Docker通过 build.sh 默认值): http://127.0.0.1:3000/sse (或您的自定义港口,如果 PORT env-var已设置)。
  5. 从VS Code中的MCP面板启动服务器。

示例用法

连接后,您可以指示MCP客户端使用 notify 工具:

@mcp notify title="Hello from MCP" message="This notification came via the server!"

或者以更具对话性的方式与代理人:

Send a notification with the title "Reminder" and the message "Meeting in 5 minutes."

可用工具🛠️

通知工具(notify)

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

参数:

  • title (string):通知的标题。
  • message (string):通知的正文。

发展👨‍💻

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

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

许可证📄

此项目根据MIT许可证获得许可-请参阅 LICENSE 文件以获取详细信息(如果已创建,则假定为MIT或指定)。

致谢🙏