UNPKG

@perk-net/pushplus-mcp-server

Version:

PushPlus MCP Server - 通过 Model Context Protocol 提供 PushPlus 推送消息功能,支持微信、邮箱等多渠道推送

198 lines (189 loc) 6.21 kB
#!/usr/bin/env node /** * PushPlus MCP Server 入口文件 * 提供命令行接口和服务器启动功能 */ import { PushPlusMcpServer } from './server.js'; import { getConfig } from './config.js'; /** * 显示帮助信息 */ function showHelp() { console.log(` 🚀 PushPlus MCP Server 用法: pushplus-mcp [选项] 选项: --help, -h 显示此帮助信息 --version, -v 显示版本信息 --test, -t 运行配置测试 --config, -c 显示当前配置 环境变量配置: 方式1: 通过 .env 文件配置 方式2: 通过系统环境变量或 Claude Desktop 配置 PUSHPLUS_TOKEN PushPlus API Token (必需) MCP_SERVER_NAME MCP 服务器名称 (默认: pushplus-mcp-server) MCP_SERVER_VERSION MCP 服务器版本 (默认: 1.0.1) DEFAULT_TEMPLATE 默认消息模板 (默认: html) DEFAULT_CHANNEL 默认推送渠道 (默认: wechat) DEBUG 调试模式 (默认: false) 注意: 当通过 Claude Desktop 配置环境变量时,无需创建 .env 文件 示例: # 启动服务器 pushplus-mcp # 测试配置 pushplus-mcp --test # 查看配置 pushplus-mcp --config 更多信息请访问: https://github.com/your-username/pushplus-mcp-server `); } /** * 显示版本信息 */ function showVersion() { const version = process.env.MCP_SERVER_VERSION || '1.0.1'; console.log(`PushPlus MCP Server v${version}`); } /** * 运行配置测试 */ async function runTest() { console.log('🧪 运行 PushPlus MCP Server 配置测试...\n'); try { const config = getConfig(); // 显示配置 config.printConfig(); console.log(); // 验证配置 const validation = config.validateConfig(); if (validation.valid) { console.log('✅ 配置验证通过'); } else { console.log('❌ 配置验证失败:'); validation.errors.forEach(error => { console.log(` - ${error}`); }); process.exit(1); } // 测试 PushPlus API 连接 console.log('\n📡 测试 PushPlus API 连接...'); try { const { PushPlusClient } = await import('./pushplus.js'); const client = new PushPlusClient(config.getPushPlusToken()); // 尝试发送测试消息 const testResult = await client.sendMessage({ title: 'PushPlus MCP Server 测试', content: '这是一条来自 PushPlus MCP Server 的测试消息。如果您收到这条消息,说明配置正确。' }); if (testResult.code === 200) { console.log('✅ PushPlus API 连接成功,测试消息已发送'); console.log(` 响应: ${testResult.msg}`); } else { console.log('⚠️ PushPlus API 响应异常'); console.log(` 状态码: ${testResult.code}`); console.log(` 消息: ${testResult.msg}`); } } catch (error) { console.log('❌ PushPlus API 连接失败'); console.log(` 错误: ${error instanceof Error ? error.message : String(error)}`); } console.log('\n🎉 测试完成'); } catch (error) { console.error('❌ 测试失败:', error instanceof Error ? error.message : String(error)); process.exit(1); } } /** * 显示配置信息 */ function showConfig() { console.log('📋 PushPlus MCP Server 当前配置:\n'); try { const config = getConfig(); config.printConfig(); console.log('\n📝 配置验证:'); const validation = config.validateConfig(); if (validation.valid) { console.log('✅ 配置有效'); } else { console.log('❌ 配置无效:'); validation.errors.forEach(error => { console.log(` - ${error}`); }); } } catch (error) { console.error('❌ 读取配置失败:', error instanceof Error ? error.message : String(error)); process.exit(1); } } /** * 主函数 */ async function main() { const args = process.argv.slice(2); // 处理命令行参数 if (args.includes('--help') || args.includes('-h')) { showHelp(); return; } if (args.includes('--version') || args.includes('-v')) { showVersion(); return; } if (args.includes('--test') || args.includes('-t')) { await runTest(); return; } if (args.includes('--config') || args.includes('-c')) { showConfig(); return; } // 默认启动服务器 try { const server = new PushPlusMcpServer(); // 处理进程信号 process.on('SIGINT', async () => { console.log('\n🛑 收到中断信号,正在优雅关闭服务器...'); await server.stop(); process.exit(0); }); process.on('SIGTERM', async () => { console.log('\n🛑 收到终止信号,正在优雅关闭服务器...'); await server.stop(); process.exit(0); }); // 启动服务器 await server.start(); } catch (error) { console.error('❌ 启动失败:', error instanceof Error ? error.message : String(error)); // 如果是配置错误,显示帮助信息 if (error instanceof Error && error.message.includes('配置')) { console.log('\n💡 请检查环境变量配置,或运行 --help 查看帮助信息'); console.log('💡 您可以运行 --test 来测试配置'); } process.exit(1); } } // 错误处理 process.on('unhandledRejection', (reason, promise) => { console.error('❌ 未处理的Promise拒绝:', reason); process.exit(1); }); process.on('uncaughtException', (error) => { console.error('❌ 未捕获的异常:', error); process.exit(1); }); // 启动程序 main().catch((error) => { console.error('❌ 程序启动失败:', error); process.exit(1); }); //# sourceMappingURL=index.js.map