package mcp import ( "net/http" "github.com/mark3labs/mcp-go/server" "spark-mcp-go/internal/mcp/tools" ) // NewServer builds the MCP server with all configured Tools. func NewServer(deps *tools.Deps) *server.MCPServer { s := server.NewMCPServer("spark-mcp-go", "0.0.0", server.WithToolCapabilities(false), server.WithRecovery(), server.WithLogging(), ) s.AddTool(tools.NewListClustersTool(), deps.ListClustersHandler) s.AddTool(tools.NewSparkSubmitTool(), deps.SparkSubmitHandler) s.AddTool(tools.NewListApplicationsTool(), deps.ListApplicationsHandler) s.AddTool(tools.NewGetApplicationStatusTool(), deps.GetApplicationStatusHandler) s.AddTool(tools.NewGetApplicationLogsTool(), deps.GetApplicationLogsHandler) s.AddTool(tools.NewKillApplicationTool(), deps.KillApplicationHandler) s.AddTool(tools.NewFetchURLTool(), deps.FetchURLHandler) s.AddTool(tools.NewUploadFileTool(), deps.UploadFileHandler) s.AddTool(tools.NewFetchSparkMetricsTool(), deps.FetchSparkMetricsHandler) s.AddTool(tools.NewFetchClusterEnvTool(), deps.FetchClusterEnvHandler) s.AddTool(tools.NewAnalyzeSparkLogTool(), deps.AnalyzeSparkLogHandler) return s } // Handler exposes the MCP server as an http.Handler for main.go to mount. func Handler(deps *tools.Deps) (http.Handler, error) { s := NewServer(deps) return server.NewStreamableHTTPServer(s), nil }