Skip to main content

Configuration

All configuration is via environment variables. Sensible defaults are built in — you only need to override what you want to change.


Installation options​

Pull the image and run:

docker run --rm -it \
-p 8765:8765 \
-v ~/.kube/config:/app/.kube/config:ro \
talkopsai/helm-mcp-server:latest

With custom env vars:

docker run --rm -it \
-p 9000:9000 \
-v ~/.kube/config:/app/.kube/config:ro \
-e MCP_PORT=9000 \
-e MCP_LOG_LEVEL=DEBUG \
-e MCP_ALLOW_WRITE=false \
-e HELM_TIMEOUT=600 \
talkopsai/helm-mcp-server:latest

Read-only mode (no install/upgrade/rollback/uninstall):

docker run --rm -it \
-p 8765:8765 \
-v ~/.kube/config:/app/.kube/config:ro \
-e MCP_ALLOW_WRITE=false \
talkopsai/helm-mcp-server:latest

Build from source (Docker)​

cd talkops-mcp/src/helm-mcp-server
docker build -t helm-mcp-server .

docker run --rm -it \
-p 8765:8765 \
-v ~/.kube/config:/app/.kube/config:ro \
helm-mcp-server

From source (Python)​

Using uv:

curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/talkops-ai/talkops-mcp.git
cd talkops-mcp/src/helm-mcp-server

uv venv --python=3.12
source .venv/bin/activate # On Unix/macOS
uv pip install -e .

Or with pip:

git clone https://github.com/talkops-ai/talkops-mcp.git
cd talkops-mcp/src/helm-mcp-server
python -m venv .venv
source .venv/bin/activate
pip install -e .

Environment variables​

Pass overrides with -e when running in Docker.

Server​

VariableDefaultDescription
MCP_SERVER_NAMEhelm-mcp-serverServer name identifier
MCP_SERVER_VERSION0.2.0Server version string
MCP_TRANSPORThttpTransport mode: http or stdio
MCP_HOST0.0.0.0Host address for HTTP server
MCP_PORT8765Port for HTTP server
MCP_PATH/mcpMCP endpoint path
MCP_ALLOW_WRITEtrueEnable mutating operations (see below)
MCP_HTTP_TIMEOUT300HTTP request timeout (seconds)
MCP_HTTP_KEEPALIVE_TIMEOUT5HTTP keepalive timeout (seconds)
MCP_HTTP_CONNECT_TIMEOUT60Connection timeout (seconds)
MCP_LOG_LEVELINFOLog level: DEBUG, INFO, WARNING, ERROR, CRITICAL
MCP_LOG_FORMATjsonLog format: json or text

Helm & Kubernetes​

VariableDefaultDescription
HELM_TIMEOUT300Timeout for Helm operations (seconds)
K8S_TIMEOUT30Timeout for Kubernetes API calls (seconds)
KUBECONFIG~/.kube/configPath to kubeconfig file

Write access control​

MCP_ALLOW_WRITE controls whether the server accepts mutating operations.

When true (default) — Everything is enabled: install, upgrade, rollback, uninstall, plus all read operations.

When false (read-only) — Only safe operations are allowed:

AllowedBlocked
Chart search and discoveryhelm_install_chart
Value validationhelm_upgrade_release
Manifest renderinghelm_rollback_release
Dependency checkinghelm_uninstall_release
Release status and monitoring
Dry-run operations

Dry-runs are always permitted regardless — they don't modify the cluster.

Set MCP_ALLOW_WRITE=false when you want the assistant to explore, validate, and plan — but not actually change anything.


MCP client setup​

Start the server (Docker or local), then point your MCP client at it:

{
"mcpServers": {
"helm-mcp-server": {
"url": "http://localhost:8765/mcp",
"description": "Helm MCP Server for managing Kubernetes workloads via Helm"
}
}
}

Use the port you configured. Default is 8765.


Troubleshooting​

Connection timeout — The server takes a few seconds to initialize. Increase your client's connect_timeout to at least 60 seconds and timeout to 300 seconds.

Chart not found — Make sure the chart exists in the repo, run helm repo update, and double-check the repository name (e.g. bitnami, argo).

Helm operations timing out — Set HELM_TIMEOUT=600 (or pass -e HELM_TIMEOUT=600 with Docker).


Next steps​