main.goβ’1.96 kB
package main
import (
"context"
"flag"
"fmt"
"os"
"github.com/sirupsen/logrus"
"mcp-k8swizard/internal/config"
"mcp-k8swizard/internal/server"
)
const version = "1.0.0"
func main() {
// Parse command line flags
var (
logLevel = flag.String("log-level", "", "Set log level (DEBUG, INFO, WARN, ERROR)")
verbose = flag.Bool("verbose", false, "Enable verbose logging (equivalent to DEBUG level)")
versionFlag = flag.Bool("version", false, "Show version information")
help = flag.Bool("help", false, "Show help information")
)
flag.Parse()
// Handle version flag
if *versionFlag {
fmt.Printf("MCP-K8sWizard v%s\n", version)
return
}
// Handle help flag
if *help {
server.PrintHelp()
return
}
// Load configuration
cfg := config.DefaultConfig()
cfg.LoadFromEnv()
// Override log level from command line flags
if *verbose {
cfg.LogLevel = logrus.DebugLevel
} else if *logLevel != "" {
cfg.LogLevel = config.ParseLogLevel(*logLevel)
}
// Setup logging
if err := config.Setup(cfg.LogLevel, cfg.LogFile); err != nil {
logrus.Errorf("Failed to setup logging: %v", err)
os.Exit(1)
}
// Log startup information
logrus.WithFields(logrus.Fields{
"version": version,
"log_level": cfg.LogLevel.String(),
"log_file": cfg.LogFile,
"kubeconfig": cfg.KubeConfig,
"k8s_context": cfg.K8sContext,
}).Info("Starting MCP-K8sWizard")
// Create and initialize server
srv := server.NewServer(version)
// Initialize contexts
if err := srv.InitializeContexts(); err != nil {
logrus.Warnf("Failed to initialize contexts: %v", err)
}
// Register all tools
srv.RegisterTools()
// Add global panic recovery
defer func() {
if r := recover(); r != nil {
logrus.Errorf("Fatal panic in MCP server: %v", r)
os.Exit(1)
}
}()
// Run the server
ctx := context.Background()
if err := srv.Run(ctx); err != nil {
logrus.Errorf("Server failed: %v", err)
os.Exit(1)
}
}