|
| 1 | +# MCP Context Forge - MCP Gateway Stack Helm Chart |
| 2 | + |
| 3 | +Deploy a complete **MCP Gateway stack** - gateway, PostgreSQL, Redis, |
| 4 | +and optional PgAdmin + Redis-Commander UIs-in one command. |
| 5 | + |
| 6 | +> **Why Helm?** |
| 7 | +> * Consistent, repeatable installs across Minikube, kind, AKS/EKS/GKE, Rancher, etc. |
| 8 | +> * One `values.yaml` drives all environments-tune images, resources, ingress, TLS, persistence, and more. |
| 9 | +> * Rolling upgrades & easy rollbacks (`helm history`, `helm rollback`). |
| 10 | +
|
| 11 | +--- |
| 12 | + |
| 13 | +## Contents |
| 14 | + |
| 15 | +| Folder / File | Purpose | |
| 16 | +| --------------------------------- | ----------------------------------------------------------- | |
| 17 | +| `Chart.yaml` | Chart metadata | |
| 18 | +| `values.yaml` | All configurable parameters | |
| 19 | +| `templates/` | Kubernetes manifests (templated) | |
| 20 | +| `README.md` | **← you are here** | |
| 21 | + |
| 22 | +--- |
| 23 | + |
| 24 | +## 1 - Prerequisites |
| 25 | + |
| 26 | +| Requirement | Notes | |
| 27 | +| ------------------ | -------------------------------------------------------------------------- | |
| 28 | +| **Kubernetes ≥ 1.23** | Tested on Minikube, kind, AKS, EKS | |
| 29 | +| **Helm 3** | `brew install helm` / `chocolatey install kubernetes-helm` | |
| 30 | +| **Ingress** | Any NGINX-compatible controller for `gateway.local` (or disable Ingress) | |
| 31 | +| **PV provisioner** | Host-path (Minikube) or dynamic RWX volume class for PostgreSQL persistence | |
| 32 | + |
| 33 | +--- |
| 34 | + |
| 35 | +## 2 - Quick Start (local sandbox) |
| 36 | + |
| 37 | +```bash |
| 38 | +# Clone or untar the chart |
| 39 | +git clone https://github.com/<org>/mcp-stack-chart.git |
| 40 | +cd mcp-stack-chart |
| 41 | + |
| 42 | +# Optional: tweak values |
| 43 | +cp values.yaml my-values.yaml |
| 44 | +vim my-values.yaml |
| 45 | + |
| 46 | +# Install |
| 47 | +helm install mcp ./mcp-stack \ |
| 48 | + --create-namespace -n mcp \ |
| 49 | + -f my-values.yaml |
| 50 | +``` |
| 51 | + |
| 52 | +Verify: |
| 53 | + |
| 54 | +```bash |
| 55 | +kubectl get all -n mcp |
| 56 | +kubectl get ingress -n mcp |
| 57 | +curl http://gateway.local/health |
| 58 | +``` |
| 59 | + |
| 60 | +> **DNS tip (Minikube):** Enable the `ingress-dns` addon *or* add |
| 61 | +> `$(minikube ip) gateway.local` to `/etc/hosts`. |
| 62 | +
|
| 63 | +--- |
| 64 | + |
| 65 | +## 3 - Architecture |
| 66 | + |
| 67 | +``` |
| 68 | + ┌─────────────────────────────┐ |
| 69 | + │ NGINX Ingress │ |
| 70 | + └──────────┬───────────┬──────┘ |
| 71 | + │/ │/ |
| 72 | + ┌──────────────▼─────┐ ┌────▼───────────┐ |
| 73 | + │ MCP Context Forge │ │ PgAdmin (opt.) │ |
| 74 | + └─────────┬──────────┘ └────┬───────────┘ |
| 75 | + │ │ |
| 76 | + ┌────────────▼──────┐ ┌────────▼────────────┐ |
| 77 | + │ PostgreSQL │ │ Redis Commander(opt)│ |
| 78 | + └────────┬──────────┘ └────────┬────────────┘ |
| 79 | + │ │ |
| 80 | + ┌─────▼────┐ ┌─────▼────┐ |
| 81 | + │ PV │ │ Redis │ |
| 82 | + └──────────┘ └──────────┘ |
| 83 | +``` |
| 84 | + |
| 85 | +--- |
| 86 | + |
| 87 | +## 4 - Configuration (`values.yaml`) |
| 88 | + |
| 89 | +| Key | Default | Description | |
| 90 | +| ------------------------------------ | ------------------------------- | --------------------------- | |
| 91 | +| **global.nameOverride** | `""` | Shorten resource names | |
| 92 | +| **mcpContextForge.image.repository** | `ghcr.io/ibm/mcp-context-forge` | Container image | |
| 93 | +| **mcpContextForge.service.port** | `80` | Exposed port inside cluster | |
| 94 | +| **mcpContextForge.ingress.enabled** | `true` | Creates an Ingress | |
| 95 | +| **mcpContextForge.ingress.host** | `gateway.local` | Virtual host | |
| 96 | +| **postgres.enabled** | `true` | Deploy PostgreSQL | |
| 97 | +| **postgres.persistence.size** | `5Gi` | PVC size | |
| 98 | +| **postgres.credentials.user** | `admin` | DB user (stored in Secret) | |
| 99 | +| **redis.enabled** | `true` | Deploy Redis | |
| 100 | +| **pgadmin.enabled** | `false` | Deploy PgAdmin UI | |
| 101 | +| **redisCommander.enabled** | `false` | Deploy Redis-Commander UI | |
| 102 | + |
| 103 | +*(See `values.yaml` for the full, annotated list.)* |
| 104 | + |
| 105 | +--- |
| 106 | + |
| 107 | +## 5 - Common Tweaks |
| 108 | + |
| 109 | +### Use a private registry |
| 110 | + |
| 111 | +```yaml |
| 112 | +global: |
| 113 | + imagePullSecrets: |
| 114 | + - name: regcred |
| 115 | +mcpContextForge: |
| 116 | + image: |
| 117 | + repository: my-registry.local/mcp-context-forge |
| 118 | + tag: v2.0.0 |
| 119 | +``` |
| 120 | +
|
| 121 | +### Enable PgAdmin & Redis-Commander |
| 122 | +
|
| 123 | +```yaml |
| 124 | +pgadmin: |
| 125 | + enabled: true |
| 126 | +redisCommander: |
| 127 | + enabled: true |
| 128 | +``` |
| 129 | +
|
| 130 | +### Disable persistence (ephemeral DB) |
| 131 | +
|
| 132 | +```yaml |
| 133 | +postgres: |
| 134 | + persistence: |
| 135 | + enabled: false |
| 136 | +``` |
| 137 | +
|
| 138 | +--- |
| 139 | +
|
| 140 | +## 6 - Upgrading / Rollback |
| 141 | +
|
| 142 | +```bash |
| 143 | +# Upgrade with new image |
| 144 | +helm upgrade mcp ./mcp-stack \ |
| 145 | + --set mcpContextForge.image.tag=v1.1.0 |
| 146 | + |
| 147 | +# Roll back to previous revision |
| 148 | +helm rollback mcp 1 |
| 149 | +``` |
| 150 | + |
| 151 | +--- |
| 152 | + |
| 153 | +## 7 - Uninstall |
| 154 | + |
| 155 | +```bash |
| 156 | +helm uninstall mcp -n mcp |
| 157 | +``` |
| 158 | + |
| 159 | +Persistent volumes created with host-path remain; delete them manually if desired. |
| 160 | + |
| 161 | +--- |
| 162 | + |
| 163 | +## 8 - Development & Testing |
| 164 | + |
| 165 | +* Lint: `helm lint ./mcp-stack` |
| 166 | +* Dry-run template rendering: `helm template mcp ./mcp-stack | less` |
| 167 | +* Continuous reload (skaffold / tilt) possible-see `examples/dev/`. |
| 168 | + |
| 169 | +--- |
| 170 | + |
| 171 | +## 9 - Contributing |
| 172 | + |
| 173 | +1. Fork & create a branch. |
| 174 | +2. Update templates or `values.yaml`. |
| 175 | +3. Run `helm lint` and `helm template` against Minikube. |
| 176 | +4. Submit a PR-thanks! |
0 commit comments