MCP 课程文档

第三单元解决方案演练:使用 MCP 构建拉取请求代理

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

第三单元解决方案演练:使用 MCP 构建拉取请求代理

概述

本演练将指导您完成第三单元拉取请求代理的完整解决方案——一个 MCP 服务器,它通过分析代码更改、监控 CI/CD 流水线和自动化团队通信来帮助开发人员创建更好的拉取请求。该解决方案展示了所有三种 MCP 原语(工具、资源和提示)在实际工作流中协同工作。

架构概述

PR 代理由相互连接的模块组成,这些模块逐步构建了一个完整的自动化系统

  1. 构建 MCP 服务器 - 带有用于 PR 模板建议工具的基本服务器
  2. 智能文件分析 - 使用资源增强分析以获取项目上下文
  3. GitHub Actions 集成 - 使用标准化提示进行 CI/CD 监控
  4. Hugging Face Hub 集成 - 模型部署和数据集 PR 工作流
  5. Slack 通知 - 集成所有 MCP 原语的团队通信

模块 1:构建 MCP 服务器

我们要构建什么

一个最小的 MCP 服务器,它分析文件更改并使用 MCP 工具建议适当的 PR 模板。

关键组件

1. 服务器初始化 ( server.py )

# The server registers three essential tools:
# - analyze_file_changes: Returns structured data about changed files
# - get_pr_templates: Lists available templates with metadata
# - suggest_template: Provides intelligent template recommendations

服务器使用 MCP SDK 将这些工具暴露给 Claude Code,使其能够收集信息并就使用哪个 PR 模板做出智能决策。

2. 文件分析工具

analyze_file_changes 工具检查 git diff 以识别

  • 文件类型和扩展名
  • 更改的文件数量
  • 添加/删除的行数
  • 常见模式(测试、配置、文档)

这种结构化数据使 Claude 能够理解更改的性质,而无需硬编码决策逻辑。

3. 模板管理

模板以 Markdown 文件的形式存储在 templates/ 目录中

  • bug.md - 用于错误修复
  • feature.md - 用于新功能
  • docs.md - 用于文档更新
  • refactor.md - 用于代码重构

每个模板都包含 Claude 可以根据分析填充的占位符。

Claude 如何使用这些工具

  1. Claude 调用 analyze_file_changes 来理解更改了什么
  2. 使用 get_pr_templates 查看可用选项
  3. 使用分析数据调用 suggest_template
  4. 接收带有推理的建议
  5. 可以根据特定更改自定义模板

学习成果

  • 理解工具注册和模式
  • 让 Claude 使用结构化数据做出决策
  • 数据收集与决策逻辑的分离

模块 2:智能文件分析

我们要构建什么

使用 MCP 资源增强文件分析,以提供项目上下文和团队指南。

关键组件

1. 资源注册

服务器暴露四种资源

# Resources provide read-only access to:
# - file://templates/ - PR template files
# - file://project-context/ - Coding standards, conventions
# - git://recent-changes/ - Commit history and patterns
# - team://guidelines/ - Review processes and standards

2. 项目上下文资源

project-context/ 目录包含

  • coding-standards.md - 特定语言的约定
  • review-guidelines.md - 审阅者关注的内容
  • architecture.md - 系统设计模式
  • dependencies.md - 第三方库策略

Claude 可以阅读这些文件以了解项目特定要求。

3. Git 历史分析

git://recent-changes/ 资源提供

  • 最近提交消息和模式
  • 常见的 PR 标题和描述
  • 团队成员贡献模式
  • 历史模板使用情况

这有助于 Claude 建议符合团队实践的模板。

Claude 如何使用资源

  1. 读取 team://guidelines/review-process.md 以了解 PR 要求
  2. 访问 file://project-context/coding-standards.md 获取样式指南
  3. 分析 git://recent-changes/ 以匹配团队模式
  4. 将此上下文与文件分析结合起来以获得更好的建议

增强决策

有了资源,Claude 现在可以

  • 建议符合团队约定的模板
  • 在 PR 中包含项目特定要求
  • 在描述中引用编码标准
  • 与历史团队实践保持一致

学习成果

  • 资源 URI 设计和模式
  • 使项目知识可供 AI 访问
  • 上下文感知决策
  • 自动化与团队标准的平衡

模块 3:GitHub Actions 集成

我们要构建什么

使用 webhook 和标准化提示进行实时 CI/CD 监控,以实现一致的团队通信。

关键组件

1. Webhook 服务器

使用 Cloudflare Tunnel 接收 GitHub Actions 事件

# Webhook endpoint handles:
# - workflow_run events
# - check_run events  
# - pull_request status updates
# - deployment notifications

2. 提示模板

四个标准化提示确保一致性

  • “分析 CI 结果” - 处理测试失败和构建错误
  • “生成状态摘要” - 创建可读的状态更新
  • “创建后续任务” - 根据结果建议下一步措施
  • “草拟团队通知” - 为不同受众格式化更新

3. 事件处理流水线

  1. 从 GitHub 接收 webhook
  2. 解析事件数据并提取相关信息
  3. 根据事件类型使用适当的提示
  4. 生成标准化响应
  5. 存储以供团队通知

Claude 如何使用提示

提示使用示例

# When tests fail, Claude uses the "Analyze CI Results" prompt:
prompt_data = {
    "event_type": "workflow_run",
    "status": "failure",
    "failed_jobs": ["unit-tests", "lint"],
    "error_logs": "...",
    "pr_context": {...}
}

# Claude generates:
# - Root cause analysis
# - Suggested fixes
# - Impact assessment
# - Next steps

标准化工作流

提示确保无论谁在工作

  • CI 失败得到一致的分析
  • 状态更新遵循团队格式
  • 后续操作与流程保持一致
  • 通知包含所需信息

学习成果

  • Webhook 集成模式
  • 提示工程以确保一致性
  • 事件驱动架构
  • 标准化团队工作流

模块 4:Hugging Face Hub 集成

我们要构建什么

与 Hugging Face Hub 集成,用于 LLM 和数据集 PR,为使用语言模型的团队添加专业工作流。

关键组件

1. 特定于 Hub 的工具

# Tools for Hugging Face workflows:
# - analyze_model_changes: Detect LLM file modifications
# - validate_dataset_format: Check training data compliance
# - generate_model_card: Create/update model documentation
# - suggest_hub_template: PR templates for LLMs/datasets

2. Hub 资源

# Resources for Hub context:
# - hub://model-cards/ - LLM card templates and examples
# - hub://dataset-formats/ - Training data specifications
# - hub://community-standards/ - Hub community guidelines
# - hub://license-info/ - License compatibility checks

3. LLM 特定提示

# Prompts for LLM workflows:
# - "Analyze Model Changes" - Understand LLM updates
# - "Generate Benchmark Summary" - Create evaluation metrics
# - "Check Dataset Quality" - Validate training data
# - "Draft Model Card Update" - Update documentation

特定于 Hub 的工作流

当 PR 修改 LLM 文件时

  1. 工具analyze_model_changes 检测模型架构更改
  2. 资源:读取 hub://model-cards/llm-template.md
  3. 提示:“生成基准摘要”创建评估部分
  4. 工具generate_model_card 更新文档
  5. 资源:检查 hub://license-info/ 的兼容性

数据集 PR 处理

用于训练数据更新

  • 验证格式一致性
  • 检查数据质量指标
  • 更新数据集卡片
  • 建议合适的审阅者

学习成果

  • Hugging Face Hub API 集成
  • LLM 特定 PR 工作流
  • 模型和数据集文档
  • 社区标准合规性

模块 5:Slack 通知

我们要构建什么

结合工具、资源和提示的自动化团队通知,以实现完整的工作流自动化。

关键组件

1. 通信工具

# Three tools for team updates:
# - send_slack_message: Post to team channels
# - get_team_members: Identify who to notify
# - track_notification_status: Monitor delivery

2. 团队资源

# Resources for team data:
# - team://members/ - Developer profiles and preferences
# - slack://channels/ - Channel configurations
# - notification://templates/ - Message formats

3. 通知提示

# Prompts for communication:
# - "Format Team Update" - Style messages appropriately
# - "Choose Communication Channel" - Select right audience
# - "Escalate if Critical" - Handle urgent issues

集成示例

当 CI 在关键 PR 上失败时

  1. 工具get_team_members 识别 PR 作者和审阅者
  2. 资源team://members/{user}/preferences 检查通知设置
  3. 提示:“格式化团队更新”创建适当的消息
  4. 工具send_slack_message 发送到正确的频道
  5. 资源notification://templates/ci-failure 确保格式一致
  6. 提示:“如果关键则升级”确定是否需要额外警报

智能路由

系统考虑

  • 团队成员可用性(来自日历资源)
  • 通知偏好(电子邮件 vs Slack)
  • 消息紧急性(基于 PR 标签)
  • 时区和工作时间

学习成果

  • 原始集成模式
  • 复杂工作流编排
  • 自动化与人类需求的平衡
  • 生产就绪错误处理

完整工作流示例

以下是所有组件如何协同工作以处理典型 PR 的示例

  1. 开发人员创建 PR

    • GitHub webhook 触发服务器
    • 工具:analyze_file_changes 检查差异
    • 资源:读取团队指南和项目上下文
    • 提示:建议最佳 PR 模板
  2. CI/CD 流水线运行

    • Webhook 接收工作流事件
    • 提示:“分析 CI 结果”处理结果
    • 资源:检查团队升级策略
    • 工具:更新 GitHub 中的 PR 状态
  3. Hugging Face Hub 集成

    • 工具:检测 LLM/数据集更改
    • 资源:读取 Hub 指南
    • 提示:生成模型卡更新
    • 工具:根据 Hub 标准进行验证
  4. 团队通知

    • 工具:识别相关团队成员
    • 资源:读取通知偏好设置
    • 提示:格式化适当的消息
    • 工具:通过 Slack 频道发送
  5. 后续操作

    • 提示:“创建后续任务”生成下一步措施
    • 工具:如果需要,创建 GitHub 问题
    • 资源:链接到文档
    • 所有原语无缝协同工作

测试策略

单元测试

每个模块都包含全面的单元测试

  • 工具模式验证
  • 资源 URI 解析
  • 提示模板渲染
  • 集成场景

集成测试

端到端测试覆盖

  • 完整的 PR 工作流
  • 错误恢复场景
  • 负载下的性能
  • 安全验证

测试结构

tests/
├── unit/
│   ├── test_tools.py
│   ├── test_resources.py
│   ├── test_prompts.py
│   └── test_integration.py
├── integration/
│   ├── test_workflow.py
│   ├── test_webhooks.py
│   └── test_notifications.py
└── fixtures/
    ├── sample_events.json
    └── mock_responses.json

运行解决方案

本地开发设置

  1. 启动 MCP 服务器python server.py
  2. 配置 Claude Code:将服务器添加到 MCP 设置中
  3. 设置 Cloudflare Tunnelcloudflared tunnel --url https://:3000
  4. 配置 webhook:将隧道 URL 添加到 GitHub 仓库
  5. 测试工作流:创建 PR 并观察自动化

配置

简单的基于文件的配置,易于设置

  • .env 文件中的 GitHub 令牌
  • 配置中的 Slack webhook
  • templates/ 中的模板自定义
  • 所有设置集中在一处

常见模式和最佳实践

工具设计

  • 保持工具专注且单一用途
  • 返回结构化数据以供 AI 解释
  • 包含全面的错误消息
  • 版本化工具模式

资源组织

  • 使用清晰的 URI 层级结构
  • 实现资源发现
  • 缓存常用资源
  • 版本控制所有资源

提示工程

  • 使提示具体但灵活
  • 包含上下文和示例
  • 用各种输入进行测试
  • 维护提示库

集成模式

  • 使用事件进行松散耦合
  • 实现断路器
  • 添加带有回退的重试
  • 监控所有外部调用

故障排除指南

常见问题

  1. Webhook 未接收到事件

    • 检查 Cloudflare Tunnel 是否正在运行
    • 验证 GitHub Webhook 配置
    • 确认密钥匹配
  2. 工具未在 Claude 中显示

    • 验证工具模式
    • 检查服务器注册
    • 检查 MCP 连接
  3. 资源无法访问

    • 验证文件权限
    • 检查 URI 格式
    • 确认资源注册
  4. 提示产生不一致的结果

    • 检查提示模板
    • 检查提供的上下文
    • 验证输入格式

下一步和扩展

潜在增强功能

  1. 添加更多代码分析工具(复杂性、安全性)
  2. 与更多通信平台集成
  3. 添加自定义工作流定义
  4. 实现 PR 自动合并功能

学习路径

  • 下一步:单元 4 - 远程部署此服务器
  • 高级:自定义 MCP 协议扩展
  • 专家:多服务器编排

结论

这个 PR 代理展示了 MCP 三种原语协同工作的强大功能。工具提供功能,资源提供上下文,提示确保一致性。它们结合起来创建了一个智能自动化系统,提高了开发人员的生产力,同时保持了团队标准。

模块化架构确保每个组件都可以独立理解、测试和扩展,而集成则展示了您在生产 MCP 服务器中将使用的实际模式。

< > 在 GitHub 上更新