Memory Bank 使用教程

教程简介

Memory Bank MCP服务器是一个符合MCP(Model Context Protocol)协议的服务器,用于管理Markdown格式的项目文档和规则。本教程将指导您如何使用Memory Bank的核心功能,包括项目管理、文档编辑以及遵循标准工作流程进行项目开发。

Memory Bank采用一套结构化的工作流模式,从项目验证初始化(VAN)到最终归档整理(ARCHIVE),形成一个完整的项目生命周期管理体系。

环境设置

在开始使用Memory Bank之前,请确保您已经完成以下准备工作:

  1. 安装Node.js (推荐版本 16.x 或更高)
  2. 克隆Memory Bank MCP服务器仓库
  3. 运行 npm install 安装依赖
  4. 运行 npm start 启动服务器
提示: 服务器成功启动后,您可以通过浏览器访问 http://localhost:3000 来使用Web界面。

VAN 模式 - 项目初始化

VAN模式用于项目验证与初始化,确保项目基础设施完备,验证关键文件存在性和完整性。

核心功能:

  • 初始化新项目或验证现有项目状态
  • 检查核心文档的完整性
  • 确认项目设置正确
  • 创建缺失的必要文件

使用示例:

// 初始化新项目
{
  "name": "van_init",
  "arguments": {
    "projectName": "我的项目",  // 可选,如不提供则使用默认项目名
    "description": "这是一个测试项目"  // 可选
  }
}

// 验证现有项目状态
{
  "name": "van_verify",
  "arguments": {
    "projectId": "project-id-123"
  }
}
关键步骤: 在VAN阶段,确保创建项目并验证所有必要的核心文档已存在,如projectbrief.md、tasks.md、activeContext.md等。

PLAN 模式 - 计划制定

PLAN模式用于计划制定与任务分解,明确项目目标,并将项目分解为可管理的任务。

核心功能:

  • 定义项目范围和边界
  • 将项目分解为可管理的任务
  • 估算工作量和设置期限
  • 确定任务优先级和依赖关系

使用示例:

// 获取任务列表
{
  "name": "plan_get_tasks",
  "arguments": {
    "projectId": "project-id-123"
  }
}

// 添加新任务
{
  "name": "plan_add_task",
  "arguments": {
    "projectId": "project-id-123",
    "task": "实现用户认证功能",
    "priority": "high",
    "deadline": "2023-12-31"
  }
}
关键步骤: 在PLAN阶段,专注于任务分解和优先级设定,确保tasks.md文档中包含完整的任务列表。

CREATIVE 模式 - 创意构思

CREATIVE模式专注于创意构思和方案设计,探索不同解决方案的可行性。

核心功能:

  • 头脑风暴解决方案
  • 评估不同技术方案
  • 设计系统架构
  • 原型设计与验证

使用示例:

// 添加创意记录
{
  "name": "creative_add_idea",
  "arguments": {
    "projectId": "project-id-123",
    "title": "移动端适配方案",
    "content": "使用响应式设计 + 特定断点优化",
    "tags": ["设计", "移动端", "UI"]
  }
}

// 获取创意列表
{
  "name": "creative_get_ideas",
  "arguments": {
    "projectId": "project-id-123",
    "tag": "设计"  // 可选,按标签筛选
  }
}
关键步骤: 在CREATIVE阶段,记录和整理创意方案,并更新systemPatterns.md文档,记录系统设计决策。

IMPLEMENT 模式 - 实施开发

IMPLEMENT模式用于项目实施和代码开发,跟踪开发进度并更新任务状态。

核心功能:

  • 代码开发和功能实现
  • 单元测试和集成测试
  • 进度跟踪和状态更新
  • 解决实施过程中的问题

使用示例:

// 更新任务进度
{
  "name": "implement_update_progress",
  "arguments": {
    "projectId": "project-id-123",
    "taskId": "task-789",
    "status": "in_progress",
    "completion": 60  // 百分比
  }
}

// 记录实现细节
{
  "name": "implement_add_note",
  "arguments": {
    "projectId": "project-id-123",
    "title": "用户认证实现",
    "content": "使用JWT进行身份验证,令牌有效期设置为24小时...",
    "relatedTasks": ["task-789"]
  }
}
关键步骤: 在IMPLEMENT阶段,实时更新activeContext.md文档,记录开发进度和实现细节,同时更新任务状态。

REFLECT 模式 - 回顾反思

REFLECT模式用于项目回顾和反思,总结经验教训,并规划改进措施。

核心功能:

  • 分析项目成功与失败因素
  • 识别瓶颈和问题点
  • 总结经验教训
  • 制定改进计划

使用示例:

// 创建反思记录
{
  "name": "reflect_create",
  "arguments": {
    "projectId": "project-id-123",
    "title": "第一阶段回顾",
    "content": "# 第一阶段回顾\n\n## 成功之处\n- 按时完成了核心功能\n\n## 问题\n- 测试覆盖率不足\n\n## 改进措施\n- 增加单元测试"
  }
}

// 获取历史反思记录
{
  "name": "reflect_get_history",
  "arguments": {
    "projectId": "project-id-123",
    "limit": 5  // 可选,最多返回记录数
  }
}
关键步骤: 在REFLECT阶段,记录项目反思,分析问题和成功因素,同时更新progress.md文档,记录项目进展。

ARCHIVE 模式 - 归档整理

ARCHIVE模式用于项目归档和知识沉淀,整理项目文档,归档完成的任务和总结项目成果。

核心功能:

  • 归档已完成任务
  • 整理项目文档
  • 生成项目总结报告
  • 导出项目交付物

使用示例:

// 归档已完成任务
{
  "name": "archive_completed_tasks",
  "arguments": {
    "projectId": "project-id-123",
    "destination": "completed_tasks.md"  // 可选,归档目标文件
  }
}

// 生成项目总结报告
{
  "name": "archive_generate_summary",
  "arguments": {
    "projectId": "project-id-123",
    "title": "项目总结报告",
    "includeSections": ["overview", "achievements", "challenges", "lessons"]  // 可选
  }
}
关键步骤: 在ARCHIVE阶段,归档已完成任务,生成项目总结报告,沉淀项目知识,方便未来参考。

完整工作流程方法

下面是一个从VAN到ARCHIVE的完整工作流程方法,帮助您理解如何在实际项目中应用这些模式:

工作流程:VAN → PLAN → CREATIVE → IMPLEMENT → REFLECT → ARCHIVE
  1. VAN - 项目初始化
    • 使用van_init创建新项目
    • 使用van_verify确认核心文档已创建
    • 在projectbrief.md中定义项目基本信息
  2. PLAN - 任务规划
    • 分析项目需求,确定项目范围
    • 使用plan_add_task添加项目任务
    • 设置任务优先级和截止日期
    • 检查并审核任务列表的完整性
  3. CREATIVE - 方案设计
    • 头脑风暴解决方案和设计思路
    • 使用creative_add_idea记录创意构思
    • 评估不同方案的可行性
    • 确定最终技术方案和系统架构
    • 更新systemPatterns.md记录设计决策
  4. IMPLEMENT - 实施开发
    • 按照任务优先级开始开发
    • 使用implement_update_progress更新任务进度
    • 使用implement_add_note记录实现细节
    • 实时更新activeContext.md反映当前工作状态
    • 进行单元测试和功能验证
  5. REFLECT - 回顾反思
    • 项目里程碑或阶段性完成后进行回顾
    • 使用reflect_create记录项目反思
    • 分析成功因素和存在问题
    • 总结经验教训和改进措施
    • 更新progress.md记录项目进展
  6. ARCHIVE - 归档整理
    • 使用archive_completed_tasks归档完成任务
    • 使用archive_generate_summary生成项目总结报告
    • 使用archive_export_project导出项目文档
    • 整理项目资料,确保知识沉淀
    • 总结项目经验,为未来项目提供参考
注意: 实际项目中,这些模式可能会交替使用或迭代执行,不必严格按照线性顺序。根据项目特点和进展情况灵活应用每个模式。

Cursor中的配置教程

Cursor是一个强大的代码编辑器,集成了AI辅助功能,可以与Memory Bank MCP服务器无缝协作。本节将介绍如何在Cursor中配置Memory Bank,以实现高效的项目管理和代码开发。

配置步骤

在Cursor中设置Memory Bank MCP服务器
  1. 启动Memory Bank服务器

    确保Memory Bank MCP服务器已经启动并运行在默认端口(通常是3000端口)。

    cd memory-bank-mcp-server
    npm start
  2. 在Cursor中创建项目配置

    在Cursor中打开你的项目根目录,创建一个.cursor文件夹(如果不存在)。

  3. 创建Memory Bank配置文件

    .cursor目录中创建memory-bank.json文件,添加以下配置:

    {
      "serverUrl": "http://localhost:3000",
      "projectId": "your-project-id",  // 你的项目ID,可在创建项目后获取
      "autoSync": true,
      "workingMode": "implement",      // 当前工作模式,可选: van, plan, creative, implement, reflect, archive
      "editorIntegration": {
        "enabled": true,
        "contextMenuEnabled": true,
        "statusBarEnabled": true
      }
    }
  4. 创建项目关联文件

    .cursor目录中创建memory-bank-project.md文件,用于将项目信息与代码库关联:

    # Memory Bank 项目关联
    
    项目ID: your-project-id
    项目名称: 你的项目名称
    服务器: http://localhost:3000
    
    ## 快速访问链接
    
    - [项目概览](http://localhost:3000/projects/your-project-id)
    - [任务列表](http://localhost:3000/projects/your-project-id/documents/tasks)
    - [当前上下文](http://localhost:3000/projects/your-project-id/documents/activeContext)
    
  5. 配置AI助手设置

    在Cursor中,打开设置面板,找到"AI Assistant"部分,配置自定义指令以集成Memory Bank:

    你是一个与Memory Bank MCP服务器集成的AI编码助手。
    当用户询问相关任务或请求帮助时,请执行以下操作:
    
    1. 检查当前项目的Memory Bank文档,特别是activeContext.md和tasks.md
    2. 基于项目文档提供相关的上下文和帮助
    3. 在生成代码或解决方案时,确保遵循项目中定义的系统架构和技术上下文
    
    如果需要查询Memory Bank文档,请使用以下API:
    - GET http://localhost:3000/api/projects/{projectId}/documents/activeContext
    - GET http://localhost:3000/api/projects/{projectId}/documents/tasks
    - GET http://localhost:3000/api/projects/{projectId}/documents/systemPatterns
    

在Cursor中使用Memory Bank

配置完成后,你可以在Cursor中使用以下功能:

  • 访问项目上下文 - 在Cursor中右键点击,选择"Memory Bank" > "查看当前上下文"
  • 更新任务状态 - 在代码注释中使用特殊标记:// MB:TASK-UPDATE: 任务ID, 状态, 进度
  • 添加反思记录 - 在代码中添加注释:// MB:REFLECT: 标题, 内容
  • 同步代码更改 - 使用命令面板执行"Memory Bank: Sync Changes"命令
  • 快速导航 - 使用状态栏上的Memory Bank图标访问项目文档
提示: 当你的工作模式变化时,记得更新memory-bank.json中的workingMode设置,以便Cursor中的AI助手能够提供最相关的帮助。

SpringBoot用户管理功能示例

本节将展示如何使用Memory Bank MCP服务器和Cursor来开发一个基于SpringBoot的用户管理功能,包括前后端代码实现。通过这个示例,你将看到Memory Bank如何帮助你在开发过程中管理项目文档和任务。

需求描述

用户管理系统需求:

  1. 实现用户注册、登录和注销功能
  2. 实现用户信息的CRUD操作
  3. 实现用户权限管理
  4. 前端使用Vue.js构建用户界面
  5. 后端使用SpringBoot + Spring Security + JPA
  6. 数据库使用MySQL

步骤1: VAN - 项目初始化

在Cursor中创建项目并初始化Memory Bank

首先,我们创建一个新项目,并在Memory Bank中进行初始化:

// 在Cursor的AI面板中输入
VAN: 初始化项目,创建一个新的SpringBoot用户管理系统项目

AI助手将会:

  1. 创建一个新的SpringBoot项目
  2. 初始化基本项目结构
  3. 创建.cursor目录和Memory Bank配置
  4. 调用Memory Bank API创建新项目

项目结构示例:

user-management/
├── .cursor/
│   ├── memory-bank.json
│   └── memory-bank-project.md
├── src/
│   ├── main/
│   │   ├── java/com/example/usermanagement/
│   │   │   ├── UserManagementApplication.java
│   │   │   ├── controller/
│   │   │   ├── model/
│   │   │   ├── repository/
│   │   │   └── service/
│   │   └── resources/
│   │       ├── application.properties
│   │       ├── static/
│   │       └── templates/
│   └── test/
├── pom.xml
└── README.md

步骤2: PLAN - 任务规划

制定项目计划和任务分解

接下来,我们在Cursor中向AI助手描述需要制定的计划:

// 在Cursor的AI面板中输入
PLAN: 为用户管理系统制定详细的开发计划和任务分解

AI助手会帮助创建任务列表并更新到Memory Bank的tasks.md文档中:

# 用户管理系统任务清单

## 后端开发任务
- [ ] [高] 设计用户数据模型和数据库表
- [ ] [高] 实现用户注册和登录API
- [ ] [中] 实现用户CRUD操作API
- [ ] [中] 添加Spring Security配置
- [ ] [中] 实现权限控制和角色管理
- [ ] [低] 添加API文档(使用Swagger)
- [ ] [低] 实现日志记录和监控

## 前端开发任务
- [ ] [高] 创建Vue项目结构
- [ ] [高] 设计用户界面组件
- [ ] [高] 实现登录和注册页面
- [ ] [中] 实现用户管理页面
- [ ] [中] 实现权限控制UI
- [ ] [低] 添加数据验证
- [ ] [低] 优化用户体验和响应式设计

## 测试任务
- [ ] [高] 编写单元测试
- [ ] [中] 编写集成测试
- [ ] [中] 执行API测试
- [ ] [低] 执行性能测试

## 部署任务
- [ ] [低] 准备部署文档
- [ ] [低] 配置CI/CD流程
- [ ] [低] 部署到测试环境

步骤3: CREATIVE - 系统设计

设计系统架构和技术选型

在这一阶段,我们通过Cursor中的AI助手进行系统设计:

// 在Cursor的AI面板中输入
CREATIVE: 设计用户管理系统的架构,包括技术选型和数据模型

AI助手会帮助创建系统架构文档并更新到Memory Bank中:

# 用户管理系统架构设计

## 技术栈
- 后端:Spring Boot 3.0, Spring Security, Spring Data JPA
- 前端:Vue.js 3, Axios, Vuex/Pinia, Element Plus
- 数据库:MySQL 8.0
- 构建工具:Maven (后端), npm (前端)
- 文档:Swagger/OpenAPI

## 系统架构
- 前后端分离架构
- RESTful API设计
- JWT认证机制
- 分层架构(控制层、服务层、数据访问层)

## 数据模型

### User 实体
```java
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable = false, unique = true)
    private String username;
    
    @Column(nullable = false)
    private String password;
    
    @Column(nullable = false, unique = true)
    private String email;
    
    @Column(name = "full_name")
    private String fullName;
    
    @Column(name = "created_at")
    private LocalDateTime createdAt;
    
    @Column(name = "updated_at")
    private LocalDateTime updatedAt;
    
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
        name = "user_roles",
        joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "role_id")
    )
    private Set roles = new HashSet<>();
    
    // getters, setters, etc.
}
```

### Role 实体
```java
@Entity
@Table(name = "roles")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Enumerated(EnumType.STRING)
    @Column(nullable = false, unique = true)
    private ERole name;
    
    // getters, setters, etc.
}

public enum ERole {
    ROLE_USER,
    ROLE_MODERATOR,
    ROLE_ADMIN
}
```

## API设计
- POST /api/auth/signup - 用户注册
- POST /api/auth/signin - 用户登录
- POST /api/auth/signout - 用户注销
- GET /api/users - 获取用户列表
- GET /api/users/{id} - 获取用户详情
- PUT /api/users/{id} - 更新用户信息
- DELETE /api/users/{id} - 删除用户
- GET /api/users/profile - 获取当前用户信息
- PUT /api/users/profile - 更新当前用户信息

步骤4: IMPLEMENT - 实现后端代码

实现用户管理后端代码

现在,我们通过Cursor实现后端API:

// 在Cursor的AI面板中输入
IMPLEMENT: 实现用户实体类、仓库接口和服务类

AI助手会帮助实现相应的代码,下面是示例代码:

用户实体类 (User.java):

package com.example.usermanagement.model;

import jakarta.persistence.*;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable = false, unique = true)
    private String username;
    
    @Column(nullable = false)
    private String password;
    
    @Column(nullable = false, unique = true)
    private String email;
    
    @Column(name = "full_name")
    private String fullName;
    
    @Column(name = "created_at")
    private LocalDateTime createdAt;
    
    @Column(name = "updated_at")
    private LocalDateTime updatedAt;
    
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
        name = "user_roles",
        joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "role_id")
    )
    private Set roles = new HashSet<>();
    
    @PrePersist
    protected void onCreate() {
        createdAt = LocalDateTime.now();
        updatedAt = LocalDateTime.now();
    }
    
    @PreUpdate
    protected void onUpdate() {
        updatedAt = LocalDateTime.now();
    }
    
    // Getters and setters
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public String getUsername() {
        return username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    // ... 其他getter和setter
}

用户仓库接口 (UserRepository.java):

package com.example.usermanagement.repository;

import com.example.usermanagement.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface UserRepository extends JpaRepository {
    Optional findByUsername(String username);
    
    Optional findByEmail(String email);
    
    Boolean existsByUsername(String username);
    
    Boolean existsByEmail(String email);
}

用户服务接口和实现 (UserService.java):

package com.example.usermanagement.service;

import com.example.usermanagement.model.User;
import java.util.List;
import java.util.Optional;

public interface UserService {
    List findAllUsers();
    
    Optional findById(Long id);
    
    Optional findByUsername(String username);
    
    Optional findByEmail(String email);
    
    User saveUser(User user);
    
    void deleteUser(Long id);
    
    boolean existsByUsername(String username);
    
    boolean existsByEmail(String email);
}
package com.example.usermanagement.service.impl;

import com.example.usermanagement.model.User;
import com.example.usermanagement.repository.UserRepository;
import com.example.usermanagement.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserServiceImpl implements UserService {
    
    private final UserRepository userRepository;
    
    @Autowired
    public UserServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @Override
    public List findAllUsers() {
        return userRepository.findAll();
    }
    
    @Override
    public Optional findById(Long id) {
        return userRepository.findById(id);
    }
    
    @Override
    public Optional findByUsername(String username) {
        return userRepository.findByUsername(username);
    }
    
    @Override
    public Optional findByEmail(String email) {
        return userRepository.findByEmail(email);
    }
    
    @Override
    public User saveUser(User user) {
        return userRepository.save(user);
    }
    
    @Override
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
    
    @Override
    public boolean existsByUsername(String username) {
        return userRepository.existsByUsername(username);
    }
    
    @Override
    public boolean existsByEmail(String email) {
        return userRepository.existsByEmail(email);
    }
}

步骤5: REFLECT - 项目回顾

项目回顾与总结

完成主要功能后,我们进行项目回顾:

// 在Cursor的AI面板中输入
REFLECT: 帮我回顾项目实现,总结经验和改进点

AI助手会帮助总结经验并更新到Memory Bank的reflections.md文档:

# 用户管理系统开发回顾

## 成功之处
- 成功实现了用户注册、登录和基本CRUD功能
- Spring Security配置正确,JWT认证工作良好
- 数据模型设计合理,满足了业务需求
- 前端界面简洁直观,用户体验良好

## 遇到的挑战
- Spring Security与JWT集成时遇到了一些配置问题
- 角色权限管理的粒度控制较复杂
- 前端表单验证与后端验证的一致性维护
- 处理并发用户操作时的数据一致性问题

## 技术经验
- Spring Boot 3的新特性使用体验良好,尤其是依赖注入和自动配置
- JPA仓库简化了数据访问层的开发,但复杂查询仍需要自定义
- Spring Security的注解式安全控制非常方便
- Vue.js 3的组合式API提高了代码复用性

## 改进点
- 添加更完善的异常处理机制
- 改进用户会话管理,支持多设备登录控制
- 优化数据库查询性能,添加适当的索引
- 增强密码策略,添加密码强度检查
- 添加用户操作审计日志
- 实现更细粒度的权限控制

## 后续计划
- 添加二次认证功能
- 实现用户头像上传
- 添加邮件通知系统
- 开发用户活动分析统计功能
小贴士: 在整个开发过程中,Memory Bank会持续记录项目进展,帮助团队成员了解当前状态,同时为未来项目提供参考经验。Cursor的AI助手能够访问这些文档,提供更符合项目上下文的帮助和建议。