Memory Bank MCP服务器是一个符合MCP(Model Context Protocol)协议的服务器,用于管理Markdown格式的项目文档和规则。本教程将指导您如何使用Memory Bank的核心功能,包括项目管理、文档编辑以及遵循标准工作流程进行项目开发。
Memory Bank采用一套结构化的工作流模式,从项目验证初始化(VAN)到最终归档整理(ARCHIVE),形成一个完整的项目生命周期管理体系。
在开始使用Memory Bank之前,请确保您已经完成以下准备工作:
npm install 安装依赖npm start 启动服务器http://localhost:3000 来使用Web界面。
VAN模式用于项目验证与初始化,确保项目基础设施完备,验证关键文件存在性和完整性。
// 初始化新项目
{
"name": "van_init",
"arguments": {
"projectName": "我的项目", // 可选,如不提供则使用默认项目名
"description": "这是一个测试项目" // 可选
}
}
// 验证现有项目状态
{
"name": "van_verify",
"arguments": {
"projectId": "project-id-123"
}
}
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"
}
}
CREATIVE模式专注于创意构思和方案设计,探索不同解决方案的可行性。
// 添加创意记录
{
"name": "creative_add_idea",
"arguments": {
"projectId": "project-id-123",
"title": "移动端适配方案",
"content": "使用响应式设计 + 特定断点优化",
"tags": ["设计", "移动端", "UI"]
}
}
// 获取创意列表
{
"name": "creative_get_ideas",
"arguments": {
"projectId": "project-id-123",
"tag": "设计" // 可选,按标签筛选
}
}
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"]
}
}
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 // 可选,最多返回记录数
}
}
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"] // 可选
}
}
下面是一个从VAN到ARCHIVE的完整工作流程方法,帮助您理解如何在实际项目中应用这些模式:
van_init创建新项目van_verify确认核心文档已创建plan_add_task添加项目任务creative_add_idea记录创意构思implement_update_progress更新任务进度implement_add_note记录实现细节reflect_create记录项目反思archive_completed_tasks归档完成任务archive_generate_summary生成项目总结报告archive_export_project导出项目文档Cursor是一个强大的代码编辑器,集成了AI辅助功能,可以与Memory Bank MCP服务器无缝协作。本节将介绍如何在Cursor中配置Memory Bank,以实现高效的项目管理和代码开发。
确保Memory Bank MCP服务器已经启动并运行在默认端口(通常是3000端口)。
cd memory-bank-mcp-server
npm start
在Cursor中打开你的项目根目录,创建一个.cursor文件夹(如果不存在)。
在.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
}
}
在.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)
在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中使用以下功能:
// MB:TASK-UPDATE: 任务ID, 状态, 进度// MB:REFLECT: 标题, 内容memory-bank.json中的workingMode设置,以便Cursor中的AI助手能够提供最相关的帮助。
本节将展示如何使用Memory Bank MCP服务器和Cursor来开发一个基于SpringBoot的用户管理功能,包括前后端代码实现。通过这个示例,你将看到Memory Bank如何帮助你在开发过程中管理项目文档和任务。
用户管理系统需求:
首先,我们创建一个新项目,并在Memory Bank中进行初始化:
// 在Cursor的AI面板中输入
VAN: 初始化项目,创建一个新的SpringBoot用户管理系统项目
AI助手将会:
项目结构示例:
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
接下来,我们在Cursor中向AI助手描述需要制定的计划:
// 在Cursor的AI面板中输入
PLAN: 为用户管理系统制定详细的开发计划和任务分解
AI助手会帮助创建任务列表并更新到Memory Bank的tasks.md文档中:
# 用户管理系统任务清单
## 后端开发任务
- [ ] [高] 设计用户数据模型和数据库表
- [ ] [高] 实现用户注册和登录API
- [ ] [中] 实现用户CRUD操作API
- [ ] [中] 添加Spring Security配置
- [ ] [中] 实现权限控制和角色管理
- [ ] [低] 添加API文档(使用Swagger)
- [ ] [低] 实现日志记录和监控
## 前端开发任务
- [ ] [高] 创建Vue项目结构
- [ ] [高] 设计用户界面组件
- [ ] [高] 实现登录和注册页面
- [ ] [中] 实现用户管理页面
- [ ] [中] 实现权限控制UI
- [ ] [低] 添加数据验证
- [ ] [低] 优化用户体验和响应式设计
## 测试任务
- [ ] [高] 编写单元测试
- [ ] [中] 编写集成测试
- [ ] [中] 执行API测试
- [ ] [低] 执行性能测试
## 部署任务
- [ ] [低] 准备部署文档
- [ ] [低] 配置CI/CD流程
- [ ] [低] 部署到测试环境
在这一阶段,我们通过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 - 更新当前用户信息
现在,我们通过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);
}
}
完成主要功能后,我们进行项目回顾:
// 在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提高了代码复用性
## 改进点
- 添加更完善的异常处理机制
- 改进用户会话管理,支持多设备登录控制
- 优化数据库查询性能,添加适当的索引
- 增强密码策略,添加密码强度检查
- 添加用户操作审计日志
- 实现更细粒度的权限控制
## 后续计划
- 添加二次认证功能
- 实现用户头像上传
- 添加邮件通知系统
- 开发用户活动分析统计功能