mcpField
H
helm-mcp

helm-mcp

本地服务
github.com云与基础设施23 周前更新

关于 helm-mcp

helm-mcp 是一个开源 MCP 服务,将 Helm 操作提供给管理 Kubernetes 部署的 AI 助手。它通过原生 Go SDK 在单个二进制文件中支持 Helm 3.x 和 4.x,并提供 stdio 与 Streamable HTTP 传输。

主要功能

  1. 01覆盖 Helm CLI 命令的 46 个工具
  2. 02支持 Helm 3.x 和 4.x SDK
  3. 03支持 stdio 与 Streamable HTTP 传输
  4. 04部分工具提供结构化输出
  5. 05通过工具注释标明操作风险

适用场景

  1. 01安装或升级 Kubernetes 发布版本
  2. 02搜索 Chart 仓库和镜像仓库
  3. 03查看发布状态、值和历史记录
  4. 04创建、检查和渲染 Helm Chart

MCP 相关

通过 stdio 或 Streamable HTTP 向 MCP 客户端提供 46 个 Helm 工具。它默认支持无状态 HTTP,并可与较早的 MCP 协议版本协商。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"scgis-wales-helm": {
"command": "uvx",
"args": [
"helm-mcp"
],
"env": {
"KUBECONFIG": "<KUBECONFIG>",
"HELM_MCP_BINARY": "<HELM_MCP_BINARY>"
}
}
}
}
启动命令uvx helm-mcp
需要配置的环境变量
KUBECONFIGPath to the kubeconfig file. Defaults to ~/.kube/config.
HELM_MCP_BINARYExplicit path to the helm-mcp Go binary. Auto-detected when unset.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypihelm-mcp0.5.0
ocighcr.io/scgis-wales/helm-mcp:0.5.0

工具

46

收录的工具列表 · 更新于 2 周前

参数类型必填说明
qpsnumber否客户端 QPS 速率限制
namestring是要创建的 chart 名称;可以是路径,此时最后一个元素将作为 chart 名称
debugboolean否启用调试输出
starterstring否Starter chart:$HELM_DATA_HOME/starters 下的名称或绝对路径
namespacestring否Kubernetes 命名空间
kube_tokenstring否用于 Kubernetes API 身份验证的 Bearer 令牌
kubeconfigstring否kubeconfig 文件路径(默认为 $KUBECONFIG 或 ~/.kube/config)
burst_limitinteger否客户端默认限流上限
helm_versionstring否Helm SDK 版本:v3 或 v4(默认:v4)
kube_contextstring否来自 kubeconfig 的 Kubernetes 上下文名称
kube_apiserverstring否Kubernetes API 服务器 URL(覆盖 kubeconfig)
kube_insecure_tlsboolean否跳过 TLS 证书验证(不安全)
kube_tls_server_namestring否用于 TLS 证书验证的服务器名称

详细介绍

Helm MCP

CI/CD Pipeline Go Report Card PyPI version Python versions Downloads License: MIT

一个开源 MCP(Model Context Protocol)服务,可让 AI 助手全面访问 Helm——Kubernetes 包管理器。采用原生 Helm Go SDK 构建,在单个二进制文件中同时支持 Helm 3.x 和 4.x。

使用自然语言管理 Kubernetes 部署。
将 helm-mcp 连接到 Claude、Cursor、VS Code 或任何兼容 MCP 的客户端,即可通过对话安装 chart、管理 release、搜索仓库等。


目录

为什么选择 helm-mcp?

  • 46 个 MCP 工具,覆盖所有 Helm CLI 命令(不包括 shell 补全和帮助)
  • 双 Helm SDK 支持——通过原生 Go SDK 支持 Helm v3 和 v4(非 CLI 包装器)
  • 两种传输模式——stdio(默认)和 Streamable HTTP,默认无状态
  • 适配云服务提供商——开箱即用,支持 EKS、GKE、AKS kubeconfig 格式
  • 安全至上——Linux 进程强化、凭据内存清零、输入验证、防止路径遍历
  • Python 包装器——基于 FastMCP 的代理,可自动发现所有工具
  • 支持正向代理——遵循 HTTP_PROXY、HTTPS_PROXY、NO_PROXY

安装

预编译二进制文件

从 GitHub Releases 下载适用于你平台的最新版本:

# macOS (Apple Silicon)
curl -LO https://github.com/SCGIS-Wales/helm-mcp/releases/latest/download/helm-mcp-darwin-arm64
chmod +x helm-mcp-darwin-arm64
sudo mv helm-mcp-darwin-arm64 /usr/local/bin/helm-mcp

# macOS (Intel)
curl -LO https://github.com/SCGIS-Wales/helm-mcp/releases/latest/download/helm-mcp-darwin-amd64
chmod +x helm-mcp-darwin-amd64
sudo mv helm-mcp-darwin-amd64 /usr/local/bin/helm-mcp

# Linux (amd64)
curl -LO https://github.com/SCGIS-Wales/helm-mcp/releases/latest/download/helm-mcp-linux-amd64
chmod +x helm-mcp-linux-amd64
sudo mv helm-mcp-linux-amd64 /usr/local/bin/helm-mcp

# Linux (arm64)
curl -LO https://github.com/SCGIS-Wales/helm-mcp/releases/latest/download/helm-mcp-linux-arm64
chmod +x helm-mcp-linux-arm64
sudo mv helm-mcp-linux-arm64 /usr/local/bin/helm-mcp
从源代码构建

需要 Go 1.27.2+。

git clone https://github.com/SCGIS-Wales/helm-mcp.git
cd helm-mcp
make build
Docker
docker build -t helm-mcp .
docker run -v ~/.kube:/home/helmuser/.kube:ro helm-mcp --mode stdio
Python 包
pip install helm-mcp

完整详情请参阅下文的 Python 包。

快速开始

stdio 模式(适用于 Claude Code、Cursor 等)
helm-mcp --mode stdio
HTTP 模式(Streamable HTTP)
helm-mcp --mode http

HTTP 模式默认监听 127.0.0.1:8080。如需接受远程客户端,请配置身份验证(参见身份验证)并显式绑定地址,例如 --addr 0.0.0.0:8080。

HTTP 模式默认无状态(MCP 2026-07-28):没有 initialize 握手,也没有 Mcp-Session-Id 标头,因此服务可以部署在普通的轮询负载均衡器后,无需粘性会话或共享会话存储。使用较旧协议版本的客户端仍可正常工作——SDK 会自动协商到较低版本。

如果客户端需要旧版的按会话行为:

helm-mcp --mode http --stateless=false

已在 v0.2.0 中移除:--mode sse。 MCP 规范自 2025-03-26 起已弃用 HTTP+SSE 传输,并根据 2026-07-28 功能生命周期政策正式将其标记为弃用。请使用 --mode http,它会在同一地址提供 Streamable HTTP。

MCP 客户端配置

Claude Desktop

添加到 ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "helm": {
      "command": "helm-mcp",
      "args": ["--mode", "stdio"]
    }
  }
}
Claude Code
claude mcp add helm -- helm-mcp --mode stdio
Cursor / Windsurf / VS Code

添加到 MCP 服务配置中:

{
  "helm-mcp": {
    "command": "helm-mcp",
    "args": ["--mode", "stdio"]
  }
}
远程 / HTTP 客户端

以 HTTP 模式启动服务,然后将任意兼容 MCP 的客户端连接到该端点:

helm-mcp --mode http
# MCP endpoint: http://localhost:8080/mcp

MCP 协议支持

helm-mcp 实现了 MCP 2026-07-28,并会为较旧客户端自动协商到早期版本(2025-11-25、2025-06-18、2025-03-26、2024-11-05),因此升级服务无需升级客户端。

功能状态
工具支持:46 个工具,每个工具都有顶层 title、注释,以及(当结果具有稳定结构时)输出架构
进度支持。helm_install、helm_upgrade、helm_uninstall、helm_rollback 和 helm_test 会在请求携带进度令牌时,每隔 10 秒发送一次 notifications/progress 心跳,因此在进度更新时重置超时的客户端会继续等待较长时间的 wait 操作
取消支持。在 HTTP 模式下,断开的请求会取消正在运行的工具调用,就像 Ctrl+C 会取消 helm CLI 一样(使用 --propagate-cancellation=false 可让操作继续完成)
无状态传输支持,且为 --mode http 的默认设置(使用 --stateless=false 可选择不启用)
server/discover支持
确定性的 tools/list 顺序支持——工具按名称排序返回,因此客户端和提示词缓存可以持续命中
服务说明支持——服务会说明版本选择、集群定位和破坏性工具的安全性
资源 / 提示词不适用——每项 Helm 操作都是一次工具调用
Tasks 扩展未实现。它适用于较长时间运行的 helm install --wait 操作,但客户端支持仍然有限。已列为后续工作。
MRTR / 引导未实现,这是有意为之。Helm 工具将所有输入都作为参数传入,因此调用过程中无需提问。
Roots / Sampling / Logging未实现。根据 2026-07-28(SEP-2577),这三项均已弃用。
HTTP+SSE 传输已在 v0.2.0 中移除——已被规范弃用。请使用 --mode http。

可用工具(46)

发布管理(14)
工具描述
helm_install将 Helm chart 安装为新版本
helm_upgrade将版本升级到新的 chart 版本或配置值
helm_uninstall卸载版本并移除相关资源
helm_rollback将版本回滚到之前的修订版本
helm_list列出版本(支持筛选、排序和分页)
helm_status显示版本状态、修订版本、chart 和配置值
helm_history显示版本的修订历史
helm_test运行版本的测试套件
helm_get_all获取版本的所有信息(配置值、清单、钩子、说明)
helm_get_hooks获取版本的钩子
helm_get_manifest获取版本的 Kubernetes 清单
helm_get_metadata获取版本的元数据
helm_get_notes获取版本的说明
helm_get_values获取版本的配置值(用户提供或计算所得)
Chart 管理(14)
工具描述
helm_create创建新的 chart,也可基于 starter 创建
helm_lint检查 chart 中的问题和最佳实践
helm_template在本地渲染模板和钩子,无需安装
helm_package将 chart 目录打包为归档文件(.tgz)
helm_pull从仓库或 OCI registry 下载 chart
helm_push将 chart 归档文件推送到 OCI registry
helm_verify验证 chart 是否具有有效的来源证明文件
helm_show_all显示 chart 的所有信息(Chart.yaml、配置值、README、CRD)
helm_show_chart显示 chart 的 Chart.yaml
helm_show_crds显示 chart 的 CRD
helm_show_readme显示 chart 的 README
helm_show_values显示 chart 的默认配置值
helm_dependency_build根据 Chart.lock 构建 charts/ 目录
helm_dependency_list列出 chart 的依赖项
仓库管理(5)
工具描述
helm_repo_add添加 chart 仓库
helm_repo_list列出已配置的 chart 仓库
helm_repo_update更新 chart 仓库索引
helm_repo_remove移除 chart 仓库
helm_repo_index为 chart 归档文件生成索引文件
Registry / OCI(2)
工具描述
helm_registry_login登录 OCI registry
helm_registry_logout退出 OCI registry
搜索(2)
工具描述
helm_search_hub在 Artifact Hub 中搜索 chart
helm_search_repo搜索本地配置的仓库
插件管理(6)
工具描述
helm_plugin_install安装 Helm 插件
helm_plugin_list列出已安装的插件
helm_plugin_uninstall卸载插件
helm_plugin_update更新插件
helm_plugin_package将插件目录打包为已签名的归档文件(仅限 v4)
helm_plugin_verify验证已打包插件的签名和来源证明(仅限 v4)
环境(2)
工具描述
helm_env打印 Helm 环境信息
helm_version打印 Helm SDK 版本信息
依赖项更新(1)
工具描述
helm_dependency_update根据 Chart.yaml 更新 charts/

工具注解

每个工具都带有 MCP 注解,让客户端——或正在决定调用哪个工具的 Agent——能够一眼区分读取集群状态的操作和更改集群状态的操作。

注解含义工具
readOnlyHint: true只读取状态;可以放心调用helm_list、helm_status、helm_history、所有 helm_get_*、所有 helm_show_*、helm_repo_list、helm_plugin_list、helm_dependency_list、helm_env、helm_version、helm_lint、helm_template、helm_verify、helm_plugin_verify、helm_search_*
destructiveHint: true可能移除或替换线上状态——仅在用户明确要求时调用helm_uninstall、helm_rollback、helm_upgrade、helm_repo_remove、helm_plugin_uninstall
openWorldHint: true访问已配置集群之外的资源(Artifact Hub、OCI 注册表、Chart 仓库)helm_search_hub、helm_search_repo、helm_pull、helm_push、所有 helm_show_*、helm_template、所有 helm_registry_*
idempotentHint: true使用相同参数重复调用不会产生额外效果所有只读工具,以及 helm_repo_add、helm_repo_update、所有 helm_dependency_*、helm_plugin_update

未列为破坏性的工具均标注为 destructiveHint: false;这一点很重要,因为 MCP 规范默认将该提示设为 true。

注解只是提示,并非安全边界——客户端可能会忽略它们。要建立真正的安全边界,请使用 Security 下所述的 OIDC 作用域和角色。

结构化输出

有 11 个工具会发布 outputSchema,并在返回可读文本的同时返回 structuredContent,以便客户端无需解析文本即可使用结果:

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。

// helm_list
{
  "releases": [
    { "name": "my-app", "namespace": "default", "revision": 3, "status": "deployed", ... }
  ],
  "count": 1
}

现有的 JSON 文本内容保持不变,因此解析这些内容的客户端仍可正常工作。集合会封装在带有 count 的对象中,而不是作为裸数组返回。输出为自由格式 YAML 或文本的工具——helm_template、helm_lint、helm_get_manifest、helm_show_*、helm_package、helm_dependency_list——没有输出架构,因为没有有用的结构可供声明。

Helm CLI 覆盖情况

helm CLI 命令与对应 helm-mcp MCP 工具的完整映射。

Helm 命令MCP 工具状态
helm createhelm_create已覆盖
helm dependency buildhelm_dependency_build已覆盖
helm dependency listhelm_dependency_list已覆盖
helm dependency updatehelm_dependency_update已覆盖
helm envhelm_env已覆盖
helm get allhelm_get_all已覆盖
helm get hookshelm_get_hooks已覆盖
helm get manifesthelm_get_manifest已覆盖
helm get metadatahelm_get_metadata已覆盖
helm get noteshelm_get_notes已覆盖
helm get valueshelm_get_values已覆盖
helm historyhelm_history已覆盖
helm installhelm_install已覆盖
helm linthelm_lint已覆盖
helm listhelm_list已覆盖
helm packagehelm_package已覆盖
helm plugin installhelm_plugin_install已覆盖
helm plugin listhelm_plugin_list已覆盖
helm plugin uninstallhelm_plugin_uninstall已覆盖
helm plugin packagehelm_plugin_package已覆盖(仅 v4)
helm plugin updatehelm_plugin_update已覆盖
helm plugin verifyhelm_plugin_verify已覆盖(仅 v4)
helm pullhelm_pull已覆盖
helm pushhelm_push已覆盖
helm registry loginhelm_registry_login已覆盖
helm registry logouthelm_registry_logout已覆盖
helm repo addhelm_repo_add已覆盖
helm repo indexhelm_repo_index已覆盖
helm repo listhelm_repo_list已覆盖
helm repo removehelm_repo_remove已覆盖
helm repo updatehelm_repo_update已覆盖
helm rollbackhelm_rollback已覆盖
helm search hubhelm_search_hub已覆盖
helm search repohelm_search_repo已覆盖
helm show allhelm_show_all已覆盖
helm show charthelm_show_chart已覆盖
helm show crdshelm_show_crds已覆盖
helm show readmehelm_show_readme已覆盖
helm show valueshelm_show_values已覆盖
helm statushelm_status已覆盖
helm templatehelm_template已覆盖
helm testhelm_test已覆盖
helm uninstallhelm_uninstall已覆盖
helm upgradehelm_upgrade已覆盖
helm verifyhelm_verify已覆盖
helm versionhelm_version已覆盖
helm completion—不适用(Shell 工具)
helm help—不适用(Shell 工具)

46 个中的 46 个 Helm 操作命令均已覆盖。唯一排除的命令(completion、help)是 Shell 工具,在 MCP 上下文中没有意义。

helm plugin package 和 helm plugin verify 随 Helm v4 一同引入,支持带签名的插件分发,因此需要设置 helm_version: "v4"。

标志覆盖范围

命令会覆盖其标志,而不仅仅是名称。工具接受的每个参数都会传递给 Helm SDK,而会改变渲染或应用行为的参数则由测试覆盖,这些测试会渲染真实图表或对其进行试运行。以下标志有意不公开:

标志原因
Helm v3 中的 --post-rendererv3 后置渲染器会在服务端主机上执行任意二进制文件。Helm v4 后置渲染器是已安装的插件,并通过 post_renderer 公开
--set 和 --set-json由内联 values 对象覆盖,它会像 --set 一样进行深度合并
template --output-dirhelm_template 为只读;请将 output_dir 与 helm_install 配合使用
create --chart-api-version v3在 Helm 4.3 中属于实验性功能,且受功能门控限制
history --show-rollback-revision、get --template、version --template仅用于展示;结构化结果已包含这些数据
search hub --endpoint、search --fail-on-no-result、repo index --json对 Agent 价值较低;可按需添加
push --username/--password、plugin install TLS 和注册表身份验证请先使用 helm_registry_login,它会存储凭据供后续调用使用

Kubernetes 身份验证

每个工具都可通过 GlobalInput 接受以下身份验证字段:

字段JSON 键描述
Kubeconfigkubeconfigkubeconfig 文件路径(默认为 $KUBECONFIG 或 ~/.kube/config)
上下文kube_context要使用的 Kubernetes 上下文名称
API 服务器kube_apiserver覆盖 kubeconfig 中的 API 服务器 URL
Bearer 令牌kube_token用于 API 身份验证的 Bearer 令牌
TLS 服务器名称kube_tls_server_name用于 TLS 证书验证的服务器名称
不安全 TLSkube_insecure_tls跳过 TLS 证书验证
命名空间namespace目标 Kubernetes 命名空间
EKS(AWS)

EKS 在 kubeconfig 中使用基于 exec 的身份验证。由 aws eks update-kubeconfig 生成的标准 kubeconfig 开箱即用:

{
  "kubeconfig": "/home/user/.kube/config",
  "kube_context": "arn:aws:eks:us-east-1:123456789:cluster/my-cluster"
}

也可以使用直接令牌身份验证:

{
  "kube_apiserver": "https://ABCDEF.gr7.us-east-1.eks.amazonaws.com",
  "kube_token": "<bearer-token-from-aws-eks-get-token>"
}
GKE(Google Cloud)

由 gcloud container clusters get-credentials 生成的 GKE kubeconfig 开箱即用:

{
  "kubeconfig": "/home/user/.kube/config",
  "kube_context": "gke_my-project_us-central1_my-cluster"
}
AKS(Azure)

由 az aks get-credentials 生成的 AKS kubeconfig 开箱即用:

{
  "kubeconfig": "/home/user/.kube/config",
  "kube_context": "my-aks-cluster"
}

Helm 版本选择

每个工具都支持 helm_version 字段,用于在 Helm v3 和 v4 之间进行选择:

{
  "helm_version": "v4",
  "release_name": "my-release"
}
  • "v4"(默认):Helm v4 SDK,支持服务端应用、基于插件的后置渲染器和已签名插件
  • "v3":Helm v3 SDK,用于向后兼容
仅限 v4 的功能

这些字段需要 helm_version: "v4"。如果与 "v3" 一起传入,会报错,而不会静默忽略。

字段工具说明
server_side_applyinstall、upgrade、rollback请参阅服务端应用。v3 接受 false,并始终在客户端应用
force_conflictsinstall、upgrade、rollback接管由其他字段管理器拥有的字段
wait_strategyinstall、upgrade、rollback、uninstall请参阅下文
post_renderer、post_renderer_argsinstall、upgrade、template已安装的后置渲染器插件名称
descriptionrollback记录在回滚修订版本上的描述
verify、keyringplugin installverify: false 可安装未签名的插件,例如 helm-diff

有两个工具完全仅适用于 v4:helm_plugin_package 和 helm_plugin_verify。

服务端应用

Helm 4 默认使用 Kubernetes 服务端应用(server side apply)。helm_install 也遵循这一行为:将 server_side_apply 留空即可使用服务端应用,或将其设为 false 以使用客户端应用(client side apply)。对于 helm_upgrade 和 helm_rollback,如果 未设置该值,Helm 会保持 auto 模式,即重用上一个版本记录的应用方法。版本结果会通过 apply_method("ssa" 或 "csa")报告该方法。

在 v0.5.0 之前,v4 引擎会在每次安装和回滚时强制使用客户端应用,除非 server_side_apply 为 true。如果你依赖客户端应用,请传入 server_side_apply: false。

等待:wait 和 wait_strategy

Helm v4 用策略枚举取代了 v3 的布尔型 --wait,因此 helm_install、helm_upgrade、helm_rollback 和 helm_uninstall 都接受一个 wait_strategy 字段,以及 wait:

wait_strategy行为
"watcher"使用 kstatus 等待,即 v4 中 helm --wait 的行为
"legacy"使用 v3 的就绪状态检查等待
"hookOnly"仅等待钩子;省略 --wait 时 CLI 的默认值

设置 wait_strategy 时,它的优先级更高。否则,wait: true 会映射为 "watcher",wait: false 会映射为 "hookOnly"。

在 v0.2.0 之前,v4 引擎会将 watcher 策略硬编码,因此 wait: false 会被静默忽略,所有 v4 操作都会等待。如果你依赖这一行为,请显式设置 wait: true(或 wait_strategy: "watcher")。

v3 和 v4 均支持

rollback_on_failure(Helm 的 --atomic)受两个引擎支持,可用于 helm_install 和 helm_upgrade。以下选项也受支持:devel、sub_notes、 hide_notes、skip_schema_validation、disable_openapi_validation、 enable_dns、take_ownership 和 hide_secret;helm_install 支持 output_dir、use_release_name 和 force_replace; helm_upgrade 支持 reset_then_reuse_values;helm_uninstall 支持 ignore_not_found 和 description;helm_list 支持 all、uninstalling、time_format 和 selector;helm_status 支持 show_resources;helm_test 支持 logs;helm_show_* 工具支持 jsonpath。

Chart 源

helm_install、helm_upgrade、helm_template、helm_pull 和 helm_show_* 工具接受 Helm 的 Chart 位置标志:repo、username、 password、ca_file、cert_file、key_file、insecure_skip_tls_verify、 plain_http、pass_credentials、verify 和 keyring。 TLS 和凭据选项也适用于 oci:// Chart。

verify 会使用 keyring 检查 Chart 来源证明。和 CLI 一样,keyring 默认为 $GNUPGHOME/pubring.gpg(或 ~/.gnupg)。对于 helm_pull,prov 会下载来源证明文件,但不进行验证(helm pull --prov)。

升级或安装

如果版本不存在,helm_upgrade 配合 install: true 会安装该版本;如果其上一个修订版已卸载,则会替换该版本,行为与 helm upgrade --install 完全相同。create_namespace 适用于该安装操作。

值

值会按照 Helm 使用的顺序合并:先是 values_files,然后是内联的 values 对象(深度合并,类似于 --set),接着是 set_string、set_file 和 set_literal,它们各自都是 key=value 字符串列表。set_file 只读取本地文件, 并会验证它将读取的每个路径,包括 {a,b} 列表中的路径以及后续以逗号分隔的键值对。

Chart 依赖项

helm_install、helm_upgrade 和 helm_template 中的 dependency_update 会像 CLI 标志一样,在渲染前获取缺失的依赖项。不设置该选项时,未附带依赖项的 Chart 会被报告为错误,而不会在缺少子 Chart 的情况下进行渲染。

Python 包

现已提供一个 Python 封装,它使用 FastMCP 围绕 helm-mcp Go 二进制文件创建透明代理。添加到 Go 二进制文件中的新工具会自动在 Python 中可用,无需修改代码。

安装
pip install helm-mcp

需要 Python 3.12+。Go 二进制文件已打包在特定平台的 wheel 中——无需安装 Go 工具链。支持的平台:linux-amd64、linux-arm64、darwin-amd64、darwin-arm64、windows-amd64。首次使用时会从 wheel 中提取二进制文件,并通过 SHA256 校验和验证来防止篡改。

你可以验证二进制文件是否可用:

helm-mcp-python --setup
作为服务使用
from helm_mcp import create_server

# stdio mode (default, for MCP clients)
server = create_server()
server.run()

# HTTP mode
server = create_server()
server.run(transport="http", host="127.0.0.1", port=8080)
作为客户端使用
import asyncio
from helm_mcp import create_client

async def main():
    async with create_client() as client:
        # List all available tools
        tools = await client.list_tools()
        print(f"Available tools: {len(tools)}")

        # List Helm releases
        result = await client.call_tool("helm_list", {"namespace": "default"})
        print(result)

        # Install a chart
        result = await client.call_tool("helm_install", {
            "release_name": "my-app",
            "chart": "bitnami/nginx",
            "namespace": "default",
        })
        print(result)

asyncio.run(main())
CLI
# stdio mode (for MCP clients like Claude Code)
helm-mcp-python

# HTTP mode (loopback only by default; the Python proxy has no authentication)
helm-mcp-python --transport http --port 8080

# Bind to all interfaces only behind your own authenticating proxy
helm-mcp-python --transport http --host 0.0.0.0 --allow-remote

# Custom binary path
helm-mcp-python --binary /usr/local/bin/helm-mcp
与 FastMCP 集成

该 Python 包基于 FastMCP 构建,并返回标准的 FastMCP 服务端/客户端对象。你可以将它与其他 FastMCP 服务组合使用:

from fastmcp import FastMCP
from helm_mcp import create_server as create_helm_server

# Create a composite server
app = FastMCP("my-platform")

# Mount helm-mcp as a sub-server
helm = create_helm_server()
app.mount("helm", helm)

# Add your own tools alongside Helm
@app.tool()
def my_custom_tool(param: str) -> str:
    return f"Custom: {param}"

app.run()
二进制文件查找

Python 包按以下顺序查找 helm-mcp Go 二进制文件:

  1. HELM_MCP_BINARY 环境变量
  2. 包中 bin/ 目录下打包的二进制文件
  3. 从 GitHub Releases 自动下载(并验证 SHA256 校验和)
  4. PATH 中的 helm-mcp
环境变量

代理会将以下环境变量转发给 Go 子进程:

类别变量
代理HTTP_PROXY、HTTPS_PROXY、NO_PROXY(以及小写形式)
KubernetesKUBECONFIG、KUBERNETES_SERVICE_HOST、KUBERNETES_SERVICE_PORT
HelmHELM_CACHE_HOME、HELM_CONFIG_HOME、HELM_DATA_HOME、HELM_PLUGINS、HELM_DEBUG
AWSAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN、AWS_REGION、AWS_PROFILE
GCPGOOGLE_APPLICATION_CREDENTIALS、CLOUDSDK_COMPUTE_ZONE
AzureAZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_SUBSCRIPTION_ID
TLSSSL_CERT_FILE、SSL_CERT_DIR

弹性配置(Python)

该 Python 包基于 FastMCP 中间件、circuitbreaker 和 tenacity 构建了全面的弹性机制。所有设置均可通过 HELM_MCP_* 环境变量配置,并提供合理的默认值。

环境变量
变量类型默认值描述
HELM_MCP_RETRY_ENABLEDbooltrue启用代理层重试中间件
HELM_MCP_RETRY_MAX_RETRIESint2最大重试次数
HELM_MCP_RETRY_BASE_DELAYfloat1.0初始退避延迟(秒)
HELM_MCP_RETRY_MAX_DELAYfloat30.0最大退避延迟(秒)
HELM_MCP_RETRY_BACKOFF_MULTIPLIERfloat2.0退避乘数
HELM_MCP_RATE_LIMIT_ENABLEDboolfalse启用令牌桶速率限制
HELM_MCP_RATE_LIMIT_MAX_RPSfloat10.0每秒最大请求数(必须大于 0)
HELM_MCP_RATE_LIMIT_BURSTint20突发容量(至少为 1;无效值会导致启动失败)
HELM_MCP_CACHE_ENABLEDboolfalse启用基于 TTL 的响应缓存
HELM_MCP_CACHE_TOOL_TTLint300工具调用缓存 TTL(秒)
HELM_MCP_CACHE_LIST_TTLint60工具列表缓存 TTL(秒)
HELM_MCP_ERROR_HANDLING_ENABLEDbooltrue启用结构化错误响应
HELM_MCP_ERROR_INCLUDE_TRACEBACKboolfalse在错误中包含回溯信息
HELM_MCP_TIMING_ENABLEDbooltrue启用请求计时
HELM_MCP_TIMING_DETAILEDboolfalse使用详细计时中间件
HELM_MCP_CIRCUIT_BREAKER_ENABLEDbooltrue在工具调用中启用断路器
HELM_MCP_CIRCUIT_BREAKER_FAILURE_THRESHOLDint5断路器打开前的失败次数
HELM_MCP_CIRCUIT_BREAKER_RESET_TIMEOUTfloat30.0半开状态重试前的等待秒数
HELM_MCP_TENACITY_ENABLEDbooltrue启用带抖动的 tenacity 重试
HELM_MCP_TENACITY_MAX_ATTEMPTSint3最大重试次数
HELM_MCP_TENACITY_MIN_WAITfloat0.5重试间的最短等待时间(秒)
HELM_MCP_TENACITY_MAX_WAITfloat10.0重试间的最长等待时间(秒)
HELM_MCP_TENACITY_MULTIPLIERfloat1.5指数退避基数
HELM_MCP_BULKHEAD_ENABLEDbooltrue启用并发限制器
HELM_MCP_BULKHEAD_MAX_CONCURRENTint10最大并发工具调用数
HELM_MCP_OTEL_ENABLEDboolfalse启用 OpenTelemetry 跟踪
HELM_MCP_OTEL_SERVICE_NAMEstrhelm-mcpOTel 服务名称
HELM_MCP_OTEL_EXPORTERstrconsoleOTel 导出器(console 或 otlp)
CLI 标志
helm-mcp-python --no-retry                   # Disable proxy retry middleware
helm-mcp-python --rate-limit 50              # Enable rate limiting at 50 rps
helm-mcp-python --cache                      # Enable response caching
helm-mcp-python --no-circuit-breaker         # Disable circuit breaker
helm-mcp-python --bulkhead-max 5             # Limit to 5 concurrent tool calls
helm-mcp-python --otel                       # Enable OpenTelemetry tracing
以编程方式配置
from helm_mcp import create_server, HelmClient
from helm_mcp.resilience import (
    ResilienceConfig,
    RateLimitConfig,
    CircuitBreakerConfig,
    BulkheadConfig,
)

# Server with custom resilience
config = ResilienceConfig(
    rate_limit=RateLimitConfig(enabled=True, max_requests_per_second=50),
    circuit_breaker=CircuitBreakerConfig(failure_threshold=3),
    bulkhead=BulkheadConfig(max_concurrent=20),
)
server = create_server(resilience=config)

# Client with custom resilience
async with HelmClient(resilience=config) as helm:
    releases = await helm.list(namespace="default")
OpenTelemetry

FastMCP 通过 OpenTelemetry API 发出跟踪数据。要接收实际的跟踪数据,请安装 SDK:

pip install helm-mcp[otel]

然后启用跟踪:

export HELM_MCP_OTEL_ENABLED=true
export HELM_MCP_OTEL_EXPORTER=otlp        # or "console"
export HELM_MCP_OTEL_SERVICE_NAME=helm-mcp

响应负载管理

大型 Helm 输出(清单、值、模板渲染结果)可能会超出大模型的上下文窗口。helm-mcp 包含两层响应大小管理机制,以防止这种情况。

响应截断

所有工具响应在超出可配置的大小限制时都会自动截断。默认值为 256 KB(约 64K 个词元)。截断的响应会包含元数据,指出原始大小,并建议使用更具体的查询。

通过 CLI 标志或环境变量配置限制:

# CLI flag (in bytes, 0 to disable)
helm-mcp --mode stdio --max-response-bytes 524288

# Environment variable
export HELM_MCP_MAX_RESPONSE_BYTES=524288
helm-mcp --mode stdio

CLI 标志的优先级高于环境变量。

清理清单

返回 Kubernetes YAML 的工具(helm_get_manifest、helm_get_all、helm_get_hooks、helm_template)会在返回结果前自动剔除冗余字段。这样通常可以将清单大小减少 40-60%,而不会丢失有意义的信息。

剔除的字段:

  • metadata.managedFields — Kubernetes 内部管理记录(通常是最大的单个字段)
  • kubectl.kubernetes.io/last-applied-configuration — 整个对象的冗余副本
  • deployment.kubernetes.io/revision — 控制器内部注解
  • control-plane.alpha.kubernetes.io/leader — 领导者选举数据

此清理始终启用且无法禁用,因为这些字段对大模型交互毫无用处。原始的、未经清理的数据仍可通过直接访问 kubectl 获取。

弹性机制

internal/resilience 包提供了额外的生产环境弹性模式:

模式说明
熔断器三态(Closed/Open/HalfOpen)模式;当后端不可用时快速失败。可配置失败阈值和恢复超时时间。
带退避的重试对暂时性故障采用带抖动的指数退避。支持感知上下文的取消和可重试错误筛选。
按工具设置超时按类别设定默认超时时间:query(30s)、mutate(120s)、chart(60s)、repo(60s)。遵循现有的上下文截止时间。

已知限制

插件工具使用 Helm CLI

所有六个插件工具都会调用系统的 helm CLI;这是 helm-mcp 中唯一不使用 Helm Go SDK 的部分,因为 Helm 的插件包属于内部包,无法导入。

  • Helm v4 默认会验证插件签名。未签名的插件(例如 helm-diff)可通过 helm_plugin_install 和 verify: false 安装。
  • 已发布的容器镜像内置了固定版本的 helm CLI,因此其中的插件工具可以正常工作。如果直接运行二进制文件,helm 必须位于 PATH 中;并且在默认 helm_version: "v4" 设置下,它必须是 Helm v4 CLI:v3 CLI 会拒绝 --verify=false 等 v4 标志。

安全性

进程加固(Linux)

在 Linux 上运行时,helm-mcp 会在启动时应用进程级加固措施,以缩小 stdio 传输的攻击面。作为 IDE 子进程运行的 MCP 服务会继承用户的全部权限——这些缓解措施会限制进程遭到入侵时攻击者能造成的影响。

机制功能
PR_SET_DUMPABLE(0)阻止 ptrace 附加、生成核心转储和读取 /proc/pid/mem。防止其他进程检查内存中的凭据。
删除能力从边界集中删除所有 Linux 能力。对非 root 用户(常见情况)不执行任何操作,但在配置不当的 Docker/Kubernetes 环境中运行时,可防止权限提升。
凭据内存清零每个工具处理程序完成后,都会通过 defer 调用 ZeroCredentials(),覆盖内存中的 bearer token 和密码。这是纵深防御措施——Go 字符串不可变,垃圾回收器也可能保留副本,但此举可缩短凭据在代码路径中的存留时间。

加固措施采用尽力而为且不致命的方式——发生故障时会记录日志(需使用 --debug),但绝不会导致进程崩溃。在非 Linux 平台(macOS、Windows)上,会跳过加固并记录一条提示信息。

# Verify hardening is active (Linux)
helm-mcp --mode stdio --debug 2>&1 | grep "security hardening"

# Disable for debugging (e.g., when using strace or delve)
helm-mcp --mode stdio --no-harden
已评估但未实施的机制
机制跳过原因
Seccomp BPF服务使用 exec.CommandContext 执行插件,并通过网络与 Kubernetes API 和注册表通信。系统调用范围过广,若要安全地进行筛选,就可能破坏不同内核版本上的 Helm SDK 内部功能。
命名空间隔离进程需要访问 ~/.kube/config、云凭据文件、DNS 和网络。命名空间隔离会破坏核心功能。
Cgroup 资源限制5 分钟的 pluginExecTimeout 已能限制失控操作,而 IDE 会管理进程生命周期。
AppArmor/SELinux 配置文件动态文件路径会带来高昂的维护成本。将其作为外部构件部署,比嵌入二进制文件更合适。
凭据清理

系统会自动清理所有错误消息,移除以下内容:

  • Bearer 令牌(包括 EKS、GKE 和 Azure JWT 令牌)
  • Basic 身份验证凭据
  • URL 中嵌入的密码(https://user:password@host)
输入验证

每个工具处理程序都会在执行前调用 ValidateGlobalInput,确保对每个请求中的命名空间和 kubeconfig 字段进行验证。

安全软件包提供以下验证器:

  • Release 名称(符合 DNS-1123 规范)
  • 命名空间名称
  • Kubeconfig 文件路径(防止路径遍历、检测符号链接、拒绝敏感路径 — 禁止访问 /etc/shadow、/proc/、/dev/、/sys/)
  • URL(方案验证 + SSRF 防护:通过 DNS 解析并屏蔽私有 IP,包括 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 映射地址、NAT64,以及 IPv6 未指定地址、环回、本地链路和唯一本地地址范围)。适用于仓库 URL、URL 图表引用、远程 values 文件和 OCI 推送目标
  • 文件路径(防止路径遍历、拒绝符号链接,包括符号链接的父目录,并拒绝敏感路径)。适用于 values 文件、set_file 条目、密钥环、CA/证书/密钥文件、密码短语文件、输出和解包目录、helm_lint 与 helm_package 的图表路径,以及 helm_create 的图表名称和 starter
  • 仓库名称(字母数字字符、点、短横线和下划线;防止缓存路径遍历)
  • 超时期限(最长 24 小时)
  • 插件名称(字母数字字符、短横线和下划线;不得以短横线开头,以防止参数注入)
文件权限
  • 仓库配置文件以 0600 权限写入(仅所有者可读写)
  • 配置目录以 0700 权限创建(仅所有者可访问)
HTTP 服务强化

以 HTTP 模式运行时:

  • 除非通过 --addr 指定其他地址,否则监听 127.0.0.1:8080
  • ReadHeaderTimeout: 10s 和 ReadTimeout: 30s — 防止客户端慢速攻击
  • WriteTimeout: 30m(--write-timeout)— 足以应对带有 wait 的 helm_install/helm_upgrade;如果客户端使用更长的 Helm 超时时间,请调高此值
  • 请求断开时会取消其工具调用(默认启用 --propagate-cancellation),因此已放弃的操作不会一直运行到写入超时
  • IdleTimeout: 120s — 回收空闲连接
  • MaxHeaderBytes: 1MB — 防止基于标头的 DoS 攻击
  • 以 5 秒超时进行优雅关停
身份验证(OIDC/OAuth2)

以 HTTP 模式运行时,helm-mcp 支持 OAuth2/OIDC 身份验证,包括 JWT 验证、基于声明的授权和结构化审计日志。这符合 MCP 安全最佳实践。

身份验证完全由用户选择启用。 未设置 OIDC 或令牌环境变量时,服务将不启用身份验证(与先前版本相同)。Stdio 模式不受身份验证配置影响。

快速入门 — Entra ID(Azure AD / ADFS)
# Required: issuer and audience
export HELM_MCP_OIDC_ISSUER="https://login.microsoftonline.com/{tenant-id}/v2.0"
export HELM_MCP_OIDC_AUDIENCE="api://helm-mcp-server"

# Optional: restrict access by scopes, roles, or client app IDs
export HELM_MCP_REQUIRED_SCOPES="helm.read,helm.write"
export HELM_MCP_REQUIRED_ROLES="HelmOperator"
export HELM_MCP_ALLOWED_CLIENTS="client-app-id-1,client-app-id-2"

# Optional: explicit JWKS URL (auto-discovered from issuer if omitted)
export HELM_MCP_OIDC_JWKS_URL="https://login.microsoftonline.com/{tenant-id}/discovery/v2.0/keys"

helm-mcp --mode http --addr 0.0.0.0:8080

身份验证事件(auth_success、auth_failure)会以 JSON 格式写入 stderr,日志级别为 Info,且不受 --debug 影响。

环境变量
变量必需描述
HELM_MCP_OIDC_ISSUER是(用于 OIDC)OIDC 颁发者 URL。令牌的 iss 声明必须匹配。
HELM_MCP_OIDC_AUDIENCE是(用于 OIDC)预期的 aud 声明。拒绝为其他资源颁发的令牌。
HELM_MCP_OIDC_JWKS_URL否用于签名验证的 JWKS 端点。若省略,则根据颁发者自动发现。
HELM_MCP_REQUIRED_SCOPES否scp 声明中必需的 OAuth2 作用域,以逗号分隔。
HELM_MCP_REQUIRED_ROLES否roles 声明中必需的应用角色,以逗号分隔。
HELM_MCP_ALLOWED_CLIENTS否azp/appid 声明中允许的客户端应用 ID,以逗号分隔。
HELM_MCP_SESSION_TTL否会话缓存的不活动 TTL(Go 时长,例如 5m、15m)。默认值:5m。
HELM_MCP_AUTH_TOKEN否静态 bearer 令牌(旧版)。优先级低于 OIDC。
身份验证优先级
  1. OIDC/OAuth2 — 如果设置了 HELM_MCP_OIDC_ISSUER,则启用基于 JWKS 的 JWT 验证。
  2. 静态 bearer 令牌 — 如果只设置了 HELM_MCP_AUTH_TOKEN,则使用常量时间比较。
  3. 无身份验证 — 如果两者均未设置,服务将接受所有请求(适用于本地 stdio 使用场景)。
令牌验证

每个传入的 JWT 都会进行以下验证:

检查项描述
签名根据 JWKS 公钥验证 RSA 签名(RS256/384/512)。密钥会缓存 1 小时;遇到 kid 未命中时自动刷新(密钥轮换)。
颁发者(iss)必须与 HELM_MCP_OIDC_ISSUER 完全匹配。
受众(aud)必须与 HELM_MCP_OIDC_AUDIENCE 匹配。拒绝为其他 API 颁发的令牌——这是防止令牌透传的核心防护措施。
过期时间(exp)必须存在。拒绝已过期的令牌。
授权方(azp/appid)如果已配置,则与 HELM_MCP_ALLOWED_CLIENTS 进行核对。同时支持 OIDC azp 和 Entra ID v1 appid 声明。
作用域(scp)将以空格分隔的作用域与 HELM_MCP_REQUIRED_SCOPES 进行核对。
角色(roles)将应用角色数组与 HELM_MCP_REQUIRED_ROLES 进行核对。
会话缓存

验证通过的令牌会缓存在内存中,以避免重复查找 JWKS:

  • 不活动 TTL:默认为 5 分钟(可通过 HELM_MCP_SESSION_TTL 配置,例如 5m、10m、1h)
  • 令牌过期时间:缓存的令牌绝不会在其 exp 声明指定的时间之后使用
  • 缓存键:原始 bearer 令牌的 SHA-256 哈希(避免在内存中存储原始令牌)
  • 滑动窗口:每次访问都会重置不活动计时器
  • 最大条目数:10,000(超出时淘汰最早的条目)
审计日志

启用 OIDC 身份验证后,每次身份验证尝试都会通过 slog 发出结构化审计事件:

level=INFO msg=security_audit audit.event_type=auth_success audit.principal_id=oid-123 [email protected] audit.tenant_id=tenant-abc audit.client_app_id=client-1 audit.scopes="helm.read helm.write" audit.token_id=uti-xyz audit.remote_addr=10.0.0.1:54321

审计事件包括:主体 ID/名称、租户 ID、客户端应用 ID、作用域、角色、令牌 ID、会话 ID、操作、资源、结果、持续时间和远程地址。启用 --debug 可查看完整审计信息,或配置日志聚合器以捕获 security_audit 消息。

代表用户(OBO)令牌交换

当 helm-mcp 需要代表已通过身份验证的用户调用下游 API(例如 Kubernetes API)时,它会将传入的令牌交换为一个作用域限定于该下游服务的新令牌。这样可以避免转发原始令牌,防止下游服务遭到入侵时令牌被滥用,或令牌的受众不匹配。

工作原理
User        MCP Client        helm-mcp (MCP Server)      Kubernetes API
 │              │                      │                        │
 ├─(SSO)──────▶│ gets token            │                        │
 │              │ aud=helm-mcp          │                        │
 │              ├─(Bearer token)──────▶│                        │
 │              │                      ├─OBO exchange──────────▶│
 │              │                      │ grant_type=jwt-bearer   │
 │              │                      │ assertion=user token    │
 │              │                      │ scope=K8s API scopes    │
 │              │                      │◀─new token──────────────│
 │              │                      │  aud=Kubernetes API     │
 │              │                      ├─(K8s API call)────────▶│
 │              │                      │  with OBO token         │

链中的每一跳都会:

  1. 验证传入令牌的受众(必须与此服务匹配)
  2. 通过 OBO 将其交换为面向下一个服务的新令牌
  3. 在新令牌的声明中保留原始用户的身份
  4. 触发新一轮条件访问评估(如果已在 Entra ID 中配置)
OBO 配置
# OBO token exchange (for downstream API calls with user context)
export HELM_MCP_OBO_TOKEN_URL="https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token"
export HELM_MCP_OBO_CLIENT_ID="helm-mcp-app-id"
export HELM_MCP_OBO_CLIENT_SECRET="helm-mcp-client-secret"
为什么不转发令牌?

将用户的令牌转发给下游服务很诱人,但也存在问题。MCP Security Best Practices 明确不建议这样做。使用 OBO 时,每个服务都会获得一个为其自身受众签发的令牌,且仅具有所需权限。如果令牌被截获,影响范围仅限于单个服务,而不是整个链路。

AWS EKS 和 OBO 支持
支持 OIDC 的 AWS EKS 1.34+

AWS EKS 从 EKS 1.21 开始支持使用 OIDC 身份提供商进行集群身份验证,并在 1.34+ 中进行了重大改进。不过,EKS 原生不支持将 Entra ID OBO 流用于 Kubernetes API 身份验证。身份验证模式各不相同:

模式支持情况详情
EKS OIDC 身份提供商是在 EKS 中将 Entra ID 配置为 OIDC 提供商。用户使用 Entra ID 令牌直接进行身份验证,其中 aud = EKS 集群。无需 OBO——令牌直接为集群签发。
IRSA(IAM 服务账户角色)是通过投影的服务账户令牌提供 Pod 级身份。这属于 M2M(客户端凭据),而非用户委派。
EKS Pod Identity是(EKS 1.34+)使用 EKS Pod Identity Agent 简化 Pod 身份验证。同样属于 M2M,而非用户委派。
OBO → Kubernetes API部分支持Entra ID OBO 可以为任何已注册资源签发令牌。如果 EKS 配置了 Entra ID 作为 OIDC 提供商,且 Kubernetes API 已在 Entra ID 中注册为应用,则 OBO 签发的令牌可以用于 EKS 身份验证。这需要在 EKS OIDC 提供商上自定义配置 --oidc-issuer-url、--oidc-client-id 和 --oidc-username-claim。

EKS 推荐模式:将 Entra ID 配置为 EKS OIDC 身份提供商。MCP 客户端对用户进行身份验证,并获取 aud = helm-mcp 的令牌。helm-mcp 验证此令牌,然后执行 OBO 交换,获取一个 aud = EKS 集群 OIDC 客户端 ID 的新令牌。此 OBO 签发的令牌用于 Kubernetes API 调用,从而保留用户身份并启用按用户进行的 RBAC。

AWS Labs MCP 和 OBO

AWS Labs MCP 服务(例如,awslabs/mcp)和 Amazon Bedrock AgentCore 均未实现 OAuth2 OBO 或 RFC 8693 Token Exchange。AgentCore 使用不同的模式:

  • 用户身份传播:通过不透明的 X-Amzn-Bedrock-AgentCore-Runtime-User-Id HTTP 标头实现——不是经加密签名的令牌
  • 出站身份验证:使用 OAuth Authorization Code(3Lo)或 Client Credentials(2Lo),但这些是独立的身份验证事件,不是委派身份传播
  • Token Vault:存储第三方服务的刷新令牌,但作用范围是 Agent,而非用户委派

这意味着 AWS Labs MCP 服务无法原生参与 Entra ID OBO 链。如果你的架构需要通过 AWS 托管的 MCP 服务传播用户委派身份,则必须将 OBO 交换实现为自定义中间件层,或将 helm-mcp 内置的 OBO 支持用作参考实现。

转发代理支持

helm-mcp 遵循标准代理环境变量:

export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
export NO_PROXY=localhost,127.0.0.1,.internal.company.com

开发

前置条件
  • Go 1.27.2+
  • Python 3.12+(用于 Python 包)
  • golangci-lint v2(可选,用于代码检查)
构建
make build        # Build binary
make install      # Install to $GOPATH/bin
make build-all    # Cross-compile for Linux/macOS (amd64/arm64)
测试
# Go tests
make test         # Run all tests with race detection and coverage
make test-short   # Run tests without integration tests

# Python tests
cd python && pip install -e ".[dev]" && pytest -v tests/
代码检查
make lint         # Run golangci-lint + go vet
make vet          # Run go vet only
安全检查
make security     # Run govulncheck
覆盖率
make coverage     # Generate coverage report (coverage.html)

架构

cmd/helm-mcp/          Entry point, transport selection, CLI flags
internal/
  helmengine/           Engine interface and shared types
    v3/                 Helm v3 SDK implementation
    v4/                 Helm v4 SDK implementation
  tools/                MCP tool handlers
    release/            Install, upgrade, uninstall, rollback, list, status, etc.
    chart/              Create, lint, template, package, pull, push, show, etc.
    repo/               Add, list, update, remove, index
    registry/           Login, logout
    search/             Hub, repo
    plugin/             Install, list, uninstall, update, package, verify
    env/                Env, version
  security/             Process hardening, input validation, credential scrubbing
  resilience/           Response budget, circuit breaker, retry, timeouts, manifest sanitisation
  server/               MCP server creation and tool registration
python/                 FastMCP-based Python wrapper
  src/helm_mcp/         Python package source
  tests/                Python tests

贡献

欢迎社区贡献!无论是错误报告、功能请求、文档改进还是代码贡献,我们都非常感谢。

请参阅 CONTRIBUTING.md,了解以下事项的详细指南:

  • 设置开发环境
  • 运行测试和代码检查工具
  • 提交拉取请求
  • 提交消息约定

社区

许可证

本项目采用 MIT License 许可,可免费使用、修改和分发。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。