package mcp import ( "time" "github.com/mark3labs/mcp-go/server" ) // ServerConfig holds configuration for the MCP server. type ServerConfig struct { NATSUrl string NKeyFile string EnableAdmin bool AdminNKeyFile string DiscoverSubject string Timeout time.Duration } // Server wraps the MCP server. type Server struct { cfg ServerConfig server *server.MCPServer } // New creates a new MCP server. func New(cfg ServerConfig) *Server { s := server.NewMCPServer( "homelab-deploy", "0.1.0", server.WithToolCapabilities(true), ) handler := NewToolHandler(ToolConfig{ NATSUrl: cfg.NATSUrl, NKeyFile: cfg.NKeyFile, AdminNKeyFile: cfg.AdminNKeyFile, DiscoverSubject: cfg.DiscoverSubject, Timeout: cfg.Timeout, }) // Register deploy tool (test-tier only) s.AddTool(DeployTool(), handler.HandleDeploy) // Register list_hosts tool s.AddTool(ListHostsTool(), handler.HandleListHosts) // Optionally register admin deploy tool if cfg.EnableAdmin { s.AddTool(DeployAdminTool(), handler.HandleDeployAdmin) } return &Server{ cfg: cfg, server: s, } } // Run starts the MCP server and blocks until completed. func (s *Server) Run() error { return server.ServeStdio(s.server) }