Skip to content

v3.9.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Oct 15:25
· 6 commits to main since this release
596e645

What's Changed

Added

  • Tool errors point at doctor when it can diagnose them (#384). A failed connection to Coolify and a 401 or 403 now end with "To diagnose, run npx @masonator/coolify-mcp doctor with this server's environment." The wording names the server's environment because in HTTP mode the person reading the error is not the one who configured it. get_version, which reads the plain-text /version outside the usual request path, gets the same pointer on the same two failures. Other errors are unchanged. The unused CoolifyClient#validateConnection, which built its own copy of the connection message, is removed.

Changed

  • Coolify calls no longer follow redirects (#453). An http:// base URL that redirects to https:// used to work and now fails with "Use https://… as the base URL"; any other redirect fails naming its host. doctor fails a redirect to match (it used to warn on ones that were not Cloudflare Access).

Fixed

  • A Cloudflare Access login page is no longer returned as a successful result (#453). Coolify calls followed redirects, so when Access intercepted one, fetch landed on the login page (200, HTML) and the client handed it back as the endpoint's data. Calls now refuse redirects and fail with an error naming what answered: Cloudflare Access (with the service-token fix), an http:// to https:// redirect (with the address to use), or any other host. Access is recognised on its *.cloudflareaccess.com team domain or a custom domain (the /cdn-cgi/access/ path), by one check shared with doctor. Not following redirects also stops our custom headers, the Access service token among them, from going on to whatever host a redirect names, since fetch only strips Authorization; HTTP mode's token check on the authorize page no longer follows them either.
  • list_instances cannot hang on one instance (#454). It fanned out get_version with no deadline, so an instance that accepted the connection and never answered held it for fetch's 300 s headers timeout. It now shares the 10 s listing deadline from #393, and an instance that misses it is reported as "no answer within 10 s", which resources/list now logs too.
  • resources/list no longer waits out a hung instance (#393). Nothing bounded a Coolify call, so in a fleet with one instance that accepts connections but never answers, every listing waited for fetch's own timeout (300 s for a missing response, 10 s for an unroutable host) before returning the others. The listing now gives each instance ten seconds (the same as HTTP mode's token probe), aborts the request at that point, and leaves the instance out as it already did for one that refused the connection; stderr names each instance left out and why. The list* client methods take an optional signal for this. The listing stays uncached on purpose: it is meant to be current.
  • Log lines is a whole number from 1 to 10000 on logs and application_logs (#386). It took any number, and Coolify reads -1 as "every line" from the release that added all, so one call could pull an entire container log into context. Coolify caps the count at 10000 itself, silently, since 4.3.0; the limit is now in the schema where the model can see it, and on 4.0–4.2, which had no cap, it is a deliberate limit of our own. deployment's lines (our own truncation of stored build logs) becomes a positive whole number too: 0 showed an empty window and offered a next page forever. all is deliberately not offered: before the release that added it, Coolify answers it with the default 100 lines and no error. About 30 tokens on the tool list.
  • COOLIFY_INSTANCES entries get the startup checks (#383). The single-instance variables were checked at startup for a doubled /api/v1, an unusable URL, leading whitespace or a line break in the token, line breaks in header values, an unexpanded ${VAR}, and an internal URL with no dashboard URL. A fleet entry was only checked for a scheme and a non-empty token, so the rest failed at that instance's first call. Each entry now gets the same checks, labelled by index and name (COOLIFY_INSTANCES[1] ("staging") url ends with /api/v1), all reported at once. doctor reports them on a fleet-config line of their own, so a bad entry no longer fails the default instance's config check and skips its token probe. Header names that are not valid HTTP header names are caught too; custom header values may contain ${, as a --header flag may.

📦 View on npm

🖱️ One-click Claude Desktop install: download coolify-mcp.mcpb below and drag it into Settings → Extensions.