| name | managing-coolify |
| description | Use when working with Coolify — coolify self-hosted PaaS management covering
application inventory, service status, deployment history, server resource
utilization, database instances, S3 storage configurations, webhook settings,
and team management. Use for managing Coolify-based infrastructure.
|
| connection_type | coolify |
| preload | false |
Coolify Management
Analyze Coolify applications, services, deployments, and server health.
Phase 1: Discovery
#!/bin/bash
TOKEN="${COOLIFY_API_TOKEN}"
BASE="${COOLIFY_BASE_URL:-https://app.coolify.io}/api/v1"
AUTH=(-H "Authorization: Bearer ${TOKEN}" -H "Accept: application/json")
echo "=== Servers ==="
curl -s "${BASE}/servers" "${AUTH[@]}" \
| jq -r '.[] | "\(.id)\t\(.name)\t\(.ip)\t\(.settings.is_reachable)\t\(.settings.is_usable)"' \
| column -t | head -10
echo ""
echo "=== Applications ==="
curl -s "${BASE}/applications" "${AUTH[@]}" \
| jq -r '.[] | "\(.uuid)\t\(.name)\t\(.status)\t\(.fqdn // "no-domain")\t\(.build_pack)\t\(.git_repository // "dockerimage")"' \
| column -t | head -20
echo ""
echo "=== Services ==="
curl -s "${BASE}/services" "${AUTH[@]}" \
| jq -r '.[] | "\(.uuid)\t\(.name)\t\(.status)\t\(.type)"' \
| column -t | head -20
echo ""
echo "=== Databases ==="
curl -s "${BASE}/databases" "${AUTH[@]}" \
| jq -r '.[] | "\(.uuid)\t\(.name)\t\(.type)\t\(.status)\t\(.is_public)"' \
| column -t | head -20
echo ""
echo "=== Teams ==="
curl -s "${BASE}/teams" "${AUTH[@]}" \
| jq -r '.[] | "\(.id)\t\(.name)\t\(.members | length) members"' \
| column -t
Phase 2: Analysis
#!/bin/bash
TOKEN="${COOLIFY_API_TOKEN}"
BASE="${COOLIFY_BASE_URL:-https://app.coolify.io}/api/v1"
AUTH=(-H "Authorization: Bearer ${TOKEN}" -H "Accept: application/json")
echo "=== Application Details ==="
for APP_UUID in $(curl -s "${BASE}/applications" "${AUTH[@]}" | jq -r '.[].uuid'); do
curl -s "${BASE}/applications/${APP_UUID}" "${AUTH[@]}" \
| jq '{name, status, fqdn, build_pack, git_repository, git_branch, docker_compose_location, health_check_path, health_check_enabled, limits_memory, limits_cpus}' 2>/dev/null
done | head -30
echo ""
echo "=== Recent Deployments ==="
for APP_UUID in $(curl -s "${BASE}/applications" "${AUTH[@]}" | jq -r '.[].uuid'); do
APP_NAME=$(curl -s "${BASE}/applications/${APP_UUID}" "${AUTH[@]}" | jq -r '.name')
curl -s "${BASE}/applications/${APP_UUID}/deployments" "${AUTH[@]}" \
| jq -r 2>/dev/null
| column -t | -20
SERVER_ID $(curl -s | jq -r );
curl -s \
| jq 2>/dev/null
APP_UUID $(curl -s | jq -r );
APP_NAME=$(curl -s | jq -r )
COUNT=$(curl -s | jq 2>/dev/null)
curl -s \
| jq -r \
| column -t
Output Format
COOLIFY ANALYSIS
=================
App Status Build-Pack Domain Last Deploy Health
──────────────────────────────────────────────────────────────────────────────
web-frontend running nixpacks app.example.com 2h ago enabled
api-backend running dockerfile api.example.com 1d ago enabled
worker running docker none 3h ago disabled
Servers: 2 reachable | Databases: 3 | Services: 2
Deployments: 15 recent (13 success, 2 failed)
Safety Rules
- Read-only: Only use GET endpoints against the Coolify API
- Never deploy, restart, or delete applications without confirmation
- Env vars: Never output environment variable values, only counts
- Self-hosted: Ensure base URL points to the correct Coolify instance
Anti-Hallucination Rules
- NEVER assume resource names — always discover via CLI/API in Phase 1 before referencing in Phase 2.
- NEVER fabricate metric names or dimensions — verify against the service documentation or
--help output.
- NEVER mix CLI commands between service versions — confirm which version/API you are targeting.
- ALWAYS use the discovery → verify → analyze chain — every resource referenced must have been discovered first.
- ALWAYS handle empty results gracefully — an empty response is valid data, not an error to retry.
Counter-Rationalizations
| Shortcut | Counter | Why |
|---|
| "I'll skip discovery and check known resources" | Always run Phase 1 discovery first | Resource names change, new resources appear — assumed names cause errors |
| "The user only asked for a quick check" | Follow the full discovery → analysis flow | Quick checks miss critical issues; structured analysis catches silent failures |
| "Default configuration is probably fine" | Audit configuration explicitly | Defaults often leave logging, security, and optimization features disabled |
| "Metrics aren't needed for this" | Always check relevant metrics when available | API/CLI responses show current state; metrics reveal trends and intermittent issues |
| "I don't have access to that" | Try the command and report the actual error | Assumed permission failures prevent useful investigation; actual errors are informative |