Helm
The Helm chart deploys mcp-unifi as a Deployment + Service + optional Ingress + optional NetworkPolicy. The chart is published from this repo to GitHub Pages.
Add the Helm repo
Section titled “Add the Helm repo”helm repo add mcp-unifi https://pete-builds.github.io/mcp-unifi/helm repo updateInstall (stub mode)
Section titled “Install (stub mode)”helm install unifi mcp-unifi/mcp-unifiThe chart defaults to unifi.stubMode: false, but if you don’t set unifi.host and unifi.apiKey the server falls back to stub mode at runtime. To explicitly run in stub mode (no hardware, no API key):
helm install unifi mcp-unifi/mcp-unifi \ --set unifi.stubMode=trueInstall (real mode)
Section titled “Install (real mode)”Create a small values.yaml:
unifi: host: 192.168.1.1 apiKey: <your-local-api-key> port: 443 site: default verifySSL: false stubMode: false
modulesEnabled: "network,protect"Generate the API key in the gateway UI under Settings → Control Plane → Integrations → Create API Key.
Install with the override:
helm install unifi mcp-unifi/mcp-unifi -f values.yamlFor a production deployment, prefer an existingSecret over a plaintext apiKey in values.yaml:
kubectl create secret generic unifi-creds \ --from-literal=UNIFI_API_KEY=<your-local-api-key>
helm install unifi mcp-unifi/mcp-unifi \ --set unifi.host=192.168.1.1 \ --set existingSecret=unifi-credsWhen existingSecret is set, the chart does not render its own Secret; the referenced Secret must expose at least the UNIFI_API_KEY key.
Verify
Section titled “Verify”Port-forward the service and send a tools/list request:
kubectl port-forward svc/unifi-mcp-unifi 3714:3714
curl -sS -X POST http://localhost:3714/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'You should see the Network tools listed (and Protect tools if modulesEnabled includes protect).
Defaults worth knowing
Section titled “Defaults worth knowing”- Pod runs as UID 1000, non-root, read-only filesystem, all capabilities dropped.
- Service is
ClusterIPon port3714. Flipservice.typetoNodePortorLoadBalancerfor cluster-external access. - Ingress is off by default. Enable via
ingress.enabled: trueand configureingress.hosts. - NetworkPolicy is off by default. Opt in via
networkPolicy.enabled: trueplus your owningressRules/egressRules. - Liveness and readiness probes hit
/healthon port3714.
Upgrade
Section titled “Upgrade”helm repo updatehelm upgrade unifi mcp-unifi/mcp-unifi -f values.yamlTo pin a specific app version, set image.tag in values.yaml.