Skip to content

Commit 82bc310

Browse files
authored
Generated README from helm chart (#227)
Signed-off-by: Mihai Criveti <[email protected]>
1 parent c994f90 commit 82bc310

File tree

1 file changed

+305
-0
lines changed

1 file changed

+305
-0
lines changed

charts/mcp-stack/README.md

Lines changed: 305 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,305 @@
1+
# mcp-stack
2+
3+
![Version: 0.2.0](https://img.shields.io/badge/Version-0.2.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.2.0](https://img.shields.io/badge/AppVersion-0.2.0-informational?style=flat-square)
4+
5+
A full-stack Helm chart for IBM's **Model Context Protocol (MCP) Gateway
6+
& Registry — Context-Forge**. It bundles:
7+
• MCP Gateway application (HTTP / WebSocket server)
8+
• PostgreSQL database with persistent storage
9+
• Redis cache for sessions & completions
10+
• Optional PgAdmin and Redis-Commander web UIs
11+
12+
**Homepage:** <https://github.com/IBM/mcp-context-forge>
13+
14+
## Maintainers
15+
16+
| Name | Email | Url |
17+
| ---- | ------ | --- |
18+
| Mihai Criveti | | <https://github.com/IBM> |
19+
20+
## Source Code
21+
22+
* <https://github.com/IBM/mcp-context-forge>
23+
24+
## Requirements
25+
26+
Kubernetes: `>=1.21.0`
27+
28+
## Values
29+
30+
| Key | Type | Default | Description |
31+
|-----|------|---------|-------------|
32+
| global.fullnameOverride | string | `""` | |
33+
| global.imagePullSecrets | list | `[]` | |
34+
| global.nameOverride | string | `""` | |
35+
| mcpContextForge.config.ALLOWED_ORIGINS | string | `"[\"http://localhost\",\"http://localhost:4444\"]"` | |
36+
| mcpContextForge.config.APP_NAME | string | `"MCP_Gateway"` | |
37+
| mcpContextForge.config.APP_ROOT_PATH | string | `""` | |
38+
| mcpContextForge.config.CACHE_PREFIX | string | `"mcpgw"` | |
39+
| mcpContextForge.config.CACHE_TYPE | string | `"redis"` | |
40+
| mcpContextForge.config.CORS_ENABLED | string | `"true"` | |
41+
| mcpContextForge.config.DB_MAX_OVERFLOW | string | `"10"` | |
42+
| mcpContextForge.config.DB_MAX_RETRIES | string | `"3"` | |
43+
| mcpContextForge.config.DB_POOL_RECYCLE | string | `"3600"` | |
44+
| mcpContextForge.config.DB_POOL_SIZE | string | `"200"` | |
45+
| mcpContextForge.config.DB_POOL_TIMEOUT | string | `"30"` | |
46+
| mcpContextForge.config.DB_RETRY_INTERVAL_MS | string | `"2000"` | |
47+
| mcpContextForge.config.DEBUG | string | `"false"` | |
48+
| mcpContextForge.config.DEV_MODE | string | `"false"` | |
49+
| mcpContextForge.config.FEDERATION_DISCOVERY | string | `"false"` | |
50+
| mcpContextForge.config.FEDERATION_ENABLED | string | `"true"` | |
51+
| mcpContextForge.config.FEDERATION_PEERS | string | `"[]"` | |
52+
| mcpContextForge.config.FEDERATION_SYNC_INTERVAL | string | `"300"` | |
53+
| mcpContextForge.config.FEDERATION_TIMEOUT | string | `"30"` | |
54+
| mcpContextForge.config.FILELOCK_PATH | string | `"/tmp/gateway_healthcheck_init.lock"` | |
55+
| mcpContextForge.config.GUNICORN_MAX_REQUESTS | string | `"10000"` | |
56+
| mcpContextForge.config.GUNICORN_MAX_REQUESTS_JITTER | string | `"100"` | |
57+
| mcpContextForge.config.GUNICORN_PRELOAD_APP | string | `"true"` | |
58+
| mcpContextForge.config.GUNICORN_TIMEOUT | string | `"600"` | |
59+
| mcpContextForge.config.GUNICORN_WORKERS | string | `"2"` | |
60+
| mcpContextForge.config.HEALTH_CHECK_INTERVAL | string | `"60"` | |
61+
| mcpContextForge.config.HEALTH_CHECK_TIMEOUT | string | `"10"` | |
62+
| mcpContextForge.config.HOST | string | `"0.0.0.0"` | |
63+
| mcpContextForge.config.JSON_RESPONSE_ENABLED | string | `"true"` | |
64+
| mcpContextForge.config.LOG_FORMAT | string | `"json"` | |
65+
| mcpContextForge.config.LOG_LEVEL | string | `"INFO"` | |
66+
| mcpContextForge.config.MAX_PROMPT_SIZE | string | `"102400"` | |
67+
| mcpContextForge.config.MAX_RESOURCE_SIZE | string | `"10485760"` | |
68+
| mcpContextForge.config.MAX_TOOL_RETRIES | string | `"3"` | |
69+
| mcpContextForge.config.MCPGATEWAY_ADMIN_API_ENABLED | string | `"true"` | |
70+
| mcpContextForge.config.MCPGATEWAY_UI_ENABLED | string | `"true"` | |
71+
| mcpContextForge.config.MESSAGE_TTL | string | `"600"` | |
72+
| mcpContextForge.config.PORT | string | `"4444"` | |
73+
| mcpContextForge.config.PROMPT_CACHE_SIZE | string | `"100"` | |
74+
| mcpContextForge.config.PROMPT_RENDER_TIMEOUT | string | `"10"` | |
75+
| mcpContextForge.config.PROTOCOL_VERSION | string | `"2025-03-26"` | |
76+
| mcpContextForge.config.REDIS_MAX_RETRIES | string | `"3"` | |
77+
| mcpContextForge.config.REDIS_RETRY_INTERVAL_MS | string | `"2000"` | |
78+
| mcpContextForge.config.RELOAD | string | `"false"` | |
79+
| mcpContextForge.config.RESOURCE_CACHE_SIZE | string | `"1000"` | |
80+
| mcpContextForge.config.RESOURCE_CACHE_TTL | string | `"3600"` | |
81+
| mcpContextForge.config.SESSION_TTL | string | `"3600"` | |
82+
| mcpContextForge.config.SKIP_SSL_VERIFY | string | `"false"` | |
83+
| mcpContextForge.config.SSE_RETRY_TIMEOUT | string | `"5000"` | |
84+
| mcpContextForge.config.TOOL_CONCURRENT_LIMIT | string | `"10"` | |
85+
| mcpContextForge.config.TOOL_RATE_LIMIT | string | `"100"` | |
86+
| mcpContextForge.config.TOOL_TIMEOUT | string | `"60"` | |
87+
| mcpContextForge.config.TRANSPORT_TYPE | string | `"all"` | |
88+
| mcpContextForge.config.UNHEALTHY_THRESHOLD | string | `"3"` | |
89+
| mcpContextForge.config.USE_STATEFUL_SESSIONS | string | `"false"` | |
90+
| mcpContextForge.config.WEBSOCKET_PING_INTERVAL | string | `"30"` | |
91+
| mcpContextForge.containerPort | int | `4444` | |
92+
| mcpContextForge.env.host | string | `"0.0.0.0"` | |
93+
| mcpContextForge.env.postgres.db | string | `"postgresdb"` | |
94+
| mcpContextForge.env.postgres.passwordKey | string | `"POSTGRES_PASSWORD"` | |
95+
| mcpContextForge.env.postgres.port | int | `5432` | |
96+
| mcpContextForge.env.postgres.userKey | string | `"POSTGRES_USER"` | |
97+
| mcpContextForge.env.redis.port | int | `6379` | |
98+
| mcpContextForge.envFrom[0].secretRef.name | string | `"mcp-gateway-secret"` | |
99+
| mcpContextForge.envFrom[1].configMapRef.name | string | `"mcp-gateway-config"` | |
100+
| mcpContextForge.hpa | object | `{"enabled":true,"maxReplicas":10,"minReplicas":2,"targetCPUUtilizationPercentage":90,"targetMemoryUtilizationPercentage":90}` | ------------------------------------------------------------------ |
101+
| mcpContextForge.image.pullPolicy | string | `"Always"` | |
102+
| mcpContextForge.image.repository | string | `"ghcr.io/ibm/mcp-context-forge"` | |
103+
| mcpContextForge.image.tag | string | `"latest"` | |
104+
| mcpContextForge.ingress.annotations."nginx.ingress.kubernetes.io/rewrite-target" | string | `"/"` | |
105+
| mcpContextForge.ingress.className | string | `"nginx"` | |
106+
| mcpContextForge.ingress.enabled | bool | `true` | |
107+
| mcpContextForge.ingress.host | string | `"gateway.local"` | |
108+
| mcpContextForge.ingress.path | string | `"/"` | |
109+
| mcpContextForge.ingress.pathType | string | `"Prefix"` | |
110+
| mcpContextForge.probes.liveness.failureThreshold | int | `3` | |
111+
| mcpContextForge.probes.liveness.initialDelaySeconds | int | `10` | |
112+
| mcpContextForge.probes.liveness.path | string | `"/health"` | |
113+
| mcpContextForge.probes.liveness.periodSeconds | int | `15` | |
114+
| mcpContextForge.probes.liveness.port | int | `4444` | |
115+
| mcpContextForge.probes.liveness.successThreshold | int | `1` | |
116+
| mcpContextForge.probes.liveness.timeoutSeconds | int | `2` | |
117+
| mcpContextForge.probes.liveness.type | string | `"http"` | |
118+
| mcpContextForge.probes.readiness.failureThreshold | int | `3` | |
119+
| mcpContextForge.probes.readiness.initialDelaySeconds | int | `15` | |
120+
| mcpContextForge.probes.readiness.path | string | `"/ready"` | |
121+
| mcpContextForge.probes.readiness.periodSeconds | int | `10` | |
122+
| mcpContextForge.probes.readiness.port | int | `4444` | |
123+
| mcpContextForge.probes.readiness.successThreshold | int | `1` | |
124+
| mcpContextForge.probes.readiness.timeoutSeconds | int | `2` | |
125+
| mcpContextForge.probes.readiness.type | string | `"http"` | |
126+
| mcpContextForge.probes.startup.command[0] | string | `"sh"` | |
127+
| mcpContextForge.probes.startup.command[1] | string | `"-c"` | |
128+
| mcpContextForge.probes.startup.command[2] | string | `"sleep 10"` | |
129+
| mcpContextForge.probes.startup.failureThreshold | int | `1` | |
130+
| mcpContextForge.probes.startup.periodSeconds | int | `5` | |
131+
| mcpContextForge.probes.startup.timeoutSeconds | int | `15` | |
132+
| mcpContextForge.probes.startup.type | string | `"exec"` | |
133+
| mcpContextForge.replicaCount | int | `2` | |
134+
| mcpContextForge.resources.limits.cpu | string | `"200m"` | |
135+
| mcpContextForge.resources.limits.memory | string | `"1024Mi"` | |
136+
| mcpContextForge.resources.requests.cpu | string | `"100m"` | |
137+
| mcpContextForge.resources.requests.memory | string | `"512Mi"` | |
138+
| mcpContextForge.secret.AUTH_ENCRYPTION_SECRET | string | `"my-test-salt"` | |
139+
| mcpContextForge.secret.AUTH_REQUIRED | string | `"true"` | |
140+
| mcpContextForge.secret.BASIC_AUTH_PASSWORD | string | `"changeme"` | |
141+
| mcpContextForge.secret.BASIC_AUTH_USER | string | `"admin"` | |
142+
| mcpContextForge.secret.JWT_ALGORITHM | string | `"HS256"` | |
143+
| mcpContextForge.secret.JWT_SECRET_KEY | string | `"my-test-key"` | |
144+
| mcpContextForge.secret.TOKEN_EXPIRY | string | `"10080"` | |
145+
| mcpContextForge.service.port | int | `80` | |
146+
| mcpContextForge.service.type | string | `"ClusterIP"` | |
147+
| mcpFastTimeServer.enabled | bool | `true` | |
148+
| mcpFastTimeServer.image.pullPolicy | string | `"IfNotPresent"` | |
149+
| mcpFastTimeServer.image.repository | string | `"ghcr.io/ibm/fast-time-server"` | |
150+
| mcpFastTimeServer.image.tag | string | `"0.2.0"` | |
151+
| mcpFastTimeServer.ingress.enabled | bool | `true` | |
152+
| mcpFastTimeServer.ingress.path | string | `"/fast-time"` | |
153+
| mcpFastTimeServer.ingress.pathType | string | `"Prefix"` | |
154+
| mcpFastTimeServer.ingress.servicePort | int | `80` | |
155+
| mcpFastTimeServer.port | int | `8080` | |
156+
| mcpFastTimeServer.probes.liveness.failureThreshold | int | `3` | |
157+
| mcpFastTimeServer.probes.liveness.initialDelaySeconds | int | `3` | |
158+
| mcpFastTimeServer.probes.liveness.path | string | `"/health"` | |
159+
| mcpFastTimeServer.probes.liveness.periodSeconds | int | `15` | |
160+
| mcpFastTimeServer.probes.liveness.port | int | `8080` | |
161+
| mcpFastTimeServer.probes.liveness.successThreshold | int | `1` | |
162+
| mcpFastTimeServer.probes.liveness.timeoutSeconds | int | `2` | |
163+
| mcpFastTimeServer.probes.liveness.type | string | `"http"` | |
164+
| mcpFastTimeServer.probes.readiness.failureThreshold | int | `3` | |
165+
| mcpFastTimeServer.probes.readiness.initialDelaySeconds | int | `3` | |
166+
| mcpFastTimeServer.probes.readiness.path | string | `"/health"` | |
167+
| mcpFastTimeServer.probes.readiness.periodSeconds | int | `10` | |
168+
| mcpFastTimeServer.probes.readiness.port | int | `8080` | |
169+
| mcpFastTimeServer.probes.readiness.successThreshold | int | `1` | |
170+
| mcpFastTimeServer.probes.readiness.timeoutSeconds | int | `2` | |
171+
| mcpFastTimeServer.probes.readiness.type | string | `"http"` | |
172+
| mcpFastTimeServer.replicaCount | int | `2` | |
173+
| mcpFastTimeServer.resources.limits.cpu | string | `"50m"` | |
174+
| mcpFastTimeServer.resources.limits.memory | string | `"64Mi"` | |
175+
| mcpFastTimeServer.resources.requests.cpu | string | `"25m"` | |
176+
| mcpFastTimeServer.resources.requests.memory | string | `"10Mi"` | |
177+
| migration.activeDeadlineSeconds | int | `600` | |
178+
| migration.backoffLimit | int | `3` | |
179+
| migration.command.migrate | string | `"alembic upgrade head || echo '⚠️ Migration check failed'"` | |
180+
| migration.command.waitForDb | string | `"python /app/mcpgateway/utils/db_isready.py --max-tries 30 --interval 2 --timeout 5"` | |
181+
| migration.enabled | bool | `true` | |
182+
| migration.image.pullPolicy | string | `"Always"` | |
183+
| migration.image.repository | string | `"ghcr.io/ibm/mcp-context-forge"` | |
184+
| migration.image.tag | string | `"latest"` | |
185+
| migration.resources.limits.cpu | string | `"200m"` | |
186+
| migration.resources.limits.memory | string | `"512Mi"` | |
187+
| migration.resources.requests.cpu | string | `"100m"` | |
188+
| migration.resources.requests.memory | string | `"256Mi"` | |
189+
| migration.restartPolicy | string | `"Never"` | |
190+
| pgadmin.enabled | bool | `true` | |
191+
| pgadmin.env.email | string | `"[email protected]"` | |
192+
| pgadmin.env.password | string | `"admin123"` | |
193+
| pgadmin.image.pullPolicy | string | `"IfNotPresent"` | |
194+
| pgadmin.image.repository | string | `"dpage/pgadmin4"` | |
195+
| pgadmin.image.tag | string | `"latest"` | |
196+
| pgadmin.probes.liveness.failureThreshold | int | `5` | |
197+
| pgadmin.probes.liveness.initialDelaySeconds | int | `10` | |
198+
| pgadmin.probes.liveness.path | string | `"/misc/ping"` | |
199+
| pgadmin.probes.liveness.periodSeconds | int | `15` | |
200+
| pgadmin.probes.liveness.port | int | `80` | |
201+
| pgadmin.probes.liveness.successThreshold | int | `1` | |
202+
| pgadmin.probes.liveness.timeoutSeconds | int | `2` | |
203+
| pgadmin.probes.liveness.type | string | `"http"` | |
204+
| pgadmin.probes.readiness.failureThreshold | int | `3` | |
205+
| pgadmin.probes.readiness.initialDelaySeconds | int | `15` | |
206+
| pgadmin.probes.readiness.path | string | `"/misc/ping"` | |
207+
| pgadmin.probes.readiness.periodSeconds | int | `10` | |
208+
| pgadmin.probes.readiness.port | int | `80` | |
209+
| pgadmin.probes.readiness.successThreshold | int | `1` | |
210+
| pgadmin.probes.readiness.timeoutSeconds | int | `2` | |
211+
| pgadmin.probes.readiness.type | string | `"http"` | |
212+
| pgadmin.resources.limits.cpu | string | `"200m"` | |
213+
| pgadmin.resources.limits.memory | string | `"256Mi"` | |
214+
| pgadmin.resources.requests.cpu | string | `"100m"` | |
215+
| pgadmin.resources.requests.memory | string | `"128Mi"` | |
216+
| pgadmin.service.port | int | `80` | |
217+
| pgadmin.service.type | string | `"ClusterIP"` | |
218+
| postgres.credentials.database | string | `"postgresdb"` | |
219+
| postgres.credentials.password | string | `"test123"` | |
220+
| postgres.credentials.user | string | `"admin"` | |
221+
| postgres.enabled | bool | `true` | |
222+
| postgres.existingSecret | string | `""` | |
223+
| postgres.image.pullPolicy | string | `"IfNotPresent"` | |
224+
| postgres.image.repository | string | `"postgres"` | |
225+
| postgres.image.tag | string | `"17"` | |
226+
| postgres.persistence.accessModes[0] | string | `"ReadWriteMany"` | |
227+
| postgres.persistence.enabled | bool | `true` | |
228+
| postgres.persistence.size | string | `"5Gi"` | |
229+
| postgres.persistence.storageClassName | string | `"manual"` | |
230+
| postgres.probes.liveness.command[0] | string | `"pg_isready"` | |
231+
| postgres.probes.liveness.command[1] | string | `"-U"` | |
232+
| postgres.probes.liveness.command[2] | string | `"$(POSTGRES_USER)"` | |
233+
| postgres.probes.liveness.failureThreshold | int | `5` | |
234+
| postgres.probes.liveness.initialDelaySeconds | int | `10` | |
235+
| postgres.probes.liveness.periodSeconds | int | `15` | |
236+
| postgres.probes.liveness.successThreshold | int | `1` | |
237+
| postgres.probes.liveness.timeoutSeconds | int | `3` | |
238+
| postgres.probes.liveness.type | string | `"exec"` | |
239+
| postgres.probes.readiness.command[0] | string | `"pg_isready"` | |
240+
| postgres.probes.readiness.command[1] | string | `"-U"` | |
241+
| postgres.probes.readiness.command[2] | string | `"$(POSTGRES_USER)"` | |
242+
| postgres.probes.readiness.failureThreshold | int | `3` | |
243+
| postgres.probes.readiness.initialDelaySeconds | int | `15` | |
244+
| postgres.probes.readiness.periodSeconds | int | `10` | |
245+
| postgres.probes.readiness.successThreshold | int | `1` | |
246+
| postgres.probes.readiness.timeoutSeconds | int | `3` | |
247+
| postgres.probes.readiness.type | string | `"exec"` | |
248+
| postgres.resources.limits.cpu | string | `"1000m"` | |
249+
| postgres.resources.limits.memory | string | `"1Gi"` | |
250+
| postgres.resources.requests.cpu | string | `"500m"` | |
251+
| postgres.resources.requests.memory | string | `"64Mi"` | |
252+
| postgres.service.port | int | `5432` | |
253+
| postgres.service.type | string | `"ClusterIP"` | |
254+
| redis.enabled | bool | `true` | |
255+
| redis.image.pullPolicy | string | `"IfNotPresent"` | |
256+
| redis.image.repository | string | `"redis"` | |
257+
| redis.image.tag | string | `"latest"` | |
258+
| redis.probes.liveness.command[0] | string | `"redis-cli"` | |
259+
| redis.probes.liveness.command[1] | string | `"PING"` | |
260+
| redis.probes.liveness.failureThreshold | int | `5` | |
261+
| redis.probes.liveness.initialDelaySeconds | int | `5` | |
262+
| redis.probes.liveness.periodSeconds | int | `15` | |
263+
| redis.probes.liveness.successThreshold | int | `1` | |
264+
| redis.probes.liveness.timeoutSeconds | int | `2` | |
265+
| redis.probes.liveness.type | string | `"exec"` | |
266+
| redis.probes.readiness.command[0] | string | `"redis-cli"` | |
267+
| redis.probes.readiness.command[1] | string | `"PING"` | |
268+
| redis.probes.readiness.failureThreshold | int | `3` | |
269+
| redis.probes.readiness.initialDelaySeconds | int | `10` | |
270+
| redis.probes.readiness.periodSeconds | int | `10` | |
271+
| redis.probes.readiness.successThreshold | int | `1` | |
272+
| redis.probes.readiness.timeoutSeconds | int | `2` | |
273+
| redis.probes.readiness.type | string | `"exec"` | |
274+
| redis.resources.limits.cpu | string | `"100m"` | |
275+
| redis.resources.limits.memory | string | `"256Mi"` | |
276+
| redis.resources.requests.cpu | string | `"50m"` | |
277+
| redis.resources.requests.memory | string | `"16Mi"` | |
278+
| redis.service.port | int | `6379` | |
279+
| redis.service.type | string | `"ClusterIP"` | |
280+
| redisCommander.enabled | bool | `true` | |
281+
| redisCommander.image.pullPolicy | string | `"IfNotPresent"` | |
282+
| redisCommander.image.repository | string | `"rediscommander/redis-commander"` | |
283+
| redisCommander.image.tag | string | `"latest"` | |
284+
| redisCommander.probes.liveness.failureThreshold | int | `5` | |
285+
| redisCommander.probes.liveness.initialDelaySeconds | int | `10` | |
286+
| redisCommander.probes.liveness.path | string | `"/"` | |
287+
| redisCommander.probes.liveness.periodSeconds | int | `15` | |
288+
| redisCommander.probes.liveness.port | int | `8081` | |
289+
| redisCommander.probes.liveness.successThreshold | int | `1` | |
290+
| redisCommander.probes.liveness.timeoutSeconds | int | `2` | |
291+
| redisCommander.probes.liveness.type | string | `"http"` | |
292+
| redisCommander.probes.readiness.failureThreshold | int | `3` | |
293+
| redisCommander.probes.readiness.initialDelaySeconds | int | `15` | |
294+
| redisCommander.probes.readiness.path | string | `"/"` | |
295+
| redisCommander.probes.readiness.periodSeconds | int | `10` | |
296+
| redisCommander.probes.readiness.port | int | `8081` | |
297+
| redisCommander.probes.readiness.successThreshold | int | `1` | |
298+
| redisCommander.probes.readiness.timeoutSeconds | int | `2` | |
299+
| redisCommander.probes.readiness.type | string | `"http"` | |
300+
| redisCommander.resources.limits.cpu | string | `"100m"` | |
301+
| redisCommander.resources.limits.memory | string | `"256Mi"` | |
302+
| redisCommander.resources.requests.cpu | string | `"50m"` | |
303+
| redisCommander.resources.requests.memory | string | `"128Mi"` | |
304+
| redisCommander.service.port | int | `8081` | |
305+
| redisCommander.service.type | string | `"ClusterIP"` | |

0 commit comments

Comments
 (0)