From truenas-mcp
Diagnose a TrueNAS app that is broken, stuck, unhealthy, or behaving unexpectedly. Use when the user reports "X is down", "Y isn't responding", "Z keeps restarting", or asks for logs / status of a specific app. Pulls app details, recent logs, and network state, then produces a structured diagnosis report.
How this skill is triggered — by the user, by Claude, or both
Slash command
/truenas-mcp:truenas-troubleshootThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill is for **diagnosis only** — it never restarts, redeploys,
This skill is for diagnosis only — it never restarts, redeploys, or modifies an app. It gathers signal so the user can decide what to do next.
Trigger on phrases like:
If the user already knows the fix and just wants you to apply it
(e.g., "restart paperless"), don't use this skill — call the relevant
tool (restart_app) directly.
list_apps() first and
ask the user which app they mean.Call these three in parallel (they're independent reads):
get_app_details(app_name) → status, config, container_ids, ports, volumesget_app_logs(app_name, lines=500) → recent log tailget_docker_networks() → cluster-wide network stateIf get_app_details returns "app not found": stop. The app isn't
deployed at all. Suggest list_apps() to see what exists.
Map status to one of these buckets:
Look for these patterns (in order — first match wins):
| Pattern in logs | Likely cause |
|---|---|
permission denied on /mnt/, /data, /config | Volume ownership wrong (should be apps:apps) |
database is locked, corrupt database | Underlying SQLite/DB issue |
OOMKilled, out of memory | Memory limit too low |
bind: address already in use | Port collision with another app |
unable to pull image, manifest unknown | Bad image name/tag |
connection refused to db:, redis:, postgres: | Dependent service down — check sibling app |
certificate verify failed, SSL | TLS/cert problem on outbound calls |
no route to host, network unreachable | Network misconfig — check get_docker_networks |
| Repeating crash loop (same error every ~10s) | Misconfig in compose env vars |
If the issue might be network-related, confirm the app is on the
expected network. The NAS profile from truenas-discovery lists the
operator's apps network (if any); call it <apps-net> below.
networks = get_docker_networks()
target = next((n for n in networks if n["name"] == "<apps-net>"), None)
if not target or container_ids_app_not_in(target):
# Network issue — app isn't on the expected network
If the operator runs an apps-specific macvlan or bridge and the app
ended up on the default bridge instead, the compose author didn't
attach the service to the expected network — either fix the compose
or move the container.
Produce a structured report. Don't dump raw logs — extract the relevant 5–15 lines.
Troubleshooting report — <app_name>
─────────────────────────────────────
State: <RUNNING | STOPPED | ERROR | CRASHING>
Health: <healthy | unhealthy | unknown>
Container: <id (12 chars)>
Ports: <list>
Network: <bridge | apps-net | other>
Volumes: <count, with one example>
Most likely cause:
<one-sentence diagnosis based on Step 3 pattern match>
Evidence:
<5-15 line log excerpt with the smoking gun highlighted>
Suggested actions (do NOT execute without user approval):
1. <specific next action>
2. <alternative if 1 doesn't help>
3. <escalation if both fail>
If the user explicitly says "fix it" after the report, then hand off
to the right tool (restart_app, update_app, etc.) or the
truenas-purge-failed skill — but make sure they've seen the report
first.
Provides 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.
npx claudepluginhub svnstfns/claude-marketplace --plugin truenas-mcp