返回市场
discord通知mcp

discord通知mcp

作者:kstonekuan6 星标更新:2025-06-24

项目介绍

Discord 通知 MCP 服务器

<div align="center"> <img src="./images/logo.png" alt="Discord MCP Logo" width="200">

这是一个 MCP(模型上下文协议)服务器,在 Claude Code 完成任务时向 Discord 发送通知。使用 TypeScript 和 Cloudflare Agents SDK 构建,并可在 Cloudflare Workers 上部署。

</div>

特性

  • 🤖 MCP 工具:提供一个 send_discord_message 工具用于发送通知
  • 🚀 Cloudflare Workers:无服务器运行,全球分布
  • 🔐 安全:使用 Cloudflare 密钥存储凭证
  • 🌐 双传输:支持 SSE 和可流式传输的 HTTP,以实现最大兼容性
  • 💾 持久对象:McpAgent 所需的状态管理
  • 💬 丰富的格式化:支持嵌入、TTS 消息和提及控制

架构

此服务器使用 Cloudflare 的 Agents SDK 实现 MCP 规范:

  • GET /sse:MCP 通信的 SSE 端点
  • POST /mcp:MCP 通信的可流式传输 HTTP 端点
  • 使用 TypeScript、MCP SDK 和 Cloudflare Agents SDK 构建
  • 正确处理 JSON-RPC 2.0 错误
  • 持久对象用于有状态连接(McpAgent 所需)
  • 启用 Node.js 兼容模式

设置

前提条件

  1. Discord Webhook:在你的 Discord 频道中创建一个 webhook:
    • 右键点击频道 → 编辑频道 → 集成 → Webhooks
    • 点击“新建 Webhook”并复制 webhook URL
  2. Cloudflare 账户:在 cloudflare.com 注册

安装

  1. 克隆这个仓库
  2. 安装依赖项:
    pnpm install
    

配置

  1. 从示例创建 .dev.vars 文件:

    cp .dev.vars.example .dev.vars
    

    然后编辑 .dev.vars 文件,添加你的 webhook URL。此文件用于本地开发和部署。

  2. 对于生产部署,设置 Cloudflare 密钥:

    npx wrangler secret put WEBHOOK_URL
    
  3. 如果需要,更新 wrangler.toml 中的工作器名称

部署

部署到 Cloudflare Workers:

# 首先设置密钥
npx wrangler secret put WEBHOOK_URL

# 然后部署
pnpm run deploy

替代方案:持续部署

你也可以直接从 Cloudflare 控制台设置持续部署。 了解更多关于 Git 与 Cloudflare 的集成

Claude Code 配置

使用 CLI 通过 SSE 传输将 MCP 服务器添加到 Claude Code:

# 生产部署(SSE)
claude mcp add discord-notify https://your-worker-name.workers.dev/sse -t sse

# 本地开发
claude mcp add discord-notify http://localhost:8787/sse -t sse

注意:此服务器支持 SSE(服务器发送事件)和可流式传输的 HTTP 传输。虽然 SSE 工作良好,但可流式传输的 HTTP 提供更好的可靠性,并且是较新的标准。

你可以验证配置:

claude mcp list

使用

配置完成后,Claude Code 可以在你需要时向你的 Discord 发送通知。

可用工具

send_discord_message:向 Discord 发送通知消息

  • content(必需):要发送的消息内容
  • tts(可选):作为文本转语音消息发送
  • embeds(可选):用于丰富格式化的嵌入对象数组
  • allowed_mentions(可选):控制哪些提及被解析

示例用法:

// 简单消息
await send_discord_message({ content: "任务已完成!" })

// 丰富嵌入消息
await send_discord_message({ 
  content: "状态更新",
  embeds: [{
    title: "构建结果",
    description: "所有测试已通过",
    color: 5025616, // 绿色
    fields: [
      { name: "测试", value: "52/52", inline: true },
      { name: "持续时间", value: "2分34秒", inline: true }
    ]
  }]
})

何时会收到通知

Claude Code 在以下情况下发送通知:

  • 明确要求:“完成时通知我”或“在 Discord 上通知我”
  • 执行过程中发生错误
  • 达到重要里程碑
  • 需要用户输入或干预

示例场景

# 你说:“部署到生产环境并在完成后通知我”
# 结果:🤖 Claude Code 通知
#       部署成功完成!应用程序现已上线。

# 你说:“运行所有测试并告知结果”
# 结果:🤖 Claude Code 通知
#       所有测试已通过!52/52 测试成功。

# 你说:“处理这些数据并在出现任何错误时通知我”
# 结果:🤖 Claude Code 通知
#       错误:无法处理第 451 行 - 无效日期格式

示例通知

<div align="center"> <img src="./images/discord.jpg" alt="Discord 通知示例" width="600"> <p><em>Claude Code 发送到 Discord 的通知示例</em></p> </div> <div align="center"> <img src="./images/claude_code.png" alt="Claude Code 集成示例" width="600"> <p><em>Claude Code 在任务完成期间发送的通知</em></p> </div>

CLAUDE.md 示例

为了鼓励 Claude Code 有效使用 Discord 通知,请将以下内容添加到你的 CLAUDE.md:

# Discord 通知

使用 mcp__discord-notify__send_discord_message 工具向 Discord 发送通知。

- 当以下情况发生时,始终发送 Discord 通知:
  - 任务完全完成
  - 需要用户输入才能继续
  - 发生需要用户关注的错误
  - 用户明确要求通知(例如,“通知我”,“发一条消息给我”,“让我知道”)

- 在通知中包含相关细节:
  - 对于构建/测试:成功/失败状态和计数
  - 对于错误:具体的错误消息和文件位置

- 使用简洁、信息性的消息,如:
  - "✅ 构建成功完成(2分34秒)"
  - "❌ 测试失败:auth.test.ts 中有 3/52 失败"
  - "⚠️ 需要权限修改 /etc/hosts"

开发

本地运行:

# 启动本地开发服务器
pnpm dev

对于本地开发,Wrangler 将自动从你的 .dev.vars 文件加载环境变量。

部署前运行所有检查:

pnpm build

此命令执行:

  1. pnpm format - 使用 Biome 格式化代码
  2. pnpm lint:fix - 修复代码风格问题
  3. pnpm cf-typegen - 生成 Cloudflare 类型
  4. pnpm type-check - 检查 TypeScript 类型

测试服务器:

# 测试 SSE 连接
curl http://localhost:8787/sse

# 测试健康端点
curl http://localhost:8888/

调试

测试 SSE 连接

你可以直接测试 SSE 端点:

curl -N http://localhost:8787/sse

这应该返回一个事件流,开始于一个 endpoint 事件。

常见问题

  1. 连接立即关闭:检查你的工作器是否正在指定的 URL 上运行并可访问。

  2. 未收到 endpoint 事件:确保正确发送了 SSE 头,并且流格式正确。

  3. Discord 通知未发送:验证你的 WEBHOOK_URL 是否在工作器环境中正确设置。

技术细节

  • 语言:TypeScript(ES2021 目标)
  • 运行时:具有 Node.js 兼容性的 Cloudflare Workers
  • 协议:MCP(模型上下文协议)
  • 传输:SSE 和可流式传输的 HTTP
  • 状态管理:持久对象(McpAgent 所需)
  • 可观测性:启用监控

参考资料

此项目遵循以下指南构建:

相关项目

许可证

MIT