awesome-coolify-mcp
This MCP server provides a comprehensive interface for AI agents to operate and manage Coolify (self-hosted PaaS) instances, covering infrastructure control, deployments, diagnostics, and emergency operations.
System & Meta: Verify API connectivity, check Coolify version, get an aggregate infrastructure overview (servers, projects, apps, services, databases), and retrieve the MCP server's own version without an API call.
Resource Discovery: List or fuzzy-search applications, services, databases, servers, projects, and environments by name, domain, or IP with pagination.
Diagnostics & Logging: Investigate app or server health, run fleet-wide issue scans grouped by severity, and retrieve bounded runtime or deployment logs with triage context.
Application Lifecycle: Create, update, delete, start, stop, restart, and deploy applications (with optional force rebuild); manage environment variables (list, get, create, update, delete, bulk-update, sync from .env file).
Deployment Tracking: List deployments, get details, cancel in-flight deployments, watch deployments with bounded polling/backoff, and retrieve build logs.
Service & Database Management: Full CRUD and lifecycle control for services and databases (8 engines supported); manage database backup schedules (create, list, update, delete, trigger immediate backups, view history); discover one-click service types.
Server, Project & Environment Management: Register, configure, validate, and delete servers; full CRUD for projects and environments.
SSH Key Management: List, create, update, and delete private SSH keys, with PEM content masked by default.
Recipes & Orchestration: Multi-resource orchestration in a single call โ create git-backed apps, app+database stacks with auto-wired DATABASE_URL, or one-click services.
Setup Wizard: Preflight checks, wire existing workloads, or provision greenfield projects with guided steps.
Emergency Operations (gated): Stop all running applications fleet-wide, or redeploy/restart all apps in a project โ all requiring explicit confirm: true.
Multi-Instance Registry: Register and manage multiple named Coolify instances, rotate credentials, set defaults, and import from environment variables.
Local Manifest Cache: Read/write/sync a local .coolify/manifest.json for offline UUID resolution, diff against live API, and prune stale entries.
Offline Documentation: Search a bundled Coolify troubleshooting index without any live web fetch.
Safety Features: Destructive actions require confirm: true; sensitive values (passwords, tokens, keys) are masked as *** by default (use reveal: true for plaintext); structured error codes (e.g., COOLIFY_401) with recovery hints; automatic retries with exponential backoff for transient failures.
Supports deploying Gitea as a one-click service within Coolify.
Allows deploying applications from GitHub repositories using deploy keys or GitHub App integration.
Enables creation and management of PostgreSQL databases, including backups and environment variables.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@awesome-coolify-mcpcheck if my Coolify instance is online"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ Table of contents
Related MCP server: coolify-mcp
๐ญ Overview
Self-hosted Coolify is one of the best open-source alternatives to Heroku/Vercel-style PaaS platforms โ but wiring it up to an AI coding agent has historically meant piecing together several small, overlapping community MCP integrations, each with its own schema, its own error format, and its own idea of what "safe" looks like.
awesome-coolify-mcp 1.1.4 replaces that patchwork with a single, community-maintained MCP server that speaks Coolify's REST API 4.1.x through a clean, action-based tool surface. Source, docs, and npm distribution live in one public repo โ clezcoding/awesome-coolify โ while the installable package stays awesome-coolify-mcp. Instead of memorizing dozens of near-identical tool names, your agent calls one of 19 tools with an action field:
application({ action: "deploy", uuid: "<app-uuid>", wait: false })
deployment({ action: "watch", deployment_uuid: "<deployment_uuid>", timeout: 300 })
diagnose({ action: "scan" })
emergency({ action: "stop_all", confirm: true })Under the hood, every call goes through the same request pipeline: Zod-validated input, retrying HTTP client, secret-aware output masking, and structured error envelopes with recovery hints โ so your agent fails gracefully instead of guessing.
This is a community project built for people who run their own Coolify instances.It is not affiliated with or endorsed by Coolify Labs.
๐ Why awesome-coolify-mcp
Typical setup without it | With awesome-coolify-mcp |
Several overlapping community MCP tools, each with its own schema | One server, one consistent schema |
Dozens of granular, single-purpose tools per resource | 19 tools with consistent |
Ad-hoc error strings that agents have to guess at | Structured codes ( |
Secrets can leak straight into agent context | Default secret masking + confirmation gates on destructive actions |
Read a wall of raw JSON to find what changed | Bounded, paginated projections tuned for LLM context windows |
Today, the shipped surface covers day-2 operations and infrastructure creation: verify connectivity, discover fleets, deploy and watch builds, inspect bounded logs, diagnose incidents, run gated emergency ops, and manage applications, services, databases, SSH keys, servers, projects, environments, backups, and environment variables.
โจ Features
18 action-based tools โ call
application({ action: "deploy", uuid })instead of hunting through dozens of granular tool names. The registered surface issystem,meta,resource,diagnose,application,emergency,deployment,service,database,private_key,instance,manifest,server,project,environment,docs,recipe, andsetup.Multi-instance registry & routing โ register every Coolify instance you own in
~/.coolify-mcp/instances.jsonvia theinstancetool; per-call credential resolution with no cross-instance leakage.Coolify Cloud aware โ
instance({ action: "cloud-info" })for local discovery, team-scoped tokens, and structured cloud error codes (COOLIFY_CLOUD_FORBIDDEN,COOLIFY_CLOUD_UNSUPPORTED).Local manifest cache โ
.coolify/manifest.jsonsync viamanifest({ action: "sync" }), best-effort auto-hooks on app/service/DB mutations, and_meta.manifestWarningwhen the cache is stale.Server branding โ MCP list icon via
serverInfo.icons(embedded data URI + jsDelivr CDN entries fromdocs/assets/).Ops workflows that mirror real incidents โ a single
system.infrastructure_overviewcall for the big picture, fuzzyresource.findwhen you only remember a name or domain,diagnose.app/diagnose.serverfor a specific suspect, anddiagnose.scanwhen you just know something is wrong fleet-wide.Deploy lifecycle agents can drive โ start/stop/restart, force rebuild,
deployment.watchwith bounded backoff,deployment.logsfor builds, boundedapplication.logs, and runtime follow with idle/overall timeouts.Full workload CRUD โ create, inspect, update, delete, and operate applications, services, and databases; discover live one-click IDs with
service.list-types.Recipes and guided setup โ create git apps, app-plus-database stacks, and one-click services; run
setup.preflight,setup.wire, orsetup.resume; install four matching IDE workflow skills.Safety by default, not by convention โ emergency mutations require an explicit
confirm: true; sensitive keys (password,token,secret,private,env) render as***unless you opt in withreveal: true.Agent-friendly failure modes โ every error is a parseable envelope with a
code, a humanmessage, andrecoveryHints; transient network/429/5xx failures retry automatically with exponential backoff.Broad client coverage out of the box โ Cursor, VS Code / GitHub Copilot, Claude Desktop, Claude Code, Windsurf, and 15+ more via the install configurator.
๐๏ธ How it works
MCP client (Cursor / Claude / VS Code / โฆ)
โ stdio MCP
โผ
awesome-coolify-mcp (19 tools + action discriminator)
โ optional ~/.coolify-mcp/instances.json resolution
โ HTTPS + Bearer token
โผ
Coolify REST API 4.1.x (servers ยท projects ยท applications ยท services ยท databases)The server itself is intentionally boring: it holds no long-lived state and never touches your IDE's config files. Your MCP host (Cursor, Claude, VS Code, โฆ) injects COOLIFY_URL and COOLIFY_TOKEN through its MCP config's env block โ or you register named instances in ~/.coolify-mcp/instances.json via the instance tool. The process reads credentials from its environment (or the registry) and forwards authenticated requests to your Coolify instance over HTTPS.
๐ Quick start
Prerequisites
Node.js 24+ (Active LTS; CI uses Node 24)
A self-hosted Coolify instance on 4.1.x
An API token from Coolify โ Keys & Tokens (authorization docs)
Run it directly with npx โ no global install needed:
npx -y awesome-coolify-mcpWire the two required environment variables into your MCP host (see Install for every client). Once connected, a minimal smoke test looks like this:
meta({ action: "version" }) // server identity โ no Coolify call
system({ action: "verify" }) // authenticate + connectivity check
system({ action: "infrastructure_overview" }) // servers, projects, apps, services, DBs at a glanceMulti-instance users: register each Coolify instance first with instance({ action: "add", name, url, token }), then call system({ action: "verify" }). Single-instance setups can skip the registry and use COOLIFY_URL / COOLIFY_TOKEN in MCP env.
Emergency actions (stop_all, redeploy_project, restart_project) require confirm: true. Call them without confirm first โ you'll get a would_affect preview and no mutation runs. Only pass reveal: true when you genuinely need plaintext secrets back.
๐ฆ Install
There are three equally supported paths โ pick whichever fits your workflow.
1. One-click deeplink
Best when you already have your Coolify URL and token handy. Placeholder credentials work fine too โ you'll be prompted to fill them in, or you can swap them afterwards.
Both editors implement a protocol handler that reads a JSON server configuration straight out of the URL:
Client | Scheme | Encoding |
Cursor |
|
|
VS Code / Copilot |
|
|
Clicking the button opens your editor, shows the server it's about to add, and lets you review or edit the command/env before accepting โ nothing is installed silently.
2. Install configurator (GitHub Pages)
Use the browser configurator to type in your real COOLIFY_URL / COOLIFY_TOKEN and generate a ready-to-paste snippet for your exact client โ JSON, TOML, or YAML depending on what that client expects.
Everything runs client-side in your browser. Your token is never sent to a backend, logged, or stored anywhere but the config file you paste it into.
3. Manual MCP config
Paste this into your host's MCP configuration file. Cursor example (~/.cursor/mcp.json for global, or .cursor/mcp.json in a project):
{
"mcpServers": {
"awesome-coolify-mcp": {
"command": "npx",
"args": ["-y", "awesome-coolify-mcp"],
"env": {
"COOLIFY_URL": "https://coolify.example.com",
"COOLIFY_TOKEN": "YOUR_COOLIFY_API_TOKEN",
"COOLIFY_VERIFY_SSL": "true",
"COOLIFY_MCP_LOG": "info"
}
}
}
}A ready-made copy-paste template also lives at docs/mcp.example.json.
UsingCoolify Cloud? Generate a team-scoped token and follow the registry setup in docs/en/cloud.md.
IDE skills (Cursor, Claude Code, Codex)
Install Coolify workflow skills for Cursor, Claude Code, and Codex:
npx skills add clezcoding/awesome-coolify -a cursor -a claude-code -a codexAfter MCP install, run setup({ action: "preflight" }) or see the Setup guide for gh preflight, project linkage, and greenfield provisioning.
๐ฅ๏ธ Supported clients
Client | Config location | Notes |
Cursor |
| One-click deeplink or manual JSON |
VS Code / GitHub Copilot |
| Native |
Claude Desktop |
| Manual JSON or configurator output today |
Claude Code |
| stdio via |
Windsurf |
| Same |
The install configurator covers a much wider matrix โ OpenCode, Codex CLI, Gemini CLI, Cline, Kilo Code, Goose, LM Studio, Hermes Agent, Kimi Code, Google Antigravity, OpenClaw, and more โ with the correct config shape for each.
Claude Desktop currently uses manual JSON or configurator output.
๐ Environment variables
Variable | Required | Default | Description |
| yes* | โ | Coolify base URL, no trailing slash โ e.g. |
| yes* | โ | Bearer API token, scoped to your team |
| no |
| Set to |
| no |
| Log verbosity: |
Credentials are read from the process environment (your IDE's MCP env block) or an optional local .env file when running the CLI directly. They are never echoed back inside tool responses.
With the multi-instance registry (~/.coolify-mcp/instances.json), COOLIFY_URL and COOLIFY_TOKEN become optional โ the instance tool resolves credentials per call. Env vars remain the simplest path for single-instance setups.
โ๏ธ Coolify Cloud
awesome-coolify-mcp works with Coolify Cloud using the same 19 tools โ team-scoped tokens, structured cloud error codes (COOLIFY_CLOUD_FORBIDDEN, COOLIFY_CLOUD_UNSUPPORTED), and local instance action cloud-info for discovery.
Run instance({ action: "cloud-info" }) before your first Cloud session โ it returns isCloud, resolved url, credential source (registry | env | infer), knownLimits, and a docs link. No live API call.
Full setup, smoke test, and known limits โ docs/en/cloud.md
๐ฌ MCP Prompts
Six parameterized workflow prompts return numbered step guidance (English bodies) that orchestrate existing tools. Most arguments are optional โ open any prompt without prefill.
Prompt | Args (all optional unless noted) | Purpose |
|
| Deploy an application and monitor until terminal status |
|
| Investigate app, server, or fleet-wide issues (includes |
|
| Create project, environment, and optional server linkage |
|
| Triage with |
|
| Preview then confirm-gated |
|
| Guided change window using existing confirm-gated mutations |
Prompt handlers never read .coolify/manifest.json from disk โ they steer the agent to resolve UUIDs from manifest or ask the user. Playbooks never auto-set confirm: true.
๐งฐ Tools reference
Every domain is exposed as one MCP tool with an action discriminator, so your agent's tool list stays short while the capability surface stays wide.
system({ action: "health" })
application({ action: "deploy", uuid: "<app-uuid>", wait: false })
deployment({ action: "watch", deployment_uuid: "<deployment_uuid>", timeout: 300 })
emergency({ action: "stop_all", confirm: true })๐ฅ๏ธ system โ connectivity & overview
Your first call in any session: is Coolify reachable, and what does the fleet look like right now?
Action | Purpose |
| Verify Coolify API reachability |
| Coolify instance version string |
| Authenticate; returns connectivity + version in one call |
| Aggregate counts across servers, projects, applications, services, databases |
๐ท๏ธ meta โ server identity
Action | Purpose |
| awesome-coolify-mcp's own package name + semver โ no Coolify call at all |
๐ resource โ discovery
For when you know roughly what you're looking for but not its exact UUID.
Action | Purpose |
| Applications, services, and databases as summary projections, with pagination |
| Fuzzy search by name, domain, or IP across servers and resources โ ranked, capped at 10 |
๐ฉบ diagnose โ investigation
The tool you reach for when something feels wrong but you don't yet know what.
Action | Purpose |
| App status, health, env var count, and recent deployments |
| Server resources, domains, and reachability |
| Fleet-wide issues grouped by severity โ the "what's on fire" button |
| Resolve an application, return triage context, and optionally include bounded runtime or deployment logs |
| Log Brain โ rule-based pattern triage on runtime (and optional build) logs; advisory-only ( |
๐ application โ app operations
Action | Purpose |
| Detailed application configuration |
| Container lifecycle control |
| Trigger a deploy with optional |
| Bounded runtime logs, or bounded follow mode with idle and overall timeouts |
| List or fetch env vars (values masked as |
| Create or update individual env vars (supports |
| Delete one env var โ requires |
| Patch many env vars at once โ requires |
| Diff/apply a local |
| Compare and promote env vars between two applications in the same Coolify instance (product name: env.promote); preview by default โ see Resource env vars |
๐ deployment โ deploy tracking
Action | Purpose |
| Deployments for a given application |
| Status, commit, and timing details for one deployment |
| Poll until terminal with bounded timeout, backoff, and jitter |
| Cancel an in-flight deployment cleanly |
| Bounded deployment build logs by deployment UUID, or newest deployment for an application |
| Advisory read-only deploy risk check: |
| Confirm-gated recovery to prior successful |
๐ก๏ธ Deploy guard (preflight + rollback)
Action | Safety |
| Read-only โ never calls deploy/mutate APIs; |
| Two-step like emergency ops: omit |
deployment({ action: "preflight", uuid: "<app-uuid>" })
// risk acceptable โ follow recommended_actions to application.deploy
deployment({ action: "rollback", uuid: "<app-uuid>" }) // preview
deployment({ action: "rollback", uuid: "<app-uuid>", confirm: true, wait: true })โฑ๏ธ Watch โ bounded deploy monitoring
After application.deploy with wait: false, call deployment.watch โ do not loop deployment.get manually.
Behavior | Detail |
Default timeout | 300 seconds |
Poll interval | Starts at 3s, caps at 30s with equal-jitter backoff |
Timeout recovery | Re-call |
Failed / cancelled | Tool returns a clear error โ do not treat as success |
Legacy |
|
application({ action: "deploy", uuid: "<app-uuid>", wait: false })
deployment({ action: "watch", deployment_uuid: "<deployment_uuid>", timeout: 300 })The shipped IDE skill packs use this same bounded watch flow and document timeout recovery.
๐งฉ service / database โ sidecar lifecycle
Tool | Actions |
|
|
|
|
๐ณ recipe โ multi-resource orchestration
One MCP call to stand up common workload patterns โ application + database wiring, git apps, or validated one-click services.
Action | Purpose |
| Create a git-backed application with local |
| Create a database + application and wire |
| Create a one-click service after validating |
| Advisory stack suggestion from the live service-templates catalog โ never creates resources |
Safety: Recipe creates are intentional โ no confirm gate. No dry-run / preview. Partial failure does not auto-rollback; created UUIDs are returned in error.data. Connection strings are masked unless reveal: true. recommend is read-only / advisory.
recipe({ action: "create-git-app", server_uuid, git_repository, git_branch, repo_path: "/path/to/repo" })
recipe({ action: "create-app-db", server_uuid, app_name, db_name, db_engine: "postgresql" })
recipe({ action: "create-one-click", server_uuid, type: "gitea" })
recipe({ action: "recommend", stack: "Next.js + Postgres" })Also use service.list-types to discover valid one-click type IDs before create-one-click.
๐ฑ Resource environment variables (envs:*)
Manage Coolify runtime configuration on applications, services, and databases through envs:* actions on the existing domain tools โ no separate env MCP tool.
Tool |
| Notes |
|
| Only tool with local |
|
| No sync โ use |
|
|
|
Confirm gates: envs:delete and envs:bulk-update always require confirm: true on all three tools. On application only, envs:sync requires confirm: true when applying (dry_run: false, the default) or when prune: true. envs:promote requires confirm: true when applying (dry_run: false).
Reveal policy: Env values render as *** by default. Pass reveal: true only after the human explicitly asks for plaintext โ the agent must not auto-set reveal: true.
envs:sync semantics (application only): Supply exactly one of env_file (local path) or env_content (inline .env text). dry_run: true returns a diff (added, updated, unchanged, removed, optional conflicts) with no API writes; default dry_run: false applies changes. Remote keys missing locally are never deleted unless prune: true (also requires confirm: true). When local and remote values differ, set conflict_policy to overwrite, keep_remote, or abort after asking the human โ apply with conflicts and no policy returns COOLIFY_CONFIRM_REQUIRED.
envs:promote semantics (application only, same instance): Product docs may say env.promote; the implemented action is application.envs:promote. Compare env vars between source_uuid and target_uuid (two applications in one Coolify instance โ no cross-instance fan-out). Default dry_run: true returns preview buckets (only_in_source, only_in_target, value_mismatches) plus structured promotion_suggestions with follow-up tool/action hints; values are masked unless reveal: true. Applying copies into the target requires confirm: true. Default conflict_policy is keep_remote โ mismatched target keys are skipped unless the human opts into overwrite or abort.
application({ action: "envs:list", uuid: "<app-uuid>" })
application({ action: "envs:sync", uuid: "<app-uuid>", env_file: "./.env", dry_run: true })
application({ action: "envs:sync", uuid: "<app-uuid>", env_content: "API_KEY=EXAMPLE_VALUE\n", confirm: true, conflict_policy: "overwrite" })
application({ action: "envs:promote", source_uuid: "<source-app-uuid>", target_uuid: "<target-app-uuid>", dry_run: true })
application({ action: "envs:promote", source_uuid: "<source-app-uuid>", target_uuid: "<target-app-uuid>", dry_run: false, confirm: true, conflict_policy: "keep_remote" })๐พ Database backups (backup:*)
Configure, list, update, delete, and trigger backup schedules โ and inspect execution history โ on the existing database tool. No separate backup MCP tool.
Action | Purpose |
| Create a backup schedule (frequency required; optional S3, retention, |
| List backup schedules for a database |
| Update schedule fields (frequency, retention, S3 flags) |
| Remove a schedule โ requires |
| Trigger an immediate backup run |
| List executions for a schedule (status, timestamps, size) |
Parent identity: All backup actions require the parent database via uuid or name. Schedule-scoped actions (backup:update, backup:delete, backup:now, backup:history) also require scheduled_backup_uuid.
Confirm gates: backup:delete requires confirm: true โ otherwise COOLIFY_CONFIRM_REQUIRED. delete_s3 defaults false (config-only delete). When delete_s3: true, deletion still requires confirm: true โ purging S3 artifacts is treated as destructive.
Frequency (Pitfall 1): backup:create accepts OpenAPI named presets (every_minute, hourly, daily, weekly, monthly, yearly) or a cron expression. backup:update accepts presets only โ passing cron on update returns COOLIFY_VALIDATION_ERROR.
backup:now semantics: Maps to Coolify PATCH with { backup_now: true } on the schedule โ no separate trigger endpoint. Requires scheduled_backup_uuid.
Reveal policy: S3-related credentials in backup config responses are masked as *** by default. Pass reveal: true only after the human explicitly asks for plaintext โ the agent must not auto-set reveal: true.
Out of scope (v2.x+): Backup execution delete, restore/import from backup, and S3 storage destination CRUD are not available in this release.
database({ action: "backup:list", uuid: "<db-uuid>" })
database({ action: "backup:create", uuid: "<db-uuid>", frequency: "daily", save_s3: false })
database({ action: "backup:now", uuid: "<db-uuid>", scheduled_backup_uuid: "<schedule-uuid>" })
database({ action: "backup:delete", uuid: "<db-uuid>", scheduled_backup_uuid: "<schedule-uuid>", confirm: true })๐ private_key โ SSH key CRUD
Manage Coolify private keys with PEM content masked by default.
Action | Purpose |
| List or fetch a key (PEM masked unless |
| Add or rotate SSH keys |
| Remove a key, or preview dependents before delete |
๐ง server โ server CRUD & validation
Action | Purpose |
| Server details, domains, and reachability |
| Register or reconfigure a server |
| Trigger Coolify's server validation check |
| Remove a server, or preview dependents first |
๐ project โ project CRUD
Action | Purpose |
| Discover or inspect projects |
| Stand up or rename projects |
| Delete a project, or preview blast radius first |
๐ environment โ environment CRUD
Action | Purpose |
| List or inspect environments inside a project |
| Add a new environment to a project |
| Remove an environment, or preview dependents first |
๐ docs โ offline guides
Action | Purpose |
| Search a bundled, curated Coolify troubleshooting index โ not a live web fetch, so it works offline and can't be used as an external fetch vector |
๐จ emergency โ high-impact ops (gated)
Reach for these only when you mean it โ every action below is behind a confirmation gate.
Action | Purpose |
| Stop every running application, fleet-wide โ requires |
| Redeploy every app in a project โ requires |
| Restart every app in a project โ requires |
๐๏ธ instance โ multi-instance registry
Manage named Coolify instances in ~/.coolify-mcp/instances.json. Per-call credential resolution โ no cross-instance leakage.
Action | Purpose |
| List registered instances (tokens masked) |
| Fetch one instance by name |
| Register a new instance ( |
| Rotate URL or token for an existing instance |
| Remove an instance โ requires |
| Set the default instance for ops without an explicit |
| Opt-in: copy |
| Local Cloud discovery โ |
instance({ action: "add", name: "prod", url: "https://coolify.example.com", token: "<token>" })
instance({ action: "list" })
instance({ action: "cloud-info" })๐ manifest โ local cache
Read/write/sync .coolify/manifest.json โ a workspace cache, not source of truth. Remote wins on UUID conflict.
Action | Purpose |
| Read the local manifest file |
| Merge projects/servers/resources into the cache |
| Replace a manifest section |
| Remove a cached resource entry |
| Wipe the manifest โ requires |
| Reconcile cache against live Coolify API (optional |
| Non-destructive diff report โ always safe to run |
| Read-only / advisory drift audit: severity-tagged |
manifest({ action: "sync", dry_run: true })
manifest({ action: "diff" })
manifest({ action: "audit" })manifest.audit compares local .coolify/manifest.json vs live Coolify inventory for the scoped instance. Findings name follow-up actions such as manifest.sync or manifest.upsert โ hints are advisory only; nothing auto-heals. Keep using manifest.diff for the raw structural reconciliation report.
Best-effort auto-hooks update the manifest after app/service/DB mutations. Stale UUID 404s elsewhere surface _meta.manifestWarning โ run manifest({ action: "sync" }) to reconcile.
๐งญ setup โ guided project wiring
Action | Purpose |
| Check GitHub CLI and workspace prerequisites without changing the project |
| Link an existing workload or provision a greenfield project, with optional domains, env sync, recipe, manifest, and deploy watch steps |
| Continue a paused setup after authentication or another recoverable prerequisite |
wire never auto-pushes. The setup flow pauses cleanly when gh authentication is missing and resumes from completed steps.
๐จ Branding (serverInfo.icons)
The MCP server advertises icons in initialize via an embedded PNG data URI (primary) and jsDelivr CDN URLs for mcp-icon-192.png and favicon-32.png. Cursor may still show a letter fallback โ see maintainer verify record. Not a Coolify API call.
๐ก๏ธ Safety model
Confirmation gate
Destructive emergency actions follow a strict two-step pattern:
Call with
confirmomitted orfalseโ you get back awould_affectpreview and error codeCOOLIFY_CONFIRM_REQUIREDโ nothing is mutated.Call again with
confirm: trueโ the action actually executes.
Regular app/service/database mutations (start, stop, deploy, โฆ) are not behind this gate โ they simply follow Coolify's own API semantics, since they're scoped to one resource rather than your whole fleet.
Environment variables: envs:delete and envs:bulk-update require confirm: true on application, service, and database. envs:sync apply (dry_run: false) and envs:sync with prune: true require confirm: true on application only. dry_run: true sync previews never mutate. envs:promote apply (dry_run: false) requires confirm: true on application; default conflict_policy is keep_remote.
Drift & heal (read-only audit, preview-first promote): manifest.audit is advisory-only โ it never writes manifest or live state. application.envs:promote (product name env.promote) previews by default; values stay masked unless reveal: true. Both stay within one Coolify instance per call.
Deploy guard (advisory preflight, confirm-gated rollback): deployment.preflight is read-only and returns a risk_score with four named factors โ no external DNS/HTTP probes. deployment.rollback requires confirm: true before mutating; git rollbacks PATCH the target commit then POST /deploy (MCP composite, not a Coolify rollback API).
Secret masking
Keys matching
password,token,secret,private, orenvrender as***by default in tool output.Pass
reveal: trueonly when you explicitly need plaintext โ for example, to copy an env var into another system. Ask the human first before settingreveal: trueon anyenvs:*call.Log line bodies are not masked. Treat raw logs like you would any other sensitive output: don't paste them into long-lived agent memory or public tickets.
Registry files (~/.coolify-mcp/instances.json) are written with 0o700 directory and 0o600 file permissions. Tokens are never echoed in tool output unless you explicitly pass reveal: true.
โ ๏ธ Structured errors & retries
Every API failure comes back as a parseable envelope your agent can reason about, instead of a raw stack trace:
{
"code": "COOLIFY_401",
"message": "Unauthorized โ invalid or expired API token",
"recoveryHints": [
"Verify the token in Coolify UI โ Keys & Tokens",
"Ensure the token has the required team permissions"
],
"httpStatus": 401
}Code | Meaning |
| Invalid or missing token |
| Resource not found |
| Validation error |
| Coolify server error |
| Connection failed |
| Request timed out |
| Emergency preview โ pass |
| Name matched multiple resources โ pick a UUID from the ranked list |
| Cloud token or team permission issue (HTTP 403) |
| Endpoint not available on Coolify Cloud (HTTP 404) |
Transient failures (HTTP 429, 5xx, or network errors) retry automatically up to 3 times with exponential backoff (1s โ 2s โ 4s) before giving up and returning the error to your agent.
๐ฌ Example agent workflows
"Is my Coolify reachable, and what do I have?"
system({ action: "verify" })
system({ action: "infrastructure_overview" })
resource({ action: "list" })"Find the nginx app, deploy it, then show me the logs."
resource({ action: "find", query: "nginx" })
application({ action: "deploy", uuid: "<uuid>", wait: false })
deployment({ action: "watch", deployment_uuid: "<deployment_uuid>", timeout: 300 })
application({ action: "logs", uuid: "<uuid>" })"Something feels wrong across the fleet."
diagnose({ action: "scan" })
diagnose({ action: "app", uuid: "<suspect>" })
diagnose({ action: "server", uuid: "<server>" })"Emergency: stop everything, but let me see the blast radius first."
emergency({ action: "stop_all" }) // preview โ would_affect, no mutation
emergency({ action: "stop_all", confirm: true }) // execute"Multi-instance: list registered instances and verify each."
instance({ action: "list" })
system({ action: "verify" })โ Status today
Package 1.1.4 ships 19 tools and six MCP prompts for Coolify API 4.1.x:
Capability | Status |
Verify connectivity + infrastructure overview | โ Shipped |
Discovery: | โ Shipped |
Diagnose: app, server, fleet-wide scan + follow-up hints | โ Shipped |
Log Brain ( | โ Shipped |
Deploy lifecycle: start/stop/restart, deploy with wait-mode + force rebuild | โ Shipped |
Deployment tracking: list / get / cancel | โ Shipped |
Deployment watch and bounded build logs | โ Shipped |
Application runtime logs, bounded follow, and | โ Shipped |
Instance intelligence ( | โ Shipped |
Drift & heal ( | โ Shipped |
Deploy guard ( | โ Shipped |
Application, service, and database CRUD | โ Shipped |
Dynamic one-click type discovery, recipes, and | โ Shipped |
Setup wizard and four IDE workflow skills | โ Shipped |
Emergency ops: stop-all, project redeploy/restart, behind confirm gate | โ Shipped |
SSH key CRUD ( | โ Shipped |
Server CRUD + validation ( | โ Shipped |
Project & environment CRUD ( | โ Shipped |
Secret masking with explicit | โ Shipped |
Structured errors, recovery hints, automatic retries | โ Shipped |
npm distribution + install configurator for 15+ clients | โ Shipped |
Multi-instance registry ( | โ Shipped |
Coolify Cloud path ( | โ Shipped |
Local manifest sync ( | โ Shipped |
Live UAT harness ( | โ Shipped |
Capability discovery via | โ Shipped |
Deployment build logs via | โ Shipped |
Capability discovery & build logs:
system({ action: "version" })returnscoolifyVersion(replacing the legacyversionfield),mcpVersion, and acapabilitiesmap of Coolify 4.1.2 feature flags. For app triage + bounded runtime tail in one call, usediagnose({ action: "logs", mode: "full", uuid: "..." })โ checkcapabilities.diagnose_logs. For Log Brain pattern triage, usediagnose({ action: "analyze", uuid: "..." })โ checkcapabilities.diagnose_analyze. For advisory stack picks from the live catalog, userecipe({ action: "recommend", stack: "..." })โ checkcapabilities.recipe_recommend. For instance health, dependency graph, impact, and janitor/cleanup, useintelligence({ action: "scorecard" | "graph" | "impact" | "janitor" | "cleanup", ... })โ checkcapabilities.intelligence_scorecard(and siblingintelligence_*keys);cleanuprequiresconfirm: true. For manifest drift audit and cross-app env promote, usemanifest({ action: "audit" })andapplication({ action: "envs:promote", source_uuid, target_uuid, ... })โ checkcapabilities.manifest_auditandcapabilities.envs_promote(MCP composites over existing reads/env CRUD, not Coolify-native REST endpoints). For deployment build logs, preferdeployment({ action: "logs", deployment_uuid: "..." })(orapplication_uuidto resolve the newest deployment). Theapplication.logspath withdeployment_uuidstill works for back-compat. For runtime log follow, useapplication({ action: "logs", uuid: "...", follow: true })โ bounded MCP polling until idle or timeout; checkcapabilities.application_logs_followviasystem.version.
Coolify 4.1.x does not expose stable service or database log endpoints. This server therefore does not claim or register service/database log actions. Use application runtime logs and deployment build logs until compatible upstream APIs are available.
๐ฎ Coming soon
Future work stays bounded by verifiable upstream and repository constraints:
Add service/database logs when compatible Coolify APIs are stable and available.
Close tracked REST mappings in
docs/COVERAGE.mdwhere they add useful agent workflows.Revisit cross-instance fan-out only with explicit rate-limit and credential-isolation guarantees.
No release date or compatibility promise is attached to these boundaries. Use GitHub Issues for concrete requests.
๐ ๏ธ Local development
git clone https://github.com/clezcoding/awesome-coolify.git
cd awesome-coolify
pnpm install
pnpm run build # tsup โ dist/
pnpm test # vitest
pnpm run dev # watch modeLogs go to stderr only โ stdout is reserved exclusively for the MCP protocol.
The maintainer publish flow (build โ pack --dry-run โ publish) is documented in CONTRIBUTING.md.
Maintainers can run live UAT against a real Coolify instance withnpm run uat:live. See CONTRIBUTING.md โ Live UAT Harness for prerequisites and report output โ do not duplicate the runbook here.
๐ Links
Resource | URL |
Install configurator | |
Install landing page | |
Example MCP JSON | |
Brand assets | |
Coolify | |
MCP specification | |
Issues & feature requests | |
Contributing | |
Changelog | |
Security policy | |
License |
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityBmaintenanceMCP server for managing a self-hosted Coolify instance. Provides full REST CRUD, deploy/watch capabilities, and an optional host-ops tier for live log streaming, SSH, Docker, and database access.Last updated29MIT
- Alicense-qualityCmaintenanceMCP server for managing Coolify instances, enabling control of applications, databases, services, servers, and more via natural language.Last updated5MIT
- Alicense-qualityCmaintenanceEnables managing multiple self-hosted Coolify instances via MCP, with tools for deploying, monitoring, and emergency operations.Last updatedMIT
- Alicense-qualityFmaintenanceMCP server for Coolify API that enables full deployment workflows from zero to production, including project, server, and application management.Last updated253MIT
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for interacting with the Supabase platform
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/clezcoding/awesome-coolify'
If you have feedback or need assistance with the MCP directory API, please join our Discord server