From truenas-mcp
Deploy a Docker Compose stack to TrueNAS Scale and verify it came up healthy. Use whenever the user asks to deploy, ship, install, or launch an app on the NAS — especially when they want to confirm the deployment actually works rather than just submitting it. Wraps validate → deploy → poll job → verify → on failure pull logs and report.
How this skill is triggered — by the user, by Claude, or both
Slash command
/truenas-mcp:truenas-deploy-and-verifyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill executes a safe deploy pipeline that catches failures
This skill executes a safe deploy pipeline that catches failures early. It never just "fires and forgets" — the deploy is always followed by a verification step.
Use this skill when the user says any of:
If the user only asks to validate a compose file (without deploying),
call validate_compose directly instead.
The user gives you (or you derive from context):
[a-z0-9-], no leading/trailing dash).
Used for the Traefik router, the host directory under /mnt/<pool>/<app-name>/,
and the TrueNAS app name. Must match across all three.If app_name is missing, ask once. Don't guess from the compose service: block.
Follow these steps in order. Do not skip ahead, do not parallelize.
Call validate_compose(compose_yaml).
valid == false: stop. Show the user the errors array. Ask
whether to fix automatically or have them edit.warnings is non-empty: show them but continue.security_issues is non-empty: stop. These are blocked
(privileged, dangerous capabilities, system-path mounts). Explain
why and ask whether to remove them.Call deploy_app(app_name, compose_yaml).
The tool internally: converts the compose → checks port conflicts →
calls app.create → polls the job until SUCCESS or FAILED.
success == true: continue to Step 3.success == false: skip to Step 4 (failure handling) — do not
retry blindly.Call verify_deployment(app_name).
app_running == true and health_status == "healthy": success.
Report to user with: app name, status, ports, and the
<app-name>.pvnkn3t.de URL if there's a Traefik label.app_running == true but health_status != "healthy": ambiguous.
The container started but health checks aren't passing. Continue to
Step 4 to pull logs.app_running == false: continue to Step 4.The deployment is in a bad state. Gather context before asking the user what to do:
get_app_details(app_name) — note the status and config.get_app_logs(app_name, lines=200) — read the tail./mnt/ pathFor each category, the recommended action is:
list_apps to find the colliding app; pick
a different node_port./mnt/nvme-01/<app-name>/
exists and is owned by apps:apps. The converter normally handles
this — if it didn't, something raced.If the user wants to abandon the deployment, suggest purge_app(app_name)
(handled by the truenas-purge-failed skill) which removes the app
and its volumes from TrueNAS. The host directories under
/mnt/<pool>/<app-name>/ are kept — Sven decides manually whether to
delete them.
When the deployment succeeds, summarize like this:
✓ Deployed <app-name>
Status: RUNNING
Pool: <pool from deploy result>
Ports: <list>
URL: https://<app-name>.pvnkn3t.de (if Traefik label present)
Job ID: <job_id>
When it fails:
✗ Deployment of <app-name> failed
Category: <category>
Symptoms: <one-line summary>
Logs:
<relevant excerpt>
Recommended: <specific next action>
npx claudepluginhub svnstfns/truenas-mcp-plugin --plugin truenas-mcpProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.