UNPKG

mcp-use

Version:

A utility library for integrating Model Context Protocol (MCP) with LangChain, Zod, and related tools. Provides helpers for schema conversion, event streaming, and SDK usage.

60 lines (59 loc) 1.97 kB
import fs from 'node:fs'; import path from 'node:path'; import { createLogger, format, transports } from 'winston'; const { combine, timestamp, label, printf } = format; let MCP_USE_DEBUG = 0; const debugEnv = process.env.DEBUG?.toLowerCase(); if (debugEnv === '2') { MCP_USE_DEBUG = 2; } else if (debugEnv === '1') { MCP_USE_DEBUG = 1; } const defaultFormat = printf(({ level, message, label, timestamp }) => `${timestamp} [${label}] ${level.toUpperCase()}: ${message}`); export class Logger { static loggers = {}; static getLogger(name = 'mcp_use') { if (!this.loggers[name]) { this.loggers[name] = createLogger({ level: 'warn', format: combine(label({ label: name }), timestamp(), defaultFormat), transports: [], }); } return this.loggers[name]; } static configure(level, toConsole = true, toFile) { const root = this.getLogger(); if (!level) { level = MCP_USE_DEBUG === 2 ? 'debug' : MCP_USE_DEBUG === 1 ? 'info' : 'warn'; } root.level = level; root.clear(); if (toConsole) { root.add(new transports.Console()); } if (toFile) { const dir = path.dirname(toFile); if (dir && !fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } root.add(new transports.File({ filename: toFile })); } } static setDebug(debugLevel = 2) { MCP_USE_DEBUG = debugLevel; process.env.LANGCHAIN_VERBOSE = debugLevel >= 1 ? 'true' : 'false'; const newLevel = debugLevel === 2 ? 'debug' : debugLevel === 1 ? 'info' : 'warn'; Object.values(this.loggers).forEach((log) => { log.level = newLevel; }); } } Logger.configure(); export const logger = Logger.getLogger();