MCP 课程文档

模块 3:Slack 通知

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

模块 3:Slack 通知

沟通差距危机

CodeCraft Studios 的第三周。您的自动化系统已经改变了团队的工作方式

  • PR 代理(模块 1):开发人员正在编写清晰、有用的拉取请求描述
  • CI/CD 监控器(模块 2):团队立即发现测试失败,防止 bug 进入生产环境

团队感到信心十足……直到周一早上出现新的危机。

前端团队(Emma 和 Jake)整个周末都在调试一个棘手的 API 集成问题。他们尝试了所有方法:检查网络调用、验证请求格式,甚至重写错误处理。最终,在周日凌晨 2 点,他们发现后端团队已经在周五解决了这个问题并将其部署到预发布环境——但忘记宣布。

“我们浪费了 12 个小时来解决一个已经修复的问题!” Emma 沮丧地说。

与此同时,设计团队上周完成了新用户入门流程的插图,但前端团队不知道它们已经准备好。那些漂亮的素材仍然闲置着,而团队却在使用临时设计。

团队意识到他们存在信息孤岛问题。每个人都在努力工作,但他们没有有效地沟通正在发生的事情以及发生的时间。

您的任务:通过智能 Slack 通知完善自动化系统,自动向整个团队通报重要进展。

您将构建什么

这最后一个模块完成了 CodeCraft Studios 的转型。您将整合工具和提示,创建一个智能通知系统,发送关于 CI/CD 事件的格式化 Slack 消息,演示所有 MCP 原语在实际场景中如何协同工作。

在模块 1 和模块 2 的基础上,您将添加最后一块拼图

  • Slack webhook 工具,用于向您的团队频道发送消息
  • 两个通知提示,智能地格式化 CI 事件
  • 完整集成,展示所有 MCP 原语协同工作

截屏:完整的自动化系统!🎉

最后一块拼图:观看您的完整自动化系统如何防止困扰 Emma 和 Jake 的周一早晨意外!

您将看到:

  • Claude 的智能工作流 - 请注意 Claude 如何分解任务:☐ 检查事件 → ☐ 发送通知
  • 实时 MCP 工具运行 - get_recent_actions_events 拉取最新的 CI 数据,然后 send_slack_notification 发送警报
  • 并排演示 - Slack 频道同时打开,显示 Claude 发送时格式化消息的出现

智能通知:Claude 不仅仅是向团队发送垃圾邮件,它还使用以下内容精心制作专业警报

  • 🚨 清晰的紧急指示器和表情符号
  • 详细的故障分解 (test-auth-service ❌, test-api ❌, test-frontend ⏳)
  • 可操作的链接到管道运行和拉取请求
  • 每个人都需要上下文 - 存储库、PR #1 “各项改进”、提交哈希

为什么这很重要:还记得沟通差距危机吗?再也不会了!这个系统确保当 CI 在 demo-bad-pr 分支上失败时,整个团队会立即知道。再也没有为已经修复的问题进行的周末调试会话了!

完整的旅程:从模块 1 的 PR 混乱到模块 3 的智能团队通知——您构建了一个改变 CodeCraft Studios 协作方式的系统。周末的“战士”变成了知情的队友!🚀

学习目标

学完本模块后,您将了解

  1. 如何将外部 API 与 MCP 工具集成
  2. 如何将工具和提示结合起来以完成工作流
  3. 如何使用 Slack markdown 格式化富消息
  4. 所有 MCP 原语在实践中如何协同工作

先决条件

您需要之前模块的所有内容以及

  • 完成模块 1 和 2 - 本模块直接扩展您现有的 MCP 服务器
  • 一个 Slack 工作区,您可以在其中创建传入 Webhook(个人工作区也可以)
  • 对 REST API 的基本了解 - 您将向 Slack 的 Webhook 端点发出 HTTP 请求

关键概念

MCP 集成模式

本模块演示了完整的工作流程

  1. 事件 → GitHub Actions webhook(来自模块 2)
  2. 提示 → 将事件格式化为可读消息
  3. 工具 → 将格式化消息发送到 Slack
  4. 结果 → 专业团队通知

Slack Markdown 格式化

您将使用Slack 的 Markdown 来实现富文本消息

项目结构

slack-notification/
├── starter/          # Your starting point
│   ├── server.py     # Modules 1+2 code + TODOs
│   ├── webhook_server.py  # From Module 2
│   ├── pyproject.toml
│   └── README.md
└── solution/         # Complete implementation
    ├── server.py     # Full Slack integration
    ├── webhook_server.py
    └── README.md

实施步骤

步骤 1:设置 Slack 集成(10 分钟)

  1. 创建 Slack Webhook

  2. 测试 Webhook 是否工作(遵循Webhook 发布示例

    curl -X POST -H 'Content-type: application/json' \
      --data '{"text":"Hello from MCP Course!"}' \
      YOUR_WEBHOOK_URL
  3. 设置环境变量

    export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

    ⚠️ 安全提示:Webhook URL 是一个敏感秘密,它授予向您的 Slack 频道发布消息的权限。请始终

    • 将其存储为环境变量,切勿在代码中硬编码
    • 切勿将 Webhook URL 提交到版本控制(添加到 .gitignore)
    • 将其视为密码——任何拥有此 URL 的人都可以向您的频道发送消息

安全警报:Webhook URL 是敏感凭证!任何拥有您的 Webhook URL 的人都可以向您的 Slack 频道发送消息。始终将它们存储为环境变量,并且切勿将它们提交到版本控制。

步骤 2:添加 Slack 工具(15 分钟)

现在您有了可用的 Webhook,您将把一个新的 MCP 工具添加到现有服务器文件 server.py 中(来自模块 2)。此工具将通过向 Webhook URL 发送 HTTP 请求来处理向 Slack 发送通知。

注意:入门代码包含模块 1 和 2 的所有改进(输出限制、Webhook 处理)。请重点关注新的 Slack 集成!

将此工具添加到您的 server.py 中

send_slack_notification:

  • 接受一个消息字符串参数
  • 从环境变量读取 Webhook URL
  • 向 Slack Webhook 发送 POST 请求
  • 返回成功/失败消息
  • 处理基本错误情况
import os
import requests
from mcp.types import TextContent

@mcp.tool()
def send_slack_notification(message: str) -> str:
    """Send a formatted notification to the team Slack channel."""
    webhook_url = os.getenv("SLACK_WEBHOOK_URL")
    if not webhook_url:
        return "Error: SLACK_WEBHOOK_URL environment variable not set"
    
    try:
        # TODO: Send POST request to webhook_url
        # TODO: Include message in JSON payload with "mrkdwn": true
        # TODO: Handle response and return status
        pass
    except Exception as e:
        return f"Error sending message: {str(e)}"

步骤 3:创建格式化提示(15 分钟)

接下来,您将向服务器添加 MCP 提示——这是神奇之处!这些提示将与 Claude 协同工作,自动将您的 GitHub Webhook 数据格式化为结构良好的 Slack 消息。请记住,在模块 1 中,提示提供了 Claude 可以始终如一使用的可重用指令。

实现两个生成 Slack 格式消息的提示

  1. format_ci_failure_alert:

    @mcp.prompt()
    def format_ci_failure_alert() -> str:
        """Create a Slack alert for CI/CD failures."""
        return """Format this GitHub Actions failure as a Slack message:
    
    Use this template:
    :rotating_light: *CI Failure Alert* :rotating_light:
    
    A CI workflow has failed:
    *Workflow*: workflow_name
    *Branch*: branch_name
    *Status*: Failed
    *View Details*: <LOGS_LINK|View Logs>
    
    Please check the logs and address any issues.
    
    Use Slack markdown formatting and keep it concise for quick team scanning."""
  2. format_ci_success_summary:

    @mcp.prompt()
    def format_ci_success_summary() -> str:
        """Create a Slack message celebrating successful deployments."""
        return """Format this successful GitHub Actions run as a Slack message:
    
    Use this template:
    :white_check_mark: *Deployment Successful* :white_check_mark:
    
    Deployment completed successfully for [Repository Name]
    
    *Changes:*
    - Key feature or fix 1
    - Key feature or fix 2
    
    *Links:*
    <PR_LINK|View Changes>
    
    Keep it celebratory but informative. Use Slack markdown formatting."""

步骤 4:测试完整工作流程(10 分钟)

现在到了激动人心的部分——测试您的完整 MCP 工作流!您将使所有三个组件协同工作:来自模块 2 的 Webhook 捕获、本模块的提示格式化以及 Slack 通知。

  1. 启动所有服务(就像模块 2 中一样,但现在集成了 Slack)

    # Terminal 1: Start webhook server
    python webhook_server.py
    
    # Terminal 2: Start MCP server
    uv run server.py
    
    # Terminal 3: Start Cloudflare Tunnel  
    cloudflared tunnel --url https://:8080
  2. 使用 Claude Code 测试完整的集成

    • 配置 GitHub Webhook,使用隧道 URL(与模块 2 相同)
    • 推送更改以触发 GitHub Actions
    • 请求 Claude 检查最近的事件并使用您的提示对其进行格式化
    • 让 Claude 使用您的 Slack 工具发送格式化消息
    • 验证通知是否出现在您的 Slack 频道中

步骤 5:验证集成(5 分钟)

无需设置真实的 GitHub 存储库即可测试您的实现!请参阅 manual_test.md 中的 curl 命令,它们模拟 GitHub Webhook 事件。

理解 Webhook 事件流

  • 您的 Webhook 服务器(来自模块 2)捕获 GitHub 事件并将其存储在 github_events.json
  • 您的 MCP 工具从该文件读取以获取最近的 CI/CD 活动
  • Claude 使用您的格式化提示创建可读消息
  • 您的 Slack 工具将格式化后的消息发送到您的团队频道
  • 这将创建一个完整的管道:GitHub → 本地存储 → Claude 分析 → Slack 通知

快速测试工作流

  1. 使用 curl 向您的 Webhook 服务器发送伪造的 GitHub 事件
  2. 请 Claude 检查最近的事件并进行格式化
  3. 将格式化后的消息发送到 Slack
  4. 验证所有功能端到端工作

手动测试替代方案: 要在不设置 GitHub 的情况下获得完整的测试体验,请按照 manual_test.md 中的分步 curl 命令进行操作。

Claude Code 中的示例工作流

User: "Check recent CI events and notify the team about any failures"

Claude: 
1. Uses get_recent_actions_events (from Module 2)
2. Finds a workflow failure
3. Uses format_ci_failure_alert prompt to create message
4. Uses send_slack_notification tool to deliver it
5. Reports back: "Sent failure alert to #dev-team channel"

预期 Slack 消息输出

故障警报

🚨 *CI Failure Alert* 🚨

A CI workflow has failed:
*Workflow*: CI (Run #42)
*Branch*: feature/slack-integration
*Status*: Failed
*View Details*: <https://github.com/user/mcp-course/actions/runs/123|View Logs>

Please check the logs and address any issues.

成功摘要

✅ *Deployment Successful* ✅

Deployment completed successfully for mcp-course

*Changes:*
- Added team notification system
- Integrated MCP Tools and Prompts

*Links:*
<https://github.com/user/mcp-course/pull/42|View Changes>

常见问题

Webhook URL 问题

  • 验证环境变量设置是否正确
  • 在集成之前直接使用 curl 测试 Webhook
  • 确保 Slack 应用具有适当的权限

消息格式化

  • Slack Markdown 与 GitHub Markdown 不同
  • 重要提示:粗体使用 *text*(而不是 **text**
  • 在 Webhook 有效负载中包含 "mrkdwn": true 以进行正确格式化
  • 在自动化之前手动测试消息格式
  • 正确处理提交消息中的特殊字符(格式化参考

网络错误

  • 向 Webhook 请求添加基本的超时处理(Webhook 错误处理
  • 从工具返回有意义的错误消息
  • 如果请求失败,检查互联网连接

主要收获

您现在已经构建了一个完整的 MCP 工作流,它演示了

  • 工具用于外部 API 集成(Slack Webhook)
  • 提示用于智能消息格式化
  • 所有 MCP 原语协同工作的集成
  • 团队可以实际使用的真实世界应用

这展示了 MCP 在构建实用开发自动化工具方面的强大功能!

关键学习:您现在已经构建了一个完整的 MCP 工作流,它结合了工具(用于外部 API 调用)和提示(用于一致的格式化)。这种“工具 + 提示”模式是高级 MCP 开发的基础,可以应用于许多其他自动化场景。

后续步骤

恭喜!您已完成单元 3 的最后一个模块,并构建了一个完整的端到端自动化系统。您在所有三个模块中的旅程让您获得了以下实践经验:

  • 模块 1:MCP 工具和智能数据分析
  • 模块 2:实时 Webhook 和 MCP 提示
  • 模块 3:外部 API 集成和工作流完成

接下来做什么:

  1. 测试您的完整系统 - 尝试触发真实的 GitHub 事件并观察完整管道的工作
  2. 尝试自定义 - 修改 Slack 消息格式或添加新的通知类型
  3. 回顾单元 3 总结 - 反思您所学的一切并探索后续步骤
  4. 分享您的成功 - 向队友展示 MCP 如何自动化您的开发工作流

您现在已经为使用 MCP 构建智能自动化系统奠定了坚实的基础!

转型完成!

CodeCraft Studios 已从混乱的开发转变为一台运转良好的机器。您构建的自动化系统处理

  • 智能 PR 描述,帮助审阅者理解更改
  • 实时 CI/CD 监控,在故障到达生产环境之前捕获它们
  • 智能团队通知,自动让每个人都知情

团队现在可以专注于构建出色的产品,而不是解决流程问题。而且您已经学会了高级 MCP 模式,可以将其应用于任何自动化挑战!

其他资源

< > 在 GitHub 上更新