MCP Server for Kubernetes

Un servidor para gestionar clústeres de Kubernetes utilizando el Protocolo de Contexto de Modelo.

Documentación

Servidor MCP de Kubernetes

Un servidor de Model Context Protocol (MCP) para Kubernetes, con soporte para streaming HTTP por fragmentos, indicaciones avanzadas de solución de problemas y cobertura completa de recursos/herramientas de Kubernetes.


Requisitos previos

  • Node.js v18+ (para desarrollo/compilación local)
  • Docker (para contenedorización)
  • Acceso a un clúster de Kubernetes (AKS, EKS, GKE o local)
  • kubectl configurado (para pruebas y gestión de kubeconfig)

1. Compilar y ejecutar localmente

npm install
npm run build
MCP_TRANSPORT=http-chunked npm start
  • De forma predeterminada, el servidor utiliza su kubeconfig local (~/.kube/config o C:\Users\<username>\.kube\config).
  • Para usar un kubeconfig personalizado, establezca la variable de entorno KUBECONFIG:
    export KUBECONFIG=/path/to/your/kubeconfig
    npm start
    

2. Contenerizar el servidor MCP

Compilar la imagen de Docker

docker build -t yourrepo/mcp-server:latest .

Enviar a su registro

docker push yourrepo/mcp-server:latest

3. Implementar en Kubernetes (AKS, EKS, GKE)

Editar el nombre de la imagen en k8s-mcp-server.yaml:

Reemplace yourrepo/mcp-server:latest con el nombre de su imagen.

Aplicar el manifiesto

kubectl apply -f k8s-mcp-server.yaml
  • Esto crea un namespace, ServiceAccount, RBAC, Deployment y Service.
  • De forma predeterminada, el Service es ClusterIP (interno). Cámbielo a LoadBalancer o NodePort para acceso externo.

4. Uso del servidor MCP

Endpoint HTTP por fragmentos

  • El servidor expone /call-tool-chunked en el puerto 3000.
  • Ejemplo (usando curl):
    curl -X POST http://<server-ip>:3000/call-tool-chunked \
      -H "Content-Type: application/json" \
      -d '{"name": "get_pods", "args": {"namespace": "default"}}'
    
  • La respuesta transmitirá el progreso y los resultados como líneas JSON.

Uso de indicaciones

  • Para usar una indicación, envíe un POST a /call-tool-chunked con el nombre de la indicación, por ejemplo:
    curl -X POST http://<server-ip>:3000/call-tool-chunked \
      -H "Content-Type: application/json" \
      -d '{"name": "k8s-pod-crashloop-diagnose", "args": {"podName": "my-pod", "namespace": "default"}}'
    

5. Kubeconfig y permisos

  • El servidor MCP utiliza el kubeconfig disponible en el contenedor (predeterminado: /root/.kube/config).
  • Para implementaciones dentro del clúster, utiliza el ServiceAccount y RBAC proporcionados en el manifiesto.
  • Para usar un kubeconfig personalizado, móntelo como un secreto y actualice el Deployment (consulte las líneas comentadas en el manifiesto).

6. Notas de seguridad

  • No exponga el servidor MCP a Internet público sin autenticación y TLS.
  • Use políticas de red, firewalls o VPN para restringir el acceso.
  • Use RBAC de privilegios mínimos para el ServiceAccount.

7. Extensión y personalización

  • Agregue nuevas herramientas, recursos o indicaciones en el directorio src/.
  • Recompile y vuelva a implementar la imagen de Docker después de realizar cambios.

8. Solución de problemas

  • Revise los registros con kubectl logs -n mcp-server deploy/mcp-server.
  • Asegúrese de que el ServiceAccount tenga los permisos necesarios para su caso de uso.
  • Para pruebas locales, asegúrese de que su kubeconfig sea válido y tenga acceso al clúster.

Licencia

MIT