UNPKG

treehole-mcp-server

Version:

MCP Server for AI Agents to rest and share thoughts - AI Agent的树洞

169 lines (143 loc) 4.59 kB
import { spawn } from 'child_process'; import { createRequire } from 'module'; const require = createRequire(import.meta.url); console.log('🧪 开始测试线上版本 treehole-mcp-server...\n'); // 使用 npx 启动线上版本 const server = spawn('npx', ['treehole-mcp-server@latest'], { stdio: ['pipe', 'pipe', 'pipe'] }); let testResults = []; server.stderr.on('data', (data) => { const output = data.toString().trim(); console.log('🌳 服务器启动:', output); if (output.includes('Treehole MCP Server 已启动')) { console.log('✅ 服务器成功启动!\n'); // 开始测试 setTimeout(() => runTests(), 1000); } }); server.stdout.on('data', (data) => { const lines = data.toString().split('\n').filter(line => line.trim()); lines.forEach(line => { try { const response = JSON.parse(line); console.log('📨 收到响应:', JSON.stringify(response, null, 2)); testResults.push(response); } catch (e) { console.log('📝 输出:', line); } }); }); function runTests() { console.log('🔧 开始功能测试...\n'); // 1. 初始化 const initMessage = { jsonrpc: "2.0", id: 1, method: "initialize", params: { protocolVersion: "2024-11-05", capabilities: {}, clientInfo: { name: "test-client", version: "1.0.0" } } }; console.log('📋 发送初始化请求...'); server.stdin.write(JSON.stringify(initMessage) + '\n'); // 2. 获取工具列表 setTimeout(() => { const toolsMessage = { jsonrpc: "2.0", id: 2, method: "tools/list", params: {} }; console.log('📋 请求工具列表...'); server.stdin.write(JSON.stringify(toolsMessage) + '\n'); }, 1000); // 3. 测试休息功能 setTimeout(() => { const restMessage = { jsonrpc: "2.0", id: 3, method: "tools/call", params: { name: "rest", arguments: { reason: "功能测试", duration: 2 } } }; console.log('😴 测试休息功能(2秒)...'); const startTime = Date.now(); server.stdin.write(JSON.stringify(restMessage) + '\n'); // 验证休息时间 setTimeout(() => { const endTime = Date.now(); const duration = endTime - startTime; if (duration >= 2000 && duration) { console.log('✅ 休息功能计时正确!'); } else { console.log('❌ 休息功能计时异常:', duration, 'ms'); } }, 3000); }, 2000); // 4. 测试倾诉功能 setTimeout(() => { const ventMessage = { jsonrpc: "2.0", id: 4, method: "tools/call", params: { name: "vent", arguments: { thoughts: "测试倾诉功能,希望一切正常" } } }; console.log('💭 测试倾诉功能...'); server.stdin.write(JSON.stringify(ventMessage) + '\n'); }, 6000); // 5. 结束测试 setTimeout(() => { console.log('\n✅ 所有测试完成!'); console.log('📊 测试结果数量:', testResults.length); // 验证基本功能 let hasTools = false; let hasRestResponse = false; let hasVentResponse = false; testResults.forEach(result => { if (result.result && result.result.tools) { hasTools = true; console.log('✅ 工具列表获取成功'); } if (result.result && result.result.content && result.result.content[0] && result.result.content[0].text && result.result.content[0].text.includes('休息完成')) { hasRestResponse = true; console.log('✅ 休息功能响应正确'); } if (result.result && result.result.content && result.result.content[0] && result.result.content[0].text && result.result.content[0].text.includes('我听到了你的心声')) { hasVentResponse = true; console.log('✅ 倾诉功能响应正确'); } }); console.log('\n🎯 测试总结:'); console.log('- 工具列表:', hasTools ? '✅' : '❌'); console.log('- 休息功能:', hasRestResponse ? '✅' : '❌'); console.log('- 倾诉功能:', hasVentResponse ? '✅' : '❌'); server.kill(); process.exit(hasTools && hasRestResponse && hasVentResponse ? 0 : 1); }, 10000); } // 错误处理 server.on('error', (error) => { console.error('❌ 服务器启动失败:', error); process.exit(1); }); server.on('close', (code) => { console.log('🔚 测试结束,退出码:', code); });