k8s-mcp-server

Integrations

  • Provides a comprehensive interface for managing Kubernetes clusters, including resource discovery, listing, detailed inspection, log retrieval, metrics collection, event tracking, and resource creation through a standardized MCP protocol.

  • Supports creation of Kubernetes resources from YAML manifests, enabling deployment of complex resources through the createorUpdateResource tool.

Servidor MCP de Kubernetes

Un servidor de Protocolo de contexto de modelo (MCP) de Kubernetes que proporciona herramientas para interactuar con clústeres de Kubernetes a través de una interfaz estandarizada.

Características

  • Descubrimiento de recursos de API : obtenga todos los recursos de API disponibles en su clúster de Kubernetes
  • Listado de recursos : enumera recursos de cualquier tipo con filtrado de etiquetas y espacios de nombres opcional
  • Detalles del recurso : obtenga información detallada sobre recursos específicos de Kubernetes
  • Descripción del recurso : Obtenga descripciones completas de los recursos de Kubernetes
  • Registros de pods : recupera registros de pods específicos
  • Métricas de nodo : obtenga métricas de uso de recursos para nodos específicos
  • Métricas de pod : obtenga métricas de CPU y memoria para pods específicos
  • Listado de eventos : enumera eventos dentro de un espacio de nombres o para un recurso específico.
  • Creación de recursos : crea nuevos recursos de Kubernetes a partir de un manifiesto.
  • Interfaz estandarizada : utiliza el protocolo MCP para una interacción consistente con las herramientas
  • Configuración flexible : admite diferentes contextos de Kubernetes y alcances de recursos

Prerrequisitos

  • Vaya a 1.20 o posterior
  • Acceso a un clúster de Kubernetes
  • kubectl configurado con acceso de clúster apropiado

Instalación

  1. Clonar el repositorio:
git clone https://github.com/reza-gholizade/k8s-mcp-server.git cd k8s-mcp-server
  1. Instalar dependencias:
go mod download
  1. Construir el servidor:
go build -o k8s-mcp-server main.go

Uso

Iniciando el servidor

Ejecutar el servidor:

./k8s-mcp-server

El servidor se iniciará y escuchará en stdin/stdout los mensajes del protocolo MCP.

Herramientas disponibles

1. getAPIResources

Recupera todos los recursos de API disponibles en el clúster de Kubernetes.

Parámetros:

  • includeNamespaceScoped (booleano): si se deben incluir recursos con alcance de espacio de nombres (el valor predeterminado es verdadero)
  • includeClusterScoped (booleano): si se deben incluir recursos con alcance de clúster (el valor predeterminado es verdadero)

Ejemplo:

{ "jsonrpc": "2.0", "id": 1, "method": "getAPIResources", "params": { "arguments": { "includeNamespaceScoped": true, "includeClusterScoped": true } } }
2. listResources

Enumera todas las instancias de un tipo de recurso específico.

Parámetros:

  • Kind (cadena, obligatoria): el tipo de recurso a enumerar (por ejemplo, "Pod", "Implementación")
  • namespace (cadena): el espacio de nombres del cual se listarán los recursos (si se omite, se listan todos los espacios de nombres para los recursos con espacios de nombres)
  • labelSelector (cadena): Filtrar recursos por selector de etiquetas

Ejemplo:

{ "jsonrpc": "2.0", "id": 1, "method": "listResources", "params": { "arguments": { "Kind": "Pod", "namespace": "default", "labelSelector": "app=nginx" } } }
3. getResource

Recupera información detallada sobre un recurso específico.

Parámetros:

  • kind (cadena, obligatorio): el tipo de recurso a obtener (por ejemplo, "Pod", "Implementación")
  • name (cadena, obligatorio): el nombre del recurso a obtener
  • namespace (cadena): el espacio de nombres del recurso (si es un recurso con espacio de nombres)

Ejemplo:

{ "jsonrpc": "2.0", "id": 1, "method": "getResource", "params": { "arguments": { "kind": "Pod", "name": "nginx-pod", "namespace": "default" } } }
4. describeResource

Describe un recurso en el clúster de Kubernetes según el tipo y nombre determinados, similar a kubectl describe .

Parámetros:

  • Kind (cadena, obligatoria): el tipo de recurso a describir (por ejemplo, "Pod", "Implementación")
  • name (cadena, obligatoria): el nombre del recurso a describir
  • namespace (cadena): el espacio de nombres del recurso (si es un recurso con espacio de nombres)

Ejemplo:

{ "jsonrpc": "2.0", "id": 1, "method": "describeResource", "params": { "arguments": { "Kind": "Pod", "name": "nginx-pod", "namespace": "default" } } }
5. getPodsLogs

Recupera los registros de un pod específico en el clúster de Kubernetes.

Parámetros:

  • Name (cadena, obligatoria): el nombre del pod del que se obtendrán los registros.
  • namespace (cadena): el espacio de nombres del pod (si es un recurso con espacio de nombres).

Ejemplo:

{ "jsonrpc": "2.0", "id": 1, "method": "getPodsLogs", "params": { "arguments": { "Name": "my-app-pod-12345", "namespace": "production" } } }
6. getNodeMetrics

Recupera métricas de uso de recursos para un nodo específico en el clúster de Kubernetes.

Parámetros:

  • Name (cadena, obligatoria): el nombre del nodo del que se obtendrán las métricas.

Ejemplo:

{ "jsonrpc": "2.0", "id": 1, "method": "getNodeMetrics", "params": { "arguments": { "Name": "worker-node-1" } } }
7. getPodMetrics

Recupera métricas de CPU y memoria para un pod específico en el clúster de Kubernetes.

Parámetros:

  • namespace (cadena, obligatoria): el espacio de nombres del pod.
  • podName (cadena, obligatoria): el nombre del pod.

Ejemplo:

{ "jsonrpc": "2.0", "id": 1, "method": "getPodMetrics", "params": { "arguments": { "namespace": "default", "podName": "my-app-pod-67890" } } }
8. getEvents

Recupera eventos para un espacio de nombres o recurso específico en el clúster de Kubernetes.

Parámetros:

  • namespace (cadena): El espacio de nombres del que se obtienen los eventos. Si se omite, se consideran los eventos de todos los espacios de nombres (si RBAC lo permite).
  • resourceName (cadena): el nombre de un recurso específico (por ejemplo, un nombre de Pod) para filtrar eventos.
  • resourceKind (cadena): el tipo de recurso específico (por ejemplo, "Pod") si se proporciona resourceName .

Ejemplo (eventos de espacio de nombres):

{ "jsonrpc": "2.0", "id": 1, "method": "getEvents", "params": { "arguments": { "namespace": "default" } } }

Ejemplo (eventos de recursos):

{ "jsonrpc": "2.0", "id": 1, "method": "getEvents", "params": { "arguments": { "namespace": "production", "resourceName": "my-app-pod-12345", "resourceKind": "Pod" } } }
9. createorUpdateResource

Crea un nuevo recurso en el clúster de Kubernetes a partir de un manifiesto YAML o JSON.

Parámetros:

  • manifest (cadena, obligatorio): el manifiesto YAML o JSON del recurso a crear.
  • namespace (cadena, opcional): El espacio de nombres donde se creará el recurso. Si el manifiesto contiene un espacio de nombres, este parámetro puede omitirse o usarse para sobrescribirlo (el comportamiento puede depender de la implementación del servidor).

Ejemplo:

{ "jsonrpc": "2.0", "id": 1, "method": "createResource", "params": { "arguments": { "namespace": "default", "manifest": "apiVersion: v1\nkind: Pod\nmetadata:\n name: my-new-pod\nspec:\n containers:\n - name: nginx\n image: nginx:latest" } } }

Desarrollo

Estructura del proyecto

. ├── handlers/ # Tool handlers │ └── handlers.go # Implementation of MCP tools ├── pkg/ # Internal packages │ └── k8s/ # Kubernetes client implementation ├── main.go # Server entry point ├── go.mod # Go module definition └── go.sum # Go module checksums

Agregar nuevas herramientas

Para agregar una nueva herramienta:

  1. Cree una nueva función de definición de herramienta (por ejemplo, MyNewTool() mcp.Tool ) en handlers/handlers.go
  2. Implementar la función del controlador de herramientas (por ejemplo, MyNewHandler(client *k8s.Client) func(...) ) en handlers/handlers.go
  3. Registre la herramienta y su controlador en main.go usando s.AddTool()

Contribuyendo

¡Agradecemos sus contribuciones! Consulte CONTRIBUTING.md para obtener más información sobre cómo contribuir a este proyecto.

Licencia

gholizade.net@gmail.com

Este proyecto está licenciado bajo la licencia MIT: consulte el archivo de LICENCIA para obtener más detalles.

-
security - not tested
A
license - permissive license
-
quality - not tested

local-only server

The server can only run on the client's local machine because it depends on local resources.

Un servidor de Protocolo de contexto de modelo (MCP) de Kubernetes que proporciona herramientas para interactuar con clústeres de Kubernetes a través de una interfaz estandarizada.

  1. Características
    1. Prerrequisitos
      1. Instalación
        1. Uso
          1. Iniciando el servidor
          2. Herramientas disponibles
        2. Desarrollo
          1. Estructura del proyecto
          2. Agregar nuevas herramientas
        3. Contribuyendo
          1. Licencia

            Related MCP Servers

            • -
              security
              A
              license
              -
              quality
              This project is intended as a both MCP server connecting to Kubernetes and a library to build more servers for any custom resources in Kubernetes.
              Last updated -
              267
              Go
              MIT License
              • Linux
              • Apple

            View all related MCP servers

            ID: 3a39wbpiwp