/**
* Simple logger that writes to stderr to avoid interfering with MCP communication
*/
type LogLevel = 'debug' | 'info' | 'warn' | 'error';
class Logger {
private enabled: boolean;
private level: LogLevel;
constructor() {
// Check environment variables
this.enabled = process.env.MCP_DEBUG === 'true' || process.env.DEBUG === 'true';
this.level = (process.env.LOG_LEVEL || 'info') as LogLevel;
}
private shouldLog(level: LogLevel): boolean {
if (!this.enabled) return false;
const levels: LogLevel[] = ['debug', 'info', 'warn', 'error'];
const currentLevelIndex = levels.indexOf(this.level);
const messageLevelIndex = levels.indexOf(level);
return messageLevelIndex >= currentLevelIndex;
}
private log(level: LogLevel, message: string, ...args: any[]): void {
if (!this.shouldLog(level)) return;
const timestamp = new Date().toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}]`;
console.error(prefix, message, ...args);
}
debug(message: string, ...args: any[]): void {
this.log('debug', message, ...args);
}
info(message: string, ...args: any[]): void {
this.log('info', message, ...args);
}
warn(message: string, ...args: any[]): void {
this.log('warn', message, ...args);
}
error(message: string, ...args: any[]): void {
this.log('error', message, ...args);
}
}
export const logger = new Logger();