Skip to main content
Glama
README.md
# coolify-mcp

MCP server for managing Coolify instances (**v4.3+ API**). Control applications, databases, services, servers, and more directly from Claude or any MCP-compatible client.

**136 tools | 7 resources | 4 prompts**

Requires Coolify **v4.3.0** or newer (`/api/v1`); **v4.4.2 is recommended** and is the integration-test target for MCP **4.2.0**. Tools and options marked *v4.4+* need Coolify v4.4.0 or newer and answer `404` or `422` on older instances. Legacy GET-based state-changing endpoints are not supported.

See the [4.2.0 API audit](docs/api-audit-4.2.0.md) for pinned upstream sources, compatibility changes, and endpoints that are not wrapped. The [4.1.0 audit](docs/api-audit-4.1.0.md) covers v4.3.23.

## Installation

### Claude Code

```bash
claude mcp add coolify \
  -e COOLIFY_API_URL=http://your-server:8000/api/v1 \
  -e COOLIFY_TOKEN=your-token \
  -- npx mcp-coolify
```

### Codex

```bash
codex mcp add coolify \
  --env COOLIFY_API_URL=http://your-server:8000/api/v1 \
  --env COOLIFY_TOKEN=your-token \
  -- npx mcp-coolify
```

### Other MCP clients

```bash
COOLIFY_API_URL=http://your-server:8000/api/v1 \
COOLIFY_TOKEN=your-token \
npx mcp-coolify
```

### From source

```bash
git clone https://github.com/0xtlt/coolify-mcp
cd coolify-mcp && pnpm install
COOLIFY_API_URL=... COOLIFY_TOKEN=... pnpm start
```

### Claude Desktop

Add to `~/.claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "coolify": {
      "command": "pnpm",
      "args": ["exec", "tsx", "/path/to/coolify-mcp/src/index.ts"],
      "env": {
        "COOLIFY_API_URL": "http://your-server:8000/api/v1",
        "COOLIFY_TOKEN": "your-token"
      }
    }
  }
}
```

### Get your API token

Coolify dashboard: **Keys & Tokens > API tokens**

On Coolify v4.4+ pick the token abilities for what you want to do:

| Ability | Needed for |
|---------|------------|
| `read` | List and get tools |
| `read:sensitive` | All log tools, `coolify_list_server_registries`, secrets in responses, audit event details, import output |
| `write` | [WRITE] and [DESTRUCTIVE] tools |
| `deploy` | Deploy, start, stop and restart tools, `instant_deploy`, `coolify_deploy_application_preview`, database imports from a server path |

## Available Tools

### Applications (8)

| Tool | Description |
|------|-------------|
| `coolify_list_applications` | List all applications (summary) |
| `coolify_get_application` | Get application details |
| `coolify_create_application` | [WRITE] Create from public/private repo, Dockerfile, or Docker image |
| `coolify_update_application` | [WRITE] Update application config |
| `coolify_start_application` | [WRITE] Start a stopped application |
| `coolify_stop_application` | [DESTRUCTIVE] Stop an application |
| `coolify_restart_application` | [DESTRUCTIVE] Restart an application |
| `coolify_delete_application` | [DESTRUCTIVE] Delete an application |

### Preview Deployments (6)

Each tool takes the parent application `uuid`; all but the list take a `pull_request_id` between 1 and 2147483647. List, get and deploy need Coolify v4.4+.

| Tool | Description |
|------|-------------|
| `coolify_list_application_previews` | List previews of an application (summary) |
| `coolify_get_application_preview` | Get one preview with its domains and status |
| `coolify_deploy_application_preview` | [WRITE] Open or redeploy the preview of a pull request (`git_type`/`commit` for Git apps, `docker_tag` for Docker Image apps) |
| `coolify_get_application_preview_logs` | Read preview runtime logs with the same filters as application logs |
| `coolify_update_application_preview` | [WRITE] Replace preview domains using `domains` or `docker_compose_domains` |
| `coolify_delete_application_preview` | [DESTRUCTIVE] Remove the preview, its containers, volumes, and networks |

### Databases (11)

| Tool | Description |
|------|-------------|
| `coolify_list_databases` | List all databases (summary) |
| `coolify_get_database` | Get database details |
| `coolify_create_database` | [WRITE] Create PostgreSQL, MySQL, MariaDB, MongoDB, Redis, KeyDB, Dragonfly, ClickHouse, or SQLite (v4.4+) |
| `coolify_update_database` | [WRITE] Update database config |
| `coolify_list_database_backups` | List backups for a database |
| `coolify_create_database_backup` | [WRITE] Create a backup schedule (`frequency` required, optional `backup_now`) |
| `coolify_delete_database_backup` | [DESTRUCTIVE] Delete a scheduled backup config |
| `coolify_start_database` | [WRITE] Start a stopped database |
| `coolify_stop_database` | [DESTRUCTIVE] Stop a database |
| `coolify_restart_database` | [DESTRUCTIVE] Restart a database |
| `coolify_delete_database` | [DESTRUCTIVE] Delete a database |

### Backup Schedule Updates & Executions (3)

| Tool | Description |
|------|-------------|
| `coolify_update_database_backup` | [WRITE] Update schedule, retention, S3 and missing-backup alerts |
| `coolify_list_backup_executions` | List execution history for a database backup schedule |
| `coolify_delete_backup_execution` | [DESTRUCTIVE] Delete a backup execution |

### Database Imports (4)

Coolify v4.4+. An import runs in the background: start it, then poll the status tool until `status` is `finished` or `error`. `source` is `s3` (`s3_storage_uuid` + `path`), `server` (absolute `path` on the database server) or `upload` (`upload_id` of a file sent to `POST .../imports/uploads`).

| Tool | Description |
|------|-------------|
| `coolify_import_database` | [DESTRUCTIVE] Restore a backup into a standalone database |
| `coolify_get_database_import` | Get the status of a standalone database import |
| `coolify_import_service_database` | [DESTRUCTIVE] Restore a backup into a database of a service |
| `coolify_get_service_database_import` | Get the status of a service database import |

### Services (8)

| Tool | Description |
|------|-------------|
| `coolify_list_services` | List all services (summary) |
| `coolify_get_service` | Get service details |
| `coolify_create_service` | [WRITE] Create a one-click Docker Compose service |
| `coolify_update_service` | [WRITE] Update service config |
| `coolify_start_service` | [WRITE] Start a stopped service |
| `coolify_stop_service` | [DESTRUCTIVE] Stop a service |
| `coolify_restart_service` | [DESTRUCTIVE] Restart a service |
| `coolify_delete_service` | [DESTRUCTIVE] Delete a service |

### Servers (8)

| Tool | Description |
|------|-------------|
| `coolify_list_servers` | List all servers (summary) |
| `coolify_get_server` | Get server details |
| `coolify_create_server` | [WRITE] Add a new server (requires SSH key) |
| `coolify_update_server` | [WRITE] Update server config |
| `coolify_validate_server` | [WRITE] Validate SSH connectivity and Docker (POST) |
| `coolify_get_server_resources` | List all resources on a server |
| `coolify_get_server_domains` | List all domains on a server |
| `coolify_delete_server` | [DESTRUCTIVE] Delete a server (`delete_from_provider` also deletes the cloud machine, v4.4+) |

### Docker Registry Logins (4)

Coolify v4.4+. Coolify runs `docker login` on the server and does not store the token. `registry` is a host such as `ghcr.io` or `registry.example.com:5000`.

| Tool | Description |
|------|-------------|
| `coolify_list_server_registries` | List registries a server is logged in to and the ones its applications need |
| `coolify_login_server_registry` | [WRITE] Log in to a registry or update the login |
| `coolify_check_server_registry` | [WRITE] Check that a stored login still works |
| `coolify_logout_server_registry` | [DESTRUCTIVE] Log out of a registry |

### Private Keys (5)

| Tool | Description |
|------|-------------|
| `coolify_list_private_keys` | List all SSH private keys (summary) |
| `coolify_get_private_key` | Get private key details |
| `coolify_create_private_key` | [WRITE] Create a new SSH key |
| `coolify_update_private_key` | [WRITE] Update an SSH key |
| `coolify_delete_private_key` | [DESTRUCTIVE] Delete an SSH key |

### Projects & Environments (9)

| Tool | Description |
|------|-------------|
| `coolify_list_projects` | List all projects (summary) |
| `coolify_get_project` | Get project details |
| `coolify_create_project` | [WRITE] Create a new project |
| `coolify_update_project` | [WRITE] Update a project |
| `coolify_delete_project` | [DESTRUCTIVE] Delete a project |
| `coolify_list_environments` | List environments in a project |
| `coolify_get_environment` | Get environment details |
| `coolify_create_environment` | [WRITE] Create an environment |
| `coolify_delete_environment` | [DESTRUCTIVE] Delete an environment |

### Deployments (5)

| Tool | Description |
|------|-------------|
| `coolify_list_deployments` | List currently running/queued deployments |
| `coolify_list_application_deployments` | List deployment history for an application (with pagination) |
| `coolify_get_deployment` | Get deployment details |
| `coolify_trigger_deploy` | [WRITE] Trigger a deployment (POST `/deploy`) |
| `coolify_cancel_deployment` | [WRITE] Cancel a running deployment |

### Application Env Vars (4)

| Tool | Description |
|------|-------------|
| `coolify_list_envs` | List env vars for an application |
| `coolify_create_env` | [WRITE] Create an env var |
| `coolify_update_envs_bulk` | [WRITE] Bulk update env vars |
| `coolify_delete_env` | [DESTRUCTIVE] Delete an env var |

### Service Env Vars (4)

| Tool | Description |
|------|-------------|
| `coolify_list_service_envs` | List env vars for a service |
| `coolify_create_service_env` | [WRITE] Create a service env var |
| `coolify_update_service_envs_bulk` | [WRITE] Bulk update service env vars |
| `coolify_delete_service_env` | [DESTRUCTIVE] Delete a service env var |

### Database Env Vars (4)

| Tool | Description |
|------|-------------|
| `coolify_list_database_envs` | List env vars for a database |
| `coolify_create_database_env` | [WRITE] Create a database env var |
| `coolify_update_database_envs_bulk` | [WRITE] Bulk update database env vars |
| `coolify_delete_database_env` | [DESTRUCTIVE] Delete a database env var |

### Storages (12)

| Tool | Description |
|------|-------------|
| `coolify_list_application_storages` | List application persistent + file storages |
| `coolify_create_application_storage` | [WRITE] Create storage (`type`: persistent\|file) |
| `coolify_update_application_storage` | [WRITE] Update storage (body: uuid + type) |
| `coolify_delete_application_storage` | [DESTRUCTIVE] Delete application storage |
| `coolify_list_database_storages` | List database storages |
| `coolify_create_database_storage` | [WRITE] Create database storage |
| `coolify_update_database_storage` | [WRITE] Update database storage |
| `coolify_delete_database_storage` | [DESTRUCTIVE] Delete database storage |
| `coolify_list_service_storages` | List service storages |
| `coolify_create_service_storage` | [WRITE] Create service storage (`resource_uuid` required) |
| `coolify_update_service_storage` | [WRITE] Update service storage |
| `coolify_delete_service_storage` | [DESTRUCTIVE] Delete service storage |

### Volume Backups (9)

| Tool | Description |
|------|-------------|
| `coolify_set_application_storage_backup` | [WRITE] Create/replace application volume backup schedule |
| `coolify_run_application_storage_backup` | [WRITE] Run on-demand application volume backup |
| `coolify_delete_application_storage_backup` | [DESTRUCTIVE] Delete application volume backup schedule |
| `coolify_set_database_storage_backup` | [WRITE] Create/replace database volume backup schedule |
| `coolify_run_database_storage_backup` | [WRITE] Run on-demand database volume backup |
| `coolify_delete_database_storage_backup` | [DESTRUCTIVE] Delete database volume backup schedule |
| `coolify_set_service_storage_backup` | [WRITE] Create/replace service volume backup schedule |
| `coolify_run_service_storage_backup` | [WRITE] Run on-demand service volume backup |
| `coolify_delete_service_storage_backup` | [DESTRUCTIVE] Delete service volume backup schedule |

### Scheduled Tasks (10)

| Tool | Description |
|------|-------------|
| `coolify_list_application_scheduled_tasks` | List application tasks |
| `coolify_create_application_scheduled_task` | [WRITE] Create an application task |
| `coolify_update_application_scheduled_task` | [WRITE] Update an application task |
| `coolify_delete_application_scheduled_task` | [DESTRUCTIVE] Delete an application task |
| `coolify_list_application_scheduled_task_executions` | List application task executions |
| `coolify_list_service_scheduled_tasks` | List service tasks |
| `coolify_create_service_scheduled_task` | [WRITE] Create a service task |
| `coolify_update_service_scheduled_task` | [WRITE] Update a service task |
| `coolify_delete_service_scheduled_task` | [DESTRUCTIVE] Delete a service task |
| `coolify_list_service_scheduled_task_executions` | List service task executions |

### GitHub Apps (6)

| Tool | Description |
|------|-------------|
| `coolify_list_github_apps` | List GitHub integrations |
| `coolify_create_github_app` | [WRITE] Create an integration |
| `coolify_update_github_app` | [WRITE] Update an integration |
| `coolify_delete_github_app` | [DESTRUCTIVE] Delete an integration |
| `coolify_list_github_app_repositories` | List accessible repositories |
| `coolify_list_github_app_branches` | List repository branches |

### Logs (3)

| Tool | Description |
|------|-------------|
| `coolify_get_logs` | Get application logs with filtering |
| `coolify_get_database_logs` | Get database logs with filtering |
| `coolify_get_service_logs` | Get service logs with filtering |

### System (3)

| Tool | Description |
|------|-------------|
| `coolify_get_version` | Get Coolify instance version |
| `coolify_healthcheck` | Check if Coolify is healthy |
| `coolify_list_resources` | List resources across projects |

### Audit Log (1)

Coolify v4.4+. Requires a team admin/owner API token.

| Tool | Description |
|------|-------------|
| `coolify_list_audit_events` | List UI, API, MCP and webhook activity, newest first (`search`, `action`, `source`, `page`, `per_page`) |

### Secret Managers (2)

Coolify v4.4+. After linking, reference secrets in environment variables as `{{vault.KEY}}`.

| Tool | Description |
|------|-------------|
| `coolify_create_integration_token` | [WRITE] Store a Doppler, Infisical, or HashiCorp Vault token for the team |
| `coolify_update_application_secret_manager` | [WRITE] Link an application to a secret manager token |

### Instance Email Settings (2)

Verified on Coolify v4.3.23. Requires a root-team admin/owner API token. Reading secret values requires `read:sensitive` or `root`; updating requires `write:sensitive`.

| Tool | Description |
|------|-------------|
| `coolify_get_instance_email_settings` | Read instance-wide SMTP and Resend settings |
| `coolify_update_instance_email_settings` | [WRITE] Update SMTP/Resend settings; `null` clears nullable fields |

### Teams (5)

| Tool | Description |
|------|-------------|
| `coolify_list_teams` | List all teams |
| `coolify_get_current_team` | Get token team (`GET /team`) |
| `coolify_update_current_team` | [WRITE] Set the build server fallback of the token team (v4.4+) |
| `coolify_get_current_team_members` | List token team members (`GET /team/members`) |
| `coolify_get_team_members` | List members of a team by ID |

## Available Resources

| URI | Description |
|-----|-------------|
| `coolify://applications` | List of all applications |
| `coolify://databases` | List of all databases |
| `coolify://services` | List of all services |
| `coolify://servers` | List of all servers |
| `coolify://deployments` | List of all deployments |
| `coolify://projects` | List of all projects |
| `coolify://private-keys` | List of all SSH private keys |

## Available Prompts

| Prompt | Description |
|--------|-------------|
| `troubleshoot_deployment` | Step-by-step guide to debug a failed deployment |
| `infrastructure_overview` | Get a complete overview of all infrastructure |
| `deploy_application` | Guided workflow to deploy an application |
| `setup_new_application` | Guided workflow to create and configure a new app |

## Safety Modes

| Variable | Description |
|----------|-------------|
| `COOLIFY_READONLY=true` | Only read operations available (list, get, logs) |
| `COOLIFY_REQUIRE_CONFIRM=true` | Destructive operations require `confirm: true` |

## Log Filtering

The `coolify_get_logs`, `coolify_get_application_preview_logs`, `coolify_get_database_logs`, and `coolify_get_service_logs` tools support:

- `level`: Minimum log level (debug, info, warn, error, fatal)
- `since`/`until`: ISO 8601 timestamps for time range
- `search`: Case-insensitive text search
- `lines`: Server lines to fetch (defaults to `limit`, up to 10000; `"all"` or `-1` fetches all)
- `show_timestamps`: Include server timestamps (default true)
- `limit`: Max filtered entries returned (default 100, max 1000)
- `tail`: Get most recent logs
- `service_name` (application and preview logs, v4.4+): Compose service whose container to read

Coolify v4.4+ only serves logs to tokens with the `read:sensitive` ability.

## API Compatibility Notes for 4.2.0

- **Logs need `read:sensitive` on Coolify v4.4+.** A token with only `read` gets `403` from every log tool. Create a new token with `read:sensitive`, or `root`.
- `instant_deploy` on application, database and service creation, and on application updates, needs the `deploy` ability on Coolify v4.4+.
- Servers have a `server_role` (`deployment`, `build`, `both`). `is_build_server` still works but is deprecated; sending both with different meanings fails before the request.
- Scheduled task `timeout` is limited to 1-36000 seconds, as Coolify v4.4 validates it.
- Database start and restart answer `409` while another start, restart or import runs.
- The multipart upload endpoint for imports (`POST .../imports/uploads`, up to 10 GiB) is not wrapped. Use `source: "s3"` or `source: "server"`, or upload the file yourself and pass its `upload_id`.

## API Compatibility Notes for 4.1.0

- Storage creation/update no longer accepts `host_path`. Calls supplying it receive a migration error before contacting Coolify. Use a named `type: "persistent"` volume, or create `type: "file"` with `fs_path` and either `is_directory: true` or `is_host_file: true`. Existing mount sources cannot be changed through the update endpoint.
- `coolify_create_database_backup` now requires `frequency` and creates a schedule; set `backup_now: true` to also execute it immediately. The result includes the schedule UUID. Create/update support retention, S3 (`s3_storage_uuid`), timeout, and `missing_backup_notification_days` (0 disables alerts). The unsupported update fields `s3_storage_id` and `database_name_prefix` have been removed.
- Preview-domain updates replace the entire domain configuration. Supply exactly one of `domains` (regular app; `null` clears it) or `docker_compose_domains` (Compose app; `[]` clears it).

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `COOLIFY_API_URL` | Yes | Coolify API URL (e.g. `http://your-server:8000/api/v1`) |
| `COOLIFY_TOKEN` | Yes | Bearer token from Coolify dashboard |
| `COOLIFY_TIMEOUT` | No | Request timeout in ms (default: 30000) |
| `COOLIFY_READONLY` | No | Read-only mode (default: false) |
| `COOLIFY_REQUIRE_CONFIRM` | No | Require confirmation for destructive ops (default: false) |
| `DEBUG` | No | Enable debug logging (default: false) |

## Development

```bash
pnpm install             # Install dependencies
pnpm run dev             # Watch mode
pnpm run inspect         # MCP Inspector
pnpm run check           # Lint + typecheck + test
pnpm test                # Run tests only
```

## License

MIT

TDQS

B3.1/5.0

Scored across 136 tools

Disambiguation3/5

The resource-prefixed tool families (application/service/database/server) are mostly distinct, but several tools overlap or are inconsistently qualified. For example, coolify_get_logs and coolify_list_envs apply specifically to applications while database/service variants are explicitly named, and backup/storage/import tools across resources can be confused. An agent can usually infer intent, but the volume of parallel triplets creates real misselection risk.

Naming Consistency4/5

The overwhelming majority of tools follow a predictable coolify_verb_noun pattern in snake_case, with clear resource qualifiers like coolify_list_application_scheduled_tasks. Minor deviations exist, such as coolify_healthcheck, coolify_get_logs, and coolify_trigger_deploy, which are less structurally consistent than the rest.

Tool Count2/5

136 tools is far too many for practical agent selection, even for a broad platform like Coolify. Many operations are repeated across applications, services, and databases in parallel triplets, and consolidation into resource-scoped or parameterized tools would substantially reduce the surface.

Completeness5/5

The surface covers lifecycle operations across applications, databases, services, servers, projects, environments, storages, backups, deployments, previews, scheduled tasks, GitHub Apps, registries, teams, private keys, and instance settings. CRUD, start/stop/restart, logs, backup/import, and deployment control are all represented, leaving no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues