MCP 课程文档
第三单元解决方案演练:使用 MCP 构建拉取请求代理
并获得增强的文档体验
开始使用
第三单元解决方案演练:使用 MCP 构建拉取请求代理
概述
本演练将指导您完成第三单元拉取请求代理的完整解决方案——一个 MCP 服务器,它通过分析代码更改、监控 CI/CD 流水线和自动化团队通信来帮助开发人员创建更好的拉取请求。该解决方案展示了所有三种 MCP 原语(工具、资源和提示)在实际工作流中协同工作。
架构概述
PR 代理由相互连接的模块组成,这些模块逐步构建了一个完整的自动化系统
- 构建 MCP 服务器 - 带有用于 PR 模板建议工具的基本服务器
- 智能文件分析 - 使用资源增强分析以获取项目上下文
- GitHub Actions 集成 - 使用标准化提示进行 CI/CD 监控
- Hugging Face Hub 集成 - 模型部署和数据集 PR 工作流
- 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 如何使用这些工具
- Claude 调用
analyze_file_changes
来理解更改了什么 - 使用
get_pr_templates
查看可用选项 - 使用分析数据调用
suggest_template
- 接收带有推理的建议
- 可以根据特定更改自定义模板
学习成果
- 理解工具注册和模式
- 让 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 如何使用资源
- 读取
team://guidelines/review-process.md
以了解 PR 要求 - 访问
file://project-context/coding-standards.md
获取样式指南 - 分析
git://recent-changes/
以匹配团队模式 - 将此上下文与文件分析结合起来以获得更好的建议
增强决策
有了资源,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. 事件处理流水线
- 从 GitHub 接收 webhook
- 解析事件数据并提取相关信息
- 根据事件类型使用适当的提示
- 生成标准化响应
- 存储以供团队通知
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 文件时
- 工具:
analyze_model_changes
检测模型架构更改 - 资源:读取
hub://model-cards/llm-template.md
- 提示:“生成基准摘要”创建评估部分
- 工具:
generate_model_card
更新文档 - 资源:检查
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 上失败时
- 工具:
get_team_members
识别 PR 作者和审阅者 - 资源:
team://members/{user}/preferences
检查通知设置 - 提示:“格式化团队更新”创建适当的消息
- 工具:
send_slack_message
发送到正确的频道 - 资源:
notification://templates/ci-failure
确保格式一致 - 提示:“如果关键则升级”确定是否需要额外警报
智能路由
系统考虑
- 团队成员可用性(来自日历资源)
- 通知偏好(电子邮件 vs Slack)
- 消息紧急性(基于 PR 标签)
- 时区和工作时间
学习成果
- 原始集成模式
- 复杂工作流编排
- 自动化与人类需求的平衡
- 生产就绪错误处理
完整工作流示例
以下是所有组件如何协同工作以处理典型 PR 的示例
开发人员创建 PR
- GitHub webhook 触发服务器
- 工具:
analyze_file_changes
检查差异 - 资源:读取团队指南和项目上下文
- 提示:建议最佳 PR 模板
CI/CD 流水线运行
- Webhook 接收工作流事件
- 提示:“分析 CI 结果”处理结果
- 资源:检查团队升级策略
- 工具:更新 GitHub 中的 PR 状态
Hugging Face Hub 集成
- 工具:检测 LLM/数据集更改
- 资源:读取 Hub 指南
- 提示:生成模型卡更新
- 工具:根据 Hub 标准进行验证
团队通知
- 工具:识别相关团队成员
- 资源:读取通知偏好设置
- 提示:格式化适当的消息
- 工具:通过 Slack 频道发送
后续操作
- 提示:“创建后续任务”生成下一步措施
- 工具:如果需要,创建 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
运行解决方案
本地开发设置
- 启动 MCP 服务器:
python server.py
- 配置 Claude Code:将服务器添加到 MCP 设置中
- 设置 Cloudflare Tunnel:
cloudflared tunnel --url https://:3000
- 配置 webhook:将隧道 URL 添加到 GitHub 仓库
- 测试工作流:创建 PR 并观察自动化
配置
简单的基于文件的配置,易于设置
.env
文件中的 GitHub 令牌- 配置中的 Slack webhook
templates/
中的模板自定义- 所有设置集中在一处
常见模式和最佳实践
工具设计
- 保持工具专注且单一用途
- 返回结构化数据以供 AI 解释
- 包含全面的错误消息
- 版本化工具模式
资源组织
- 使用清晰的 URI 层级结构
- 实现资源发现
- 缓存常用资源
- 版本控制所有资源
提示工程
- 使提示具体但灵活
- 包含上下文和示例
- 用各种输入进行测试
- 维护提示库
集成模式
- 使用事件进行松散耦合
- 实现断路器
- 添加带有回退的重试
- 监控所有外部调用
故障排除指南
常见问题
Webhook 未接收到事件
- 检查 Cloudflare Tunnel 是否正在运行
- 验证 GitHub Webhook 配置
- 确认密钥匹配
工具未在 Claude 中显示
- 验证工具模式
- 检查服务器注册
- 检查 MCP 连接
资源无法访问
- 验证文件权限
- 检查 URI 格式
- 确认资源注册
提示产生不一致的结果
- 检查提示模板
- 检查提供的上下文
- 验证输入格式
下一步和扩展
潜在增强功能
- 添加更多代码分析工具(复杂性、安全性)
- 与更多通信平台集成
- 添加自定义工作流定义
- 实现 PR 自动合并功能
学习路径
- 下一步:单元 4 - 远程部署此服务器
- 高级:自定义 MCP 协议扩展
- 专家:多服务器编排
结论
这个 PR 代理展示了 MCP 三种原语协同工作的强大功能。工具提供功能,资源提供上下文,提示确保一致性。它们结合起来创建了一个智能自动化系统,提高了开发人员的生产力,同时保持了团队标准。
模块化架构确保每个组件都可以独立理解、测试和扩展,而集成则展示了您在生产 MCP 服务器中将使用的实际模式。
< > 在 GitHub 上更新