Skip to main content
Glama

MCP Server.exe

by shadowcz007
console.ts3.98 kB
// 定义日志级别枚举 export enum LogLevel { TRACE = 'TRACE', // 最详细的日志级别 DEBUG = 'DEBUG', // 调试信息 INFO = 'INFO', // 一般信息 WARN = 'WARN', // 警告信息 ERROR = 'ERROR', // 错误信息 FATAL = 'FATAL', // 致命错误 OUTPUT = 'OUTPUT' // 终端交互输出 } // 定义日志分类 export enum LogCategory { SERVER = 'SERVER', // 服务器相关 CONFIG = 'CONFIG', // 配置相关 CONNECTION = 'CONNECTION', // 连接相关 TOOL = 'TOOL', // 工具相关 SESSION = 'SESSION', // 会话相关 SYSTEM = 'SYSTEM', // 系统相关 INTERACTIVE = 'INTERACTIVE' // 交互相关 } // 日志颜色配置 const LOG_COLORS = { [LogLevel.TRACE]: '\x1b[90m', // 灰色 [LogLevel.DEBUG]: '\x1b[36m', // 青色 [LogLevel.INFO]: '\x1b[32m', // 绿色 [LogLevel.WARN]: '\x1b[33m', // 黄色 [LogLevel.ERROR]: '\x1b[31m', // 红色 [LogLevel.FATAL]: '\x1b[35m', // 紫色 [LogLevel.OUTPUT]: '\x1b[37m', // 白色 RESET: '\x1b[0m' // 重置颜色 } // 日志级别权重 const LOG_LEVEL_WEIGHT = { [LogLevel.TRACE]: 0, [LogLevel.DEBUG]: 1, [LogLevel.INFO]: 2, [LogLevel.WARN]: 3, [LogLevel.ERROR]: 4, [LogLevel.FATAL]: 5, [LogLevel.OUTPUT]: 6 // OUTPUT 级别最高,确保始终显示 } // 日志配置 interface LogConfig { minLevel: LogLevel; showTimestamp: boolean; showCategory: boolean; showColors: boolean; } // 默认配置 const defaultConfig: LogConfig = { minLevel: LogLevel.INFO, showTimestamp: true, showCategory: true, showColors: true } let currentConfig: LogConfig = { ...defaultConfig } // 设置日志配置 export const setLogConfig = (config: Partial<LogConfig>) => { currentConfig = { ...currentConfig, ...config } } // 格式化日志消息 const formatLogMessage = ( level: LogLevel, category: LogCategory, message: string ): string => { const parts: string[] = [] if (currentConfig.showTimestamp) { parts.push(`[${new Date().toISOString()}]`) } if (currentConfig.showCategory) { parts.push(`[${category}]`) } parts.push(`[${level}]`) parts.push(`[McpServerComposer]`) parts.push(message) let formattedMessage = parts.join(' ') if (currentConfig.showColors) { formattedMessage = `${LOG_COLORS[level]}${formattedMessage}${LOG_COLORS.RESET}` } return formattedMessage } // 发送通知 const log = async ( sendNotification: any, level: LogLevel, category: LogCategory, data: string ) => { if (sendNotification) { await sendNotification({ method: 'notifications/message', params: { level, category, data, timestamp: new Date().getTime() } }) } } // 主日志函数 export const formatLog = async ( level: LogLevel, message: string, category: LogCategory = LogCategory.SYSTEM, sendNotification: any = null ): Promise<string> => { // 检查日志级别(OUTPUT 级别始终显示) if (level !== LogLevel.OUTPUT && LOG_LEVEL_WEIGHT[level] < LOG_LEVEL_WEIGHT[currentConfig.minLevel]) { return '' } // 去除换行 const messageNew = message.replace(/\n/g, ' ') const logMessage = formatLogMessage(level, category, messageNew) // 根据级别输出到控制台 switch (level) { case LogLevel.TRACE: case LogLevel.DEBUG: console.debug(logMessage) break case LogLevel.INFO: console.log(logMessage) break case LogLevel.WARN: console.warn(logMessage) break case LogLevel.ERROR: case LogLevel.FATAL: console.error(logMessage) break case LogLevel.OUTPUT: // OUTPUT 级别使用 process.stdout.write 直接输出,不添加额外格式 process.stdout.write(messageNew + '\n') break } // 发送通知 if (sendNotification) { await log(sendNotification, level, category, messageNew) } return logMessage }

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/shadowcz007/mcp_server_exe'

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