Rancher MCP Server

Servidor do Protocolo de Contexto de Modelo (MCP) para o ecossistema Rancher: Kubernetes multi-cluster, Harvester HCI (VMs, armazenamento, redes) e Fleet GitOps.

Documentação

rancher-mcp-server

GitHub License npm GitHub release (latest SemVer) Build MCP Badge

rancher-mcp-server banner

Servidor Model Context Protocol (MCP) para o ecossistema Rancher: Kubernetes multi-cluster, Harvester HCI (VMs, armazenamento, redes) e Fleet GitOps.

Demonstração

Um passo a passo de como este servidor MCP funciona (exemplo no Cursor).

https://github.com/user-attachments/assets/7d8fb814-e504-47b4-956d-28f43aeea3b8

Recursos

  • Conjunto de ferramentas Harvester: Listar/obter VMs, imagens, volumes, redes, hosts; ações de VM; listar/alternar addons (ativar/desativar)
  • Conjunto de ferramentas Rancher: Clusters e projetos via Steve (proxy de gerenciamento); API de gerenciamento Norman (/v3) para esquemas, usuários, tokens, configurações de autenticação, vínculos de função globais, tokens de registro de cluster, drivers de nó, credenciais de nuvem, catálogos, repositórios de cluster, flags de recurso, configurações, auditoria (quando exposta); pacote de suporte e ações genéricas quando gravações estão habilitadas
  • Conjunto de ferramentas Kubernetes: Listar/obter/criar/atualizar/excluir recursos por apiVersion/kind; descrever (recurso + eventos), eventos, capacidade
  • Conjunto de ferramentas Helm: Listar/obter/histórico de releases; instalar, atualizar, fazer rollback, desinstalar; lista de repositórios
  • Conjunto de ferramentas Fleet: Listar/obter/criar GitRepo; listar Bundle; listar clusters Fleet; detecção de drift
  • APIs Rancher: Mesmo token Bearer para Steve (/k8s/clusters/...) e Norman (/v3/...); sem wrappers de CLI
  • Segurança: Somente leitura por padrão, desabilitar operações destrutivas, mascaramento de dados sensíveis (campos de token/credenciais Norman redigidos, exceto quando --show-sensitive-data)
  • Configuração: Flags, env (RANCHER_MCP_*) ou arquivo (YAML/TOML)

Início rápido

Instalação

npm install -g rancher-mcp-server

Cursor

Adicione a .cursor/mcp.json (nível do projeto) ou ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "rancher": {
      "command": "npx",
      "args": [
        "-y", "rancher-mcp-server",
        "--rancher-server-url", "https://rancher.example.com",
        "--rancher-token", "token-xxxxx:yyyy",
        "--toolsets", "harvester,rancher,kubernetes,fleet"
      ]
    }
  }
}

Reinicie o Cursor após salvar. Verifique em Configurações → Ferramentas e MCP se rancher está listado e habilitado.

Claude Desktop

Adicione à configuração do seu Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "rancher": {
      "command": "npx",
      "args": [
        "-y", "rancher-mcp-server",
        "--rancher-server-url", "https://rancher.example.com",
        "--rancher-token", "token-xxxxx:yyyy",
        "--toolsets", "harvester,rancher,kubernetes,fleet"
      ]
    }
  }
}

Com variáveis de ambiente em vez de argumentos

Se preferir manter o token fora da configuração JSON:

{
  "mcpServers": {
    "rancher": {
      "command": "npx",
      "args": ["-y", "rancher-mcp-server"],
      "env": {
        "RANCHER_MCP_RANCHER_SERVER_URL": "https://rancher.example.com",
        "RANCHER_MCP_RANCHER_TOKEN": "token-xxxxx:yyyy",
        "RANCHER_MCP_TOOLSETS": "harvester,rancher,kubernetes"
      }
    }
  }
}

Habilitar operações de gravação

Para criação de VM, snapshots, backups, criação de imagem/volume, alternância de addon, modo de manutenção de host, criação/atualização/exclusão de VPC, criação/atualização/exclusão de Kubernetes, instalação/atualização/rollback de Helm, criação/exclusão de gitrepo Fleet e gravações Norman (tokens, usuários, configurações de autenticação, vínculos de função, tokens de registro de cluster, credenciais de nuvem, atualização de catálogo, flags de recurso, configurações, rancher_norman_action, pacote de suporte), adicione --read-only=false. As operações Excluir (tokens/bindings/tokens de registro/credenciais de nuvem Norman, além das exclusões existentes do conjunto de ferramentas) também exigem --disable-destructive=false (padrão).

{
  "mcpServers": {
    "rancher": {
      "command": "npx",
      "args": [
        "-y", "rancher-mcp-server",
        "--rancher-server-url", "https://rancher.example.com",
        "--rancher-token", "token-xxxxx:yyyy",
        "--toolsets", "harvester,rancher,kubernetes,helm,fleet",
        "--read-only=false"
      ]
    }
  }
}

Transporte HTTP Streamable

Para clientes web ou acesso remoto (ex.: Claude Code claude mcp add -t http), adicione --transport e --port:

{
  "mcpServers": {
    "rancher": {
      "command": "npx",
      "args": [
        "-y", "rancher-mcp-server",
        "--rancher-server-url", "https://rancher.example.com",
        "--rancher-token", "token-xxxxx:yyyy",
        "--transport", "http",
        "--port", "8080"
      ]
    }
  }
}

O servidor usa o transporte MCP Streamable HTTP. O caminho MCP padrão é /mcp; conecte-se a http://localhost:8080/mcp (ou à URL base do seu servidor + /mcp). Melhor suporte com Claude Code; o suporte ao Cursor pode variar.

Compilar a partir do código-fonte

Se preferir compilar o binário Go você mesmo:

go build -o rancher-mcp-server ./cmd/rancher-mcp-server

Então referencie o binário diretamente na sua configuração MCP:

{
  "mcpServers": {
    "rancher": {
      "command": "/absolute/path/to/rancher-mcp-server",
      "args": [
        "--rancher-server-url", "https://rancher.example.com",
        "--rancher-token", "token-xxxxx:yyyy",
        "--toolsets", "harvester,rancher,kubernetes,fleet"
      ]
    }
  }
}

Configuração

OpçãoEnvPadrãoDescrição
--rancher-server-urlRANCHER_MCP_RANCHER_SERVER_URLURL do servidor Rancher (obrigatório)
--rancher-tokenRANCHER_MCP_RANCHER_TOKENToken Bearer (obrigatório)
--tls-insecureRANCHER_MCP_TLS_INSECUREfalsePular verificação TLS
--read-onlyRANCHER_MCP_READ_ONLYtrueDesabilitar operações de gravação
--disable-destructiveRANCHER_MCP_DISABLE_DESTRUCTIVEfalseDesabilitar operações de exclusão
--show-sensitive-dataRANCHER_MCP_SHOW_SENSITIVE_DATAfalseMostrar campos de token/credenciais Norman sem redação (usar com cuidado)
--toolsetsRANCHER_MCP_TOOLSETSharvesterConjuntos de ferramentas a habilitar: harvester, rancher, kubernetes, helm, fleet
--transportRANCHER_MCP_TRANSPORTstdioTransporte: stdio ou http (HTTP Streamable; caminho padrão /mcp)
--portRANCHER_MCP_PORT0Porta para HTTP (0 = somente stdio)

Ferramentas Harvester

FerramentaDescrição
harvester_vm_listListar VMs com status, namespace, spec/status
harvester_vm_getObter uma VM (spec e status completos)
harvester_vm_actioniniciar, parar, reiniciar, pausar, retomar, migrar
harvester_vm_createCriar VM (quando não estiver somente leitura). Suporta rede, interface_type (managedtap/bridge/masquerade), subnet para VPC KubeOVN.
harvester_vm_snapshotCriar/listar/restaurar/excluir snapshots de VM
harvester_vm_backupCriar/listar/restaurar backups de VM (Destino de Backup)
harvester_image_listListar imagens de VM (VirtualMachineImage)
harvester_image_createCriar imagem de VM a partir de URL (quando não estiver somente leitura)
harvester_volume_listListar PVCs (volumes suportados por Longhorn)
harvester_volume_createCriar volume/PVC (opcionalmente a partir de imagem)
harvester_network_listListar redes de VM (NetworkAttachmentDefinition)
harvester_network_createCriar rede de VM - overlay KubeOVN ou VLAN (quando não estiver somente leitura)
harvester_network_updateAtualizar configuração de rede de VM (quando não estiver somente leitura)
harvester_network_deleteExcluir rede de VM (quando ações destrutivas forem permitidas)
harvester_subnet_listListar Subnets KubeOVN (requer kubeovn-operator)
harvester_subnet_createCriar Subnet em VPC para rede de VM (quando não estiver somente leitura)
harvester_subnet_updateAtualizar namespaces/NAT do Subnet (quando não estiver somente leitura)
harvester_subnet_deleteExcluir Subnet (quando ações destrutivas forem permitidas)
harvester_host_listListar nós (hosts Harvester)
harvester_host_actionAtivar/desativar modo de manutenção em um host (cordon/uncordon)
harvester_settingsListar ou obter configurações do cluster Harvester (backup-target, etc.)
harvester_addon_listListar addons Harvester (estado habilitado/desabilitado)
harvester_addon_switchHabilitar ou desabilitar um addon (quando não estiver somente leitura)
harvester_vpc_listListar VPCs KubeOVN (requer addon kubeovn-operator)
harvester_vpc_createCriar uma VPC KubeOVN (quando não estiver somente leitura)
harvester_vpc_updateAtualizar namespaces de uma VPC KubeOVN (quando não estiver somente leitura)
harvester_vpc_deleteExcluir uma VPC KubeOVN (quando ações destrutivas forem permitidas)

As ferramentas de listagem aceitam cluster (obrigatório), namespace, format (json|table), limit (padrão 100), continue (token de paginação para a próxima página). As ferramentas de gravação exigem read_only: false.

Criando uma VM na VPC KubeOVN com internet externa

Use harvester_vm_create com:

  1. network: Nome da rede overlay (NAD) vinculada a uma subnet KubeOVN. Crie via harvester_network_create (type=kubeovn) e depois harvester_subnet_create com provider={network}.{namespace}.ovn, vpc=<vpc-name> e nat_outgoing=true.
  2. interface_type: managedtap (recomendado para KubeOVN) ou bridge. Usa Multus como rede primária.
  3. subnet: Nome opcional da subnet KubeOVN para anotação ovn.kubernetes.io/logical_switch.

Exemplo: VM na rede vswitch1 no namespace default, interface managedTap, subnet vswitch1-subnet:

harvester_vm_create cluster=<cluster-id> namespace=default name=testvm image=<image> network=vswitch1 interface_type=managedtap subnet=vswitch1-subnet

Ferramentas Rancher

As ferramentas Rancher usam o cluster de gerenciamento (local). Não há parâmetro cluster nessas ferramentas.

API Steve (recursos de gerenciamento)

FerramentaDescrição
rancher_cluster_listListar clusters Rancher (gerenciamento)
rancher_cluster_getObter um cluster (saúde, versão, contagem de nós)
rancher_project_listListar projetos Rancher
rancher_overviewVisão geral: contagem de clusters e contagem de projetos

API Norman (https://<rancher>/v3/...)

As ferramentas Norman chamam a API de gerenciamento JSON do Rancher. Descubra tipos e URLs de coleção para seu servidor com rancher_norman_schema_list / rancher_norman_schema_get (ids de esquema como user, token, cluster).

Somente leitura (sempre registradas com o conjunto de ferramentas rancher)

FerramentaDescrição
rancher_norman_schema_listListar esquemas de API (/v3/schemas)
rancher_norman_schema_getObter um esquema por id
rancher_user_list / rancher_user_getUsuários
rancher_auth_config_list / rancher_auth_config_getProvedores de autenticação (local, OIDC, etc.)
rancher_token_list / rancher_token_getTokens de API (valores redigidos, exceto quando --show-sensitive-data)
rancher_global_role_binding_list / rancher_global_role_binding_getVínculos de função globais
rancher_cluster_registration_token_list / rancher_cluster_registration_token_getTokens de registro de cluster
rancher_node_driver_listDrivers de nó
rancher_cloud_credential_list / rancher_cloud_credential_getCredenciais de nuvem (segredos redigidos, exceto quando --show-sensitive-data)
rancher_catalog_list / rancher_catalog_getCatálogos Norman legados (/v3/catalogs)
rancher_cluster_repo_list / rancher_cluster_repo_getRepositórios de cluster do catálogo de aplicativos (veja nota abaixo)
rancher_feature_flag_list / rancher_feature_flag_getFlags de recurso (/v3/features)
rancher_setting_list / rancher_setting_getConfigurações globais (/v3/settings)
rancher_audit_log_listGET /v3/auditlogs quando suportado (geralmente 404/405; veja nota abaixo)

Quando --read-only=false

FerramentaDescrição
rancher_norman_actionPOST um ?action= Norman em um caminho de recurso sob /v3
rancher_token_createCriar token de API
rancher_auth_config_updateSubstituir uma configuração de autenticação (PUT)
rancher_user_createCriar usuário
rancher_user_disable / rancher_user_enableAções de habilitar/desabilitar usuário
rancher_global_role_binding_createCriar vínculo de função global
rancher_cluster_registration_token_createCriar token de registro
rancher_cloud_credential_createCriar credencial de nuvem
rancher_catalog_refreshAtualizar catálogo legado (?action=refresh)
rancher_feature_flag_setAtualizar flag de recurso (PUT)
rancher_setting_updateAtualizar configuração (PUT)
rancher_supportbundle_generateSolicitar pacote de suporte (generateSupportBundle em um cluster)

Quando --read-only=false e --disable-destructive=false

FerramentaDescrição
rancher_token_deleteExcluir token de API
rancher_global_role_binding_deleteExcluir vínculo de função global
rancher_cluster_registration_token_deleteExcluir token de registro
rancher_cloud_credential_deleteExcluir credencial de nuvem

Respostas Norman: catálogo, repositórios de cluster, auditoria

Tradução

  • rancher_cluster_repo_list / rancher_cluster_repo_get: Tenta Norman /v3/clusterrepos primeiro. Se retornar 404 (comum), recorre a catalog.cattle.io/v1 ClusterRepo no cluster local via Steve/Kubernetes, tentando os namespaces cattle-global-data, fleet-default, fleet-local, cattle-fleet-system. O JSON de sucesso inclui "_source":"kubernetes_api_fallback". Se nada funcionar, a ferramenta ainda retorna JSON estilo 200 com "_source":"unavailable" e erros por tentativa — não um erro MCP grave — para que a automação possa continuar.
  • rancher_catalog_list / rancher_catalog_get: Se Norman /v3/catalogs não estiver registrado (404), retorna JSON com "_source":"unavailable" em vez de falhar.
  • rancher_audit_log_list: Se o servidor retornar 404 ou 405 (GET não suportado), retorna JSON com "_source":"unavailable" e _http_status; a auditoria pode estar desabilitada ou exposta fora do Norman.

Para dados de catálogo quando ClusterRepo não estiver disponível em nenhum lugar, use kubernetes_list no cluster local com api_version catalog.cattle.io/v1 e kind ClusterRepo, ou ferramentas Helm / Fleet conforme apropriado.

Ferramentas Helm

FerramentaDescrição
helm_listLista releases do Helm (opcionalmente por namespace, implantadas/com falha/pendentes)
helm_getObtém detalhes da release (manifesto, valores, notas)
helm_historyObtém histórico de revisões de uma release
helm_repo_listLista repositórios de charts Helm configurados (da configuração local)
helm_installInstala um chart Helm (quando não é somente leitura)
helm_upgradeAtualiza uma release Helm (quando não é somente leitura)
helm_rollbackReverte uma release para uma revisão anterior (quando não é somente leitura)
helm_uninstallDesinstala uma release (quando ações destrutivas são permitidas)

Todas as ferramentas recebem cluster (ID do cluster Rancher). Instalação/atualização exigem chart, release; opcionais: repo_url, version, values (JSON).

Ferramentas Fleet

FerramentaDescrição
fleet_gitrepo_listLista GitRepos do Fleet (fontes GitOps)
fleet_gitrepo_getObtém um GitRepo (spec, status)
fleet_gitrepo_createCria um GitRepo (quando não é somente leitura)
fleet_gitrepo_deleteExclui um GitRepo (quando ações destrutivas são permitidas)
fleet_gitrepo_actionPausa, retoma, desativa polling, ativa polling, forçao atualização
fleet_gitrepo_cloneClona um GitRepo para um novo nome (copia o spec)
fleet_bundle_listLista Bundles do Fleet (unidades de implantação dos GitRepos)
fleet_cluster_listLista clusters do Fleet (clusters downstream registrados com o Fleet)
fleet_drift_detectRelata BundleDeployments com estado Modified (drift)

Todas as ferramentas usam o cluster de gerenciamento Rancher (local). Opcional: namespace (padrão: fleet-default). Ferramentas de listagem suportam format, limit, continue (paginação). fleet_gitrepo_create exige name, repo; opcionais: branch, paths. fleet_gitrepo_action suporta: pause, unpause, disablePolling, enablePolling, forceUpdate. fleet_gitrepo_clone copia o spec de um GitRepo existente para um novo nome.

Ferramentas Kubernetes

FerramentaDescrição
kubernetes_listLista recursos por apiVersion/kind (ex.: v1 Pod, apps/v1 Deployment)
kubernetes_getObtém um recurso por apiVersion, kind, namespace, nome
kubernetes_describeObtém recurso + eventos recentes
kubernetes_logsObtém logs recentes de pods (somente tail; container, tailLines, sinceSeconds)
kubernetes_eventsLista eventos em um namespace (filtro opcional por involvedObject)
kubernetes_capacityResumo de capacidade/allocatable por nó
kubernetes_createCria recurso a partir de JSON (quando não é somente leitura)
kubernetes_patchAplica patch em recurso com JSON (quando não é somente leitura)
kubernetes_deleteExclui recurso (quando ações destrutivas são permitidas)

Todas as ferramentas recebem cluster (ID do cluster Rancher). Listar/obter suportam namespace, format (json|table), limit, continue (paginação). Criar/aplicar patch/excluir são controlados por read_only e disable_destructive. kubernetes_logs não suporta follow (streaming); use tail_lines e since_seconds para limitar a saída. Em algumas configurações de Rancher/proxy, logs de pods podem retornar 503 ou erros de streaming; consulte Troubleshooting.


Configuração: token Rancher e ID do cluster Harvester

Obter um token de API Rancher

  1. Faça login na interface do Rancher.
  2. Clique no seu perfil/avatar (canto superior direito) → Account & API Keys (ou API & Keys).
  3. Clique em Create API Key, dê um nome (ex.: mcp-server) e depois em Create.
  4. Copie o token uma vez (formato como token-abc12:xyz...). Use-o como --rancher-token ou RANCHER_MCP_RANCHER_TOKEN.

Encontre o ID do seu cluster Harvester

As ferramentas Harvester exigem o ID do cluster (ex.: c-tx8rn) em cada chamada.

  • Pela interface do Rancher: Vá para Cluster Management → abra seu cluster Harvester. A URL contém o ID do cluster: .../c/<cluster-id>/....
  • Pela API (Steve): curl -s -H "Authorization: Bearer YOUR_TOKEN" "https://YOUR_RANCHER_URL/k8s/clusters/local/v1/management.cattle.io.clusters" | jq '.data[] | {name: .metadata.name}'
  • Schemas Norman: curl -s -H "Authorization: Bearer YOUR_TOKEN" "https://YOUR_RANCHER_URL/v3/schemas" | jq '.data[0:5].id'

Docker (Streamable HTTP)

Para modo servidor HTTP, use a imagem de contêiner do GitHub Container Registry (ghcr.io). Para Cursor/Claude com stdio, use npm (veja Quick start).

Execute o servidor e exponha a porta:

docker run -d -p 8080:8080 \
  -e RANCHER_MCP_RANCHER_SERVER_URL=https://rancher.example.com \
  -e RANCHER_MCP_RANCHER_TOKEN="token-xxxxx:yyyy" \
  -e RANCHER_MCP_TRANSPORT=http \
  -e RANCHER_MCP_PORT=8080 \
  ghcr.io/mrostamii/rancher-mcp-server:latest

Conecte clientes ao endpoint MCP: http://localhost:8080/mcp (Streamable HTTP; caminho padrão é /mcp). Exemplo: claude mcp add -t http rancher http://localhost:8080/mcp


Plataformas suportadas

  • macOS (Apple Silicon e Intel)
  • Linux (x64 e ARM64)
  • Windows (x64)

Solução de problemas

ProblemaO que verificar
"rancher-server-url and rancher-token are required"Verifique --rancher-server-url e --rancher-token nos argumentos, ou as variáveis de ambiente RANCHER_MCP_RANCHER_SERVER_URL e RANCHER_MCP_RANCHER_TOKEN.
401 Non autorizadoToken expirado ou inválido. Crie uma nova chave de API no Rancher.
Erros de TLS / certificadoPara Rancher com certificado autossinado, passe --tls-insecure (somente desenvolvimento).
"cluster not found" ou listas vaziasID do cluster errado. Obtenha-o da URL da interface ou da API; passe-o como cluster para ferramentas Harvester/Kubernetes.
O Cursor não mostra as ferramentasReinicie o Cursor após editar mcp.json; verifique em Tools & MCP se o servidor está habilitado.
Binário não encontradoUse caminhos absolutos em mcp.json para command ao compilar a partir do código-fonte.
kubernetes_logs 503 ou erros de streamingConhecido em algumas configurações Rancher/proxy (ex.: RKE2). Reduza tail_lines ou tente outro cluster; veja rancher/rancher#40711.
Ferramenta Norman retorna "_source":"unavailable"Essa coleção pode não existir na sua versão do Rancher (ex.: catalogs legado, clusterrepos ou auditoria via GET). Use rancher_norman_schema_list para ver os tipos registrados, ou kubernetes_list / Helm / Fleet para fontes de charts.
A lista de repositórios do cluster mostra unavailable ou data vaziocatalog.cattle.io ClusterRepo pode não estar instalado ou ter proxy para seu token; tente kubernetes_list com catalog.cattle.io/v1 e ClusterRepo no cluster local em todos os namespaces.

Licença

Apache-2.0