3.2 只用 MCP 的体验
小林接下来试试纯 MCP 方案——"只有工具箱没有 SOP"会怎样?
MCP 方案
小林搭建了 GitHub 和 Database 两个 MCP Server:
python
# GitHub Security Server
@mcp.tool()
def get_pr_diff(pr_number: int) -> str:
"""获取 PR 的代码变更"""
@mcp.tool()
def post_review_comment(pr_number: int, comment: str) -> str:
"""在 PR 上发布审查评论"""
@mcp.tool()
def list_open_prs() -> str:
"""列出所有待审查的 PR"""
# Database Server
@mcp.tool()
def query_vulnerability_history(file_path: str) -> str:
"""查询该文件的历史漏洞"""
@mcp.tool()
def search_similar_bugs(keyword: str) -> str:
"""搜索相似的历史 Bug"""体验过程
1AI 自动列出待审查 PR,自动获取 diff ✅
2AI 自动查询历史漏洞模式 ✅
3AI 随机检查了几个点,但漏了 CSRF ⚠️
4输出格式这次用表格,下次用列表 ⚠️
5AI 自动在 PR 上发布了评论 ✅
6下一个 PR,AI 检查的项目又不一样了 ❌
能做到什么
| 能力 | 说明 |
|---|---|
| ✅ 自动获取代码 | AI 直接调用 get_pr_diff,无需手动 |
| ✅ 自动发布评论 | AI 直接调用 post_review_comment |
| ✅ 查询历史模式 | AI 调用 query_vulnerability_history |
| ✅ 持续运行 | 可以定时扫描新 PR |
| ✅ 明确的错误反馈 | 工具调用失败会有报错 |
做不到什么
| 局限 | 说明 |
|---|---|
| ❌ 审查标准不固定 | AI 可能这次查 SQL 注入,下次忘了 |
| ❌ 输出格式不统一 | 一会儿表格、一会儿列表、一会儿自由文本 |
| ❌ 流程不可控 | 有时先查性能,有时先查安全,没有固定顺序 |
| ⚠️ 质量波动 | 同一个 PR 审查两次,结果可能不同 |
质量波动实例
小林对同一个 PR 用纯 MCP 方案审查了两次:
第一次审查
• 发现 SQL 注入风险
• 发现 XSS 风险
• 遗漏了 CSRF 检查
• 输出用表格格式
• 按文件顺序审查
第二次审查(同一 PR)
• 发现 SQL 注入风险
• 遗漏了 XSS 检查
• 发现了 CSRF 风险
• 输出用列表格式
• 按安全类别审查
问题:两次审查发现的漏洞不同、输出格式不同、审查顺序不同。这是因为没有 Skill 来标准化"该查什么、怎么查、怎么输出"。
小林的评价
适合
• 需要自动化获取和执行
• 审查频率高
• 需要查询外部数据
• 需要持续自动运行
不适合
• 需要稳定一致的审查标准
• 需要统一的输出格式
• 需要可审计的审查流程
• 对合规性有要求
本节核心要点
- 只用 MCP:自动化好,但审查标准不稳定、输出格式不统一
- 最大的痛点:同样的 PR 审查两次,结果可能不同——质量波动大
- MCP 的硬失效是优势——至少出了错你能知道
- 适合需要自动化但不需要标准化的场景