Dev/Infra

MCP server that gives LLMs full control over local Kubernetes dev environments via k3d, kubectl, Tilt, Helm, and kustomize

devinfra-mcp

MCP server that gives LLMs full control over local Kubernetes dev environments. Built in Go, it exposes 63 tools across 8 groups for managing k3d clusters, kubectl operations, Helm charts, Kustomize overlays, Tilt dev workflows, Artifact Hub lookups, and documentation search.

Features

  • k3d (9 tools) — create, delete, start, stop, list clusters and nodes
  • kubectl (16 tools) — get, describe, apply, delete, logs, port-forward, raw command escape hatch
  • Helm (10 tools) — install, upgrade, uninstall, template, status, show values/chart, repo management (via Go SDK)
  • Kustomize (5 tools) — build, build-and-apply, edit image/namespace, list resources (via Go API)
  • Tilt (10 tools) — up, down, ci, logs, status, get, describe, trigger, session (queries via HTTP API)
  • Artifact Hub (6 tools) — search, package info, values, schema, readme, templates
  • Doc search (4 tools) — full-text search over tilt, k3d, kubectl, and Helm docs (Bleve index, 257+ pages)
  • CI (3 tools) — composite bootstrap, teardown, and diagnostic collection

Architecture

Hybrid approach — each tool group uses the best integration method:

ComponentIntegrationWhy
HelmGo SDK (helm.sh/helm/v3)Type safety, no CLI dependency
KustomizeGo API (sigs.k8s.io/kustomize/api)Designed for embedding
Tilt queriesHTTP API (auto-discovered apiserver)Structured JSON, no process spawn
Tilt lifecycleCLI shell-outCLI-first, no public Go SDK
kubectlCLI shell-outAvoids client-go bloat, inherits user auth
k3dCLI shell-outNo public Go API

Prerequisites

  • Go 1.26+
  • Docker (for k3d clusters)
  • k3d — local Kubernetes clusters
  • kubectl — cluster interaction
  • tilt — dev workflow orchestration
  • Helm and Kustomize are optional at the CLI level (Go SDKs are embedded)

Quick Start

# 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

MCP Client Configuration

Claude Code / Claude Desktop

Add to .mcp.json in your project root (or ~/.claude.json for global):

{
  "mcpServers": {
    "devinfra-mcp": {
      "command": "devinfra-mcp",
      "args": ["--config", "/path/to/settings.json"]
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project root (or ~/.cursor/mcp.json for global):

{
  "mcpServers": {
    "devinfra-mcp": {
      "command": "devinfra-mcp",
      "args": ["--config", "/path/to/settings.json"]
    }
  }
}

OpenAI Codex

Add to .codex/config.toml in your project root (or ~/.codex/config.toml for global):

[mcp_servers.devinfra-mcp]
command = "devinfra-mcp"
args = ["--config", "/path/to/settings.json"]

Streamable HTTP (any client)

Instead of stdio, you can run the server over HTTP for clients that support remote MCP servers:

./bin/devinfra-mcp --http --addr :8080 --config settings.json

Configuration

Create a JSON config file to override defaults. The config must be valid JSON — no comments are allowed.

{
  "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"
  }
}
FieldDescription
kubeconfigPath to kubeconfig (empty = default ~/.kube/config)
default_contextOverride kubeconfig current-context
blocked_contextsGlob patterns for contexts the safety layer will reject
tilt_apiTilt apiserver URL (empty = auto-discover from ~/.tilt-dev/config)
kubectl_apply_dry_run_defaultDefault dry-run mode for kubectl_apply (client, server, or none)
doc_index_pathPath to the Bleve search index (supports ~/)
artifacthub.enabledFeature gate for Artifact Hub tools
artifacthub.auto_lookup_on_installAuto-fetch values before helm_install/helm_upgrade

Safety

  • kubectl_apply defaults to dry_run: "client" — real apply requires explicit dry_run: "none"
  • Blocked contexts (e.g., production, staging-*) reject operations at the safety layer
  • kubectl_raw validates args against a denylist; override requires unsafe: true
  • kubectl_logs --follow is capped at 10 seconds

Documentation Search

The server includes an embedded Bleve full-text search index over 4 documentation sources:

SourceDocsRepository
tilt~54tilt-dev/tilt.build
k3d~33k3d-io/k3d
k8s~75kubernetes/website (kubectl reference)
helm~95helm/helm-www
# Clone doc sources (uses sparse checkout for large repos)
make docs-clone

# Build the Bleve search index
make docs-index

Development

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

Reusable workflow templates the LLM can invoke for multi-step operations:

PromptDescriptionArguments
bootstrap_dev_envCreate k3d cluster, merge kubeconfig, apply kustomize, start tiltcluster_name, kustomize_path, tiltfile_path
teardown_dev_envStop tilt and delete k3d clustercluster_name
debug_podDescribe, logs, and events for a failing podpod_name, namespace
deploy_and_verifyKustomize build + apply, rollout status, verify podskustomize_path, namespace, deployment_name
cluster_health_checkCluster info, node status, resource usage, warning events
ci_runBootstrap CI cluster, run tilt ci, diagnostics on failure, teardowncluster_name, tiltfile_path
search_and_applySearch docs for a concept and show relevant patternstopic
helm_deploy_and_verifyArtifact Hub lookup, helm install, rollout status, verifychart, release, namespace

Resources

Read-only data the LLM can pull into context:

Resource URIDescription
k8s://cluster/{name}/infoCluster info (nodes, version, endpoint)
k8s://cluster/{name}/namespacesList of namespaces
k8s://namespace/{ns}/podsPods (JSON)
k8s://namespace/{ns}/servicesServices (JSON)
k8s://namespace/{ns}/deploymentsDeployments (JSON)
k8s://namespace/{ns}/eventsRecent events (JSON)
k8s://tilt/statusTilt resource status (if running)
k8s://tilt/sessionTilt Session object for CI monitoring
k8s://kubeconfigCurrent kubeconfig (minified)
k8s://helm/releasesHelm releases in current context
docs://{source}/{slug}Doc page (source: tilt, k3d, k8s, helm)

Project Structure

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)

License

See LICENSE for details.

İlgili Sunucular

NotebookLM Web Importer

Web sayfalarını ve YouTube videolarını tek tıkla NotebookLM'e aktarın. 200.000'den fazla kullanıcı tarafından güveniliyor.

Chrome Eklentisini Yükle