Servidor MCP Kubernetes
https://github.com/user-attachments/assets/89df70b0-65d1-461c-b4ab-84b2087136fa
Un servidor de Protocolo de Contexto de Modelo (MCP) que proporciona acceso seguro y de solo lectura a los recursos de Kubernetes para depuración e inspección. Construido pensando en la seguridad, ofrece una visibilidad completa del clúster sin capacidad de modificación.
Características
- 🔒Seguridad desolo lectura: Inspeccione de forma segura los recursos de Kubernetes sin capacidades de modificación
- 🎯 Compatibilidad con CRD: Funciona sin problemas con cualquier Custom Resource Definitions en su clúster
- 🌐 Compatibilidad con varios clústeres: Cambia entre diferentes contextos de Kubernetes sin problemas
- 🔍Descubrimiento inteligente: Encuentre recursos por subcadena de grupo de API (por ejemplo, "flux" para FluxCD, "argo" para ArgoCD)
- ⚡Alto rendimiento: Consulta eficiente de recursos con filtrado y paginación
- 🛠️ Completo conjunto de herramientas
list_resources
: Enumera y filtra los recursos de Kubernetes con opciones avanzadasdescribe_resource
: Obtenga información detallada sobre recursos específicosget_pod_logs
: Recupera los registros del pod con sofisticadas capacidades de filtradolist_events
: Enumera y filtra eventos de Kubernetes para depuración y monitorizaciónlist_contexts
: Lista todos los contextos de Kubernetes disponibles en kubeconfig
inicio rápido
Requisitos previos
- Acceso al clúster Kubernetes con un archivo kubeconfig válido
- Go 1.24+ (para construir desde el código fuente)
Opciones de instalación
Opción 1: Instalar con Go (recomendado)
go install github.com/kkb0318/kubernetes-mcp@latest
El binario estará disponible en $GOPATH/bin/kubernetes-mcp
(o $HOME/go/bin/kubernetes-mcp
si GOPATH
no está configurado).
Opción 2: Compilar desde el código fuente
git clone https://github.com/kkb0318/kubernetes-mcp.git cd kubernetes-mcp go build -o kubernetes-mcp
⚙️ Configuración
Configuración del servidor MCP
Añada el servidor a su configuración MCP:
Configuración básica
Utiliza ~/.kube/config
automáticamente:
{ "mcpServers": { "kubernetes": { "command": "/path/to/kubernetes-mcp" } }
Kubeconfig personalizado
{ "mcpServers": { "kubernetes": { "command": "/path/to/kubernetes-mcp", "env": { "KUBECONFIG": "/ruta/a/tu/kubeconfig" } } }
Nota: Sustituya
/ruta/a/kubernetes-mcp
por su ruta binaria real.
Uso autónomo
# Kubeconfig por defecto (~/.kube/config) ./kubernetes-mcp KUBECONFIG=/ruta/su/kubeconfig ./kubernetes-mcp
Importante: Asegúrese de que dispone de los permisos de lectura adecuados para los recursos de Kubernetes que desea inspeccionar.
🛠️ Herramientas disponibles
list_resources
Enumere y filtre los recursos de Kubernetes con funciones avanzadas.
Parámetro | Tipo | Descripción |
---|---|---|
contexto | opcional | Nombre del contexto Kubernetes de kubeconfig (dejar vacío para el contexto actual) |
tipo | obligatorio | Tipo de recurso (Pod, Deployment, Service, etc.) o "all" para descubrimiento |
groupFilter | opcional | Filtro por subcadena de grupo de API para recursos específicos del proyecto |
espacio de nombres | opcional | Espacio de nombres de destino (por defecto, todos los espacios de nombres) |
labelSelector | opcional | Filtro por etiquetas (por ejemplo, "app=nginx") |
fieldSelector | opcional | Filtrar por campos (por ejemplo, "metadata.name=my-pod") |
límite | opcional | Número máximo de recursos a devolver |
timeoutSeconds | opcional | Tiempo de espera de la solicitud (por defecto: 30 segundos) |
showDetails | opcional | Devuelve los objetos de recurso completos en lugar del resumen |
Ejemplos:
// Listar pods con selector de etiquetas { "kind": "Pod", "namespace": "default", "labelSelector": "app=nginx" } // Listar pods de un contexto de cluster específico { "kind": "Pod", "context": "production-cluster", "namespace": "default" } // Descubrir recursos FluxCD { "kind": "all", "groupFilter": "flux" }
describe_resource
Obtener información detallada sobre un recurso Kubernetes específico.
Parámetro | Tipo | Descripción |
---|---|---|
contexto | opcional | Nombre del contexto Kubernetes de kubeconfig (dejar vacío para el contexto actual) |
tipo | obligatorio | Tipo de recurso (Pod, Deployment, etc.) |
nombre | obligatorio | Nombre del recurso |
espacio de nombres | opcional | Espacio de nombres de destino |
Ejemplo:
{ "kind": "Pod", "name": "nginx-pod", "namespace": "default" }
get_pod_logs
Recupera los registros del pod con sofisticadas opciones de filtrado.
Parámetro | Tipo | Descripción |
---|---|---|
contexto | opcional | Nombre del contexto Kubernetes de kubeconfig (dejar vacío para el contexto actual) |
nombre | obligatorio | Nombre del Pod |
espacio de nombres | opcional | Espacio de nombres del pod (por defecto "default") |
contenedor | opcional | Nombre específico del contenedor |
cola | opcional | Número de líneas desde el final (por defecto: 100) |
desde | opcional | Duración como "5s", "2m", "3h" |
desdeHora | opcional | Marca de tiempo RFC3339 |
marcas de tiempo | opcional | Incluir marcas de tiempo en la salida |
anterior | opcional | Obtener registros de la instancia anterior del contenedor |
Ejemplo:
{ "name": "nginx-pod", "namespace": "default", "tail": 50, "since": "5m", "timestamps": true }
list_events
Enumera y filtra eventos de Kubernetes con opciones avanzadas de filtrado para depuración y monitorización.
Parámetro | Tipo | Descripción |
---|---|---|
contexto | opcional | Nombre del contexto Kubernetes de kubeconfig (dejar vacío para el contexto actual) |
espacio de nombres | opcional | Espacio de nombres de destino (dejar vacío para todos los espacios de nombres) |
objeto | opcional | Filtro por nombre de objeto (por ejemplo, nombre de pod, nombre de despliegue) |
eventType | opcional | Filtro por tipo de evento: "Normal" o "Advertencia" (no distingue mayúsculas de minúsculas) |
motivo | opcional | Filtro por motivo del evento (por ejemplo, "Pulled", "Failed", "FailedScheduling") |
desde | opcional | Duración como "5s", "2m", "1h" |
desdeHora | opcional | RFC3339 timestamp (por ejemplo, "2025-06-20T10:00:00Z") |
límite | opcional | Número máximo de eventos a devolver (por defecto: 100) |
timeoutSeconds | opcional | Tiempo de espera de la solicitud (por defecto: 30s) |
Ejemplos:
// Listar eventos de advertencia recientes { "eventType": "Warning", "since": "30m" } // Listar eventos para un pod específico { "object": "nginx-pod", "namespace": "default" } // Listar eventos de programación fallida { "reason": "FailedScheduling", "limit": 50 }
list_contexts
Lista todos los contextos Kubernetes disponibles en su archivo kubeconfig.
Parámetros:None - esta herramienta no toma parámetros.
Ejemplo de respuesta:
{ "contexts": [ { "name": "production-cluster", "is_current": false }, { "name": "staging-cluster", "is_current": true }, { "name": "development-cluster", "is_current": false } ], "current_context": "staging-cluster", "total": 3 }
Caso de uso:Perfecto para flujos de trabajo multiclúster en los que es necesario:
- Descubrir los contextos Kubernetes disponibles
- Identificar el contexto activo actual
- Planificar operaciones a través de múltiples clústeres
🌟 Funciones avanzadas
🌐 Compatibilidad con varios clústeres
Trabaje sin problemas con múltiples clústeres Kubernetes utilizando el cambio de contexto:
- Parámetro de contexto: Todas las herramientas ahora admiten un parámetro de
contexto
opcional para especificar qué clúster consultar - Detección automática: Utiliza su archivo kubeconfig existente y descubre automáticamente los contextos disponibles
- Contexto por defecto: Cuando no se especifica ningún contexto, utiliza el contexto actual de su kubeconfig
- Conexiones en caché: Gestiona eficientemente las conexiones a múltiples clusters con el almacenamiento en caché de conexiones
Ejemplos multiclúster:
// Consultar clúster de producción { "kind": "Pod", "context": "production-cluster", "namespace": "default" } // Get logs from staging environment { "name": "api-server", "context": "staging-cluster", "namespace": "api" } // Comparar recursos entre entornos (utilizar varias llamadas) { "kind": "Deployment", "context": "production-cluster", "namespace": "app" }
🎯 Compatibilidad con definiciones de recursos personalizadas (CRD)
Descubre automáticamente y trabaja con cualquier CRD en su clúster. Basta con utilizar el nombre de tipo de CRD con las herramientas list_resources
o describe_resource
.
descubrimiento inteligente de recursos
Utilice el parámetro groupFilter
para descubrir recursos por subcadena de grupo de API:
Filtro | Descubre | Ejemplos |
---|---|---|
"flux | Recursos FluxCD | HelmReleases, Kustomizations, GitRepositories |
"argo | Recursos ArgoCD | Aplicaciones, AppProjects, ApplicationSets |
"istio | Recursos Istio | VirtualServices, DestinationRules, Gateways |
"cert-manager | recursos cert-manager | Certificados, Emisores, ClusterIssuers |
🔒 Seguridad
Construido con la seguridad como principal preocupación:
- ✅ Acceso de sólo lectura - Sin creación, modificación o eliminación de recursos
- ✅ S eguro para producción - Seguro para su uso en entornos de producción
- ✅ Permisos mínimos - Sólo se requiere acceso de lectura a los recursos del clúster
- ✅ S in operaciones destructivas - No puede dañar su clúster
🤝 Contribuir
Las contribuciones son bienvenidas Por favor, asegúrese de que todos los cambios mantienen la naturaleza de sólo lectura del servidor e incluyen las pruebas adecuadas.
📄 Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.