Skip to content

Quickstart

The echo-server is the “hello world” of kube-mcp. It demonstrates all four CRD types together.

Terminal window
kubectl apply -k "github.com/atippey/kube-mcp//examples/echo-server/manifests?ref=fdd289260a135ac2944be6814b0d80ff2e6a899e"

This creates:

ResourceNameWhat it does
Namespacemcp-testIsolated namespace for the example
Deployment + Serviceecho-backendSimple HTTP echo backend
MCPServerechoAggregates tools/prompts/resources via label selector
MCPToolecho-toolEchoes back input — points to the echo-backend Service
MCPToolcalculator-toolBasic math operations
MCPPromptgreeting-promptTemplate with {{name}}, {{date}}, {{topic}} variables
MCPPromptcode-review-promptCode review template
MCPResourcesample-configInline JSON configuration
MCPResourcereadmeInline Markdown documentation

Check the operator reconciled everything:

Terminal window
# CRDs
kubectl get mcpservers -n mcp-test
kubectl get mcptools -n mcp-test
kubectl get mcpprompts -n mcp-test
kubectl get mcpresources -n mcp-test
# Operator-generated resources
kubectl get deployment,service,configmap -n mcp-test -l app.kubernetes.io/instance=echo
# Pods should be Running
kubectl get pods -n mcp-test

The operator creates a Deployment, Service, and ConfigMap for the echo MCPServer. The ConfigMap contains the aggregated tool/prompt/resource configuration, mounted into the MCP server pod.

Check the MCPServer status conditions to confirm the operator discovered everything:

Terminal window
kubectl describe mcpserver echo -n mcp-test

Look for the Conditions section in the output:

Status:
Conditions:
Type: ToolsDiscovered
Status: True
Reason: ResourcesFound
Message: Found 2 tool(s), 2 prompt(s), 2 resource(s) matching selector ...
Type: ConfigReady
Status: True
Reason: ConfigMapCreated
Message: ConfigMap created with 2 tool(s), 2 prompt(s), 2 resource(s)
Type: Ready
Status: True
Reason: DeploymentReady
Message: Deployment has 1 ready replica(s)

If ToolsDiscovered is False, check that your MCPTool labels match the MCPServer’s toolSelector.

Some MCP servers are self-contained — no separate backend needed. Use image, args, and env on the MCPServer to run them directly:

apiVersion: kubemcp.io/v1alpha1
kind: MCPServer
metadata:
name: aws-diagram
namespace: mcp-system
spec:
replicas: 1
image: mcp/aws-diagram:latest
args:
- "--transport"
- "sse"
- "--port"
- "8080"
- "--host"
- "0.0.0.0"
env:
- name: FASTMCP_LOG_LEVEL
value: "ERROR"
redis:
serviceName: mcp-redis
ingress:
host: aws-diagram.kubemcp.io
pathPrefix: /sse
toolSelector:
matchLabels:
mcp-server: aws-diagram

The env field also supports valueFrom for Secrets and ConfigMaps:

env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: my-secret
key: api-key
ExampleDescription
echo-serverSimple echo backend — the “hello world” of kube-mcp
hash-toolCryptographic hash generation (md5, sha1, sha256, sha512)
time-toolTimezone-aware time formatting
weather-toolWeather information via external API
dns-toolDNS lookup tool
kubectl-explainKubernetes resource explanation
kube-info-toolKubernetes cluster information
act-toolGitHub Actions local runner (nektos/act)
crane-toolContainer image registry tool
compliance-toolFIPS, STIG, FedRAMP compliance checking
aws-diagram-toolAWS architecture diagram generator (Direct Pattern)
Terminal window
kubectl delete -k "github.com/atippey/kube-mcp//examples/echo-server/manifests?ref=fdd289260a135ac2944be6814b0d80ff2e6a899e"