UNPKG

@masonator/coolify-mcp

Version:

MCP server implementation for Coolify

933 lines (932 loc) 25.7 kB
/** * Coolify MCP Server Type Definitions * Complete type definitions for the Coolify API v1 */ export interface CoolifyConfig { baseUrl: string; accessToken: string; } export interface ErrorResponse { error?: string; message: string; status?: number; errors?: Record<string, string[] | string>; } export interface DeleteOptions { deleteConfigurations?: boolean; deleteVolumes?: boolean; dockerCleanup?: boolean; deleteConnectedNetworks?: boolean; } export interface MessageResponse { message: string; } export interface UuidResponse { uuid: string; } export interface Server { id: number; uuid: string; name: string; description?: string; ip: string; user: string; port: number; status?: 'running' | 'stopped' | 'error' | 'unknown'; is_reachable?: boolean; is_usable?: boolean; is_swarm_manager?: boolean; is_swarm_worker?: boolean; is_build_server?: boolean; validation_logs?: string; log_drain_notification_sent?: boolean; high_disk_usage_notification_sent?: boolean; unreachable_notification_sent?: boolean; unreachable_count?: number; proxy_type?: 'traefik' | 'caddy' | 'none'; proxy_status?: string; settings?: ServerSettings; team_id?: number; created_at: string; updated_at: string; } export interface ServerSettings { id: number; server_id: number; concurrent_builds: number; dynamic_timeout: number; force_disabled: boolean; force_docker_cleanup: boolean; docker_cleanup_frequency: string; docker_cleanup_threshold: number; is_cloudflare_tunnel: boolean; is_jump_server: boolean; is_logdrain_axiom_enabled: boolean; is_logdrain_highlight_enabled: boolean; is_logdrain_custom_enabled: boolean; is_logdrain_newrelic_enabled: boolean; is_metrics_enabled: boolean; is_reachable: boolean; is_sentinel_enabled: boolean; is_swarm_manager: boolean; is_swarm_worker: boolean; is_usable: boolean; wildcard_domain?: string; created_at: string; updated_at: string; } export interface ServerResource { id: number; uuid: string; name: string; type: 'application' | 'database' | 'service'; status: string; created_at: string; updated_at: string; } export interface ServerDomain { ip: string; domains: string[]; } export interface ServerValidation { message: string; validation_logs?: string; } export interface CreateServerRequest { name: string; description?: string; ip: string; port?: number; user?: string; private_key_uuid: string; is_build_server?: boolean; instant_validate?: boolean; } export interface UpdateServerRequest { name?: string; description?: string; ip?: string; port?: number; user?: string; private_key_uuid?: string; is_build_server?: boolean; } export interface Project { id: number; uuid: string; name: string; description?: string; team_id?: number; environments?: Environment[]; created_at?: string; updated_at?: string; } export interface CreateProjectRequest { name: string; description?: string; } export interface UpdateProjectRequest { name?: string; description?: string; } export interface Environment { id: number; uuid: string; name: string; description?: string; project_id?: number; project_uuid?: string; created_at: string; updated_at: string; } export interface CreateEnvironmentRequest { name: string; description?: string; } export type BuildPack = 'nixpacks' | 'static' | 'dockerfile' | 'dockercompose' | 'dockerimage'; export interface Application { id: number; uuid: string; name: string; description?: string; fqdn?: string; git_repository?: string; git_branch?: string; git_commit_sha?: string; build_pack?: BuildPack; ports_exposes?: string; ports_mappings?: string; dockerfile?: string; dockerfile_location?: string; docker_registry_image_name?: string; docker_registry_image_tag?: string; docker_compose_location?: string; docker_compose_raw?: string; docker_compose_custom_start_command?: string; docker_compose_custom_build_command?: string; base_directory?: string; publish_directory?: string; install_command?: string; build_command?: string; start_command?: string; health_check_enabled?: boolean; health_check_path?: string; health_check_port?: number; health_check_host?: string; health_check_method?: string; health_check_return_code?: number; health_check_scheme?: string; health_check_response_text?: string; health_check_interval?: number; health_check_timeout?: number; health_check_retries?: number; health_check_start_period?: number; limits_memory?: string; limits_memory_swap?: string; limits_memory_swappiness?: number; limits_memory_reservation?: string; limits_cpus?: string; limits_cpuset?: string; limits_cpu_shares?: number; status?: 'running' | 'stopped' | 'error' | 'building' | 'deploying'; preview_url_template?: string; destination_type?: string; destination_id?: number; source_type?: string; source_id?: number; private_key_id?: number; environment_id?: number; project_uuid?: string; environment_uuid?: string; server_uuid?: string; created_at: string; updated_at: string; } export interface CreateApplicationPublicRequest { project_uuid: string; server_uuid: string; environment_name?: string; environment_uuid?: string; destination_uuid?: string; name?: string; description?: string; fqdn?: string; git_repository: string; git_branch: string; git_commit_sha?: string; build_pack: BuildPack; ports_exposes: string; ports_mappings?: string; base_directory?: string; publish_directory?: string; install_command?: string; build_command?: string; start_command?: string; instant_deploy?: boolean; } export interface CreateApplicationPrivateGHRequest extends Omit<CreateApplicationPublicRequest, 'build_pack' | 'ports_exposes'> { github_app_uuid: string; build_pack?: BuildPack; ports_exposes?: string; } export interface CreateApplicationPrivateKeyRequest extends Omit<CreateApplicationPublicRequest, 'build_pack' | 'ports_exposes'> { private_key_uuid: string; build_pack?: BuildPack; ports_exposes?: string; } export interface CreateApplicationDockerfileRequest { project_uuid: string; server_uuid: string; environment_name?: string; environment_uuid?: string; destination_uuid?: string; name?: string; description?: string; fqdn?: string; dockerfile: string; dockerfile_location?: string; ports_exposes?: string; ports_mappings?: string; base_directory?: string; instant_deploy?: boolean; } export interface CreateApplicationDockerImageRequest { project_uuid: string; server_uuid: string; environment_name?: string; environment_uuid?: string; destination_uuid?: string; name?: string; description?: string; fqdn?: string; docker_registry_image_name: string; docker_registry_image_tag?: string; ports_exposes: string; ports_mappings?: string; instant_deploy?: boolean; } export interface CreateApplicationDockerComposeRequest { project_uuid: string; server_uuid: string; environment_name?: string; environment_uuid?: string; destination_uuid?: string; name?: string; description?: string; docker_compose_raw: string; docker_compose_location?: string; docker_compose_custom_start_command?: string; docker_compose_custom_build_command?: string; instant_deploy?: boolean; } export interface UpdateApplicationRequest { name?: string; description?: string; fqdn?: string; git_repository?: string; git_branch?: string; git_commit_sha?: string; ports_exposes?: string; ports_mappings?: string; dockerfile?: string; dockerfile_location?: string; docker_registry_image_name?: string; docker_registry_image_tag?: string; docker_compose_raw?: string; docker_compose_location?: string; base_directory?: string; publish_directory?: string; install_command?: string; build_command?: string; start_command?: string; health_check_enabled?: boolean; health_check_path?: string; health_check_port?: number; health_check_host?: string; health_check_method?: string; health_check_return_code?: number; health_check_scheme?: string; health_check_response_text?: string; health_check_interval?: number; health_check_timeout?: number; health_check_retries?: number; health_check_start_period?: number; limits_memory?: string; limits_memory_swap?: string; limits_cpus?: string; is_http_basic_auth_enabled?: boolean; http_basic_auth_username?: string; http_basic_auth_password?: string; } export interface ApplicationActionResponse { message: string; deployment_uuid?: string; } export interface EnvironmentVariable { id: number; uuid: string; key: string; value: string; is_build_time: boolean; is_literal: boolean; is_multiline: boolean; is_preview: boolean; is_shared: boolean; is_shown_once: boolean; real_value?: string; version?: string; application_id?: number; service_id?: number; database_id?: number; created_at: string; updated_at: string; } export interface CreateEnvVarRequest { key: string; value: string; is_preview?: boolean; is_literal?: boolean; is_multiline?: boolean; is_shown_once?: boolean; is_build_time?: boolean; } export interface UpdateEnvVarRequest { key: string; value: string; is_preview?: boolean; is_literal?: boolean; is_multiline?: boolean; is_shown_once?: boolean; is_build_time?: boolean; } export interface BulkUpdateEnvVarsRequest { data: CreateEnvVarRequest[]; } export interface EnvVarSummary { uuid: string; key: string; value: string; is_build_time: boolean; } export type DatabaseType = 'postgresql' | 'mysql' | 'mariadb' | 'mongodb' | 'redis' | 'keydb' | 'clickhouse' | 'dragonfly'; export interface DatabaseLimits { memory?: string; memory_swap?: string; memory_swappiness?: number; memory_reservation?: string; cpus?: string; cpuset?: string; cpu_shares?: number; } export interface Database { id: number; uuid: string; name: string; description?: string; type: DatabaseType; status: 'running' | 'stopped' | 'error' | 'restarting'; is_public: boolean; public_port?: number; image: string; started_at?: string; internal_db_url?: string; external_db_url?: string; project_uuid?: string; environment_uuid?: string; environment_name?: string; server_uuid?: string; limits?: DatabaseLimits; created_at: string; updated_at: string; postgres_user?: string; postgres_password?: string; postgres_db?: string; postgres_initdb_args?: string; postgres_host_auth_method?: string; postgres_conf?: string; mysql_root_password?: string; mysql_user?: string; mysql_password?: string; mysql_database?: string; mariadb_root_password?: string; mariadb_user?: string; mariadb_password?: string; mariadb_database?: string; mariadb_conf?: string; mongo_initdb_root_username?: string; mongo_initdb_root_password?: string; mongo_initdb_database?: string; mongo_conf?: string; redis_password?: string; redis_conf?: string; keydb_password?: string; keydb_conf?: string; clickhouse_admin_user?: string; clickhouse_admin_password?: string; dragonfly_password?: string; } export interface UpdateDatabaseRequest { name?: string; description?: string; image?: string; is_public?: boolean; public_port?: number; limits_memory?: string; limits_memory_swap?: string; limits_memory_swappiness?: number; limits_memory_reservation?: string; limits_cpus?: string; limits_cpuset?: string; limits_cpu_shares?: number; postgres_user?: string; postgres_password?: string; postgres_db?: string; postgres_initdb_args?: string; postgres_host_auth_method?: string; postgres_conf?: string; mysql_root_password?: string; mysql_user?: string; mysql_password?: string; mysql_database?: string; mariadb_root_password?: string; mariadb_user?: string; mariadb_password?: string; mariadb_database?: string; mariadb_conf?: string; mongo_initdb_root_username?: string; mongo_initdb_root_password?: string; mongo_initdb_database?: string; mongo_conf?: string; redis_password?: string; redis_conf?: string; keydb_password?: string; keydb_conf?: string; clickhouse_admin_user?: string; clickhouse_admin_password?: string; dragonfly_password?: string; } export interface CreateDatabaseBaseRequest { server_uuid: string; project_uuid: string; environment_name?: string; environment_uuid?: string; destination_uuid?: string; name?: string; description?: string; image?: string; is_public?: boolean; public_port?: number; limits_memory?: string; limits_memory_swap?: string; limits_memory_swappiness?: number; limits_memory_reservation?: string; limits_cpus?: string; limits_cpuset?: string; limits_cpu_shares?: number; instant_deploy?: boolean; } export interface CreatePostgresqlRequest extends CreateDatabaseBaseRequest { postgres_user?: string; postgres_password?: string; postgres_db?: string; postgres_initdb_args?: string; postgres_host_auth_method?: string; postgres_conf?: string; } export interface CreateMysqlRequest extends CreateDatabaseBaseRequest { mysql_root_password?: string; mysql_user?: string; mysql_password?: string; mysql_database?: string; mysql_conf?: string; } export interface CreateMariadbRequest extends CreateDatabaseBaseRequest { mariadb_root_password?: string; mariadb_user?: string; mariadb_password?: string; mariadb_database?: string; mariadb_conf?: string; } export interface CreateMongodbRequest extends CreateDatabaseBaseRequest { mongo_initdb_root_username?: string; mongo_initdb_root_password?: string; mongo_initdb_database?: string; mongo_conf?: string; } export interface CreateRedisRequest extends CreateDatabaseBaseRequest { redis_password?: string; redis_conf?: string; } export interface CreateKeydbRequest extends CreateDatabaseBaseRequest { keydb_password?: string; keydb_conf?: string; } export interface CreateClickhouseRequest extends CreateDatabaseBaseRequest { clickhouse_admin_user?: string; clickhouse_admin_password?: string; } export interface CreateDragonflyRequest extends CreateDatabaseBaseRequest { dragonfly_password?: string; } export interface CreateDatabaseResponse { uuid: string; } export interface DatabaseBackup { id: number; uuid: string; database_id: number; database_type: DatabaseType; status: 'pending' | 'running' | 'success' | 'failed'; filename?: string; size?: number; frequency: string; enabled: boolean; save_s3: boolean; s3_storage_id?: number; databases_to_backup?: string; dump_all: boolean; created_at: string; updated_at: string; } export interface CreateDatabaseBackupRequest { frequency: string; enabled?: boolean; save_s3?: boolean; s3_storage_uuid?: string; databases_to_backup?: string; dump_all?: boolean; database_backup_retention_days_locally?: number; database_backup_retention_days_s3?: number; database_backup_retention_amount_locally?: number; database_backup_retention_amount_s3?: number; } export interface UpdateDatabaseBackupRequest { frequency?: string; enabled?: boolean; save_s3?: boolean; s3_storage_uuid?: string; databases_to_backup?: string; dump_all?: boolean; database_backup_retention_days_locally?: number; database_backup_retention_days_s3?: number; database_backup_retention_amount_locally?: number; database_backup_retention_amount_s3?: number; } export interface BackupExecution { id: number; uuid: string; scheduled_database_backup_id: number; status: 'pending' | 'running' | 'success' | 'failed'; message?: string; size?: number; filename?: string; created_at: string; updated_at: string; } /** * Available one-click service types in Coolify. * This is a string type to avoid TypeScript memory issues with large const arrays. * Common types include: activepieces, appsmith, appwrite, authentik, ghost, gitea, * grafana, jellyfin, minio, n8n, nextcloud, pocketbase, supabase, uptime-kuma, * vaultwarden, wordpress-with-mariadb, wordpress-with-mysql, etc. */ export type ServiceType = string; export interface Service { id: number; uuid: string; name: string; description?: string; type: ServiceType; status: 'running' | 'stopped' | 'error' | 'restarting'; project_uuid?: string; environment_name?: string; environment_uuid?: string; server_uuid?: string; destination_uuid?: string; domains?: string[]; config_hash?: string; connect_to_docker_network?: boolean; created_at: string; updated_at: string; } export interface CreateServiceRequest { type?: ServiceType; name?: string; description?: string; project_uuid: string; environment_name?: string; environment_uuid?: string; server_uuid: string; destination_uuid?: string; instant_deploy?: boolean; docker_compose_raw?: string; } /** * CRITICAL: When updating services with Traefik basic auth labels * * 1. MANUAL STEP REQUIRED: You MUST disable "Escape characters in labels" in Coolify UI * - Navigate to: Service Settings > Advanced > Container Label Character Escaping * - This setting CANNOT be changed via API * - Without this, Coolify will double-escape $ signs, breaking htpasswd * * 2. Even with escaping disabled, Traefik still requires $$ in htpasswd hashes * - Correct: "user:$$apr1$$hash$$here" * - Wrong: "user:$apr1$hash$here" * - Docker Compose processes $$ $ for Traefik * * 3. docker_compose_raw is auto base64-encoded by the client pass raw YAML * * Summary for htpasswd with basic auth: * - Generate hash: htpasswd -nb username password * - Replace $ with $$ in the hash * - Disable label escaping in Coolify UI (manual step!) */ export interface UpdateServiceRequest { name?: string; description?: string; docker_compose_raw?: string; } export interface ServiceCreateResponse { uuid: string; domains: string[]; } export interface Deployment { id: number; uuid: string; application_id?: number; application_uuid?: string; application_name?: string; deployment_uuid: string; pull_request_id?: number; force_rebuild: boolean; commit?: string; status: 'queued' | 'in_progress' | 'finished' | 'failed' | 'cancelled'; is_webhook: boolean; is_api: boolean; logs?: string; current_process_id?: string; restart_only: boolean; git_type?: string; server_id?: number; server_name?: string; created_at: string; updated_at: string; } export interface DeployByTagRequest { tag?: string; uuid?: string; force?: boolean; } export interface Team { id: number; uuid?: string; name: string; description?: string; personal_team: boolean; show_boarding?: boolean; custom_server_limit?: number; members?: TeamMember[]; created_at: string; updated_at: string; } export interface TeamMember { id: number; name: string; email: string; role?: 'owner' | 'admin' | 'member' | 'readonly'; created_at: string; updated_at: string; } export interface PrivateKey { id: number; uuid: string; name: string; description?: string; private_key: string; public_key?: string; fingerprint?: string; is_git_related: boolean; team_id: number; created_at: string; updated_at: string; } export interface CreatePrivateKeyRequest { name: string; description?: string; private_key: string; } export interface UpdatePrivateKeyRequest { name?: string; description?: string; private_key?: string; } export interface GitHubApp { id: number; uuid: string; name: string; organization: string | null; api_url: string; html_url: string; custom_user: string; custom_port: number; app_id: number | null; installation_id: number | null; client_id: string | null; is_system_wide: boolean; is_public: boolean; private_key_id: number | null; team_id: number; type: string; administration: string | null; contents: string | null; metadata: string | null; pull_requests: string | null; created_at: string; updated_at: string; } export interface CreateGitHubAppRequest { name: string; api_url: string; html_url: string; app_id: number; installation_id: number; client_id: string; client_secret: string; private_key_uuid: string; organization?: string; custom_user?: string; custom_port?: number; webhook_secret?: string; is_system_wide?: boolean; } export interface UpdateGitHubAppRequest { name?: string; organization?: string; api_url?: string; html_url?: string; custom_user?: string; custom_port?: number; app_id?: number; installation_id?: number; client_id?: string; client_secret?: string; webhook_secret?: string; private_key_uuid?: string; is_system_wide?: boolean; } export interface GitHubAppUpdateResponse { message: string; data: GitHubApp; } export type CloudProvider = 'hetzner' | 'digitalocean'; export interface CloudToken { id: number; uuid: string; name: string; provider: CloudProvider; team_id: number; servers_count?: number; created_at: string; updated_at: string; } export interface CreateCloudTokenRequest { provider: CloudProvider; token: string; name: string; } export interface UpdateCloudTokenRequest { name?: string; } export interface CloudTokenValidation { valid: boolean; message: string; } export interface Version { version: string; } export interface HealthCheck { status: 'healthy' | 'unhealthy'; version?: string; } export type DiagnosticHealthStatus = 'healthy' | 'unhealthy' | 'unknown'; export interface ApplicationDiagnostic { application: { uuid: string; name: string; status: string; fqdn: string | null; git_repository: string | null; git_branch: string | null; } | null; health: { status: DiagnosticHealthStatus; issues: string[]; }; logs: string | null; environment_variables: { count: number; variables: Array<{ key: string; is_build_time: boolean; }>; }; recent_deployments: Array<{ uuid: string; status: string; created_at: string; }>; errors?: string[]; } export interface ServerDiagnostic { server: { uuid: string; name: string; ip: string; status: string | null; is_reachable: boolean | null; } | null; health: { status: DiagnosticHealthStatus; issues: string[]; }; resources: Array<{ uuid: string; name: string; type: string; status: string; }>; domains: Array<{ ip: string; domains: string[]; }>; validation: { message: string; validation_logs?: string; } | null; errors?: string[]; } export interface InfrastructureIssue { type: 'application' | 'database' | 'service' | 'server'; uuid: string; name: string; issue: string; status: string; } export interface InfrastructureIssuesReport { summary: { total_issues: number; unhealthy_applications: number; unhealthy_databases: number; unhealthy_services: number; unreachable_servers: number; }; issues: InfrastructureIssue[]; errors?: string[]; } export interface BatchOperationResult { summary: { total: number; succeeded: number; failed: number; }; succeeded: Array<{ uuid: string; name: string; }>; failed: Array<{ uuid: string; name: string; error: string; }>; } export interface ResponseAction { tool: string; args: Record<string, string | number | boolean>; hint: string; } export interface ResponsePagination { next?: { tool: string; args: Record<string, number>; }; prev?: { tool: string; args: Record<string, number>; }; } export interface DeploymentEssential { uuid: string; deployment_uuid: string; application_uuid?: string; application_name?: string; server_name?: string; status: string; commit?: string; force_rebuild: boolean; is_webhook: boolean; is_api: boolean; created_at: string; updated_at: string; logs_available?: boolean; logs_info?: string; }