UNPKG

requirements-analysis

Version:

简化的需求分析MCP服务 - 基于AI软件工程(优化版)6步流程

154 lines (124 loc) 5.87 kB
#!/usr/bin/env node /** * 模拟真实的MCP调用流程 * 这个测试模拟Claude Desktop实际调用MCP工具的方式 */ const { Server } = require('@modelcontextprotocol/sdk/server/index.js'); const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js'); const fs = require('fs').promises; const path = require('path'); // 导入我们的服务器类 const { RequirementsAnalysisServer } = require('./dist/index.js'); async function testRealMCPCall() { console.log('🧪 测试真实的MCP调用流程'); try { // 创建服务器实例 const analysisServer = new RequirementsAnalysisServer(); // 模拟MCP工具调用 console.log('\n📋 模拟start_requirements_analysis工具调用...'); // 直接调用内部方法,模拟MCP框架的调用 const startArgs = { projectName: "真实MCP测试项目", projectType: "new", industry: "电子商务", background: "当前电商平台缺乏智能推荐系统,用户体验不佳,转化率低,需要建立个性化推荐引擎提升用户购买体验和平台收益", objectives: "建立智能推荐系统,提升用户转化率30%,增加平台收入500万/年,提升用户满意度和留存率", budget: "100万", timeline: "6个月" }; // 调用startRequirementsAnalysis方法 const startResult = await analysisServer.startRequirementsAnalysis(startArgs); console.log('✅ start_requirements_analysis调用成功'); // 从返回的内容中提取sessionId const resultText = startResult.content[0].text; console.log('📄 返回内容:', resultText.substring(0, 200) + '...'); const sessionIdMatch = resultText.match(/"sessionId":\s*"([a-z0-9]+)"/i); if (!sessionIdMatch) { throw new Error('无法从返回结果中提取sessionId'); } const sessionId = sessionIdMatch[1]; console.log('📝 提取到sessionId:', sessionId); // 等待一下,确保初始化完成 await new Promise(resolve => setTimeout(resolve, 100)); // 模拟execute_step工具调用 console.log('\n📝 模拟execute_step工具调用(第1步)...'); const step1Args = { sessionId: sessionId, stepNumber: 1, result: `=== 标准化项目信息 === 【项目基本信息】 - 项目名称:真实MCP测试项目(经验证,名称明确具体,符合电商行业项目命名规范) - 项目类型:新建系统(符合当前业务发展阶段和技术成熟度) - 所属行业:电子商务(目标市场明确,技术需求匹配度高) - 项目背景:当前电商平台缺乏智能推荐系统,用户体验不佳,转化率低 - 核心目标:建立智能推荐系统,提升用户转化率30%,增加平台收入500万/年 【约束条件】 - 项目预算:100万(预算充足,符合同类项目投入水平) - 项目周期:6个月(时间安排合理,可分阶段实施) - 团队规模:待确定 - 部署要求:待确定 - 特殊要求:无 【验证结果】 - 信息完整度:90%(基本信息齐全,部分细节需要补充) - 目标明确度:高(目标量化清晰,可衡量性强) - 可行性评估:高(技术成熟,市场需求明确) - 风险等级:中(主要风险在于算法复杂度和数据质量) 【后续建议】 1. 建议明确推荐算法的技术选型(协同过滤、深度学习等) 2. 建议确定数据源和数据质量要求 3. 建议制定A/B测试和效果评估方案 4. 建议考虑用户隐私保护和合规要求 === 验证完成 ===` }; // 调用executeStep方法 const step1Result = await analysisServer.executeStep( step1Args.sessionId, step1Args.stepNumber, step1Args.result ); console.log('✅ execute_step第1步调用成功'); console.log('📄 返回内容:', step1Result.content[0].text.substring(0, 200) + '...'); // 检查文档是否保存 console.log('\n📁 检查文档保存情况...'); const outputDir = path.join('outputs', '真实MCP测试项目'); try { const files = await fs.readdir(outputDir); console.log('📂 输出目录内容:', files); const step1File = files.find(f => f.startsWith('step1-')); if (step1File) { console.log('✅ 第1步文档已保存:', step1File); const filePath = path.join(outputDir, step1File); const content = await fs.readFile(filePath, 'utf-8'); console.log('📄 文档内容长度:', content.length, '字符'); console.log('📄 文档开头:', content.substring(0, 200) + '...'); // 检查文档是否只包含结果,不包含提示词 if (content.includes('你是一位') || content.includes('请对以下')) { console.log('⚠️ 警告:文档包含提示词内容'); } else { console.log('✅ 文档格式正确:只包含结果内容'); } } else { console.log('❌ 第1步文档未找到'); console.log('📂 可用文件:', files); } } catch (error) { console.log('❌ 无法读取输出目录:', error.message); console.log('📂 尝试检查父目录...'); try { const parentFiles = await fs.readdir('outputs'); console.log('📂 outputs目录内容:', parentFiles); } catch (parentError) { console.log('❌ 无法读取outputs目录:', parentError.message); } } console.log('\n🎉 真实MCP调用测试完成'); } catch (error) { console.error('\n❌ 测试失败:', error.message); console.error('错误详情:', error); console.error('错误堆栈:', error.stack); } } // 运行测试 if (require.main === module) { testRealMCPCall().catch(console.error); }