Coolify MCP Server
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., "@Coolify MCP ServerShow me the status of my latest deployment"
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.
Coolify MCP Server
A production-grade MCP (Model Context Protocol) server that provides AI agents with secure, controlled access to Coolify infrastructure management.
Table of Contents
Related MCP server: mcp-devtools
Why This MCP Exists
Coolify ships its own MCP integration that exposes raw Coolify API resources directly to AI agents. While powerful, that MCP operates as a transparent pass-through to the API, with minimal guardrails between the agent and your production infrastructure.
This MCP is different. It adds a security and policy enforcement layer between the AI agent and Coolify:
Aspect | Coolify Built-in MCP | This MCP Server |
Security Model | Direct API token passthrough | Least-privilege token selection, scoped by operation |
Operation Modes | None |
|
Access Control | Coolify-native RBAC only | Allowlists by project, environment, and resource UUID |
Production Guard | None | Blocks mutations on production environments by default |
Audit Trail | Minimal | Structured audit events for every mutation (allowed/denied/error) |
Secret Redaction | None | Automatic redaction of tokens, passwords, DB URLs, logs, SSH keys, email addresses |
Rate/Scope | Full API surface | 42 curated tools grouped into 10 domains: core, GitHub discovery, scheduled tasks, deployments, backups, servers, teams, configuration, storage, and environment variables |
This MCP is designed for operational control — letting AI safely observe, deploy, and manage Coolify resources without risking accidental production damage.
Architecture
┌──────────────┐ MCP Protocol ┌──────────────────────────────────────────────────┐
│ │ (stdio or HTTP SSE) │ │
│ AI Agent │◄──────────────────────►│ Coolify MCP Server │
│ (Claude, │ │ │
│ Copilot, │ Tool Calls │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ Cursor, │◄──────────────────────►│ │ Auth & │─►│ Policy & │─►│ Scope │ │
│ OpenCode) │ JSON Responses │ │ Token │ │ Operation│ │ Allowlist │ │
│ │ │ │ Selector │ │ Mode │ │ │ │
└──────────────┘ │ └──────────┘ └────┬─────┘ └──────┬───────┘ │
│ │ │ │
│ ┌───────────────────▼───────────────▼────────┐ │
│ │ Production Guard │ │
│ │ (Deny/allow production mutations) │ │
│ └───────────────────┬────────────────────────┘ │
│ │ │
│ ┌───────────────────▼────────────────────────┐ │
│ │ Tool Domains (42 tools across 10 areas) │ │
│ │ │ │
│ │ Core Read (10) │ GitHub Discovery (3) │ │
│ │ Actions (11) │ Scheduled Tasks (4) │ │
│ │ Servers (5) │ Backups (2) │ │
│ │ Teams (2) │ Configuration (2) │ │
│ │ Storage (2) │ Deployments (1) │ │
│ └───────────────────┬────────────────────────┘ │
│ │ │
│ ┌───────────────────▼────────────────────────┐ │
│ │ Coolify API Client │ │
│ │ (Token-scoped HTTP requests, redaction) │ │
│ └───────────────────┬────────────────────────┘ │
│ │ │
└──────────────────────┼───────────────────────────┘
│
HTTPS (Bearer Token)
│
┌──────────────────────▼──────────────────────────┐
│ Coolify Instance │
│ (Projects, Resources, Deployments, Envs, │
│ Servers, Teams, GitHub Apps, Backups, │
│ Scheduled Tasks, Storage Mounts) │
└─────────────────────────────────────────────────┘Security Model
Least-Privilege Tokens
Instead of a single master token, you can configure up to 5 scoped tokens:
Token Env Var | Used For | Example Coolify Token Scopes |
| All read operations (list/get resources) |
|
| Reading sensitive data (env vars, logs) |
|
| Write operations (set env vars) |
|
| Deploy/start/restart operations |
|
| Fallback when no scoped token matches |
|
The server selects the minimum-privilege token for each operation. If COOLIFY_READ_TOKEN is set, list-projects uses it, never the master token.
Secret Redaction
Environment variable values are NEVER returned by
coolify_list_environment_variables— only keys and metadata.Logs are scanned for
Bearertokens,password,secret,api_keypatterns and automatically redacted.The Pino logger has built-in redaction paths for sensitive fields.
Audit events do not contain secret values.
Phase 2 Security Controls
With the addition of 21 new tools in Phase 2, the following security controls were added:
Scheduled Task Command Redaction
Task command output in
coolify_get_task_executionsis redacted to prevent command injection visibility.Cron expressions are validated server-side before creation/update.
Path Traversal Prevention (Storage)
coolify_create_storagevalidatessourceanddestinationpaths against directory traversal patterns (../,..\\, absolute paths).If a path contains traversal sequences, the operation is denied with a
VALIDATION_ERROR.
Field Allowlisting (Configuration Updates)
coolify_update_application_configandcoolify_update_database_configuse PATCH semantics with explicit field allowlisting.Only documented fields can be updated. Arbitrary field injection is blocked.
Each update is audited with
coolify.application.config.update/coolify.database.config.updateevents.
Email/SSH Key Redaction
coolify_list_team_membersgates email addresses behind policy. By default,[REDACTED]is returned.coolify_get_serverredacts SSH private keys and sensitive connection details.coolify_list_serversredacts network information (IP addresses, ports).
GitHub Discovery Security
coolify_list_github_appsreturns no secrets — only UUID, name, organization, and installation metadata.Repository browsing is scoped to what the configured GitHub App can access.
All GitHub discovery tools are read-only with no mutation capabilities.
Database Password Protection
coolify_create_databasenever returns generated passwords or connection strings in its response.coolify_list_database_backupsredacts destination storage paths.
Additional Protections
Timing-safe API key comparison for HTTP transport auth (prevents timing attacks).
Scope checking via allowlists before any operation touches a resource.
Production guard runs before any mutation.
Coolify API Permissions
The relationship between the Coolify API token permissions and this MCP's tool categories:
Permission Class | Required Coolify Token Scope | MCP Tools |
Read |
| All 25 read tools (core + discovery + servers + teams + storage) |
Sensitive Read |
|
|
Deploy |
|
|
Write |
| All safe-write tools (create project/env/app/service/db, set env vars, create scheduled tasks, create backups, create storage, update configs, validate server) |
Stop |
|
|
Quick Start
Prerequisites
Node.js >= 18
A Coolify instance with API tokens configured
Coolify API token(s) with appropriate scopes
Option A — Install directly from GitHub (easiest)
# Install as a dependency directly from the public GitHub repo
# (the prepare script builds dist/ automatically)
npm install github:hecateq/mcp-coolify
# Or run it on the fly with npx
npx -y github:hecateq/mcp-coolifyThen configure your MCP client (see Local stdio Usage) with:
{
"type": "local",
"command": ["node", "node_modules/mcp-coolify/dist/index.js"],
"environment": { "COOLIFY_URL": "...", "COOLIFY_API_TOKEN": "..." }
}Option B — Clone and run locally
# 1. Clone the repository
git clone https://github.com/hecateq/mcp-coolify.git
cd mcp-coolify
# 2. Install dependencies (prepares dist/ automatically)
npm install
# 3. Configure environment
cp .env.example .env
# Edit .env with your Coolify URL and API token
# 4. Run the server (stdio mode — default)
npm startTest the connection
The server exposes a health tool. In stdio mode, use an MCP client to query:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "coolify_health",
"arguments": {}
}
}Expected response:
{
"content": [{
"text": "{\n \"ok\": true,\n \"coolifyUrl\": \"[CONFIGURED]\",\n \"authStatus\": \"authenticated\",\n \"latencyMs\": 42,\n \"transport\": \"stdio\"\n}"
}]
}Environment Variables
All configuration is via environment variables. Read from src/config/schema.ts via Zod validation.
Required
Variable | Type | Default | Description |
|
| — | Base URL of your Coolify instance (e.g. |
API Tokens (at least one required)
Variable | Type | Default | Description |
|
| — | Fallback API token (used when no scoped token matches) |
|
| — | Read-only token for normal read operations |
|
| — | Token for reading sensitive data (envs, logs) |
|
| — | Token for write operations (env vars, settings) |
|
| — | Token for deploy operations |
Note: Scoped tokens override
COOLIFY_API_TOKEN. The server automatically selects the least-privilege token for each operation.
Transport
Variable | Type | Default | Description |
|
|
| Transport mode |
|
|
| HTTP transport host (only used when |
|
|
| HTTP transport port |
|
| — | API key for authenticating HTTP MCP requests (required for HTTP transport) |
Operation Mode
Variable | Type | Default | Description |
|
|
| Restricts what operations the MCP server allows |
Allowlists (Optional)
Variable | Type | Default | Description |
|
| — | Restrict access to specific projects. Accepts UUID v4 or Coolify-native identifiers |
|
| — | Restrict access to specific environments. Accepts UUID v4 or Coolify-native identifiers |
|
| — | Restrict access to specific resources. Accepts UUID v4 or Coolify-native identifiers |
Production Protection
Variable | Type | Default | Description |
|
|
| Environment names considered "production" |
|
|
| Block all mutations on production environments |
|
|
| Allow deploy on production (only if |
|
|
| Allow stop operations (globally) |
|
|
| Allow environment variable modifications |
Logging
Variable | Type | Default | Description |
|
|
| Max log lines to return from application logs |
|
|
| Pino log level ( |
Local stdio Usage (OpenCode)
Add to your opencode.local.jsonc:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"coolify": {
"type": "local",
"command": ["node", "/path/to/coolify-mcp/dist/index.mjs"],
"environment": {
"COOLIFY_URL": "https://coolify.example.com",
"COOLIFY_API_TOKEN": "{env:COOLIFY_API_TOKEN}",
"COOLIFY_OPERATION_MODE": "read-only"
}
}
}
}A complete example is at examples/opencode.local.jsonc.
Remote HTTP Usage (OpenCode)
When running the MCP server in HTTP mode behind a reverse proxy, configure OpenCode for remote access:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"coolify-remote": {
"type": "remote",
"url": "https://coolify-mcp.example.com/mcp",
"headers": {
"Authorization": "Bearer {env:MCP_SERVER_API_KEY}"
}
}
}
}A complete example is at examples/opencode.remote.jsonc.
HTTP Transport Endpoints
Endpoint | Auth Required | Purpose |
| No | Liveness check — returns |
| No | Readiness check — verifies Coolify API is reachable |
| Yes (Bearer) | MCP protocol endpoint — all tool calls go here |
Tool Catalog
The server registers 42 tools: 25 read-only tools and 17 action (mutation/deploy) tools.
Note: Tool numbering is for reference only. Tools 1-15 are Phase 1 (original), tools 16-42 are Phase 2 (new).
Read Tools (25)
Core Read Tools (10 — Phase 1)
# | Tool Name | Purpose | Input | Read-Only | Idempotent |
1 |
| Check Coolify API and MCP server connectivity. Returns health status, auth status, and latency. No secrets in response. |
| ✅ | ✅ |
2 |
| List all Coolify projects with optional name filter. |
| ✅ | ✅ |
3 |
| Get a single project by UUID with its environments and resource counts. |
| ✅ | ✅ |
4 |
| List all resources with filters. |
| ✅ | ✅ |
5 |
| Get a single resource detail by UUID and type. Sensitive fields (DB URLs) redacted. |
| ✅ | ✅ |
6 |
| High-level project overview: project info, envs, resources, deployments, health summary. Aggregates 4 API calls into one. |
| ✅ | ✅ |
7 |
| List deployments with filters. Newest first. |
| ✅ | ✅ |
8 |
| Get deployment detail by UUID: status, timestamps, commit info, error summary. |
| ✅ | ✅ |
9 |
| Get application logs (capped by |
| ✅ | ✅ |
10 |
| List env vars for a resource. Values are NEVER returned — only keys and metadata. |
| ✅ | ✅ |
GitHub Discovery Tools (3 — Phase 2)
# | Tool Name | Purpose | Input | Read-Only | Idempotent |
16 |
| List GitHub Apps connected to your Coolify instance. Returns team and system-wide apps. No secrets. |
| ✅ | ✅ |
17 |
| List repositories accessible via a GitHub App. Supports pagination and search. |
| ✅ | ✅ |
18 |
| List branches of a GitHub repository via a GitHub App. |
| ✅ | ✅ |
Scheduled Task Read Tools (2 — Phase 2)
# | Tool Name | Purpose | Input | Read-Only | Idempotent |
19 |
| List scheduled tasks for an application or service. Returns task UUID, name, command, schedule, enabled, last execution. |
| ✅ | ✅ |
20 |
| Get execution history for a scheduled task. Output is redacted for security. |
| ✅ | ✅ |
Backup Read Tool (1 — Phase 2)
# | Tool Name | Purpose | Input | Read-Only | Idempotent |
21 |
| List backup configurations and executions for a database. Sensitive destination paths are redacted. |
| ✅ | ✅ |
Server Read Tools (4 — Phase 2)
# | Tool Name | Purpose | Input | Read-Only | Idempotent |
22 |
| List all servers connected to your Coolify instance. Sensitive network info and SSH keys redacted. |
| ✅ | ✅ |
23 |
| Get a single server detail by UUID. SSH keys and sensitive network info redacted. |
| ✅ | ✅ |
24 |
| List resources associated with a specific server. |
| ✅ | ✅ |
25 |
| List domains associated with a server. |
| ✅ | ✅ |
Team Read Tools (2 — Phase 2)
# | Tool Name | Purpose | Input | Read-Only | Idempotent |
26 |
| Get the current team context: id, name, and permission scope. |
| ✅ | ✅ |
27 |
| List members of the current team. Email addresses policy-gated and redacted by default. |
| ✅ | ✅ |
Storage Read Tool (1 — Phase 2)
# | Tool Name | Purpose | Input | Read-Only | Idempotent |
28 |
| List storage mounts for an app/service/database. Sensitive host paths redacted. |
| ✅ | ✅ |
Configuration Update Tools (2 — Phase 2, safe-write)
# | Tool Name | Purpose | Input | Read-Only | Idempotent |
29 |
| Update application config: health check, resource limits, replicas, ports, build settings. PATCH semantics. Audit: |
| ✅ (safe-write) | ✅ |
30 |
| Update database config: CPU/memory limits, name, description. PATCH semantics. Audit: |
| ✅ (safe-write) | ✅ |
Action Tools (17)
Core Deploy Tools (5 — Phase 1)
# | Tool Name | Purpose | Input | Destructive | Idempotent | Policy Checks |
11 |
| Deploy a resource. Supports force deploy (POST vs GET). |
| ❌ | ✅ | Mode + Scope + Production |
12 |
| Restart a resource. |
| ⚠️ | ❌ | Mode + Scope + Production |
13 |
| Start a stopped resource. |
| ❌ | ✅ | Mode + Scope + Production |
14 |
| Stop a resource. Disabled by default — must set |
| ✅ | ❌ | AllowStop gate + Mode + Scope + Production |
15 |
| Set a single env var on a resource. Disabled by default — |
| ⚠️ | ✅ | AllowEnvWrite gate + Mode + Scope + Production |
New Action Tools (6 — Phase 2, safe-write)
# | Tool Name | Purpose | Input | Destructive | Idempotent | Policy Checks |
31 |
| Create a new project. |
| ❌ | ✅ | Mode + Scope + Production |
32 |
| Create a new environment within a project. |
| ❌ | ✅ | Mode + Scope + Production |
33 |
| Create a new application in a project environment. |
| ❌ | ✅ | Mode + Scope + Production |
34 |
| Create a new service in a project environment. |
| ❌ | ✅ | Mode + Scope + Production |
35 |
| Create a new database. Passwords/connection strings NEVER returned. |
| ❌ | ✅ | Mode + Scope + Production |
36 |
| Set multiple env vars in bulk (1–50). Disabled by default — |
| ⚠️ | ✅ | AllowEnvWrite gate + Mode + Scope + Production |
Deployment Action Tool (1 — Phase 2)
# | Tool Name | Purpose | Input | Destructive | Idempotent | Policy Checks |
37 |
| Cancel a queued or in-progress deployment. Returns UNSUPPORTED_OPERATION for terminal states. Audit: |
| ❌ | ❌ | Mode + Scope |
Backup Action Tool (1 — Phase 2, safe-write)
# | Tool Name | Purpose | Input | Destructive | Idempotent | Policy Checks |
38 |
| Create a backup config for a database. Cron expression validated. Audit: |
| ❌ | ✅ | Mode + Scope + Production |
Scheduled Task Action Tools (2 — Phase 2, safe-write)
# | Tool Name | Purpose | Input | Destructive | Idempotent | Policy Checks |
39 |
| Create a scheduled task (cron job). Cron expression validated. Audit: |
| ❌ | ✅ | Mode + Scope + Production |
40 |
| Update a scheduled task. |
| ❌ | ✅ | Mode + Scope + Production |
Server Validation Tool (1 — Phase 2)
# | Tool Name | Purpose | Input | Destructive | Idempotent | Policy Checks |
41 |
| Validate server connectivity and configuration. Audited as mutation action. |
| ❌ | ✅ | Mode + Scope |
Storage Action Tool (1 — Phase 2, safe-write)
# | Tool Name | Purpose | Input | Destructive | Idempotent | Policy Checks |
42 |
| Create a storage mount for a resource. Path traversal validated. Audit: |
| ❌ | ✅ | Mode + Scope + Production |
Policy Check Chain (Action Tools)
Every action tool runs through the following policy checks before executing:
Allow Gate Check — Some tools have dedicated allow gates:
COOLIFY_ALLOW_STOP(for stop),COOLIFY_ALLOW_ENV_WRITE(for env var modifications). If the gate is closed, the operation is denied.Operation Mode Check — Does the mode (
read-only/deploy-only/safe-write) permit this operation?Scope/Allowlist Check — Is the target resource UUID in the allowed list (if configured)?
Production Guard Check — If the
environment_namematches a production pattern, is this mutation allowed?Input Validation — All inputs are validated via Zod schemas. Cron expressions are validated. Path traversal is prevented for storage operations.
Audit Logging — Every mutation is logged with a structured audit event containing the operation, resource, and result (allowed/denied/error).
If any check fails, the operation is denied with a POLICY_DENIED error code and an audit event is logged.
Common Response Format
All tools return a consistent JSON response structure:
Success:
{
"ok": true,
"summary": "Found 3 project(s)",
"data": [ /* ... */ ],
"meta": {
"durationMs": 42,
"truncated": false
}
}Error (policy denied):
{
"ok": false,
"summary": "Operation denied by policy",
"error": {
"code": "POLICY_DENIED",
"message": "Operation mode is 'read-only' — 'deploy' operations are not permitted",
"retryable": false
},
"meta": {
"durationMs": 5
}
}Error (upstream):
{
"ok": false,
"summary": "Failed to list projects",
"error": {
"code": "UPSTREAM_ERROR",
"message": "Coolify API returned status 500",
"retryable": true
},
"meta": {
"durationMs": 1203
}
}Error Codes
Code | Meaning | Retryable |
| Token missing or invalid | ❌ |
| Token lacks required scope | ❌ |
| Operation blocked by MCP policy (mode/scope/production) | ❌ |
| Coolify resource not found (404) | ❌ |
| Coolify API rate limit hit (429) | ✅ |
| Coolify instance unreachable or 5xx | ✅ |
| Request exceeded 30s timeout | ✅ |
| Invalid input parameters | ❌ |
| Generic Coolify API error | varies |
| MCP server internal error | ❌ |
Operation Modes
The COOLIFY_OPERATION_MODE environment variable controls what operations the MCP server permits:
read-only (default)
Safe for monitoring and exploration. Only the 10 read tools are allowed. All 5 action tools return POLICY_DENIED.
Allowed | Denied |
All read tools (health, list, get, logs) | All action tools (deploy, restart, start, stop, set env) |
deploy-only
Read access plus deploy operations (deploy, restart, start). Write operations (stop, set env vars) are denied.
Allowed | Denied |
All read tools |
|
|
|
| |
|
safe-write
Full read + deploy + write access. Stop and env-write are still gated behind their respective ALLOW_* flags.
Allowed | Gated By |
All read tools | — |
| — |
| — |
| — |
|
|
|
|
Mode Decision Matrix
Operation |
|
|
|
All read tools (25) | ✅ | ✅ | ✅ |
| ❌ | ✅ | ✅ |
| ❌ | ✅ | ✅ |
| ❌ | ✅ | ✅ |
| ❌ | ❌ | ✅ (if |
| ❌ | ❌ | ✅ (if |
| ❌ | ❌ | ✅ (if |
| ❌ | ✅ | ✅ |
| ❌ | ❌ | ✅ |
| ❌ | ❌ | ✅ |
| ❌ | ❌ | ✅ |
| ❌ | ❌ | ✅ |
| ❌ | ❌ | ✅ |
| ❌ | ❌ | ✅ |
| ❌ | ❌ | ✅ |
| ❌ | ❌ | ✅ |
Production Safeguards
Production Environment Detection
The server defines "production" environments via COOLIFY_PRODUCTION_ENV_NAMES (default: production,prod). When an action tool receives an environment_name parameter, it checks if that name matches any production name (case-insensitive).
Protection Layers
Layer | Env Var | Default | Effect |
Deny All Production Mutations |
|
| Blocks ALL mutations (deploy, restart, start, stop, env write) on production environments |
Allow Production Deploy |
|
| If |
Allow Stop |
|
| Globally disables stop operations. Required for production stop too |
Allow Env Write |
|
| Globally disables env var modifications. Required for production env writes too |
Recommended Production Configuration
# Strict — no mutations on production at all (default)
COOLIFY_OPERATION_MODE=read-only
COOLIFY_DENY_PRODUCTION_MUTATIONS=true
COOLIFY_ALLOW_STOP=false
COOLIFY_ALLOW_ENV_WRITE=false# Moderate — allow deploys to production, block everything else
COOLIFY_OPERATION_MODE=deploy-only
COOLIFY_DENY_PRODUCTION_MUTATIONS=false
COOLIFY_ALLOW_PRODUCTION_DEPLOY=true
COOLIFY_ALLOW_STOP=false
COOLIFY_ALLOW_ENV_WRITE=falseDocker Usage
Build from source
npm run buildRun with Docker
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist/ ./dist/
EXPOSE 3000
CMD ["node", "dist/index.js"]Docker Compose
services:
coolify-mcp:
build: .
environment:
COOLIFY_URL: "https://coolify.example.com"
COOLIFY_API_TOKEN: "${COOLIFY_API_TOKEN}"
MCP_TRANSPORT: "http"
MCP_HTTP_PORT: "3000"
MCP_SERVER_API_KEY: "${MCP_SERVER_API_KEY}"
COOLIFY_OPERATION_MODE: "read-only"
ports:
- "3000:3000"Troubleshooting
Server won't start
Symptom: Configuration validation failed: coolifyUrl: Required
Fix: Set COOLIFY_URL environment variable to your Coolify instance URL.
export COOLIFY_URL="https://coolify.example.com"Symptom: Configuration validation failed: coolifyUrl: Invalid URL
Fix: Ensure COOLIFY_URL is a valid URL including protocol (https://).
Authentication failures
Symptom: AUTHENTICATION_FAILED — "No Coolify API token configured"
Fix: Set at least COOLIFY_API_TOKEN or a scoped token like COOLIFY_READ_TOKEN.
HTTP transport not working
Symptom: MCP_SERVER_API_KEY is required for HTTP transport mode
Fix: Set MCP_SERVER_API_KEY to a strong random key when using MCP_TRANSPORT=http.
# Generate a secure key
openssl rand -hex 32Production mutations blocked
Symptom: POLICY_DENIED — "Production mutations are denied"
Cause: Environment name matches a production pattern (default: production, prod) and COOLIFY_DENY_PRODUCTION_MUTATIONS is true (the default).
Fix: If intentional, use a non-production environment. To allow production mutations, set COOLIFY_DENY_PRODUCTION_MUTATIONS=false and review the specific allow flags.
Stop operations blocked
Symptom: POLICY_DENIED — "Stop operations are disabled"
Cause: COOLIFY_ALLOW_STOP defaults to false.
Fix: Set COOLIFY_ALLOW_STOP=true if stop operations are required.
Application logs truncated
Symptom: Logs show fewer lines than requested
Cause: Server caps at COOLIFY_LOG_MAX_LINES (default 200, max 1000).
Fix: Increase COOLIFY_LOG_MAX_LINES up to 1000, or request fewer lines.
Development
Commands
npm run dev # Run in development mode with hot-reload (tsx watch)
npm run build # Build to dist/ (tsup, ESM format)
npm start # Run the built server
npm test # Run all tests (vitest)
npm run test:watch # Run tests in watch mode
npm run test:coverage # Run tests with coverage report
npm run lint # Lint source code
npm run lint:fix # Fix lint issues
npm run format # Format with Prettier
npm run typecheck # Type-check without emitting (tsc --noEmit)Project Structure
src/
├── config/
│ ├── schema.ts # Zod schema for all environment config
│ └── load-config.ts # Config loading and validation
├── coolify/
│ ├── client.ts # Coolify API HTTP client
│ ├── types.ts # TypeScript types for Coolify data models
│ ├── normalizers.ts # Response normalizers (strip undefined, redact secrets)
│ └── errors.ts # Error handling and mapping
├── security/
│ ├── policy.ts # Operation mode enforcement
│ ├── scope.ts # Allowlist-based scope checking
│ ├── production-guard.ts # Production environment protection
│ └── redaction.ts # Secret redaction utilities
├── observability/
│ ├── logger.ts # Pino logger with secret redaction
│ └── audit.ts # Structured audit event logging
├── server/
│ └── create-server.ts # MCP server setup and tool registration (42 tools)
├── tools/
│ ├── read/ # 10 core read-only tools (Phase 1)
│ ├── actions/ # 11 action tools (5 Phase 1 + 6 Phase 2)
│ ├── discovery/ # 3 GitHub discovery tools (Phase 2)
│ ├── scheduled-tasks/ # 4 scheduled task tools (Phase 2)
│ ├── deployments/ # 1 deployment cancel tool (Phase 2)
│ ├── backups/ # 2 database backup tools (Phase 2)
│ ├── servers/ # 5 server tools (Phase 2)
│ ├── teams/ # 2 team tools (Phase 2)
│ ├── configuration/ # 2 config update tools (Phase 2)
│ └── storage/ # 2 storage tools (Phase 2)
├── transports/
│ ├── stdio.ts # stdio transport (default)
│ └── http.ts # HTTP/SSE transport with auth
└── index.ts # Entry pointLicense
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-qualityCmaintenanceAn MCP server that enables AI assistants to manage infrastructure, applications, databases, and services through the Coolify PaaS platform.84MIT
- AlicenseBqualityDmaintenanceProduction-grade MCP server that gives AI agents safe access to your local dev environment: filesystem, databases, processes, and OpenAPI specs.15323MIT
- AlicenseBqualityDmaintenanceMCP server that integrates with Coolify to let AI assistants manage Coolify instances via a clean toolkit wrapping the official REST API.352086MIT
- Alicense-qualityDmaintenanceA production-grade MCP server designed for multi-tenant, authenticated, and observable AI agent systems, enabling secure tool execution across heterogeneous data sources.54MIT
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
An MCP server for Arcjet - the runtime security platform that ships with your AI code.
Cloud-hosted MCP server for durable AI memory
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/hecateq/mcp-coolify'
If you have feedback or need assistance with the MCP directory API, please join our Discord server