MCP server¶
--mode mcp starts a Model Context Protocol
server over stdio. It lets AI coding tools reproduce what a chart renders and
then find which template line produced it, instead of grepping templates by
hand or guessing. It exposes three tools:
| Tool | Purpose |
|---|---|
helm_template |
Reproduce: render a chart with helm template to see the actual (possibly wrong) output. |
debug_helm |
Locate: find the template/helper file:line behind a value or rendered line, before editing. |
resolve_breakpoints |
Report the resolved text/template/exec.go line numbers, useful when debugging the debugger. |
Use debug_helm while reproducing a problem and before editing a template,
_helpers.tpl, or values.yaml — not only at the end to validate a fix. The
MCP server advertises the same workflow in its instructions, so clients that
surface server instructions get the guidance without any per-repository config.
debug_helm filters¶
debug_helm accepts filters analogous to the CLI flags. chart is a name or
path relative to working_dir, or pass chart_path to point directly at a
chart directory:
{
"chart_path": "test",
"extra_args": ["--show-only", "templates/deployment.yaml"],
"values": ["image.tag"],
"helpers": ["test.serviceAccountName"],
"templates": ["test/templates/deployment.yaml:42"],
"rendered": ["test/templates/deployment.yaml:32"],
"mode": "locate"
}
valuesanswers "why isn't this option taking effect?" with the exact template/helperfile:linethat reads it. The read sites are returned first and unrelated helper frames are omitted, so a broad flow does not bury the line you need to change.renderedis the "I see this wrong output — where does it come from?" selector. Afile:linevalue matches the source that wrote that rendered line; any other string is treated as a substring of the rendered output, so you can paste the bad line (for exampleusername: "") without knowing the source file.modedefaults tolocate, which returns compact source sites and referenced values as both text and structured fields (sites,relevant_values). Setmode: "full"for the complete execution flows with rendered write buffers.- When a query matches nothing, the response says so and suggests nearby known values, helpers, and templates instead of returning a silent empty report.
Chart paths are relative to /workspace (the mounted repository). If you run
the server outside Docker, use the local binary instead.
AI coding tools¶
The server is a standard stdio MCP server, so any MCP client can launch it. The
repository ships project-local configs for the common ones, all pointing at the
published Docker image (jessesimpson/helm-debugger:latest):
| Tool | Project config | Shape |
|---|---|---|
| OpenCode | opencode.json |
mcp.servers, array command + cwd |
| Claude Code | .mcp.json |
mcpServers, string command + args |
| Cursor | .cursor/mcp.json |
mcpServers, string command + args |
| VS Code | .vscode/mcp.json |
servers, type: stdio |
The AGENTS.md file and the server's own instructions (advertised in the MCP
initialize response) carry the render → locate → validate workflow for every
client that reads them.
OpenCode¶
This repository ships an opencode.json that registers the server using the
Docker image from the Docker Hub mirror (the GHCR image works identically).
Build the image first, then it is available to OpenCode in this project:
make docker-build
opencode mcp list
To consume a published version instead of building locally, use the
install-mcp.sh helper attached to each release (see
Releases and upgrading), or copy the pinned
opencode-ghcr.json / opencode-dockerhub.json from the release assets. The
server config changes only when the release changes how the server is invoked;
the release assets are generated from packaging/opencode.mcp.json so that
contract is explicit.
An OpenCode config entry looks like this:
{
"mcp": {
"servers": {
"helm-debugger": {
"type": "local",
"command": ["helm-debugger", "--mode", "mcp"],
"cwd": "."
}
}
}
}
Claude Code¶
The repository ships a project-scoped .mcp.json. Claude Code prompts for
approval before using project-scoped servers, so confirm it once:
claude mcp list # should show helm-debugger
To pin a released version, run install-mcp.sh --harness claude (see
Releases and upgrading) or copy claude-ghcr.json to
.mcp.json. The release assets are generated from packaging/claude.mcp.json.
Cursor¶
The repository ships .cursor/mcp.json, using ${workspaceFolder} for the bind
mount so the chart being debugged is the open project. To pin a released
version, run install-mcp.sh --harness cursor or copy cursor-ghcr.json over
.cursor/mcp.json. The release assets are generated from
packaging/cursor.mcp.json.
VS Code¶
The repository ships .vscode/mcp.json for GitHub Copilot's agent mode. VS Code
calls the entry a server and requires "type": "stdio". To pin a released
version, run install-mcp.sh --harness vscode or copy vscode-ghcr.json over
.vscode/mcp.json. The release assets are generated from
packaging/vscode.mcp.json.