mirror of
https://github.com/openshift/openshift-mcp-server.git
synced 2025-10-17 14:27:48 +03:00
refactor: use new AddTools method
This commit is contained in:
@@ -5,13 +5,15 @@ import (
|
||||
"fmt"
|
||||
"github.com/manusa/kubernetes-mcp-server/pkg/kubernetes"
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
)
|
||||
|
||||
func (s *Server) initConfiguration() {
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"configuration_view",
|
||||
mcp.WithDescription("Get the current Kubernetes configuration content as a kubeconfig YAML"),
|
||||
), configurationView)
|
||||
func (s *Server) initConfiguration() []server.ServerTool {
|
||||
return []server.ServerTool{
|
||||
{mcp.NewTool("configuration_view",
|
||||
mcp.WithDescription("Get the current Kubernetes configuration content as a kubeconfig YAML"),
|
||||
), configurationView},
|
||||
}
|
||||
}
|
||||
|
||||
func configurationView(_ context.Context, _ mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"github.com/manusa/kubernetes-mcp-server/pkg/version"
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
"slices"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
@@ -25,9 +26,11 @@ func NewSever() (*Server, error) {
|
||||
if err := s.reloadKubernetesClient(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
s.initConfiguration()
|
||||
s.initPods()
|
||||
s.initResources()
|
||||
s.server.AddTools(slices.Concat(
|
||||
s.initConfiguration(),
|
||||
s.initPods(),
|
||||
s.initResources(),
|
||||
)...)
|
||||
return s, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -5,71 +5,41 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
)
|
||||
|
||||
func (s *Server) initPods() {
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"pods_list",
|
||||
mcp.WithDescription("List all the Kubernetes pods in the current cluster from all namespaces"),
|
||||
), s.podsListInAllNamespaces)
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"pods_list_in_namespace",
|
||||
mcp.WithDescription("List all the Kubernetes pods in the specified namespace in the current cluster"),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Namespace to list pods from"),
|
||||
mcp.Required(),
|
||||
),
|
||||
), s.podsListInNamespace)
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"pods_get",
|
||||
mcp.WithDescription("Get a Kubernetes Pod in the current or provided namespace with the provided name"),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Namespace to get the Pod from"),
|
||||
),
|
||||
mcp.WithString("name",
|
||||
mcp.Description("Name of the Pod"),
|
||||
mcp.Required(),
|
||||
),
|
||||
), s.podsGet)
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"pods_delete",
|
||||
mcp.WithDescription("Delete a Kubernetes Pod in the current or provided namespace with the provided name"),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Namespace to delete the Pod from"),
|
||||
),
|
||||
mcp.WithString("name",
|
||||
mcp.Description("Name of the Pod to delete"),
|
||||
mcp.Required(),
|
||||
),
|
||||
), s.podsDelete)
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"pods_log",
|
||||
mcp.WithDescription("Get the logs of a Kubernetes Pod in the current or provided namespace with the provided name"),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Namespace to get the Pod logs from"),
|
||||
),
|
||||
mcp.WithString("name",
|
||||
mcp.Description("Name of the Pod to get the logs from"),
|
||||
mcp.Required(),
|
||||
),
|
||||
), s.podsLog)
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"pods_run",
|
||||
mcp.WithDescription("Run a Kubernetes Pod in the current or provided namespace with the provided container image and optional name"),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Namespace to run the Pod in"),
|
||||
),
|
||||
mcp.WithString("name",
|
||||
mcp.Description("Name of the Pod (Optional, random name if not provided)"),
|
||||
),
|
||||
mcp.WithString("image",
|
||||
mcp.Description("Container Image to run in the Pod"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithNumber("port",
|
||||
mcp.Description("TCP/IP port to expose from the Pod container (Optional, no port exposed if not provided)"),
|
||||
),
|
||||
), s.podsRun)
|
||||
func (s *Server) initPods() []server.ServerTool {
|
||||
return []server.ServerTool{
|
||||
{mcp.NewTool("pods_list",
|
||||
mcp.WithDescription("List all the Kubernetes pods in the current cluster from all namespaces"),
|
||||
), s.podsListInAllNamespaces},
|
||||
{mcp.NewTool("pods_list_in_namespace",
|
||||
mcp.WithDescription("List all the Kubernetes pods in the specified namespace in the current cluster"),
|
||||
mcp.WithString("namespace", mcp.Description("Namespace to list pods from"), mcp.Required()),
|
||||
), s.podsListInNamespace},
|
||||
{mcp.NewTool("pods_get",
|
||||
mcp.WithDescription("Get a Kubernetes Pod in the current or provided namespace with the provided name"),
|
||||
mcp.WithString("namespace", mcp.Description("Namespace to get the Pod from")),
|
||||
mcp.WithString("name", mcp.Description("Name of the Pod"), mcp.Required()),
|
||||
), s.podsGet},
|
||||
{mcp.NewTool("pods_delete",
|
||||
mcp.WithDescription("Delete a Kubernetes Pod in the current or provided namespace with the provided name"),
|
||||
mcp.WithString("namespace", mcp.Description("Namespace to delete the Pod from")),
|
||||
mcp.WithString("name", mcp.Description("Name of the Pod to delete"), mcp.Required()),
|
||||
), s.podsDelete},
|
||||
{mcp.NewTool("pods_log",
|
||||
mcp.WithDescription("Get the logs of a Kubernetes Pod in the current or provided namespace with the provided name"),
|
||||
mcp.WithString("namespace", mcp.Description("Namespace to get the Pod logs from")),
|
||||
mcp.WithString("name", mcp.Description("Name of the Pod to get the logs from"), mcp.Required()),
|
||||
), s.podsLog},
|
||||
{mcp.NewTool("pods_run",
|
||||
mcp.WithDescription("Run a Kubernetes Pod in the current or provided namespace with the provided container image and optional name"),
|
||||
mcp.WithString("namespace", mcp.Description("Namespace to run the Pod in")),
|
||||
mcp.WithString("name", mcp.Description("Name of the Pod (Optional, random name if not provided)")),
|
||||
mcp.WithString("image", mcp.Description("Container Image to run in the Pod"), mcp.Required()),
|
||||
mcp.WithNumber("port", mcp.Description("TCP/IP port to expose from the Pod container (Optional, no port exposed if not provided)")),
|
||||
), s.podsRun},
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) podsListInAllNamespaces(ctx context.Context, _ mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||
|
||||
@@ -5,71 +5,62 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
)
|
||||
|
||||
func (s *Server) initResources() {
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"resources_list",
|
||||
mcp.WithDescription("List Kubernetes resources in the current cluster by providing their apiVersion and kind and optionally the namespace"),
|
||||
mcp.WithString("apiVersion",
|
||||
mcp.Description("apiVersion of the resources (examples of valid apiVersion are: v1, apps/v1, networking.k8s.io/v1)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("kind",
|
||||
mcp.Description("kind of the resources (examples of valid kind are: Pod, Service, Deployment, Ingress)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Optional Namespace to retrieve the namespaced resources from (ignored in case of cluster scoped resources). If not provided, will list resources from all namespaces"),
|
||||
),
|
||||
), s.resourcesList)
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"resources_get",
|
||||
mcp.WithDescription("Get a Kubernetes resource in the current cluster by providing its apiVersion, kind, optionally the namespace, and its name"),
|
||||
mcp.WithString("apiVersion",
|
||||
mcp.Description("apiVersion of the resource (examples of valid apiVersion are: v1, apps/v1, networking.k8s.io/v1)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("kind",
|
||||
mcp.Description("kind of the resource (examples of valid kind are: Pod, Service, Deployment, Ingress)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Optional Namespace to retrieve the namespaced resource from (ignored in case of cluster scoped resources). If not provided, will get resource from configured namespace"),
|
||||
),
|
||||
mcp.WithString("name",
|
||||
mcp.Description("Name of the resource"),
|
||||
mcp.Required(),
|
||||
),
|
||||
), s.resourcesGet)
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"resources_create_or_update",
|
||||
mcp.WithDescription("Create or update a Kubernetes resource in the current cluster by providing a YAML or JSON representation of the resource"),
|
||||
mcp.WithString("resource",
|
||||
mcp.Description("A JSON or YAML containing a representation of the Kubernetes resource. Should include top-level fields such as apiVersion,kind,metadata, and spec"),
|
||||
mcp.Required(),
|
||||
),
|
||||
), s.resourcesCreateOrUpdate)
|
||||
s.server.AddTool(mcp.NewTool(
|
||||
"resources_delete",
|
||||
mcp.WithDescription("Delete a Kubernetes resource in the current cluster by providing its apiVersion, kind, optionally the namespace, and its name"),
|
||||
mcp.WithString("apiVersion",
|
||||
mcp.Description("apiVersion of the resource (examples of valid apiVersion are: v1, apps/v1, networking.k8s.io/v1)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("kind",
|
||||
mcp.Description("kind of the resource (examples of valid kind are: Pod, Service, Deployment, Ingress)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Optional Namespace to delete the namespaced resource from (ignored in case of cluster scoped resources). If not provided, will delete resource from configured namespace"),
|
||||
),
|
||||
mcp.WithString("name",
|
||||
mcp.Description("Name of the resource"),
|
||||
mcp.Required(),
|
||||
),
|
||||
), s.resourcesDelete)
|
||||
func (s *Server) initResources() []server.ServerTool {
|
||||
return []server.ServerTool{
|
||||
{mcp.NewTool("resources_list",
|
||||
mcp.WithDescription("List Kubernetes resources in the current cluster by providing their apiVersion and kind and optionally the namespace"),
|
||||
mcp.WithString("apiVersion",
|
||||
mcp.Description("apiVersion of the resources (examples of valid apiVersion are: v1, apps/v1, networking.k8s.io/v1)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("kind",
|
||||
mcp.Description("kind of the resources (examples of valid kind are: Pod, Service, Deployment, Ingress)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Optional Namespace to retrieve the namespaced resources from (ignored in case of cluster scoped resources). If not provided, will list resources from all namespaces"))), s.resourcesList},
|
||||
{mcp.NewTool("resources_get",
|
||||
mcp.WithDescription("Get a Kubernetes resource in the current cluster by providing its apiVersion, kind, optionally the namespace, and its name"),
|
||||
mcp.WithString("apiVersion",
|
||||
mcp.Description("apiVersion of the resource (examples of valid apiVersion are: v1, apps/v1, networking.k8s.io/v1)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("kind",
|
||||
mcp.Description("kind of the resource (examples of valid kind are: Pod, Service, Deployment, Ingress)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Optional Namespace to retrieve the namespaced resource from (ignored in case of cluster scoped resources). If not provided, will get resource from configured namespace"),
|
||||
),
|
||||
mcp.WithString("name", mcp.Description("Name of the resource"), mcp.Required()),
|
||||
), s.resourcesGet},
|
||||
{mcp.NewTool("resources_create_or_update",
|
||||
mcp.WithDescription("Create or update a Kubernetes resource in the current cluster by providing a YAML or JSON representation of the resource"),
|
||||
mcp.WithString("resource",
|
||||
mcp.Description("A JSON or YAML containing a representation of the Kubernetes resource. Should include top-level fields such as apiVersion,kind,metadata, and spec"),
|
||||
mcp.Required(),
|
||||
),
|
||||
), s.resourcesCreateOrUpdate},
|
||||
{mcp.NewTool("resources_delete",
|
||||
mcp.WithDescription("Delete a Kubernetes resource in the current cluster by providing its apiVersion, kind, optionally the namespace, and its name"),
|
||||
mcp.WithString("apiVersion",
|
||||
mcp.Description("apiVersion of the resource (examples of valid apiVersion are: v1, apps/v1, networking.k8s.io/v1)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("kind",
|
||||
mcp.Description("kind of the resource (examples of valid kind are: Pod, Service, Deployment, Ingress)"),
|
||||
mcp.Required(),
|
||||
),
|
||||
mcp.WithString("namespace",
|
||||
mcp.Description("Optional Namespace to delete the namespaced resource from (ignored in case of cluster scoped resources). If not provided, will delete resource from configured namespace"),
|
||||
),
|
||||
mcp.WithString("name", mcp.Description("Name of the resource"), mcp.Required()),
|
||||
), s.resourcesDelete},
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) resourcesList(ctx context.Context, ctr mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||
|
||||
Reference in New Issue
Block a user