Kubernetes Server
Um servidor MCP que permite que assistentes de IA interajam e gerenciem clusters Kubernetes.
Documentação
mcp-kubernetes-server
O mcp-kubernetes-server é um servidor que implementa o Model Context Protocol (MCP) para permitir que assistentes de IA (como Claude, Cursor e GitHub Copilot) interajam com clusters Kubernetes. Ele atua como uma ponte, traduzindo solicitações em linguagem natural desses assistentes em operações Kubernetes e retornando os resultados.
Ele permite que assistentes de IA:
- Consultar recursos Kubernetes
- Executar comandos kubectl
- Gerenciar clusters Kubernetes por meio de interações em linguagem natural
- Diagnosticar e interpretar os estados dos recursos Kubernetes
Como Funciona
O mcp-kubernetes-server atua como intermediário entre assistentes de IA (que suportam o Model Context Protocol) e seu cluster Kubernetes. Ele recebe solicitações em linguagem natural desses assistentes, traduz-as em comandos kubectl ou chamadas diretas à API Kubernetes e as executa no cluster de destino. O servidor então processa os resultados e retorna uma resposta estruturada, permitindo interação perfeita com seu ambiente Kubernetes por meio do assistente de IA.

Como Instalar
Pré-requisitos
Antes de instalar o mcp-kubernetes-server, certifique-se de ter o seguinte:
- Um cluster Kubernetes em funcionamento.
- Um arquivo
kubeconfigconfigurado corretamente para acessar seu cluster Kubernetes (o servidor requer este arquivo para interação). - A ferramenta de linha de comando
kubectlinstalada e no PATH do seu sistema (usada pelo servidor para executar muitos comandos Kubernetes). - A ferramenta de linha de comando
helminstalada e no PATH do seu sistema (usada pelo servidor para operações de chart Helm). - Python >= 3.11, se você planeja instalar e executar o servidor diretamente usando
uvx(sem Docker).
Docker
Obtenha seu arquivo kubeconfig para seu cluster Kubernetes e configure no mcpServers (substitua o caminho src pelo caminho do seu kubeconfig):
{
"mcpServers": {
"kubernetes": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--mount", "type=bind,src=/home/username/.kube/config,dst=/home/mcp/.kube/config",
"ghcr.io/feiskyer/mcp-kubernetes-server"
]
}
}
}
UVX
Para executar o servidor usando uvx (uma ferramenta incluída com uv, o empacotador Python), primeiro certifique-se de que uv esteja instalado:
Instalar uv
Instale uv se ainda não estiver instalado e adicione-o ao seu PATH, por exemplo, usando curl:
# For Linux and MacOS
curl -LsSf https://astral.sh/uv/install.sh | sh
Instalar kubectl
Instale kubectl se ainda não estiver instalado e adicione-o ao seu PATH, por exemplo,
# For Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# For MacOS
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
Instalar helm
Instale helm se ainda não estiver instalado e adicione-o ao seu PATH, por exemplo,
curl -sSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Configure seus servidores MCP em Claude Desktop, Cursor, ChatGPT Copilot, Github Copilot e outros clientes de IA suportados, por exemplo,
{
"mcpServers": {
"kubernetes": {
"command": "uvx",
"args": [
"mcp-kubernetes-server"
],
"env": {
"KUBECONFIG": "<your-kubeconfig-path>"
}
}
}
}
Opções do Servidor MCP
Variáveis de Ambiente
Variáveis de ambiente:
KUBECONFIG: Caminho para o seu arquivo kubeconfig, por exemplo,/home/<username>/.kube/config.
Argumentos de linha de comando
Argumentos de linha de comando:
usage: main.py [-h] [--disable-kubectl] [--disable-helm] [--disable-write]
[--disable-delete] [--transport {stdio,sse,streamable-http}]
[--host HOST] [--port PORT]
MCP Kubernetes Server
options:
-h, --help show this help message and exit
--disable-kubectl Disable kubectl command execution
--disable-helm Disable helm command execution
--disable-write Disable write operations
--disable-delete Disable delete operations
--transport {stdio,sse,streamable-http}
Transport mechanism to use (stdio or sse or streamable-http)
--host HOST Host to use for sse or streamable-http server
--port PORT Port to use for sse or streamable-http server
Uso
Depois que o mcp-kubernetes-server estiver instalado e configurado no seu cliente de IA (usando os trechos JSON fornecidos na seção 'Como instalar' para Docker ou UVX), você pode começar a interagir com seu cluster Kubernetes por meio de linguagem natural. Por exemplo, você pode perguntar:
What is the status of my Kubernetes cluster?
What is wrong with my nginx pod?
Verificando o servidor: Se você estiver executando o servidor com transporte stdio (comum para execução direta de uvx), o cliente de IA normalmente iniciará e gerenciará o processo do servidor. Para transportes sse ou streamable-http, o servidor é executado de forma independente. Você o teria iniciado manualmente (por exemplo, uvx mcp-kubernetes-server --transport sse) e deveria ver uma saída no seu terminal indicando que está em execução (por exemplo, INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)). Você também pode verificar se há mensagens de erro no terminal do servidor se o cliente de IA falhar ao conectar.
Ferramentas Disponíveis
O mcp-kubernetes-server fornece um conjunto abrangente de ferramentas para interagir com clusters Kubernetes, categorizadas por tipo de operação:
Ferramentas de Comando
Ferramentas de Comando
Estas ferramentas fornecem capacidades gerais de execução de comandos:
| Tool | Description | Parameters |
|---|---|---|
| kubectl | Executa qualquer comando kubectl e retorna a saída | command (string) |
| helm | Executa qualquer comando helm e retorna a saída | command (string) |
Ferramentas de Leitura
Ferramentas de Leitura
Estas ferramentas fornecem acesso somente leitura aos recursos Kubernetes:
| Tool | Description | Parameters |
|---|---|---|
| k8s_get | Busca qualquer objeto Kubernetes (ou lista) como string JSON | resource (string), name (string), namespace (string) |
| k8s_describe | Mostra informações detalhadas sobre um recurso específico ou grupo de recursos | resource_type (string), name (string, optional), namespace (string, optional), selector (string, optional), all_namespaces (boolean, optional) |
| k8s_logs | Imprime os logs de um contêiner em um pod | pod_name (string), container (string, optional), namespace (string, optional), tail (integer, optional), previous (boolean, optional), since (string, optional), timestamps (boolean, optional), follow (boolean, optional) |
| k8s_events | Lista eventos no cluster | namespace (string, optional), all_namespaces (boolean, optional), field_selector (string, optional), resource_type (string, optional), resource_name (string, optional), sort_by (string, optional), watch (boolean, optional) |
| k8s_apis | Lista todas as APIs disponíveis no cluster Kubernetes | none |
| k8s_crds | Lista todas as Definições de Recursos Personalizados (CRDs) no cluster Kubernetes | none |
| k8s_top_nodes | Exibe o uso de recursos (CPU/memória) dos nós | sort_by (string, optional) |
| k8s_top_pods | Exibe o uso de recursos (CPU/memória) dos pods | namespace (string, optional), all_namespaces (boolean, optional), sort_by (string, optional), selector (string, optional) |
| k8s_rollout_status | Obtém o status de um rollout para um deployment, daemonset ou statefulset | resource_type (string), name (string), namespace (string, optional) |
| k8s_rollout_history | Obtém o histórico de rollout para um deployment, daemonset ou statefulset | resource_type (string), name (string), namespace (string, optional), revision (string, optional) |
| k8s_auth_can_i | Verifica se uma ação é permitida | verb (string), resource (string), subresource (string, optional), namespace (string, optional), name (string, optional) |
| k8s_auth_whoami | Mostra o sujeito pelo qual você está autenticado atualmente | none |
Ferramentas de Escrita
Ferramentas de Escrita
Estas ferramentas fornecem operações de criação, atualização ou patch em recursos Kubernetes:
| Ferramenta | Descrição | Parâmetros |
|---|---|---|
| k8s_create | Cria um recurso Kubernetes a partir de conteúdo YAML/JSON | yaml_content (string), namespace (string, opcional) |
| k8s_apply | Aplica uma configuração a um recurso por nome de arquivo ou stdin | yaml_content (string), namespace (string, opcional) |
| k8s_expose | Expõe um recurso como um novo serviço Kubernetes | resource_type (string), name (string), port (integer), target_port (integer, opcional), namespace (string, opcional), protocol (string, opcional), service_name (string, opcional), labels (object, opcional), selector (string, opcional), type (string, opcional) |
| k8s_run | Cria e executa uma imagem específica em um pod | name (string), image (string), namespace (string, opcional), command (array, opcional), env (object, opcional), labels (object, opcional), restart (string, opcional) |
| k8s_set_resources | Define limites e solicitações de recursos para contêineres | resource_type (string), resource_name (string), namespace (string, opcional), containers (array, opcional), limits (object, opcional), requests (object, opcional) |
| k8s_set_image | Define a imagem de um contêiner | resource_type (string), resource_name (string), container (string), image (string), namespace (string, opcional) |
| k8s_set_env | Define variáveis de ambiente para um contêiner | resource_type (string), resource_name (string), container (string), env_dict (object), namespace (string, opcional) |
| k8s_rollout_undo | Desfaz um rollout para um deployment, daemonset ou statefulset | resource_type (string), name (string), namespace (string, opcional), to_revision (string, opcional) |
| k8s_rollout_restart | Reinicia um rollout para um deployment, daemonset ou statefulset | resource_type (string), name (string), namespace (string, opcional) |
| k8s_rollout_pause | Pausa um rollout para um deployment, daemonset ou statefulset | resource_type (string), name (string), namespace (string, opcional) |
| k8s_rollout_resume | Retoma um rollout para um deployment, daemonset ou statefulset | resource_type (string), name (string), namespace (string, opcional) |
| k8s_scale | Escala um recurso | resource_type (string), name (string), replicas (integer), namespace (string, opcional) |
| k8s_autoscale | Ajusta automaticamente a escala de um deployment, replica set, stateful set ou replication controller | resource_type (string), name (string), min (integer), max (integer), namespace (string, opcional), cpu_percent (integer, opcional) |
| k8s_cordon | Marca um nó como não agendável | node_name (string) |
| k8s_uncordon | Marca um nó como agendável | node_name (string) |
| k8s_drain | Drena um nó em preparação para manutenção | node_name (string), force (boolean, opcional), ignore_daemonsets (boolean, opcional), delete_local_data (boolean, opcional), timeout (integer, opcional) |
| k8s_taint | Atualiza os taints em um ou mais nós | node_name (string), key (string), value (string, opcional), effect (string) |
| k8s_untaint | Remove os taints de um nó | node_name (string), key (string), effect (string, opcional) |
| k8s_exec_command | Executa um comando em um contêiner | pod_name (string), command (string), container (string, opcional), namespace (string, opcional), stdin (boolean, opcional), tty (boolean, opcional), timeout (integer, opcional) |
| k8s_port_forward | Encaminha uma ou mais portas locais para um pod | resource_type (string), name (string), ports (array), namespace (string, opcional), address (string, opcional) |
| k8s_cp | Copia arquivos e diretórios de e para contêineres | src_path (string), dst_path (string), container (string, opcional), namespace (string, opcional) |
| k8s_patch | Atualiza campos de um recurso | resource_type (string), name (string), patch (object), namespace (string, opcional) |
| k8s_label | Atualiza os labels de um recurso | resource_type (string), name (string), labels (object), namespace (string, opcional), overwrite (boolean, opcional) |
| k8s_annotate | Atualiza as anotações de um recurso | resource_type (string), name (string), annotations (object), namespace (string, opcional), overwrite (boolean, opcional) |
Ferramentas de Exclusão
Ferramentas de Exclusão
Estas ferramentas fornecem operações de exclusão para recursos Kubernetes:
| Ferramenta | Descrição | Parâmetros |
|---|---|---|
| k8s_delete | Exclui recursos por nome, seletor de label ou todos os recursos em um namespace | resource_type (string), name (string, opcional), namespace (string, opcional), label_selector (string, opcional), all_namespaces (boolean, opcional), force (boolean, opcional), grace_period (integer, opcional) |
Desenvolvimento
Como executar o projeto localmente:
uv run -m src.mcp_kubernetes_server.main
Como inspecionar solicitações e respostas do servidor MCP:
npx @modelcontextprotocol/inspector uv run -m src.mcp_kubernetes_server.main
Solução de Problemas
Aqui estão alguns problemas comuns e suas soluções ao trabalhar com mcp-kubernetes-server:
Problema: mcp-kubernetes-server não consegue se conectar ao cluster Kubernetes ou relata erros de autenticação.
Solução:
- Garanta que o arquivo
kubeconfigesteja configurado corretamente e aponte para o cluster desejado. - Verifique se o caminho para o arquivo
kubeconfigestá especificado corretamente na configuração domcpServers(para Docker, garanta que o caminho de montagem esteja correto; parauvx, garanta que a variável de ambienteKUBECONFIGesteja definida corretamente). - Verifique se as credenciais no seu
kubeconfigtêm as permissões necessárias para realizar operações no cluster. Você pode testar isso comkubectldiretamente (por exemplo,kubectl get pods).
Problema: os comandos kubectl ou helm retornam um erro como "command not found" ou estão desabilitados.
Solução:
- Se estiver executando via
uvx, garanta quekubectle/ouhelmestejam instalados no seu sistema e disponíveis no seu PATH. Consulte a seção "Pré-requisitos" para orientações de instalação. - Se você vir uma mensagem como "Write operations are not allowed" ou "Delete operations are not allowed", o servidor pode ter sido iniciado com flags como
--disable-kubectl,--disable-helm,--disable-writeou--disable-delete. Verifique o comando de inicialização do servidor e a seção "Opções do Servidor MCP" no README para detalhes sobre essas flags.
Problema: Como posso ver as solicitações e respostas brutas entre meu cliente de IA e o mcp-kubernetes-server?
Solução:
- Você pode usar a ferramenta
@modelcontextprotocol/inspectorconforme mencionado na seção "Desenvolvimento":npx @modelcontextprotocol/inspector uv run -m src.mcp_kubernetes_server.main. Isso mostrará as mensagens MCP sendo trocadas.
Problema: O servidor inicia, mas o cliente de IA não consegue se conectar. Solução:
- Se estiver usando o transporte
stdio(padrão para execução direta douvx), garanta que seu cliente de IA esteja configurado para iniciar o comandomcp-kubernetes-servercorretamente. - Se estiver usando o transporte
sseoustreamable-http, garanta que o host e a porta configurados nomcp-kubernetes-server(por exemplo,--host 0.0.0.0 --port 8000) sejam acessíveis de onde seu cliente de IA está sendo executado. Verifique regras de firewall ou problemas de configuração de rede. Além disso, verifique se o cliente de IA está configurado com a URL correta para o servidor.
Contribuição
Este projeto é open source, disponível no GitHub em feiskyer/mcp-kubernetes-server e licenciado sob a Apache License.
Se você gostaria de contribuir com o projeto, siga estas diretrizes:
- Faça um fork do repositório e clone-o para sua máquina local.
- Crie um novo branch para suas alterações.
- Faça suas alterações e faça commit delas com uma mensagem de commit descritiva.
- Envie suas alterações para o repositório forkado.
- Abra um pull request para o repositório principal.
LICENÇA
O projeto é licenciado sob a Apache License 2.0. Consulte o arquivo LICENSE para mais detalhes.