Dev/Infra
Servidor MCP que dá aos LLMs controle total sobre ambientes de desenvolvimento Kubernetes locais via k3d, kubectl, Tilt, Helm e kustomize
Documentação
devinfra-mcp
Servidor MCP que dá aos LLMs controle total sobre ambientes de desenvolvimento Kubernetes locais. Construído em Go, expõe 63 ferramentas em 8 grupos para gerenciar clusters k3d, operações kubectl, charts Helm, overlays Kustomize, fluxos de trabalho de desenvolvimento Tilt, consultas ao Artifact Hub e busca de documentação.
Recursos
- k3d (9 ferramentas) — criar, excluir, iniciar, parar, listar clusters e nós
- kubectl (16 ferramentas) — get, describe, apply, delete, logs, port-forward, escape para comando bruto
- Helm (10 ferramentas) — install, upgrade, uninstall, template, status, show values/chart, gerenciamento de repositórios (via Go SDK)
- Kustomize (5 ferramentas) — build, build-and-apply, edit image/namespace, listar recursos (via Go API)
- Tilt (10 ferramentas) — up, down, ci, logs, status, get, describe, trigger, session (consultas via HTTP API)
- Artifact Hub (6 ferramentas) — search, package info, values, schema, readme, templates
- Busca de documentação (4 ferramentas) — busca de texto completo na documentação de tilt, k3d, kubectl e Helm (índice Bleve, 257+ páginas)
- CI (3 ferramentas) — bootstrap composto, teardown e coleta de diagnósticos
Arquitetura
Abordagem híbrida — cada grupo de ferramentas usa o melhor método de integração:
| Componente | Integração | Motivo |
|---|---|---|
| Helm | Go SDK (helm.sh/helm/v3) | Segurança de tipos, sem dependência de CLI |
| Kustomize | Go API (sigs.k8s.io/kustomize/api) | Projetado para incorporação |
| Consultas Tilt | HTTP API (apiserver com descoberta automática) | JSON estruturado, sem spawn de processo |
| Ciclo de vida Tilt | CLI shell-out | CLI-first, sem SDK Go público |
| kubectl | CLI shell-out | Evita o inchaço do client-go, herda a autenticação do usuário |
| k3d | CLI shell-out | Sem API Go pública |
Pré-requisitos
- Go 1.26+
- Docker (para clusters k3d)
- k3d — clusters Kubernetes locais
- kubectl — interação com clusters
- tilt — orquestração de fluxos de trabalho de desenvolvimento
- Helm e Kustomize são opcionais no nível de CLI (os SDKs Go são incorporados)
Início Rápido
# Build the binary
make build
# Run over stdio (default MCP transport)
./bin/devinfra-mcp
# Run as HTTP server
./bin/devinfra-mcp --http --addr :8080
# With a config file
./bin/devinfra-mcp --config settings.json
Configuração do Cliente MCP
Claude Code / Claude Desktop
Adicione em .mcp.json na raiz do seu projeto (ou ~/.claude.json para global):
{
"mcpServers": {
"devinfra-mcp": {
"command": "devinfra-mcp",
"args": ["--config", "/path/to/settings.json"]
}
}
}
Cursor
Adicione em .cursor/mcp.json na raiz do seu projeto (ou ~/.cursor/mcp.json para global):
{
"mcpServers": {
"devinfra-mcp": {
"command": "devinfra-mcp",
"args": ["--config", "/path/to/settings.json"]
}
}
}
OpenAI Codex
Adicione em .codex/config.toml na raiz do seu projeto (ou ~/.codex/config.toml para global):
[mcp_servers.devinfra-mcp]
command = "devinfra-mcp"
args = ["--config", "/path/to/settings.json"]
Streamable HTTP (qualquer cliente)
Em vez de stdio, você pode executar o servidor via HTTP para clientes que suportam servidores MCP remotos:
./bin/devinfra-mcp --http --addr :8080 --config settings.json
Configuração
Crie um arquivo de configuração JSON para substituir os padrões. A configuração deve ser JSON válido — comentários não são permitidos.
{
"kubeconfig": "",
"default_context": "",
"blocked_contexts": ["production", "staging-*"],
"tilt_api": "",
"kubectl_apply_dry_run_default": "client",
"doc_index_path": "~/.devinfra-mcp/docs.bleve",
"doc_sources": {
"tilt": "github.com/tilt-dev/tilt.build/docs",
"k3d": "github.com/k3d-io/k3d/docs",
"k8s": "embedded"
},
"timeouts": {
"default": "30s",
"logs": "10s",
"apply": "60s",
"cluster_create": "120s",
"tilt_ci": "300s"
},
"artifacthub": {
"enabled": true,
"base_url": "https://artifacthub.io/api/v1",
"cache_ttl": "1h",
"prefer_verified_publisher": true,
"auto_lookup_on_install": true,
"timeout": "10s"
}
}
| Campo | Descrição |
|---|---|
kubeconfig | Caminho para o kubeconfig (vazio = padrão ~/.kube/config) |
default_context | Substituir o current-context do kubeconfig |
blocked_contexts | Padrões glob para contextos que a camada de segurança rejeitará |
tilt_api | URL do apiserver do Tilt (vazio = descoberta automática a partir de ~/.tilt-dev/config) |
kubectl_apply_dry_run_default | Modo dry-run padrão para kubectl_apply (client, server ou none) |
doc_index_path | Caminho para o índice de busca Bleve (suporta ~/) |
artifacthub.enabled | Feature gate para ferramentas do Artifact Hub |
artifacthub.auto_lookup_on_install | Buscar values automaticamente antes de helm_install/helm_upgrade |
Segurança
kubectl_applytem como padrãodry_run: "client"— apply real requerdry_run: "none"explícito- Contextos bloqueados (ex.:
production,staging-*) rejeitam operações na camada de segurança kubectl_rawvalida argumentos contra uma denylist; a substituição requerunsafe: truekubectl_logs --followtem limite de 10 segundos
Busca de Documentação
O servidor inclui um índice de busca de texto completo Bleve incorporado sobre 4 fontes de documentação:
| Fonte | Docs | Repositório |
|---|---|---|
| tilt | ~54 | tilt-dev/tilt.build |
| k3d | ~33 | k3d-io/k3d |
| k8s | ~75 | kubernetes/website (referência do kubectl) |
| helm | ~95 | helm/helm-www |
# Clone doc sources (uses sparse checkout for large repos)
make docs-clone
# Build the Bleve search index
make docs-index
Desenvolvimento
make build # Build binary to bin/devinfra-mcp
make test # Unit tests
make test-integration # Integration tests (needs Docker)
make e2e # Full e2e: create k3d cluster, test, teardown
make lint # golangci-lint
make vet # go vet
make check # vet + lint + test
Prompts
Modelos de fluxo de trabalho reutilizáveis que o LLM pode invocar para operações de várias etapas:
| Prompt | Descrição | Argumentos |
|---|---|---|
bootstrap_dev_env | Criar cluster k3d, mesclar kubeconfig, aplicar kustomize, iniciar tilt | cluster_name, kustomize_path, tiltfile_path |
teardown_dev_env | Parar tilt e excluir cluster k3d | cluster_name |
debug_pod | Describe, logs e eventos para um pod com falha | pod_name, namespace |
deploy_and_verify | Kustomize build + apply, status do rollout, verificar pods | kustomize_path, namespace, deployment_name |
cluster_health_check | Informações do cluster, status dos nós, uso de recursos, eventos de aviso | — |
ci_run | Bootstrap do cluster CI, executar tilt ci, diagnósticos em caso de falha, teardown | cluster_name, tiltfile_path |
search_and_apply | Buscar na documentação um conceito e mostrar padrões relevantes | topic |
helm_deploy_and_verify | Consulta ao Artifact Hub, helm install, status do rollout, verificar | chart, release, namespace |
Recursos
Dados somente leitura que o LLM pode trazer para o contexto:
| URI do recurso | Descrição |
|---|---|
k8s://cluster/{name}/info | Informações do cluster (nós, versão, endpoint) |
k8s://cluster/{name}/namespaces | Lista de namespaces |
k8s://namespace/{ns}/pods | Pods (JSON) |
k8s://namespace/{ns}/services | Services (JSON) |
k8s://namespace/{ns}/deployments | Deployments (JSON) |
k8s://namespace/{ns}/events | Eventos recentes (JSON) |
k8s://tilt/status | Status dos recursos do Tilt (se em execução) |
k8s://tilt/session | Objeto Tilt Session para monitoramento de CI |
k8s://kubeconfig | kubeconfig atual (minificado) |
k8s://helm/releases | Releases Helm no contexto atual |
docs://{source}/{slug} | Página de documentação (fonte: tilt, k3d, k8s, helm) |
Estrutura do Projeto
cmd/devinfra-mcp/main.go Entry point, wires all components
internal/
executor/ Shell-out abstraction (all CLI calls go through here)
tools/ 63 MCP tools across 8 groups
k3d.go, kubectl.go, helm.go,
kustomize.go, tilt.go,
artifacthub.go, docsearch.go, ci.go
helmclient/ Helm Go SDK wrapper (Client interface + mock)
kustomizeclient/ Kustomize Go API wrapper (Client interface + mock)
tilt/ Tilt HTTP API client (Client interface + mock)
artifacthub/ Artifact Hub HTTP client with response caching
docsearch/ Bleve index builder + markdown scraper
config/ JSON config loading with defaults
safety/ Context blocklist, input sanitization
prompts/ MCP prompt templates
resources/ MCP resource providers (cluster state, docs)
Licença
Consulte LICENSE para detalhes.