
Helm Mcp
io.github.SCGIS-Wales由 GitHub 帳號 SCGIS-Wales 發布v0.5.0更新於 Oct 24, 2026
The full Helm CLI surface as 46 MCP tools, backed by the Helm v3 and v4 Go SDKs.
概覽
把 Helm CLI 包裝成 46 個 MCP 工具,讓助理能安裝、升級、檢視與管理 Kubernetes release 和 Chart。
- 可以做什麼
- 安裝、升級、回復、解除安裝、測試與列出 release,並讀取其狀態、歷史、values、manifest、hook 與說明
- 建立、lint、算繪範本、封裝、拉取、推送與驗證 Chart,並檢視 Chart 中繼資料、values、CRD 與 README
- 新增、列出、更新、移除 Chart repository 並產生索引,以及登入或登出 OCI registry
- 在 Artifact Hub 與已設定的 repository 中搜尋 Chart
- 安裝、列出、更新、解除安裝、封裝與驗證 Helm 外掛
- 輸出 Helm 環境與 SDK 版本資訊
- 適用情境
- 適合讓助理透過 Helm 處理 Kubernetes 部署:檢視目前部署內容、在發佈前算繪或 lint Chart,或在你自己管理的叢集上執行安裝、升級與回復。
- 執行需求
- 以本機程序透過 stdio 執行(預先建置的執行檔、原始碼建置、Docker 映像或 Python 套件;Python 套件需 Python 3.12+ 並內附 Go 執行檔)。需要 kubeconfig(KUBECONFIG 變數或 ~/.kube/config)與叢集憑證;雲端叢集依賴各自的 AWS、GCP 或 Azure 憑證變數。外掛相關工具需 PATH 中有 helm CLI,容器映像除外。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Helm Mcp,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
[CI/CD Pipeline] [Go Report Card] [PyPI version] [Python versions] [Downloads] [License: MIT]
An open-source MCP (Model Context Protocol) server that gives AI assistants full access to Helm — the Kubernetes package manager. Built with the native Helm Go SDK, supporting both Helm 3.x and 4.x in a single binary.
Use natural language to manage your Kubernetes deployments.
Connect helm-mcp to Claude, Cursor, VS Code, or any MCP-compatible client to install charts, manage releases, search repositories, and more — all through conversation.
Table of Contents
- Why helm-mcp?
- Installation
- Quick Start
- MCP Client Configuration
- MCP Protocol Support
- Available Tools
- Tool Annotations
- Structured Output
- Helm CLI Coverage
- Kubernetes Authentication
- Helm Version Selection
- Python Package
- Resilience Configuration (Python)
- Response Payload Management
- Known Limitations
- Security
- Development
- Architecture
- Contributing
- Community
- License
Why helm-mcp?
- 46 MCP tools covering every Helm CLI command (minus shell completion and help)
- Dual Helm SDK support — Helm v3 and v4 via native Go SDK (not CLI wrappers)
- Two transport modes — stdio (default) and Streamable HTTP, stateless by default
- Cloud provider ready — EKS, GKE, AKS kubeconfig formats work out of the box
- Security first — Linux process hardening, credential memory zeroing, input validation, path traversal prevention
- Python wrapper — FastMCP-based proxy that auto-discovers all tools
- Forward proxy support — respects
HTTP_PROXY,HTTPS_PROXY,NO_PROXY
Installation
Pre-built Binaries
Download the latest release for your platform from GitHub Releases:
Build from Source
Requires Go 1.27.2+.
Docker
Python Package
See Python Package below for full details.
Quick Start
stdio mode (for Claude Code, Cursor, etc.)
HTTP mode (Streamable HTTP)
HTTP mode listens on 127.0.0.1:8080 by default. To accept remote clients,
configure authentication (see Authentication)
and bind explicitly, for example --addr 0.0.0.0:8080.
HTTP mode is stateless by default (MCP 2026-07-28): there is no
initialize handshake and no Mcp-Session-Id header, so the server can sit
behind a plain round-robin load balancer with no sticky sessions and no shared
session store. Clients speaking an older protocol revision still work — the SDK
negotiates down automatically.
If a client needs the legacy per-session behaviour:
Removed in v0.2.0:
--mode sse. The HTTP+SSE transport has been deprecated by the MCP specification since2025-03-26and is formally Deprecated under the2026-07-28feature lifecycle policy. Use--mode http, which serves Streamable HTTP on the same address.
MCP Client Configuration
Claude Desktop
Add to ~/.claude/claude_desktop_config.json:
Claude Code
Cursor / Windsurf / VS Code
Add to your MCP server configuration:
Remote / HTTP Clients
Start the server in HTTP mode, then connect any MCP-compatible client to the endpoint:
MCP Protocol Support
helm-mcp implements MCP 2026-07-28 and negotiates down to earlier
revisions (2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05) for older
clients, so upgrading the server does not require upgrading your client.
Available Tools (46)
Release Management (14)
Chart Management (14)
Repository Management (5)
Registry / OCI (2)
Search (2)
Plugin Management (6)
Environment (2)
Dependency Update (1)
Tool Annotations
Every tool carries MCP annotations so a client — or an agent deciding what to call — can tell a read at a glance from a change to your cluster.
Everything not listed as destructive is annotated destructiveHint: false,
which matters because the MCP specification defaults that hint to true.
Annotations are hints, not a security boundary — a client may ignore them. For a real boundary, use the OIDC scopes and roles described under Security.
Structured Output
Eleven tools publish an outputSchema and return structuredContent alongside
the human-readable text, so clients can consume results without parsing prose:
helm_list, helm_status, helm_history, helm_get_metadata,
helm_get_values, helm_repo_list, helm_search_repo, helm_search_hub,
helm_plugin_list, helm_env, helm_version.
The existing JSON text content is unchanged, so clients that parse it keep
working. Collections are wrapped in an object with a count rather than
returned as a bare array. Tools whose output is free-form YAML or text —
helm_template, helm_lint, helm_get_manifest, helm_show_*,
helm_package, helm_dependency_list — have no output schema, because there
is no useful shape to declare.
Helm CLI Coverage
Complete mapping of every helm CLI command to its helm-mcp MCP tool equivalent.
46 of 46 operational Helm commands are covered. The only excluded commands (completion, help) are shell utilities that have no meaning in an MCP context.
helm plugin package and helm plugin verify were introduced in Helm v4 alongside signed plugin distribution, so they require helm_version: "v4".
Flag coverage
Commands are covered with their flags, not just their names. Every argument a tool accepts reaches the Helm SDK, and the arguments that change rendering or apply behaviour are covered by tests that render or dry run real charts. The flags below are deliberately not exposed:
Kubernetes Authentication
Every tool accepts these authentication fields via the GlobalInput:
EKS (AWS)
EKS uses exec-based authentication in kubeconfig. The standard kubeconfig generated by aws eks update-kubeconfig works out of the box:
Or with direct token authentication:
GKE (Google Cloud)
GKE kubeconfig generated by gcloud container clusters get-credentials works out of the box:
AKS (Azure)
AKS kubeconfig generated by az aks get-credentials works out of the box:
Helm Version Selection
Every tool supports a helm_version field to select between Helm v3 and v4:
"v4"(default): the Helm v4 SDK, with server side apply, plugin based post-renderers and signed plugins"v3": the Helm v3 SDK, for backward compatibility
v4 only features
These fields need helm_version: "v4". Passing one with "v3" is an error
rather than a silent no-op.
Two tools are v4 only in their entirety: helm_plugin_package and
helm_plugin_verify.
Server side apply
Helm 4 applies with Kubernetes server side apply by default. helm_install
follows that: leave server_side_apply unset for server side apply, or set it
to false for client side apply. On helm_upgrade and helm_rollback an
unset value keeps Helm's auto mode, which reuses the apply method recorded
on the previous release. Release results report it as apply_method
("ssa" or "csa").
Before v0.5.0 the v4 engine forced client side apply on every install and rollback unless
server_side_applywas true. If you depend on client side apply, passserver_side_apply: false.
Waiting: wait and wait_strategy
Helm v4 replaced v3's boolean --wait with a strategy enum, so
helm_install, helm_upgrade, helm_rollback and helm_uninstall accept a
wait_strategy field alongside wait:
wait_strategy takes precedence when set. Otherwise wait: true maps to
"watcher" and wait: false maps to "hookOnly".
Before v0.2.0 the v4 engine hardcoded the watcher strategy, so
wait: falsewas silently ignored and every v4 operation waited. If you relied on that behaviour, setwait: true(orwait_strategy: "watcher") explicitly.
Available on both v3 and v4
rollback_on_failure (Helm's --atomic) is supported by both engines, and is
available on helm_install and helm_upgrade. So are devel, sub_notes,
hide_notes, skip_schema_validation, disable_openapi_validation,
enable_dns, take_ownership and hide_secret; output_dir,
use_release_name and force_replace on helm_install;
reset_then_reuse_values on helm_upgrade; ignore_not_found and
description on helm_uninstall; all, uninstalling, time_format and
selector on helm_list; show_resources on helm_status; logs on
helm_test; and jsonpath on the helm_show_* tools.
Chart sources
helm_install, helm_upgrade, helm_template, helm_pull and the
helm_show_* tools accept Helm's chart location flags: repo, username,
password, ca_file, cert_file, key_file, insecure_skip_tls_verify,
plain_http, pass_credentials, verify and keyring. TLS and credential
options also apply to oci:// charts.
verify checks the chart provenance against the keyring, which defaults to
$GNUPGHOME/pubring.gpg (or ~/.gnupg) as in the CLI. On helm_pull, prov
downloads the provenance file without verifying it (helm pull --prov).
Upgrade or install
helm_upgrade with install: true installs the release when it does not
exist, or replaces it when its last revision was uninstalled, exactly like
helm upgrade --install. create_namespace applies to that install.
Values
Values are combined in the order Helm uses: values_files, then the inline
values object (deep merged, like --set), then set_string, set_file and
set_literal, each a list of key=value strings. set_file reads local files
only, and every path it would read is validated, including paths inside
{a,b} lists and further comma separated pairs.
Chart dependencies
dependency_update on helm_install, helm_upgrade and helm_template
fetches missing dependencies before rendering, as the CLI flag does. Without
it, a chart whose dependencies are not vendored is reported as an error
instead of rendering without its subcharts.
Python Package
A Python wrapper is available that uses FastMCP to create a transparent proxy around the helm-mcp Go binary. New tools added to the Go binary are automatically available in Python without code changes.
Installation
Requires Python 3.12+. The Go binary is bundled inside platform-specific wheels — no Go toolchain is required. Supported platforms: linux-amd64, linux-arm64, darwin-amd64, darwin-arm64, windows-amd64. The binary is extracted from the wheel on first use, with SHA256 checksum verification to protect against tampering.
You can verify the binary is available:
Usage as a Server
Usage as a Client
CLI
Integrating with FastMCP
The Python package is built on FastMCP and returns standard FastMCP server/client objects. You can compose it with other FastMCP servers:
Binary Discovery
The Python package locates the helm-mcp Go binary in this order:
HELM_MCP_BINARYenvironment variable- Bundled binary in the package
bin/directory - Auto-download from GitHub Releases (with SHA256 checksum verification)
helm-mcponPATH
Environment Variables
The proxy forwards these environment variables to the Go subprocess:
Resilience Configuration (Python)
The Python package includes a comprehensive resilience stack built on FastMCP middleware, circuitbreaker, and tenacity. All settings are configurable via HELM_MCP_* environment variables with sensible defaults.
Environment Variables
CLI Flags
Programmatic Configuration
OpenTelemetry
FastMCP emits traces via the OpenTelemetry API. To receive actual trace data, install the SDK:
Then enable tracing:
Response Payload Management
Large Helm outputs (manifests, values, template renders) can overflow LLM context windows. helm-mcp includes two layers of response size management to prevent this.
Response Truncation
All tool responses are automatically truncated when they exceed a configurable size limit. The default is 256 KB (~64K tokens). Truncated responses include metadata indicating the original size and a suggestion to use more specific queries.
Configure the limit via CLI flag or environment variable:
The CLI flag takes precedence over the environment variable.
Manifest Sanitisation
Tools that return Kubernetes YAML (helm_get_manifest, helm_get_all, helm_get_hooks, helm_template) automatically strip noisy fields before returning results. This typically reduces manifest sizes by 40-60% without losing meaningful information.
Fields stripped:
metadata.managedFields— internal Kubernetes bookkeeping (often the largest single field)kubectl.kubernetes.io/last-applied-configuration— redundant copy of the entire objectdeployment.kubernetes.io/revision— internal controller annotationcontrol-plane.alpha.kubernetes.io/leader— leader election data
This sanitisation is always active and cannot be disabled, as these fields are never useful for LLM interactions. The original unsanitised data remains available through direct kubectl access.
Resilience Primitives
The internal/resilience package provides additional production resilience patterns:
Known Limitations
Plugin tools use the Helm CLI
All six plugin tools shell out to the system helm CLI, which is the only part
of helm-mcp that does not go through the Helm Go SDK, because Helm's plugin
packages are internal and not importable.
- Helm v4 verifies plugin signatures by default. Plugins that are not signed,
such as
helm-diff, install withhelm_plugin_installandverify: false. - The published container image ships a pinned
helmCLI, so plugin tools work there. If you run the binary directly,helmmust be onPATH, and with the defaulthelm_version: "v4"it must be a Helm v4 CLI: a v3 CLI rejects v4 flags such as--verify=false.
Security
Process Hardening (Linux)
When running on Linux, helm-mcp applies process-level hardening at startup to reduce the attack surface of the stdio transport. MCP servers running as IDE child processes inherit full user privileges — these mitigations limit what an attacker can do if the process is compromised.
Hardening is best-effort and non-fatal — failures are logged (with --debug) but never crash the process. On non-Linux platforms (macOS, Windows), hardening is skipped with an informational log message.
Mechanisms Evaluated but Not Implemented
Credential Scrubbing
All error messages are automatically scrubbed to remove:
- Bearer tokens (including EKS, GKE, and Azure JWT tokens)
- Basic authentication credentials
- URL-embedded passwords (
https://user:password@host)
Input Validation
Every tool handler calls ValidateGlobalInput before executing, ensuring namespace and kubeconfig fields are validated on every request.
The security package provides validators for:
- Release names (DNS-1123 compliant)
- Namespace names
- Kubeconfig file paths (path traversal prevention, symlink detection, sensitive path rejection —
/etc/shadow,/proc/,/dev/,/sys/are blocked) - URLs (scheme validation + SSRF protection: DNS resolution with private IP blocking for
0.0.0.0/8,127.0.0.0/8,10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16, IPv4-mapped addresses, NAT64, and IPv6 unspecified/loopback/link-local/unique-local ranges). Applied to repository URLs, URL chart references, remote values files, and OCI push targets - File paths (traversal prevention, symlink rejection including symlinked parent directories, sensitive path rejection). Applied to values files,
set_fileentries, keyrings, CA/cert/key files, passphrase files, output and untar directories, chart paths forhelm_lintandhelm_package, and the chart name and starter forhelm_create - Repository names (alphanumeric, dots, dashes, underscores; prevents cache path traversal)
- Timeout durations (max 24h)
- Plugin names (alphanumeric + dashes/underscores, no leading dash to prevent argument injection)
File Permissions
- Repository configuration files are written with
0600(owner read/write only) - Config directories are created with
0700(owner only)
HTTP Server Hardening
When running in HTTP mode:
- Listens on
127.0.0.1:8080unless--addrsays otherwise ReadHeaderTimeout: 10sandReadTimeout: 30s— prevent slow client attacksWriteTimeout: 30m(--write-timeout) — long enough forhelm_install/helm_upgradewithwait; raise it if clients use longer Helm timeouts- A dropped request cancels its tool call (
--propagate-cancellation, on by default), so abandoned operations do not run until the write timeout IdleTimeout: 120s— reclaims idle connectionsMaxHeaderBytes: 1MB— prevents header-based DoS- Graceful shutdown with 5-second timeout
Authentication (OIDC/OAuth2)
When running in HTTP mode, helm-mcp supports OAuth2/OIDC authentication with JWT validation, claims-based authorization, and structured audit logging. This aligns with the MCP Security Best Practices.
Authentication is fully opt-in. When no OIDC or token environment variables are set, the server runs without authentication (same as previous versions). Stdio mode is never affected by authentication configuration.
Quick Start — Entra ID (Azure AD / ADFS)
Authentication events (auth_success, auth_failure) are written to stderr as JSON at Info level, independent of --debug.
Environment Variables
Authentication Priority
- OIDC/OAuth2 — if
HELM_MCP_OIDC_ISSUERis set, JWT validation with JWKS is enabled. - Static bearer token — if only
HELM_MCP_AUTH_TOKENis set, constant-time comparison is used. - No auth — if neither is set, the server accepts all requests (suitable for local stdio usage).
Token Validation
Every incoming JWT is validated for:
Session Cache
Validated tokens are cached in-memory to avoid redundant JWKS lookups:
- Inactivity TTL: 5 minutes by default (configurable via
HELM_MCP_SESSION_TTL, e.g.,5m,10m,1h) - Token expiry: Cached tokens are never used beyond their
expclaim - Cache key: SHA-256 hash of the raw bearer token (prevents raw token storage in memory)
- Sliding window: Each access resets the inactivity timer
- Maximum entries: 10,000 (oldest evicted on overflow)
Audit Logging
When OIDC authentication is enabled, structured audit events are emitted via slog for every authentication attempt:
Audit events include: principal ID/name, tenant ID, client app ID, scopes, roles, token ID, session ID, action, resource, result, duration, and remote address. Enable --debug for full audit visibility, or configure your log aggregator to capture security_audit messages.
On-Behalf-Of (OBO) Token Exchange
When helm-mcp needs to call a downstream API (such as the Kubernetes API) on behalf of the authenticated user, it exchanges the incoming token for a new one scoped to that downstream service. This avoids forwarding the original token, which could be misused if the downstream service is compromised or if the token's audience doesn't match.
How It Works
Each hop in the chain:
- Validates the incoming token's audience (must match this server)
- Exchanges it via OBO for a new token targeted at the next service
- Preserves the original user's identity in the new token's claims
- Triggers a fresh Conditional Access evaluation (if configured in Entra ID)
OBO Configuration
Why Not Forward the Token?
Forwarding a user's token to downstream services is tempting but problematic. The MCP Security Best Practices explicitly discourages it. With OBO, each service gets a token minted for its own audience, scoped to only the permissions it needs. If a token is intercepted, the blast radius is limited to a single service rather than the entire chain.
AWS EKS and OBO Support
AWS EKS 1.34+ with OIDC
AWS EKS supports OIDC identity providers for cluster authentication starting from EKS 1.21, with significant improvements in 1.34+. However, EKS does not natively support the Entra ID OBO flow for Kubernetes API authentication. The authentication patterns differ:
Recommended pattern for EKS: Configure Entra ID as the EKS OIDC identity provider. The MCP client authenticates the user and obtains a token with aud = helm-mcp. helm-mcp validates this token, then performs an OBO exchange to get a new token with aud = EKS cluster OIDC client ID. This OBO-issued token is used for Kubernetes API calls, preserving user identity and enabling per-user RBAC.
AWS Labs MCP and OBO
AWS Labs MCP servers (e.g., awslabs/mcp) and Amazon Bedrock AgentCore do not implement OAuth2 OBO or RFC 8693 Token Exchange. AgentCore uses a different model:
- User identity propagation: Via an opaque
X-Amzn-Bedrock-AgentCore-Runtime-User-IdHTTP header — not a cryptographically signed token - Outbound authentication: OAuth Authorization Code (3Lo) or Client Credentials (2Lo), but these are separate auth events, not delegated identity propagation
- Token Vault: Stores refresh tokens for third-party services, but this is agent-scoped, not user-delegated
This means AWS Labs MCP servers cannot participate in an Entra ID OBO chain natively. If your architecture requires user-delegated identity propagation through AWS-hosted MCP servers, you must implement OBO exchange as a custom middleware layer, or use helm-mcp's built-in OBO support as a reference implementation.
Forward Proxy Support
helm-mcp respects standard proxy environment variables:
Development
Prerequisites
- Go 1.27.2+
- Python 3.12+ (for the Python package)
- golangci-lint v2 (optional, for linting)
Build
Test
Lint
Security Check
Coverage
Architecture
Contributing
We welcome contributions from the community! Whether it's bug reports, feature requests, documentation improvements, or code contributions — all help is appreciated.
See CONTRIBUTING.md for detailed guidelines on:
- Setting up your development environment
- Running tests and linters
- Submitting pull requests
- Commit message conventions
Community
- Bug reports & feature requests: GitHub Issues
- Discussions & questions: GitHub Discussions
- Releases: GitHub Releases (auto-published on every merge to main)
License
This project is licensed under the MIT License — free to use, modify, and distribute.
來源:README.md,提交 14a844d
工具
0版本歷史
2- v0.5.0最新Oct 10, 2026
- v0.4.2Sep 26, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分