UNPKG

@perk-net/pushplus-mcp-server

Version:

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

157 lines 4.78 kB
/** * 环境配置管理模块 * 处理环境变量和配置信息 */ import { z } from 'zod'; import { config } from 'dotenv'; // 配置环境变量模式 export const ConfigSchema = z.object({ // PushPlus相关配置 pushplusToken: z.string().min(1, 'PushPlus token 不能为空'), // MCP服务器配置 mcpServerName: z.string().default('pushplus-mcp-server'), mcpServerVersion: z.string().default('1.0.1'), // 默认配置 defaultTemplate: z.enum(['html', 'txt', 'json', 'markdown', 'cloudMonitor', 'jenkins', 'route', 'pay']).default('html'), defaultChannel: z.enum(['wechat', 'webhook', 'cp', 'mail', 'sms', 'voice', 'extension']).default('wechat'), // 调试配置 debug: z.boolean().default(false) }); /** * 配置管理类 */ export class ConfigManager { static instance; config; constructor() { // 尝试加载 .env 文件(如果存在) try { config(); } catch (error) { // .env 文件不存在或无法读取时,继续使用系统环境变量 // 这是正常情况,特别是当通过 Claude Desktop 等外部方式设置环境变量时 } // 解析并验证配置 this.config = this.parseConfig(); } /** * 获取配置管理器单例 */ static getInstance() { if (!ConfigManager.instance) { ConfigManager.instance = new ConfigManager(); } return ConfigManager.instance; } /** * 解析环境变量配置 */ parseConfig() { const envConfig = { pushplusToken: process.env.PUSHPLUS_TOKEN || '', mcpServerName: process.env.MCP_SERVER_NAME || 'pushplus-mcp-server', mcpServerVersion: process.env.MCP_SERVER_VERSION || '1.0.1', defaultTemplate: process.env.DEFAULT_TEMPLATE || 'html', defaultChannel: process.env.DEFAULT_CHANNEL || 'wechat', debug: process.env.DEBUG === 'true' || process.env.NODE_ENV === 'development' }; try { return ConfigSchema.parse(envConfig); } catch (error) { if (error instanceof z.ZodError) { const errorMessages = error.errors.map(e => `${e.path.join('.')}: ${e.message}`); throw new Error(`配置验证失败:\n${errorMessages.join('\n')}`); } throw error; } } /** * 获取配置 */ getConfig() { return this.config; } /** * 获取 PushPlus Token */ getPushPlusToken() { return this.config.pushplusToken; } /** * 获取 MCP 服务器名称 */ getMcpServerName() { return this.config.mcpServerName; } /** * 获取 MCP 服务器版本 */ getMcpServerVersion() { return this.config.mcpServerVersion; } /** * 获取默认模板 */ getDefaultTemplate() { return this.config.defaultTemplate; } /** * 获取默认渠道 */ getDefaultChannel() { return this.config.defaultChannel; } /** * 是否开启调试模式 */ isDebugMode() { return this.config.debug; } /** * 验证配置是否完整 */ validateConfig() { const errors = []; if (!this.config.pushplusToken) { errors.push('缺少 PUSHPLUS_TOKEN 环境变量'); } if (this.config.pushplusToken && !/^[a-zA-Z0-9]{32}$/.test(this.config.pushplusToken)) { errors.push('PUSHPLUS_TOKEN 格式不正确,应为32位字符串'); } return { valid: errors.length === 0, errors }; } /** * 打印配置信息(敏感信息脱敏) */ printConfig() { const maskedToken = this.config.pushplusToken ? this.config.pushplusToken.slice(0, 8) + '***' + this.config.pushplusToken.slice(-4) : '未设置'; console.log('🔧 PushPlus MCP Server 配置信息:'); console.log(` 服务器名称: ${this.config.mcpServerName}`); console.log(` 服务器版本: ${this.config.mcpServerVersion}`); console.log(` PushPlus Token: ${maskedToken}`); console.log(` 默认模板: ${this.config.defaultTemplate}`); console.log(` 默认渠道: ${this.config.defaultChannel}`); console.log(` 调试模式: ${this.config.debug ? '开启' : '关闭'}`); } /** * 重新加载配置 */ reloadConfig() { config(); this.config = this.parseConfig(); } } /** * 获取默认配置管理器实例 */ export function getConfig() { return ConfigManager.getInstance(); } //# sourceMappingURL=config.js.map