Skip to main content
Glama

MCP Agent TypeScript Port

by waldzellai
index.ts3.13 kB
// Logging module exports export enum LogLevel { DEBUG = 'debug', INFO = 'info', WARN = 'warn', ERROR = 'error' } export interface LogEntry { timestamp: number; level: LogLevel; message: string; context?: Record<string, unknown>; } export class Logger { private static instance: Logger; private logs: LogEntry[] = []; private currentLogLevel: LogLevel = LogLevel.INFO; private constructor() {} public static getInstance(): Logger { if (!Logger.instance) { Logger.instance = new Logger(); } return Logger.instance; } public setLogLevel(level: LogLevel): void { this.currentLogLevel = level; } public log(level: LogLevel, message: string, context?: Record<string, unknown>): void { // Only log if the current log level allows it const logLevels = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR]; if (logLevels.indexOf(level) >= logLevels.indexOf(this.currentLogLevel)) { const entry: LogEntry = { timestamp: Date.now(), level, message, context }; this.logs.push(entry); this.outputLog(entry); } } private outputLog(entry: LogEntry): void { const formattedTimestamp = new Date(entry.timestamp).toISOString(); const contextString = entry.context ? ` | Context: ${JSON.stringify(entry.context)}` : ''; switch (entry.level) { case LogLevel.DEBUG: console.debug(`[${formattedTimestamp}] [DEBUG] ${entry.message}${contextString}`); break; case LogLevel.INFO: console.info(`[${formattedTimestamp}] [INFO] ${entry.message}${contextString}`); break; case LogLevel.WARN: console.warn(`[${formattedTimestamp}] [WARN] ${entry.message}${contextString}`); break; case LogLevel.ERROR: console.error(`[${formattedTimestamp}] [ERROR] ${entry.message}${contextString}`); break; } } public getLogs(level?: LogLevel): LogEntry[] { return level ? this.logs.filter(log => log.level === level) : this.logs; } public clearLogs(): void { this.logs = []; } public exportLogs(format: 'json' | 'text' = 'json'): string { if (format === 'json') { return JSON.stringify(this.logs, null, 2); } return this.logs.map(log => `[${new Date(log.timestamp).toISOString()}] [${log.level.toUpperCase()}] ${log.message}` + (log.context ? ` | ${JSON.stringify(log.context)}` : '') ).join('\n'); } } // Convenience functions for logging export const debug = (message: string, context?: Record<string, unknown>): void => Logger.getInstance().log(LogLevel.DEBUG, message, context); export const info = (message: string, context?: Record<string, unknown>): void => Logger.getInstance().log(LogLevel.INFO, message, context); export const warn = (message: string, context?: Record<string, unknown>): void => Logger.getInstance().log(LogLevel.WARN, message, context); export const error = (message: string, context?: Record<string, unknown>): void => Logger.getInstance().log(LogLevel.ERROR, message, context);

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/waldzellai/mcp-agent-ts'

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