K8s MCP Server
Un servidor para herramientas CLI de Kubernetes como kubectl, istioctl, helm y argocd, que admite la gestión de múltiples clústeres mediante kubeconfig dinámico.
Documentación
Servidor MCP de K8s
Este proyecto se basa en el excelente trabajo de alexei-led/k8s-mcp-server. ¡Agradecemos sinceramente al autor original!
El Servidor MCP de K8s es un servicio accesible por red construido sobre fastapi-mcp. Permite que modelos de lenguaje grandes (LLM) como Claude ejecuten de forma segura herramientas CLI de Kubernetes (kubectl, istioctl, helm, argocd). Se ofrece a través del protocolo estándar de control de modelos (MCP) y admite el paso dinámico de kubeconfig en cada solicitud, lo que permite una gestión fluida de múltiples clústeres de Kubernetes.
Características principales
- Implementación estándar de MCP: Utiliza
fastapi-mcppara exponer automáticamente los endpoints de FastAPI como herramientas MCP, sin necesidad de implementar el protocolo manualmente. - Soporte dinámico de múltiples clústeres: El contenido de
kubeconfigse pasa directamente en cada solicitud de API en formato codificado en Base64, sin necesidad de configuración previa ni montaje de archivos. - Endpoints de herramientas independientes: Cada herramienta CLI (
kubectl,helm, etc.) tiene su propio endpoint HTTP dedicado, con una estructura clara. - Servicio independiente: Puede ejecutarse como un contenedor Docker independiente o dentro de Kubernetes.
- Documentación OpenAPI automática: Hereda las ventajas de FastAPI, generando y proporcionando automáticamente documentación interactiva de API (a través de
/docs).
Cómo funciona
graph TD
subgraph "客户端"
A["用户 / LLM"]
end
subgraph "K8s MCP 服务器"
B["MCP 端点 (/mcp)"]
C["工具端点"]
D["执行引擎"]
end
subgraph "目标环境"
E["目标 Kubernetes 集群"]
end
A -->|"MCP 客户端连接到 /mcp"| B;
B -->|"发现可用工具"| A;
A -->|"发起工具调用请求"| C;
C -->|"调用执行引擎"| D;
D -->|"创建临时 kubeconfig 并执行命令"| E;
E -->|"返回结果"| D;
D -->|"返回 CommandResponse"| C;
C -->|"将结果通过 MCP 返回"| A;
Inicio rápido
1. Ejecutar el Servidor MCP de K8s
Inicie el servidor rápidamente en local usando Docker:
docker run -d --rm -p 9096:9096 --name mcp-server \
docker.io/apecloud/k8s-mcp-server:latest
El servidor ahora se está ejecutando en http://localhost:9096. Puede visitar http://localhost:9096/docs para ver todas las herramientas disponibles y su documentación de API.
2. Configurar en el cliente MCP
Para cualquier cliente compatible con MCP (como mcphost, Cursor, Claude Desktop, etc.), agregue la siguiente configuración:
{
"mcpServers": {
"kubernetes": {
"url": "http://localhost:9096/mcp"
}
}
}
Reemplace localhost con la dirección IP del host donde se ejecuta k8s-mcp-server (si no está en la misma máquina).
3. Comenzar a usar
Una vez iniciado su cliente MCP, este descubrirá automáticamente las herramientas proporcionadas por el Servidor MCP de K8s. Ahora puede comenzar a dar instrucciones.
- "Usando la herramienta kubectl, ejecute el comando
get pods -n default." - "Ayúdeme a verificar el estado de
nginx-deploymenten el espacio de nombresprod."
Desarrollo y ejecución local
1. Ejecutar el Servidor MCP de K8s
Puede usar el comando quick-start en Makefile para iniciar el servidor rápidamente en local:
make quick-start
Esto construirá la imagen Docker y ejecutará el contenedor en local; el servidor se ejecutará en http://localhost:9096.
2. Verificar el estado del servidor
Una vez que el servidor esté en marcha, puede verificar su estado de salud con el siguiente comando curl:
curl http://localhost:9096/health
Si el servidor funciona correctamente, recibirá una respuesta exitosa.
Ejecutar desde el código fuente
Si desea ejecutar el Servidor MCP de K8s desde el código fuente, siga estos pasos:
1. Clonar el repositorio
Si aún no ha clonado el repositorio de este proyecto, hágalo primero:
git clone https://github.com/apecloud/mcp-k8s.git
cd mcp-k8s
2. Crear y activar un entorno virtual
Se recomienda usar un entorno virtual para gestionar las dependencias del proyecto:
python3 -m venv .venv
source .venv/bin/activate
3. Instalar dependencias
Instale todas las dependencias necesarias para el proyecto:
pip install .
4. Ejecutar el servidor
Use uvicorn para iniciar la aplicación FastAPI:
uvicorn src.k8s_mcp_server.app:app --host 0.0.0.0 --port 9096
5. Verificar el estado del servidor
Después de iniciar el servidor, puede verificar su estado de salud con el siguiente comando curl:
curl http://localhost:9096/health
Si el servidor funciona correctamente, recibirá una respuesta exitosa.
Ejemplo de uso de API (Curl)
Puede interactuar directamente con los endpoints de herramientas del servidor mediante curl.
Método de autenticación con Kubeconfig
La información de kubeconfig se puede proporcionar de dos maneras principales:
-
Mediante cabecera HTTP (
X-Kubeconfig):- Coloque el contenido de
kubeconfigcodificado en Base64 en la cabeceraX-Kubeconfig. - Esta forma puede ahorrar consumo de tokens para los modelos de lenguaje, porque
kubeconfigno se cuenta como parte del cuerpo de la solicitud en la entrada del modelo.
- Coloque el contenido de
-
Mediante el cuerpo de la solicitud (campo
kubeconfig):- Coloque el contenido de
kubeconfigcodificado en Base64 como valor del campokubeconfigen el cuerpo JSON de la solicitud.
- Coloque el contenido de
Ejemplo:
-
Codifique su contenido de
kubeconfigen Base64:# macOS KUBECONFIG_B64=$(cat ~/.kube/config | base64) # Linux KUBECONFIG_B64=$(cat ~/.kube/config | base64 -w 0) -
Envíe la solicitud mediante la cabecera de la solicitud (
X-Kubeconfig):curl -X POST http://localhost:9096/tools/kubectl \ -H "Content-Type: application/json" \ -H "X-Kubeconfig: $KUBECONFIG_B64" \ -d @- << EOF { "command": "get pods -n default" } EOF -
Envíe la solicitud mediante el cuerpo de la solicitud:
curl -X POST http://localhost:9096/tools/kubectl \ -H "Content-Type: application/json" \ -d @- << EOF { "command": "get pods -n default", "kubeconfig": "$KUBECONFIG_B64" } EOFRecibirá una respuesta JSON que contiene el resultado de la ejecución del comando.
Características funcionales
- Múltiples herramientas de Kubernetes:
kubectl,helm,istioctlyargocd. - Soporte nativo de proveedores de nube: Dado que
kubeconfigse pasa dinámicamente, se admite de forma nativa cualquier clúster de Kubernetes que cumpla con el estándar, incluidos AWS EKS, Google GKE y Azure AKS. - Seguridad: Se ejecuta en el contenedor como usuario no root.
- Configuración sencilla: Configuración simple mediante variables de entorno.
Documentación
- Documentación de API: Después de iniciar el servidor, visite la ruta
/docspara obtener la documentación interactiva completa de la API. - Documentación de fastapi-mcp: https://github.com/tadata-org/fastapi_mcp
Contribuciones
¡Agradecemos las contribuciones de la comunidad! No dude en enviar problemas y solicitudes de extracción.