What's Changed
The field-test follow-ups from #336, contributed by the field-tester. The headline is an upstream bug: GET /databases can drop whole database types, and list_databases now repairs that from /resources.
Fixed
list_databasesno longer silently drops whole database types (#336, item 1). Coolify keeps a per-type id sequence andGET /databasesmerges the per-type collections keyed on that id, so two types sharing ids shadow each other — verified live upstream: 2 standalone Postgres + 2 standalone Dragonfly, both pairs ids 1 and 2, returned only the Dragonflys./resourcesreports every database correctly, solistDatabasesnow fetches both and merges the rows/databasesdropped back in by uuid (everystandalone-*resource type is a database). The merge is a no-op when/databasesis complete, and if/resourcesfails the plain/databasesresult is returned unchanged.get_infrastructure_overviewdatabase counts andfind_issuesdatabase coverage are repaired by the same merge, since both go throughlistDatabases.environments getnow honours its own schema (#336, item 2). The schema has always markednameoptional, but the handler rejected withError: name required. It now defaults to the sole environment when the project has exactly one; with several (or none) it explains what exists instead of a bare rejection.diagnose_appenv-var counts no longer read as a bug (#336, item 3). Coolify auto-creates a preview twin for every production application env var and the API returns both scopes merged, so the raw count doubles. The diagnostic now surfacesis_previewper variable plusdistinct_keys,production_countandpreview_countalongside the unchanged rawcount. No row is ever deduped — deleting a twin destroys preview config.- Exact matches win name resolution (#336, item 4).
diagnose_appresolved "api.example.com" to a multi-app disambiguation error whenever another app's FQDN contained it as a substring. An exact name or FQDN match (scheme and trailing slash ignored, each entry of a comma-separatedfqdncompared) now wins outright before substring matching runs; same fordiagnose_servernames and IPs, where "10.0.0.5" is a substring of "10.0.0.50".
Added
find_issuesfolds in signals it already had in hand (#336, item 5). An app inrunning:unknownand an available proxy patch upgrade used to produce zero findings. Issues now carry aseverity(critical|warning): resources running with unknown health warn (running container, no working healthcheck — a failure would go undetected), and servers with an available Traefik update warn with the version pair (traefik_outdated_infoonly exists onGET /servers/{uuid}, so each listed server is fetched individually; shape verified live against v4.3.7). Theunhealthy_*/unreachable_serverssummary counts keep their pre-existing critical-only meaning; warnings are counted separately insummary.warnings.
🖱️ One-click Claude Desktop install: download coolify-mcp.mcpb below and drag it into Settings → Extensions.