package mcp import ( "context" "fmt" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" "github.com/containers/kubernetes-mcp-server/pkg/output" ) func (s *Server) initConfiguration() []server.ServerTool { tools := []server.ServerTool{ {Tool: mcp.NewTool("configuration_view", mcp.WithDescription("Get the current Kubernetes configuration content as a kubeconfig YAML"), mcp.WithBoolean("minified", mcp.Description("Return a minified version of the configuration. "+ "If set to true, keeps only the current-context and the relevant pieces of the configuration for that context. "+ "If set to false, all contexts, clusters, auth-infos, and users are returned in the configuration. "+ "(Optional, default true)")), // Tool annotations mcp.WithTitleAnnotation("Configuration: View"), mcp.WithReadOnlyHintAnnotation(true), mcp.WithDestructiveHintAnnotation(false), mcp.WithOpenWorldHintAnnotation(true), ), Handler: s.configurationView}, } return tools } func (s *Server) configurationView(_ context.Context, ctr mcp.CallToolRequest) (*mcp.CallToolResult, error) { minify := true minified := ctr.GetArguments()["minified"] if _, ok := minified.(bool); ok { minify = minified.(bool) } ret, err := s.k.ConfigurationView(minify) if err != nil { return NewTextResult("", fmt.Errorf("failed to get configuration: %v", err)), nil } configurationYaml, err := output.MarshalYaml(ret) if err != nil { err = fmt.Errorf("failed to get configuration: %v", err) } return NewTextResult(configurationYaml, err), nil }