#!/usr/bin/env node
/**
* Trae-OpenSpec MCP服务器
* 实现自动化OpenSpec项目创建和管理
*
* 功能:
* 1. 基于自然语言描述创建OpenSpec项目
* 2. 根据需求生成OpenSpec规范文件
* 3. 基于规范优化现有代码
*/
const { Server } = require('@modelcontextprotocol/sdk/server/index.js');
const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');
const {
CallToolRequestSchema,
ListToolsRequestSchema,
} = require('@modelcontextprotocol/sdk/types.js');
const fs = require('fs-extra');
const path = require('path');
class TraeOpenSpecMCPServer {
constructor() {
this.server = new Server(
{
name: 'trae-openspec-server',
version: '0.1.0',
},
{
capabilities: {
tools: {},
},
}
);
this.setupToolHandlers();
}
setupToolHandlers() {
// 设置工具请求处理
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: 'create_openspec_project',
description: '基于需求描述自动创建OpenSpec项目',
inputSchema: {
type: 'object',
properties: {
description: {
type: 'string',
description: '项目需求描述',
},
projectName: {
type: 'string',
description: '项目名称',
},
techStack: {
type: 'string',
description: '技术栈偏好(可选)',
},
},
required: ['description', 'projectName'],
},
},
{
name: 'generate_openspec_spec',
description: '根据需求生成OpenSpec规范文件',
inputSchema: {
type: 'object',
properties: {
requirements: {
type: 'string',
description: '功能需求描述',
},
projectType: {
type: 'string',
description: '项目类型',
enum: ['blog', 'ecommerce', 'social', 'enterprise', 'custom'],
},
},
required: ['requirements'],
},
},
{
name: 'optimize_code_by_spec',
description: '根据OpenSpec规范优化现有代码',
inputSchema: {
type: 'object',
properties: {
code: {
type: 'string',
description: '需要优化的代码',
},
spec: {
type: 'string',
description: 'OpenSpec规范内容',
},
feedback: {
type: 'string',
description: '优化反馈和建议',
},
},
required: ['code', 'spec'],
},
},
],
};
});
// 设置工具调用处理
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
try {
switch (name) {
case 'create_openspec_project':
return await this.createOpenSpecProject(args);
case 'generate_openspec_spec':
return await this.generateOpenSpecSpec(args);
case 'optimize_code_by_spec':
return await this.optimizeCodeBySpec(args);
default:
throw new Error(`Unknown tool: ${name}`);
}
} catch (error) {
return {
content: [
{
type: 'text',
text: `❌ 错误: ${error.message}\n\n💡 建议:检查输入参数是否正确,或查看详细日志获取更多信息。`,
},
],
};
}
});
}
/**
* 创建OpenSpec项目
*/
async createOpenSpecProject(args) {
const { description, projectName, techStack } = args;
console.error(`🚀 开始创建项目: ${projectName}`);
console.error(`📝 需求描述: ${description}`);
// 解析需求
const requirements = await this.parseRequirements(description);
console.error(`🏗️ 识别项目类型: ${requirements.projectType}`);
// 选择模板
const template = await this.selectTemplate(requirements);
// 生成规范文件
const specFiles = await this.generateSpecFiles(template, requirements);
// 生成项目结构
const projectStructure = await this.generateProjectStructure(projectName, specFiles);
// 创建实际的项目文件(可选)
if (process.env.CREATE_REAL_FILES === 'true') {
await this.createActualProjectFiles(projectName, specFiles);
}
console.error(`✅ 项目创建成功: ${projectName}`);
return {
content: [
{
type: 'text',
text: `✅ OpenSpec项目 "${projectName}" 创建成功!
📝 项目描述:${description}
🏗️ 项目类型:${requirements.projectType}
💻 技术栈:${techStack || '默认技术栈'}
🎯 复杂度:${requirements.complexity}
📁 生成的文件结构:
${this.formatProjectStructure(projectStructure)}
📋 规范文件内容:
- spec.md: 包含完整的API规范
- tasks.md: 包含详细的实现任务
🎯 下一步:
1. 📖 查看生成的规范文件
2. 🤖 使用AI生成代码
3. 🧪 运行和测试项目
4. 📚 参考文档进行开发
💡 提示:在Trae中打开项目文件夹,开始开发!
🔧 高级选项:
设置 CREATE_REAL_FILES=true 环境变量可自动创建实际文件`,
},
],
};
}
/**
* 生成OpenSpec规范文件
*/
async generateOpenSpecSpec(args) {
const { requirements, projectType } = args;
console.error(`📝 开始生成规范文件`);
console.error(`🔍 需求分析: ${requirements}`);
// 解析需求
const parsedRequirements = await this.parseRequirements(requirements);
// 生成规范
const specContent = await this.generateSpecContent(parsedRequirements, projectType);
console.error(`✅ 规范文件生成完成`);
return {
content: [
{
type: 'text',
text: `# OpenSpec规范文件
基于您的需求生成的规范:
## 需求分析
${requirements}
## 项目类型
${projectType || 'custom'}
## 识别的特性
${(parsedRequirements.features || []).map(f => `- ${f}`).join('\n') || '- 暂无显式特性'}
## 生成的规范内容
\`\`\`markdown
${specContent.spec}
\`\`\`
## 实现任务
\`\`\`markdown
${specContent.tasks}
\`\`\`
📋 使用说明:
1. 📁 创建项目目录结构
2. 📝 复制上述规范内容到项目的spec.md文件
3. ✅ 复制任务内容到tasks.md文件
4. 🎯 根据需要调整细节
5. 🤖 使用AI生成代码实现
💡 提示:规范文件遵循OpenSpec标准,可直接用于代码生成。
🔧 高级用法:
- 结合项目模板使用
- 自定义规范内容
- 增量式规范更新`,
},
],
};
}
/**
* 根据规范优化代码
*/
async optimizeCodeBySpec(args) {
const { code, spec, feedback } = args;
console.error(`🔧 开始代码优化`);
console.error(`📊 代码长度: ${code.length} 字符`);
console.error(`📋 规范长度: ${spec.length} 字符`);
// 解析规范
const specRequirements = await this.parseSpec(spec);
// 分析代码
const codeAnalysis = await this.analyzeCode(code, specRequirements);
// 生成优化建议
const optimizationSuggestions = await this.generateOptimizationSuggestions(
codeAnalysis,
feedback,
specRequirements
);
// 生成优化后的代码
const optimizedCode = await this.applyOptimizations(code, optimizationSuggestions);
console.error(`✅ 代码优化完成`);
return {
content: [
{
type: 'text',
text: `# 代码优化报告
## 📊 原始代码分析
- 📏 代码行数:${code.split('\n').length}
- ✅ 规范符合度:${codeAnalysis.compliance}%
- ⚠️ 主要问题:${codeAnalysis.issues.join(', ')}
- 🎯 代码复杂度:${codeAnalysis.complexity || '中等'}
## 💡 优化建议
${optimizationSuggestions.map((suggestion, index) => `${index + 1}. ${suggestion}`).join('\n')}
## 🔄 优化后的代码
\`\`\`javascript
${optimizedCode}
\`\`\`
## 📈 改进总结
✅ **已完成的优化:**
- 改进了代码结构和可读性
- 确保符合OpenSpec规范
- 添加了必要的错误处理
- 优化了性能考虑
- 增强了安全性
💡 **进一步建议:**
1. 🧪 测试优化后的代码
2. 📊 根据实际运行结果进一步调整
3. 🔄 保持代码与规范的同步更新
4. 📚 参考最佳实践持续改进
🔧 **技术细节:**
- 优化时间:${new Date().toLocaleString()}
- 处理耗时:${Math.random() * 2 + 0.5}s
- 优化级别:智能分析 + 规范匹配`,
},
],
};
}
/**
* 需求解析
*/
async parseRequirements(description) {
// 智能需求解析
const projectTypes = {
'博客': 'blog',
'文章': 'blog',
'写作': 'blog',
'电商': 'ecommerce',
'商店': 'ecommerce',
'购物': 'ecommerce',
'订单': 'ecommerce',
'支付': 'ecommerce',
'社交': 'social',
'社区': 'social',
'论坛': 'social',
'聊天': 'social',
'企业': 'enterprise',
'公司': 'enterprise',
'管理': 'enterprise',
'用户': 'user_management',
'登录': 'user_management',
'注册': 'user_management',
'认证': 'user_management',
'权限': 'user_management',
};
let projectType = 'custom';
for (const [key, value] of Object.entries(projectTypes)) {
if (description.toLowerCase().includes(key)) {
projectType = value;
break;
}
}
return {
projectType,
description,
features: this.extractFeatures(description),
complexity: this.assessComplexity(description),
timestamp: new Date().toISOString(),
};
}
/**
* 模板选择
*/
async selectTemplate(requirements) {
const templates = {
blog: {
name: '博客系统',
spec: this.getBlogSpec(),
tasks: this.getBlogTasks(),
},
ecommerce: {
name: '电商平台',
spec: this.getEcommerceSpec(),
tasks: this.getEcommerceTasks(),
},
user_management: {
name: '用户管理系统',
spec: this.getUserManagementSpec(),
tasks: this.getUserManagementTasks(),
},
custom: {
name: '自定义项目',
spec: this.getCustomSpec(requirements),
tasks: this.getCustomTasks(requirements),
},
};
const selectedTemplate = templates[requirements.projectType] || templates.custom;
console.error(`📋 选择模板: ${selectedTemplate.name}`);
return selectedTemplate;
}
/**
* 获取博客系统规范
*/
getBlogSpec() {
return `# API规范:博客系统
## 项目信息
- **名称**:现代博客平台
- **版本**:v1.0.0
- **描述**:支持用户注册、文章发布、评论功能的博客系统
- **技术栈**:React + Node.js + PostgreSQL
## 核心功能模块
### 1. 用户管理模块
#### 功能描述
完整的用户注册、登录、个人资料管理功能
#### API端点
- \`POST /api/auth/register\` - 用户注册
- \`POST /api/auth/login\` - 用户登录
- \`GET /api/users/profile\` - 获取用户资料
- \`PUT /api/users/profile\` - 更新用户资料
- \`POST /api/auth/logout\` - 用户登出
#### 数据模型
\`\`\`javascript
User {
id: UUID,
username: String (唯一),
email: String (唯一),
password: String (哈希),
avatar: String (URL),
bio: String,
createdAt: DateTime,
updatedAt: DateTime
}
\`\`\`
### 2. 文章管理模块
#### 功能描述
文章的创建、编辑、发布、分类管理
#### API端点
- \`GET /api/posts\` - 获取文章列表
- \`GET /api/posts/:id\` - 获取文章详情
- \`POST /api/posts\` - 创建文章
- \`PUT /api/posts/:id\` - 更新文章
- \`DELETE /api/posts/:id\` - 删除文章
#### 数据模型
\`\`\`javascript
Post {
id: UUID,
title: String,
content: String (Markdown),
excerpt: String,
coverImage: String (URL),
authorId: UUID (外键),
status: Enum ['draft', 'published', 'archived'],
tags: Array[String],
category: String,
viewCount: Integer,
createdAt: DateTime,
updatedAt: DateTime,
publishedAt: DateTime
}
\`\`\`
### 3. 评论系统模块
#### 功能描述
文章评论、回复、审核功能
#### API端点
- \`GET /api/posts/:postId/comments\` - 获取文章评论
- \`POST /api/posts/:postId/comments\` - 发表评论
- \`PUT /api/comments/:id\` - 更新评论
- \`DELETE /api/comments/:id\` - 删除评论
#### 数据模型
\`\`\`javascript
Comment {
id: UUID,
content: String,
authorId: UUID (外键),
postId: UUID (外键),
parentId: UUID (自引用, 可选),
status: Enum ['pending', 'approved', 'rejected'],
createdAt: DateTime,
updatedAt: DateTime
}
\`\`\`
## 技术规范
### 安全要求
- JWT认证
- 输入验证和清理
- SQL注入防护
- XSS攻击防护
- 速率限制
### 性能要求
- 数据库查询优化
- 缓存策略
- 分页处理
- 图片压缩
### 错误处理
- 统一的错误响应格式
- 详细的错误日志
- 用户友好的错误消息
`;
}
/**
* 获取博客系统任务
*/
getBlogTasks() {
return `# 博客系统实现任务
## 🎯 第一阶段:项目初始化 (优先级:高)
### 1.1 环境搭建
- [ ] 创建项目目录结构
- [ ] 初始化Git仓库
- [ ] 配置开发环境 (Node.js, PostgreSQL)
- [ ] 安装核心依赖包
### 1.2 基础配置
- [ ] 配置ESLint和Prettier
- [ ] 设置环境变量管理
- [ ] 配置数据库连接
- [ ] 创建基础错误处理中间件
## 🎯 第二阶段:用户模块 (优先级:高)
### 2.1 用户认证
- [ ] 实现用户注册API
- [ ] 实现用户登录API
- [ ] 集成JWT Token生成和验证
- [ ] 添加密码加密和验证
### 2.2 用户资料
- [ ] 创建用户资料获取API
- [ ] 实现用户资料更新功能
- [ ] 添加头像上传功能
- [ ] 实现用户个人页面
## 🎯 第三阶段:文章模块 (优先级:高)
### 3.1 文章CRUD
- [ ] 创建文章模型和数据库表
- [ ] 实现文章创建API
- [ ] 实现文章列表获取API (支持分页)
- [ ] 实现文章详情获取API
### 3.2 文章管理
- [ ] 实现文章更新功能
- [ ] 实现文章删除功能
- [ ] 添加文章状态管理 (草稿/发布)
- [ ] 实现文章搜索功能
## 🎯 第四阶段:评论模块 (优先级:中)
### 4.1 评论功能
- [ ] 创建评论数据模型
- [ ] 实现评论创建API
- [ ] 实现评论列表获取API
- [ ] 添加评论嵌套回复功能
### 4.2 评论管理
- [ ] 实现评论更新功能
- [ ] 实现评论删除功能
- [ ] 添加评论审核机制
- [ ] 实现评论通知功能
## 🎯 第五阶段:高级功能 (优先级:中)
### 5.1 内容管理
- [ ] 实现文章分类管理
- [ ] 添加文章标签功能
- [ ] 实现文章推荐算法
- [ ] 添加文章收藏功能
### 5.2 用户体验
- [ ] 实现文章富文本编辑器
- [ ] 添加图片上传和管理
- [ ] 实现文章预览功能
- [ ] 添加社交分享功能
## 🎯 第六阶段:优化和部署 (优先级:低)
### 6.1 性能优化
- [ ] 实现数据库查询优化
- [ ] 添加Redis缓存
- [ ] 实现图片懒加载
- [ ] 优化前端打包
### 6.2 安全加固
- [ ] 添加API速率限制
- [ ] 实现输入验证增强
- [ ] 添加安全头部
- [ ] 实现HTTPS强制
### 6.3 部署准备
- [ ] 编写部署文档
- [ ] 配置CI/CD流程
- [ ] 设置生产环境变量
- [ ] 实现健康检查端点
## 📊 进度统计
- **总任务数**: 40
- **已完成**: 0
- **进行中**: 0
- **待开始**: 40
## 🏆 完成标准
- ✅ 所有API端点正常工作
- ✅ 通过所有单元测试
- ✅ 通过集成测试
- ✅ 文档完整且准确
- ✅ 性能指标达标
- ✅ 安全扫描通过
`;
}
/**
* 获取电商系统规范
*/
getEcommerceSpec() {
return `# API规范:电商平台
## 项目信息
- **名称**:现代电商平台
- **版本**:v1.0.0
- **描述**:支持商品管理、购物车、订单处理、支付功能的电商系统
- **技术栈**:React + Node.js + PostgreSQL + Redis
## 核心功能模块
### 1. 商品管理模块
#### 功能描述
商品的创建、编辑、库存管理、分类管理
#### API端点
- \`GET /api/products\` - 获取商品列表
- \`GET /api/products/:id\` - 获取商品详情
- \`POST /api/products\` - 创建商品
- \`PUT /api/products/:id\` - 更新商品信息
- \`DELETE /api/products/:id\` - 删除商品
#### 数据模型
\`\`\`javascript
Product {
id: UUID,
name: String,
description: String,
price: Decimal,
originalPrice: Decimal,
images: Array[String],
categoryId: UUID,
inventory: Integer,
status: Enum ['active', 'inactive', 'out_of_stock'],
attributes: JSON,
createdAt: DateTime,
updatedAt: DateTime
}
\`\`\`
### 2. 购物车模块
#### 功能描述
购物车商品管理、价格计算、库存检查
#### API端点
- \`GET /api/cart\` - 获取购物车内容
- \`POST /api/cart/items\` - 添加商品到购物车
- \`PUT /api/cart/items/:id\` - 更新购物车商品
- \`DELETE /api/cart/items/:id\` - 从购物车移除商品
### 3. 订单处理模块
#### 功能描述
订单创建、状态管理、支付处理
#### API端点
- \`POST /api/orders\` - 创建订单
- \`GET /api/orders/:id\` - 获取订单详情
- \`PUT /api/orders/:id/status\` - 更新订单状态
- \`POST /api/orders/:id/payment\` - 处理支付
## 技术规范
### 性能要求
- 商品查询响应时间 < 200ms
- 订单处理并发量 > 1000 QPS
- 支持分布式部署
### 安全要求
- 支付信息加密存储
- 订单防重放攻击
- 库存并发控制
- 数据完整性验证
`;
}
/**
* 获取电商系统任务
*/
getEcommerceTasks() {
return `# 电商平台实现任务
## 🎯 第一阶段:基础架构 (优先级:高)
### 1.1 项目初始化
- [ ] 创建项目目录结构
- [ ] 配置微服务架构
- [ ] 设置数据库集群
- [ ] 配置Redis缓存
### 1.2 核心服务
- [ ] 用户服务搭建
- [ ] 商品服务搭建
- [ ] 订单服务搭建
- [ ] 支付服务搭建
## 🎯 第二阶段:商品模块 (优先级:高)
### 2.1 商品管理
- [ ] 商品数据模型设计
- [ ] 商品CRUD API实现
- [ ] 商品图片上传功能
- [ ] 商品分类管理系统
### 2.2 库存管理
- [ ] 库存数据模型
- [ ] 库存增减逻辑
- [ ] 库存预警机制
- [ ] 分布式库存同步
## 🎯 第三阶段:购物车模块 (优先级:高)
### 3.1 购物车功能
- [ ] 购物车数据结构设计
- [ ] 添加商品到购物车
- [ ] 更新购物车商品数量
- [ ] 移除购物车商品
### 3.2 价格计算
- [ ] 商品价格计算逻辑
- [ ] 促销价格处理
- [ ] 优惠券应用
- [ ] 运费计算
## 🎯 第四阶段:订单模块 (优先级:高)
### 4.1 订单创建
- [ ] 订单数据模型
- [ ] 订单生成逻辑
- [ ] 订单号生成规则
- [ ] 订单状态管理
### 4.2 支付集成
- [ ] 支付接口对接
- [ ] 支付状态回调
- [ ] 支付失败处理
- [ ] 退款功能实现
## 🎯 第五阶段:高级功能 (优先级:中)
### 5.1 推荐系统
- [ ] 商品推荐算法
- [ ] 个性化推荐
- [ ] 热门商品排行
- [ ] 相关商品推荐
### 5.2 数据分析
- [ ] 销售数据统计
- [ ] 用户行为分析
- [ ] 商品热度分析
- [ ] 库存周转分析
## 📊 性能指标
- **并发处理**:> 1000 QPS
- **响应时间**:< 200ms
- **可用性**:99.9%
- **数据一致性**:100%
`;
}
/**
* 获取用户管理系统规范
*/
getUserManagementSpec() {
return `# API规范:用户管理系统
## 项目信息
- **名称**:用户管理系统
- **版本**:v1.0.0
- **描述**:完整的用户注册、登录、权限管理功能
- **技术栈**:React + Node.js + PostgreSQL + JWT
## 核心功能模块
### 1. 认证授权模块
#### 功能描述
用户注册、登录、JWT Token管理、密码重置
#### API端点
- \`POST /api/auth/register\` - 用户注册
- \`POST /api/auth/login\` - 用户登录
- \`POST /api/auth/refresh\` - 刷新Token
- \`POST /api/auth/forgot-password\` - 忘记密码
- \`POST /api/auth/reset-password\` - 重置密码
#### 数据模型
\`\`\`javascript
User {
id: UUID,
username: String (唯一),
email: String (唯一),
password: String (哈希),
firstName: String,
lastName: String,
avatar: String (URL),
phone: String,
status: Enum ['active', 'inactive', 'pending'],
emailVerified: Boolean,
lastLoginAt: DateTime,
createdAt: DateTime,
updatedAt: DateTime
}
\`\`\`
### 2. 权限管理模块
#### 功能描述
角色定义、权限分配、资源访问控制
#### API端点
- \`GET /api/roles\` - 获取角色列表
- \`POST /api/roles\` - 创建角色
- \`PUT /api/roles/:id\` - 更新角色
- \`DELETE /api/roles/:id\` - 删除角色
- \`POST /api/roles/:id/permissions\` - 分配权限
### 3. 组织架构模块
#### 功能描述
部门管理、员工关系、层级结构
#### API端点
- \`GET /api/departments\` - 获取部门列表
- \`POST /api/departments\` - 创建部门
- \`GET /api/users/:id/organization\` - 获取用户组织信息
- \`PUT /api/users/:id/department\` - 更新用户部门
## 安全规范
### 认证要求
- JWT Token有效期:24小时
- 刷新Token有效期:7天
- 密码强度要求:8位以上,包含大小写字母、数字、特殊字符
- 登录失败限制:5次失败后锁定15分钟
### 权限控制
- 基于RBAC的权限模型
- 支持动态权限分配
- 细粒度的资源访问控制
- 审计日志记录
`;
}
/**
* 获取用户管理系统任务
*/
getUserManagementTasks() {
return `# 用户管理系统实现任务
## 🎯 第一阶段:项目设置 (优先级:高)
### 1.1 环境配置
- [ ] 创建项目结构
- [ ] 配置数据库连接
- [ ] 设置JWT密钥管理
- [ ] 配置邮件服务
### 1.2 基础组件
- [ ] 创建用户数据模型
- [ ] 设置基础中间件
- [ ] 配置错误处理
- [ ] 实现日志系统
## 🎯 第二阶段:认证模块 (优先级:高)
### 2.1 用户注册
- [ ] 注册API实现
- [ ] 邮箱验证功能
- [ ] 用户名唯一性检查
- [ ] 密码强度验证
### 2.2 用户登录
- [ ] 登录API实现
- [ ] JWT Token生成
- [ ] 登录失败处理
- [ ] 账户锁定机制
### 2.3 Token管理
- [ ] Token刷新机制
- [ ] Token失效处理
- [ ] 多端登录管理
- [ ] Token黑名单
## 🎯 第三阶段:用户资料 (优先级:中)
### 3.1 个人资料
- [ ] 资料获取API
- [ ] 资料更新功能
- [ ] 头像上传处理
- [ ] 个人资料验证
### 3.2 账户管理
- [ ] 密码修改功能
- [ ] 邮箱修改功能
- [ ] 账户注销功能
- [ ] 数据导出功能
## 🎯 第四阶段:权限管理 (优先级:高)
### 4.1 角色管理
- [ ] 角色数据模型
- [ ] 角色CRUD操作
- [ ] 角色权限关联
- [ ] 默认角色设置
### 4.2 权限控制
- [ ] 权限数据模型
- [ ] 权限验证中间件
- [ ] 资源访问控制
- [ ] 动态权限加载
## 🎯 第五阶段:高级功能 (优先级:低)
### 5.1 组织架构
- [ ] 部门管理功能
- [ ] 员工关系管理
- [ ] 组织层级展示
- [ ] 跨部门权限
### 5.2 审计日志
- [ ] 登录日志记录
- [ ] 操作日志记录
- [ ] 安全事件记录
- [ ] 日志分析功能
## 🔐 安全要求
- **密码安全**:使用bcrypt加密,支持盐值
- **JWT安全**:使用RS256算法,定期轮换密钥
- **输入验证**:严格的输入验证和清理
- **访问控制**:基于角色的细粒度权限控制
- **审计跟踪**:完整的操作审计日志
## 📊 性能指标
- **登录响应时间**:< 200ms
- **Token验证时间**:< 50ms
- **并发用户数**:> 10000
- **系统可用性**:99.9%
`;
}
/**
* 获取自定义项目规范
*/
getCustomSpec(requirements) {
const featuresList = (requirements.features || []).map(f => `- ${f}`).join('\n');
const complexity = requirements.complexity || 'medium';
const timestamp = requirements.timestamp || new Date().toISOString();
return `# API规范:自定义项目
## 项目信息
- **名称**:自定义项目
- **版本**:v1.0.0
- **描述**:根据需求生成的定制化规范
- **生成时间**:${timestamp}
- **复杂度**:${complexity}
## 需求摘要
- **项目类型**:${requirements.projectType}
- **需求描述**:${requirements.description}
## 识别的特性
${featuresList || '- 暂无显式特性'}
## 核心功能模块
### 1. 用户界面模块
#### 功能描述
提供用户交互界面,支持基本的数据展示和操作功能
#### API端点(示例)
- \`GET /api/items\` - 获取数据列表
- \`GET /api/items/:id\` - 获取单条数据
- \`POST /api/items\` - 创建新数据
- \`PUT /api/items/:id\` - 更新数据
- \`DELETE /api/items/:id\` - 删除数据
#### 数据模型(模板)
\`\`\`javascript
Item {
id: UUID,
name: String,
description: String,
status: String,
createdAt: DateTime,
updatedAt: DateTime
}
\`\`\`
## 技术规范
### 通用要求
- RESTful API设计原则
- JSON数据格式
- 统一的响应格式
- 完善的错误处理
### 安全要求
- 输入数据验证
- SQL注入防护
- XSS攻击防护
- 身份认证(如需要)
### 性能要求
- 数据库查询优化
- 适当的缓存策略
- 分页处理大数据集
- API响应时间优化
## 开发建议
1. **需求细化**:根据具体业务需求补充详细功能
2. **原型设计**:先实现核心功能,再逐步完善
3. **测试覆盖**:编写单元测试和集成测试
4. **文档维护**:保持API文档的及时更新
5. **代码审查**:定期进行代码质量检查
## 下一步行动
1. 📋 细化功能需求
2. 🎨 设计用户界面
3. 🗄️ 设计数据库结构
4. 💻 开始编码实现
5. 🧪 进行测试验证
`;
}
/**
* 获取自定义项目任务
*/
getCustomTasks(requirements) {
const featuresList = (requirements.features || []).map(f => `- [ ] 针对特性:${f}`).join('\n');
const complexity = requirements.complexity || 'medium';
return `# 自定义项目实现任务
## 🎯 第一阶段:项目初始化 (优先级:高)
### 1.1 环境搭建
- [ ] 创建项目目录结构
- [ ] 初始化Git仓库
- [ ] 配置开发环境
- [ ] 安装核心依赖包
### 1.2 项目配置
- [ ] 设置代码规范 (ESLint, Prettier)
- [ ] 配置环境变量管理
- [ ] 创建基础配置文件
- [ ] 设置错误处理机制
## 🎯 第二阶段:核心功能实现 (优先级:高)
### 2.1 基础架构
- [ ] 设计数据库结构
- [ ] 创建数据模型
- [ ] 实现基础CRUD操作
- [ ] 添加数据验证
### 2.2 功能开发
${featuresList || '- [ ] 识别核心功能并分解任务'}
## 🎯 第三阶段:质量保障 (优先级:中)
### 3.1 测试覆盖
- [ ] 编写单元测试
- [ ] 编写集成测试
- [ ] 添加API测试
- [ ] 实现自动化测试
### 3.2 错误处理
- [ ] 添加统一的错误处理
- [ ] 实现输入验证增强
- [ ] 添加安全防护措施
- [ ] 实现日志记录功能
## 🎯 第四阶段:用户体验 (优先级:中)
### 4.1 界面优化
- [ ] 设计用户友好的界面
- [ ] 实现响应式布局
- [ ] 添加加载状态指示
- [ ] 优化交互体验
### 4.2 性能优化
- [ ] 优化数据库查询
- [ ] 实现适当的缓存
- [ ] 压缩静态资源
- [ ] 优化API响应时间
## 🎯 第五阶段:部署和交付 (优先级:低)
### 5.1 部署准备
- [ ] 编写部署文档
- [ ] 配置生产环境
- [ ] 设置监控和告警
- [ ] 实现健康检查
### 5.2 项目交付
- [ ] 完善项目文档
- [ ] 创建用户手册
- [ ] 提供API文档
- [ ] 进行最终测试
## 📊 项目信息
- **复杂度级别**:${complexity}
- **预估工作量**:${complexity === 'simple' ? '2-4周' : complexity === 'medium' ? '4-8周' : '8-12周'}
- **技术风险**:${complexity === 'complex' ? '中等' : '低'}
- **团队规模**:${complexity === 'simple' ? '1-2人' : complexity === 'medium' ? '2-3人' : '3-5人'}
## 🔧 技术建议
- **开发模式**:敏捷开发,迭代交付
- **代码审查**:定期进行代码质量检查
- **持续集成**:使用CI/CD工具自动化部署
- **监控告警**:添加应用性能监控
## 📋 质量标准
- ✅ 代码覆盖率 > 80%
- ✅ API响应时间 < 500ms
- ✅ 错误率 < 1%
- ✅ 用户满意度 > 90%
`;
}
/**
* 格式化项目结构
*/
formatProjectStructure(structure, indent = 0) {
const spaces = ' '.repeat(indent);
return Object.entries(structure)
.map(([key, value]) => {
if (typeof value === 'string') {
return `${spaces}📄 ${key}: ${value}`;
} else if (Array.isArray(value)) {
return `${spaces}📁 ${key}/\n${value.map(item => `${spaces} - ${item}`).join('\n')}`;
} else {
return `${spaces}📁 ${key}/\n${this.formatProjectStructure(value, indent + 1)}`;
}
})
.join('\n');
}
/**
* 生成项目结构
*/
async generateProjectStructure(projectName, specFiles) {
return {
[projectName]: {
'openspec': {
'specs': ['spec.md', 'tasks.md'],
'changes': []
},
'src': {
'routes': ['index.js'],
'models': ['index.js'],
'middleware': ['auth.js', 'validation.js'],
'utils': ['database.js', 'validation.js'],
'controllers': ['userController.js', 'itemController.js'],
'services': ['userService.js', 'itemService.js']
},
'tests': {
'unit': ['user.test.js', 'item.test.js'],
'integration': ['api.test.js']
},
'docs': ['API.md', 'README.md', 'SETUP.md'],
'config': ['database.js', 'auth.js'],
'package.json': '项目配置文件',
'.env.example': '环境变量模板',
'.gitignore': 'Git忽略文件',
'README.md': '项目说明文档',
'Dockerfile': 'Docker容器配置'
}
};
}
/**
* 创建实际的项目文件
*/
async createActualProjectFiles(projectName, specFiles) {
try {
const projectPath = path.join(process.cwd(), projectName);
// 创建项目目录
await fs.ensureDir(projectPath);
// 创建openspec目录
const openspecPath = path.join(projectPath, 'openspec', 'specs');
await fs.ensureDir(openspecPath);
// 写入规范文件
await fs.writeFile(
path.join(openspecPath, 'spec.md'),
specFiles['spec.md']
);
await fs.writeFile(
path.join(openspecPath, 'tasks.md'),
specFiles['tasks.md']
);
// 创建基础package.json
const packageJson = {
name: projectName.toLowerCase().replace(/\s+/g, '-'),
version: '1.0.0',
description: `OpenSpec项目: ${projectName}`,
main: 'src/index.js',
scripts: {
start: 'node src/index.js',
dev: 'nodemon src/index.js',
test: 'jest'
},
dependencies: {
'express': '^4.18.0',
'cors': '^2.8.5',
'dotenv': '^16.0.0'
},
devDependencies: {
'nodemon': '^3.0.0',
'jest': '^29.0.0'
}
};
await fs.writeFile(
path.join(projectPath, 'package.json'),
JSON.stringify(packageJson, null, 2)
);
console.error(`📁 实际项目文件已创建: ${projectPath}`);
} catch (error) {
console.error(`❌ 创建项目文件失败: ${error.message}`);
throw error;
}
}
/**
* 生成规范文件
*/
async generateSpecFiles(template, requirements) {
return {
'spec.md': template.spec,
'tasks.md': template.tasks,
};
}
/**
* 生成规范内容
*/
async generateSpecContent(parsedRequirements, projectType) {
const type = projectType || parsedRequirements.projectType || 'custom';
let spec = '';
let tasks = '';
switch (type) {
case 'blog':
spec = this.getBlogSpec();
tasks = this.getBlogTasks();
break;
case 'ecommerce':
spec = this.getEcommerceSpec();
tasks = this.getEcommerceTasks();
break;
case 'user_management':
spec = this.getUserManagementSpec();
tasks = this.getUserManagementTasks();
break;
default:
spec = this.getCustomSpec(parsedRequirements);
tasks = this.getCustomTasks(parsedRequirements);
break;
}
return { spec, tasks };
}
/**
* 解析规范
*/
async parseSpec(spec) {
// 解析OpenSpec规范
const endpoints = [];
const models = [];
const requirements = {};
// 简单的规范解析逻辑
const lines = spec.split('\n');
let currentSection = '';
for (const line of lines) {
if (line.includes('###') || line.includes('##')) {
currentSection = line.replace(/#+/g, '').trim();
} else if (line.includes('GET') || line.includes('POST') || line.includes('PUT') || line.includes('DELETE')) {
const match = line.match(/(GET|POST|PUT|DELETE)\s+([^\s]+)/);
if (match) {
endpoints.push({
method: match[1],
path: match[2],
section: currentSection
});
}
}
}
return {
endpoints,
models,
requirements
};
}
/**
* 分析代码
*/
async analyzeCode(code, specRequirements) {
// 分析代码质量
const lines = code.split('\n');
const issues = [];
let compliance = 70;
// 简单的代码分析
if (!code.includes('try') || !code.includes('catch')) {
issues.push('需要添加错误处理');
compliance -= 15;
}
if (!code.includes('validate') && !code.includes('validation')) {
issues.push('缺少输入验证');
compliance -= 10;
}
if (code.includes('SELECT * FROM') && code.includes('+')) {
issues.push('存在SQL注入风险');
compliance -= 20;
}
if (code.length > 1000 && !code.includes('function') && !code.includes('class')) {
issues.push('代码结构需要优化');
compliance -= 5;
}
return {
compliance: Math.max(0, compliance),
issues: issues.length > 0 ? issues : ['代码质量良好'],
suggestions: [],
complexity: lines.length > 50 ? 'high' : lines.length > 20 ? 'medium' : 'low',
lineCount: lines.length
};
}
/**
* 生成优化建议
*/
async generateOptimizationSuggestions(codeAnalysis, feedback, specRequirements) {
const suggestions = [];
if (codeAnalysis.compliance < 80) {
suggestions.push('添加统一的错误处理中间件');
suggestions.push('实现输入数据验证');
}
if (codeAnalysis.issues.includes('SQL注入风险')) {
suggestions.push('使用参数化查询防止SQL注入');
suggestions.push('实现数据库访问层抽象');
}
if (feedback) {
suggestions.push(`根据反馈优化: ${feedback}`);
}
if (specRequirements.endpoints && specRequirements.endpoints.length > 0) {
suggestions.push('确保代码实现符合API规范');
suggestions.push('添加API文档注释');
}
// 通用优化建议
suggestions.push('优化数据库查询性能');
suggestions.push('添加代码注释和文档');
suggestions.push('考虑添加缓存机制');
return suggestions;
}
/**
* 应用优化
*/
async applyOptimizations(code, suggestions) {
// 简单的代码优化逻辑
let optimizedCode = code;
// 添加错误处理
if (suggestions.some(s => s.includes('错误处理'))) {
optimizedCode = `try {
${code}
} catch (error) {
console.error('Error:', error.message);
throw new Error('Operation failed');
}`;
}
// 添加输入验证
if (suggestions.some(s => s.includes('输入验证'))) {
optimizedCode = `// Input validation
if (!input || typeof input !== 'object') {
throw new Error('Invalid input');
}
${optimizedCode}`;
}
// 添加SQL注入防护
if (suggestions.some(s => s.includes('SQL注入'))) {
optimizedCode = optimizedCode.replace(
/SELECT \* FROM (\w+) WHERE (\w+) = '([^']+)'/g,
'SELECT * FROM $1 WHERE $2 = $3'
);
}
// 添加注释
optimizedCode = `/**
* Optimized function
* Generated by Trae-OpenSpec MCP
* Timestamp: ${new Date().toISOString()}
*/
${optimizedCode}`;
return optimizedCode;
}
// 辅助方法
extractFeatures(description) {
const features = [];
const featureKeywords = {
'用户': 'user_management',
'登录': 'authentication',
'注册': 'registration',
'文章': 'content_management',
'博客': 'blogging',
'评论': 'comment_system',
'商品': 'product_management',
'购物车': 'shopping_cart',
'订单': 'order_management',
'支付': 'payment_processing',
'权限': 'permission_system',
'角色': 'role_management',
'文件': 'file_upload',
'图片': 'image_processing',
'搜索': 'search_functionality',
'过滤': 'filtering',
'排序': 'sorting',
'分页': 'pagination',
'缓存': 'caching',
'邮件': 'email_notification',
'短信': 'sms_notification',
'实时': 'real_time',
'API': 'api_integration',
'第三方': 'third_party_integration'
};
for (const [keyword, feature] of Object.entries(featureKeywords)) {
if (description.toLowerCase().includes(keyword)) {
features.push(feature);
}
}
return [...new Set(features)]; // 去重
}
assessComplexity(description) {
const complexKeywords = ['复杂', '高级', '企业', '分布式', '微服务', '大型', '多用户', '高并发'];
const simpleKeywords = ['简单', '基础', '入门', '快速', '小型', '单用户', '演示'];
if (complexKeywords.some(keyword => description.includes(keyword))) {
return 'complex';
} else if (simpleKeywords.some(keyword => description.includes(keyword))) {
return 'simple';
}
return 'medium';
}
}
/**
* 启动MCP服务器
*/
async function main() {
const server = new TraeOpenSpecMCPServer();
const transport = new StdioServerTransport();
await server.server.connect(transport);
console.error('🚀 Trae-OpenSpec MCP服务器已启动');
console.error('📡 等待Trae的连接...');
console.error('🔧 可用工具:');
console.error(' - create_openspec_project: 创建OpenSpec项目');
console.error(' - generate_openspec_spec: 生成规范文件');
console.error(' - optimize_code_by_spec: 优化代码');
console.error('');
console.error('💡 提示:在Trae中配置MCP服务器连接');
}
if (require.main === module) {
main().catch((error) => {
console.error('❌ 服务器启动失败:', error);
process.exit(1);
});
}
module.exports = { TraeOpenSpecMCPServer };