mirror of
https://github.com/containers/kubernetes-mcp-server.git
synced 2025-10-23 01:22:57 +03:00
47 lines
1.5 KiB
Go
47 lines
1.5 KiB
Go
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
|
|
}
|