Skip to main content
Glama

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

Related MCP server: MCP Server

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/reza-gholizade/k8s-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server