feat: add UniFi, TrueNAS, and Grafana MCP sidecars #29
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Add three new MCP server sidecars to the Helm chart, all disabled by default. These extend the devcontainer's AI assistant capabilities to manage network infrastructure, storage, and observability.
New MCP Sidecars
1. UniFi MCP Server
ghcr.io/enuno/unifi-mcp-server:0.2.4UNIFI_API_KEY— UniFi API authentication credentialUNIFI_API_TYPE—local,cloud-ea, orcloud-v1(recommendlocal)UNIFI_LOCAL_HOST— Gateway IP (e.g.,192.168.2.1) when using local mode2. TrueNAS MCP Server
TRUENAS_URL— TrueNAS hostname or IP (e.g.,truenas.local)TRUENAS_API_KEY— API key from TrueNAS System Settings3. Grafana MCP Server
GRAFANA_URL— Grafana instance endpointGRAFANA_API_KEY— Service account token with appropriate RBAC--enabled-toolsand--disable-<category>flags. Covers dashboards, datasources, alerting, incidents, and more.Implementation Challenges
stdio vs SSE transport
The existing MCP sidecars (kubernetes, flux, homeassistant, github) all expose an SSE HTTP endpoint that the devcontainer connects to via
.mcp.json. However:Options to resolve:
supergateway,mcp-proxy) — wrap each stdio server in a proxy container that exposes SSENo published Docker images
Dockerfilethat downloads the binaryProposed values.yaml structure
Secret keys (in env secret)
unifi-api-key,unifi-api-type,unifi-local-hosttruenas-url,truenas-api-keygrafana-url,grafana-api-keyChecklist
.mcp.jsonwith new SSE endpointsArchitecture Decision: stdio inside container + alternative image
Transport Decision
Use stdio transport for UniFi, TrueNAS, and Grafana MCP servers — not sidecars. These servers only need API keys (no Kubernetes RBAC), so there's no reason for them to be separate containers. stdio is how Claude Code natively connects to MCP servers and avoids the complexity of a stdio-to-SSE bridge.
Image Strategy
Build an alternative "mcp-extras" image variant that includes the stdio MCP tools pre-installed:
Build approach: Multi-stage Dockerfile with a build arg (e.g.,
--build-arg MCP_EXTRAS=true) that conditionally installs the tools. CI builds both tags from the same Dockerfile.Helm Integration
Select image via Helm values and enable/disable individual stdio MCP servers:
The Helm chart would template
.mcp.jsonat deploy time (via ConfigMap or init script) based on which stdio servers are enabled, injecting the correctcommandandenventries..mcp.json stdio entries (when enabled)
What needs to be installed in the mcp-extras image
pip install unifi-mcp-serverUpdated checklist
MCP_EXTRASbuild arg to Dockerfile with conditional installunifi-mcp-server(pip),truenas-mcp(binary),mcp-grafana(TBD)latestandlatest-mcp-extrastagsmcpStdiosection tovalues.yaml.mcp.jsonin Helm chart based on enabled MCP servers (both SSE sidecars and stdio)This should really be a separate container/image, maybe infracontainer?