# MCP Server 基础架构说明文档

**文档版本**: 1.0
**创建日期**: 2025-11-06
**目标阶段**: M2 (2025-12-01 至 2026-03-31)
**受众**: 产品经理、后端工程师、架构师

---

## 目录

1. [MCP Server 概述](#1-mcp-server-概述)
2. [整体架构设计](#2-整体架构设计)
3. [暴露的 Resources（资源）](#3-暴露的-resources资源)
4. [暴露的 Tools（工具）](#4-暴露的-tools工具)
5. [安全性设计](#5-安全性设计)
6. [技术实现方案](#6-技术实现方案)
7. [实现路线图](#7-实现路线图)

---

## 1. MCP Server 概述

### 1.1 MCP 协议简介

**MCP (Model Context Protocol)** 是由 Anthropic 提出的一种标准化协议，用于连接 AI 模型与外部数据源和工具。MCP 协议定义了三种核心能力：

- **Resources（资源）**: 只读数据暴露，让 AI 读取应用数据
- **Tools（工具）**: 可执行操作，让 AI 调用功能接口
- **Prompts（提示词）**: 预设的提示词模板，提升 AI 交互质量

**MCP 的核心价值**:
- 标准化：统一的协议规范，任何 AI 工具都能接入
- 安全性：细粒度的权限控制和审批机制
- 可扩展：模块化设计，易于添加新功能
- 开放生态：促进 AI 工具和应用之间的互操作性

### 1.2 ColaFlow MCP Server 的定位

ColaFlow MCP Server 是连接 AI 工具和 ColaFlow 项目管理系统的桥梁，它的核心定位是：

**让 AI 成为真正的团队成员**

- AI 能够读取项目数据（Projects, Epics, Stories, Tasks, Sprints）
- AI 能够执行项目操作（创建任务、更新状态、分配人员）
- AI 的所有写操作都需要人工审批（Diff Preview 机制）
- 所有 AI 操作都有完整的审计追踪

### 1.3 与 AI Agent 的交互方式

```
┌─────────────────────────────────────────────────────────────┐
│                      AI Agent Workflow                       │
└─────────────────────────────────────────────────────────────┘

User Request → AI Agent (Claude/ChatGPT)
                    ↓
      1. Query Resources (只读操作)
         colaflow://projects.list
         colaflow://issues.search?status=InProgress
                    ↓
      2. Generate Response with Tool Calls
         "I found 5 open tasks. Would you like me to
          create a new Epic for the login feature?"
                    ↓
      3. User Confirms → AI Calls Tool
         create_epic(title="User Login Feature")
                    ↓
      4. MCP Server Generates Diff Preview
         {
           "operation": "CREATE",
           "entityType": "Epic",
           "afterData": { "title": "User Login Feature", ... }
         }
                    ↓
      5. Human Approval in ColaFlow Dashboard
         ✅ Approve → Execute operation
         ❌ Reject → Log rejection
                    ↓
      6. Return Result to AI
         "Epic created successfully. ID: epic-123"
                    ↓
      AI → User: "Done! The Epic has been created."
```

**关键流程说明**:
1. **读操作（Resources）**: 直接返回数据，无需审批
2. **写操作（Tools）**: 先生成 Diff Preview，等待人工审批
3. **审批后执行**: 审批通过后自动执行实际操作
4. **实时通知**: 通过 SignalR WebSocket 实时通知用户

### 1.4 业务价值

**对产品经理**:
- 减少 50% 手动创建任务的时间
- AI 自动生成 PRD 和验收标准
- 自动化的进度报告和风险检测

**对开发团队**:
- 自然语言即可操作项目系统
- 减少在 Jira 系统中的手动操作
- AI 辅助任务估算和 Sprint 规划

**对企业客户**:
- 完整的审批和审计机制（合规要求）
- 支持私有化部署（数据安全）
- 开放的 MCP 协议（避免供应商锁定）

---

## 2. 整体架构设计

### 2.1 架构分层

ColaFlow MCP Server 采用 **Clean Architecture + CQRS + DDD** 设计模式，与现有后端系统无缝集成。

```
┌───────────────────────────────────────────────────────────────┐
│                      Presentation Layer                        │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  MCP Protocol Handler (JSON-RPC 2.0 over stdio/SSE)     │  │
│  │  - McpResourceController                                 │  │
│  │  - McpToolController                                     │  │
│  │  - McpPromptController                                   │  │
│  └─────────────────────────────────────────────────────────┘  │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  REST API for MCP Management                             │  │
│  │  - /api/mcp/keys (API Key 管理)                          │  │
│  │  - /api/mcp/pending-changes (Diff Preview 审批)          │  │
│  │  - /api/mcp/audit-logs (审计日志查询)                     │  │
│  └─────────────────────────────────────────────────────────┘  │
└───────────────────────────────────────────────────────────────┘
                              ↓
┌───────────────────────────────────────────────────────────────┐
│                      Application Layer                         │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  MCP Services                                            │  │
│  │  - McpResourceService (读取项目数据)                      │  │
│  │  - McpToolService (执行工具操作)                          │  │
│  │  - McpPromptService (生成提示词)                          │  │
│  │  - DiffPreviewService (生成变更预览)                      │  │
│  │  - PendingChangeService (管理待审批变更)                  │  │
│  └─────────────────────────────────────────────────────────┘  │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  CQRS Command/Query Handlers                             │  │
│  │  - CreateApiKeyCommandHandler                            │  │
│  │  - ApprovePendingChangeCommandHandler                    │  │
│  │  - GetPendingChangesQueryHandler                         │  │
│  └─────────────────────────────────────────────────────────┘  │
└───────────────────────────────────────────────────────────────┘
                              ↓
┌───────────────────────────────────────────────────────────────┐
│                       Domain Layer                             │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  MCP Aggregates                                          │  │
│  │  - McpApiKey (API 密钥聚合根)                            │  │
│  │  - PendingChange (待审批变更聚合根)                       │  │
│  │  - DiffPreview (变更预览值对象)                          │  │
│  └─────────────────────────────────────────────────────────┘  │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  Domain Events                                           │  │
│  │  - ApiKeyCreatedEvent                                    │  │
│  │  - PendingChangeCreatedEvent                             │  │
│  │  - PendingChangeApprovedEvent                            │  │
│  │  - PendingChangeRejectedEvent                            │  │
│  └─────────────────────────────────────────────────────────┘  │
└───────────────────────────────────────────────────────────────┘
                              ↓
┌───────────────────────────────────────────────────────────────┐
│                    Infrastructure Layer                        │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  Data Access                                             │  │
│  │  - McpApiKeyRepository (EF Core)                         │  │
│  │  - PendingChangeRepository (EF Core)                     │  │
│  │  - Redis Cache (热数据缓存)                              │  │
│  └─────────────────────────────────────────────────────────┘  │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │  External Services                                       │  │
│  │  - SignalR Hub (实时通知)                                │  │
│  │  - AuditLogService (审计日志)                            │  │
│  │  - ProjectService (现有项目模块)                          │  │
│  │  - IssueService (现有任务模块)                            │  │
│  └─────────────────────────────────────────────────────────┘  │
└───────────────────────────────────────────────────────────────┘
```

**架构分层职责**:

1. **Presentation Layer（展示层）**
   - 处理 MCP 协议通信（JSON-RPC 2.0）
   - 处理 REST API 请求
   - 认证和授权验证
   - 输入验证和错误处理

2. **Application Layer（应用层）**
   - 业务流程编排
   - CQRS 命令和查询处理
   - 领域事件分发
   - 跨聚合根协调

3. **Domain Layer（领域层）**
   - 核心业务逻辑
   - 聚合根和值对象
   - 领域事件定义
   - 业务规则验证

4. **Infrastructure Layer（基础设施层）**
   - 数据持久化（PostgreSQL + EF Core）
   - 缓存（Redis）
   - 外部服务集成
   - 技术实现细节

### 2.2 核心组件及职责

#### 2.2.1 MCP Protocol Handler

**职责**: 处理 MCP 协议的请求和响应

**核心功能**:
- 解析 MCP 协议消息（JSON-RPC 2.0 格式）
- 路由请求到对应的 Resource/Tool/Prompt 处理器
- 格式化响应数据符合 MCP 规范
- 错误处理和异常转换

**关键接口**:
```csharp
public interface IMcpProtocolHandler
{
    Task<McpResponse> HandleRequestAsync(
        McpRequest request,
        CancellationToken cancellationToken);
}
```

#### 2.2.2 McpResourceService

**职责**: 暴露只读数据资源

**核心功能**:
- 注册和管理所有 MCP Resources
- 查询项目数据（Projects, Issues, Sprints, Users）
- 应用租户隔离和权限过滤
- 数据格式转换和优化

**Resource 注册机制**:
```csharp
public interface IMcpResource
{
    string Uri { get; }
    string Name { get; }
    string Description { get; }
    string MimeType { get; }

    Task<McpResourceContent> GetContentAsync(
        McpResourceRequest request,
        CancellationToken cancellationToken);
}
```

#### 2.2.3 McpToolService

**职责**: 执行写操作工具

**核心功能**:
- 注册和管理所有 MCP Tools
- 执行工具操作（CREATE/UPDATE/DELETE）
- 生成 Diff Preview
- 与 PendingChangeService 协同处理审批流程

**Tool 执行流程**:
```csharp
public interface IMcpTool
{
    string Name { get; }
    string Description { get; }
    McpToolInputSchema InputSchema { get; }

    Task<McpToolResult> ExecuteAsync(
        McpToolCall toolCall,
        CancellationToken cancellationToken);
}
```

#### 2.2.4 DiffPreviewService

**职责**: 生成变更预览

**核心功能**:
- 生成 before/after 数据快照
- 计算数据差异（JSON diff）
- 格式化 diff 输出（人类可读）
- 验证变更的安全性

**Diff 数据结构**:
```csharp
public class DiffPreview
{
    public string ToolName { get; set; }
    public string Operation { get; set; } // CREATE, UPDATE, DELETE
    public string EntityType { get; set; }
    public Guid? EntityId { get; set; }
    public object? BeforeData { get; set; }
    public object? AfterData { get; set; }
    public DiffField[] ChangedFields { get; set; }
    public bool RequiresApproval { get; set; }
    public DateTime CreatedAt { get; set; }
}

public class DiffField
{
    public string FieldName { get; set; }
    public object? OldValue { get; set; }
    public object? NewValue { get; set; }
}
```

#### 2.2.5 PendingChangeService

**职责**: 管理待审批的变更

**核心功能**:
- 创建待审批变更记录
- 存储 Diff Preview 数据
- 处理审批/拒绝操作
- 24小时自动过期机制
- 发送实时通知

**状态流转**:
```
PendingApproval → Approved → Executed
                ↘ Rejected
                ↘ Expired (24h)
                ↘ Cancelled
```

#### 2.2.6 McpApiKeyService

**职责**: 管理 MCP API 密钥

**核心功能**:
- 生成 API Key（SHA-256 哈希存储）
- 验证 API Key
- 权限范围控制（只读/读写）
- IP 白名单验证
- 使用统计和速率限制

### 2.3 与现有后端 API 的集成方式

MCP Server 不是独立的服务，而是 ColaFlow 后端系统的一个模块。集成方式：

**方式 1: 直接调用现有服务**
```csharp
// MCP Tool 内部调用现有的 CQRS Command
public class CreateIssueTool : IMcpTool
{
    private readonly IMediator _mediator;

    public async Task<McpToolResult> ExecuteAsync(...)
    {
        // 调用现有的 CreateIssueCommand
        var result = await _mediator.Send(new CreateIssueCommand
        {
            ProjectId = input.ProjectId,
            Title = input.Title,
            Type = input.Type
        });

        return new McpToolResult { ... };
    }
}
```

**方式 2: 共享数据仓储**
```csharp
// MCP Resource 直接查询现有数据
public class ProjectsListResource : IMcpResource
{
    private readonly IProjectRepository _projectRepo;

    public async Task<McpResourceContent> GetContentAsync(...)
    {
        // 复用现有的 Repository
        var projects = await _projectRepo.GetAllAsync(tenantId);

        return new McpResourceContent { ... };
    }
}
```

**方式 3: 领域事件订阅**
```csharp
// 监听现有的领域事件
public class IssueCreatedEventHandler : INotificationHandler<IssueCreatedEvent>
{
    public async Task Handle(IssueCreatedEvent e, ...)
    {
        // 如果是 MCP 操作触发的，发送通知
        if (e.TriggeredByMcp)
        {
            await _realtimeService.NotifyUserAsync(...);
        }
    }
}
```

### 2.4 数据流向

#### 2.4.1 读操作数据流（Resource）

```
AI Agent → MCP Protocol Handler → McpResourceService
                                        ↓
                                  [权限验证]
                                        ↓
                            ProjectRepository / IssueRepository
                                        ↓
                                 [租户过滤]
                                        ↓
                                 PostgreSQL Query
                                        ↓
                                [Redis Cache (可选)]
                                        ↓
                            格式化为 MCP Resource Content
                                        ↓
                              返回给 AI Agent
```

**性能优化**:
- Redis 缓存热数据（TTL 5分钟）
- 分页查询（默认 limit=50）
- 只返回必要字段（精简 JSON）

#### 2.4.2 写操作数据流（Tool）

```
AI Agent → MCP Protocol Handler → McpToolService
                                        ↓
                                  [API Key 验证]
                                        ↓
                            DiffPreviewService 生成预览
                                        ↓
                         PendingChangeService 创建待审批记录
                                        ↓
                              存储到 PostgreSQL
                                        ↓
                          SignalR 通知用户（实时推送）
                                        ↓
                          返回 Diff Preview 给 AI Agent

                                        ↓
                        [用户在 Dashboard 审批]
                                        ↓
                          ✅ Approve → 执行实际操作
                          ❌ Reject → 记录日志
                                        ↓
                          通知 AI Agent 最终结果
```

---

## 3. 暴露的 Resources（资源）

### 3.1 Resource 概述

Resources 是只读的数据接口，让 AI 能够查询 ColaFlow 的项目数据。所有 Resources 都遵循租户隔离原则。

### 3.2 Resource URI 设计规范

**URI 格式**: `colaflow://[entity].[action]?[params]`

**命名规则**:
- 使用小写字母和点号分隔
- 动作使用标准 CRUD 动词（list, get, search）
- 支持 query 参数传递过滤条件

**示例**:
```
colaflow://projects.list
colaflow://projects.get/abc123
colaflow://issues.search?status=InProgress&assignee=user123
colaflow://sprints.current
```

### 3.3 核心 Resources 列表

#### 3.3.1 Projects Resources

**1. colaflow://projects.list**

获取当前租户的所有项目列表

**返回数据结构**:
```json
{
  "projects": [
    {
      "id": "uuid",
      "name": "ColaFlow Development",
      "key": "COLA",
      "description": "Main development project",
      "status": "Active",
      "owner": {
        "id": "uuid",
        "name": "John Doe"
      },
      "issueCount": 145,
      "memberCount": 8,
      "createdAt": "2024-01-01T00:00:00Z"
    }
  ]
}
```

**2. colaflow://projects.get/{id}**

获取单个项目的详细信息

**返回数据结构**:
```json
{
  "project": {
    "id": "uuid",
    "name": "ColaFlow Development",
    "key": "COLA",
    "description": "...",
    "status": "Active",
    "owner": { "id": "uuid", "name": "John Doe" },
    "statistics": {
      "totalIssues": 145,
      "openIssues": 32,
      "inProgressIssues": 15,
      "completedIssues": 98
    },
    "recentActivity": [
      {
        "type": "IssueCreated",
        "user": "Jane Smith",
        "timestamp": "2024-11-05T10:30:00Z",
        "description": "Created task COLA-146"
      }
    ]
  }
}
```

#### 3.3.2 Issues Resources

**3. colaflow://issues.search**

搜索任务（支持高级过滤）

**支持的查询参数**:
- `projectId`: 项目 ID
- `type`: Epic / Story / Task / Bug
- `status`: Backlog / Todo / InProgress / Review / Done
- `priority`: Low / Medium / High / Critical
- `assignee`: 用户 ID
- `sprint`: Sprint ID
- `q`: 关键词搜索（标题和描述）
- `limit`: 返回数量（默认 50）
- `offset`: 分页偏移量

**返回数据结构**:
```json
{
  "issues": [
    {
      "id": "uuid",
      "key": "COLA-146",
      "title": "Implement MCP Server",
      "type": "Epic",
      "status": "InProgress",
      "priority": "High",
      "assignee": {
        "id": "uuid",
        "name": "John Doe"
      },
      "project": {
        "id": "uuid",
        "name": "ColaFlow Development"
      },
      "sprint": {
        "id": "uuid",
        "name": "Sprint 5"
      },
      "estimatedHours": 80,
      "actualHours": 35,
      "createdAt": "2024-11-01T00:00:00Z",
      "updatedAt": "2024-11-05T14:30:00Z"
    }
  ],
  "total": 145,
  "limit": 50,
  "offset": 0
}
```

**4. colaflow://issues.get/{id}**

获取单个任务的详细信息（包括评论、附件、历史）

**返回数据结构**:
```json
{
  "issue": {
    "id": "uuid",
    "key": "COLA-146",
    "title": "Implement MCP Server",
    "description": "Complete implementation of MCP protocol...",
    "type": "Epic",
    "status": "InProgress",
    "priority": "High",
    "assignee": { ... },
    "reporter": { ... },
    "project": { ... },
    "sprint": { ... },
    "parent": {
      "id": "uuid",
      "key": "COLA-100",
      "title": "M2 Phase"
    },
    "children": [
      {
        "id": "uuid",
        "key": "COLA-147",
        "title": "Implement Resources"
      }
    ],
    "acceptanceCriteria": [
      "All 11 resources implemented",
      "Performance < 200ms"
    ],
    "comments": [
      {
        "id": "uuid",
        "author": "Jane Smith",
        "text": "Started implementation today",
        "createdAt": "2024-11-05T09:00:00Z"
      }
    ],
    "activityHistory": [ ... ]
  }
}
```

**5. colaflow://epics.list**

列出所有 Epic

**6. colaflow://stories.list**

列出所有 Story

**7. colaflow://tasks.list**

列出所有 Task

**注**: 这三个 Resources 本质上是 `issues.search` 的快捷方式，预设了 type 过滤条件。

#### 3.3.3 Sprints Resources

**8. colaflow://sprints.current**

获取当前活跃的 Sprint

**返回数据结构**:
```json
{
  "sprint": {
    "id": "uuid",
    "name": "Sprint 5",
    "goal": "Complete MCP Server implementation",
    "status": "Active",
    "startDate": "2024-11-01T00:00:00Z",
    "endDate": "2024-11-14T23:59:59Z",
    "progress": {
      "totalIssues": 12,
      "completedIssues": 5,
      "remainingIssues": 7,
      "totalStoryPoints": 34,
      "completedStoryPoints": 13
    },
    "burndown": [
      { "date": "2024-11-01", "remaining": 34 },
      { "date": "2024-11-02", "remaining": 32 },
      { "date": "2024-11-05", "remaining": 21 }
    ]
  }
}
```

**9. colaflow://sprints.backlog**

获取 Backlog 中的任务

#### 3.3.4 Users Resources

**10. colaflow://users.list**

列出当前租户的所有团队成员

**返回数据结构**:
```json
{
  "users": [
    {
      "id": "uuid",
      "email": "john@example.com",
      "fullName": "John Doe",
      "role": "Admin",
      "status": "Active",
      "avatar": "https://...",
      "statistics": {
        "assignedIssues": 8,
        "completedIssues": 42
      }
    }
  ]
}
```

#### 3.3.5 Reports Resources

**11. colaflow://reports.burndown/{sprintId}**

获取指定 Sprint 的燃尽图数据

### 3.4 资源的组织结构

Resources 按照业务领域组织：

```
colaflow://
├── projects.*        # 项目相关
│   ├── list
│   └── get/{id}
├── issues.*          # 任务相关
│   ├── search
│   ├── get/{id}
│   ├── (epics.list)
│   ├── (stories.list)
│   └── (tasks.list)
├── sprints.*         # Sprint 相关
│   ├── current
│   └── backlog
├── users.*           # 用户相关
│   └── list
└── reports.*         # 报告相关
    └── burndown/{id}
```

### 3.5 权限控制机制

**租户隔离**:
- 所有 Resources 自动应用 TenantId 过滤
- 通过 EF Core Global Query Filter 实现
- 用户只能访问自己租户的数据

**角色权限**:
- Owner/Admin: 所有 Resources 可访问
- Member: 只能访问自己参与的项目
- Viewer: 只读访问，不能修改
- Guest: 受限的只读访问

**API Key 权限**:
- 创建 API Key 时指定 Resource 白名单
- 例如：只允许读取 `projects.*` 和 `issues.search`
- 超出权限范围返回 403 Forbidden

**敏感数据过滤**:
- 不返回密码哈希、API Key 等敏感字段
- 不返回其他租户的数据
- 审计日志中的敏感操作需要额外权限

---

## 4. 暴露的 Tools（工具）

### 4.1 Tool 概述

Tools 是可执行的操作接口，让 AI 能够修改 ColaFlow 的数据。所有写操作都需要通过 Diff Preview 和人工审批。

### 4.2 Tool 分类

#### 4.2.1 读取类工具

虽然 Resources 已经提供了读取能力，但某些复杂查询需要专用工具：

**1. search_issues (高级搜索)**

支持复杂的 JQL（Jira Query Language）风格查询

**输入参数**:
```json
{
  "query": "project = COLA AND status = InProgress AND assignee = currentUser()",
  "orderBy": "priority DESC, createdAt ASC",
  "limit": 50
}
```

#### 4.2.2 写入类工具（需审批）

**2. create_project**

创建新项目

**输入参数**:
```json
{
  "name": "New Product Feature",
  "key": "NPF",
  "description": "A new product feature for Q1 2025",
  "ownerId": "uuid"
}
```

**Diff Preview 示例**:
```json
{
  "operation": "CREATE",
  "entityType": "Project",
  "afterData": {
    "name": "New Product Feature",
    "key": "NPF",
    "status": "Active",
    "owner": "John Doe",
    "createdAt": "2024-11-06T10:00:00Z"
  },
  "requiresApproval": true
}
```

**3. create_issue**

创建新任务

**输入参数**:
```json
{
  "projectId": "uuid",
  "title": "Implement user login",
  "description": "Add JWT-based authentication",
  "type": "Story",
  "priority": "High",
  "assigneeId": "uuid",
  "estimatedHours": 16,
  "acceptanceCriteria": [
    "User can login with email/password",
    "JWT token is returned"
  ]
}
```

**4. update_issue**

更新任务详情

**输入参数**:
```json
{
  "issueId": "uuid",
  "title": "Implement user login (updated)",
  "description": "Add JWT + OAuth authentication",
  "priority": "Critical",
  "estimatedHours": 24
}
```

**Diff Preview 示例**:
```json
{
  "operation": "UPDATE",
  "entityType": "Issue",
  "entityId": "uuid",
  "changedFields": [
    {
      "fieldName": "description",
      "oldValue": "Add JWT-based authentication",
      "newValue": "Add JWT + OAuth authentication"
    },
    {
      "fieldName": "priority",
      "oldValue": "High",
      "newValue": "Critical"
    },
    {
      "fieldName": "estimatedHours",
      "oldValue": 16,
      "newValue": 24
    }
  ],
  "requiresApproval": true
}
```

**5. update_status**

更改任务状态

**输入参数**:
```json
{
  "issueId": "uuid",
  "status": "InProgress",
  "comment": "Started working on this task"
}
```

**审批策略**:
- 可配置：某些状态流转可以无需审批（如 Todo → InProgress）
- 关键状态变更需要审批（如 InProgress → Done）

**6. assign_issue**

分配任务给用户

**输入参数**:
```json
{
  "issueId": "uuid",
  "assigneeId": "uuid"
}
```

**7. create_sprint**

创建新 Sprint

**输入参数**:
```json
{
  "projectId": "uuid",
  "name": "Sprint 6",
  "goal": "Complete authentication module",
  "startDate": "2024-11-15",
  "endDate": "2024-11-28",
  "capacity": 80
}
```

**8. start_sprint**

启动 Sprint

**输入参数**:
```json
{
  "sprintId": "uuid",
  "issueIds": ["uuid1", "uuid2", "uuid3"]
}
```

**9. add_comment**

添加评论

**输入参数**:
```json
{
  "issueId": "uuid",
  "text": "This task is blocked by COLA-123"
}
```

**审批策略**:
- 评论通常不需要审批（可配置）
- 如果包含敏感信息可以启用审批

**10. create_epic**

创建 Epic

**输入参数**:
```json
{
  "projectId": "uuid",
  "title": "User Authentication System",
  "description": "Complete authentication module with JWT and OAuth",
  "priority": "High"
}
```

**11. link_issues**

关联任务（父子关系）

**输入参数**:
```json
{
  "parentId": "uuid",
  "childId": "uuid",
  "linkType": "Parent-Child"
}
```

#### 4.2.3 分析类工具

**12. analyze_burndown**

分析燃尽图趋势

**输入参数**:
```json
{
  "sprintId": "uuid"
}
```

**输出**:
```json
{
  "sprint": "Sprint 5",
  "status": "OnTrack",
  "summary": "The team is on track to complete 34 story points by 2024-11-14.",
  "insights": [
    "Daily completion rate: 2.5 points/day",
    "Predicted completion: 2024-11-13 (1 day early)",
    "Risk: 2 high-priority tasks still in Todo"
  ]
}
```

### 4.3 Diff Preview 机制的设计思路

**核心理念**: **"预览 → 审批 → 执行"** 三步走

**为什么需要 Diff Preview**:
1. **安全性**: 防止 AI 误操作（如删除重要数据）
2. **透明性**: 用户清楚知道 AI 将要做什么
3. **合规性**: 满足企业审计要求
4. **可回滚**: 审批拒绝后不会执行操作

**Diff Preview 的生成流程**:

```
Tool 调用 → 收集当前数据 (Before)
              ↓
          模拟执行操作
              ↓
          生成变更后数据 (After)
              ↓
          计算字段差异 (Changed Fields)
              ↓
          格式化为人类可读的 Diff
              ↓
          存储为 PendingChange 记录
              ↓
          返回 Diff Preview 给 AI
```

**Diff 格式设计**:

```json
{
  "pendingChangeId": "uuid",
  "toolName": "update_issue",
  "operation": "UPDATE",
  "entityType": "Issue",
  "entityId": "uuid",
  "entityKey": "COLA-146",
  "summary": "Update issue title, description, and priority",
  "beforeData": {
    "title": "Implement MCP Server",
    "description": "Complete implementation...",
    "priority": "High"
  },
  "afterData": {
    "title": "Implement MCP Server (updated)",
    "description": "Complete implementation with Diff Preview...",
    "priority": "Critical"
  },
  "changedFields": [
    {
      "fieldName": "title",
      "displayName": "Title",
      "oldValue": "Implement MCP Server",
      "newValue": "Implement MCP Server (updated)",
      "diffHtml": "<del>Implement MCP Server</del> <ins>Implement MCP Server (updated)</ins>"
    },
    {
      "fieldName": "priority",
      "displayName": "Priority",
      "oldValue": "High",
      "newValue": "Critical",
      "diffHtml": "<span class='old'>High</span> → <span class='new'>Critical</span>"
    }
  ],
  "requiresApproval": true,
  "createdAt": "2024-11-06T10:30:00Z",
  "expiresAt": "2024-11-07T10:30:00Z",
  "createdBy": {
    "id": "uuid",
    "name": "AI Assistant (via John Doe)"
  }
}
```

**审批界面展示**:

前端 Dashboard 会显示：
- **操作摘要**: "Update issue COLA-146: title, description, priority"
- **变更对比**: 左侧显示旧值，右侧显示新值，高亮差异
- **影响范围**: 影响的实体数量、关联任务等
- **审批按钮**: ✅ Approve / ❌ Reject / ⏸️ Later

**自动过期机制**:

- PendingChange 创建后 24 小时未审批自动过期
- 后台定时任务（每小时执行一次）清理过期记录
- 过期后 AI 会收到通知："Change request expired"

---

## 5. 安全性设计

### 5.1 认证机制（JWT Token + API Key）

MCP Server 支持两种认证方式：

#### 5.1.1 JWT Token 认证

**适用场景**: Web 前端通过浏览器访问 MCP Server

**流程**:
```
User → Login API → JWT Token
                      ↓
User → MCP Request (携带 JWT)
                      ↓
       MCP Server 验证 JWT → 提取 TenantId、UserId
                      ↓
                执行操作（应用租户隔离）
```

**JWT Claims**:
```json
{
  "sub": "user-uuid",
  "tenant_id": "tenant-uuid",
  "tenant_slug": "acme",
  "email": "john@example.com",
  "role": "Admin",
  "exp": 1699200000
}
```

#### 5.1.2 API Key 认证

**适用场景**: AI 工具（Claude Desktop, ChatGPT）通过 MCP 协议访问

**API Key 格式**:
```
colaflow_sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
```

**生成和存储**:
1. 用户在 Dashboard 创建 API Key
2. 系统生成 40 字符随机字符串
3. 使用 BCrypt 哈希后存储到数据库
4. 前16字符作为 prefix 明文存储（用于识别）
5. 完整 Key 只展示一次（创建时）

**验证流程**:
```
AI Tool → MCP Request (Header: Authorization: Bearer API_KEY)
                      ↓
       MCP Server 提取 API Key
                      ↓
       查询数据库（根据 key_prefix）
                      ↓
       BCrypt 验证哈希
                      ↓
       验证 IP 白名单（可选）
                      ↓
       验证权限范围（Resources/Tools 白名单）
                      ↓
       提取关联的 TenantId、UserId
                      ↓
       执行操作
```

**数据库表结构**:
```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,
    key_prefix VARCHAR(16) NOT NULL,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    permissions JSONB NOT NULL,
    ip_whitelist JSONB,
    status INT NOT NULL DEFAULT 1,
    last_used_at TIMESTAMP NULL,
    usage_count BIGINT NOT NULL DEFAULT 0,
    created_at TIMESTAMP NOT NULL DEFAULT NOW(),
    expires_at TIMESTAMP NOT NULL,
    revoked_at TIMESTAMP NULL,

    INDEX idx_key_prefix (key_prefix),
    INDEX idx_tenant_user (tenant_id, user_id),
    INDEX idx_expires_at (expires_at)
);
```

### 5.2 授权和权限控制

#### 5.2.1 租户隔离

**实现方式**: EF Core Global Query Filter

所有查询自动添加 `WHERE tenant_id = current_tenant_id`

```csharp
modelBuilder.Entity<Issue>().HasQueryFilter(i =>
    i.TenantId == _tenantContext.CurrentTenantId);
```

**防止跨租户访问**:
- 即使用户知道其他租户的资源 ID，也无法访问
- 需要显式使用 `IgnoreQueryFilters()` 才能跨租户查询（仅限系统管理员）

#### 5.2.2 角色权限（RBAC）

基于现有的 RBAC 系统：

| 角色 | Resources 权限 | Tools 权限 | 特殊权限 |
|------|---------------|-----------|---------|
| **Owner** | 所有 Resources | 所有 Tools | 创建 API Key |
| **Admin** | 所有 Resources | 所有 Tools | 审批 Pending Changes |
| **Member** | 参与的项目 | 有限 Tools | 只能修改自己的任务 |
| **Viewer** | 参与的项目 | 无 | 只读 |
| **Guest** | 受限 Resources | 无 | 临时访问 |

#### 5.2.3 API Key 权限范围

创建 API Key 时，用户可以指定：

**1. 资源白名单**:
```json
{
  "allowedResources": [
    "colaflow://projects.list",
    "colaflow://issues.search",
    "colaflow://issues.get/*"
  ]
}
```

**2. 工具白名单**:
```json
{
  "allowedTools": [
    "create_issue",
    "update_status",
    "add_comment"
  ]
}
```

**3. 只读模式**:
```json
{
  "readOnly": true
}
```

**4. IP 白名单**:
```json
{
  "ipWhitelist": [
    "192.168.1.0/24",
    "10.0.0.1"
  ]
}
```

### 5.3 AI 的读写权限分级

#### Level 0: 只读 (Read-Only)

- 允许: 所有 Resources
- 禁止: 所有 Tools
- 适用场景: AI 只用于查询和分析

#### Level 1: 有限写入 (Limited Write)

- 允许: 所有 Resources + 部分 Tools
- 需审批: 所有写操作
- 允许的 Tools: `create_issue`, `update_status`, `add_comment`
- 适用场景: 日常项目管理辅助

#### Level 2: 完全写入 (Full Write)

- 允许: 所有 Resources + 所有 Tools
- 需审批: 所有写操作（除非配置为自动审批）
- 适用场景: 高级自动化

#### Level 3: 自动化 (Automation)

- 允许: 所有 Resources + 所有 Tools
- 部分操作自动审批（如状态更新、评论）
- 关键操作仍需审批（如删除、权限变更）
- 适用场景: 完全信任的自动化流程

**配置示例**:
```json
{
  "apiKeyName": "Claude Assistant",
  "permissionLevel": "Limited Write",
  "readOnly": false,
  "autoApproveTools": ["add_comment", "update_status"],
  "requireApprovalTools": ["create_issue", "update_issue", "delete_issue"]
}
```

### 5.4 敏感数据保护

#### 5.4.1 字段级过滤

某些字段不应该暴露给 AI：

**敏感字段列表**:
- `password_hash`
- `api_key_hash`
- `jwt_refresh_token`
- `email_verification_token`
- `password_reset_token`
- `sso_config.client_secret`

**实现方式**:

使用 DTO（Data Transfer Object）模式，只返回安全字段：

```csharp
public class UserDto
{
    public Guid Id { get; set; }
    public string Email { get; set; }
    public string FullName { get; set; }
    public string Role { get; set; }
    // 不包含 PasswordHash, ApiKeys 等敏感字段
}
```

#### 5.4.2 数据脱敏

对于某些敏感信息，返回脱敏后的数据：

- Email: `john****@example.com`
- Phone: `138****5678`
- IP: `192.168.***.***`

### 5.5 审计日志

所有 MCP 操作都记录到审计日志：

**日志内容**:
```json
{
  "tenantId": "uuid",
  "userId": "uuid",
  "action": "McpToolExecuted",
  "entityType": "Issue",
  "entityId": "uuid",
  "toolName": "update_issue",
  "beforeData": { ... },
  "afterData": { ... },
  "ipAddress": "192.168.1.100",
  "userAgent": "Claude Desktop MCP Client",
  "apiKeyId": "uuid",
  "pendingChangeId": "uuid",
  "approvedBy": "uuid",
  "timestamp": "2024-11-06T10:30:00Z"
}
```

**审计查询**:
- 按用户查询（谁做了什么）
- 按实体查询（某个任务的所有变更历史）
- 按时间范围查询
- 按操作类型查询（CREATE/UPDATE/DELETE）

**审计日志保留策略**:
- 热数据（30天）: PostgreSQL
- 温数据（90天）: PostgreSQL 表分区
- 冷数据（1年）: 归档到 S3/Azure Blob
- 合规数据（7年）: 冷存储 + 加密

---

## 6. 技术实现方案

### 6.1 MCP Server 技术栈选型

**选型决策**: 自定义 .NET 9 实现（不使用官方 Node.js SDK）

**理由**:
1. **原生集成**: 与现有 ASP.NET Core 后端无缝集成
2. **性能优势**: .NET 9 性能优于 Node.js（特别是并发场景）
3. **类型安全**: C# 强类型系统减少运行时错误
4. **无额外依赖**: 不需要部署 Node.js 环境
5. **团队技能**: 团队已熟悉 .NET 生态

**实现方式**: 手动实现 MCP 协议规范（JSON-RPC 2.0）

### 6.2 与后端 ASP.NET Core API 的通信方式

**方式 1: 直接调用现有服务（推荐）**

MCP Server 作为后端系统的一个模块，直接调用现有的 Application Layer 服务：

```csharp
// MCP Tool 内部调用 CQRS Command
public class CreateIssueTool : IMcpTool
{
    private readonly IMediator _mediator;

    public async Task<McpToolResult> ExecuteAsync(...)
    {
        var result = await _mediator.Send(new CreateIssueCommand
        {
            ProjectId = input.ProjectId,
            Title = input.Title,
            Type = input.Type
        });

        return new McpToolResult { ... };
    }
}
```

**优点**:
- 零网络延迟
- 共享事务上下文
- 复用现有业务逻辑
- 统一的异常处理

**方式 2: HTTP API 调用（备选）**

如果 MCP Server 部署为独立服务：

```csharp
public class CreateIssueTool : IMcpTool
{
    private readonly HttpClient _httpClient;

    public async Task<McpToolResult> ExecuteAsync(...)
    {
        var response = await _httpClient.PostAsJsonAsync(
            "/api/issues",
            new { projectId, title, type });

        response.EnsureSuccessStatusCode();
        var issue = await response.Content.ReadFromJsonAsync<Issue>();

        return new McpToolResult { ... };
    }
}
```

**优点**:
- 服务解耦
- 独立扩展
- 可单独部署

**决策**: M2 阶段采用**方式 1（直接调用）**，M4 阶段考虑服务拆分时采用方式 2。

### 6.3 性能优化考虑

#### 6.3.1 缓存策略

**Redis 缓存层**:

```
查询请求 → 检查 Redis 缓存
              ↓
          缓存命中 → 直接返回
              ↓
          缓存未命中 → 查询数据库
              ↓
          写入 Redis (TTL 5分钟)
              ↓
          返回结果
```

**缓存的数据**:
- Projects List（高频访问）
- Current Sprint（高频访问）
- User List（高频访问）
- Issue Details（中频访问，TTL 2分钟）

**缓存失效策略**:
- 数据更新时主动失效（通过领域事件）
- TTL 自动过期（5分钟）
- 手动刷新接口（管理员操作）

#### 6.3.2 查询优化

**数据库索引**:
```sql
-- Issues 表优化
CREATE INDEX idx_issues_tenant_project ON issues(tenant_id, project_id);
CREATE INDEX idx_issues_tenant_status ON issues(tenant_id, status);
CREATE INDEX idx_issues_tenant_assignee ON issues(tenant_id, assignee_id);
CREATE INDEX idx_issues_tenant_sprint ON issues(tenant_id, sprint_id);
CREATE INDEX idx_issues_full_text ON issues USING gin(to_tsvector('english', title || ' ' || description));

-- PendingChanges 表优化
CREATE INDEX idx_pending_changes_tenant_status ON mcp_pending_changes(tenant_id, status);
CREATE INDEX idx_pending_changes_expires ON mcp_pending_changes(expires_at) WHERE status = 'PendingApproval';
```

**分页查询**:
- 默认 limit=50
- 最大 limit=100
- 使用 offset-based 分页（简单场景）
- 使用 cursor-based 分页（大数据集）

**只查询必要字段**:
```csharp
var issues = await _context.Issues
    .Where(i => i.ProjectId == projectId)
    .Select(i => new IssueDto
    {
        Id = i.Id,
        Title = i.Title,
        Status = i.Status
        // 不加载 Description, Comments 等大字段
    })
    .ToListAsync();
```

#### 6.3.3 并发控制

**乐观并发控制**:

使用 EF Core 的 `RowVersion` / `Timestamp` 字段：

```csharp
public class Issue
{
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

// 更新时检查版本
var issue = await _context.Issues.FindAsync(id);
issue.Title = newTitle;

try
{
    await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
    throw new ConcurrencyException("Issue has been modified by another user");
}
```

**分布式锁**:

使用 Redis 分布式锁防止并发冲突：

```csharp
await using var lock = await _distributedLock.AcquireAsync($"issue:{issueId}", TimeSpan.FromSeconds(10));

if (lock == null)
{
    throw new ResourceLockedException("Issue is being modified by another operation");
}

// 执行更新操作
```

#### 6.3.4 异步处理

**后台任务**:

某些耗时操作通过后台队列异步处理：

- 审计日志写入（使用 Channel 队列）
- 邮件通知发送（使用 Hangfire）
- 数据统计计算（使用 BackgroundService）

**SignalR 实时推送**:

审批完成后通过 WebSocket 推送结果，无需 AI 轮询。

### 6.4 可扩展性设计

#### 6.4.1 插件化架构

MCP Resources/Tools/Prompts 采用插件化设计，便于扩展：

```csharp
public interface IMcpPlugin
{
    string Name { get; }
    string Version { get; }
    void Register(IMcpRegistry registry);
}

public class CustomPlugin : IMcpPlugin
{
    public string Name => "CustomIssueTools";
    public string Version => "1.0.0";

    public void Register(IMcpRegistry registry)
    {
        registry.RegisterResource(new CustomResource());
        registry.RegisterTool(new CustomTool());
        registry.RegisterPrompt(new CustomPrompt());
    }
}
```

**插件加载方式**:
- 自动扫描程序集（Reflection）
- 配置文件指定（appsettings.json）
- 动态加载 DLL（高级场景）

#### 6.4.2 多租户扩展

**水平扩展**:
- MCP Server 无状态设计，可部署多个实例
- 负载均衡（Nginx / Azure Load Balancer）
- Session affinity（WebSocket 需要）

**数据库扩展**:
- 读写分离（主从复制）
- 按租户分片（大租户独立数据库）
- PostgreSQL 表分区（按租户 ID）

#### 6.4.3 版本控制

MCP 协议支持版本号：

```json
{
  "jsonrpc": "2.0",
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "resources": {},
      "tools": {},
      "prompts": {}
    }
  }
}
```

**版本策略**:
- 向后兼容（old API Key 仍可使用）
- 废弃警告（Deprecated 字段）
- 强制升级（BREAKING CHANGE）

---

## 7. 实现路线图

### 7.1 MVP 阶段功能范围

**目标**: 验证技术可行性，实现核心功能

**功能范围**:
- ✅ 5 个核心 Resources（projects.list, issues.search, sprints.current, users.list, issues.get）
- ✅ 3 个核心 Tools（create_issue, update_status, add_comment）
- ✅ 2 个核心 Prompts（generate_prd, split_epic_to_stories）
- ✅ API Key 认证（创建、验证、撤销）
- ✅ Diff Preview 机制（生成、存储、审批）
- ✅ 基础审计日志

**不包含**:
- 高级查询工具
- 复杂权限配置
- IP 白名单
- 自动化审批规则

**预计时间**: 4 周

### 7.2 核心功能优先级

| 优先级 | 功能模块 | 工作量 | 依赖 |
|--------|---------|--------|------|
| **P0** | MCP Protocol Handler | 3天 | 无 |
| **P0** | API Key 管理（创建、验证） | 2天 | MCP Protocol Handler |
| **P0** | Resources 实现（5个） | 3天 | API Key |
| **P0** | Diff Preview Service | 2天 | Resources |
| **P0** | PendingChange 管理 | 2天 | Diff Preview |
| **P0** | Tools 实现（3个） | 3天 | PendingChange |
| **P0** | 审批流程（前端 UI） | 2天 | PendingChange |
| **P1** | Prompts 实现（2个） | 2天 | Tools |
| **P1** | 审计日志集成 | 1天 | 已有 Audit Log 系统 |
| **P1** | Claude Desktop 集成 PoC | 2天 | 所有核心功能 |

**总工时**: 22 天（约 4.5 周）

### 7.3 分阶段实现建议

#### Phase 1: Foundation（Week 1-2）

**目标**: 建立 MCP 基础设施

**交付物**:
- MCP Protocol Handler（JSON-RPC 2.0 解析和路由）
- API Key 聚合根和仓储
- API Key 认证中间件
- 基础的错误处理和日志记录

**验收标准**:
- [ ] MCP 协议 `initialize` 握手成功
- [ ] API Key 创建和验证通过
- [ ] 未授权请求返回 401
- [ ] 错误响应符合 MCP 规范

#### Phase 2: Resources（Week 3-4）

**目标**: 实现只读数据暴露

**交付物**:
- 5 个核心 Resources 实现
- Resource 注册和发现机制
- 租户隔离验证
- Redis 缓存集成

**验收标准**:
- [ ] 所有 5 个 Resources 返回正确数据
- [ ] 租户隔离 100% 生效
- [ ] 响应时间 < 200ms
- [ ] 缓存命中率 > 80%

#### Phase 3: Tools & Diff Preview（Week 5-6）

**目标**: 实现写操作和 Diff Preview

**交付物**:
- DiffPreviewService 实现
- PendingChange 聚合根和仓储
- 3 个核心 Tools 实现
- SignalR 实时通知集成

**验收标准**:
- [ ] Diff Preview 准确显示变更
- [ ] PendingChange 正确存储和查询
- [ ] SignalR 推送工作正常
- [ ] 24小时自动过期机制生效

#### Phase 4: Approval Workflow（Week 7-8）

**目标**: 实现审批流程

**交付物**:
- 审批 API 端点（approve/reject）
- 审批后自动执行逻辑
- 前端审批界面（Dashboard）
- 审计日志集成

**验收标准**:
- [ ] 审批通过后自动执行操作
- [ ] 审批拒绝后记录日志
- [ ] 前端界面清晰展示 Diff
- [ ] 审计日志完整记录

#### Phase 5: Prompts & Integration（Week 9-10）

**目标**: 实现提示词和 AI 集成

**交付物**:
- 2 个核心 Prompts 实现
- Claude Desktop 配置文件
- MCP 集成测试（端到端）
- 用户文档和使用指南

**验收标准**:
- [ ] Claude Desktop 成功连接
- [ ] AI 能够查询项目数据
- [ ] AI 能够创建任务（需审批）
- [ ] 完整的端到端流程测试通过

#### Phase 6: Testing & Hardening（Week 11-12）

**目标**: 质量保证和生产就绪

**交付物**:
- 单元测试覆盖率 > 80%
- 集成测试套件
- 性能测试和优化
- 安全审计和漏洞修复

**验收标准**:
- [ ] 所有测试通过
- [ ] 性能达标（API < 200ms）
- [ ] 无 CRITICAL 安全漏洞
- [ ] 文档完整且准确

#### Phase 7: Documentation & PoC（Week 13-16）

**目标**: 文档和概念验证

**交付物**:
- MCP API 完整文档
- AI 集成最佳实践指南
- 视频演示（Demo）
- 内部培训材料

**验收标准**:
- [ ] 外部开发者能根据文档集成
- [ ] 演示视频清晰展示价值
- [ ] 团队成员完成培训

---

## 8. 总结

### 8.1 核心设计原则

1. **安全优先**: 所有写操作需审批，完整审计追踪
2. **租户隔离**: 100% 数据隔离，无跨租户访问
3. **性能保证**: API < 200ms，缓存命中率 > 80%
4. **可扩展性**: 插件化设计，便于添加新 Resources/Tools
5. **向后兼容**: 版本控制，避免 Breaking Changes

### 8.2 技术亮点

- **自定义 MCP 实现**: 不依赖 Node.js，与 .NET 后端无缝集成
- **Diff Preview 机制**: 创新的"预览 → 审批 → 执行"流程
- **CQRS + DDD**: 清晰的架构分层，易于维护和测试
- **SignalR 实时通知**: 无需轮询，审批结果即时推送
- **多层缓存**: Redis + 应用层缓存，性能优化

### 8.3 风险与缓解

| 风险 | 影响 | 概率 | 缓解措施 |
|------|------|------|---------|
| MCP 协议规范变更 | 高 | 中 | 版本控制，快速适配新规范 |
| AI 误操作导致数据损坏 | 高 | 低 | Diff Preview + 审批 + 审计 |
| 性能瓶颈（高并发） | 中 | 中 | Redis 缓存 + 水平扩展 |
| 安全漏洞（API Key 泄露） | 高 | 低 | BCrypt 哈希 + IP 白名单 + 速率限制 |
| 审批流程过于繁琐 | 中 | 中 | 可配置自动审批规则 |

### 8.4 后续演进方向

**M3 阶段（ChatGPT 集成）**:
- 支持 ChatGPT Plugin 协议
- 实现对话式项目管理
- AI 生成完整 PRD → Epic → Stories 闭环

**M4 阶段（外部系统集成）**:
- GitHub Actions 触发 ColaFlow 更新
- Slack 消息自动创建任务
- 日历同步 Sprint 时间线

**M5 阶段（企业级功能）**:
- 多 AI Agent 协作（PM AI + Dev AI + QA AI）
- AI 决策审批工作流
- 自定义 AI Prompt 市场

---

**文档结束**

如有疑问或需要更详细的技术设计，请联系架构师团队。
