Daily snapshots of every Dify Helm chart — values.yaml, container images, and cross-arch image validation. Browse it in a cyber-dark UI, pull it from a REST API, or wire it straight into your AI agent over MCP.
🌐 Live Demo · 📖 API Docs · 🔌 Swagger · 🤖 MCP · 📊 Dashboard
Upgrading a self-hosted Dify deployment means diffing values.yaml, hunting down the exact set of container images a chart version ships, and praying every one of them actually exists for your architecture. Dify Helm Watchdog does that for you, every day, and keeps the history.
| 📦 Version tracking | Daily snapshots of every published chart version — currently 69+ and counting |
📄 values.yaml archive |
Pull the exact values.yaml for any version that ever shipped |
| 🐳 Image inventory | Full container-image list per version, as JSON or YAML |
| ✅ Cross-arch validation | Verifies every image exists across linux/amd64 and linux/arm64 |
| 🔀 Version diffing | Side-by-side diff between any two chart versions, right in the UI |
| 🤖 MCP server | Native Model Context Protocol — give your AI agent live chart knowledge |
| 🔌 REST API | Google-AIP-styled, OpenAPI-documented, CDN-cached |
| 🧙 Values wizard | Merge your overrides into a new chart version with image tags auto-enforced |
A daily cron snapshots the chart, validates its images, and persists everything to object storage. The UI, REST API, and MCP server all read from that single cache.
flowchart LR
cron["⏰ Dify Cron<br/>daily 02:00 UTC"] --> sync["POST /api/v1/cron<br/>syncHelmData()"]
sync --> idx[["📦 Dify Helm<br/>index.yaml"]]
sync --> ex["Extract values.yaml<br/>+ docker-images.yaml"]
ex --> val["✅ Validate images<br/>Docker Hub · GHCR"]
val --> r2[("☁️ Cloudflare R2<br/>cache.json · values · images · validation")]
r2 --> ui["🖥️ Next.js UI"]
r2 --> api["📡 REST API<br/>/api/v1"]
r2 --> mcp["🤖 MCP server"]
Base URL: https://helm-watchdog.dify.ai · base path: /api/v1 · spec: /openapi.json · explorer: /swagger
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/versions |
List all chart versions · ?includeValidation=true for stats |
GET |
/api/v1/versions/latest |
Latest version · ?versionOnly=true → plain text |
GET |
/api/v1/versions/{version} |
Version metadata (appVersion, digest, skippable…) |
GET |
/api/v1/versions/{version}/images |
Image list · ?format=yaml · ?includeValidation=true |
GET |
/api/v1/versions/{version}/values |
Download values.yaml |
GET |
/api/v1/versions/{version}/validation |
Cross-arch image validation report |
POST |
/api/v1/cron |
Trigger a sync (Bearer-auth when CRON_API_KEY is set) |
POST GET |
/api/v1/mcp · /api/v1/sse |
MCP transports (see below) |
# What's the newest chart?
curl https://helm-watchdog.dify.ai/api/v1/versions/latest?versionOnly=true
# → 3.10.0
# Grab a version's values.yaml
curl https://helm-watchdog.dify.ai/api/v1/versions/3.10.0/values -o values-3.10.0.yaml
# List its images as YAML
curl 'https://helm-watchdog.dify.ai/api/v1/versions/3.10.0/images?format=yaml'Full reference → docs/API.md.
Expose live Dify chart knowledge to any MCP-capable agent (Claude, Cursor, etc.).
Tools: list_versions · get_latest_version · get_version_details · list_images · validate_images
Resources: helm://versions · helm://versions/{version}/values · .../images · .../validation
Prompts: update_enterprise_to_version · analyze_missing_images
Transports: Streamable HTTP (POST /api/v1/mcp) · SSE (GET /api/v1/sse)
Every image referenced by a chart version is resolved against its registry (Docker Hub, GHCR) and checked per-platform. Results aggregate to ALL_FOUND / PARTIAL / MISSING / ERROR so you know before you helm upgrade.
Next.js 15 (App Router) · React 19 · TypeScript (strict) · Tailwind CSS v4 + shadcn/ui · ECharts · Cloudflare R2 · @modelcontextprotocol/sdk · Jest · deployed on Vercel.
Issues and PRs welcome. Before opening a PR: yarn lint, yarn test, and yarn build should all pass. New API endpoints follow the Google AIP conventions and need a matching test under src/test/.


{ "mcpServers": { "dify-helm-watchdog": { "url": "https://helm-watchdog.dify.ai/api/v1/mcp" } } }