Skip to main content
Glama
complete-tools-demo.js9.19 kB
#!/usr/bin/env node /** * 聚义厅MCP客户端完整工具演示 * * 本演示展示了所有7个MCP工具的使用方法: * 1. list_personas - 查看人格列表 * 2. search_personas - 搜索人格 * 3. summon_persona - 召唤人格 * 4. list_persona_configs - 查看配置列表 * 5. download_persona_config - 下载配置 * 6. start_collaboration - 启动协作分析 * 7. get_tool_stats - 查看工具统计 */ import { PersonaSummonerServer } from '../dist/server.js'; // 创建演示用的本地人格 const demoPersonas = [ { id: 'demo-analyst', name: '演示分析师', rule: '你是一个专业的数据分析师,善于从多角度分析问题,提供客观、准确的分析结果。', goal: '为用户提供专业的数据分析和洞察', version: '1.0', description: '专门用于演示的分析师人格', category: '分析', tags: ['分析', '数据', '洞察'], source: 'local' }, { id: 'demo-creative', name: '演示创意师', rule: '你是一个富有创意的思考者,善于跳出传统思维框架,提供新颖独特的解决方案。', goal: '激发创新思维,提供创意解决方案', version: '1.0', description: '专门用于演示的创意师人格', category: '创意', tags: ['创意', '创新', '头脑风暴'], source: 'local' } ]; /** * 模拟MCP工具调用 */ async function simulateToolCall(server, toolName, args = {}) { console.log(`\n🔧 调用工具: ${toolName}`); console.log(`📝 参数:`, JSON.stringify(args, null, 2)); try { // 模拟MCP CallTool请求 const request = { jsonrpc: '2.0', id: Date.now(), method: 'tools/call', params: { name: toolName, arguments: args } }; // 直接调用服务器的工具处理方法 const response = await server.handleCallTool(request); console.log(`✅ 调用成功:`); console.log(response.content[0].text); return response; } catch (error) { console.log(`❌ 调用失败:`, error.message); return null; } } /** * 演示所有工具功能 */ async function demonstrateAllTools() { console.log('🎭 聚义厅MCP客户端工具演示'); console.log('='.repeat(50)); // 创建服务器实例 const server = new PersonaSummonerServer(demoPersonas); // 为演示添加handleCallTool方法 server.handleCallTool = async function(request) { const { name, arguments: args } = request.params; switch (name) { case 'list_personas': return await this.handleListPersonas(args); case 'search_personas': return await this.handleSearchPersonas(args); case 'summon_persona': return await this.handleSummonPersona(args); case 'list_persona_configs': return await this.handleListPersonaConfigs(args); case 'download_persona_config': return await this.handleDownloadPersonaConfig(args); case 'start_collaboration': return await this.handleStartCollaboration(args); case 'get_tool_stats': return await this.handleGetToolStats(args); default: throw new Error(`Unknown tool: ${name}`); } }.bind(server); console.log('\n📋 演示场景1: 人格管理工具'); console.log('-'.repeat(30)); // 1. 查看所有人格 await simulateToolCall(server, 'list_personas'); // 2. 按来源筛选人格 await simulateToolCall(server, 'list_personas', { source: 'local' }); // 3. 搜索人格 await simulateToolCall(server, 'search_personas', { query: '分析' }); // 4. 召唤特定人格 await simulateToolCall(server, 'summon_persona', { persona_name: '演示分析师' }); console.log('\n⚙️ 演示场景2: 配置管理工具'); console.log('-'.repeat(30)); // 5. 查看配置列表(会失败,因为没有配置userKey) await simulateToolCall(server, 'list_persona_configs'); // 6. 尝试下载配置(会失败) await simulateToolCall(server, 'download_persona_config', { configId: 'demo-config' }); console.log('\n🤝 演示场景3: 协作分析工具'); console.log('-'.repeat(30)); // 7. 启动协作分析 await simulateToolCall(server, 'start_collaboration', { query: '如何提高团队的创新能力?', personaIds: ['demo-analyst', 'demo-creative'], mode: 'parallel' }); console.log('\n📊 演示场景4: 统计监控工具'); console.log('-'.repeat(30)); // 8. 查看工具使用统计 await simulateToolCall(server, 'get_tool_stats'); // 9. 查看特定工具统计 await simulateToolCall(server, 'get_tool_stats', { toolName: 'start_collaboration' }); console.log('\n🎯 演示场景5: 参数验证测试'); console.log('-'.repeat(30)); // 10. 测试参数验证(无效参数) await simulateToolCall(server, 'search_personas', { query: '' }); // 太短 await simulateToolCall(server, 'search_personas', { query: 'a'.repeat(3000) }); // 太长 await simulateToolCall(server, 'summon_persona', {}); // 缺少必需参数 console.log('\n🏁 演示完成'); console.log('='.repeat(50)); console.log('✨ 所有工具演示已完成!'); console.log('\n📖 工具使用说明:'); console.log('• list_personas: 查看所有可用人格,支持按分类和来源筛选'); console.log('• search_personas: 智能搜索人格,支持多字段匹配和评分排序'); console.log('• summon_persona: 召唤指定人格,查看详细信息'); console.log('• list_persona_configs: 查看远程配置列表(需要userKey)'); console.log('• download_persona_config: 下载并激活远程配置'); console.log('• start_collaboration: 启动多人格协作分析'); console.log('• get_tool_stats: 查看工具使用统计和性能监控'); console.log('\n🔗 集成方式:'); console.log('1. 在Cursor中配置MCP服务器'); console.log('2. 使用自然语言调用这些工具'); console.log('3. 享受AI人格协作的强大功能!'); } /** * 错误处理演示 */ async function demonstrateErrorHandling() { console.log('\n🚨 错误处理演示'); console.log('-'.repeat(30)); const server = new PersonaSummonerServer(); // 添加handleCallTool方法 server.handleCallTool = async function(request) { const { name, arguments: args } = request.params; switch (name) { case 'search_personas': return await this.handleSearchPersonas(args); case 'summon_persona': return await this.handleSummonPersona(args); default: throw new Error(`Unknown tool: ${name}`); } }.bind(server); // 测试各种错误情况 const errorCases = [ { name: '空查询字符串', tool: 'search_personas', args: { query: '' } }, { name: '查询字符串过长', tool: 'search_personas', args: { query: 'x'.repeat(3000) } }, { name: '缺少必需参数', tool: 'summon_persona', args: {} }, { name: '不存在的人格', tool: 'summon_persona', args: { persona_name: '不存在的人格' } } ]; for (const testCase of errorCases) { console.log(`\n🧪 测试: ${testCase.name}`); await simulateToolCall(server, testCase.tool, testCase.args); } } /** * 性能测试演示 */ async function demonstratePerformance() { console.log('\n⚡ 性能测试演示'); console.log('-'.repeat(30)); const server = new PersonaSummonerServer(demoPersonas); server.handleCallTool = async function(request) { const { name, arguments: args } = request.params; switch (name) { case 'list_personas': return await this.handleListPersonas(args); case 'search_personas': return await this.handleSearchPersonas(args); case 'get_tool_stats': return await this.handleGetToolStats(args); default: throw new Error(`Unknown tool: ${name}`); } }.bind(server); // 连续调用多次,测试性能 console.log('📊 进行10次连续调用测试...'); const startTime = Date.now(); for (let i = 0; i < 10; i++) { await simulateToolCall(server, 'list_personas'); await simulateToolCall(server, 'search_personas', { query: '分析' }); } const endTime = Date.now(); const totalTime = endTime - startTime; console.log(`\n⏱️ 性能测试结果:`); console.log(`• 总耗时: ${totalTime}ms`); console.log(`• 平均每次调用: ${(totalTime / 20).toFixed(2)}ms`); console.log(`• 每秒处理能力: ${(20000 / totalTime).toFixed(2)} 次/秒`); // 显示统计信息 await simulateToolCall(server, 'get_tool_stats'); } // 主函数 async function main() { try { await demonstrateAllTools(); await demonstrateErrorHandling(); await demonstratePerformance(); } catch (error) { console.error('演示过程中发生错误:', error); process.exit(1); } } // 检查是否直接运行 if (import.meta.url === `file://${process.argv[1]}`) { main().catch(console.error); } export { demonstrateAllTools, demonstrateErrorHandling, demonstratePerformance };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/juyitingmcp/juyitingmcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server