MCP Code Analyzer

import logging import sys from pathlib import Path class LogManager: """Centralized logging manager for MCP""" def __init__(self, log_dir: str = None): self.log_dir = Path(log_dir) if log_dir else Path.cwd() / "logs" self.log_dir.mkdir(parents=True, exist_ok=True) self.main_log = self.log_dir / "mcp_server.log" self.tool_log = self.log_dir / "mcp_tools.log" self._setup_logging() def _setup_logging(self): main_formatter = logging.Formatter( '%(asctime)s - %(levelname)s - [%(name)s] - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) tool_formatter = logging.Formatter( '%(asctime)s - %(levelname)s - [%(tool_name)s] - %(operation)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) main_handler = logging.FileHandler(self.main_log, encoding='utf-8') main_handler.setFormatter(main_formatter) tool_handler = logging.FileHandler(self.tool_log, encoding='utf-8') tool_handler.setFormatter(tool_formatter) console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(main_formatter) # Root logger setup root_logger = logging.getLogger() root_logger.setLevel(logging.INFO) root_logger.addHandler(main_handler) root_logger.addHandler(console_handler) # Tool logger setup tool_logger = logging.getLogger('mcp.tools') tool_logger.setLevel(logging.INFO) tool_logger.addHandler(tool_handler) def log_tool_operation(self, tool_name: str, operation: str, message: str, level: str = 'INFO', **kwargs): logger = logging.getLogger('mcp.tools') extra = { 'tool_name': tool_name, 'operation': operation } if kwargs: message = f"{message} - {kwargs}" if level.upper() == 'ERROR': logger.error(message, extra=extra) elif level.upper() == 'WARNING': logger.warning(message, extra=extra) else: logger.info(message, extra=extra) def log_server_operation(self, message: str, level: str = 'INFO', **kwargs): logger = logging.getLogger('mcp.server') if kwargs: message = f"{message} - {kwargs}" if level.upper() == 'ERROR': logger.error(message) elif level.upper() == 'WARNING': logger.warning(message) else: logger.info(message)