Repository navigation
What's Changed
Added
- Tool errors point at
doctorwhen it can diagnose them (#384). A failed connection to Coolify and a 401 or 403 now end with "To diagnose, runnpx @masonator/coolify-mcp doctorwith 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/versionoutside the usual request path, gets the same pointer on the same two failures. Other errors are unchanged. The unusedCoolifyClient#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 tohttps://used to work and now fails with "Use https://… as the base URL"; any other redirect fails naming its host.doctorfails 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://tohttps://redirect (with the address to use), or any other host. Access is recognised on its*.cloudflareaccess.comteam domain or a custom domain (the/cdn-cgi/access/path), by one check shared withdoctor. 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 stripsAuthorization; HTTP mode's token check on the authorize page no longer follows them either. list_instancescannot hang on one instance (#454). It fanned outget_versionwith 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", whichresources/listnow logs too.resources/listno 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. Thelist*client methods take an optionalsignalfor this. The listing stays uncached on purpose: it is meant to be current.- Log
linesis a whole number from 1 to 10000 onlogsandapplication_logs(#386). It took any number, and Coolify reads-1as "every line" from the release that addedall, 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'slines(our own truncation of stored build logs) becomes a positive whole number too:0showed an empty window and offered a next page forever.allis 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_INSTANCESentries 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.doctorreports them on afleet-configline of their own, so a bad entry no longer fails the default instance'sconfigcheck and skips its token probe. Header names that are not valid HTTP header names are caught too; custom header values may contain${, as a--headerflag may.
🖱️ One-click Claude Desktop install: download coolify-mcp.mcpb below and drag it into Settings → Extensions.