Kubernetes MCP
Un servidor MCP de solo lectura para recuperar información y diagnosticar problemas en clústeres de Kubernetes.
Documentación
k8s-mcp
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.
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
dependenciesenpyproject.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:
- Archivo Kubeconfig: Usa tu archivo kubeconfig local (normalmente ubicado en
~/.kube/config) - 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 namespacefailed_pods(): Lista todos los pods en estado Failed o Errorpending_pods(): Lista todos los pods en estado Pending con razoneshigh_restart_pods(restart_threshold=5): Encuentra pods con contadores de reinicio por encima del umbral
Nodos
list_nodes(): Lista todos los nodos y su estadonode_capacity(): Muestra la capacidad disponible en todos los nodos
Deployments y Servicios
list_deployments(namespace=None): Lista todos los deploymentslist_services(namespace=None): Lista todos los servicioslist_events(namespace=None): Lista todos los eventos
Gestión de recursos
orphaned_resources(): Lista recursos sin referencias de propietarioget_resource_yaml(namespace, resource_type, resource_name): Obtén la configuración YAML para un recurso específico
Licencia
Contribuciones
¡Las contribuciones son bienvenidas! No dudes en enviar un Pull Request.