README.de.md

August 8, 2026 · View on GitHub

awesome-coolify-mcp — ein freundliches Maskottchen neben einem leuchtenden Dashboard mit Server-Fleet, Terminal, Deploy-Pfeil und Safety-Shield

awesome-coolify-mcp

Coolify direkt aus deinem Coding-Agenten betreiben.
Connectivity prüfen, Infrastruktur entdecken, Workloads erstellen, deployen, Logs verfolgen, Incidents diagnostizieren und gegatete Emergency-Ops ausführen — über eine oder viele self-hosted oder Cloud-Instanzen —
direkt aus Cursor, Claude, VS Code, Windsurf oder jedem MCP-fähigen Agenten.

🇬🇧 English · Coolify · Model Context Protocol · Install-Konfigurator ↗

npm Version npm Downloads Node.js >= 24 TypeScript Coolify API 4.1.x 19 tools CI-Status Aktuelles GitHub-Release MIT Lizenz

Überblick · Warum · Features · Architektur · Schnellstart · Installation · Cloud · Tools · Prompts · Sicherheit · Roadmap

awesome-coolify-mcp zu Cursor hinzufügen    awesome-coolify-mcp in VS Code installieren

One-Click-Installs mit Platzhalter-Credentials — Details unter Installation, oder den Browser-Konfigurator nutzen, um echte Werte sicher einzutragen.


📋 Inhaltsverzeichnis


🔭 Überblick

Self-hosted Coolify ist eine der besten Open-Source-Alternativen zu Heroku- oder Vercel-artigen PaaS-Plattformen — aber die Anbindung an einen AI-Coding-Agenten bedeutete bisher oft, mehrere kleine, überlappende Community-MCP-Integrationen zusammenzustecken, jede mit eigenem Schema, eigenem Fehlerformat und eigener Vorstellung davon, was „sicher" bedeutet.

awesome-coolify-mcp 1.1.4 ersetzt diesen Flickenteppich durch einen einzigen, community-gepflegten MCP-Server, der mit Coolifys REST API 4.1.x über eine klare, aktionsbasierte Tool-Oberfläche spricht. Quellcode, Docs und npm-Distribution leben in einem öffentlichen Repo — clezcoding/awesome-coolify — während das installierbare Paket awesome-coolify-mcp heißt. Statt Dutzende fast identischer Tool-Namen zu merken, ruft dein Agent eines von 19 tools mit einem action-Feld auf:

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 })

Unter der Haube läuft jeder Call durch dieselbe Pipeline: Zod-validierte Eingaben, ein Retry-fähiger HTTP-Client, secret-bewusste Output-Maskierung und strukturierte Fehler-Envelopes mit Recovery-Hints — dein Agent scheitert also nachvollziehbar, statt zu raten.

Note

Dies ist ein Community-Projekt für Leute, die ihre eigene Coolify-Instanz betreiben. Nicht offiziell mit Coolify Labs verbunden oder von ihnen unterstützt.


🆚 Warum awesome-coolify-mcp

Typisches Setup ohne awesome-coolify-mcpMit awesome-coolify-mcp
Mehrere überlappende Community-MCP-Tools, jedes mit eigenem SchemaEin Server, ein konsistentes Schema
Dutzende granulare Einzeltools pro Ressource19 tools mit konsistenten action-Discriminators
Ad-hoc Fehlermeldungen, die der Agent selbst deuten mussStrukturierte Codes (COOLIFY_401, COOLIFY_404, …) + maschinenlesbare Recovery-Hints
Secrets können direkt im Agent-Kontext landenDefault-Maskierung + Confirm-Gates auf destruktiven Actions
Rohes JSON durchwühlen, um zu sehen, was sich geändert hatBegrenzte, paginierte Projektionen, abgestimmt auf LLM-Context-Fenster

Die ausgelieferte Oberfläche deckt Day-2-Operations und Infrastruktur-Erstellung ab: Connectivity prüfen, Fleets entdecken, Deployments starten und beobachten, begrenzte Logs lesen, Incidents diagnostizieren, gegatete Emergency-Ops ausführen sowie Applications, Services, Databases, SSH-Keys, Server, Projekte, Environments, Backups und Umgebungsvariablen verwalten.


✨ Features

Feature-Highlights: aktionsbasierte Tools, Safety Gates, Diagnose, Deploy und Logs

  • 19 aktionsbasierte Tools — z. B. application({ action: "deploy", uuid }) statt Dutzende granulare Tool-Namen zu durchsuchen. Registriert sind system, meta, resource, diagnose, application, emergency, deployment, service, database, private_key, instance, manifest, server, project, environment, docs, recipe, setup und intelligence.
  • Multi-Instance-Registry & Routing — jede Coolify-Instanz in ~/.coolify-mcp/instances.json via instance-Tool registrieren; Credential-Auflösung pro Call ohne Cross-Instance-Leaks.
  • Coolify-Cloud-fähiginstance({ action: "cloud-info" }) für lokale Discovery, team-scoped Tokens und strukturierte Cloud-Fehlercodes (COOLIFY_CLOUD_FORBIDDEN, COOLIFY_CLOUD_UNSUPPORTED).
  • Lokaler Manifest-Cache.coolify/manifest.json-Sync via manifest({ action: "sync" }), Best-Effort-Auto-Hooks bei App/Service/DB-Mutationen und _meta.manifestWarning bei veraltetem Cache.
  • Server-Branding — MCP-Listen-Icon via serverInfo.icons (eingebettete Data-URI + jsDelivr-CDN-Einträge aus docs/assets/).
  • Ops-Workflows, die echte Incidents abbilden — ein system.infrastructure_overview-Call für den Gesamtüberblick, Fuzzy-resource.find, wenn du nur noch einen Namen oder eine Domain im Kopf hast, diagnose.app / diagnose.server für einen konkreten Verdächtigen und diagnose.scan, wenn du nur weißt, dass irgendetwas fleet-weit nicht stimmt.
  • Deploy-Lifecycle, den Agenten steuern können — Start/Stop/Restart, Force-Rebuild, deployment.watch mit begrenztem Backoff, deployment.logs für Builds, begrenzte application.logs und Runtime-Follow mit Idle-/Gesamt-Timeout.
  • Volle Workload-CRUD — Applications, Services und Databases erstellen, lesen, aktualisieren, löschen und betreiben; gültige One-Click-IDs live mit service.list-types ermitteln.
  • Recipes und geführtes Setup — Git-Apps, App-plus-Datenbank-Stacks und One-Click-Services erstellen; setup.preflight, setup.wire oder setup.resume ausführen; vier passende IDE-Workflow-Skills installieren.
  • Safety by default, nicht per Konvention — Emergency-Mutationen brauchen explizit confirm: true; sensible Keys (password, token, secret, private, env) erscheinen als ***, außer du aktivierst reveal: true.
  • Agent-freundliche Fehlerfälle — jeder Fehler ist ein parsebares Envelope mit code, menschenlesbarer message und recoveryHints; transiente Netzwerk-/429-/5xx-Fehler werden automatisch mit exponentiellem Backoff wiederholt.
  • Breite Client-Abdeckung von Anfang an — Cursor, VS Code / GitHub Copilot, Claude Desktop, Claude Code, Windsurf und 15+ weitere über den Install-Konfigurator.

🏗️ Architektur

Architektur: MCP-Clients sprechen mit den Domänen-Tools von awesome-coolify-mcp, die mit der Coolify REST API 4.1.x sprechen

MCP-Client (Cursor / Claude / VS Code / …)
        │  stdio MCP

awesome-coolify-mcp  (19 tools + action-Discriminator)
        │  optional ~/.coolify-mcp/instances.json-Auflösung
        │  HTTPS + Bearer-Token

Coolify REST API 4.1.x  (Server · Projekte · Applications · Services · Datenbanken)

Der Server selbst ist bewusst unspektakulär: Er hält keinen langlebigen State und rührt nie an deinen IDE-Config-Dateien. Dein MCP-Host (Cursor, Claude, VS Code, …) injiziert COOLIFY_URL und COOLIFY_TOKEN über den env-Block seiner MCP-Config — oder du registrierst benannte Instanzen in ~/.coolify-mcp/instances.json via instance-Tool. Der Prozess liest Credentials aus der Umgebung (oder der Registry) und leitet authentifizierte Requests per HTTPS an deine Coolify-Instanz weiter.


🚀 Schnellstart

Voraussetzungen

  • Node.js 24+ (Active LTS; CI nutzt Node 24)
  • Eine self-hosted Coolify-Instanz auf 4.1.x
  • Ein API-Token aus Coolify → Keys & Tokens (Authorization-Docs)

Direkt per npx starten — keine globale Installation nötig:

npx -y awesome-coolify-mcp

Die beiden benötigten Umgebungsvariablen in deinem MCP-Host setzen (siehe Installation für jeden Client). Nach dem Verbinden sieht ein minimaler Smoke-Test so aus:

meta({ action: "version" })                       // Server-Identität — kein Coolify-Call
system({ action: "verify" })                      // Authentifizieren + Connectivity-Check
system({ action: "infrastructure_overview" })     // Server, Projekte, Apps, Services, DBs auf einen Blick

Note

Multi-Instance-Nutzer: jede Coolify-Instanz zuerst mit instance({ action: "add", name, url, token }) registrieren, dann system({ action: "verify" }) aufrufen. Single-Instance-Setups können die Registry überspringen und COOLIFY_URL / COOLIFY_TOKEN in der MCP-Env nutzen.

Important

Emergency-Actions (stop_all, redeploy_project, restart_project) erfordern confirm: true. Ruf sie zuerst ohne confirm auf — du bekommst eine would_affect-Vorschau, es findet keine Mutation statt. reveal: true nur setzen, wenn du wirklich Klartext-Secrets brauchst.


📦 Installation

Es gibt drei gleichwertig unterstützte Wege — wähle, was zu deinem Workflow passt.

Am besten, wenn du deine Coolify-URL und dein Token schon zur Hand hast. Platzhalter-Credentials funktionieren auch — du wirst zum Ausfüllen aufgefordert oder kannst sie später tauschen.

awesome-coolify-mcp zu Cursor hinzufügen    awesome-coolify-mcp in VS Code installieren

Wie diese Links funktionieren (zum Aufklappen)

Beide Editoren implementieren einen Protocol-Handler, der eine JSON-Server-Konfiguration direkt aus der URL liest:

ClientSchemaEncoding
Cursorcursor://anysphere.cursor-deeplink/mcp/install?name=…&config=… (gespiegelt unter https://cursor.com/en/install-mcp?… als freundlichere Landingpage)config ist base64-kodiertes JSON
VS Code / Copilotvscode:mcp/install?name=…&config=…config ist URL-kodiertes JSON

Ein Klick auf den Button öffnet deinen Editor, zeigt den Server, der hinzugefügt werden soll, und lässt dich Command/Env vor der Bestätigung prüfen oder bearbeiten — nichts wird stillschweigend installiert.

2. Install-Konfigurator (GitHub Pages)

Mit dem Browser-Konfigurator deine echte COOLIFY_URL / COOLIFY_TOKEN eintragen und ein fertiges Snippet für deinen exakten Client erzeugen — JSON, TOML oder YAML, je nachdem, was der Client erwartet.

Alles läuft client-seitig im Browser. Dein Token wird nie an ein Backend gesendet, geloggt oder irgendwo gespeichert außer in der Config-Datei, in die du es einfügst.

3. Manuelle MCP-Config

In die MCP-Konfigurationsdatei deines Hosts einfügen. Cursor-Beispiel (~/.cursor/mcp.json global oder .cursor/mcp.json im Projekt):

{
  "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"
      }
    }
  }
}

Eine fertige Copy-Paste-Vorlage liegt außerdem unter docs/mcp.example.json.

Tip

Coolify Cloud nutzen? Team-scoped Token erzeugen und Registry-Setup in docs/de/cloud.md folgen.

IDE-Skills (Cursor, Claude Code, Codex)

Coolify-Workflow-Skills für Cursor, Claude Code und Codex installieren:

npx skills add clezcoding/awesome-coolify -a cursor -a claude-code -a codex

Nach MCP-Install setup({ action: "preflight" }) ausführen oder den Setup-Guide für gh-Preflight, Projekt-Verknüpfung und Greenfield-Provisioning lesen.


🖥️ Unterstützte Clients

ClientConfig-PfadHinweis
Cursor~/.cursor/mcp.jsonOne-Click-Deeplink oder manuelles JSON
VS Code / GitHub Copilot.vscode/mcp.jsonNative inputs-Prompts für URL/Token — kein Klartext in der Datei
Claude Desktopclaude_desktop_config.jsonAktuell manuelles JSON oder Konfigurator-Output
Claude Code~/.claude.json oder .mcp.jsonstdio via npx -y awesome-coolify-mcp
Windsurf~/.codeium/windsurf/mcp_config.jsonGleiches npx + env-Pattern wie Cursor

Der Install-Konfigurator deckt eine deutlich breitere Matrix ab — OpenCode, Codex CLI, Gemini CLI, Cline, Kilo Code, Goose, LM Studio, Hermes Agent, Kimi Code, Google Antigravity, OpenClaw und mehr — jeweils mit der passenden Config-Form.

Note

Claude Desktop nutzt derzeit manuelles JSON oder den Konfigurator-Output.


🔐 Umgebungsvariablen

VariablePflichtStandardBeschreibung
COOLIFY_URLja*Coolify-Basis-URL, ohne trailing slash — z. B. https://coolify.example.com
COOLIFY_TOKENja*Bearer-API-Token, team-scoped
COOLIFY_VERIFY_SSLneintrueNur auf false setzen bei Self-Signed-Zerts auf lokalen/Dev-Instanzen
COOLIFY_MCP_LOGneininfoLog-Level: debug · info · error

Credentials werden aus der Prozess-Umgebung gelesen (dem env-Block deiner IDE-MCP-Config) oder optional aus einer lokalen .env, wenn du die CLI direkt startest. Sie erscheinen nie in Tool-Responses.

Note

Mit der Multi-Instance-Registry (~/.coolify-mcp/instances.json) werden COOLIFY_URL und COOLIFY_TOKEN optional — das instance-Tool löst Credentials pro Call auf. Env-Vars bleiben der einfachste Weg für Single-Instance-Setups.


☁️ Coolify Cloud

awesome-coolify-mcp funktioniert mit Coolify Cloud mit denselben 19 tools — team-scoped Tokens, strukturierte Cloud-Fehlercodes (COOLIFY_CLOUD_FORBIDDEN, COOLIFY_CLOUD_UNSUPPORTED) und lokale instance-Action cloud-info zur Discovery.

Rufe instance({ action: "cloud-info" }) vor deiner ersten Cloud-Session auf — liefert isCloud, aufgelöste url, Credential-source (registry | env | infer), knownLimits und Docs-Link. Kein Live-API-Call.

Vollständiges Setup, Smoke-Test und bekannte Limits → docs/de/cloud.md


💬 MCP-Prompts

Sechs parametrisierte Workflow-Prompts liefern nummerierte Schritt-für-Schritt-Anleitungen (englische Texte), die bestehende Tools orchestrieren. Die meisten Argumente sind optional — jeder Prompt öffnet ohne Prefill.

PromptArgs (alle optional außer wo vermerkt)Zweck
deployinstance?, uuid?, force?Application deployen und bis Terminal-Status überwachen
diagnoseinstance?, uuid?App-, Server- oder Fleet-weite Probleme untersuchen (inkl. diagnose.analyze)
new-projectinstance?, name?, server_uuid?Projekt, Environment und optional Server-Verknüpfung anlegen
incidentinstance?, uuid?, project_uuid?Triage mit diagnose.analyze, logs, restart oder emergency redeploy
rollbackinstance?, uuid?, name?Vorschau, dann Confirm-gated deployment.rollback (STOP für Human-Approval)
maintenance-windowinstance?, uuid?, resource_typeGeführtes Change-Window über bestehende Confirm-gated Mutationen

Prompt-Handler lesen .coolify/manifest.json nie vom Disk — sie leiten den Agenten an, UUIDs aus dem Manifest zu lösen oder den User zu fragen. Playbooks setzen confirm: true nie automatisch.


🧰 Tools-Referenz

Jede Domäne ist ein MCP-Tool mit action-Discriminator — die Tool-Liste deines Agenten bleibt kurz, während die Funktionsbreite groß bleibt.

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

Dein erster Call in jeder Session: Ist Coolify erreichbar, und wie sieht die Fleet gerade aus?

ActionZweck
healthCoolify-API-Erreichbarkeit prüfen
versionCoolify-Instanzversion
verifyAuthentifizieren; liefert Connectivity + Version in einem Call
infrastructure_overviewAggregierte Counts über Server, Projekte, Applications, Services, Datenbanken

🏷️ meta — Server-Identität

ActionZweck
versionawesome-coolify-mcps eigener Paketname + Semver — kein Coolify-Call

🔎 resource — Discovery

Für den Fall, dass du ungefähr weißt, was du suchst, aber nicht die exakte UUID.

ActionZweck
listApplications, Services und Datenbanken als Summary-Projektionen, mit Pagination _meta
findFuzzy-Suche nach Name, Domain oder IP über Server und Ressourcen — gerankt, begrenzt auf 10

🩺 diagnose — Untersuchung

Das Tool, zu dem du greifst, wenn sich etwas falsch anfühlt, du aber noch nicht weißt, was.

ActionZweck
appApp-Status, Health, Anzahl Env-Vars und letzte Deployments
serverServer-Ressourcen, Domains und Erreichbarkeit
scanFleet-weite Issues nach Severity gruppiert — der „Was brennt gerade"-Button
logsApplication auflösen, Triage-Kontext liefern und optional begrenzte Runtime- oder Deployment-Logs einbeziehen
analyzeLog Brain — regelbasierte Pattern-Triage auf Runtime- (und optional Build-)Logs; nur advisory (crash_loop, OOM, …)

🚀 application — App-Ops

ActionZweck
getDetaillierte Application-Konfiguration
start / stop / restartContainer-Lifecycle-Kontrolle
deployDeploy auslösen, optional mit force-Rebuild; empfohlen: wait: false + deployment.watch, legacy: wait: true
logsBegrenzte Runtime-Logs oder begrenzter Follow-Modus mit Idle- und Gesamt-Timeout
envs:list / envs:getEnv-Vars auflisten oder abrufen (Werte als *** maskiert, außer mit reveal: true)
envs:create / envs:updateEinzelne Env-Vars anlegen oder aktualisieren (Flags: is_preview, is_literal, is_multiline, is_shown_once)
envs:deleteEine Env-Var löschen — erfordert confirm: true
envs:bulk-updateViele Env-Vars auf einmal patchen — erfordert confirm: true
envs:syncLokale .env-Datei oder Inline-Inhalt diffen/anwenden — nur Application; siehe Ressourcen-Env-Vars
envs:promoteEnv-Vars zwischen zwei Applications in derselben Coolify-Instanz vergleichen und promoten (Produktname: env.promote); standardmäßig Vorschau — siehe Ressourcen-Env-Vars

📈 deployment — Deploy-Tracking

ActionZweck
listDeployments einer bestimmten Application
getStatus, Commit und Timing-Details eines Deployments
watchBis Terminalstatus pollen mit begrenztem Timeout, Backoff und Jitter
cancelLaufendes Deployment sauber abbrechen
logsBegrenzte Build-Logs per Deployment-UUID oder vom neuesten Deployment einer Application
preflightNur beratend / read-only Deploy-Risiko: instance_health, env_completeness, recent_deployment_failures, dns_readinessrisk_score / risk_level; Env-Werte maskiert; keine Live-DNS-Probes
rollbackConfirm-gated Recovery auf vorheriges erfolgreiches finished Deployment, wenn das neueste Deployment bereits finished ist; COOLIFY_ROLLBACK_UNAVAILABLE, wenn nur ein erfolgreiches Deployment existiert — Git-Apps pinnen git_commit_sha via updateApplication, dann triggerDeploy; Vorschau ohne confirm: true

🛡️ Deploy Guard (preflight + rollback)

ActionSicherheit
preflightRead-only — keine Deploy/Mutate-APIs; advisory: true; blocking bei kritischem Risiko oder laufendem Deploy
rollbackZwei Schritte wie Emergency-Ops: ohne confirmCOOLIFY_CONFIRM_REQUIRED + rollback_target-Vorschau (vorheriges erfolgreiches finished, nicht die aktuelle Spitze wenn bereits finished); confirm: true → Composite Pin+Deploy (kein dediziertes Coolify-Rollback-REST)
deployment({ action: "preflight", uuid: "<app-uuid>" })
// Risiko ok → recommended_actions zu application.deploy
deployment({ action: "rollback", uuid: "<app-uuid>" }) // Vorschau
deployment({ action: "rollback", uuid: "<app-uuid>", confirm: true, wait: true })

⏱️ Beobachten — begrenztes Deploy-Monitoring

Nach application.deploy mit wait: false deployment.watch aufrufen — nicht manuell deployment.get loopen.

VerhaltenDetail
Standard-Timeout300 Sekunden
Poll-IntervallStart bei 3s, Cap bei 30s mit Equal-Jitter-Backoff
Timeout-Recoverydeployment.watch mit derselben deployment_uuid erneut aufrufen (timeout bei langsamen Builds erhöhen)
Failed / cancelledTool liefert klaren Fehler — nicht als Erfolg werten
Legacy / Kompatibilitätapplication.deploy wait:true funktioniert noch, ist aber nur Back-Compat; Watch bevorzugen
application({ action: "deploy", uuid: "<app-uuid>", wait: false })
deployment({ action: "watch", deployment_uuid: "<deployment_uuid>", timeout: 300 })

Die ausgelieferten IDE-Skill-Packs verwenden denselben begrenzten Watch-Flow und dokumentieren Timeout-Recovery.

🧩 service / database — Sidecar-Lifecycle

ToolActions
serviceget, list-types, create, update, delete, delete_preview, start, stop, restart, deploy, envs:list, envs:get, envs:create, envs:update, envs:delete, envs:bulk-update
databaseget, start, stop, restart, create (8 Engines), update, delete, delete_preview, envs:list, envs:get, envs:create, envs:update, envs:delete, envs:bulk-update, backup:create, backup:list, backup:update, backup:delete, backup:now, backup:history

🍳 recipe — Multi-Ressourcen-Orchestrierung

Ein MCP-Call für häufige Workload-Muster — App+DB-Verdrahtung, Git-Apps oder validierte One-Click-Services.

ActionZweck
create-git-appGit-Application mit lokaler build_pack-Erkennung (Dockerfile / Dockerfile.*-Glob)
create-app-dbDatenbank + Application erstellen und DATABASE_URL (oder env_key) verdrahten
create-one-clickOne-Click-Service nach Validierung von type gegen live service-templates
recommendAdvisory Stack-Vorschlag aus dem live service-templates-Katalog — erzeugt keine Ressourcen

Safety: Recipe-Creates sind intentional — kein Confirm-Gate. Kein Dry-Run / Preview. Teilfehler ohne Auto-Rollback; erzeugte UUIDs in error.data. Connection Strings maskiert, außer reveal: true. recommend ist 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" })

Nutze service.list-types, um gültige One-Click-Type-IDs vor create-one-click zu laden.

🌱 Ressourcen-Umgebungsvariablen (envs:*)

Coolify-Laufzeitkonfiguration auf Applications, Services und Datenbanken über envs:*-Actions auf den bestehenden Domain-Tools — kein separates Env-MCP-Tool.

Toolenvs:*-ActionsHinweise
applicationenvs:list, envs:get, envs:create, envs:update, envs:delete, envs:bulk-update, envs:sync, envs:promoteEinziges Tool mit lokalem .env-Sync und Cross-App-Env-Promote
serviceenvs:list, envs:get, envs:create, envs:update, envs:delete, envs:bulk-updateKein Sync — .env-Diff/Apply nur über application
databaseenvs:list, envs:get, envs:create, envs:update, envs:delete, envs:bulk-updateis_preview wird nicht unterstützt bei Database-Env-Vars (Coolify-OpenAPI-Lücke)

Confirm-Gates: envs:delete und envs:bulk-update erfordern immer confirm: true auf allen drei Tools. Nur auf application erfordert envs:sync confirm: true beim Anwenden (dry_run: false, Standard) oder bei prune: true. envs:promote erfordert confirm: true beim Anwenden (dry_run: false).

Reveal-Richtlinie: Env-Werte erscheinen standardmäßig als ***. reveal: true nur setzen, wenn der Mensch explizit Klartext will — der Agent darf reveal: true nicht automatisch setzen.

envs:sync-Semantik (nur Application): Genau eines von env_file (lokaler Pfad) oder env_content (Inline-.env-Text). dry_run: true liefert einen Diff (added, updated, unchanged, removed, optional conflicts) ohne API-Writes; Standard dry_run: false wendet Änderungen an. Remote-Keys, die lokal fehlen, werden nie gelöscht, außer mit prune: true (ebenfalls confirm: true nötig). Wenn lokale und Remote-Werte abweichen, nach Rücksprache mit dem Menschen conflict_policy auf overwrite, keep_remote oder abort setzen — Apply mit Konflikten ohne Policy liefert COOLIFY_CONFIRM_REQUIRED.

envs:promote-Semantik (nur Application, gleiche Instanz): In Produktdocs ggf. env.promote; implementierte Action ist application.envs:promote. Vergleicht Env-Vars zwischen source_uuid und target_uuid (zwei Applications in einer Coolify-Instanz — kein Cross-Instance-Fan-out). Standard dry_run: true liefert Vorschau-Buckets (only_in_source, only_in_target, value_mismatches) plus strukturierte promotion_suggestions mit Follow-up-Tool/Action-Hints; Werte maskiert, außer reveal: true. Anwenden kopiert in die Target-App und erfordert confirm: true. Standard-conflict_policy ist keep_remote — abweichende Target-Keys werden übersprungen, außer der Mensch wählt overwrite oder 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" })

💾 Datenbank-Backups (backup:*)

Backup-Schedules konfigurieren, auflisten, aktualisieren, löschen und sofort auslösen — plus Ausführungshistorie — über das bestehende database-Tool. Kein separates Backup-MCP-Tool.

ActionZweck
backup:createBackup-Schedule anlegen (frequency Pflicht; optional S3, Retention, backup_now: true)
backup:listBackup-Schedules einer Datenbank auflisten
backup:updateSchedule-Felder aktualisieren (frequency, Retention, S3-Flags)
backup:deleteSchedule entfernen — erfordert confirm: true
backup:nowSofort-Backup auslösen
backup:historyExecutions eines Schedules (Status, Timestamps, Größe)

Parent-Identität: Alle Backup-Actions brauchen die Parent-Datenbank via uuid oder name. Schedule-gebundene Actions (backup:update, backup:delete, backup:now, backup:history) brauchen zusätzlich scheduled_backup_uuid.

Confirm-Gates: backup:delete erfordert confirm: true — sonst COOLIFY_CONFIRM_REQUIRED. delete_s3 ist standardmäßig false (nur Config löschen). Bei delete_s3: true ist weiterhin confirm: true nötig — S3-Artefakte zu löschen gilt als destruktiv.

Frequency (Pitfall 1): backup:create akzeptiert OpenAPI-Presets (every_minute, hourly, daily, weekly, monthly, yearly) oder einen Cron-Ausdruck (cron). backup:update akzeptiert nur presets — cron bei Update liefert COOLIFY_VALIDATION_ERROR.

backup:now-Semantik: Entspricht Coolify-PATCH mit { backup_now: true } auf dem Schedule — kein separater Trigger-Endpoint. Erfordert scheduled_backup_uuid.

Reveal-Richtlinie: S3-bezogene Credentials in Backup-Config-Responses sind standardmäßig als *** maskiert. reveal: true nur setzen, wenn der Mensch explizit Klartext will — der Agent darf reveal: true nicht automatisch setzen.

Out of scope (v2.x+): Backup-Execution-Delete, Restore/Import aus Backup und S3-Storage-Destination-CRUD sind in diesem Release nicht verfügbar.

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

Coolify Private Keys verwalten — PEM-Inhalt standardmäßig maskiert.

ActionZweck
list / getKeys auflisten oder abrufen (PEM maskiert, außer mit reveal: true)
create / updateSSH-Keys anlegen oder rotieren
delete / delete_previewKey löschen oder Abhängigkeiten vorher anzeigen

🖧 server — Server-CRUD & Validierung

ActionZweck
getServer-Details, Domains und Erreichbarkeit
create / updateServer registrieren oder rekonfigurieren
validateCoolifys Server-Validierung auslösen
delete / delete_previewServer löschen oder Abhängigkeiten vorher anzeigen

📁 project — Projekt-CRUD

ActionZweck
list / getProjekte entdecken oder inspizieren
create / updateProjekte anlegen oder umbenennen
delete / delete_previewProjekt löschen oder Blast Radius vorher anzeigen

🌍 environment — Environment-CRUD

ActionZweck
list / getEnvironments in einem Projekt auflisten oder inspizieren
createNeues Environment in einem Projekt anlegen
delete / delete_previewEnvironment löschen oder Abhängigkeiten vorher anzeigen

📚 docs — Offline-Guides

ActionZweck
searchDurchsucht einen gebündelten, kuratierten Coolify-Troubleshooting-Index — kein Live-Web-Fetch, funktioniert also offline und kann nicht als externer Fetch-Vektor missbraucht werden

🚨 emergency — High-Impact-Ops (gated)

Nur greifen, wenn es ernst gemeint ist — jede Action unten liegt hinter einem Confirm-Gate.

ActionZweck
stop_allAlle laufenden Applications fleet-weit stoppen — erfordert confirm: true
redeploy_projectAlle Apps eines Projekts redeployen — erfordert confirm: true
restart_projectAlle Apps eines Projekts neu starten — erfordert confirm: true

🗂️ instance — Multi-Instance-Registry

Benannte Coolify-Instanzen in ~/.coolify-mcp/instances.json verwalten. Credential-Auflösung pro Call — keine Cross-Instance-Leaks.

ActionZweck
listRegistrierte Instanzen auflisten (Tokens maskiert)
getEine Instanz nach Name abrufen
addNeue Instanz registrieren (name, url, token, optional type: "cloud")
updateURL oder Token einer Instanz rotieren
deleteInstanz entfernen — erfordert confirm: true
set-defaultStandard-Instanz für Ops ohne expliziten instance-Parameter setzen
import-envOpt-in: COOLIFY_URL + COOLIFY_TOKEN aus Prozess-Env in die Registry kopieren
cloud-infoLokale Cloud-Discovery — isCloud, url, source, knownLimits, Docs-Link (kein API-Call)
instance({ action: "add", name: "prod", url: "https://coolify.example.com", token: "<token>" })
instance({ action: "list" })
instance({ action: "cloud-info" })

📜 manifest — lokaler Cache

.coolify/manifest.json lesen/schreiben/synchronisieren — Workspace-Cache, keine Source of Truth. Remote gewinnt bei UUID-Konflikten.

ActionZweck
getLokale Manifest-Datei lesen
upsertProjekte/Server/Ressourcen in den Cache mergen
setManifest-Abschnitt ersetzen
removeCache-Eintrag einer Ressource entfernen
clearManifest leeren — erfordert confirm: true
syncCache gegen live Coolify-API abgleichen (optional dry_run, prune mit confirm)
diffNicht-destruktiver Diff-Report — immer sicher
auditNur-Lesen / beratend Drift-Audit: findings[] mit Severity-Tags und strukturierten Remediation-Hints (welche Tool/Action als Nächstes); optional diff_support — mutiert weder Manifest noch Live-State
manifest({ action: "sync", dry_run: true })
manifest({ action: "diff" })
manifest({ action: "audit" })

Note

manifest.audit vergleicht lokales .coolify/manifest.json mit live Coolify-Inventar für die gewählte Instanz. Findings nennen Follow-up-Actions wie manifest.sync oder manifest.upsert — Hints sind nur beratend; nichts heilt automatisch. manifest.diff bleibt der rohe strukturelle Abgleich-Report. Best-Effort-Auto-Hooks aktualisieren das Manifest nach App/Service/DB-Mutationen. Veraltete UUID-404s anderswo liefern _meta.manifestWarningmanifest({ action: "sync" }) zum Abgleichen ausführen.

🧭 setup — geführte Projekt-Verdrahtung

ActionZweck
preflightGitHub CLI und Workspace-Voraussetzungen prüfen, ohne das Projekt zu ändern
wireBestehenden Workload verknüpfen oder Greenfield-Projekt provisionieren; optional mit Domains, Env-Sync, Recipe, Manifest und Deploy-Watch
resumePausiertes Setup nach Authentifizierung oder anderer behebbarer Voraussetzung fortsetzen

wire pusht nie automatisch. Fehlt gh-Authentifizierung, pausiert der Setup-Flow sauber und setzt bei den bereits abgeschlossenen Schritten fort.

🎨 Branding (serverInfo.icons)

Der MCP-Server bewirbt Icons in initialize via eingebetteter PNG-Data-URI (primär) und jsDelivr-CDN-URLs für mcp-icon-192.png und favicon-32.png. Cursor kann weiterhin einen Buchstaben-Fallback anzeigen — siehe Maintainer-Verifizierung. Kein Coolify-API-Call.


🛡️ Sicherheitsmodell

Confirm-Gate

Destruktive Emergency-Actions folgen einem strikten Zwei-Schritt-Muster:

  1. Aufruf ohne confirm oder mit false → du bekommst eine would_affect-Vorschau und Fehlercode COOLIFY_CONFIRM_REQUIRED zurück — nichts wird mutiert.
  2. Erneuter Aufruf mit confirm: true → die Action wird tatsächlich ausgeführt.

Normale App-/Service-/Database-Mutationen (Start, Stop, Deploy, …) liegen nicht hinter diesem Gate — sie folgen einfach der Coolify-API-Semantik, da sie auf eine einzelne Ressource statt auf deine ganze Fleet begrenzt sind.

Umgebungsvariablen: envs:delete und envs:bulk-update erfordern confirm: true auf Application, Service und Database. envs:sync-Apply (dry_run: false) und envs:sync mit prune: true erfordern confirm: true nur auf Application. dry_run: true-Sync-Vorschauen mutieren nie. envs:promote-Apply (dry_run: false) erfordert confirm: true auf Application; Standard-conflict_policy ist keep_remote.

Drift & Heal (nur-Lesen-Audit, Preview-first-Promote): manifest.audit ist nur beratend — schreibt weder Manifest noch Live-State. application.envs:promote (Produktname env.promote) standardmäßig Vorschau; Werte maskiert, außer reveal: true. Beides bleibt pro Aufruf in einer Coolify-Instanz.

Deploy Guard (beratendes Preflight, Confirm-gated Rollback): deployment.preflight ist read-only und liefert risk_score mit vier benannten Faktoren — keine externen DNS/HTTP-Probes. deployment.rollback erfordert confirm: true vor Mutation; Git-Rollbacks patchen den Ziel-Commit und POSTen /deploy (MCP-Composite, kein Coolify-Rollback-API).

Secret-Maskierung

  • Keys, die auf password, token, secret, private oder env matchen, erscheinen standardmäßig als *** im Tool-Output.
  • reveal: true nur setzen, wenn du explizit Klartext brauchst — etwa um eine Env-Var in ein anderes System zu kopieren. Vorher den Menschen fragen, bevor du reveal: true bei einem envs:*-Call setzt.
  • Log-Zeileninhalte werden nicht maskiert. Behandle rohe Logs wie jeden anderen sensiblen Output: nicht in langlebiges Agent-Memory oder öffentliche Tickets kopieren.

Warning

Registry-Dateien (~/.coolify-mcp/instances.json) werden mit 0o700-Verzeichnis- und 0o600-Dateirechten geschrieben. Tokens erscheinen nie in Tool-Output, außer du setzt explizit reveal: true.


⚠️ Strukturierte Fehler & Retries

Jeder API-Fehler kommt als parsebares Envelope zurück, mit dem dein Agent arbeiten kann, statt mit einem rohen Stacktrace:

{
  "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
}
CodeBedeutung
COOLIFY_401Ungültiger oder fehlender Token
COOLIFY_404Ressource nicht gefunden
COOLIFY_422Validierungsfehler
COOLIFY_500Coolify-Serverfehler
COOLIFY_NETWORKVerbindung fehlgeschlagen
COOLIFY_TIMEOUTRequest-Timeout
COOLIFY_CONFIRM_REQUIREDEmergency-Vorschau — confirm: true setzen, um fortzufahren
COOLIFY_AMBIGUOUS_MATCHName matcht mehrere Ressourcen — UUID aus der gerankten Liste wählen
COOLIFY_CLOUD_FORBIDDENCloud-Token- oder Team-Berechtigungsproblem (HTTP 403)
COOLIFY_CLOUD_UNSUPPORTEDEndpunkt auf Coolify Cloud nicht verfügbar (HTTP 404)

Transiente Fehler (HTTP 429, 5xx oder Netzwerkfehler) werden automatisch bis zu 3-mal mit exponentiellem Backoff (1s → 2s → 4s) wiederholt, bevor der Fehler an deinen Agenten zurückgegeben wird.


💬 Beispiel-Agent-Workflows

„Ist Coolify erreichbar, und was habe ich?"

system({ action: "verify" })
system({ action: "infrastructure_overview" })
resource({ action: "list" })

„Nginx-App finden, deployen, dann Logs zeigen."

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>" })

„Irgendwas stimmt fleet-weit nicht."

diagnose({ action: "scan" })
diagnose({ action: "app", uuid: "<suspect>" })
diagnose({ action: "server", uuid: "<server>" })

„Emergency: alles stoppen, aber erst den Blast-Radius zeigen."

emergency({ action: "stop_all" })                 // Vorschau — would_affect, keine Mutation
emergency({ action: "stop_all", confirm: true })  // Ausführen

„Multi-Instance: registrierte Instanzen auflisten und jeweils verifizieren."

instance({ action: "list" })
system({ action: "verify" })

✅ Status heute

Paket 1.1.4 liefert 19 tools und sechs MCP-Prompts für Coolify API 4.1.x:

FähigkeitStatus
Connectivity prüfen + Infrastructure-Overview✅ Shipped
Discovery: resource.list / resource.find✅ Shipped
Diagnose: App, Server, Fleet-weiter Scan + Follow-Up-Hints✅ Shipped
Log Brain (diagnose.analyze) + Playbooks (incident, rollback, maintenance-window)✅ Shipped
Deploy-Lifecycle: Start/Stop/Restart, Deploy mit Wait-Mode + Force-Rebuild✅ Shipped
Deployment-Tracking: List / Get / Cancel✅ Shipped
Deployment-Watch und begrenzte Build-Logs✅ Shipped
Application-Runtime-Logs, begrenzter Follow und diagnose.logs✅ Shipped
Instanz-Intelligence (intelligence.scorecard, graph, impact, janitor, cleanup)✅ Shipped
Drift & Heal (manifest.audit, application.envs:promote / env.promote)✅ Shipped
Deploy Guard (deployment.preflight, deployment.rollback)✅ Shipped
Application-, Service- und Database-CRUD✅ Shipped
Dynamische One-Click-Type-Discovery, Recipes und recipe.recommend✅ Shipped
Setup-Wizard und vier IDE-Workflow-Skills✅ Shipped
Emergency-Ops: Stop-All, Projekt-Redeploy/Restart, hinter Confirm-Gate✅ Shipped
SSH-Key-CRUD (private_key) mit PEM-Maskierung✅ Shipped
Server-CRUD + Validierung (server)✅ Shipped
Projekt- & Environment-CRUD (project, environment)✅ Shipped
Secret-Maskierung mit explizitem reveal-Opt-In✅ Shipped
Strukturierte Fehler, Recovery-Hints, automatische Retries✅ Shipped
npm-Distribution + Install-Konfigurator für 15+ Clients✅ Shipped
Multi-Instance-Registry (instance, instances.json)✅ Shipped
Coolify-Cloud-Pfad (cloud-info, team-scoped Tokens)✅ Shipped
Lokaler Manifest-Sync (.coolify/manifest.json, Auto-Hooks)✅ Shipped
Live-UAT-Harness (npm run uat:live)✅ Shipped
Capability-Discovery via system.version✅ Shipped
Deployment-Build-Logs via deployment.logs✅ Shipped

Capability-Discovery & Build-Logs: system({ action: "version" }) liefert coolifyVersion (ersetzt das bisherige Feld version), mcpVersion und eine capabilities-Map mit Coolify-4.1.2-Feature-Flags. Für App-Triage + begrenzten Runtime-Tail in einem Aufruf: diagnose({ action: "logs", mode: "full", uuid: "..." }) — prüfe capabilities.diagnose_logs. Für Log-Brain-Pattern-Triage: diagnose({ action: "analyze", uuid: "..." }) — prüfe capabilities.diagnose_analyze. Für advisory Stack-Vorschläge aus dem Live-Katalog: recipe({ action: "recommend", stack: "..." }) — prüfe capabilities.recipe_recommend. Für Instanz-Gesundheit, Dependency-Graph, Impact und Janitor/Cleanup: intelligence({ action: "scorecard" | "graph" | "impact" | "janitor" | "cleanup", ... }) — prüfe capabilities.intelligence_scorecard (und sibling intelligence_*-Keys); cleanup erfordert confirm: true. Für Manifest-Drift-Audit und Cross-App-Env-Promote: manifest({ action: "audit" }) und application({ action: "envs:promote", source_uuid, target_uuid, ... }) — prüfe capabilities.manifest_audit und capabilities.envs_promote (MCP-Composites über bestehende Reads/Env-CRUD, keine Coolify-native REST-Endpoints). Für Deployment-Build-Logs bevorzugt deployment({ action: "logs", deployment_uuid: "..." }) (oder application_uuid für das neueste Deployment). Der application.logs-Pfad mit deployment_uuid bleibt aus Back-Compat-Gründen verfügbar. Für Runtime-Log-Follow: application({ action: "logs", uuid: "...", follow: true }) — begrenztes MCP-Polling bis Idle oder Timeout; prüfe capabilities.application_logs_follow via system.version.

Warning

Coolify 4.1.x bietet keine stabilen Service- oder Database-Log-Endpunkte. Dieser Server behauptet oder registriert deshalb keine Service-/Database-Log-Actions. Nutze Application-Runtime-Logs und Deployment-Build-Logs, bis kompatible Upstream-APIs verfügbar sind.


🔮 Demnächst

Künftige Arbeit bleibt auf prüfbare Upstream- und Repository-Grenzen beschränkt:

  • Service-/Database-Logs ergänzen, sobald kompatible Coolify-APIs stabil und verfügbar sind.
  • Nachgewiesene REST-Mappings aus docs/COVERAGE.md schließen, wenn sie nützliche Agent-Workflows ermöglichen.
  • Cross-Instance-Fan-out erst mit expliziten Rate-Limit- und Credential-Isolation-Garantien neu bewerten.

Diese Grenzen enthalten weder Release-Datum noch Kompatibilitätsversprechen. Konkrete Wünsche gehören in GitHub Issues.


🛠️ Lokale Entwicklung

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-Modus

Logs gehen ausschließlich auf stderr — stdout ist für das MCP-Protokoll reserviert.

Der Maintainer-Publish-Flow (buildpack --dry-runpublish) ist in CONTRIBUTING.md dokumentiert.

Note

Maintainer können Live-UAT gegen eine echte Coolify-Instanz mit npm run uat:live ausführen. Siehe CONTRIBUTING.md — Live UAT Harness für Voraussetzungen und Report-Output — Runbook hier nicht duplizieren.


RessourceURL
Install-Konfiguratorclezcoding.github.io/awesome-coolify/install.html
Install-Landingpageclezcoding.github.io/awesome-coolify/
Beispiel-MCP-JSONdocs/mcp.example.json
Brand Assetsdocs/assets/
Coolifycoolify.io
MCP-Spezifikationmodelcontextprotocol.io
Issues & Feature-RequestsGitHub Issues
ContributingCONTRIBUTING.md
ChangelogCHANGELOG.md
Security-PolicySECURITY.md
LizenzMIT