Skip to main content
Glama
logger.ts2.4 kB
import { Server } from "@modelcontextprotocol/sdk/server/index.js"; type LogLevel = | "debug" | "info" | "notice" | "warning" | "error" | "critical" | "alert" | "emergency"; const isDebugMode = process.env.MINDPILOT_DEBUG === "true" || process.argv.includes("--debug"); /** * MCP-compliant logger that works for all subsystems. * - When MCP server is available: sends logs through MCP protocol * - Otherwise: writes to stderr (never stdout to avoid protocol contamination) */ class MCPLogger { private mcpServer?: Server; private name: string; private debugMode: boolean; constructor(name: string) { this.name = name; this.debugMode = isDebugMode; } setMcpServer(server: Server) { this.mcpServer = server; } private log(level: LogLevel, message: string, metadata?: any) { const timestamp = new Date().toISOString(); if (this.mcpServer) { // Send through MCP protocol this.mcpServer .sendLoggingMessage({ level, logger: this.name, data: metadata ? { message, ...metadata } : message, }) .catch((err) => { // Fallback to stderr if MCP logging fails console.error( `[${timestamp}] [${this.name}] [${level}] ${message}`, metadata || "", ); }); } else { // Write to stderr (never stdout!) const logMessage = metadata ? `[${timestamp}] [${this.name}] [${level}] ${message} ${JSON.stringify(metadata)}` : `[${timestamp}] [${this.name}] [${level}] ${message}`; console.error(logMessage); } } debug(message: string, metadata?: any) { if (this.debugMode) { this.log("debug", message, metadata); } } info(message: string, metadata?: any) { this.log("info", message, metadata); } warn(message: string, metadata?: any) { this.log("warning", message, metadata); } error(message: string, metadata?: any) { this.log("error", message, metadata); } critical(message: string, metadata?: any) { this.log("critical", message, metadata); } } // Create logger instances for different subsystems export const httpLogger = new MCPLogger("http-server"); export const mcpLogger = new MCPLogger("mcp-client"); // Log debug mode status if (isDebugMode) { httpLogger.info("Debug mode enabled"); mcpLogger.info("Debug mode enabled"); }

Latest Blog Posts

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/abrinsmead/mindpilot-mcp'

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