v2.17.0
What's Changed
Heads up:
redeploy_projectandrestart_project_appswere silent no-ops and now actually run. If you called either and read the0 succeededas "nothing needed doing", the same call now restarts or redeploys every application in the project.
Added
- Human confirmation for destructive operations (#261).
stop_all_appswas gated on aconfirm: trueparameter the model fills in — the model confirming with itself. On clients supporting elicitation the confirmation now happens in client UI, outside the model's control. Coversstop_all_apps,redeploy_project,restart_project_apps,system disable_api, the application / database / service / project / environment deletes, andbulk_env_updateabove three apps. - Prompts state their blast radius: "take down 12 running applications (api, worker, cockpit and 4 more) across 3 servers?". Delete prompts spell out volume destruction —
delete_volumesdefaults totrueupstream, so omitting it destroys the data. Project deletes count applications, databases and services. Env var values are never shown. - Progressive enhancement: clients without elicitation (Claude Desktop, claude.ai) behave exactly as before. Once a client advertises support it fails closed — decline, cancel, timeout and transport errors all abort. The tool call's abort signal is threaded through, so a client giving up at 60s cannot leave a prompt live that executes at t=90s.
COOLIFY_MCP_ELICITATION=offescape hatch, for a client that advertises elicitation but does not implement it.- Tool count unchanged at 44.
Fixed
redeploy_projectandrestart_project_appsnever did anything. Both filtered applications byproject_uuid, whichGET /applicationsdoes not return, so they matched zero every time and reported{"succeeded":0}. Now resolved project → environment ids → applications. Both now error when a project's environments cannot be resolved, where they previously reported zero — "nothing to do" and "could not find out" are different answers.isRunningStatuscountedexited:unhealthyas running, because'unhealthy'contains'healthy'. Harmless insidestop_all_apps(a no-op stop), but it listed already-dead applications in the confirmation prompt.running:unhealthystill counts.npm run test:integrationcould not run at all. Jest 30 renamed--testPathPatternto--testPathPatterns, so every invocation exited on an unrecognised option — the smoke-test path documented inCLAUDE.mdhas been dead since the Jest 30 bump. Also sets--coverage=false, which the 80% global threshold otherwise failed. Its diagnostics fixtures were hardcoded UUIDs from a decommissioned instance and are now discovered at run time.
Changed
Application.destination,Database.environment_idandService.environment_idadded to the types. Verified live against 4.1.2: these list endpoints return the nested destination / numeric environment link and do not populateproject_uuidorserver_uuid.
🖱️ One-click Claude Desktop install: download coolify-mcp.mcpb below and drag it into Settings → Extensions.