Sign In

@masonator/coolify-mcp

Package Overview
Dependencies
Maintainers
1
Versions
81
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@masonator/coolify-mcp - npm Package Compare versions

Comparing version
2.18.1
to
2.18.2
+1
-1
package.json
{
"name": "@masonator/coolify-mcp",
"scope": "@masonator",
"version": "2.18.1",
"version": "2.18.2",
"mcpName": "io.github.StuMason/coolify",

@@ -6,0 +6,0 @@ "description": "MCP server for Coolify — 44 optimized tools for infrastructure management, diagnostics, and documentation search",

+31
-31

@@ -10,5 +10,5 @@ # Coolify MCP Server

Manage [Coolify](https://coolify.io/) through natural language — 44 token-optimized MCP tools for deploying, debugging, and operating your self-hosted PaaS from Claude, Cursor, or any MCP client.
Manage [Coolify](https://coolify.io/) from Claude, Cursor, or any MCP client: 44 consolidated tools for deploying, debugging, and operating your self-hosted PaaS in plain English.
📖 **[coolify-mcp.stumason.dev](https://coolify-mcp.stumason.dev)** — what it does, how to install it, and why it is safe to point at production.
📖 **[coolify-mcp.stumason.dev](https://coolify-mcp.stumason.dev)**: what it does, how to install it, and why it is safe to point at production.

@@ -21,3 +21,3 @@ This README is the full reference: every tool, every gotcha, every parameter.

**Claude Desktop — one-click:** download [`coolify-mcp.mcpb`](https://github.com/StuMason/coolify-mcp/releases/latest/download/coolify-mcp.mcpb) and drag it into **Settings → Extensions**. You'll be prompted for your Coolify URL and token — no Node install, no JSON editing.
**Claude Desktop, one-click:** download [`coolify-mcp.mcpb`](https://github.com/StuMason/coolify-mcp/releases/latest/download/coolify-mcp.mcpb) and drag it into **Settings → Extensions**. You'll be prompted for your Coolify URL and token. No Node install, no JSON editing.

@@ -66,4 +66,4 @@ **Claude Code:**

| **Control** | `control` (start/stop/restart for apps, databases, services) |
| **Logs** | `logs` (container logs for app, database, service — services need `container`), `application_logs` (superseded by `logs`) |
| **Tags** | `tags` (list, attach, detach for apps, databases, services; tag resources then `deploy` them together — Coolify v4.2+) |
| **Logs** | `logs` (container logs for app, database, service; services need `container`), `application_logs` (superseded by `logs`) |
| **Tags** | `tags` (list, attach, detach for apps, databases, services; tag resources then `deploy` them together; Coolify v4.2+) |
| **Env Vars** | `env_vars` (CRUD + bulk_update for application, service, and database env vars) |

@@ -80,15 +80,15 @@ | **Storages** | `storages` (list, create, update, delete persistent/file storages for apps, databases, services) |

Every tool takes an `action` parameter — run one with no arguments and it lists what it accepts.
Every tool takes an `action` parameter; run one with no arguments and it lists what it accepts.
## Design
- **Token-optimized** — consolidated action-param tools keep the tool list at ~6,600 tokens instead of ~43,000 (85% less), so the server doesn't eat your context window before you've asked anything.
- **Summaries by default** — `list_*` tools return `uuid`/`name`/`status` projections (90–99% smaller than the raw API, measured against a real 21-app estate); `get_*` tools fetch full detail for one resource.
- **Smart lookup** — `diagnose_app` takes a UUID, name, or domain; `diagnose_server` takes a UUID, name, or IP.
- **Actionable responses** — results carry `_actions` hints (view logs, restart, next page) so the assistant knows the logical next step without extra tokens.
- **Verified deploys** — `deploy` with `wait: true` polls to a terminal status and returns a log tail on failure, instead of "the site returns 200 so it probably worked".
- **Token-optimized.** Consolidated action-param tools keep the tool list at ~6,600 tokens instead of ~43,000, so the server doesn't eat your context window before you've asked anything.
- **Summaries by default.** `list_*` tools return `uuid`/`name`/`status` projections, 90–99% smaller than the raw API measured against a real 21-app estate. `get_*` tools fetch full detail for one resource.
- **Smart lookup.** `diagnose_app` takes a UUID, name, or domain; `diagnose_server` takes a UUID, name, or IP.
- **Actionable responses.** Results carry `_actions` hints (view logs, restart, next page) so the assistant knows the logical next step without extra tokens.
- **Verified deploys.** `deploy` with `wait: true` polls to a terminal status and returns a log tail on failure, instead of "the site returns 200 so it probably worked".
## Ask before it hurts
Destructive operations pause and ask **you**, not the model, on clients that support [elicitation](https://modelcontextprotocol.io/specification/2025-06-18/changelog) — Claude Code and VS Code Copilot today. The prompt states the blast radius before you answer:
Destructive operations pause and ask **you**, not the model, on clients that support [elicitation](https://modelcontextprotocol.io/specification/2025-06-18/changelog): Claude Code and VS Code Copilot today. The prompt states the blast radius before you answer:

@@ -101,3 +101,3 @@ ```text

Confirmation is asked for on `stop_all_apps`, `redeploy_project`, `restart_project_apps`, `system disable_api`, application / database / service / project / environment deletes, the credential deletes (`private_keys`, `cloud_tokens`, `github_apps` — none recoverable from Coolify once gone), and `bulk_env_update` across more than three apps. Routine deletes (storages, scheduled tasks, individual env vars, backup schedules) deliberately stay unprompted — a dialog on every delete is how dialogs stop being read. Deleting a resource spells out whether its **persistent volumes** go with it — `delete_volumes` defaults to `true` upstream, so leaving the flag unset is the destructive choice, not the cautious one.
Confirmation is asked for on `stop_all_apps`, `redeploy_project`, `restart_project_apps`, `system disable_api`, application / database / service / project / environment deletes, the credential deletes (`private_keys`, `cloud_tokens`, `github_apps`, none recoverable from Coolify once gone), and `bulk_env_update` across more than three apps. Routine deletes (storages, scheduled tasks, individual env vars, backup schedules) deliberately stay unprompted: a dialog on every delete is how dialogs stop being read. Deleting a resource spells out whether its **persistent volumes** go with it. `delete_volumes` defaults to `true` upstream, so leaving the flag unset is the destructive choice, not the cautious one.

@@ -108,17 +108,17 @@ Prompts are skipped where there is nothing to confirm: an emergency stop on an idle estate, or a redeploy of an empty project, just runs.

These tools also carry the MCP `destructiveHint` annotation, so on a client that honours annotations **and** supports elicitation you may answer two dialogs in a row — the client's own permission prompt, then this one. That is the client's prompt plus the server's, not a bug. Allowlisting the tool in your client removes the first and leaves this one as the gate.
These tools also carry the MCP `destructiveHint` annotation, so on a client that honours annotations **and** supports elicitation you may answer two dialogs in a row: the client's own permission prompt, then this one. That is the client's prompt plus the server's, not a bug. Allowlisting the tool in your client removes the first and leaves this one as the gate.
Set `COOLIFY_MCP_ELICITATION=off` to turn the confirmations off entirely. It exists for the case where a client advertises elicitation support but does not actually implement it — otherwise every guarded tool would return `could not confirm with the user` with no way to recover. It is an escape hatch, not a normal setting.
Set `COOLIFY_MCP_ELICITATION=off` to turn the confirmations off entirely. It exists for the case where a client advertises elicitation support but does not actually implement it. Without it, every guarded tool would return `could not confirm with the user` with no way to recover. It is an escape hatch, not a normal setting.
> **If confirmations time out before you can answer them**, raise your client's MCP tool timeout. The prompt runs inside the tool call, and the MCP SDK's default request timeout is 60 seconds. The server aborts cleanly when the client gives up — nothing runs behind your back — but you will see the call fail rather than the dialog you were reading.
> **If confirmations time out before you can answer them**, raise your client's MCP tool timeout. The prompt runs inside the tool call, and the MCP SDK's default request timeout is 60 seconds. The server aborts cleanly when the client gives up (nothing runs behind your back), but you will see the call fail rather than the dialog you were reading.
## Secure by default
Secrets are masked at the API boundary — a client granted "list" access never sees plaintext credentials unless you explicitly opt in with `reveal: true`:
Secrets are masked at the API boundary. A client granted "list" access never sees plaintext credentials unless you explicitly opt in with `reveal: true`:
- **`env_vars`** — variable values return as `***`
- **`system list_resources` (full mode)** — webhook HMAC secrets, basic-auth and database passwords, `internal/external_db_url` connection strings, compose bodies, Traefik labels, nested env vars
- **`deployment get`** — the raw upstream payload (server settings, log-drain tokens, webhook secrets) never leaves the client; responses are projected
- **`env_vars`**: variable values return as `***`
- **`system list_resources` (full mode)**: webhook HMAC secrets, basic-auth and database passwords, `internal/external_db_url` connection strings, compose bodies, Traefik labels, nested env vars
- **`deployment get`**: the raw upstream payload (server settings, log-drain tokens, webhook secrets) never leaves the client; responses are projected
Destructive operations also ask a human first — see [Ask before it hurts](#ask-before-it-hurts) above.
Destructive operations also ask a human first; see [Ask before it hurts](#ask-before-it-hurts) above.

@@ -129,3 +129,3 @@ ## Coolify version compatibility

- **Secrets are hidden by default.** From v4.2 Coolify strips sensitive fields from API responses unless the token has sensitive-read scope, so `reveal: true` can return a variable with no value at all. That is the server withholding it, not a bug here — issue a token with sensitive-read scope if you need plaintext back.
- **Secrets are hidden by default.** From v4.2 Coolify strips sensitive fields from API responses unless the token has sensitive-read scope, so `reveal: true` can return a variable with no value at all. That is the server withholding it, not a bug here; issue a token with sensitive-read scope if you need plaintext back.
- **Member-role tokens are read-only.** From v4.2 a token belonging to a Member-role user can view resources but cannot deploy, start, stop, create, update or delete. Those calls return 403. Promote the user or use a token from a role with write access.

@@ -158,11 +158,11 @@

Contributions welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) and the architecture notes in [CLAUDE.md](CLAUDE.md).
Contributions welcome; see [CONTRIBUTING.md](CONTRIBUTING.md) and the architecture notes in [CLAUDE.md](CLAUDE.md).
## Work with me
I'm Stu Mason. I build MCP servers, AI integrations and agentic systems for agencies, SMEs and enterprise — this repo is what that work looks like in the open.
I'm Stu Mason. I build MCP servers, AI integrations and agentic systems for agencies, SMEs and enterprise. This repo is what that work looks like in the open.
- **An MCP server for your product** — give Claude, Cursor and every other AI client a proper way into your API, like this one.
- **Answers from your own stuff** — AI that answers from your documents and data, with the receipts, instead of guessing. Can stay on your own servers.
- **Work that runs itself** — jobs on a schedule that sort, check and report, with a person signing off before anything goes out.
- **An MCP server for your product.** Give Claude, Cursor and every other AI client a proper way into your API, like this one.
- **Answers from your own stuff.** AI that answers from your documents and data, with the receipts, instead of guessing. Can stay on your own servers.
- **Work that runs itself.** Jobs on a schedule that sort, check and report, with a person signing off before anything goes out.

@@ -175,7 +175,7 @@ White-label under your own name if you're an agency. And if a job doesn't need AI, I'll say so before anyone's paid for anything.

- [Coolify](https://coolify.io/) — the open-source, self-hostable PaaS this server drives
- [MCP Registry](https://registry.modelcontextprotocol.io) — listed as `io.github.StuMason/coolify`
- [laravel-coolify](https://github.com/StuMason/laravel-coolify) — deploy Laravel to Coolify with a dashboard, Artisan commands, and generated Dockerfiles
- [Coolify](https://coolify.io/): the open-source, self-hostable PaaS this server drives
- [MCP Registry](https://registry.modelcontextprotocol.io): listed as `io.github.StuMason/coolify`
- [laravel-coolify](https://github.com/StuMason/laravel-coolify): deploy Laravel to Coolify with a dashboard, Artisan commands, and generated Dockerfiles
- [Model Context Protocol](https://modelcontextprotocol.io/)
MIT © [Stu Mason](https://stumason.dev) — if this is useful, ⭐ the repo.
MIT © [Stu Mason](https://stumason.dev). If this is useful, ⭐ the repo.