{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-agen-for-saas/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Host the MCP Gateway","siteUrl":"https://developers.frontegg.com/","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"host-the-mcp-gateway","__idx":0},"children":["Host the MCP Gateway"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide explains how to deploy Frontegg's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["MCP Gateway"]}," Helm chart in your Kubernetes cluster. The chart packages two services that expose an MCP-compliant authorization and tool routing layer in front of your MCP servers."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Component"},"children":["Component"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Role"},"children":["Role"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-auth"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Serves OAuth, dynamic client registration, authorization, and callback endpoints for MCP clients."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-gw"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Receives MCP requests and routes or authorizes them against Frontegg."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both components share a Redis backend for token and session caching and are configured against a Frontegg vendor using region, client credentials, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["applicationId"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"what-the-chart-deploys","__idx":1},"children":["What the chart deploys"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For each release, the chart renders:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Deployment/<release>-mcp-gateway-auth"]},", which runs the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-auth"]}," image."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Deployment/<release>-mcp-gateway-gw"]},", which runs the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-gw"]}," image."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Service/<release>-mcp-gateway-auth"]},", a ClusterIP service on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.port"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Service/<release>-mcp-gateway-gw"]},", a ClusterIP service on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpGw.port"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A shared ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ServiceAccount"]},", which is optional and enabled by default."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["HorizontalPodAutoscaler resources per component, which are optional and disabled by default."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The chart does not ship an Ingress, API gateway, or other layer-7 router. You must front the two services with the path-matching ingress or API gateway you already use, such as NGINX Ingress, Traefik, Istio, Envoy, AWS ALB, GCP HTTPS LB, or Kong. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#routing"},"children":["Routing"]}," for the path map you need to configure."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"installation","__idx":2},"children":["Installation"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"console","header":{"controls":{"copy":{}}},"source":"helm repo add frontegg https://frontegg.github.io/helm-charts/\nhelm repo update\nhelm upgrade --install mcp-gateway frontegg/mcp-gateway -f my-values.yaml\n","lang":"console"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"minimal-valuesyaml","__idx":3},"children":["Minimal values.yaml"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every value under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env"]}," must be filled in for a working deployment. Names are camelCase in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["values.yaml"]}," and are translated to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["UPPER_SNAKE_CASE"]}," environment variables on both containers. For example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vendorClientId"]}," becomes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VENDOR_CLIENT_ID"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"env:\n  # Redis shared cache for sessions and tokens.\n  redisHost: my-redis.example.com\n  redisPort: \"6379\"\n  redisPassword: \"<redis-password>\"\n  redisDb: \"0\"\n  redisTlsEnabled: \"true\"\n  cacheTtl: \"300\"\n\n  # Frontegg vendor.\n  fronteggRegion: \"eu\" # eu | us | ca | au | stg\n  vendorClientId: \"<vendor-client-id>\"\n  vendorClientSecret: \"<vendor-client-secret>\"\n  applicationId: \"<application-id>\"\n\n  # The hostname this gateway will be reached at, without scheme.\n  fronteggMcpGwHost: \"tenant.mcp-gw.frontegg.com\"\n  # The same host with scheme, used as the OAuth issuer and authorization URL.\n  externalAuthorizationUrl: \"https://tenant.mcp-gw.frontegg.com\"\n  # Your hybrid auth backend, with scheme.\n  hybridAuthHost: \"https://hybrid-auth.customer.example.com\"\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Optional environment values:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Key"},"children":["Key"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Purpose"},"children":["Purpose"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["approvalFlowWebhookEndpoint"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Webhook that receives tool-call approval requests."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventWebhookProvider"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Where to forward audit events, such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["datadog"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventWebhookUrl"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Destination URL for the event webhook."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventWebhookSecret"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Shared secret for signing event webhook deliveries."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["These are commented out in the default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["values.yaml"]},". Uncomment and set them if needed."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"routing","__idx":4},"children":["Routing"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The two services must sit behind a path-matching HTTP router, such as an Ingress controller, service mesh gateway, or cloud API gateway. Configure it so that the following auth-related paths land on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-auth"]}," and everything else lands on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-gw"]},":"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Path"},"children":["Path"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Target service"},"children":["Target service"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/.well-known/*"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<release>-mcp-gateway-auth"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/authorize"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<release>-mcp-gateway-auth"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/integration-callback"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<release>-mcp-gateway-auth"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/security-stepup-verify"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<release>-mcp-gateway-auth"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/dcr/register"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<release>-mcp-gateway-auth"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Everything else, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<release>-mcp-gateway-gw"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your router must satisfy these requirements:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Order and specificity"]},": The auth paths above must win over the catch-all ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/"]}," route. Most ingress controllers do this automatically based on prefix length. On routers that match in declared order, declare the auth rules first."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Host header preservation"]},": The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Host"]}," header of the incoming request must match ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.fronteggMcpGwHost"]},". Both services use it to validate issuer URLs. If your gateway rewrites the upstream host, configure it to pass the original host."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Single external hostname"]},": Both services are reached on the same external host. Only the path differs."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"common-configuration","__idx":5},"children":["Common configuration"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"image-tags","__idx":6},"children":["Image tags"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Image tags are pinned in the chart and are bumped by Frontegg as part of releasing a new chart version. Do not override ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.tag"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpGw.tag"]},". To pick up a new image, upgrade to a newer chart version:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"console","header":{"controls":{"copy":{}}},"source":"helm repo update\nhelm upgrade mcp-gateway frontegg/mcp-gateway -f my-values.yaml\n","lang":"console"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"resources","__idx":7},"children":["Resources"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each component has independent ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["resources"]}," blocks under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.resources"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpGw.resources"]},". Defaults are conservative, with 200m CPU and 256Mi memory requests and a 512Mi memory limit, and are suitable for low-traffic tenants."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"autoscaling","__idx":8},"children":["Autoscaling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Autoscaling is disabled by default. Enable it per component:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"autoscaling:\n  mcpGw:\n    enabled: true\n    minReplicas: 2\n    maxReplicas: 10\n    targetCPUUtilizationPercentage: 70\n  mcpAuth:\n    enabled: true\n    minReplicas: 2\n    maxReplicas: 5\n    targetCPUUtilizationPercentage: 70\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoscaling.<component>.enabled"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},", the Deployment's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["replicas"]}," field is omitted so the HPA can manage it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"probes","__idx":9},"children":["Probes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All three probes, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["liveness"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["readiness"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["startup"]},", hit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /health"]}," on port ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["http"]},". Override per component if your environment needs different timings:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"mcpGw:\n  livenessProbe:\n    httpGet:\n      path: /health\n      port: http\n    initialDelaySeconds: 10\n    periodSeconds: 10\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"pod-scheduling","__idx":10},"children":["Pod scheduling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nodeSelector"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tolerations"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["affinity"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["podAnnotations"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["podLabels"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["podSecurityContext"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["securityContext"]}," are top-level values and apply to both deployments. There is no per-component override today. To schedule the two components differently, install the chart twice with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nameOverride"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"service-account","__idx":11},"children":["Service account"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A single ServiceAccount is shared by both deployments. To use an existing one:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"serviceAccount:\n  create: false\n  name: my-existing-sa\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"values-reference","__idx":12},"children":["Values reference"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Key"},"children":["Key"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Default"},"children":["Default"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.repository"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["527305576865.dkr.ecr.us-east-1.amazonaws.com/docker-hub/frontegg/hybrid-agen-co-auth"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-auth"]}," image repository. Override only for private registry mirrors."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.tag"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Pinned by chart"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Managed by Frontegg and bumped by chart release. Do not override."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.pullPolicy"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IfNotPresent"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Image pull policy."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.replicaCount"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Used when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoscaling.mcpAuth.enabled"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.port"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["8080"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Service port. The container always listens on 8080."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.resources"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requests: {cpu: 200m, memory: 256Mi}"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["limits: {memory: 512Mi}"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Default resource requests and limits."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.{liveness,readiness,startup}Probe"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /health"]}," on port ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["http"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Default health probes."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpGw.*"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Mirrors ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.*"]}," defaults"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-gw"]}," deployment configuration."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["imagePullSecrets"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[]"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}," entries for private registry credentials."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nameOverride"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fullnameOverride"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Name override values."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["serviceAccount.create"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Whether to create a ServiceAccount."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["serviceAccount.automount"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Whether to automount the ServiceAccount token."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["serviceAccount.annotations"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{}"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Useful for IRSA or Workload Identity."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["serviceAccount.name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["If empty, defaults to the chart fullname."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["service.type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ClusterIP"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applied to both services."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["podAnnotations"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["podLabels"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{}"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applied to both deployments' pod templates."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["podSecurityContext"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{}"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Pod-level security context."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["securityContext"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["capabilities.drop: [NET_RAW]"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Container-level security context."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoscaling.mcpAuth.enabled"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Whether autoscaling is enabled for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-auth"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoscaling.mcpAuth.minReplicas"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["maxReplicas"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["100"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Replica bounds for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-auth"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoscaling.mcpAuth.targetCPUUtilizationPercentage"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["80"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["CPU utilization target."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoscaling.mcpAuth.targetMemoryUtilizationPercentage"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Unset"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Set to enable memory-based scaling."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoscaling.mcpGw.*"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Mirrors ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoscaling.mcpAuth.*"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Autoscaling configuration for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-gw"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["volumes"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["volumeMounts"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[]"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applied to both deployments."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nodeSelector"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tolerations"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["affinity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{}"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[]"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{}"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Applied to both deployments."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.redisHost"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Hostname of the shared Redis instance."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.redisPort"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"6379\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Redis port."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.redisPassword"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Redis password."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.redisDb"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"0\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Redis database."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.redisTlsEnabled"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"true\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"false\""]}," for plain Redis."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.cacheTtl"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"300\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Token and session cache TTL in seconds."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.fronteggRegion"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"eu\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Supported values are ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eu"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["us"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ca"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["au"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["stg"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.vendorClientId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Frontegg vendor client ID."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.vendorClientSecret"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Frontegg vendor client secret."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.applicationId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Frontegg application ID."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.fronteggMcpGwHost"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["External hostname of the gateway, without scheme."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.externalAuthorizationUrl"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Same hostname with scheme, published as the OAuth issuer."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.hybridAuthHost"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["URL of your hybrid auth service, with scheme."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.approvalFlowWebhookEndpoint"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Commented"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Webhook for approval-flow callbacks."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.eventWebhookProvider"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Commented"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Example: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["datadog"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.eventWebhookUrl"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Commented"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Destination URL for event webhooks."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env.eventWebhookSecret"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Commented"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Shared secret for signing event webhooks."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every key under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".Values.env"]}," is converted from camelCase to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["UPPER_SNAKE_CASE"]}," and emitted as a container environment variable on both containers. To add a new environment variable, add a key under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["env"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"verify-the-install","__idx":13},"children":["Verify the install"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"console","header":{"controls":{"copy":{}}},"source":"# Watch the rollout.\nkubectl rollout status deploy/<release>-mcp-gateway-auth\nkubectl rollout status deploy/<release>-mcp-gateway-gw\n\n# Health checks. Both should return 200.\nkubectl port-forward svc/<release>-mcp-gateway-auth 8080:8080 &\ncurl -fsS http://localhost:8080/health\n\nkubectl port-forward svc/<release>-mcp-gateway-gw 8081:8080 &\ncurl -fsS http://localhost:8081/health\n","lang":"console"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"upgrade-the-chart","__idx":14},"children":["Upgrade the chart"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There are no CRDs and no persistent state owned by the chart. Redis lives outside it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Image versions are tied to chart versions. Each chart release pins the matching ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-auth"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp-gw"]}," images. To roll out a new image, upgrade the chart:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"console","header":{"controls":{"copy":{}}},"source":"helm repo update\nhelm upgrade mcp-gateway frontegg/mcp-gateway --version <new-chart-version> -f my-values.yaml\n","lang":"console"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do not override ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpAuth.tag"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcpGw.tag"]}," in your values file. Those are managed by Frontegg as part of the chart release."]}]},"headings":[{"value":"Host the MCP Gateway","id":"host-the-mcp-gateway","depth":2},{"value":"What the chart deploys","id":"what-the-chart-deploys","depth":3},{"value":"Installation","id":"installation","depth":3},{"value":"Minimal values.yaml","id":"minimal-valuesyaml","depth":3},{"value":"Routing","id":"routing","depth":3},{"value":"Common configuration","id":"common-configuration","depth":3},{"value":"Image tags","id":"image-tags","depth":4},{"value":"Resources","id":"resources","depth":4},{"value":"Autoscaling","id":"autoscaling","depth":4},{"value":"Probes","id":"probes","depth":4},{"value":"Pod scheduling","id":"pod-scheduling","depth":4},{"value":"Service account","id":"service-account","depth":4},{"value":"Values reference","id":"values-reference","depth":3},{"value":"Verify the install","id":"verify-the-install","depth":3},{"value":"Upgrade the chart","id":"upgrade-the-chart","depth":3}],"frontmatter":{"navbar":{"items":[{"label":"Guides","page":"/agen-for-saas/introduction/overview.md"}]},"title":"Host the MCP Gateway","description":"Deploy the Agen for SaaS MCP Gateway Helm chart in your Kubernetes cluster.","seo":{"title":"Host the MCP Gateway"}},"lastModified":"2026-04-27T16:34:46.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/agen-for-saas/configuration/hosting-mcp-gateway","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}