Changelog
[Unreleased]
[2.11.0] - 2026-05-18
Added (#172, thanks @opastorello)
Net tool count: 38 → 42 (after consolidation; original PR proposed 45 before review).
storagestool — list/create/update/delete persistent or file storages for application/database/service. Single consolidated tool with action+resource pattern.scheduled_taskstool — list/create/update/delete/list_executions for application or service. Consolidated.hetznertool — list_locations, list_server_types, list_images, list_ssh_keys, create_server against the Coolify Hetzner cloud-provider endpoints. Requires a configured cloud-provider token UUID. The Coolify Hetzner routes are auth-scope-gated; the wiring is correct but the calling user needs the right token.systemtool — health, list_resources, enable_api, disable_api against the instance. Consolidates what would have been three separate tools.env_varsexpanded — addsdatabaseresource,bulk_updateaction, plusis_build_time,is_preview,data[]params on the existing actions.github_appsexpanded — addslist_repos,list_branchesactions.database_backupsexpanded — addsdelete_executionaction.ResourceListItemtype — concrete interface for/api/v1/resourcesresponses withuuid,name,type, optionalstatus. ReplacesPromise<unknown>on the client method (no-implicit-any policy compliance).
Changed (breaking, behavioural)
delete_previewmoved intoapplicationtool (#172) — was a standalone top-level tool, nowaction: 'delete_preview'on the existingapplicationtool alongside create/update/delete/get/start/stop/restart. Callers must update tool invocations:delete_preview({ application_uuid, pull_request_id })→application({ action: 'delete_preview', uuid, pull_request_id }).health,list_resources,api_controlconsolidated intosystemtool (#172) — three standalone tools merged into one. Callers must update:health()→system({ action: 'health' }),list_resources()→system({ action: 'list_resources' }),api_control({ enabled: true/false })→system({ action: 'enable_api' | 'disable_api' }).storagesupdateaction now requiresstorage_uuid(#172) — previously not validated; the PATCH would send without the required field and silently fail. Now zod-validated; missingstorage_uuidreturns a guard error before the request is built.
Internal
- Dependency bumps via dependabot (#184, #188): minor-and-patch group across two cycles — @types/node, eslint, lint-staged.
- Live-verified the new
systemtool'shealthandlist_resourcesactions against a real Coolify instance; Hetzner routes confirmed wired (401 not 404) but require an instance with a properly-scoped token.
[2.10.0] - 2026-05-14
Added
- Application build-config and
health_check_*fields now wired throughcreate_*(#185 / #178, thanks @kashik0i) — eight build-config fields (dockerfile_location,dockerfile_target_build,base_directory,publish_directory,install_command,build_command,start_command,watch_paths) added to theapplicationtool's zod schema; all twelvehealth_check_*fields plus the build-config fields now forwarded bycreate_public,create_github,create_key, andcreate_dockerimagehandlers. Previously these were silently stripped, so e.g.create_keywithhealth_check_enabled: true, health_check_path: '/health'produced an app with healthcheck off and default/path. Live-tested against Coolify v4 with GET round-trip verification of every field.
Fixed
dockerfile_target_buildaccepted onupdate(#185) — verified against Coolify'sApplicationsController.phpallowlists that this field is UPDATE-only (present on the update allowlist at line 2497, absent from create allowlist at line 1014). Now correctly forwarded on theupdateaction; intentionally not forwarded on anycreate_*action (Coolify would silently drop it).
Internal
- CLAUDE.md gotcha (#185) — documented the CREATE vs UPDATE
$allowedFieldsasymmetry in Coolify'sApplicationsController.php, with concrete examples fordockerfile_target_buildandcreate_dockerimage. Captures the practical reality that Coolify'sopenapi.yamlis an incomplete projection of the real allowlists — always check the controller source before trusting the spec.
[2.9.0] - 2026-05-11
Security
env_varslist now masks values by default (#159 / #182, thanks @daniel-rudaev for reporting) —valueandreal_valueonenv_varslist responses are now replaced with***so plaintext secrets are not leaked to MCP clients / LLMs. Metadata (uuid, key,is_buildtime,is_runtime, timestamps, ids) is untouched. Applied at the API boundary inlistApplicationEnvVarsandlistServiceEnvVarsso both the summary and full projections are protected.bulk_env_updatecontinues to returnMessageResponse-shape data with no values echoed.
Changed (behavioural, may surprise existing callers)
env_varslist values are masked by default. Callers that need the plaintext value must passreveal: trueon theenv_varslist action (e.g. "what is FOO set to right now?"). The underlying client methodslistApplicationEnvVars(uuid, options)andlistServiceEnvVars(uuid, options)now acceptreveal?: booleanon the options object.- Env var field names renamed to match Coolify API (#174 / #135, thanks @kashik0i) —
is_build_time→is_buildtime(one word) and newis_runtimeflag. The previousis_build_timename was being rejected by the Coolify API with HTTP 422 on single endpoints and silently dropped on the bulk endpoint. Callers that were passingis_build_timewere getting either errors or unchanged variables. Documented as a permanent gotcha in CLAUDE.md.
Fixed
- Defensive parsing for non-JSON responses (#177 / #163, thanks @zxyasfas, @Erudition for reporting) —
request<T>()now checksContent-Typeand falls back to raw text when the server returns plain text or malformed JSON. Previously threwSyntaxError: Unexpected tokenon Coolify 4.0.0-beta.474 endpoints that started returning plain text.application/jsonand+jsonvariants both supported; empty content-type treated as JSON for backward compat. is_runtimeflag now flows throughbulkEnvUpdate(#174) — was previously missing from the bulk-update signature, so PEM-key-shaped multiline secrets couldn't be set as runtime-only across multiple apps in one call.
Internal
- Dependency bumps via dependabot (#170, #176, #180, #181): jest-junit, jest, lint-staged, and the minor-and-patch group of 8 dev-deps.
- Dependabot config now ignores TypeScript major-version bumps (#179) — TS 6.0.3 (#171) broke the build matrix; majors will be taken as deliberate migration PRs from now on.
[2.8.1] - 2026-04-28
Added
--headerCLI flag for custom HTTP headers (#167, thanks @imantsk) — Inject extra headers (e.g.--header "CF-Access-Client-Id: ..." --header "CF-Access-Client-Secret: ...") on every outbound request. Useful for Cloudflare Zero Trust, custom auth proxies, and other middleware sitting in front of Coolify. Multiple--headerflags can be combined. Reserved headers (Authorization,Content-Type) are filtered with a warning to prevent silently overriding the Coolify bearer token.
[2.8.0] - 2026-04-28
Added
destination_uuidon application create (#161, thanks @barbe1bc) — Specify which Docker network destination on multi-destination Coolify hosts. Without it, hosts with multiple destinations silently fell back to the default destination.domainsfield accepted on application create (#162, thanks @barbe1bc) — Passdomainsdirectly alongside the existingfqdnalias. Explicitdomainswins when both are set.instant_deploy,custom_docker_run_options,custom_labelson application create (#162, thanks @barbe1bc) — All three were already accepted by Coolify; now exposed on the MCP tool surface.include_logsopt-in ondeployment list_for_app(#158, thanks @kashik0i) — Setinclude_logs: trueto retrieve raw build logs (default: false).
Fixed
- Silent drop of
fqdnon dockerfile/dockerimage/dockercompose creates (#162, thanks @barbe1bc) —mapFqdnToDomains()was applied on public/github/key paths but not on the docker-* paths. Calls passingfqdngot an app with no domain and no error surfaced. listApplicationDeploymentsresponse shape (#158, thanks @kashik0i) — Now correctly parses Coolify's actual{ count, deployments: [] }envelope. Previously typed asPromise<Deployment[]>which was wrong-at-runtime — any caller using.length/.map()would crash against a real Coolify server.- MCP token budget on deployment listing (#158, thanks @kashik0i) —
list_for_appnow returnsDeploymentEssentialsummaries by default (no rawlogsblobs). A typical 35-deployment response shrinks from ~1 MB to ~4 KB (~250×). Passinclude_logs: trueto opt back in.
Changed (breaking, typed-only)
listApplicationDeploymentssignature (#158):Promise<Deployment[]>→Promise<{ count: number; deployments: Deployment[] | DeploymentEssential[] }>. Programmatic consumers of@masonator/coolify-mcpwill need to update destructuring. Note: the previous type was wrong-at-runtime against real Coolify, so any caller that worked end-to-end was already accommodating the envelope shape.
Internal
- Fixed Claude Code workflows broken on OIDC token fetch (#165) — explicit
github_token, current model IDs. - Dependency bumps: dependabot/fetch-metadata 3, actions/github-script 9, action-gh-release 3 (#154, #155, #156); npm minor-and-patch group of 9 dev-deps (#160).
[2.7.3] - 2026-02-25
Changed
- Repository metadata - Updated GitHub repo description, homepage (stumason.dev), and topics
- Package metadata - Added author URL, homepage, bugs URL, and expanded keywords in package.json
- MCP Registry - Added
websiteUrlto server.json - README - Added stumason.dev to Related Links, MCP Registry link, author attribution in footer
[2.7.2] - 2026-02-25
Added
- MCP Registry publishing - Added
mcpNamefield andserver.jsonfor publishing to the official MCP Registry asio.github.StuMason/coolify
[2.7.1] - 2026-02-25
Fixed
- Documentation overhaul - Comprehensive update to all project documentation:
- Fixed stale tool counts across README.md and CLAUDE.md (35 → 38)
- Fixed incorrect tool names in README (
get_server_resources→server_resources,get_server_domains→server_domains) - Added detailed Available Tools entries for
teams,cloud_tokens,search_docs,github_apps - Added deployment log
pageparam andlogs_metato deployment tool docs - Added example prompts for documentation search, teams, and cloud provider management
- Removed hardcoded tool count references from CLAUDE.md documentation standards
[2.7.0] - 2026-02-25
Added
teamstool - Manage teams: list, get, get_members, get_current, get_current_memberscloud_tokenstool - Manage cloud provider tokens (Hetzner/DigitalOcean): list, get, create, update, delete, validatesearch_docstool - Search Coolify documentation using local full-text search (BM25 via MiniSearch). Fetches docs from coolify.io on first search, indexes 1500+ chunks, returns token-efficient results (~849 tokens for 5 results)- Version caching - Cache Coolify server version on first API call, reducing redundant requests
[2.6.6] - 2026-02-25
Fixed
- Deployment log truncation -
linesparam now works correctly (#115):- Coolify returns deployment logs as a JSON array in a single line —
truncateLogswas splitting on newlines and finding none - Now parses JSON array format, filters hidden entries (docker internals), formats as readable
[timestamp] outputlines - 96KB raw JSON → 771 chars for
lines: 10(99.2% reduction)
- Coolify returns deployment logs as a JSON array in a single line —
Added
- Log pagination -
pageparam on deployment get with logs (#115):- Page 1 = most recent entries, page 2 = older batch, etc.
- Returns
logs_metawithtotal_entriesandshowingrange _paginationhints withnext/prevtool calls, consistent with list endpoints
[2.6.5] - 2026-02-25
Changed
- ESLint 10 - Upgraded from ESLint 9 to ESLint 10, added
@eslint/jsas explicit dependency (#123) - Dependency updates - Bumped minor/patch dependencies (#127)
[2.6.4] - 2026-02-25
Fixed
- Application deployments API path - Correct endpoint path for listing application deployments (#120)
- fqdn → domains mapping - Map
fqdnfield todomainsfor Coolify API compatibility:- Coolify API uses
domainsfield for setting application domain, notfqdn - Added
mapFqdnToDomainshelper that transparently convertsfqdntodomains - Applied to
createApplicationPublic,createApplicationPrivateGH,createApplicationPrivateKey, andupdateApplication - Callers using
fqdnfield now work correctly without breaking changes
- Coolify API uses
[2.6.2] - 2026-01-31
Fixed
- Zod v4 Compatibility - Require MCP SDK >=1.23.0 (#109):
- SDK versions below 1.23.0 call
._parse()which doesn't exist on Zod v4 schemas - Causes
keyValidator._parse is not a functionon all tools with parameters - Bumped SDK floor from
^1.6.1to^1.23.0(first version with Zod v4 support)
- SDK versions below 1.23.0 call
[2.6.1] - 2026-01-31
Fixed
Version Mismatch - Read VERSION dynamically from package.json (#106):
get_mcp_versionwas returning hardcoded2.5.0instead of2.6.0- VERSION is now read from
package.jsonat runtime viacreateRequire - Added regression test to prevent future drift
Validation Error Crash - Handle string validation errors from Coolify API (#107):
messages.join is not a functionwhen creating services withdocker_compose_raw- Coolify returns validation errors as plain strings for some fields, not arrays
- Added
Array.isArrayguard before.join() - Widened
ErrorResponse.errorstype toRecord<string, string[] | string>
Auto Base64 Encoding - Encode
docker_compose_rawautomatically (#107):- Coolify API requires base64-encoded YAML but field name implies raw content
- Client now auto-encodes in
createService,updateService,createApplicationDockerCompose, andupdateApplication - Passes through values that are already base64
Added
- Smoke Test Command -
/smoke-testslash command for live server verification - Integration Tests - Smoke tests against real Coolify instance in
src/__tests__/integration/
[2.6.0] - 2026-01-27
Added
- HATEOAS-style Response Actions - Add
_actionsto responses (#98, #99):- Responses now include contextual
_actionsarray with suggested next tool calls get_applicationreturns actions like "View logs", "Restart", "Stop" based on app statusdeployment getreturns actions like "Cancel", "View app", "App logs"controltool returns follow-up actions after start/stop/restartdeployreturns action to check deployment status- List endpoints (
list_applications,list_deployments) include_paginationfor next/prev
- Responses now include contextual
Fixed
Deploy by UUID Broken - Fix
deploytool UUID detection (#99):- Previously,
deployByTagOrUuidalways usedtagquery param - Now correctly detects Coolify-style UUIDs (24 char alphanumeric) and standard UUIDs
- UUIDs use
uuidquery param, tag names usetagquery param
- Previously,
Deployment Response Size - Reduce default response from ~13k to <1k tokens (#98):
deployment getnow returns essential fields by default (no logs)- Use
linesparameter to include truncated logs when needed - Response includes
logs_infofield indicating log availability and size
env_vars Create Validation Error - Remove
is_build_timeparameter (#97):- Coolify API rejects
is_build_timeon env var create despite OpenAPI docs - Removed parameter from schema to avoid misleading users
- Coolify API rejects
Environment Missing Database Types - Include dragonfly/keydb/clickhouse in
environments get(#88):- Coolify API omits these newer database types from environment endpoint
- Cross-references with
list_databasesusing lightweight summaries - Only adds fields if databases of those types exist in the environment
[2.5.0] - 2026-01-15
Added
- Codecov Test Analytics - Enable test result tracking (#84):
- Added
jest-junitreporter for JUnit XML output - CI workflow now uploads test results to Codecov
- Enables flaky test detection and test performance tracking
- Added
Fixed
Deployment Logs Massive Payload - Add character-based truncation (#82):
deploymenttool'slinesparameter only limited line count, not characters- Giant log lines (base64, docker build output) could still return 900K+ chars
- Fix: Default to last 200 lines AND cap at 50K characters
- Added
max_charsparameter for customization
Type Safety - Eliminate all
as anycasts in MCP tool handlers (#81):applicationhandlers (create_public, create_github, create_key, create_dockerimage) now use explicit typed objectsservicecreate handler uses explicit typed object- Removed
eslint-disable @typescript-eslint/no-explicit-anydirective - Fixed type definitions:
build_packandports_exposesnow optional for GitHub/Key deploys - Verified against Coolify v4.0.0-beta.460
[2.4.0] - 2026-01-15
Added
- GitHub Apps Management - Full CRUD operations for GitHub App integrations (#75):
github_appstool withlist,get,create,update,deleteactionsgetaction returns full details by filtering list (no single-item API endpoint exists)- Uses integer ID (not UUID) for get/update/delete per Coolify API requirements
- Token-optimized summary mode for list operations
- Total tool count increased from 34 to 35 tools
Fixed
- MCP Tool Routing Fields Leak - Strip
actionfield before API calls (#76):applicationandservicetools were passing MCP-internalactionfield to Coolify API- Coolify API rejected with "action: This field is not allowed"
- Fix: Destructure
{ action, uuid, delete_volumes, ...apiData }and useapiDatafor API calls
[2.3.0] - 2026-01-14
Added
- Public Repository Deployment - Deploy from public Git repos without SSH keys (#70):
applicationtool now supportscreate_publicaction- Required fields:
project_uuid,server_uuid,git_repository,git_branch,build_pack,ports_exposes - Thanks to @gorquan for the contribution!
[2.2.0] - 2026-01-14
Added
Docker Image Deployment - Deploy pre-built images from Docker Hub or registries (#69):
applicationtool now supportscreate_dockerimageaction- Required fields:
project_uuid,server_uuid,docker_registry_image_name,ports_exposes - Optional:
docker_registry_image_tag(defaults tolatest)
Health Check Configuration - Configure application health checks during create/update (#62):
- 12 health check fields now supported in
applicationtool:health_check_enabled- Enable/disable health checkshealth_check_path- URL path for health check (e.g.,/up,/health)health_check_port- Port to checkhealth_check_host- Host for health checkhealth_check_method- HTTP method (GET, POST, etc.)health_check_return_code- Expected HTTP status codehealth_check_scheme- HTTP or HTTPShealth_check_response_text- Expected response texthealth_check_interval- Seconds between checkshealth_check_timeout- Seconds to wait for responsehealth_check_retries- Number of retries before marking unhealthyhealth_check_start_period- Seconds to wait before starting checks
- 12 health check fields now supported in
Deployment Log Line Limiting - Reduce token usage for large deployment logs (#68):
deploymenttoolgetaction now supportslinesparameter- Returns only the last N lines of logs when specified
- Example:
deployment(action: 'get', uuid: 'xxx', lines: 50)
Changed
- Improved Validation Errors - API validation errors now include field-level details (#69):
- Errors like "Validation failed." now include: "Validation failed. - field: error message"
- Multiple validation errors per field are comma-separated
- Multiple fields are semicolon-separated
[2.1.0] - 2026-01-07
Added
- Full Database Backup Management - Complete lifecycle management for database backup schedules:
database_backupstool now supportscreate,update, anddeleteactions- Configure backup frequency (hourly, daily, weekly, monthly)
- Set retention policies (days or amount limits for local and S3 storage)
- Enable/disable backup schedules without deletion
- S3 storage integration for off-server backups
- All backup configuration parameters supported:
frequency- Cron expression or predefined scheduleenabled- Enable/disable the backup schedulesave_s3- Store backups in S3-compatible storages3_storage_uuid- Which S3 storage to usedatabase_backup_retention_days_locally- Days to keep backups locally (0 = unlimited)database_backup_retention_days_s3- Days to keep backups in S3 (0 = unlimited)database_backup_retention_amount_locally- Number of most recent backups to keep locallydatabase_backup_retention_amount_s3- Number of most recent backups to keep in S3databases_to_backup- Specific databases to backup (for applicable database types)dump_all- Dump all databases (for applicable database types)
Changed
database_backupstool actions expanded from 4 to 7:list_schedules,get_schedule,list_executions,get_execution,create,update,delete
[2.0.0] - 2026-01-06
Breaking Changes - Token Diet Release 🏋️
v2.0.0 is a complete rewrite of the MCP tool layer focused on drastically reducing token usage.
- Token reduction: ~43,000 → ~6,600 tokens (85% reduction)
- Tool count: 77 → 34 tools (56% reduction)
- All prompts removed (7 prompts were unused)
Changed
Consolidated tools - Related operations now share a single tool with action parameters:
- Server:
server_resources,server_domains,validate_server(separate focused tools) - Projects:
projectstool withaction: list|get|create|update|delete - Environments:
environmentstool withaction: list|get|create|delete - Applications:
applicationtool withaction: create_github|create_key|update|delete - Databases:
databasetool withaction: create|deleteandtype: postgresql|mysql|mariadb|mongodb|redis|keydb|clickhouse|dragonfly - Services:
servicetool withaction: create|update|delete - Control:
controltool for start/stop/restart across applications, databases, services - Env vars:
env_varstool for CRUD across applications and services - Private keys:
private_keystool withaction: list|get|create|update|delete - Backups:
database_backupstool withaction: list|get|list_executions|get_execution - Deployments:
deploymenttool withaction: get|cancel|list_for_app
- Server:
Terse descriptions - All tool descriptions minimized for token efficiency
Removed
- All 7 MCP prompts (
debug-app,health-check,deploy-app,troubleshoot-ssl,restart-project,env-audit,backup-status) get_infrastructure_overviewmoved to inline implementation inget_infrastructure_overviewtool (simpler)
Migration Guide
Most v1.x tool names still exist unchanged:
get_version,get_mcp_version- unchangedlist_servers,get_server- unchangedlist_applications,get_application,get_application_logs- unchangedlist_databases,get_database- unchangedlist_services,get_service- unchangedlist_deployments,deploy- unchangeddiagnose_app,diagnose_server,find_issues- unchangedrestart_project_apps,bulk_env_update,stop_all_apps,redeploy_project- unchanged
Consolidated tools (use action parameter):
create_project→projectswithaction: 'create'delete_project→projectswithaction: 'delete'create_postgresql→databasewithaction: 'create', type: 'postgresql'start_application→controlwithresource: 'application', action: 'start'create_application_env→env_varswithresource: 'application', action: 'create'
[1.6.0] - 2026-01-06
Added
- Database Creation Tools - Full CRUD support for all database types:
create_postgresql- Create PostgreSQL databasescreate_mysql- Create MySQL databasescreate_mariadb- Create MariaDB databasescreate_mongodb- Create MongoDB databasescreate_redis- Create Redis databasescreate_keydb- Create KeyDB databasescreate_clickhouse- Create ClickHouse databasescreate_dragonfly- Create Dragonfly databases (Redis-compatible)
Changed
- Total tool count increased from 67 to 75 tools
- Database tools section now has 14 tools (was 6)
[1.5.0] - 2026-01-06
Fixed
delete_environmentnow uses correct API path/projects/{project_uuid}/environments/{environment_name_or_uuid}(breaking: now requiresproject_uuidparameter)
Changed
- Claude Code review workflow now only runs on PR creation (not every push)
- Upgraded to Prettier 4.0
Removed
- Obsolete documentation files in
docs/features/(14 ADR files) anddocs/mcp-*.mdfiles (~7,700 lines removed)
[1.1.1] - 2026-01-05
Changed
- Dependency Updates - Major upgrade to latest secure versions:
- ESLint 8→9 with new flat config format
- zod 3→4
- @types/node 20→25
- dotenv 16→17
- lint-staged 15→16
- eslint-config-prettier 9→10
- @typescript-eslint packages 7→8
Added
- Auto-delete branches on merge
- Dependabot auto-merge for patch/minor updates
- Weekly OpenAPI drift detection (monitors Coolify API changes)
- Claude Code review on PRs
- CONTRIBUTING.md with maintenance documentation
[1.1.0] - 2026-01-05
Added
delete_database- Delete databases with optional volume cleanup (completes database CRUD)get_mcp_version- Get the coolify-mcp server version (useful to verify which version is installed)
Changed
- Total tool count increased from 65 to 67 tools
[1.0.0] - 2026-01-03
Added
- MCP Prompts - Workflow Templates - Pre-built guided workflows that users can invoke:
debug-app- Comprehensive application debugging (gathers logs, status, env vars, deployments)health-check- Full infrastructure health analysisdeploy-app- Step-by-step deployment wizard from Git repositorytroubleshoot-ssl- SSL/TLS certificate diagnosis workflowrestart-project- Safely restart all apps in a project with status monitoringenv-audit- Audit and compare environment variables across applicationsbackup-status- Check database backup status and history
Changed
- v1.0.0 Milestone - Production-ready with 65 tools and 7 prompt templates
[0.9.0] - 2026-01-03
Added
Batch Operations - Power user tools for operating on multiple resources at once:
restart_project_apps- Restart all applications in a projectbulk_env_update- Update or create an environment variable across multiple applications (upsert behavior)stop_all_apps- Emergency stop all running applications (requires confirmation)redeploy_project- Redeploy all applications in a project with force rebuild
BatchOperationResulttype for standardized batch operation responses with success/failure tracking
Changed
- Total tool count increased from 61 to 65 tools
[0.8.1] - 2026-01-03
Changed
- Environment variable responses now use summary mode -
list_application_envsnow returns only essential fields (uuid, key, value, is_build_time) instead of 20+ fields, reducing response sizes by ~80% and preventing context window exhaustion
Added
EnvVarSummarytype for optimized env var responses
[0.8.0] - 2026-01-03
Added
Smart Diagnostic Tools - Composite tools that aggregate multiple API calls into single, context-optimized responses for debugging:
diagnose_app- Get comprehensive app diagnostics (status, logs, env vars, deployments). Accepts UUID, name, or domain (e.g., "stuartmason.co.uk")diagnose_server- Get server diagnostics (status, resources, domains, validation). Accepts UUID, name, or IP addressfind_issues- Scan infrastructure for unhealthy apps, databases, services, and unreachable servers
Smart Lookup - Diagnostic tools now accept human-friendly identifiers:
- Applications: UUID, name, or domain (FQDN)
- Servers: UUID, name, or IP address
Changed
- Total tool count increased from 58 to 61 tools
[0.7.1] - 2026-01-02
Fixed
- Add
repositoryfield to package.json for npm trusted publishing
[0.7.0] - 2026-01-02
Added
Private Keys CRUD - Full management of SSH deploy keys:
list_private_keys- List all private keysget_private_key- Get private key detailscreate_private_key- Create a new private key for deploymentsupdate_private_key- Update a private keydelete_private_key- Delete a private key
Database Backups - Monitor and manage database backup schedules and executions:
list_database_backups- List scheduled backups for a databaseget_database_backup- Get details of a scheduled backuplist_backup_executions- List execution history for a scheduled backupget_backup_execution- Get details of a specific backup execution
Deployment Control:
cancel_deployment- Cancel a running deployment
Changed
- Total tool count increased from 47 to 58 tools
- Updated to Coolify API v460 specification
[0.6.0] - 2026-01-02
Changed
- BREAKING: List endpoints now return summaries by default - All
list_*tools now return optimized summary responses instead of full API responses. This reduces response sizes by 90-99%, preventing context window exhaustion in AI assistants.list_serversreturns: uuid, name, ip, status, is_reachablelist_projectsreturns: uuid, name, descriptionlist_applicationsreturns: uuid, name, status, fqdn, git_repository, git_branchlist_databasesreturns: uuid, name, type, status, is_publiclist_servicesreturns: uuid, name, type, status, domainslist_deploymentsreturns: uuid, deployment_uuid, application_name, status, created_at
Added
get_infrastructure_overview- New composite tool that returns a high-level view of all infrastructure (servers, projects, applications, databases, services) in a single call with graceful error handling. If one resource type fails to load, the others still return. Start here to understand your Coolify setup.
Fixed
- Improved type safety in
get_infrastructure_overview- removedas unknown[]casts - Added defensive
Array.isArray()checks to all summary transformers for robustness get_infrastructure_overviewnow usesPromise.allSettledfor graceful degradation - if one API call fails, others still return with errors reported separately
Migration from v0.5.0
No code changes required! The changes are automatic:
- All
list_*tools now return summaries instead of full responses - If you need full details, use
get_*tools (e.g.,get_server(uuid)instead of relying onlist_servers) - The
summaryparameter has been removed from tool inputs - summaries are now always returned for list operations - New recommended workflow:
get_infrastructure_overview→list_*→get_*→ action
Why This Change?
The Coolify API returns extremely verbose responses. A single application contains 91 fields including embedded 3KB server objects, 2-4KB base64 Traefik labels, and docker-compose files up to 47KB. When listing 20+ applications, responses exceeded 200KB, which quickly exhausted the context window of AI assistants like Claude Desktop, making the MCP server unusable for real infrastructure.
Before v0.6.0:
list_applications(21 apps): ~170KB responselist_services(13 services): ~367KB response
After v0.6.0:
list_applications(21 apps): ~4.4KB response (97% reduction)list_services(13 services): ~1.2KB response (99% reduction)
Use get_* tools (e.g., get_application) when you need full details for a specific resource.
[0.5.0] - 2026-01-02
Added
create_service- Create one-click services (pocketbase, mysql, redis, wordpress, etc.) via type or docker_compose_rawdelete_service- Delete a service with options for cleanup
[0.4.0] - 2025-12-XX
Added
- Summary transformers for all list endpoints (client-side support)
- Pagination support for list endpoints
- 100% test coverage
[0.3.0] - 2025-12-XX
Added
- Initial release with 46 tools for Coolify management
- Server, Project, Environment, Application, Database, Service, and Deployment management
- Environment variable CRUD operations
- Application deployment from private GitHub repos