🎃 Add a Helm chart for self-hosted Kubernetes installs
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 40/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- docker, helm, kubernetes, nginx, postgresql
- Área
- ci-cd, devops, documentation, infrastructure
Línea de trabajo
Start with docker-compose.yml and start.sh for the environment variables and start modes, then Dockerfile:108-181 for the user, ports and healthcheck. Build the chart under deploy/helm/anythingmcp/ and check the probes against /health in health.controller.ts. Done when helm lint and helm template pass kubeconform -strict for both values files and the CI job is green. Claim the issue by comment first, since the issue suggests splitting the work.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Part of the October Challenge #997.
Why
Teams that run everything on Kubernetes cannot use docker compose up. Today they translate docker-compose.yml into manifests themselves and have to work out which paths go to which port, what the secrets must look like and how long the app needs to boot. A Helm chart is the usual way to install a self-hosted service on Kubernetes (n8n, Grafana and Keycloak ship one). The repository has no Helm or Kubernetes files, and the docs do not mention Kubernetes.
Self-hosted vs Cloud
- Self-hosted: a new install method for self-hosted instances, Community and Business alike. Licence and edition logic is unchanged and the chart says nothing about editions. The chart does not set
DEPLOYMENT_MODE, so instances stay self-hosted (docs/deployment.md:353). - Cloud (
DEPLOYMENT_MODE=cloud): not affected. AnythingMCP Cloud runs on Docker Compose with a blue/green release script (docker-compose.cloud.yml,deploy/cloud/release.sh), not on Kubernetes. Do not change anything underdeploy/cloud/or the compose files. - Who can use it: whoever operates the cluster. App roles are untouched: on a fresh install the first account registered becomes the admin of a new organization (
auth.controller.ts:490).
What to build
Chart at deploy/helm/anythingmcp/ with Chart.yaml (apiVersion v2, appVersion = the root package.json version, chart version starting at 0.1.0), a commented values.yaml, values.schema.json, templates/ and a README.md. No subchart dependencies.
- App Deployment:
- Image
helpcodeai/anythingmcp, tag defaulting toappVersion. Check the version tag format published on Docker Hub and never default tolatest. The image islinux/amd64only (docker-publish.yml:80); say so in the README. - Default command (
./start.sh, both processes in one pod; migrations run at start). Container ports3000(UI) and4000(API/MCP), oneServicewith both. replicaCount: 1. Document that more replicas need Redis (REDIS_URL) for shared rate limits, and sticky sessions ifMCP_STATEFUL_SESSIONSis enabled, because stateful MCP sessions live in process memory (mcp-servers/mcp-session.manager.ts).- Probes: a
startupProbeonGET /health:4000that allows at least 180 s (boot loads the whole catalog; the Dockerfile uses a 120 s start period,Dockerfile:168-178); readiness on/health; liveness on a TCP check of port 4000, because/healthalso checks the database (health.controller.ts:74-80) and a database outage should not restart the pod. securityContext:runAsNonRoot, uid/gid 1001 (Dockerfile:125,:164),allowPrivilegeEscalation: false, capabilities dropped; anemptyDirat/app/diagnostics(HEAP_SNAPSHOT_DIR,Dockerfile:154). If you can makereadOnlyRootFilesystem: truework with a fewemptyDirmounts, do it and list the paths; otherwise say what blocked it.- Resources with defaults, and
NODE_MAX_OLD_SPACE_MB(read bystart.sh) set below the memory limit.
- Image
- Configuration:
NODE_ENV=production,PORT=4000, andSERVER_URL,FRONTEND_URL,CORS_ORIGIN,NEXT_PUBLIC_API_URLall derived from onepublicUrlvalue (CORS_ORIGINis mandatory in production,main.ts:215-235).MCP_AUTH_MODE(defaultlegacy, as indocker-compose.yml),MCP_ALLOW_ANONYMOUS=false,ALLOW_OPEN_REGISTRATION=false, optionalREDIS_URL, plusextraEnv/extraEnvFromfor everything else (SMTP, KG LLM, SSO). - Secrets:
JWT_SECRET,ENCRYPTION_KEY,MCP_API_KEYand the database password, either fromexistingSecretor generated by the chart. Generated values must survivehelm upgrade(read the existing Secret withlookup, annotatehelm.sh/resource-policy: keep): a newENCRYPTION_KEYmakes every stored connector credential unreadable. At least 32 characters; the backend refuses placeholder-looking values (common/secrets.util.ts:48-66), sovalues.yamlmust not ship example secrets. - Database:
postgresql.enabled: true(default) deploys onepostgres:17-alpineStatefulSet with a PVC, for evaluation and small installs.externalDatabase.urlorexternalDatabase.existingSecretfor production, which disables the bundled one. - Ingress (disabled by default): one host; the backend paths to port 4000 and everything else to 3000. Use the same list as the Cloud Caddyfile (
deploy/cloud/Caddyfile:88-123):/api,/health,/mcp,/.well-known,/auth,/sso,/authorize,/callback,/token,/register,/userinfo. Explicit routing matters: the frontend's own rewrites to the backend are baked in at build time tohttp://localhost:4000(packages/frontend/next.config.ts:5, note indocker-compose.cloud.yml:209-214).ingressClassName, TLS and annotations come from values; document for ingress-nginxproxy-buffering: "off"and a read timeout of at least 120 s, because MCP responses can be streamed and tool calls can take a while. NOTES.txt: the URL, "open it and register the first user", and a reminder to back upENCRYPTION_KEYtogether with the database (docs/operations/backup-restore.md).- CI: a job in
.github/workflows/ci.ymlthat runshelm lint, andhelm templatepiped tokubeconform -strictfor the default values and for an external-database + ingress values file. Changes under.github/get extra review, so keep the workflow diff small. - Docs: a "Kubernetes (Helm)" section in
docs/deployment.mdafter "Production Deployment" (:159), linking the chart README.
Where to look
docker-compose.yml: the app's environment variables and defaults.start.sh:all/backend/frontendmodes, migrations at start,NODE_MAX_OLD_SPACE_MB.Dockerfile:108-181: runtime user, ports, diagnostics directory, healthcheck and why its start period is long.docs/deployment.md:202-246(path routing behind a proxy),:338-363(environment variables).deploy/cloud/Caddyfile:84-123: complete list of backend-owned paths.docker-compose.cloud.yml:203-216: why the frontend cannot proxy to a separate backend.packages/backend/src/common/secrets.util.ts: secret validation at startup.packages/backend/src/health/health.controller.ts:74-80: what/healthchecks.packages/backend/src/mcp-servers/mcp-session.manager.ts: in-memory stateful sessions.
Acceptance criteria
-
helm lintpasses;helm templateoutput for both values files passeskubeconform -strict. - On kind or minikube:
helm install→ pod Ready → UI reachable → first user registered → a connector created →tools/liston/mcp/<serverId>answers with an MCP API key (commands and output in the PR, secrets redacted). -
helm upgradewithout value changes keepsJWT_SECRETandENCRYPTION_KEY: after the upgrade, existing sessions stay valid and connector credentials still decrypt. - The pod runs as non-root; no secret value appears in a ConfigMap or in
values.yamldefaults. - The CI job is green;
docs/deployment.mdand the chart README are written.
Out of scope
- Publishing the chart (Helm repository, OCI registry, Artifact Hub): maintainers decide after merge.
- Separate Deployments for frontend and backend (
./start.sh backend|frontend), autoscaling, multi-replica support. - Bundling Redis or the MOTIS service used by the Deutsche Bahn connector.
- Operators, Kustomize, Terraform.
- Any change to
deploy/cloud/, the compose files or the Dockerfile.
Size
L (several days, may be split: app Deployment, Secret and external database first; bundled Postgres, Ingress and CI second).
How to claim
Comment "I'd like to work on this" and we'll assign you. Rules in #997.
- Lenguaje dominante
- TypeScript
- Estrellas
- 856
- Forks
- 82
- Merge medio
- 8 h 27 min
- PR fusionados (30 d)
- 104
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de HelpCode-ai/anythingmcp
-
good first issue hacktoberfest
Dificultad 2/5 Medio día Aptitud para principiantes 70/100
HelpCode-ai/anythingmcp#996 ·
Los mantenedores suelen responder en 1 día
-
good first issue hacktoberfest
Dificultad 2/5 Medio día Aptitud para principiantes 72/100
HelpCode-ai/anythingmcp#995 ·
Los mantenedores suelen responder en 1 día
-
enhancement good first issue hacktoberfest help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
HelpCode-ai/anythingmcp#982 ·
Los mantenedores suelen responder en 1 día
-
good first issue hacktoberfest
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
HelpCode-ai/anythingmcp#745 ·
Los mantenedores suelen responder en 1 día
-
🐣 Good first issue: contribute a new MCP adapterQuizá libre de nuevo @7k777 la tomó hace 21 días y no hay ningún pull request abierto. Abiertoenhancement good first issue hacktoberfest help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
HelpCode-ai/anythingmcp#150 · 18 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de HelpCode-ai/anythingmcp
Issues similares
-
nextjs-tracking
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
cloudflare/vinext#3887 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
apache/rocketmq-dashboard#6331 ·
Los mantenedores suelen responder en 5 días
-
bug cache clinical-safety P1-critical
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
juspay/blend-design-system#1788 ·
Los mantenedores suelen responder en 1 día
-
[Analytics] Add Focus Time-Block Efficiency Ratio Calculator in src/lib/focus/efficiency-ratio.tsAbiertoanalytics beginner friendly community contributions-welcome enhancement good first issue hacktoberfest help wanted up-for-grabs
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día