demo.js•4.2 kB
#!/usr/bin/env node
/**
* MCP 抽签工具演示脚本
* 展示各种使用场景
*/
import { spawn } from 'child_process';
// 启动 MCP 服务器进程
const serverProcess = spawn('node', ['src/server.js'], {
stdio: ['pipe', 'pipe', 'inherit']
});
// 发送请求的辅助函数
function sendRequest(request) {
return new Promise((resolve, reject) => {
let responseData = '';
const timeout = setTimeout(() => {
reject(new Error('请求超时'));
}, 3000);
serverProcess.stdout.once('data', (data) => {
clearTimeout(timeout);
responseData += data.toString();
try {
const response = JSON.parse(responseData);
resolve(response);
} catch (error) {
reject(new Error('解析响应失败: ' + error.message));
}
});
serverProcess.stdin.write(JSON.stringify(request) + '\n');
});
}
// 演示场景
async function runDemo() {
console.log('🎪 MCP 抽签工具演示\n');
try {
// 场景1: 选择午餐
console.log('🍽️ 场景1: 选择午餐');
const lunchResponse = await sendRequest({
jsonrpc: '2.0',
id: 1,
method: 'tools/call',
params: {
name: 'draw_lottery',
arguments: {
options: ['中餐', '日料', '韩料', '西餐', '泰餐', '印度菜']
}
}
});
console.log(lunchResponse.result.content[0].text);
console.log('');
// 场景2: 团队分工
console.log('👥 场景2: 团队分工');
const teamResponse = await sendRequest({
jsonrpc: '2.0',
id: 2,
method: 'tools/call',
params: {
name: 'draw_lottery',
arguments: {
options: ['前端开发', '后端开发', 'UI设计', '测试', '文档编写', '项目管理'],
count: 3,
allow_duplicate: false
}
}
});
console.log(teamResponse.result.content[0].text);
console.log('');
// 场景3: D&D 游戏
console.log('🎲 场景3: D&D 游戏 - 投20面骰子');
const dndResponse = await sendRequest({
jsonrpc: '2.0',
id: 3,
method: 'tools/call',
params: {
name: 'roll_dice',
arguments: {
sides: 20,
count: 1
}
}
});
console.log(dndResponse.result.content[0].text);
console.log('');
// 场景4: 决策
console.log('🪙 场景4: 抛硬币做决定');
const decisionResponse = await sendRequest({
jsonrpc: '2.0',
id: 4,
method: 'tools/call',
params: {
name: 'flip_coin',
arguments: {
count: 1
}
}
});
console.log(decisionResponse.result.content[0].text);
console.log('');
// 场景5: 抽奖活动
console.log('🎁 场景5: 公司年会抽奖');
const prizeResponse = await sendRequest({
jsonrpc: '2.0',
id: 5,
method: 'tools/call',
params: {
name: 'draw_lottery',
arguments: {
options: ['iPhone 15', 'MacBook Pro', 'iPad', 'AirPods', '现金1000元'],
count: 1
}
}
});
console.log(prizeResponse.result.content[0].text);
console.log('');
// 场景6: 学习计划
console.log('📚 场景6: 随机选择学习科目');
const studyResponse = await sendRequest({
jsonrpc: '2.0',
id: 6,
method: 'tools/call',
params: {
name: 'draw_lottery',
arguments: {
options: ['数学', '英语', '物理', '化学', '历史', '地理'],
count: 2,
allow_duplicate: false
}
}
});
console.log(studyResponse.result.content[0].text);
console.log('');
console.log('🎉 演示完成!');
console.log('\n💡 提示:');
console.log('- 你可以修改 demo.js 中的选项来测试不同的场景');
console.log('- 运行 "node test-client.js" 进入交互式测试模式');
console.log('- 查看 demo-prompts.md 了解更多使用示例');
} catch (error) {
console.error('❌ 演示失败:', error.message);
} finally {
serverProcess.kill();
process.exit(0);
}
}
// 运行演示
runDemo();