1978 lines
70 KiB
Markdown
1978 lines
70 KiB
Markdown
# ColaFlow M2 阶段产品需求文档 (PRD)
|
||
# MCP Server 集成 - Model Context Protocol
|
||
|
||
**文档版本**: 1.0
|
||
**作者**: Product Manager Agent
|
||
**日期**: 2025-11-04
|
||
**目标阶段**: M2 (3-4个月)
|
||
**预计时间**: 2025-12-01 至 2026-03-31 (16周)
|
||
|
||
---
|
||
|
||
## 执行摘要
|
||
|
||
M2 阶段的核心目标是**实现 MCP (Model Context Protocol) Server**,让 AI 工具(Claude、ChatGPT、Cursor 等)能够通过标准化协议安全地读写 ColaFlow 项目数据。这是 ColaFlow 从传统项目管理系统向 **AI 原生协作平台** 转型的关键里程碑。
|
||
|
||
### 关键价值主张
|
||
- **AI 成为团队成员**: AI 工具能像真人一样操作任务、生成文档、汇报进度
|
||
- **安全可控**: 所有 AI 写操作需人工审批,支持 Diff Preview 和回滚
|
||
- **开放生态**: 基于 MCP 标准协议,任何 AI 工具都能接入
|
||
- **自动化加速**: 减少 50% 手动项目管理工作,提升 30% 团队效率
|
||
|
||
### M2 核心交付物
|
||
1. **MCP Server** - 完整的 MCP 协议实现(Resources, Tools, Prompts)
|
||
2. **Diff Preview 机制** - AI 操作预览 → 人工审批 → 自动执行
|
||
3. **Claude Desktop 集成** - PoC 级别的 AI 助手体验
|
||
4. **安全与审计** - 字段级权限控制 + 完整审计日志
|
||
5. **技术文档** - MCP API 文档、集成指南、最佳实践
|
||
|
||
---
|
||
|
||
## 一、背景与目标
|
||
|
||
### 1.1 项目背景
|
||
|
||
**M1 阶段完成情况** (Day 14, 85% 完成):
|
||
- ✅ Identity & RBAC Module - 生产就绪
|
||
- ✅ Issue Management Module - 完整实现 + 100% 测试通过
|
||
- ✅ Kanban Board - 全功能拖拽式看板
|
||
- ✅ SignalR Real-Time - 实时通信基础设施
|
||
- ✅ Multi-Tenant Security - CRITICAL 安全加固完成
|
||
- ✅ Audit Log 技术方案 - 15,000+ 字研究报告完成
|
||
- 🔄 Epic/Story Hierarchy - 计划中 (2-3天)
|
||
- 🔄 Sprint Management - 计划中 (3-4天)
|
||
|
||
**技术基础**:
|
||
- 后端: NestJS + TypeORM + PostgreSQL (Clean Architecture + CQRS + DDD)
|
||
- 前端: React + TypeScript + TailwindCSS
|
||
- 实时通信: SignalR (infrastructure ready)
|
||
- 安全: JWT + Refresh Token + Multi-Tenant Isolation + RBAC
|
||
- 性能: API < 100ms, DB Query < 5ms
|
||
|
||
**为什么现在是 M2 的最佳时机**:
|
||
1. **核心功能稳定**: M1 提供了坚实的数据基础(Projects, Issues, Sprints)
|
||
2. **安全机制完善**: Multi-tenant isolation + Audit Log 已就绪
|
||
3. **架构设计完成**: Day 10 已完成 MCP Server 详细架构设计
|
||
4. **市场机遇**: AI 工具爆发期,MCP 协议逐渐成为标准
|
||
|
||
### 1.2 商业目标
|
||
|
||
**短期目标 (M2 阶段)**:
|
||
- 实现首个 AI 工具集成(Claude Desktop),验证技术可行性
|
||
- 建立 AI 操作的安全机制和审批流程
|
||
- 积累 AI 辅助项目管理的使用数据和反馈
|
||
|
||
**长期目标 (M3-M6)**:
|
||
- M3: ChatGPT 集成 PoC,形成完整的 AI → PRD → 任务 闭环
|
||
- M4: 外部系统接入(GitHub, Slack, Calendar),构建协作生态
|
||
- M5: 企业试点部署,验证商业模式
|
||
- M6: 稳定版发布,SDK + 插件生态建设
|
||
|
||
### 1.3 用户目标
|
||
|
||
**目标用户群**:
|
||
1. **敏捷团队** - 使用 Scrum/Kanban 管理项目的开发团队
|
||
2. **AI 早期采用者** - 已使用 Claude/ChatGPT/Cursor 的技术团队
|
||
3. **效率优化者** - 追求自动化和流程优化的项目经理
|
||
|
||
**用户痛点**:
|
||
1. **重复劳动**: 手动创建任务、编写 PRD、更新进度报告(占用 30-50% PM 时间)
|
||
2. **信息孤岛**: AI 工具(ChatGPT)和项目系统(Jira)互不相通
|
||
3. **协作断层**: AI 生成的内容需要手动粘贴到项目系统
|
||
4. **安全顾虑**: 不敢让 AI 直接操作生产数据(缺乏审批机制)
|
||
|
||
**M2 解决方案**:
|
||
- **自动化**: AI 自动生成任务、PRD、进度报告(减少 50% 手动工作)
|
||
- **无缝集成**: AI 工具直接读写 ColaFlow 数据(无需复制粘贴)
|
||
- **安全可控**: Diff Preview + 人工审批机制(99% 安全保障)
|
||
- **审计追溯**: 完整的 AI 操作日志和回滚能力(符合企业合规要求)
|
||
|
||
---
|
||
|
||
## 二、产品范围与功能需求
|
||
|
||
### 2.1 核心功能 (MVP Scope)
|
||
|
||
#### 2.1.1 MCP Resources (只读数据暴露)
|
||
|
||
**目标**: 让 AI 工具能够读取 ColaFlow 项目数据
|
||
|
||
**资源列表** (11个核心 Resources):
|
||
|
||
| Resource ID | 描述 | API 对应 | 优先级 | 预计工时 |
|
||
|-------------|------|----------|--------|---------|
|
||
| `colaflow://projects.list` | 列出所有项目 | GET /api/projects | P0 | 2h |
|
||
| `colaflow://projects.get/{id}` | 获取项目详情 | GET /api/projects/{id} | P0 | 1h |
|
||
| `colaflow://issues.search` | 搜索任务(支持过滤) | GET /api/issues?filter=... | P0 | 3h |
|
||
| `colaflow://issues.get/{id}` | 获取任务详情 | GET /api/issues/{id} | P0 | 1h |
|
||
| `colaflow://epics.list` | 列出所有 Epic | GET /api/issues?type=Epic | P0 | 1h |
|
||
| `colaflow://stories.list` | 列出所有 Story | GET /api/issues?type=Story | P0 | 1h |
|
||
| `colaflow://tasks.list` | 列出所有 Task | GET /api/issues?type=Task | P0 | 1h |
|
||
| `colaflow://sprints.current` | 获取当前 Sprint | GET /api/sprints?status=Active | P0 | 2h |
|
||
| `colaflow://sprints.backlog` | 获取 Backlog | GET /api/issues?sprint=null | P0 | 1h |
|
||
| `colaflow://users.list` | 列出团队成员 | GET /api/roles/users | P0 | 1h |
|
||
| `colaflow://reports.burndown/{sprintId}` | 获取燃尽图数据 | GET /api/sprints/{id}/burndown | P1 | 2h |
|
||
|
||
**总工时**: 16 小时 (2 天)
|
||
|
||
**技术实现**:
|
||
```csharp
|
||
// MCP Resource 定义示例
|
||
public class ProjectsListResource : IMcpResource
|
||
{
|
||
public string Uri => "colaflow://projects.list";
|
||
public string Name => "Projects List";
|
||
public string Description => "List all projects in current tenant";
|
||
public string MimeType => "application/json";
|
||
|
||
public async Task<McpResourceContent> GetContentAsync(
|
||
McpResourceRequest request,
|
||
CancellationToken cancellationToken)
|
||
{
|
||
var tenantId = _tenantContext.TenantId;
|
||
var projects = await _projectRepository.GetAllAsync(tenantId);
|
||
|
||
var content = new
|
||
{
|
||
projects = projects.Select(p => new
|
||
{
|
||
id = p.Id,
|
||
name = p.Name,
|
||
description = p.Description,
|
||
status = p.Status,
|
||
issueCount = p.IssueCount,
|
||
createdAt = p.CreatedAt
|
||
})
|
||
};
|
||
|
||
return new McpResourceContent
|
||
{
|
||
Uri = request.Uri,
|
||
MimeType = "application/json",
|
||
Text = JsonSerializer.Serialize(content)
|
||
};
|
||
}
|
||
}
|
||
```
|
||
|
||
**验收标准**:
|
||
- [ ] 所有 11 个 Resources 正确返回数据
|
||
- [ ] 租户隔离:用户只能看到自己租户的数据
|
||
- [ ] 性能:单次请求响应时间 < 200ms
|
||
- [ ] 缓存:热数据缓存命中率 > 80% (Redis)
|
||
- [ ] 错误处理:404/403/500 错误码正确返回
|
||
- [ ] 分页:`issues.search` 支持 limit/offset 参数
|
||
|
||
---
|
||
|
||
#### 2.1.2 MCP Tools (写操作暴露)
|
||
|
||
**目标**: 让 AI 工具能够创建、修改 ColaFlow 数据(需人工审批)
|
||
|
||
**工具列表** (10个核心 Tools):
|
||
|
||
| Tool Name | 描述 | 审批要求 | 优先级 | 预计工时 |
|
||
|-----------|------|----------|--------|---------|
|
||
| `create_project` | 创建新项目 | 必须审批 | P0 | 3h |
|
||
| `create_issue` | 创建新任务 | 必须审批 | P0 | 3h |
|
||
| `update_issue` | 更新任务详情 | 必须审批 | P0 | 3h |
|
||
| `update_status` | 更改任务状态 | 可配置 | P0 | 2h |
|
||
| `assign_issue` | 分配任务给用户 | 可配置 | P0 | 2h |
|
||
| `create_sprint` | 创建 Sprint | 必须审批 | P0 | 3h |
|
||
| `start_sprint` | 启动 Sprint | 必须审批 | P0 | 2h |
|
||
| `add_comment` | 添加评论 | 可选审批 | P1 | 2h |
|
||
| `create_epic` | 创建 Epic | 必须审批 | P0 | 2h |
|
||
| `link_issues` | 关联任务(父子关系) | 必须审批 | P0 | 3h |
|
||
|
||
**总工时**: 25 小时 (3 天)
|
||
|
||
**技术实现 (Diff Preview 模式)**:
|
||
```csharp
|
||
// MCP Tool 定义示例
|
||
public class CreateIssueTool : IMcpTool
|
||
{
|
||
public string Name => "create_issue";
|
||
public string Description => "Create a new issue in ColaFlow";
|
||
public McpToolInputSchema InputSchema => new()
|
||
{
|
||
Type = "object",
|
||
Properties = new Dictionary<string, object>
|
||
{
|
||
["projectId"] = new { type = "string", description = "Project ID" },
|
||
["title"] = new { type = "string", description = "Issue title" },
|
||
["description"] = new { type = "string", description = "Issue description" },
|
||
["type"] = new { type = "string", enum = new[] { "Story", "Task", "Bug", "Epic" } },
|
||
["priority"] = new { type = "string", enum = new[] { "Low", "Medium", "High", "Critical" } },
|
||
["assigneeId"] = new { type = "string", description = "Assignee user ID", nullable = true }
|
||
},
|
||
Required = new[] { "projectId", "title", "type", "priority" }
|
||
};
|
||
|
||
public async Task<McpToolResult> ExecuteAsync(
|
||
McpToolCall toolCall,
|
||
CancellationToken cancellationToken)
|
||
{
|
||
// 1. 解析输入参数
|
||
var input = JsonSerializer.Deserialize<CreateIssueInput>(toolCall.Arguments);
|
||
|
||
// 2. 生成 Diff Preview (before/after)
|
||
var diffPreview = new DiffPreview
|
||
{
|
||
ToolName = "create_issue",
|
||
Operation = "CREATE",
|
||
EntityType = "Issue",
|
||
BeforeData = null, // 创建操作无 before
|
||
AfterData = new
|
||
{
|
||
projectId = input.ProjectId,
|
||
title = input.Title,
|
||
description = input.Description,
|
||
type = input.Type,
|
||
priority = input.Priority,
|
||
assigneeId = input.AssigneeId,
|
||
status = "Backlog",
|
||
createdBy = _currentUser.Id,
|
||
createdAt = DateTime.UtcNow
|
||
},
|
||
RequiresApproval = true
|
||
};
|
||
|
||
// 3. 存储 pending change 到数据库
|
||
var pendingChange = await _pendingChangeRepository.CreateAsync(new PendingChange
|
||
{
|
||
TenantId = _tenantContext.TenantId,
|
||
UserId = _currentUser.Id,
|
||
ToolName = toolCall.Name,
|
||
Operation = "CREATE",
|
||
EntityType = "Issue",
|
||
EntityId = null,
|
||
BeforeData = null,
|
||
AfterData = JsonSerializer.Serialize(diffPreview.AfterData),
|
||
Status = PendingChangeStatus.PendingApproval,
|
||
CreatedAt = DateTime.UtcNow,
|
||
ExpiresAt = DateTime.UtcNow.AddHours(24) // 24小时过期
|
||
});
|
||
|
||
// 4. 发送 WebSocket 通知(需人工审批)
|
||
await _realtimeService.NotifyUserAsync(
|
||
_currentUser.Id,
|
||
"PendingChangeCreated",
|
||
new { pendingChangeId = pendingChange.Id, diffPreview });
|
||
|
||
// 5. 返回 Diff Preview 结果
|
||
return new McpToolResult
|
||
{
|
||
Content = new[]
|
||
{
|
||
new McpToolResultContent
|
||
{
|
||
Type = "text",
|
||
Text = $"Issue creation queued for approval. Pending Change ID: {pendingChange.Id}\n\n" +
|
||
$"**Diff Preview**:\n" +
|
||
$"```json\n{JsonSerializer.Serialize(diffPreview, new JsonSerializerOptions { WriteIndented = true })}\n```\n\n" +
|
||
$"Please review and approve/reject this change in the ColaFlow dashboard."
|
||
}
|
||
},
|
||
IsError = false
|
||
};
|
||
}
|
||
}
|
||
```
|
||
|
||
**审批流程 API**:
|
||
```csharp
|
||
// GET /api/mcp/pending-changes - 列出待审批的变更
|
||
// GET /api/mcp/pending-changes/{id} - 获取变更详情
|
||
// POST /api/mcp/pending-changes/{id}/approve - 审批通过(自动执行操作)
|
||
// POST /api/mcp/pending-changes/{id}/reject - 拒绝(记录日志)
|
||
// DELETE /api/mcp/pending-changes/{id} - 取消(未审批前可取消)
|
||
```
|
||
|
||
**审批通过后自动执行**:
|
||
```csharp
|
||
public async Task ApproveAsync(Guid pendingChangeId, Guid approverId)
|
||
{
|
||
var pendingChange = await _repository.GetByIdAsync(pendingChangeId);
|
||
if (pendingChange.Status != PendingChangeStatus.PendingApproval)
|
||
throw new InvalidOperationException("Change is not pending approval");
|
||
|
||
// 1. 执行实际操作
|
||
var result = await ExecuteToolOperationAsync(pendingChange);
|
||
|
||
// 2. 更新状态
|
||
pendingChange.Status = PendingChangeStatus.Approved;
|
||
pendingChange.ApprovedBy = approverId;
|
||
pendingChange.ApprovedAt = DateTime.UtcNow;
|
||
pendingChange.ExecutedAt = DateTime.UtcNow;
|
||
pendingChange.ResultData = JsonSerializer.Serialize(result);
|
||
|
||
await _repository.UpdateAsync(pendingChange);
|
||
|
||
// 3. 记录审计日志
|
||
await _auditLogService.LogAsync(new AuditLog
|
||
{
|
||
TenantId = pendingChange.TenantId,
|
||
UserId = approverId,
|
||
Action = "ApprovedMcpChange",
|
||
EntityType = pendingChange.EntityType,
|
||
EntityId = result.EntityId,
|
||
BeforeData = pendingChange.BeforeData,
|
||
AfterData = pendingChange.AfterData,
|
||
Metadata = new { pendingChangeId, toolName = pendingChange.ToolName }
|
||
});
|
||
|
||
// 4. 通知用户(WebSocket)
|
||
await _realtimeService.NotifyUserAsync(
|
||
pendingChange.UserId,
|
||
"PendingChangeApproved",
|
||
new { pendingChangeId, result });
|
||
}
|
||
```
|
||
|
||
**验收标准**:
|
||
- [ ] 所有 10 个 Tools 正确生成 Diff Preview
|
||
- [ ] Diff Preview 准确显示 before/after 数据
|
||
- [ ] 审批通过后自动执行操作
|
||
- [ ] 审批拒绝后记录日志(不执行操作)
|
||
- [ ] 24小时内未审批自动过期
|
||
- [ ] WebSocket 实时通知工作正常
|
||
- [ ] 审批记录在审计日志中可追溯
|
||
- [ ] 租户隔离:用户只能审批自己租户的变更
|
||
|
||
---
|
||
|
||
#### 2.1.3 MCP Prompts (AI 提示词模板)
|
||
|
||
**目标**: 为 AI 工具提供预设的任务模板,提升交互效率
|
||
|
||
**Prompt 列表** (8个核心 Prompts):
|
||
|
||
| Prompt Name | 描述 | 使用场景 | 优先级 | 预计工时 |
|
||
|-------------|------|----------|--------|---------|
|
||
| `generate_prd` | 生成产品需求文档 | 用户描述功能 → AI 生成 PRD | P0 | 3h |
|
||
| `split_epic_to_stories` | 将 Epic 拆分为 Stories | Epic 创建后 → AI 自动拆分 | P0 | 3h |
|
||
| `estimate_story_points` | 估算 Story Points | Story 创建后 → AI 估算工作量 | P1 | 2h |
|
||
| `generate_acceptance_criteria` | 生成验收标准 | Story 缺少 AC → AI 生成候选 AC | P0 | 2h |
|
||
| `detect_risks` | 检测项目风险 | 定期扫描 → AI 生成风险报告 | P1 | 3h |
|
||
| `generate_standup_summary` | 生成站会纪要 | Sprint 中 → AI 汇总团队进度 | P1 | 2h |
|
||
| `suggest_next_sprint_items` | 建议下个 Sprint 任务 | Sprint 规划 → AI 推荐优先级任务 | P2 | 2h |
|
||
| `analyze_burndown` | 分析燃尽图趋势 | Sprint 进行中 → AI 分析进度 | P2 | 2h |
|
||
|
||
**总工时**: 19 小时 (2.5 天)
|
||
|
||
**技术实现**:
|
||
```csharp
|
||
// MCP Prompt 定义示例
|
||
public class GeneratePrdPrompt : IMcpPrompt
|
||
{
|
||
public string Name => "generate_prd";
|
||
public string Description => "Generate a Product Requirements Document (PRD) from a feature description";
|
||
public McpPromptArgument[] Arguments => new[]
|
||
{
|
||
new McpPromptArgument
|
||
{
|
||
Name = "feature_description",
|
||
Description = "A brief description of the feature to be implemented",
|
||
Required = true
|
||
},
|
||
new McpPromptArgument
|
||
{
|
||
Name = "target_users",
|
||
Description = "Target user personas (e.g., 'developers', 'project managers')",
|
||
Required = false
|
||
},
|
||
new McpPromptArgument
|
||
{
|
||
Name = "success_metrics",
|
||
Description = "How to measure success (e.g., 'reduce task creation time by 30%')",
|
||
Required = false
|
||
}
|
||
};
|
||
|
||
public Task<McpPromptMessage[]> GetMessagesAsync(
|
||
McpPromptGetRequest request,
|
||
CancellationToken cancellationToken)
|
||
{
|
||
var featureDescription = request.Arguments["feature_description"];
|
||
var targetUsers = request.Arguments.GetValueOrDefault("target_users", "all users");
|
||
var successMetrics = request.Arguments.GetValueOrDefault("success_metrics", "user satisfaction");
|
||
|
||
var systemPrompt = new McpPromptMessage
|
||
{
|
||
Role = "system",
|
||
Content = new McpPromptContent
|
||
{
|
||
Type = "text",
|
||
Text = "You are a Product Manager AI assistant for ColaFlow. " +
|
||
"Your task is to generate a well-structured PRD based on the provided feature description. " +
|
||
"Follow this structure:\n\n" +
|
||
"# [Feature Name] PRD\n\n" +
|
||
"## 1. Background & Goals\n" +
|
||
"- Business context\n" +
|
||
"- User pain points\n" +
|
||
"- Objectives\n\n" +
|
||
"## 2. Requirements\n" +
|
||
"### Core Functionality\n" +
|
||
"- Functional requirement 1\n" +
|
||
"- Functional requirement 2\n\n" +
|
||
"### User Scenarios\n" +
|
||
"- Scenario 1: [User action] → [Expected outcome]\n\n" +
|
||
"### Priority Levels\n" +
|
||
"- P0 (Must have): [Requirements]\n" +
|
||
"- P1 (Should have): [Requirements]\n" +
|
||
"- P2 (Nice to have): [Requirements]\n\n" +
|
||
"## 3. Acceptance Criteria\n" +
|
||
"- [ ] Criterion 1\n" +
|
||
"- [ ] Performance: [Metric] < [Target]\n\n" +
|
||
"## 4. Timeline\n" +
|
||
"- Estimated effort: [X weeks]\n" +
|
||
"- Target milestone: M[X]"
|
||
}
|
||
};
|
||
|
||
var userPrompt = new McpPromptMessage
|
||
{
|
||
Role = "user",
|
||
Content = new McpPromptContent
|
||
{
|
||
Type = "text",
|
||
Text = $"**Feature Description**: {featureDescription}\n\n" +
|
||
$"**Target Users**: {targetUsers}\n\n" +
|
||
$"**Success Metrics**: {successMetrics}\n\n" +
|
||
"Please generate a comprehensive PRD for this feature."
|
||
}
|
||
};
|
||
|
||
return Task.FromResult(new[] { systemPrompt, userPrompt });
|
||
}
|
||
}
|
||
```
|
||
|
||
**验收标准**:
|
||
- [ ] 所有 8 个 Prompts 正确返回提示词消息
|
||
- [ ] Prompts 生成的内容符合 ColaFlow 的业务规范
|
||
- [ ] AI 使用 Prompts 后输出质量提升 50%+
|
||
- [ ] Prompts 支持动态参数(如 featureDescription)
|
||
- [ ] Prompts 可通过配置文件自定义(JSON/YAML)
|
||
|
||
---
|
||
|
||
#### 2.1.4 API Key 管理与认证
|
||
|
||
**目标**: 为 MCP 客户端提供安全的认证机制
|
||
|
||
**核心功能**:
|
||
|
||
| 功能 | 描述 | API 端点 | 优先级 | 预计工时 |
|
||
|------|------|----------|--------|---------|
|
||
| 创建 API Key | 生成新的 MCP API Key | POST /api/mcp/keys | P0 | 2h |
|
||
| 列出 API Keys | 查看所有 API Keys | GET /api/mcp/keys | P0 | 1h |
|
||
| 撤销 API Key | 禁用 API Key | DELETE /api/mcp/keys/{id} | P0 | 1h |
|
||
| 刷新 API Key | 重新生成 Key 值 | POST /api/mcp/keys/{id}/refresh | P1 | 2h |
|
||
| 设置权限范围 | 限制 Key 的操作范围(只读/读写) | PUT /api/mcp/keys/{id}/permissions | P0 | 3h |
|
||
| 设置 IP 白名单 | 限制 Key 的访问 IP | PUT /api/mcp/keys/{id}/ip-whitelist | P1 | 2h |
|
||
| API Key 使用统计 | 查看调用次数、成功率 | GET /api/mcp/keys/{id}/stats | P1 | 2h |
|
||
|
||
**总工时**: 13 小时 (1.5 天)
|
||
|
||
**API Key 格式**:
|
||
```
|
||
colaflow_sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
|
||
^ ^ ^ ^
|
||
| | | |
|
||
| | | +-- 40字符随机字符串(SHA-256 后存储)
|
||
| | +------- 环境标识 (live/test)
|
||
| +----------- Key 类型 (sk = Secret Key)
|
||
+---------------------- 产品前缀
|
||
```
|
||
|
||
**数据库表设计**:
|
||
```sql
|
||
CREATE TABLE mcp_api_keys (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
key_hash VARCHAR(64) NOT NULL UNIQUE, -- SHA-256(key)
|
||
key_prefix VARCHAR(16) NOT NULL, -- 前16字符明文(用于识别)
|
||
name VARCHAR(255) NOT NULL,
|
||
description TEXT,
|
||
permissions JSONB NOT NULL, -- { "resources": ["*"], "tools": ["create_issue"], "read_only": false }
|
||
ip_whitelist JSONB, -- ["192.168.1.0/24", "10.0.0.1"]
|
||
rate_limit_per_minute INT DEFAULT 60,
|
||
last_used_at TIMESTAMPTZ,
|
||
expires_at TIMESTAMPTZ,
|
||
is_active BOOLEAN DEFAULT true,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
||
|
||
INDEX idx_mcp_api_keys_tenant_id (tenant_id),
|
||
INDEX idx_mcp_api_keys_key_hash (key_hash),
|
||
INDEX idx_mcp_api_keys_user_id (user_id)
|
||
);
|
||
|
||
CREATE TABLE mcp_api_key_usage (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
api_key_id UUID NOT NULL REFERENCES mcp_api_keys(id) ON DELETE CASCADE,
|
||
request_id UUID NOT NULL,
|
||
endpoint VARCHAR(255) NOT NULL, -- "resources/projects.list" or "tools/create_issue"
|
||
method VARCHAR(10) NOT NULL, -- "GET", "POST"
|
||
status_code INT NOT NULL,
|
||
response_time_ms INT NOT NULL,
|
||
ip_address VARCHAR(45) NOT NULL,
|
||
user_agent TEXT,
|
||
error_message TEXT,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
|
||
INDEX idx_mcp_api_key_usage_api_key_id (api_key_id),
|
||
INDEX idx_mcp_api_key_usage_created_at (created_at)
|
||
);
|
||
```
|
||
|
||
**认证中间件**:
|
||
```csharp
|
||
public class McpApiKeyAuthenticationMiddleware
|
||
{
|
||
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
|
||
{
|
||
// 1. 从 Header 提取 API Key
|
||
if (!context.Request.Headers.TryGetValue("X-MCP-Api-Key", out var apiKeyValue))
|
||
{
|
||
context.Response.StatusCode = 401;
|
||
await context.Response.WriteAsJsonAsync(new { error = "Missing API Key" });
|
||
return;
|
||
}
|
||
|
||
// 2. 验证 API Key 格式
|
||
var apiKey = apiKeyValue.ToString();
|
||
if (!apiKey.StartsWith("colaflow_sk_"))
|
||
{
|
||
context.Response.StatusCode = 401;
|
||
await context.Response.WriteAsJsonAsync(new { error = "Invalid API Key format" });
|
||
return;
|
||
}
|
||
|
||
// 3. 查询数据库(缓存优化)
|
||
var keyHash = ComputeSha256Hash(apiKey);
|
||
var apiKeyRecord = await _cache.GetOrSetAsync(
|
||
$"mcp_api_key:{keyHash}",
|
||
async () => await _repository.GetByKeyHashAsync(keyHash),
|
||
TimeSpan.FromMinutes(5));
|
||
|
||
if (apiKeyRecord == null || !apiKeyRecord.IsActive)
|
||
{
|
||
context.Response.StatusCode = 401;
|
||
await context.Response.WriteAsJsonAsync(new { error = "Invalid or inactive API Key" });
|
||
return;
|
||
}
|
||
|
||
// 4. 检查过期时间
|
||
if (apiKeyRecord.ExpiresAt.HasValue && apiKeyRecord.ExpiresAt < DateTime.UtcNow)
|
||
{
|
||
context.Response.StatusCode = 401;
|
||
await context.Response.WriteAsJsonAsync(new { error = "API Key expired" });
|
||
return;
|
||
}
|
||
|
||
// 5. 检查 IP 白名单
|
||
var clientIp = context.Connection.RemoteIpAddress?.ToString();
|
||
if (apiKeyRecord.IpWhitelist != null && apiKeyRecord.IpWhitelist.Count > 0)
|
||
{
|
||
if (!IsIpAllowed(clientIp, apiKeyRecord.IpWhitelist))
|
||
{
|
||
context.Response.StatusCode = 403;
|
||
await context.Response.WriteAsJsonAsync(new { error = "IP not whitelisted" });
|
||
return;
|
||
}
|
||
}
|
||
|
||
// 6. 速率限制检查
|
||
var rateLimitKey = $"mcp_rate_limit:{apiKeyRecord.Id}";
|
||
var currentCount = await _cache.IncrementAsync(rateLimitKey, TimeSpan.FromMinutes(1));
|
||
if (currentCount > apiKeyRecord.RateLimitPerMinute)
|
||
{
|
||
context.Response.StatusCode = 429;
|
||
await context.Response.WriteAsJsonAsync(new { error = "Rate limit exceeded" });
|
||
return;
|
||
}
|
||
|
||
// 7. 设置当前租户上下文
|
||
_tenantContext.SetTenantId(apiKeyRecord.TenantId);
|
||
_currentUser.SetUser(apiKeyRecord.UserId);
|
||
|
||
// 8. 更新最后使用时间(异步,不阻塞请求)
|
||
_ = Task.Run(async () =>
|
||
{
|
||
apiKeyRecord.LastUsedAt = DateTime.UtcNow;
|
||
await _repository.UpdateAsync(apiKeyRecord);
|
||
});
|
||
|
||
// 9. 记录使用日志(异步)
|
||
_ = Task.Run(async () =>
|
||
{
|
||
await _usageRepository.CreateAsync(new McpApiKeyUsage
|
||
{
|
||
ApiKeyId = apiKeyRecord.Id,
|
||
RequestId = context.TraceIdentifier,
|
||
Endpoint = context.Request.Path,
|
||
Method = context.Request.Method,
|
||
IpAddress = clientIp,
|
||
UserAgent = context.Request.Headers["User-Agent"]
|
||
});
|
||
});
|
||
|
||
// 10. 继续处理请求
|
||
await next(context);
|
||
}
|
||
}
|
||
```
|
||
|
||
**验收标准**:
|
||
- [ ] API Key 创建/撤销功能正常
|
||
- [ ] API Key 认证中间件正确拦截未授权请求
|
||
- [ ] IP 白名单功能正确工作
|
||
- [ ] 速率限制功能正确工作(60 req/min)
|
||
- [ ] API Key 使用日志完整记录
|
||
- [ ] 租户隔离:API Key 只能访问自己租户的数据
|
||
- [ ] 缓存优化:热 API Keys 响应时间 < 10ms
|
||
|
||
---
|
||
|
||
#### 2.1.5 Diff Preview UI (人工审批界面)
|
||
|
||
**目标**: 提供友好的 Web UI,让用户审批 AI 的操作
|
||
|
||
**核心页面**:
|
||
|
||
| 页面 | 描述 | 功能 | 优先级 | 预计工时 |
|
||
|------|------|------|--------|---------|
|
||
| Pending Changes 列表页 | 显示所有待审批变更 | 列表、过滤、排序 | P0 | 4h |
|
||
| Diff Preview 详情页 | 显示单个变更的 before/after | 高亮差异、JSON 格式化 | P0 | 6h |
|
||
| 审批操作面板 | 批准/拒绝/取消按钮 | 批量操作、审批备注 | P0 | 3h |
|
||
| AI 操作历史页 | 查看所有 AI 操作记录 | 时间线、过滤、导出 | P1 | 4h |
|
||
| API Key 管理页 | 创建/撤销 API Keys | CRUD 操作、权限设置 | P0 | 5h |
|
||
|
||
**总工时**: 22 小时 (2.5 天)
|
||
|
||
**UI 原型 (Pending Changes 列表页)**:
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ Pending AI Changes (3) [Approve All] [↻] │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ⏳ PENDING · 2 minutes ago · AI Agent: Claude Desktop │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ CREATE Issue: "Implement MCP Server authentication" │ │
|
||
│ │ │ │
|
||
│ │ Tool: create_issue │ │
|
||
│ │ Project: ColaFlow Core │ │
|
||
│ │ │ │
|
||
│ │ Changes: │ │
|
||
│ │ + title: "Implement MCP Server authentication" │ │
|
||
│ │ + type: Task │ │
|
||
│ │ + priority: High │ │
|
||
│ │ + assignee: @john.doe │ │
|
||
│ │ │ │
|
||
│ │ [View Diff] [✓ Approve] [✕ Reject] │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ⏳ PENDING · 5 minutes ago · AI Agent: ChatGPT │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ UPDATE Issue: "Fix login bug" → Status: Done │ │
|
||
│ │ │ │
|
||
│ │ Tool: update_status │ │
|
||
│ │ Project: ColaFlow Web │ │
|
||
│ │ │ │
|
||
│ │ Changes: │ │
|
||
│ │ ~ status: InProgress → Done │ │
|
||
│ │ │ │
|
||
│ │ [View Diff] [✓ Approve] [✕ Reject] │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Diff Viewer 组件 (JSON Diff)**:
|
||
```typescript
|
||
import ReactDiffViewer from 'react-diff-viewer-continued';
|
||
|
||
interface DiffPreviewProps {
|
||
beforeData: any;
|
||
afterData: any;
|
||
}
|
||
|
||
export function DiffPreview({ beforeData, afterData }: DiffPreviewProps) {
|
||
const oldValue = beforeData
|
||
? JSON.stringify(beforeData, null, 2)
|
||
: '// No previous data (CREATE operation)';
|
||
const newValue = JSON.stringify(afterData, null, 2);
|
||
|
||
return (
|
||
<div className="diff-preview">
|
||
<ReactDiffViewer
|
||
oldValue={oldValue}
|
||
newValue={newValue}
|
||
splitView={true}
|
||
showDiffOnly={false}
|
||
useDarkTheme={false}
|
||
leftTitle="Before"
|
||
rightTitle="After"
|
||
/>
|
||
</div>
|
||
);
|
||
}
|
||
```
|
||
|
||
**验收标准**:
|
||
- [ ] Pending Changes 列表正确显示待审批项
|
||
- [ ] Diff Preview 正确高亮 before/after 差异
|
||
- [ ] 批准操作成功触发后端执行
|
||
- [ ] 拒绝操作正确记录日志
|
||
- [ ] WebSocket 实时更新(新变更自动出现)
|
||
- [ ] 过滤和排序功能正常
|
||
- [ ] 批量审批功能正常(选中 3+ 项批量批准)
|
||
- [ ] 响应式设计(支持移动端)
|
||
|
||
---
|
||
|
||
#### 2.1.6 Claude Desktop 集成 (PoC)
|
||
|
||
**目标**: 实现首个 AI 工具集成,验证 MCP Server 可用性
|
||
|
||
**集成步骤**:
|
||
|
||
1. **配置 Claude Desktop** (5 分钟)
|
||
```json
|
||
// ~/.config/claude/mcp_config.json
|
||
{
|
||
"mcpServers": {
|
||
"colaflow": {
|
||
"command": "node",
|
||
"args": ["/path/to/colaflow-mcp-server/dist/index.js"],
|
||
"env": {
|
||
"COLAFLOW_API_URL": "https://api.colaflow.com",
|
||
"COLAFLOW_API_KEY": "colaflow_sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
2. **测试场景 1: 自然语言创建任务** (15 分钟)
|
||
```
|
||
User: "帮我在 ColaFlow 创建一个任务:实现 MCP Server 的 API Key 管理功能,优先级 High,分配给 @john"
|
||
|
||
Claude: [调用 colaflow://issues.search 查询是否存在类似任务]
|
||
Claude: 我没有找到相似的任务,我将为您创建新任务。
|
||
|
||
[Claude 调用 create_issue tool]
|
||
|
||
Claude: 我已为您生成任务创建请求:
|
||
|
||
**任务详情**:
|
||
- 标题: 实现 MCP Server 的 API Key 管理功能
|
||
- 类型: Task
|
||
- 优先级: High
|
||
- 分配给: @john
|
||
|
||
**待审批**: 请在 ColaFlow 仪表板审批此变更。
|
||
```
|
||
|
||
3. **测试场景 2: AI 生成 PRD** (20 分钟)
|
||
```
|
||
User: "帮我生成一个 PRD,功能是:让用户能够导出项目的燃尽图为 PNG 图片"
|
||
|
||
Claude: [调用 generate_prd prompt]
|
||
|
||
Claude: 我已为您生成 PRD 草稿:
|
||
|
||
# 导出燃尽图为 PNG 图片 - PRD
|
||
|
||
## 1. Background & Goals
|
||
**业务背景**: 用户需要在汇报会议中展示项目进度,但目前 ColaFlow 的燃尽图只能在系统内查看,无法方便地导出到 PPT 或邮件。
|
||
|
||
**用户痛点**:
|
||
- 需要手动截图,图片质量不佳
|
||
- 无法批量导出多个 Sprint 的燃尽图
|
||
- 无法自定义导出的分辨率和样式
|
||
|
||
**目标**:
|
||
- 支持一键导出燃尽图为 PNG/JPEG/SVG 格式
|
||
- 支持自定义分辨率(1920x1080, 3840x2160)
|
||
- 导出时间 < 3 秒
|
||
|
||
## 2. Requirements
|
||
### Core Functionality
|
||
- [ ] 燃尽图页面添加"导出"按钮
|
||
- [ ] 支持 3 种格式:PNG(默认)、JPEG、SVG
|
||
- [ ] 支持 3 种分辨率:HD (1280x720), Full HD (1920x1080), 4K (3840x2160)
|
||
- [ ] 导出文件自动命名:`{projectName}_{sprintName}_burndown_{date}.png`
|
||
|
||
### User Scenarios
|
||
- Scenario 1: 项目经理在周会前导出当前 Sprint 燃尽图 → 3秒内获得高质量 PNG 文件
|
||
- Scenario 2: 批量导出所有 Sprint 燃尽图用于季度汇报 → ZIP 文件下载
|
||
|
||
### Priority Levels
|
||
- P0 (Must have): 单个燃尽图导出 PNG, 默认分辨率 1920x1080
|
||
- P1 (Should have): 多格式支持(JPEG, SVG), 自定义分辨率
|
||
- P2 (Nice to have): 批量导出, 自定义样式(颜色、字体)
|
||
|
||
## 3. Acceptance Criteria
|
||
- [ ] 导出功能在所有燃尽图页面可用
|
||
- [ ] 导出时间 < 3 秒 (1920x1080 PNG)
|
||
- [ ] 导出图片包含完整图例和坐标轴标签
|
||
- [ ] 图片质量清晰,适合投影仪展示
|
||
- [ ] 多租户隔离:用户只能导出自己租户的燃尽图
|
||
|
||
## 4. Timeline
|
||
- Estimated effort: 3-4 days
|
||
- Target milestone: M2
|
||
|
||
User: 很好!请帮我基于这个 PRD 创建一个 Epic 任务。
|
||
|
||
Claude: [调用 create_issue tool, type=Epic]
|
||
|
||
Claude: 我已为您生成 Epic 创建请求,待审批。
|
||
```
|
||
|
||
**验收标准**:
|
||
- [ ] Claude Desktop 成功连接 ColaFlow MCP Server
|
||
- [ ] Claude 能正确调用所有 Resources(读取数据)
|
||
- [ ] Claude 能正确调用所有 Tools(生成 Diff Preview)
|
||
- [ ] Claude 能使用 Prompts 生成高质量内容
|
||
- [ ] 用户能在 Claude 中自然对话式操作 ColaFlow
|
||
- [ ] 所有操作都需人工审批(安全机制生效)
|
||
|
||
**预计工时**: 8 小时 (1 天) - 集成 + 测试
|
||
|
||
---
|
||
|
||
### 2.2 次要功能 (P1 优先级)
|
||
|
||
#### 2.2.1 MCP Server 性能优化
|
||
- [ ] Redis 缓存热数据(Resources)
|
||
- [ ] 数据库查询优化(索引、分页)
|
||
- [ ] 压缩响应(Gzip/Brotli)
|
||
- [ ] CDN 加速(静态资源)
|
||
|
||
**预计工时**: 8 小时 (1 天)
|
||
|
||
#### 2.2.2 MCP Server 监控与告警
|
||
- [ ] API 调用量监控(Grafana)
|
||
- [ ] 错误率告警(> 5% 触发告警)
|
||
- [ ] 性能监控(P95 响应时间)
|
||
- [ ] 审批通过率跟踪
|
||
|
||
**预计工时**: 12 小时 (1.5 天)
|
||
|
||
#### 2.2.3 MCP Client SDK (TypeScript)
|
||
- [ ] npm 包:`@colaflow/mcp-client`
|
||
- [ ] 封装所有 Resources/Tools/Prompts
|
||
- [ ] TypeScript 类型定义
|
||
- [ ] 使用示例和文档
|
||
|
||
**预计工时**: 16 小时 (2 天)
|
||
|
||
---
|
||
|
||
### 2.3 未来功能 (P2 优先级, 延后至 M3)
|
||
|
||
#### 2.3.1 ChatGPT 集成
|
||
- [ ] MCP Client for ChatGPT Plugin
|
||
- [ ] OAuth 认证流程
|
||
- [ ] 聊天上下文保持
|
||
|
||
**预计工时**: 16 小时 (2 天)
|
||
|
||
#### 2.3.2 Cursor IDE 集成
|
||
- [ ] Cursor MCP 扩展
|
||
- [ ] 代码注释 → Issue 自动创建
|
||
- [ ] Git commit → Issue 状态自动更新
|
||
|
||
**预计工时**: 20 小时 (2.5 天)
|
||
|
||
#### 2.3.3 Batch Operations (批量操作)
|
||
- [ ] 批量创建 Issues
|
||
- [ ] 批量更新 Status
|
||
- [ ] 批量分配 Assignee
|
||
|
||
**预计工时**: 12 小时 (1.5 天)
|
||
|
||
---
|
||
|
||
## 三、用户故事与验收标准
|
||
|
||
### 3.1 核心用户故事
|
||
|
||
#### User Story 1: 自然语言创建任务
|
||
**作为** 项目经理
|
||
**我想要** 在 Claude Desktop 中用自然语言描述任务
|
||
**以便于** 快速创建任务而无需打开 ColaFlow Web 界面
|
||
|
||
**验收标准**:
|
||
- [ ] 用户在 Claude 中输入"创建一个任务:修复登录 bug,优先级 High"
|
||
- [ ] Claude 调用 `create_issue` tool 生成 Diff Preview
|
||
- [ ] 用户在 ColaFlow 仪表板看到待审批变更
|
||
- [ ] 用户点击"批准",任务自动创建在 Backlog
|
||
- [ ] 整个流程 < 2 分钟(含审批时间)
|
||
|
||
**优先级**: P0
|
||
**预计工时**: 已包含在 MCP Tools 实现中
|
||
|
||
---
|
||
|
||
#### User Story 2: AI 自动生成 PRD
|
||
**作为** 产品经理
|
||
**我想要** AI 根据我的功能描述自动生成 PRD 草稿
|
||
**以便于** 减少 70% 的文档编写时间
|
||
|
||
**验收标准**:
|
||
- [ ] 用户在 Claude 中输入功能描述
|
||
- [ ] Claude 调用 `generate_prd` prompt
|
||
- [ ] Claude 返回结构化的 PRD(包含背景、需求、验收标准、时间线)
|
||
- [ ] PRD 内容准确度 ≥ 80%(人工评估)
|
||
- [ ] 用户可直接复制到 Notion/Confluence
|
||
|
||
**优先级**: P0
|
||
**预计工时**: 已包含在 MCP Prompts 实现中
|
||
|
||
---
|
||
|
||
#### User Story 3: AI 拆分 Epic 为 Stories
|
||
**作为** 开发团队 Lead
|
||
**我想要** AI 自动将大 Epic 拆分为多个可执行的 Stories
|
||
**以便于** 团队能快速开始 Sprint 规划
|
||
|
||
**验收标准**:
|
||
- [ ] 用户在 Claude 中输入"将 Epic #123 拆分为 Stories"
|
||
- [ ] Claude 读取 Epic 详情(调用 `issues.get` resource)
|
||
- [ ] Claude 调用 `split_epic_to_stories` prompt
|
||
- [ ] Claude 生成 3-8 个 Story 建议(包含标题、描述、验收标准)
|
||
- [ ] 用户选择需要的 Stories,Claude 批量创建(调用 `create_issue` tool)
|
||
- [ ] 所有 Stories 自动关联到 Epic(调用 `link_issues` tool)
|
||
|
||
**优先级**: P0
|
||
**预计工时**: 已包含在功能实现中
|
||
|
||
---
|
||
|
||
#### User Story 4: AI 检测项目风险
|
||
**作为** 项目经理
|
||
**我想要** AI 定期扫描项目并生成风险报告
|
||
**以便于** 提前识别进度延误和资源瓶颈
|
||
|
||
**验收标准**:
|
||
- [ ] 用户在 Claude 中输入"检测项目 #456 的风险"
|
||
- [ ] Claude 调用 `detect_risks` prompt
|
||
- [ ] Claude 分析以下数据:
|
||
- 未完成任务数量和截止日期
|
||
- 团队成员工作负载
|
||
- Sprint 燃尽图趋势
|
||
- 高优先级 Bug 数量
|
||
- [ ] Claude 生成风险报告(包含风险等级、影响、建议)
|
||
- [ ] 风险报告准确率 ≥ 75%(对比人工评估)
|
||
|
||
**优先级**: P1
|
||
**预计工时**: 已包含在 MCP Prompts 实现中
|
||
|
||
---
|
||
|
||
#### User Story 5: 审批 AI 操作
|
||
**作为** 项目管理员
|
||
**我想要** 在批准 AI 的操作前看到详细的 Diff Preview
|
||
**以便于** 确保 AI 不会误操作重要数据
|
||
|
||
**验收标准**:
|
||
- [ ] AI 执行写操作后,用户在 ColaFlow 收到 WebSocket 通知
|
||
- [ ] 用户打开 Pending Changes 页面,看到待审批项
|
||
- [ ] 用户点击"View Diff",看到 JSON 格式的 before/after 对比
|
||
- [ ] 差异高亮显示(绿色=新增,红色=删除,黄色=修改)
|
||
- [ ] 用户点击"批准",操作立即执行(< 1 秒)
|
||
- [ ] 用户点击"拒绝",操作取消并记录日志
|
||
|
||
**优先级**: P0
|
||
**预计工时**: 已包含在 Diff Preview UI 实现中
|
||
|
||
---
|
||
|
||
### 3.2 次要用户故事 (P1)
|
||
|
||
#### User Story 6: 批量审批 AI 操作
|
||
**作为** 项目管理员
|
||
**我想要** 批量批准多个低风险的 AI 操作
|
||
**以便于** 提高审批效率
|
||
|
||
**验收标准**:
|
||
- [ ] 用户在 Pending Changes 页面选中 3+ 待审批项
|
||
- [ ] 用户点击"批量批准"按钮
|
||
- [ ] 系统并行执行所有操作(总耗时 < 5 秒)
|
||
- [ ] 成功/失败结果分别显示
|
||
- [ ] 失败的操作不影响成功的操作
|
||
|
||
**预计工时**: 4 小时
|
||
|
||
---
|
||
|
||
#### User Story 7: API Key 管理
|
||
**作为** 租户管理员
|
||
**我想要** 创建多个 API Keys 并设置不同的权限
|
||
**以便于** 为不同的 AI 工具提供差异化的访问控制
|
||
|
||
**验收标准**:
|
||
- [ ] 管理员在设置页面点击"创建 API Key"
|
||
- [ ] 管理员输入名称、描述、权限范围(只读/读写)
|
||
- [ ] 系统生成 API Key 并显示(仅显示一次)
|
||
- [ ] 管理员可以撤销 API Key(立即失效)
|
||
- [ ] 管理员可以查看 API Key 使用统计(调用次数、错误率)
|
||
|
||
**预计工时**: 已包含在 API Key 管理实现中
|
||
|
||
---
|
||
|
||
## 四、时间规划与里程碑
|
||
|
||
### 4.1 M2 总体时间线
|
||
|
||
**M2 阶段**: 2025-12-01 至 2026-03-31 (16 周)
|
||
|
||
**阶段划分**:
|
||
- **Phase 1: Foundation** (Week 1-2) - 基础设施搭建
|
||
- **Phase 2: Resources** (Week 3-4) - 只读 API 实现
|
||
- **Phase 3: Tools + Diff Preview** (Week 5-8) - 写操作 + 审批流程
|
||
- **Phase 4: Security & Audit** (Week 9-10) - 安全加固
|
||
- **Phase 5: Claude Integration** (Week 11-12) - AI 工具集成
|
||
- **Phase 6: Testing & Optimization** (Week 13-14) - 全面测试
|
||
- **Phase 7: Documentation** (Week 15-16) - 文档和培训
|
||
|
||
---
|
||
|
||
### 4.2 详细周计划
|
||
|
||
#### Week 1-2: Phase 1 - Foundation (基础设施搭建)
|
||
|
||
**目标**: 搭建 MCP Server 项目结构,完成数据库设计和基础认证
|
||
|
||
**任务列表**:
|
||
- [ ] **Day 1-2**: MCP Server 项目初始化
|
||
- 安装 ModelContextProtocol SDK v0.4.0 (C# 版本)
|
||
- 创建 ColaFlow.McpServer 项目(Clean Architecture 结构)
|
||
- 配置 DI 容器(Services, Repositories, DbContext)
|
||
- 配置日志(Serilog + Application Insights)
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 3-4**: 数据库设计与 Migration
|
||
- 创建 3 张表:`mcp_api_keys`, `mcp_pending_changes`, `mcp_api_key_usage`
|
||
- 设计索引和外键约束
|
||
- 编写 EF Core Migration
|
||
- 编写数据库 Seed 脚本(测试数据)
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 5-6**: API Key 认证系统
|
||
- 实现 API Key 生成逻辑(SHA-256 + Redis 缓存)
|
||
- 实现认证中间件(McpApiKeyAuthenticationMiddleware)
|
||
- 实现速率限制(基于 Redis)
|
||
- 实现 IP 白名单验证
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 7**: API Key 管理 API
|
||
- 7 个 API 端点(Create, List, Revoke, Refresh, Permissions, IP Whitelist, Stats)
|
||
- 单元测试(90% 覆盖率)
|
||
- 预计工时: 6 小时
|
||
|
||
- [ ] **Day 8-9**: MCP Server 基础架构
|
||
- 实现 McpServerBuilder 配置
|
||
- 实现 IMcpResource 接口和基类
|
||
- 实现 IMcpTool 接口和基类
|
||
- 实现 IMcpPrompt 接口和基类
|
||
- 实现 McpRequestHandler(路由请求到对应 Resource/Tool/Prompt)
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 10**: 集成测试 + Phase 1 验收
|
||
- 端到端测试:API Key 创建 → 认证 → 调用 MCP Server
|
||
- 性能测试:1000+ requests/s 压测
|
||
- 文档:Phase 1 技术文档
|
||
- 预计工时: 6 小时
|
||
|
||
**Phase 1 交付物**:
|
||
- ✅ MCP Server 项目骨架(Clean Architecture)
|
||
- ✅ 数据库 Schema + Migration
|
||
- ✅ API Key 认证系统(含速率限制、IP 白名单)
|
||
- ✅ API Key 管理 API (7 endpoints)
|
||
- ✅ MCP Server 基础架构(Resource/Tool/Prompt 接口)
|
||
|
||
**Phase 1 验收标准**:
|
||
- [ ] API Key 认证中间件正确拦截未授权请求
|
||
- [ ] 速率限制功能正确工作(60 req/min)
|
||
- [ ] IP 白名单功能正确工作
|
||
- [ ] 集成测试通过率 ≥ 95%
|
||
- [ ] API 响应时间 < 50ms (P95)
|
||
|
||
---
|
||
|
||
#### Week 3-4: Phase 2 - Resources (只读 API 实现)
|
||
|
||
**目标**: 实现所有 MCP Resources,让 AI 工具能读取 ColaFlow 数据
|
||
|
||
**任务列表**:
|
||
- [ ] **Day 11-12**: Projects Resources (2个)
|
||
- `projects.list` - 列出所有项目
|
||
- `projects.get` - 获取项目详情
|
||
- Redis 缓存优化(5 分钟 TTL)
|
||
- 单元测试 + 集成测试
|
||
- 预计工时: 8 小时
|
||
|
||
- [ ] **Day 13-14**: Issues Resources (4个)
|
||
- `issues.search` - 搜索任务(支持过滤、分页)
|
||
- `issues.get` - 获取任务详情
|
||
- `epics.list` - 列出所有 Epic
|
||
- `stories.list` - 列出所有 Story
|
||
- `tasks.list` - 列出所有 Task
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 15-16**: Sprints & Users Resources (4个)
|
||
- `sprints.current` - 获取当前 Sprint
|
||
- `sprints.backlog` - 获取 Backlog
|
||
- `users.list` - 列出团队成员
|
||
- `reports.burndown` - 获取燃尽图数据
|
||
- 预计工时: 10 小时
|
||
|
||
- [ ] **Day 17**: Resource 缓存优化
|
||
- 实现 Redis 缓存层(IResourceCache)
|
||
- 热数据预加载(用户登录时加载常用 Resources)
|
||
- 缓存失效策略(写操作自动失效相关缓存)
|
||
- 预计工时: 6 小时
|
||
|
||
- [ ] **Day 18-19**: 集成测试 + Phase 2 验收
|
||
- Claude Desktop 集成测试(读取项目/任务数据)
|
||
- 性能测试:1000+ issues 场景,响应时间 < 200ms
|
||
- 租户隔离测试:跨租户数据访问验证
|
||
- 文档:Resources API 文档(OpenAPI/Swagger)
|
||
- 预计工时: 10 小时
|
||
|
||
**Phase 2 交付物**:
|
||
- ✅ 11 个 MCP Resources 实现
|
||
- ✅ Redis 缓存优化(命中率 > 80%)
|
||
- ✅ Resources API 文档(Swagger)
|
||
- ✅ Claude Desktop PoC(只读操作)
|
||
|
||
**Phase 2 验收标准**:
|
||
- [ ] 所有 Resources 正确返回数据
|
||
- [ ] 租户隔离 100% 验证通过
|
||
- [ ] 性能:P95 响应时间 < 200ms
|
||
- [ ] 缓存命中率 > 80%
|
||
- [ ] Claude Desktop 能成功读取 ColaFlow 数据
|
||
|
||
---
|
||
|
||
#### Week 5-8: Phase 3 - Tools + Diff Preview (写操作 + 审批流程)
|
||
|
||
**目标**: 实现所有 MCP Tools,搭建 Diff Preview 机制和人工审批流程
|
||
|
||
**任务列表**:
|
||
- [ ] **Day 20-22**: Pending Changes 数据库设计
|
||
- `mcp_pending_changes` 表 Schema 优化
|
||
- Pending Change 状态机(Pending → Approved/Rejected → Executed/Cancelled)
|
||
- Domain Events(PendingChangeCreated, Approved, Rejected, Expired)
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 23-25**: Core Tools 实现 (4个)
|
||
- `create_project` - 创建新项目
|
||
- `create_issue` - 创建新任务
|
||
- `update_issue` - 更新任务详情
|
||
- `update_status` - 更改任务状态
|
||
- Diff Preview 生成逻辑(JSON Diff)
|
||
- 预计工时: 18 hours
|
||
|
||
- [ ] **Day 26-28**: Assignment & Sprint Tools (4个)
|
||
- `assign_issue` - 分配任务
|
||
- `create_sprint` - 创建 Sprint
|
||
- `start_sprint` - 启动 Sprint
|
||
- `create_epic` - 创建 Epic
|
||
- 预计工时: 14 小时
|
||
|
||
- [ ] **Day 29-30**: Advanced Tools (2个)
|
||
- `add_comment` - 添加评论
|
||
- `link_issues` - 关联任务(父子关系)
|
||
- 预计工时: 8 小时
|
||
|
||
- [ ] **Day 31-33**: 审批流程 API (5个端点)
|
||
- GET /api/mcp/pending-changes - 列出待审批变更
|
||
- GET /api/mcp/pending-changes/{id} - 获取变更详情
|
||
- POST /api/mcp/pending-changes/{id}/approve - 批准(自动执行)
|
||
- POST /api/mcp/pending-changes/{id}/reject - 拒绝
|
||
- DELETE /api/mcp/pending-changes/{id} - 取消
|
||
- 审批后自动执行 Tool 操作
|
||
- 预计工时: 14 小时
|
||
|
||
- [ ] **Day 34-36**: Diff Preview UI (前端)
|
||
- Pending Changes 列表页(React)
|
||
- Diff Preview 详情页(react-diff-viewer-continued)
|
||
- 审批操作面板(批准/拒绝/批量操作)
|
||
- WebSocket 实时更新(SignalR 集成)
|
||
- 预计工时: 20 小时
|
||
|
||
- [ ] **Day 37-38**: 集成测试 + Phase 3 验收
|
||
- 端到端测试:AI 创建任务 → 人工审批 → 自动执行
|
||
- 审批拒绝测试:确保拒绝后不执行操作
|
||
- 过期测试:24 小时未审批自动过期
|
||
- WebSocket 实时性测试:通知延迟 < 1 秒
|
||
- Claude Desktop PoC:完整读写流程
|
||
- 预计工时: 12 小时
|
||
|
||
**Phase 3 交付物**:
|
||
- ✅ 10 个 MCP Tools 实现
|
||
- ✅ Diff Preview 机制(JSON Diff)
|
||
- ✅ 审批流程 API (5 endpoints)
|
||
- ✅ Diff Preview UI(React)
|
||
- ✅ Claude Desktop PoC(读写操作)
|
||
|
||
**Phase 3 验收标准**:
|
||
- [ ] 所有 Tools 正确生成 Diff Preview
|
||
- [ ] 审批通过后自动执行操作(成功率 ≥ 99%)
|
||
- [ ] 审批拒绝后不执行操作(100% 验证)
|
||
- [ ] 24 小时未审批自动过期
|
||
- [ ] WebSocket 通知延迟 < 1 秒
|
||
- [ ] Claude Desktop 能完整执行读写操作
|
||
|
||
---
|
||
|
||
#### Week 9-10: Phase 4 - Security & Audit (安全加固)
|
||
|
||
**目标**: 实现字段级权限控制、审计日志、回滚机制
|
||
|
||
**任务列表**:
|
||
- [ ] **Day 39-40**: 字段级权限控制
|
||
- 白名单配置(JSON):哪些字段可以被 AI 读写
|
||
- 运行时权限验证(Middleware)
|
||
- 敏感字段保护(如 API Keys, Passwords)
|
||
- 预计工时: 10 小时
|
||
|
||
- [ ] **Day 41-42**: MCP Audit Log (MCP 操作日志)
|
||
- `mcp_audit_logs` 表设计
|
||
- 记录所有 Tool 调用(入参、出参、耗时、状态)
|
||
- 记录所有审批操作(谁批准/拒绝了什么)
|
||
- 审计日志查询 API(GET /api/mcp/audit-logs)
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 43-44**: 回滚机制
|
||
- 回滚 API:POST /api/mcp/pending-changes/{id}/rollback
|
||
- 补偿事务模式:回滚操作本身也记录审计日志
|
||
- 回滚限制:只能回滚 7 天内的操作
|
||
- 版本冲突检测:回滚前检查数据是否被修改
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 45-46**: 安全测试
|
||
- OWASP Top 10 安全扫描(SQL Injection, XSS, CSRF)
|
||
- 租户隔离安全测试(100+ 场景)
|
||
- API Key 泄露测试(撤销后立即失效)
|
||
- 速率限制测试(1000+ req/s 攻击)
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 47-48**: Phase 4 验收
|
||
- 渗透测试报告
|
||
- 安全审计报告
|
||
- 性能测试报告(1000+ users, 10000+ issues)
|
||
- 文档:安全最佳实践指南
|
||
- 预计工时: 8 小时
|
||
|
||
**Phase 4 交付物**:
|
||
- ✅ 字段级权限控制
|
||
- ✅ MCP Audit Log(完整日志)
|
||
- ✅ 回滚机制(7 天内可回滚)
|
||
- ✅ 安全测试报告(无 CRITICAL 漏洞)
|
||
|
||
**Phase 4 验收标准**:
|
||
- [ ] 字段级权限正确拦截未授权操作
|
||
- [ ] 审计日志完整记录所有 MCP 操作
|
||
- [ ] 回滚功能正确工作(10+ 测试场景)
|
||
- [ ] OWASP Top 10 无 CRITICAL 漏洞
|
||
- [ ] 租户隔离 100% 验证通过
|
||
|
||
---
|
||
|
||
#### Week 11-12: Phase 5 - Claude Integration (AI 工具集成)
|
||
|
||
**目标**: 实现 Claude Desktop 集成,验证完整的 AI 辅助工作流
|
||
|
||
**任务列表**:
|
||
- [ ] **Day 49-50**: Claude Desktop 配置
|
||
- 编写 MCP Server Wrapper(Node.js)
|
||
- 配置 mcp_config.json
|
||
- 本地测试:Claude Desktop 连接 ColaFlow
|
||
- 预计工时: 10 小时
|
||
|
||
- [ ] **Day 51-52**: MCP Prompts 实现 (8个)
|
||
- `generate_prd` - 生成 PRD
|
||
- `split_epic_to_stories` - 拆分 Epic
|
||
- `estimate_story_points` - 估算工作量
|
||
- `generate_acceptance_criteria` - 生成验收标准
|
||
- `detect_risks` - 风险检测
|
||
- `generate_standup_summary` - 站会纪要
|
||
- `suggest_next_sprint_items` - 推荐 Sprint 任务
|
||
- `analyze_burndown` - 分析燃尽图
|
||
- 预计工时: 16 小时
|
||
|
||
- [ ] **Day 53-54**: 端到端测试场景
|
||
- 场景 1:自然语言创建任务
|
||
- 场景 2:AI 生成 PRD
|
||
- 场景 3:AI 拆分 Epic 为 Stories
|
||
- 场景 4:AI 检测项目风险
|
||
- 场景 5:AI 生成站会纪要
|
||
- 每个场景录屏演示
|
||
- 预计工时: 12 小时
|
||
|
||
- [ ] **Day 55-56**: Phase 5 验收
|
||
- Claude Desktop 集成测试报告
|
||
- 用户体验测试(5+ 内部用户)
|
||
- AI 输出质量评估(准确率 ≥ 80%)
|
||
- 文档:Claude Desktop 集成指南
|
||
- 预计工时: 8 小时
|
||
|
||
**Phase 5 交付物**:
|
||
- ✅ Claude Desktop 集成(完整配置)
|
||
- ✅ 8 个 MCP Prompts 实现
|
||
- ✅ 5 个端到端测试场景(含录屏)
|
||
- ✅ Claude Desktop 集成指南
|
||
|
||
**Phase 5 验收标准**:
|
||
- [ ] Claude Desktop 成功连接 ColaFlow
|
||
- [ ] 所有 Prompts 正确返回提示词
|
||
- [ ] 5 个测试场景全部通过
|
||
- [ ] AI 输出质量准确率 ≥ 80%
|
||
- [ ] 用户体验评分 ≥ 4.0/5.0
|
||
|
||
---
|
||
|
||
#### Week 13-14: Phase 6 - Testing & Optimization (全面测试)
|
||
|
||
**目标**: 全面测试、性能优化、Bug 修复
|
||
|
||
**任务列表**:
|
||
- [ ] **Day 57-59**: 性能测试
|
||
- 1000+ concurrent users
|
||
- 10000+ issues
|
||
- 1000+ MCP requests/minute
|
||
- 数据库查询优化(EXPLAIN ANALYZE)
|
||
- Redis 缓存优化
|
||
- 预计工时: 18 小时
|
||
|
||
- [ ] **Day 60-62**: 负载测试
|
||
- Apache JMeter 压测(1000+ req/s)
|
||
- WebSocket 并发测试(100+ connections)
|
||
- 内存泄漏检测(dotMemory)
|
||
- CPU 瓶颈分析(dotTrace)
|
||
- 预计工时: 18 小时
|
||
|
||
- [ ] **Day 63-65**: Bug 修复
|
||
- 修复性能测试中发现的问题
|
||
- 修复负载测试中发现的问题
|
||
- 修复用户反馈的 UI 问题
|
||
- 回归测试(确保修复没有引入新问题)
|
||
- 预计工时: 18 小时
|
||
|
||
- [ ] **Day 66-67**: Phase 6 验收
|
||
- 性能测试报告(所有指标达标)
|
||
- 负载测试报告(无崩溃、无内存泄漏)
|
||
- Bug 修复报告(所有 P0/P1 bugs 已修复)
|
||
- 预计工时: 10 小时
|
||
|
||
**Phase 6 交付物**:
|
||
- ✅ 性能测试报告(所有 KPIs 达标)
|
||
- ✅ 负载测试报告(1000+ req/s 稳定)
|
||
- ✅ Bug 修复报告(0 P0 bugs)
|
||
|
||
**Phase 6 验收标准**:
|
||
- [ ] API 响应时间:P95 < 200ms, P99 < 500ms
|
||
- [ ] 并发支持:1000+ users 稳定运行
|
||
- [ ] 内存使用:< 2GB (1000+ users 场景)
|
||
- [ ] CPU 使用:< 60% (正常负载)
|
||
- [ ] 无崩溃、无内存泄漏
|
||
|
||
---
|
||
|
||
#### Week 15-16: Phase 7 - Documentation (文档和培训)
|
||
|
||
**目标**: 完善技术文档、用户指南、培训材料
|
||
|
||
**任务列表**:
|
||
- [ ] **Day 68-70**: API 文档
|
||
- MCP Resources 文档(11个 Resources)
|
||
- MCP Tools 文档(10个 Tools)
|
||
- MCP Prompts 文档(8个 Prompts)
|
||
- OpenAPI/Swagger 规范
|
||
- Postman Collection
|
||
- 预计工时: 18 小时
|
||
|
||
- [ ] **Day 71-73**: 集成指南
|
||
- Claude Desktop 集成指南(详细步骤 + 截图)
|
||
- ChatGPT 集成指南(准备 M3)
|
||
- Cursor IDE 集成指南(准备 M3)
|
||
- MCP Client SDK 使用指南(TypeScript)
|
||
- 预计工时: 18 小时
|
||
|
||
- [ ] **Day 74-76**: 用户指南
|
||
- 管理员指南(API Key 管理、权限设置)
|
||
- 用户指南(如何使用 AI 助手)
|
||
- 最佳实践(如何编写高质量 Prompts)
|
||
- 故障排除(常见问题 FAQ)
|
||
- 预计工时: 18 小时
|
||
|
||
- [ ] **Day 77-79**: 培训材料
|
||
- 视频教程(5 个场景演示,共 30 分钟)
|
||
- 幻灯片(M2 产品发布会 PPT)
|
||
- 发布公告(博客文章、社交媒体)
|
||
- 预计工时: 18 小时
|
||
|
||
- [ ] **Day 80**: M2 完成验收
|
||
- 最终验收测试(所有 KPIs 达标)
|
||
- 产品发布会准备
|
||
- M2 阶段回顾报告
|
||
- M3 规划启动
|
||
- 预计工时: 8 小时
|
||
|
||
**Phase 7 交付物**:
|
||
- ✅ 完整 API 文档(Swagger + Postman)
|
||
- ✅ 集成指南(Claude Desktop + ChatGPT + Cursor)
|
||
- ✅ 用户指南(管理员 + 用户 + 最佳实践)
|
||
- ✅ 培训材料(视频 + PPT + 博客)
|
||
|
||
**Phase 7 验收标准**:
|
||
- [ ] API 文档完整(100% 覆盖所有接口)
|
||
- [ ] 集成指南可操作(任何人可按指南完成集成)
|
||
- [ ] 用户指南清晰(用户可自助解决 90% 问题)
|
||
- [ ] 培训材料质量高(视频播放量 > 100, 点赞率 > 90%)
|
||
|
||
---
|
||
|
||
### 4.3 关键里程碑
|
||
|
||
| 里程碑 | 日期 | 交付物 | 验收标准 |
|
||
|--------|------|--------|---------|
|
||
| M2.1: Foundation Complete | Week 2 (2025-12-14) | MCP Server 基础架构 + API Key 认证 | 集成测试通过率 ≥ 95% |
|
||
| M2.2: Resources Complete | Week 4 (2025-12-28) | 11 个 MCP Resources 实现 | Claude Desktop 能读取数据 |
|
||
| M2.3: Tools Complete | Week 8 (2026-01-25) | 10 个 MCP Tools + Diff Preview UI | Claude Desktop 能执行写操作 |
|
||
| M2.4: Security Complete | Week 10 (2026-02-08) | 字段级权限 + 审计日志 + 回滚 | 无 CRITICAL 安全漏洞 |
|
||
| M2.5: Claude Integration | Week 12 (2026-02-22) | Claude Desktop 完整集成 + 8 Prompts | 5 个测试场景全部通过 |
|
||
| M2.6: Testing Complete | Week 14 (2026-03-08) | 性能测试 + 负载测试 + Bug 修复 | 所有 KPIs 达标 |
|
||
| M2.7: M2 Release | Week 16 (2026-03-22) | 完整文档 + 培训材料 + 产品发布 | M2 验收通过 |
|
||
|
||
---
|
||
|
||
## 五、验收标准与 KPI
|
||
|
||
### 5.1 功能完整性 KPI
|
||
|
||
| 指标 | 目标 | 测量方法 |
|
||
|------|------|---------|
|
||
| MCP Resources 实现率 | 100% (11/11) | 单元测试 + 集成测试 |
|
||
| MCP Tools 实现率 | 100% (10/10) | Diff Preview 生成成功率 |
|
||
| MCP Prompts 实现率 | 100% (8/8) | AI 输出质量评估 |
|
||
| API Key 管理功能 | 100% (7/7 endpoints) | 功能测试 |
|
||
| Diff Preview UI 完整性 | 100% (所有功能) | UI 测试 |
|
||
|
||
---
|
||
|
||
### 5.2 性能 KPI
|
||
|
||
| 指标 | 目标 | 测量方法 |
|
||
|------|------|---------|
|
||
| API 响应时间(P95) | < 200ms | Apache JMeter 压测 |
|
||
| API 响应时间(P99) | < 500ms | Apache JMeter 压测 |
|
||
| 并发支持 | 1000+ users | 负载测试 |
|
||
| MCP 请求吞吐量 | 1000+ req/min | 压测 + 监控 |
|
||
| 数据库查询时间 | < 10ms (单次查询) | EF Core 日志分析 |
|
||
| Redis 缓存命中率 | > 80% | Redis Monitoring |
|
||
| WebSocket 通知延迟 | < 1s | SignalR 监控 |
|
||
|
||
---
|
||
|
||
### 5.3 安全 KPI
|
||
|
||
| 指标 | 目标 | 测量方法 |
|
||
|------|------|---------|
|
||
| 租户隔离验证通过率 | 100% | 安全测试(100+ 场景) |
|
||
| OWASP Top 10 漏洞 | 0 CRITICAL | 安全扫描工具 |
|
||
| API Key 认证成功率 | 100% | 集成测试 |
|
||
| 审批通过率 | ≥ 90% | 用户行为分析 |
|
||
| 回滚成功率 | 100% | 功能测试(10+ 场景) |
|
||
| 审计日志完整性 | 100% | 日志审计 |
|
||
|
||
---
|
||
|
||
### 5.4 AI 输出质量 KPI
|
||
|
||
| 指标 | 目标 | 测量方法 |
|
||
|------|------|---------|
|
||
| PRD 生成准确率 | ≥ 80% | 人工评估(5+ 样本) |
|
||
| Epic 拆分合理性 | ≥ 75% | 人工评估(5+ 样本) |
|
||
| 风险检测准确率 | ≥ 75% | 对比人工评估 |
|
||
| Story Points 估算误差 | ≤ 30% | 对比实际完成时间 |
|
||
| 验收标准生成质量 | ≥ 80% | 人工评估(5+ 样本) |
|
||
|
||
---
|
||
|
||
### 5.5 用户体验 KPI
|
||
|
||
| 指标 | 目标 | 测量方法 |
|
||
|------|------|---------|
|
||
| AI 操作成功率 | ≥ 95% | 系统日志分析 |
|
||
| 审批流程完成时间 | < 2 分钟 (平均) | 用户行为分析 |
|
||
| 用户满意度 | ≥ 4.0/5.0 | 用户调查问卷(5+ 用户) |
|
||
| AI 减少手动工作量 | ≥ 50% | 时间追踪对比 |
|
||
| Diff Preview 可读性 | ≥ 4.5/5.0 | 用户调查问卷 |
|
||
|
||
---
|
||
|
||
### 5.6 项目管理 KPI
|
||
|
||
| 指标 | 目标 | 测量方法 |
|
||
|------|------|---------|
|
||
| M2 按时完成率 | 100% (16周内完成) | 项目进度跟踪 |
|
||
| Sprint 燃尽图趋势 | 线性递减 | Sprint 回顾 |
|
||
| Bug 修复及时性 | P0 bugs < 24h, P1 bugs < 3 days | Bug 追踪系统 |
|
||
| 代码审查覆盖率 | 100% (所有 PR) | GitHub PR 统计 |
|
||
| 测试覆盖率 | ≥ 80% | Code Coverage 工具 |
|
||
|
||
---
|
||
|
||
## 六、风险识别与应对策略
|
||
|
||
### 6.1 技术风险
|
||
|
||
#### 风险 1: MCP SDK 不成熟
|
||
**描述**: ModelContextProtocol SDK v0.4.0 是新技术,可能缺少必要功能或存在 bug
|
||
|
||
**影响**: 高
|
||
**概率**: 中 (40%)
|
||
**严重程度**: MEDIUM
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- Week 1-2 提前验证 SDK 核心功能(Resources/Tools/Prompts)
|
||
- 准备 Fallback 方案:如果 SDK 不可用,自己实现 MCP 协议(基于 JSON-RPC 2.0)
|
||
- 与 MCP 社区保持联系,及时反馈问题
|
||
2. **应急计划**:
|
||
- 如果 SDK 严重不可用(Week 4 前发现),切换到自研 MCP 实现
|
||
- 预留 2 周 buffer 时间用于 SDK 问题处理
|
||
3. **监控指标**:
|
||
- SDK bug 数量(目标: < 5 个 CRITICAL bugs)
|
||
- SDK 功能完整性(目标: 100% 核心功能可用)
|
||
|
||
---
|
||
|
||
#### 风险 2: Diff Preview 性能问题
|
||
**描述**: JSON Diff 计算可能较慢,影响用户体验
|
||
|
||
**影响**: 中
|
||
**概率**: 中 (30%)
|
||
**严重程度**: LOW
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- 使用高性能 Diff 库(如 `JsonDiffPatch.Net`)
|
||
- 对大对象(> 10KB)进行异步 Diff 计算
|
||
- 前端使用虚拟滚动(react-window)优化大 Diff 显示
|
||
2. **应急计划**:
|
||
- 如果 Diff 计算 > 5s,改为后台异步计算 + WebSocket 通知
|
||
- 提供"简化 Diff"模式(仅显示关键字段变更)
|
||
3. **监控指标**:
|
||
- Diff 计算时间(目标: P95 < 500ms)
|
||
- 用户投诉率(目标: < 5%)
|
||
|
||
---
|
||
|
||
#### 风险 3: 数据库性能瓶颈
|
||
**描述**: 1000+ users, 10000+ issues 场景下,数据库查询可能较慢
|
||
|
||
**影响**: 高
|
||
**概率**: 低 (20%)
|
||
**严重程度**: MEDIUM
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- Week 6 开始性能压测(提前发现瓶颈)
|
||
- 添加更多复合索引(针对 MCP Resources 常用查询)
|
||
- 使用 Redis 缓存热数据(Projects, Issues)
|
||
- 考虑读写分离(CQRS 架构已就绪)
|
||
2. **应急计划**:
|
||
- 如果查询 > 100ms,启用 PostgreSQL 查询优化(EXPLAIN ANALYZE)
|
||
- 如果仍不够快,引入 Elasticsearch 做全文搜索
|
||
3. **监控指标**:
|
||
- 数据库查询时间(目标: P95 < 10ms)
|
||
- 慢查询数量(目标: < 1% queries)
|
||
|
||
---
|
||
|
||
### 6.2 安全风险
|
||
|
||
#### 风险 4: AI 误操作导致数据损坏
|
||
**描述**: AI 生成错误的 Tool 参数,导致数据被错误修改或删除
|
||
|
||
**影响**: 高
|
||
**概率**: 中 (30%)
|
||
**严重程度**: HIGH
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- 所有写操作强制人工审批(Diff Preview 机制)
|
||
- 关键操作(删除、批量修改)增加二次确认
|
||
- 完整的审计日志 + 7 天回滚能力
|
||
- 字段级权限控制(敏感字段 AI 不可修改)
|
||
2. **应急计划**:
|
||
- 如果发生误操作,立即使用回滚功能恢复数据
|
||
- 提供"撤销"按钮(5 分钟内可一键撤销)
|
||
- 定期数据库备份(每日全量 + 每小时增量)
|
||
3. **监控指标**:
|
||
- 误操作率(目标: < 1%)
|
||
- 回滚使用率(目标: < 5%)
|
||
- 审批拒绝率(目标: 5-10%,说明 AI 有错误但被拦截)
|
||
|
||
---
|
||
|
||
#### 风险 5: API Key 泄露
|
||
**描述**: 用户不慎将 API Key 泄露到公共代码库(如 GitHub)
|
||
|
||
**影响**: 高
|
||
**概率**: 中 (40%)
|
||
**严重程度**: CRITICAL
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- API Key 创建时显示安全提示("请妥善保管,仅显示一次")
|
||
- 实现 API Key 前缀明文存储(方便识别哪个 Key 泄露)
|
||
- 提供"紧急撤销"功能(一键撤销所有 Keys)
|
||
- IP 白名单功能(限制 Key 只能从特定 IP 访问)
|
||
- 集成 GitHub Secret Scanning(自动检测泄露的 Keys)
|
||
2. **应急计划**:
|
||
- 如果检测到 Key 泄露,立即自动撤销并通知用户
|
||
- 提供"泄露通知"邮件(告知风险和修复步骤)
|
||
3. **监控指标**:
|
||
- API Key 泄露检测率(目标: 100% 检测到)
|
||
- 泄露后撤销时间(目标: < 5 分钟)
|
||
- 用户安全意识评分(目标: ≥ 4.0/5.0)
|
||
|
||
---
|
||
|
||
### 6.3 进度风险
|
||
|
||
#### 风险 6: M2 完成时间延期
|
||
**描述**: 16 周计划过于乐观,可能延期至 18-20 周
|
||
|
||
**影响**: 中
|
||
**概率**: 高 (50%)
|
||
**严重程度**: MEDIUM
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- 预留 2 周 buffer 时间(实际规划 14 周核心功能)
|
||
- 优先完成 P0 功能,P1/P2 功能可延后至 M2.5
|
||
- 每 2 周进行 Sprint 回顾,及时调整计划
|
||
- 前后端并行开发,减少依赖阻塞
|
||
2. **应急计划**:
|
||
- 如果 Week 10 进度 < 60%,考虑砍掉部分 P2 功能
|
||
- 如果 Week 14 无法完成,延后至 Week 18(M2.5 小版本)
|
||
3. **监控指标**:
|
||
- Sprint 燃尽图趋势(目标: 线性递减)
|
||
- 每周完成任务数(目标: 10+ tasks/week)
|
||
- M2 完成度(Week 8: 50%, Week 12: 75%, Week 16: 100%)
|
||
|
||
---
|
||
|
||
#### 风险 7: 人力资源不足
|
||
**描述**: 后端/前端开发人员不足,导致进度延误
|
||
|
||
**影响**: 高
|
||
**概率**: 中 (30%)
|
||
**严重程度**: HIGH
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- 提前招聘 1-2 名后端开发工程师(Week 4 前到岗)
|
||
- 外包部分 UI 开发工作(Diff Preview UI, API Key 管理页)
|
||
- 使用低代码工具加速前端开发(如 Ant Design Pro)
|
||
- 自动化测试(减少人工测试工作量)
|
||
2. **应急计划**:
|
||
- 如果人力不足,优先完成 P0 功能
|
||
- 延后 P1/P2 功能至 M2.5 或 M3
|
||
3. **监控指标**:
|
||
- 团队人数(目标: 2 后端 + 1 前端 + 1 QA)
|
||
- 人均任务数(目标: < 10 tasks/person)
|
||
- 加班时间(目标: < 10h/week)
|
||
|
||
---
|
||
|
||
### 6.4 业务风险
|
||
|
||
#### 风险 8: AI 输出质量不达标
|
||
**描述**: AI 生成的 PRD/Story/风险报告质量不高,用户不信任 AI
|
||
|
||
**影响**: 高
|
||
**概率**: 中 (40%)
|
||
**严重程度**: MEDIUM
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- Week 11 开始进行 AI 输出质量评估(5+ 样本)
|
||
- 优化 Prompts(增加示例、约束条件)
|
||
- 提供"AI 助手模式"(AI 生成草稿,人工润色)
|
||
- 收集用户反馈,持续迭代 Prompts
|
||
2. **应急计划**:
|
||
- 如果准确率 < 70%,暂停发布 AI 功能
|
||
- 进行 Prompts 专项优化(2-3 周)
|
||
- 考虑切换到更强的 AI 模型(如 GPT-4o)
|
||
3. **监控指标**:
|
||
- AI 输出准确率(目标: ≥ 80%)
|
||
- 用户编辑率(目标: < 30%,说明 AI 输出质量高)
|
||
- 用户满意度(目标: ≥ 4.0/5.0)
|
||
|
||
---
|
||
|
||
#### 风险 9: 用户采用率低
|
||
**描述**: 用户不习惯使用 AI 助手,仍然手动操作
|
||
|
||
**影响**: 中
|
||
**概率**: 中 (30%)
|
||
**严重程度**: LOW
|
||
|
||
**应对策略**:
|
||
1. **缓解措施**:
|
||
- Week 15-16 制作详细的培训材料(视频 + 文档)
|
||
- 内部试点(5+ 用户),收集反馈并优化
|
||
- 提供"新手引导"(首次使用时逐步教学)
|
||
- 提供"快捷操作"提示(在合适的时机推荐使用 AI)
|
||
2. **应急计划**:
|
||
- 如果采用率 < 30%,进行用户调研(找出阻碍因素)
|
||
- 优化 UX(降低学习成本)
|
||
- 提供激励机制(使用 AI 完成任务获得徽章)
|
||
3. **监控指标**:
|
||
- AI 操作数量(目标: ≥ 50% 任务通过 AI 创建)
|
||
- 活跃用户数(目标: ≥ 80% 用户使用 AI 功能)
|
||
- 用户留存率(目标: ≥ 90% 用户持续使用)
|
||
|
||
---
|
||
|
||
## 七、依赖与约束
|
||
|
||
### 7.1 技术依赖
|
||
|
||
| 依赖项 | 状态 | 风险等级 | 应对措施 |
|
||
|--------|------|---------|---------|
|
||
| M1 核心功能完成 | ✅ 85% 完成 (Day 14) | LOW | M1 剩余任务在 M2 Week 1 前完成 |
|
||
| ModelContextProtocol SDK v0.4.0 | ⏳ 待验证 | MEDIUM | Week 1 验证,准备 Fallback 方案 |
|
||
| PostgreSQL 16+ | ✅ 已部署 | LOW | 稳定版本,性能达标 |
|
||
| Redis 7+ | ⏳ 待部署 | LOW | Week 2 前部署,用于缓存和速率限制 |
|
||
| Claude Desktop 最新版 | ⏳ 待测试 | MEDIUM | Week 11 开始测试,确保兼容性 |
|
||
|
||
---
|
||
|
||
### 7.2 团队依赖
|
||
|
||
| 角色 | 人数 | 时间投入 | 风险 |
|
||
|------|------|---------|------|
|
||
| 后端开发工程师 | 2 人 | 100% (16周) | MEDIUM - 人力不足 |
|
||
| 前端开发工程师 | 1 人 | 80% (12周) | LOW - 可外包部分工作 |
|
||
| QA 工程师 | 1 人 | 60% (10周) | LOW - 自动化测试 |
|
||
| 架构师 | 1 人 | 20% (3周) | LOW - 技术评审和指导 |
|
||
| 产品经理 | 1 人 | 30% (5周) | LOW - 需求澄清和验收 |
|
||
|
||
**总人力**: 2 后端 + 1 前端 + 1 QA + 0.2 架构 + 0.3 PM = **4.5 人月 × 4 月 = 18 人月**
|
||
|
||
---
|
||
|
||
### 7.3 外部约束
|
||
|
||
| 约束项 | 描述 | 影响 |
|
||
|--------|------|------|
|
||
| 预算限制 | M2 预算上限 $50,000 | MEDIUM - 可能需要砍掉部分 P2 功能 |
|
||
| 时间限制 | M2 必须在 2026-03-31 前完成 | HIGH - 影响 M3 启动时间 |
|
||
| 合规要求 | GDPR + SOC 2 合规(企业客户要求) | HIGH - 必须满足 |
|
||
| 技术栈限制 | 必须使用 .NET 9 + PostgreSQL | LOW - 已确定 |
|
||
| AI 模型限制 | Claude/ChatGPT API 调用额度 | LOW - 按需扩展 |
|
||
|
||
---
|
||
|
||
## 八、成功标准
|
||
|
||
### 8.1 M2 完成的定义 (Definition of Done)
|
||
|
||
**功能完整性**:
|
||
- [ ] 11 个 MCP Resources 全部实现且测试通过
|
||
- [ ] 10 个 MCP Tools 全部实现且测试通过
|
||
- [ ] 8 个 MCP Prompts 全部实现且测试通过
|
||
- [ ] API Key 管理功能完整(7 个端点)
|
||
- [ ] Diff Preview UI 完整(列表页 + 详情页 + 审批面板)
|
||
- [ ] Claude Desktop 集成成功(5 个测试场景)
|
||
|
||
**性能指标**:
|
||
- [ ] API 响应时间 P95 < 200ms
|
||
- [ ] 并发支持 1000+ users
|
||
- [ ] 数据库查询 < 10ms
|
||
- [ ] Redis 缓存命中率 > 80%
|
||
- [ ] WebSocket 通知延迟 < 1s
|
||
|
||
**安全指标**:
|
||
- [ ] 租户隔离 100% 验证通过
|
||
- [ ] OWASP Top 10 无 CRITICAL 漏洞
|
||
- [ ] 审计日志完整性 100%
|
||
- [ ] 回滚功能正确工作(10+ 场景)
|
||
|
||
**AI 质量指标**:
|
||
- [ ] PRD 生成准确率 ≥ 80%
|
||
- [ ] Epic 拆分合理性 ≥ 75%
|
||
- [ ] 风险检测准确率 ≥ 75%
|
||
- [ ] 用户满意度 ≥ 4.0/5.0
|
||
|
||
**文档完整性**:
|
||
- [ ] API 文档完整(Swagger + Postman)
|
||
- [ ] 集成指南完整(Claude Desktop + ChatGPT)
|
||
- [ ] 用户指南完整(管理员 + 用户)
|
||
- [ ] 培训材料完整(视频 + PPT + 博客)
|
||
|
||
**测试覆盖率**:
|
||
- [ ] 单元测试覆盖率 ≥ 80%
|
||
- [ ] 集成测试通过率 ≥ 95%
|
||
- [ ] 端到端测试 5 个场景全部通过
|
||
|
||
---
|
||
|
||
### 8.2 M2 成功的标志
|
||
|
||
1. **技术成功**:
|
||
- Claude Desktop 能完整执行读写操作(5 个测试场景)
|
||
- 所有 KPIs 达标(性能、安全、质量)
|
||
- 无 P0/P1 bugs
|
||
|
||
2. **业务成功**:
|
||
- 5+ 内部用户试用并提供正面反馈
|
||
- AI 减少手动工作量 ≥ 50%(对比 M1)
|
||
- 用户满意度 ≥ 4.0/5.0
|
||
|
||
3. **项目管理成功**:
|
||
- 按时完成(2026-03-31 前)
|
||
- 预算控制(< $50,000)
|
||
- 团队士气高(无加班、无冲突)
|
||
|
||
---
|
||
|
||
## 九、下一步行动
|
||
|
||
### 9.1 立即行动 (Week 0, 准备阶段)
|
||
|
||
1. **产品需求确认** (Day 1-2)
|
||
- 产品经理与主协调器确认 PRD
|
||
- 架构师评审技术可行性
|
||
- 确认预算和人力资源
|
||
- 输出: 最终版 M2 PRD
|
||
|
||
2. **团队招募** (Day 3-7)
|
||
- 招聘 1-2 名后端开发工程师
|
||
- 招聘 1 名 QA 工程师
|
||
- 确认前端开发资源(内部或外包)
|
||
- 输出: 团队组建完成
|
||
|
||
3. **技术准备** (Day 8-10)
|
||
- 安装 ModelContextProtocol SDK v0.4.0
|
||
- 验证 SDK 核心功能(Resources/Tools/Prompts)
|
||
- 准备开发环境(Docker, PostgreSQL, Redis)
|
||
- 输出: 技术验证报告
|
||
|
||
4. **M2 启动会** (Day 11)
|
||
- 产品经理宣讲 M2 目标和计划
|
||
- 架构师讲解技术架构
|
||
- 团队讨论风险和依赖
|
||
- 输出: M2 启动会纪要
|
||
|
||
---
|
||
|
||
### 9.2 Week 1 行动计划
|
||
|
||
**Week 1 目标**: 完成 MCP Server 项目初始化 + API Key 认证系统
|
||
|
||
**具体任务**:
|
||
- [ ] Day 1-2: MCP Server 项目结构搭建
|
||
- [ ] Day 3-4: 数据库设计 + Migration
|
||
- [ ] Day 5-6: API Key 认证中间件实现
|
||
- [ ] Day 7: API Key 管理 API 实现
|
||
- [ ] Day 8-9: MCP Server 基础架构实现
|
||
- [ ] Day 10: 集成测试 + Phase 1 验收
|
||
|
||
**负责人**:
|
||
- 后端开发: Backend Team (2 人)
|
||
- 架构评审: Architect Agent
|
||
- 测试验证: QA Engineer
|
||
|
||
**验收标准**:
|
||
- [ ] API Key 认证中间件正确拦截未授权请求
|
||
- [ ] 速率限制功能正确工作(60 req/min)
|
||
- [ ] 集成测试通过率 ≥ 95%
|
||
|
||
---
|
||
|
||
### 9.3 M3 规划预告
|
||
|
||
**M3 目标** (2026-04-01 至 2026-06-30, 3个月):
|
||
- ChatGPT 集成 PoC
|
||
- AI → PRD → 任务 完整闭环
|
||
- 外部系统接入准备(GitHub, Slack)
|
||
|
||
**M3 准备工作** (M2 期间):
|
||
- Week 10: 研究 ChatGPT Plugin 开发
|
||
- Week 12: 研究 GitHub OAuth + Webhook
|
||
- Week 14: 设计 M3 架构方案
|
||
|
||
---
|
||
|
||
## 十、附录
|
||
|
||
### 10.1 术语表
|
||
|
||
| 术语 | 定义 |
|
||
|------|------|
|
||
| MCP | Model Context Protocol - AI 工具与应用系统的标准通信协议 |
|
||
| Resource | MCP 中的只读数据暴露接口(如 `projects.list`) |
|
||
| Tool | MCP 中的写操作接口(如 `create_issue`) |
|
||
| Prompt | MCP 中的 AI 提示词模板(如 `generate_prd`) |
|
||
| Diff Preview | AI 操作的 before/after 数据对比预览 |
|
||
| Pending Change | 等待人工审批的 AI 操作 |
|
||
| API Key | MCP 客户端的认证凭证 |
|
||
| Tenant | 租户(多租户系统中的独立组织) |
|
||
|
||
---
|
||
|
||
### 10.2 参考文档
|
||
|
||
| 文档 | 路径 |
|
||
|------|------|
|
||
| 项目计划书 | `c:\Users\yaoji\git\ColaCoder\product-master\product.md` |
|
||
| M1 剩余任务清单 | `c:\Users\yaoji\git\ColaCoder\product-master\M1_REMAINING_TASKS.md` |
|
||
| 后端进度报告 | `c:\Users\yaoji\git\ColaCoder\product-master\BACKEND_PROGRESS_REPORT.md` |
|
||
| Audit Log 技术方案 | (Day 14 完成, 15,000+ 字研究报告) |
|
||
| MCP 协议官方文档 | https://modelcontextprotocol.io/ |
|
||
| headless-pm 参考项目 | https://github.com/headless-pm (MCP Server 参考实现) |
|
||
|
||
---
|
||
|
||
### 10.3 联系人
|
||
|
||
| 角色 | 姓名 | 职责 |
|
||
|------|------|------|
|
||
| 产品经理 | Product Manager Agent | M2 规划、需求管理、验收 |
|
||
| 技术负责人 | Architect Agent | 架构设计、技术评审 |
|
||
| 后端负责人 | Backend Agent | MCP Server 开发、API 实现 |
|
||
| 前端负责人 | Frontend Agent | Diff Preview UI、API Key 管理页 |
|
||
| QA 负责人 | QA Agent | 测试计划、质量保证 |
|
||
| 主协调器 | Main Coordinator | 整体协调、进度跟踪 |
|
||
|
||
---
|
||
|
||
### 10.4 变更记录
|
||
|
||
| 日期 | 版本 | 变更说明 | 责任人 |
|
||
|------|------|---------|--------|
|
||
| 2025-11-04 | 1.0 | 初始版本 - M2 完整 PRD | Product Manager Agent |
|
||
|
||
---
|
||
|
||
**文档结束**
|
||
|
||
**下一步**: 请主协调器审核此 PRD,确认后开始 M2 Phase 1 实施。
|