BoltMCP Installation Docs

Configuration Reference

Complete reference for all configurable values of the BoltMCP Helm chart.

database

ParameterTypeDefaultDescription
database.affinityobject{}Affinity rules. Pass-through, not strictly validated.
database.coreSchemastring"boltmcp_core"Schema holding the shared application tables. The ltree extension is namespaced here and the schema is owned by the migrate-core user; application roles have no dependency on public.
database.hoststring""External database host (when internal.enabled=false)
database.image.pullPolicystring"IfNotPresent"Image pull policy
database.image.repositorystring"postgres"PostgreSQL image repository
database.image.tagstring"15-alpine"PostgreSQL image tag
database.internal.enabledbooltrueDeploy internal PostgreSQL. Set false for external DB
database.namestring"boltmcp"Database name
database.nodeSelectorobject{}Node selector
database.persistence.accessModesarray["ReadWriteOnce"]PVC access modes
database.persistence.enabledbooltrueEnable persistent storage
database.persistence.sizestring"10Gi"PVC size
database.persistence.storageClassstring""Storage class (falls back to global.storageClass)
database.portint5432Database port
database.resourcesobject{}CPU/memory resource limits and requests. Pass-through, not strictly validated.
database.superuser.usernamestring"postgres"Superuser username (password lives in the database Secret as superuser-password)
database.tolerationsarray[]Tolerations
database.users.keycloak.schemastring"boltmcp_keycloak"Keycloak schema name
database.users.keycloak.usernamestring"boltmcp_keycloak"Keycloak DB user (password: keycloak-password)
database.users.mcpServer.usernamestring"boltmcp_mcp_server"MCP Server DB user, read-only on the core schema (password: mcp-server-password)
database.users.migrateCore.usernamestring"boltmcp_migrate_core"Migration DB user — owns the core schema and is the only role that runs DDL/migrations (password: migrate-core-password)
database.users.restApi.usernamestring"boltmcp_rest_api"REST API DB user, read/write on the core schema (password: rest-api-password)
database.users.vault.schemastring"boltmcp_vault"Vault storage schema name
database.users.vault.usernamestring"boltmcp_vault"Vault storage DB user; owns the pre-created vault_kv_store table (password: vault-password)
database.users.web.usernamestring"boltmcp_web"Web app DB user, read/write on the core schema (password lives in the database Secret as web-password)

global

ParameterTypeDefaultDescription
global.domainstring""Apex domain that hosts BoltMCP. Used to derive per-service hostnames as web.<domain>, auth.<domain>, server.<domain>, inspector.<domain>. Required unless every per-service URL/hostname override is set explicitly.
global.hostAliasesarray[]hostAliases injected into every BoltMCP pod. Use when the public BoltMCP hostnames don't resolve from inside the cluster (split-horizon DNS, local installs) so in-cluster OIDC discovery can reach Keycloak.
global.imagePullSecretsarray[{"name":"boltmcp-pull-secret"}]Image pull secrets for private registries. Matches the Secret name created in cluster prep. Set to [] if your images come from a registry that doesn't require auth.
global.imageRegistrystring"europe-west2-docker.pkg.dev/boltmcp-platform/boltmcp-alpha/images"Default image registry for BoltMCP images
global.storageClassstring""Storage class for all BoltMCP persistent volumes. Empty uses the cluster default (fine on GKE/AKS). On EKS set it to a class you created. Overridable per-volume by database.persistence.storageClass.
global.tls.enabledbooltrueWhether the public BoltMCP URLs are served over HTTPS. Declares the scheme the workloads advertise and expect — it does not provision TLS itself; certificates and termination remain the job of your ingress / load balancer (with the chart-managed Ingress, of cert-manager via ingress.annotations). Single source of the scheme for every derived URL (web/server/inspector/Keycloak base URLs, the OIDC issuer) and for whether the chart-managed Ingress carries a tls section. Set false only for evaluation installs served over plain HTTP. Explicit overrides such as web.baseUrl and keycloak.baseUrl always win, scheme included.

ingress

Optional chart-managed Ingress. Disabled by default: bring your own ingress / gateway / load balancer instead (see examples/ingress in the chart for a reference manifest).

ParameterTypeDefaultDescription
ingress.annotationsobject{}Annotations for the Ingress. Controller- and cert-manager-specific settings go here: on ingress-nginx you almost always want cert-manager.io/cluster-issuer for TLS certificates, and on plain-HTTP installs nginx.ingress.kubernetes.io/ssl-redirect: "false". The chart applies two ingress-nginx defaults you do not need to repeat: proxy-body-size: "10m", which caps API spec uploads (ingress-nginx's own 1m default rejects them with 413), and proxy-buffer-size: "128k", required for Keycloak's large auth headers (the 4k default breaks login with "upstream sent too big header"). Setting either key here overrides the chart default; all other annotations you supply are merged alongside them.
ingress.classNamestring""IngressClass name (spec.ingressClassName). Empty omits the field so the cluster default class applies.
ingress.enabledboolfalseCreate a single Ingress routing the public BoltMCP hostnames (derived from global.domain / the per-service baseUrl overrides, so they can never drift from the URLs the services advertise) to the in-cluster services.
ingress.tls.secretNamestring"boltmcp-tls"Name of the TLS Secret covering all BoltMCP hostnames (created by cert-manager when the cluster-issuer annotation is set). The Ingress carries a tls section only when global.tls.enabled is true.

keycloak

ParameterTypeDefaultDescription
keycloak.affinityobject{}Affinity rules. Pass-through, not strictly validated.
keycloak.baseUrlstring""Base URL. If empty, defaults to https://auth.<global.domain> (http when global.tls.enabled is false). The OIDC issuer is <baseUrl>/realms/boltmcp
keycloak.enabledbooltrueEnable Keycloak deployment
keycloak.image.pullPolicystring"IfNotPresent"Image pull policy
keycloak.image.repositorystring"quay.io/keycloak/keycloak"Keycloak image
keycloak.image.tagstring"26.7.0-1"Keycloak image tag
keycloak.nodeSelectorobject{}Node selector
keycloak.production.enabledbooltrueRun in production mode (start vs start-dev). Production mode works over plain HTTP behind a proxy (the chart sets the proxy-headers env); set false only for evaluation installs with no ingress / reverse proxy in front of Keycloak at all
keycloak.resourcesobject{}CPU/memory resource limits and requests. Pass-through, not strictly validated.
keycloak.service.healthPortint9000Health check port
keycloak.service.portint8080Service port
keycloak.service.typestring"ClusterIP"Service type
keycloak.tolerationsarray[]Tolerations

mcpInspector

ParameterTypeDefaultDescription
mcpInspector.affinityobject{}Affinity rules. Pass-through, not strictly validated.
mcpInspector.baseUrlstring""Base URL. If empty, defaults to https://inspector.<global.domain> (http when global.tls.enabled is false)
mcpInspector.enabledbooltrueEnable MCP Inspector
mcpInspector.image.pullPolicystring"IfNotPresent"Image pull policy
mcpInspector.image.repositorystring"ghcr.io/modelcontextprotocol/inspector"Image repository
mcpInspector.image.tagstring"0.21.1"Image tag
mcpInspector.nodeSelectorobject{}Node selector
mcpInspector.resourcesobject{}CPU/memory resource limits and requests. Pass-through, not strictly validated.
mcpInspector.service.proxyPortint6277Proxy port
mcpInspector.service.typestring"ClusterIP"Service type
mcpInspector.service.webPortint6274Web UI port
mcpInspector.tolerationsarray[]Tolerations

mcpServer

ParameterTypeDefaultDescription
mcpServer.affinityobject{}Affinity rules. Pass-through, not strictly validated.
mcpServer.baseUrlstring""Base URL. If empty, defaults to https://server.<global.domain> (http when global.tls.enabled is false)
mcpServer.extraEnvarray[]Additional environment variables
mcpServer.image.pullPolicystring"IfNotPresent"Image pull policy
mcpServer.image.repositorystring""Image repository (defaults to global.imageRegistry/boltmcp-mcp-server)
mcpServer.image.tagstring""Image tag (defaults to .Chart.AppVersion if empty)
mcpServer.nodeSelectorobject{}Node selector
mcpServer.replicaCountint1Number of replicas
mcpServer.resourcesobject{}CPU/memory resource limits and requests. Pass-through, not strictly validated.
mcpServer.service.portint3001Service port
mcpServer.service.typestring"ClusterIP"Service type
mcpServer.tolerationsarray[]Tolerations

migrations

ParameterTypeDefaultDescription
migrations.backoffLimitint3Job retry limit
migrations.coreMigrateImage.repositorystring""Core schema migration image (defaults to global.imageRegistry/boltmcp-migrate-core)
migrations.coreMigrateImage.tagstring""Tag (inherits from web.image.tag)
migrations.ttlSecondsAfterFinishedint300Cleanup delay after job completion

oidc

ParameterTypeDefaultDescription
oidc.adminUser.emailstring""Required. Email for the first user in the boltmcp Keycloak realm. Provisioned on first install via --import-realm (username boltmcp_admin, firstName Admin, emailVerified true, granted realm-management/realm-admin). Password lives in the auth Secret as boltmcp-admin-password.
oidc.mcpServer.clientIdstring"boltmcp-mcp-server"MCP Server client ID (secret: mcp-server-client-secret)
oidc.mcpServerToRestApi.clientIdstring"boltmcp-mcp-server-to-rest-api"Client used by the MCP server to obtain user tokens for the REST API (secret: mcp-server-to-rest-api-client-secret). PKCE-aware, audience-mapped to REST_API_BASE_URL.
oidc.providerstring"keycloak"OIDC provider type
oidc.restApiResourceServer.clientIdstring"boltmcp-rest-api"Client used by the REST API to authenticate to Keycloak's introspection endpoint (secret: rest-api-resource-server-client-secret).
oidc.web.clientIdstring"boltmcp-web"Platform client ID (secret lives in the OIDC Secret as web-client-secret)

restApi

ParameterTypeDefaultDescription
restApi.affinityobject{}Affinity rules. Pass-through, not strictly validated.
restApi.extraEnvarray[]Additional environment variables
restApi.image.pullPolicystring"IfNotPresent"Image pull policy
restApi.image.repositorystring""Image repository (defaults to global.imageRegistry/boltmcp-rest-api)
restApi.image.tagstring""Image tag (defaults to .Chart.AppVersion if empty)
restApi.nodeSelectorobject{}Node selector
restApi.replicaCountint1Number of replicas
restApi.resourcesobject{}CPU/memory resource limits and requests. Pass-through, not strictly validated.
restApi.service.portint3003Service port
restApi.service.typestring"ClusterIP"Service type
restApi.tolerationsarray[]Tolerations

secrets

Names of user-managed Kubernetes Secrets the chart reads. The chart never creates these.

ParameterTypeDefaultDescription
secrets.auth.namestring""Name of the user-managed Secret holding auth tokens, the master-realm Keycloak admin password (keycloak-admin-password), the BoltMCP-realm first-user password (boltmcp-admin-password), and the MCP Inspector token. If empty, defaults to <release>-auth.
secrets.database.namestring""Name of the user-managed Secret holding database passwords. If empty, defaults to <release>-database.
secrets.oidc.namestring""Name of the user-managed Secret holding OIDC client secrets. If empty, defaults to <release>-oidc.

vault

ParameterTypeDefaultDescription
vault.affinityobject{}Affinity rules. Pass-through, not strictly validated.
vault.enabledbooltrueDeploy the bundled Vault
vault.image.pullPolicystring"IfNotPresent"Image pull policy
vault.image.repositorystring"hashicorp/vault"Image repository
vault.image.tagstring"1.21.4"Image tag
vault.kubernetesAuth.audiencestring"vault"Projected-token audience (must match the Vault role)
vault.kubernetesAuth.authMountPathstring"kubernetes"Mount path of Vault's Kubernetes auth method
vault.kubernetesAuth.enabledbooltrueWire boltmcp-rest-api to Vault via Kubernetes auth (ServiceAccount + projected token + env)
vault.kubernetesAuth.kvMountstring"secret"KV v2 secrets engine mount
vault.kubernetesAuth.kvPathPrefixstring"boltmcp/server-env-api-cred"Logical prefix the REST API stores secrets under
vault.kubernetesAuth.mcpServer.policystring"boltmcp-mcp-server"Vault policy for the MCP Server's read-only access to the secret prefix
vault.kubernetesAuth.mcpServer.rolestring"boltmcp-mcp-server"Vault role bound to the MCP Server ServiceAccount (the reader; shares the auth mount, KV mount/prefix, and audience)
vault.kubernetesAuth.policystring"boltmcp-rest-api"Vault policy for the secret prefix
vault.kubernetesAuth.rolestring"boltmcp-rest-api"Vault role bound to the REST API ServiceAccount
vault.nodeSelectorobject{}Node selector
vault.resourcesobject{}CPU/memory resource limits and requests. Pass-through, not strictly validated.
vault.seal.configobject{}Key/value pairs rendered into the seal stanza (e.g. region, kms_key_id)
vault.seal.extraEnvarray[]Extra Vault container env for the seal (e.g. KMS credentials)
vault.seal.typestring""Seal type — "" is Shamir/manual unseal; awskms/gcpckms/azurekeyvault/transit enable auto-unseal
vault.service.portint8200Service port
vault.service.typestring"ClusterIP"Service type
vault.tolerationsarray[]Tolerations

web

ParameterTypeDefaultDescription
web.affinityobject{}Affinity rules. Pass-through, not strictly validated.
web.baseUrlstring""Base URL. If empty, defaults to https://web.<global.domain> (http when global.tls.enabled is false)
web.extraEnvarray[]Additional environment variables
web.image.pullPolicystring"IfNotPresent"Image pull policy
web.image.repositorystring""Image repository (defaults to global.imageRegistry/boltmcp-web)
web.image.tagstring""Image tag (defaults to .Chart.AppVersion if empty)
web.nodeSelectorobject{}Node selector
web.replicaCountint1Number of replicas
web.resourcesobject{}CPU/memory resource limits and requests. Pass-through, not strictly validated.
web.service.portint3000Service port
web.service.typestring"ClusterIP"Service type
web.tolerationsarray[]Tolerations

Other values

ParameterTypeDefaultDescription
fullnameOverridestring""Override the full release name
nameOverridestring""Override the release name
podAnnotationsobject{}Pod annotations
podSecurityContextobject{}Pod security context

On this page