@edicarlos.lds/businessmap-mcp
Version:
Model Context Protocol server for BusinessMap (Kanbanize) integration
81 lines âĸ 2.53 kB
JavaScript
/**
* Logger utility for MCP servers
*
* MCP servers MUST use STDERR for all logging to avoid corrupting
* the JSON-RPC protocol which uses STDOUT exclusively.
*
* This logger provides different log levels while ensuring all output
* goes to STDERR (process.stderr.write or console.error).
*/
export var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
LogLevel[LogLevel["INFO"] = 1] = "INFO";
LogLevel[LogLevel["WARN"] = 2] = "WARN";
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
LogLevel[LogLevel["NONE"] = 4] = "NONE";
})(LogLevel || (LogLevel = {}));
class Logger {
currentLevel;
constructor(level = LogLevel.INFO) {
this.currentLevel = level;
}
setLevel(level) {
this.currentLevel = level;
}
/**
* Debug messages for development and troubleshooting
*/
debug(message, ...args) {
if (this.currentLevel <= LogLevel.DEBUG) {
this.log('đ DEBUG', message, ...args);
}
}
/**
* Informational messages (successful operations, status updates)
*/
info(message, ...args) {
if (this.currentLevel <= LogLevel.INFO) {
this.log('âšī¸ INFO', message, ...args);
}
}
/**
* Warning messages (non-critical issues, fallbacks)
*/
warn(message, ...args) {
if (this.currentLevel <= LogLevel.WARN) {
this.log('â ī¸ WARN', message, ...args);
}
}
/**
* Error messages (failures, exceptions)
*/
error(message, ...args) {
if (this.currentLevel <= LogLevel.ERROR) {
this.log('â ERROR', message, ...args);
}
}
/**
* Success messages (operations completed successfully)
*/
success(message, ...args) {
if (this.currentLevel <= LogLevel.INFO) {
this.log('â
SUCCESS', message, ...args);
}
}
log(prefix, message, ...args) {
// CRITICAL: Always use STDERR for MCP servers
// STDOUT is reserved for JSON-RPC protocol only
const timestamp = new Date().toISOString();
const formattedMessage = `[${timestamp}] ${prefix}: ${message}`;
if (args.length > 0) {
console.error(formattedMessage, ...args);
}
else {
console.error(formattedMessage);
}
}
}
// Export singleton instance
export const logger = new Logger(process.env.LOG_LEVEL ? Number.parseInt(process.env.LOG_LEVEL) : LogLevel.INFO);
//# sourceMappingURL=logger.js.map