Skip to content

Search these docs from your AI tool

  • Antigravity
    {
      "mcpServers": {
        "edisyl-docs": {
          "serverUrl": "https://docs.edisyl.com/mcp"
        }
      }
    }
  • Claude CodeCLI
    claude mcp add edisyl-docs https://docs.edisyl.com/mcp --transport http --scope user
  • CodexCLI
    codex mcp add --url https://docs.edisyl.com/mcp edisyl-docs
  • Cursor
    {
      "mcpServers": {
        "edisyl-docs": {
          "type": "http",
          "url": "https://docs.edisyl.com/mcp"
        }
      }
    }
  • Gemini CLI
    gemini mcp add --transport http edisyl-docs https://docs.edisyl.com/mcp
  • Goose
    {
      "extensions": {
        "edisyl-docs": {
          "enabled": true,
          "name": "edisyl-docs",
          "type": "streamable_http",
          "uri": "https://docs.edisyl.com/mcp",
          "envs": {},
          "env_keys": [],
          "headers": {},
          "description": "",
          "timeout": 300,
          "bundled": null,
          "available_tools": []
        }
      }
    }
  • JetBrains AI Assistant
    {
      "mcpServers": {
        "edisyl-docs": {
          "type": "http",
          "url": "https://docs.edisyl.com/mcp"
        }
      }
    }

    Paste into Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON. Direct file writing isn’t supported — JetBrains stores this per-version as XML.

  • Junie (JetBrains)
    {
      "mcpServers": {
        "edisyl-docs": {
          "url": "https://docs.edisyl.com/mcp"
        }
      }
    }
  • OpenCode
    {
      "mcp": {
        "edisyl-docs": {
          "type": "remote",
          "url": "https://docs.edisyl.com/mcp"
        }
      }
    }
  • VS CodeCLI
    code --add-mcp '{"name":"edisyl-docs","type":"http","url":"https://docs.edisyl.com/mcp"}'
  • Windsurf
    {
      "mcpServers": {
        "edisyl-docs": {
          "serverUrl": "https://docs.edisyl.com/mcp"
        }
      }
    }

    Supports both stdio and native HTTP connections.

Installing

With registry access configured, a values file prepared and your secrets minted:

Terminal window
helm install edisyl \
oci://944311261080.dkr.ecr.us-east-1.amazonaws.com/edisyl-charts/edisyl-helm \
--version <chart-version> \
-n edisyl --create-namespace \
-f edisyl.values.yaml \
-f secrets.local.yaml \
--timeout 20m

Chart versions are listed on the image matrix. The packaged chart carries its subchart dependencies, so there is no helm repo add or helm dependency build step.

Always pin --version. Without it Helm resolves the newest chart in the registry, so two installs weeks apart silently differ.

Pass both -f files. Configuration and credentials are kept apart — see Secrets and signing keys. Later files win where they name the same key. A bare install with no values file fails by design. The chart stops with a message naming the missing key rather than installing something that cannot boot.

Use --timeout 20m, not the 5-minute default. The post-install hooks wait on the database to provision a volume and publish its generated secrets, which routinely takes longer than five minutes on a first install with a cold image pull. At the default you get Error: failed post-install: timed out on an install that was actually working.

Do not use --atomic or --wait. Both make Helm wait for the application deployments before the post-install hooks run — so they block on the migration that has not happened yet. --atomic then rolls the release back, which deletes the database cluster and its PersistentVolumeClaims.

Every object the chart renders lands in the namespace you pass to -n, with one exception: the bundled Inngest subchart reads its own inngest.namespace.name value, which defaults to edisyl. Installing into a differently-named namespace without overriding it puts Inngest somewhere its consumers and their Secrets are not. See Configuration.

--create-namespace creates the namespace if needed; omit it if you provision namespaces yourself, which you will want to do if you need specific Pod Security Standard labels.

For the first few minutes, api and worker crash-loop. This is expected and self-heals. They start before the migration hook has finished setting up the database they ship alongside, fail to connect, and are restarted until it exists.

What should happen, in order:

  1. The database cluster is created and provisions a volume.
  2. Hook jobs run the migration, seed, and content sync.
  3. The application pods stop crash-looping and become ready.

If pods are still crash-looping after the hooks have finished, something is actually wrong — go to Verifying the install.

The install returns before the apps are ready

Section titled “The install returns before the apps are ready”

helm install comes back once the hooks have run, while the Deployments are still rolling. Wait for them rather than assuming:

Terminal window
for d in api edisyl worker lattice auth; do
kubectl -n edisyl rollout status "deploy/$d" --timeout=10m
done

Then run the chart’s own test, which checks what a probe from your laptop cannot — see Verifying the install:

Terminal window
helm test edisyl -n edisyl --logs --timeout 5m
Terminal window
kubectl -n edisyl get pods -w

In another shell, the hook jobs:

Terminal window
kubectl -n edisyl get jobs

A hook pod stuck in CreateContainerConfigError is waiting on a Secret that does not exist yet, and the pod’s event message names which one:

Terminal window
kubectl -n edisyl describe pod -l job-name=edisyl-migrate
Terminal window
helm uninstall edisyl -n edisyl

Some subchart volumes claimed by StatefulSets do survive, so a namespace may still hold PVCs afterwards. Check before assuming either way:

Terminal window
kubectl -n edisyl get pvc

Report incorrect code

Please provide a detailed description of the incorrect code.