Kubernetes MCP

Un servidor MCP de solo lectura para recuperar información y diagnosticar problemas en clústeres de Kubernetes.

Documentación

Allseer Logo

k8s-mcp

smithery badge

Un servidor de Python, de solo lectura, Model Context Protocol (MCP) para clústeres de Kubernetes que expone una API completa para recuperar información del clúster y diagnosticar problemas.

Ejemplo de chat usando Claude

Instalación

Requisitos previos

  • Python 3.8+
  • Acceso a un clúster de Kubernetes (mediante kubeconfig o configuración dentro del clúster)
  • Paquetes de Python requeridos (ver dependencies en pyproject.toml)
  • uv - https://github.com/astral-sh/uv
# To install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone the repository
git clone git@github.com:vlttnv/k8s-mcp.git
cd k8s-mcp

# Install dependencies
uv venv
source .venv/bin/activate
uv sync

Si usas Claude, configura la aplicación de escritorio de Claude en ~/Library/Application Support/Claude/claude_desktop_config.json con un editor de texto. Asegúrate de crear el archivo si no existe.

code ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
    "mcpServers": {
        "k8s-mcp": {
            "command": "uv",
            "args": [
                "--directory",
                "/ABSOLUTE/PATH/TO/PARENT/FOLDER/k8s-mcp",
                "run",
                "server.py"
            ]
        }
    }
}

Es posible que necesites poner la ruta completa al ejecutable de uv en el campo de comando. Puedes obtenerla ejecutando which uv en MacOS/Linux o where uv en Windows.

Configuración

La aplicación intenta automáticamente dos métodos para conectarse a tu clúster de Kubernetes:

  1. Archivo Kubeconfig: Usa tu archivo kubeconfig local (normalmente ubicado en ~/.kube/config)
  2. Configuración dentro del clúster: Si se ejecuta dentro de un pod de Kubernetes, usa el token de la cuenta de servicio

No se requiere configuración adicional si tu kubeconfig está configurado correctamente o si te estás ejecutando dentro de un clúster con permisos RBAC adecuados.

Uso

Ejemplos

Aquí hay algunos ejemplos de indicaciones útiles que puedes pedirle a Claude sobre tu clúster de Kubernetes y sus recursos:

Estado general del clúster

  • "¿Cuál es la salud general de mi clúster?"
  • "Muéstrame todos los namespaces en mi clúster"
  • "¿Qué nodos están disponibles en mi clúster y cuál es su estado?"
  • "¿Cómo es la utilización de recursos en mis nodos?"

Pods y despliegues

  • "Lista todos los pods en el namespace de producción"
  • "¿Hay algún pod en estado CrashLoopBackOff?"
  • "Muéstrame pods con altos contadores de reinicios"
  • "Lista todos los deployments en todos los namespaces"
  • "¿Qué deployments están fallando en progresar?"

Depuración de problemas

  • "¿Por qué está fallando mi pod en el namespace de staging?"
  • "Obtén la configuración YAML para el servicio en el namespace de producción"
  • "Muéstrame eventos recientes en el namespace default"
  • "¿Hay algún pod atascado en estado Pending?"
  • "¿Qué está causando errores ImagePullBackOff en mi clúster?"

Gestión de recursos

  • "Muéstrame el consumo de recursos de los nodos en mi clúster"
  • "¿Hay algún recurso huérfano que deba limpiar?"
  • "Lista todos los servicios en el namespace de producción"
  • "Compara las solicitudes de recursos entre staging y producción"

Inspección de recursos específicos

  • "Muéstrame la configuración del deployment coredns en kube-system"
  • "Obtén detalles del servicio reverse-proxy en staging"
  • "¿Qué contenedores se están ejecutando en el pod xyz?"
  • "Muéstrame los registros del pod que falla"

Referencia de la API

Namespaces

  • get_namespaces(): Lista todos los namespaces disponibles en el clúster

Pods

  • list_pods(namespace=None): Lista todos los pods, opcionalmente filtrados por namespace
  • failed_pods(): Lista todos los pods en estado Failed o Error
  • pending_pods(): Lista todos los pods en estado Pending con razones
  • high_restart_pods(restart_threshold=5): Encuentra pods con contadores de reinicio por encima del umbral

Nodos

  • list_nodes(): Lista todos los nodos y su estado
  • node_capacity(): Muestra la capacidad disponible en todos los nodos

Deployments y Servicios

  • list_deployments(namespace=None): Lista todos los deployments
  • list_services(namespace=None): Lista todos los servicios
  • list_events(namespace=None): Lista todos los eventos

Gestión de recursos

  • orphaned_resources(): Lista recursos sin referencias de propietario
  • get_resource_yaml(namespace, resource_type, resource_name): Obtén la configuración YAML para un recurso específico

Licencia

Licencia MIT

Contribuciones

¡Las contribuciones son bienvenidas! No dudes en enviar un Pull Request.