dokploy-mcp-server
Use one MCP server to deploy and operate Dokploy-managed apps, databases, Docker resources, backups, and infrastructure via AI assistants.
Manage projects and environments: list/get/create/update/remove/duplicate and discover nested services.
Run full application lifecycle: create/update/deploy/start/stop/delete, logs, monitoring, env vars, search, and nginx quickstart.
Manage Docker Compose services: lifecycle, deployments, fresh-volume deploys, logs, env vars, mounts, and search.
Administer all databases (postgres, mysql, mariadb, mongo, redis, libsql): CRUD, start/stop/deploy/rebuild, env vars, external ports, search.
Configure domains, redirects, DNS providers/records, certificates, ports, and basic auth.
Track deployments and preview deployments: list, queue, kill, logs, remove, redeploy.
Handle backups: DB-native backups, scheduled volume backups, S3 destinations, list files, manual runs.
Control Docker: containers, container files, images, volumes, networks, events, health, disk usage, build cache.
Manage servers, SSH keys, cron schedules, vault providers, registries, and system settings.
Read audit logs and fleet-wide overviews for services, backups, and domains.
Get server identity/build info via the info tool.
Supports Bitbucket as a source for application and compose deployments, with provider-specific fields not yet fully exposed.
Provides management of Docker containers, images, and Compose stacks, including deployment, removal, and container discovery.
Supports Gitea as a source for application and compose deployments, with provider-specific fields not yet fully exposed.
Integrates with GitHub as a source for application and compose deployments, allowing repository-based deployments.
Supports GitLab as a source for application and compose deployments, with provider-specific fields not yet fully exposed.
Supports Heroku buildpacks as a build type for application deployments.
Allows creation and management of MariaDB databases, including backups and configuration.
Allows creation and management of MySQL databases, including backups and configuration.
Allows creation and management of PostgreSQL databases, including backups and configuration.
Allows creation and management of Redis databases, including configuration.
Click on "Deploy 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., "@dokploy-mcp-server list my projects"
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.
dokploy-mcp-server
A comprehensive Model Context Protocol (MCP) server for Dokploy - the open-source, self-hosted PaaS. Deploy apps, manage containers, databases, domains, and servers through AI assistants like Claude.
Why This Server?
Tracks Dokploy v0.30.8. Tools are built against the v0.30.8 OpenAPI spec (604 paths). The comparison below was measured on 2026-10-03.
The official Dokploy MCP generates one tool per API endpoint. Its latest release, @dokploy/mcp@0.30.7, exposes 604 tools, one for each of the 604 paths in Dokploy's v0.30.8 OpenAPI spec. Coverage is complete, and every one of those schemas loads into the model's context before you ask your first question.
This server hand-curates the same API into 27 tools (one per category, each taking an action enum), covering the deploy-and-operate surface most self-hosters use daily.
Context cost
Official | This server | |
Tools exposed | 604 | 28 (27 + |
| 319,143 bytes | 51,974 bytes |
Approximate tokens loaded up front | ~80k | ~13k |
Median tool schema | 387 bytes | 1,257 bytes |
Measured 2026-10-03 against @dokploy/mcp@0.30.7 (the latest published) and this server's build tracking Dokploy v0.30.8. Each server was started over stdio, sent tools/list, and its serialized tool array counted in bytes (divided by 4 for a rough token estimate).
On a 200k-token context window, the official server spends about 40% of it before you ask anything; this server spends about 6.5%. The larger median schema here is deliberate: descriptions carry the workflow knowledge that prevents failed calls, such as which service id pairs with which databaseType.
Feature Comparison
Tool counts for the official server are per category, taken from its live tools/list at @dokploy/mcp@0.30.7.
Category | Official MCP | This Server |
Projects | 11 tools | 1 tool (6 actions) |
Applications | 32 tools | 1 tool (24 actions) |
Compose | 31 tools | 1 tool (21 actions) |
Deployments | 9 tools | 1 tool (5 actions) |
Docker | 21 tools (incl. disk usage) | 1 tool (17 actions) |
Docker Volumes | 8 tools | 1 tool (8 actions) |
Docker Images | 3 tools | 1 tool (3 actions) |
Networks | 9 tools | 1 tool (9 actions) |
Overview | 3 tools | 1 tool (3 actions) |
DNS Providers | 11 tools | 1 tool (11 actions) |
Vault Providers | 7 tools | 1 tool (7 actions) |
Domains | 10 tools | 1 tool (9 actions) |
Redirects | 4 tools | 1 tool (4 actions) |
Servers | 19 tools | 1 tool (9 actions) |
Settings | 52 tools | 1 tool (5 actions) |
Databases | 94 tools (6 engines) | 1 tool (17 actions, all 6 DB) |
Backups | 12 tools | 1 tool (6 actions) |
Volume Backups | 6 tools | 1 tool (6 actions) |
Preview Deployments | 4 tools | 1 tool (4 actions) |
Schedules | 6 tools | 1 tool (6 actions) |
Audit Log | 1 tool | 1 tool (1 action) |
Environments | 7 tools | 1 tool (6 actions) |
Infrastructure | 13 tools (ports, certs, auth) | 1 tool (8 actions) |
Mounts | 6 tools | 1 tool (6 actions) |
SSH Keys | 7 tools | 1 tool (6 actions) |
Registries | 7 tools | 1 tool (7 actions) |
Destinations | 6 tools | 1 tool (6 actions) |
Total | 399 tools | 27 tools |
Key advantages:
Minimal token usage - 399 endpoints' worth of surface in 27 tools, for about a sixth of the context
Unified database tool - One tool handles all 6 database types (postgres, mysql, mariadb, mongo, redis, libsql) via
dbType+actionparamsCurated descriptions - Each tool documents which parameters pair with which action, so calls succeed on the first try
Action-based design - Each tool has an
actionenum parameter; other params are optional based on action
When to use the official server instead
Of the official server's 604 tools, 399 fall inside the categories above; the remaining 205 have no equivalent here:
Notifications (41 tools) - email, Slack, Discord, Telegram, Gotify webhooks
Users, organizations, roles, SSO (67 tools) - user management, organizations, custom roles, SSO, SCIM, forwardAuth
Git providers (32 tools) - GitHub, GitLab, Gitea, Bitbucket app configuration
AI providers (14 tools) - Dokploy's own LLM integration for log analysis and compose generation
Cluster and Swarm (8 tools), patch (12), tags (8), rollback (2), admin (1)
Dokploy Cloud commercial features (20 tools) - Stripe billing, license keys, whitelabeling
If your workflow needs any of those, use the official server, or run both.
Related MCP server: Dokploy MCP Server
Installation
Claude Desktop / Claude Code
Add to your MCP configuration:
{
"mcpServers": {
"dokploy": {
"command": "npx",
"args": ["-y", "dokploy-mcp-server"],
"env": {
"DOKPLOY_URL": "https://dokploy.example.com",
"DOKPLOY_API_KEY": "your-api-key"
}
}
}
}Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"dokploy": {
"command": "npx",
"args": ["-y", "dokploy-mcp-server"],
"env": {
"DOKPLOY_URL": "https://dokploy.example.com",
"DOKPLOY_API_KEY": "your-api-key"
}
}
}
}Docker
docker run -e DOKPLOY_URL=https://dokploy.example.com \
-e DOKPLOY_API_KEY=your-api-key \
-e TRANSPORT_TYPE=httpStream \
-p 3000:3000 \
dokploy-mcp-serverEnvironment Variables
Variable | Required | Default | Description |
| Yes | - | Your Dokploy instance URL |
| Yes | - | API key from Dokploy Settings > API Keys |
| No |
| Transport mode: |
| No |
| HTTP port (httpStream mode only) |
| No |
| HTTP host (httpStream mode only) |
Tools (27)
Each tool uses an action enum to select the operation. Parameters are optional and used based on the chosen action.
dokploy_project (6 actions)
Actions: list | get | create | update | remove | duplicate
Manage projects. list and get return nested environments with their applications, composes, and databases (with names, IDs, and status), so you can discover service IDs without extra calls. create requires name. update requires projectId + fields. remove requires projectId. duplicate requires sourceEnvironmentId + name.
Reading the status label. Dokploy's status enum is idle | running | done | error, rendered as [IDLE], [RUNNING], [DONE], [ERROR]. It describes the deployment, not live container state — [DONE] means the last deploy finished, and [IDLE] means nothing has run, neither of which implies a container is up right now. Check dokploy_docker getContainers for what is actually running.
dokploy_application (24 actions)
Actions: create | get | update | move | deploy | start | stop | delete | markRunning | refreshToken | cleanQueues | killBuild | cancelDeployment | reload | saveEnvironment | setEnvVars | getEnvKeys | getEnvValuesUnsafe | saveBuildType | traefikConfig | readMonitoring | readLogs | search | deployNginxQuickstart
Full application lifecycle. Most actions require applicationId. create requires name + environmentId. deploy supports redeploy flag. readMonitoring requires appName. search finds applications by q/name/appName/repository/owner/dockerImage/projectId/environmentId, with limit (1–100, default 20) and offset; the reply flags a truncated page. deployNginxQuickstart takes environmentId (+ optional serverId) and creates and deploys a "Hello World" nginx demo app on a generated traefik.me domain — Dokploy's onboarding smoke test.
Env handling. get returns a masked env summary (count only) — never the values. Three actions cover the rest:
setEnvVars— granular merge inside the server. Passset(KEY=VALUE per line, upsert) and/orunset(array of KEY names). The read-modify-write happens server-side; the tool result is a masked confirmation listing only the changed key names. No untouched-key values ever enter the transcript.getEnvKeys— returns KEY names only, sorted. Safe to read.getEnvValuesUnsafe— unsafe escape hatch that returns the fullKEY=VALUEblob. Use only when you genuinely need the values; the output is in the tool transcript and any retained agent logs.saveEnvironment— full-replace, kept for explicit blob-set workflows.
sourceType:
github→repository+owner+branch(+githubIdfor private)git→customGitUrl+customGitBranchdocker→dockerImage
buildType: dockerfile | heroku_buildpacks | paketo_buildpacks | nixpacks | static | railpack.
The underlying API also supports gitlab/bitbucket/gitea/drop sources, but those need provider-specific fields not yet exposed by this tool.
dokploy_compose (21 actions)
Actions: create | get | update | delete | deploy | start | stop | move | loadServices | loadMounts | getDefaultCommand | cancelDeployment | cleanQueues | killBuild | refreshToken | saveEnvironment | setEnvVars | getEnvKeys | getEnvValuesUnsafe | readLogs | search
Docker Compose management. Most actions require composeId. create requires name + environmentId. deploy takes optional redeploy and freshVolumes — freshVolumes runs docker compose down --volumes first, deleting the service's volume data (docker-compose type only). loadMounts requires serviceName. cancelDeployment/cleanQueues/killBuild/refreshToken require composeId. search takes the same query fields as dokploy_application.
Env handling. Same shape as dokploy_application: get returns a masked summary, setEnvVars merges, getEnvKeys lists key names, getEnvValuesUnsafe is the escape hatch, saveEnvironment full-replaces.
sourceType:
github→repository+owner+branch(+composePath)git→customGitUrl+customGitBranch(+customGitSSHKeyIdfor private)raw→composeFile(inline YAML)
The underlying API also supports gitlab/bitbucket/gitea sources, but those need provider-specific fields not yet exposed by this tool.
dokploy_database (17 actions)
Actions: create | get | update | move | start | stop | deploy | rebuild | remove | reload | changeStatus | saveEnvironment | setEnvVars | getEnvKeys | getEnvValuesUnsafe | saveExternalPort | search
Unified database management. All actions require dbType (postgres | mysql | mariadb | mongo | redis | libsql); most also require databaseId. create baseline: dbType + name + environmentId + databasePassword.
Env handling. Same shape as dokploy_application: get returns a masked summary, setEnvVars merges (works for every engine), getEnvKeys lists key names, getEnvValuesUnsafe is the escape hatch.
Per-engine extras:
postgres/mysql/mariadb— also requiredatabaseName+databaseUser.mysql/mariadbacceptdatabaseRootPassword.mongo— requiresdatabaseUser(nodatabaseName).redis— onlydatabasePassword.libsql— requiresappName+dockerImage+sqldNode(primary | replica); acceptssqldPrimaryUrl+enableNamespaces.
changeStatus uses applicationStatus (idle | running | done | error). search covers every engine except libsql, which has no search endpoint — locate libsql databases via dokploy_project or dokploy_environment.
dokploy_domain (9 actions)
Actions: create | list | get | update | delete | toggleEnable | generate | canGenerateTraefikMe | validate
Domain/DNS management. create requires host + applicationId|composeId (and serviceName for compose domains). Enums: certificateType (letsencrypt | none | custom), domainType (compose | application | preview). validate requires domain and optionally takes serverId to check DNS against that server's IPs (Dokploy v0.30.8 replaced the old serverIp field).
update accepts enabled to set the domain's enable flag to a known value. toggleEnable flips that flag without reporting the result — the API returns an undescribed body — so prefer update when you need a deterministic end state.
dokploy_redirects (4 actions)
Actions: create | update | remove | get
URL redirect rules on an application, expressed as Traefik regex/replacement pairs. create requires regex + replacement + permanent + applicationId. update requires redirectId + the rule fields. remove/get require redirectId. Changes take effect only after the application is redeployed.
dokploy_environment (6 actions)
Actions: create | get | list | update | remove | duplicate
Project environment management. create requires projectId + name. list requires projectId.
dokploy_server (9 actions)
Actions: list | get | create | update | remove | count | publicIp | getMetrics | getServices
Server management. create requires name + ipAddress + port + username + sshKeyId + serverType (deploy | build). getMetrics requires url + token. getServices requires serverId and lists the applications, compose services and databases deployed there — check it before removing a server.
dokploy_backup (6 actions)
Actions: create | get | update | remove | listFiles | manualBackup
Backup scheduling and triggers. create requires schedule + prefix + destinationId + database + databaseType. Provide the one service id matching the engine:
databaseType: postgres→postgresIddatabaseType: mysql→mysqlIddatabaseType: mariadb→mariadbIddatabaseType: mongo→mongoIddatabaseType: libsql→libsqlIddatabaseType: web-server→ no service id (backs up the Dokploy server itself)Backing up a DB inside a compose stack →
composeId+serviceName+ the engine asdatabaseType
create and update also accept includeEncryptionKey, which stores the database encryption key alongside the backup.
manualBackup requires backupId + backupType:
postgres | mysql | mariadb | mongo | libsql— individual DB backupscompose— whole-stack backupwebServer— Dokploy server backup
dokploy_volume_backup (6 actions)
Actions: create | update | remove | get | list | runManually
Scheduled volume-level backups, taken with rclone. Distinct from dokploy_backup, which takes DB-native dumps.
create requires name + volumeName + prefix + cronExpression + destinationId, and accepts serviceType with the matching *Id, plus appName, keepLatestCount, enabled, and turnOff (stops the service for the backup window). volumeName must match ^[a-zA-Z0-9][a-zA-Z0-9_.-]*$ — it is validated before the request is sent. update takes volumeBackupId plus the same fields. remove/get take volumeBackupId. list requires id (the parent service id) + volumeBackupType. runManually triggers a backup immediately from volumeBackupId.
dokploy_deployment (5 actions)
Actions: list | queueList | killProcess | readLogs | remove
Deployment tracking. list requires applicationId|composeId|serverId|type+id. type enum: application | compose | server | schedule | previewDeployment | backup | volumeBackup (database deployments are listed via the database resource itself, not this endpoint). queueList requires applicationId. killProcess requires deploymentId. readLogs reads a single deployment's log file. remove deletes a deployment record.
dokploy_preview_deployment (4 actions)
Actions: list | get | remove | redeploy
Per-PR and per-branch preview deploys hanging off a parent application. list requires applicationId. get/remove/redeploy require previewDeploymentId; redeploy optionally takes title and description for the deploy record.
dokploy_schedule (6 actions)
Actions: create | update | remove | get | list | runManually
Cron schedules that run commands against an application, a compose service, a server, or the Dokploy server itself. create requires name + cronExpression + command, plus scheduleType and its matching id; it also accepts shellType (bash | sh), script for multi-line commands, and timezone. list requires id (the parent id, or dokploy-server) + scheduleType. runManually fires a schedule immediately from scheduleId.
scheduleType: application | compose | server | dokploy-server.
dokploy_docker (17 actions)
Actions: getContainers | restartContainer | startContainer | stopContainer | killContainer | removeContainer | getConfig | findContainers | listContainerFiles | readContainerFile | writeContainerFile | deleteContainerFile | getEvents | getServerHealth | getDiskUsage | getBuildCache | pruneBuildCache
Docker daemon management. Every action accepts an optional serverId to target a remote server.
Containers. The lifecycle actions (restart/start/stop/kill/removeContainer) and getConfig take containerId. findContainers requires appName + method (match | label | stack | service). For method=match, appType accepts stack | docker-compose. For method=label, type is required and accepts standalone | swarm (the API rejects without it).
Container files. listContainerFiles, readContainerFile, writeContainerFile, and deleteContainerFile take containerId + path (absolute, inside the container); writeContainerFile also takes content. readContainerFile truncates its output at 100,000 characters. writeContainerFile writes into the running container — the change is lost on redeploy unless the path lives on a mount.
Observability. getEvents takes minutes (1–1440, default 15). getServerHealth takes sinceHours (1–168).
Disk. getDiskUsage is docker system df — it covers containers, volumes, images, and build cache, so start here when hunting space. getBuildCache details the cache; pruneBuildCache clears it (the same effect as dokploy_settings clean with cleanType=dockerBuilder).
dokploy_docker_volume (8 actions)
Actions: getVolumes | getVolumesSize | getVolumeConfig | removeVolume | listVolumeFiles | readVolumeFile | writeVolumeFile | deleteVolumeFile
Docker volume management and volume file access. Every action accepts an optional serverId. getVolumeConfig and removeVolume take volumeName; the file actions take volumeName + path, and writeVolumeFile also takes content. readVolumeFile truncates at 100,000 characters. removeVolume destroys the volume's data — take a dokploy_volume_backup first. Unlike a write into a running container, a volume write survives redeploys.
dokploy_docker_image (3 actions)
Actions: getImages | getImageConfig | removeImage
Docker image inventory. getImageConfig takes imageRef (nginx:latest or an image ID). removeImage requires all three of repository, tag, and id — read them off getImages — plus optional force. Disk usage and build cache live in dokploy_docker (getDiskUsage, getBuildCache, pruneBuildCache).
dokploy_network (9 actions)
Actions: list | get | create | remove | recreate | resync | inspect | import | networksToSync
Docker network management. create requires name and accepts driver (bridge | overlay), internal, attachable, enableIPv4, enableIPv6, mtu (68–65535), ipam, and serverId. get, inspect, remove, recreate, and resync take networkId — recreate drops and re-adds the network, so attached services are briefly disconnected; resync re-reads the network from Docker and refreshes Dokploy's stored record without touching the network. networksToSync lists networks that exist on the Docker host but are not yet tracked by Dokploy; import brings them in by names. Attach networks to workloads via dokploy_application update networkIds, or dokploy_compose update serviceNetworks.
dokploy_overview (3 actions)
Actions: services | backups | domains
Read-only rollups spanning every project — no parameters. Use these to orient before drilling in: services lists every application, compose service, and database with its status; backups every configured backup and schedule; domains every domain and what it points at. Dokploy's OpenAPI spec does not describe these response bodies, so the tool renders them as JSON.
Prefer this over search for inventory. Dokploy's search index is narrower than the project tree — on a test instance holding 1 application and 14 compose services, application.search reported 0 matches and compose.search reported 5. The search actions on dokploy_application, dokploy_compose, and dokploy_database are for finding a service you already know exists; dokploy_overview and dokploy_project are for enumerating what is there.
dokploy_infrastructure (8 actions)
Actions: createPort | deletePort | createAuth | deleteAuth | listCerts | getCert | createCert | removeCert
Ports, basic auth, and SSL certificates.
dokploy_mounts (6 actions)
Actions: create | update | remove | get | listByServiceId | allNamedByApplicationId
Volumes, bind mounts, and file mounts attached to a service. create requires type + mountPath + serviceId + serviceType, then one field per type: volumeName for a volume, hostPath for a bind, filePath + content for a file. update takes mountId plus any field. remove/get take mountId. listByServiceId requires serviceType + serviceId. allNamedByApplicationId lists named volumes for an applicationId.
serviceType: application | postgres | mysql | mariadb | mongo | redis | compose | libsql.
Mount changes require a redeploy of the parent service to take effect.
dokploy_ssh_key (6 actions)
Actions: create | list | get | update | remove | generate
SSH key management for git-based deployments. create requires name + privateKey + publicKey + organizationId. get requires sshKeyId. update requires sshKeyId, optional name, description, lastUsedAt. remove requires sshKeyId. generate uses type (rsa|ed25519).
dokploy_registry (7 actions)
Actions: list | get | create | update | remove | test | testById
Container registries for pulling private images. create requires registryName + username + password + registryUrl; registryType defaults to cloud. get/remove require registryId, update takes registryId + fields. test checks credentials without persisting them; testById tests a saved registry by registryId, optionally against a serverId.
dokploy_destination (6 actions)
Actions: list | get | create | update | remove | test
S3-compatible destinations that backups are written to. create requires name + accessKey + bucket + region + endpoint + secretAccessKey, and accepts provider and additionalFlags (passed to rclone). get/remove require destinationId, update takes destinationId + fields. test validates the same fields as create without saving.
dokploy_audit_log (1 action)
Actions: list
Query the Dokploy audit trail. Every filter is optional: userId, userEmail, resourceName, auditAction, resourceType, from/to (ISO timestamps), limit (default 50, max 500), and offset.
auditAction: create | update | delete | deploy | cancel | redeploy | login | logout.
resourceType: project | service | environment | deployment | user | customRole | domain | certificate | registry | server | sshKey | gitProvider | notification | settings | session.
The wire-level query parameter is named action; this tool exposes it as auditAction so it does not collide with the action discriminator every tool uses.
dokploy_dns_provider (11 actions)
Actions: list | get | create | update | remove | testConnection | listZones | listRecords | createRecord | updateRecord | deleteRecord
DNS provider credentials plus zone and record management. config is discriminated on providerType: cloudflare (apiToken), route53 (accessKeyId, secretAccessKey), porkbun (apiKey, secretApiKey), infomaniak (apiToken), or ovh (applicationKey, applicationSecret, consumerKey, optional endpoint, default ovh-eu). update requires dnsProviderId + name + config — the API replaces the provider rather than patching it, so a rename means re-sending the credentials. testConnection takes either a saved dnsProviderId or a raw config to check credentials before saving.
Records: listZones (dnsProviderId), listRecords (+ zoneId), createRecord/updateRecord (+ type, recordName, content, optional ttl and proxied, plus recordId for update), deleteRecord (+ recordId). type accepts A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, or PTR. proxied only takes effect on Cloudflare. Note recordName is the DNS record name — it maps to the API's name field, kept distinct here from the provider's name.
Provider reads return id, name, and providerType only; stored credentials are never rendered into tool output.
dokploy_vault_provider (7 actions)
Actions: list | get | create | update | remove | testConnection | listSecretNames
External secret-manager configuration. config is discriminated on providerType across eight backends: hashicorp, infisical, aws (Secrets Manager), aws-parameter-store (optional parameterPath, must start with /), doppler, azure, scaleway, phase (token, appId, env, optional path and apiUrl). assignments is [{ projectId, environmentIds? }] naming the Dokploy projects the vault serves.
Watch the overloaded field name: infisical.projectId and scaleway.projectId are that provider's own project ID, not the Dokploy projectId used in assignments.
update requires all four of vaultProviderId, name, config, and assignments — like the DNS provider, the API replaces rather than patches, so run get first to recover the current name and assignments.
listSecretNames (vaultProviderId + projectId, optional environmentId) returns secret names only. Dokploy exposes no API to read a secret's value, and provider credentials are never echoed back — the same rule the env tools follow.
dokploy_settings (5 actions)
Actions: health | version | ip | clean | reload
System settings. clean uses cleanType — server-scoped: all | images | volumes | stoppedContainers | dockerBuilder | dockerPrune (honor serverId); global: monitoring | deploymentQueue | sshPrivateKey. reload uses reloadTarget (server | traefik); serverId is honored for traefik.
Usage Examples
Deploy an application
"Deploy my web app" → dokploy_application { action: "deploy", applicationId: "app-123" }Start a PostgreSQL database
"Start the postgres database" → dokploy_database { action: "start", dbType: "postgres", databaseId: "db-456" }Check system health
"Is Dokploy healthy?" → dokploy_settings { action: "health" }List all containers
"What containers are running?" → dokploy_docker { action: "getContainers" }Development
pnpm install
pnpm dev # Development mode with watch
pnpm validate # Format + lint + test + build
pnpm inspect # Open MCP InspectorLicense
MIT
Sponsored by SapientsAI — Building agentic AI for businesses
Available Tools
28 toolsdokploy_applicationA
Manage applications. create: name+environmentId. get: applicationId (returns metadata + masked env summary — never values). update: applicationId+fields (supports sourceType, repository, owner, branch, customGitUrl, customGitBranch, githubId, dockerImage, networkIds, detachDokployNetwork, etc.). move: applicationId+targetEnvironmentId. deploy: applicationId, redeploy? (note: first deploy on new services may fail — retry immediately). start/stop/delete/markRunning/refreshToken/cleanQueues/killBuild/cancelDeployment: applicationId. reload: applicationId+appName. saveEnvironment: applicationId+env (KEY=VALUE pairs, full replace). setEnvVars: applicationId + set? (KEY=VALUE pairs to upsert) + unset? (KEY names to remove) — read-modify-write inside the server; result is a masked confirmation with changed key names only. getEnvKeys: applicationId — returns just the KEY names (no values). getEnvValuesUnsafe: applicationId — UNSAFE escape hatch that returns full KEY=VALUE pairs (use only when you need actual values; output goes to the tool transcript and any retained logs). saveBuildType: applicationId+buildType. traefikConfig: applicationId, traefikConfig? (omit to read). readMonitoring: appName. readLogs: applicationId, tail? (default 100), since? ('all' or duration like '1h'), search? (substring filter). search: any of q|name|appName|description|repository|owner|dockerImage|projectId|environmentId + limit/offset. deployNginxQuickstart: environmentId, serverId? — creates and deploys a "Hello World" nginx demo app on a generated traefik.me domain (Dokploy's onboarding smoke test). Note: the API's search index is narrower than the project tree — it can return fewer results than dokploy_project/dokploy_overview list, so use it to find a known service, not to inventory.
Inputs: action (required), q, env, set, +41 more.
dokploy_audit_logA
Read the Dokploy audit log with filters. Only action is 'list'. Filters (all optional): userId, userEmail, resourceName, auditAction (create|update|delete|deploy|cancel|redeploy|login|logout), resourceType (project|service|environment|deployment|user|customRole|domain|certificate|registry|server|sshKey|gitProvider|notification|settings|session), from/to (ISO timestamps), limit (default 50, max 500), offset. Note: the wire-level query parameter is called action; the MCP arg is auditAction to avoid clashing with the tool's action discriminator.
Inputs: action (required), to, from, limit, +6 more.
dokploy_backupA
Manage backups. create: schedule+prefix+destinationId+database+databaseType. Provide ONE service id matching databaseType: postgres→postgresId, mysql→mysqlId, mariadb→mariadbId, mongo→mongoId, libsql→libsqlId, web-server→(no id). For backups of a db running inside a compose stack: pass composeId+serviceName (and set databaseType to the engine, e.g. postgres). Optional on create/update: includeEncryptionKey to store the database encryption key with the backup. get: backupId. update: backupId+fields. remove: backupId. listFiles: destinationId. manualBackup: backupId+backupType (postgres|mysql|mariadb|mongo|libsql for db backups; compose for whole-stack; webServer for the dokploy server itself).
Inputs: action (required), prefix, search, enabled, +16 more.
dokploy_composeA
Manage Docker Compose services. create: name+environmentId. get: composeId (metadata + masked env summary — never values). update: composeId+fields (supports sourceType, composeFile for raw/inline, git source fields, autoDeploy, createEnvFile, serviceNetworks). delete/start/stop/getDefaultCommand: composeId. deploy: composeId, redeploy?, freshVolumes? (DESTRUCTIVE: runs docker compose down --volumes first, deleting the service's volume data; docker-compose type only, ignored for stack) (note: first deploy on new services may fail — retry immediately). move: composeId+targetEnvironmentId. loadServices: composeId (must deploy first). loadMounts: composeId+serviceName. saveEnvironment: composeId+env (full replace), createEnvFile? (also write a .env file next to the compose file). setEnvVars: composeId + set?/unset? (merge inside the server, masked confirmation only). getEnvKeys: composeId — KEY names only. getEnvValuesUnsafe: composeId — UNSAFE escape hatch that returns full KEY=VALUE pairs (output goes to the tool transcript). cancelDeployment/cleanQueues/killBuild/refreshToken: composeId. readLogs: composeId+containerId, tail?, since?, search?. search (as action): q|name|appName|description|projectId|environmentId + limit/offset. Note: the API's search index is narrower than the project tree — it can return fewer results than dokploy_project/dokploy_overview list, so use it to find a known service, not to inventory.
Inputs: action (required), q, env, set, +36 more.
dokploy_databaseA
Manage databases (postgres/mysql/mariadb/mongo/redis/libsql). create: dbType+name+environmentId+databasePassword. Per-engine extras — postgres/mysql/mariadb: REQUIRE databaseName+databaseUser; mysql/mariadb also accept databaseRootPassword. mongo: REQUIRES databaseUser (databaseName not used). redis: only databasePassword (no databaseName/User). libsql: REQUIRES appName+dockerImage+sqldNode (primary|replica); accepts sqldPrimaryUrl+enableNamespaces. get: dbType+databaseId (returns metadata + masked env summary — never values). update: dbType+databaseId+fields. move: dbType+databaseId+targetEnvironmentId. start/stop/deploy/rebuild/remove: dbType+databaseId. reload: dbType+databaseId+appName. changeStatus: dbType+databaseId+applicationStatus (idle|running|done|error). saveEnvironment: dbType+databaseId+env (full replace). setEnvVars: dbType+databaseId + set?/unset? (merge inside the server, masked confirmation only). getEnvKeys: dbType+databaseId — KEY names only. getEnvValuesUnsafe: dbType+databaseId — UNSAFE escape hatch that returns full KEY=VALUE pairs. saveExternalPort: dbType+databaseId+externalPort (libsql also accepts externalGRPCPort/externalAdminPort). search: dbType + q|name|appName|description|projectId|environmentId + limit/offset — searches within the given dbType (not supported for libsql). Note: the API's search index is narrower than the project tree — it can return fewer results than dokploy_project/dokploy_overview list, so use it to find a known service, not to inventory.
Inputs: action (required), dbType (required), q, env, +27 more.
dokploy_deploymentA
Manage deployments. list: applicationId|composeId|serverId|type+id. queueList: no params (currently-queued deployments). killProcess: deploymentId (kill an in-flight build). readLogs: deploymentId, tail?. remove: deploymentId (drops the record). Database deployments are listed via the resource itself, not here.
Inputs: action (required), id, tail, type, +4 more.
dokploy_destinationA
Manage S3-compatible backup destinations. list. get: destinationId. create: name+accessKey+bucket+region+endpoint+secretAccessKey, provider?, additionalFlags? (rclone flags). update: destinationId+fields. remove: destinationId. test: same fields as create (without persisting).
Inputs: action (required), name, bucket, region, +7 more.
dokploy_dns_providerA
DNS provider configuration and DNS record management. Providers: list, get (dnsProviderId), create (name+config), update (dnsProviderId+name+config — the API REPLACES the provider, so both must be sent even when changing one), remove (dnsProviderId), testConnection (dnsProviderId for a saved provider, or config to check credentials before saving). config is discriminated on providerType: cloudflare{apiToken}, route53{accessKeyId,secretAccessKey}, porkbun{apiKey,secretApiKey}, infomaniak{apiToken} or ovh{applicationKey,applicationSecret,consumerKey,endpoint?}. Records: listZones (dnsProviderId), listRecords (dnsProviderId+zoneId), createRecord/updateRecord (dnsProviderId+zoneId+type+recordName+content, ttl?, proxied?, plus recordId for update), deleteRecord (dnsProviderId+zoneId+recordId). Record type: A, AAAA, CNAME, MX, TXT, NS, SRV, CAA or PTR. proxied only takes effect on Cloudflare. Provider credentials are never echoed back in tool output; provider reads return id, name and providerType only.
Inputs: action (required), ttl, name, type, +7 more.
dokploy_dockerA
Docker daemon management: containers, files inside them, events, health, and disk usage. Containers: getContainers (list all, serverId?), restartContainer/startContainer/stopContainer/killContainer/removeContainer (containerId, serverId?), getConfig (containerId, serverId?), findContainers (appName+method, serverId?). Method semantics: match → fuzzy name match (optional appType: stack|docker-compose). label → REQUIRES type: standalone|swarm. stack → docker stack lookup. service → swarm service lookup. Container files (containerId+path, serverId?): listContainerFiles, readContainerFile (output truncated at 100k chars), writeContainerFile (+content — writes into the RUNNING container; the change is lost on redeploy unless the path is a mount), deleteContainerFile. Observability: getEvents (minutes? 1-1440, default 15), getServerHealth (sinceHours? 1-168). Disk: getDiskUsage (docker system df — containers, volumes, images and build cache), getBuildCache, pruneBuildCache (same effect as dokploy_settings clean cleanType=dockerBuilder).
Inputs: action (required), path, type, method, +7 more.
dokploy_docker_imageA
Docker image inventory. getImages: list images, serverId?. getImageConfig: imageRef ('nginx:latest' or an image ID), serverId?. removeImage: requires ALL THREE of repository, tag and id — read them off getImages — plus force? and serverId?. For overall disk usage and build cache see dokploy_docker getDiskUsage / getBuildCache / pruneBuildCache.
Inputs: action (required), id, tag, force, +3 more.
dokploy_docker_volumeA
Docker volume management and volume file access. Every action accepts an optional serverId. getVolumes: list volumes. getVolumesSize: per-volume disk usage. getVolumeConfig: volumeName — raw Docker inspect for one volume. removeVolume: volumeName — destroys the volume and its data; take a dokploy_volume_backup first. Files (volumeName + path, writeVolumeFile also content): listVolumeFiles, readVolumeFile (truncated at 100k chars), writeVolumeFile, deleteVolumeFile. Unlike writes into a running container (dokploy_docker writeContainerFile), volume writes survive redeploys. For scheduled backups of these volumes see dokploy_volume_backup.
Inputs: action (required), path, content, serverId, +1 more.
dokploy_domainA
Manage domains. create: host+applicationId|composeId(+serviceName for compose). list: applicationId|composeId. get: domainId. update: domainId+host (include composeId+serviceName for compose domains). delete: domainId. toggleEnable: domainId — flips the enable flag blind; prefer update with enabled:true|false when you need a known end state. generate: appName. canGenerateTraefikMe: serverId?. validate: domain, serverId? (checks DNS against that server's IPs; omit for the Dokploy host).
Inputs: action (required), host, path, port, +11 more.
dokploy_environmentA
Manage project environments. create: projectId+name. get: environmentId. list: projectId. update: environmentId+fields. remove: environmentId. duplicate: environmentId+name.
Inputs: action (required), name, projectId, description, +1 more.
dokploy_infrastructureB
Manage ports, auth, certs. createPort: applicationId+publishedPort+targetPort. deletePort: portId. createAuth: applicationId+username+password. deleteAuth: securityId. listCerts: all. getCert: certificateId. createCert: name+certificateData+privateKey. removeCert: certificateId.
Inputs: action (required), name, portId, password, +12 more.
dokploy_mountsA
Manage mounts (volumes, bind mounts, files) attached to services. Mount changes require a redeploy of the parent service to take effect. create: type+mountPath+serviceId+serviceType (+volumeName for volume, +hostPath for bind, +filePath+content for file). update: mountId (+any field). remove: mountId. get: mountId. listByServiceId: serviceType+serviceId. allNamedByApplicationId: applicationId (named volumes only). serviceType: application|postgres|mysql|mariadb|mongo|redis|compose|libsql.
Inputs: action (required), type, content, mongoId, +14 more.
dokploy_networkA
Docker network management. list: serverId? (networks Dokploy knows about). get/inspect/remove/recreate/resync: networkId — inspect returns the raw Docker inspect payload, recreate drops and re-adds the network so attached services are briefly disconnected, resync re-reads the network from Docker and refreshes Dokploy's stored record without touching the network itself. create: name (+ driver bridge|overlay, internal, attachable, enableIPv4, enableIPv6, mtu 68-65535, ipam, serverId). networksToSync: serverId? — networks that exist on the Docker host but are not yet tracked by Dokploy. import: names (one or more names from networksToSync), serverId?. Attach networks to workloads with dokploy_application update networkIds, or dokploy_compose update serviceNetworks.
Inputs: action (required), mtu, ipam, name, +8 more.
dokploy_overviewA
Read-only fleet-wide rollups that span every project, for orientation before drilling into a specific resource. No parameters. services: every application, compose service and database with its status. backups: every configured backup and its schedule. domains: every domain and what it points at. Use these first when asked a 'what is running / what is exposed / what is backed up' question, then use dokploy_application, dokploy_domain or dokploy_backup for detail and for changes.
Inputs: action (required).
dokploy_preview_deploymentB
Manage preview deployments (per-PR / per-branch deploys off a parent application). list: applicationId. get: previewDeploymentId. remove: previewDeploymentId. redeploy: previewDeploymentId (+title?, +description? for the deploy record).
Inputs: action (required), title, description, applicationId, +1 more.
dokploy_projectA
Manage projects. list: all (includes nested environments with applications, composes, databases). get: projectId (same nested detail). create: name. update: projectId+fields. remove: projectId. duplicate: sourceEnvironmentId+name.
Inputs: action (required), name, projectId, description, +2 more.
dokploy_redirectsA
Manage URL redirect rules on an application (Traefik regex/replacement). create: regex+replacement+permanent+applicationId. update: redirectId+regex+replacement+permanent. remove: redirectId. get: redirectId. A redeploy of the application is required for changes to take effect.
Inputs: action (required), regex, permanent, redirectId, +2 more.
dokploy_registryB
Manage container registries for pulling private images. list. get: registryId. create: registryName+username+password+registryUrl (registryType defaults to 'cloud'). update: registryId+fields. remove: registryId. test: registryName+username+password+registryUrl (without persisting). testById: registryId, serverId?.
Inputs: action (required), password, serverId, username, +5 more.
dokploy_scheduleA
Manage cron schedules that run commands against applications, compose services, or servers. create: name+cronExpression+command (+ scheduleType and matching applicationId/composeId/serverId; shellType=bash|sh; script for multi-line; timezone). update: scheduleId + all fields. remove/get: scheduleId. list: id (parent id — applicationId|composeId|serverId|'dokploy-server') + scheduleType. runManually: scheduleId. scheduleType: application|compose|server|dokploy-server.
Inputs: action (required), id, name, script, +13 more.
dokploy_serverB
Manage servers. list/count/publicIp: no params. get: serverId. create: name+ipAddress+port+username+sshKeyId+serverType. update: serverId+fields. remove: serverId. getMetrics: url+token. getServices: serverId — the applications, compose services and databases deployed on that server, with their projects (check before removing a server).
Inputs: action (required), url, name, port, +8 more.
dokploy_settingsA
System settings. health: check status. version: get version. ip: get IP. clean: cleanType (all|images|volumes|stoppedContainers|dockerBuilder|dockerPrune|monitoring|deploymentQueue|sshPrivateKey), serverId? (only honored for docker-related clean types). reload: reloadTarget (server|traefik), serverId? (traefik only).
Inputs: action (required), serverId, cleanType, reloadTarget.
dokploy_ssh_keyB
Manage SSH keys. create: name+privateKey+publicKey, description?. list: no params. get: sshKeyId. update: sshKeyId, name?, description?, lastUsedAt?. remove: sshKeyId. generate: type (rsa or ed25519). Note: organizationId is resolved automatically from the API key.
Inputs: action (required), name, type, sshKeyId, +4 more.
dokploy_vault_providerA
External secret-manager (vault) configuration. list, get (vaultProviderId), create (name+config+assignments), update (vaultProviderId+name+config+assignments — the API REPLACES the provider, so all four must be sent even when changing one; run get first), remove (vaultProviderId), testConnection (vaultProviderId for a saved provider, or config to check credentials before saving), listSecretNames (vaultProviderId+projectId, environmentId?). config is discriminated on providerType: hashicorp | infisical | aws | aws-parameter-store | doppler | azure | scaleway | phase. Note infisical.projectId and scaleway.projectId are that provider's own project, NOT the Dokploy projectId used in assignments. assignments is [{projectId, environmentIds?}] naming the Dokploy projects the vault serves. listSecretNames returns names only — Dokploy exposes no API to read a secret's value — and provider credentials are never echoed back in tool output.
Inputs: action (required), name, config, projectId, +3 more.
dokploy_volume_backupA
Manage scheduled volume-level backups (rclone-based). Distinct from dokploy_backup, which does DB-native dumps. create: name+volumeName+prefix+cronExpression+destinationId (+serviceType and matching *Id, +appName, +turnOff to stop service during backup, +keepLatestCount, +enabled). update: volumeBackupId + all fields. remove/get: volumeBackupId. list: id (parent service id) + volumeBackupType (application|postgres|mysql|mariadb|mongo|redis|compose|libsql). runManually: volumeBackupId (trigger immediately).
Inputs: action (required), id, name, prefix, +19 more.
infoARead-only
Returns identity and build information for this server (name, version, build commit, runtime, capability counts)
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Each tool maps to a distinct Dokploy resource (application, compose, database, domain, network, etc.) with an action discriminator, so most selections are unambiguous. Minor overlaps remain: dokploy_overview vs dokploy_project list, dokploy_settings clean=dockerPrune vs dokploy_docker pruneBuildCache, and the vague grab-bag name dokploy_infrastructure (ports/auth/certs).
Nearly all tools follow a clean dokploy_<resource> snake_case pattern (dokploy_application, dokploy_dns_provider, dokploy_volume_backup), which is predictable. The lone deviation is the unprefixed 'info' tool.
28 tools is on the heavy side, but each corresponds to a genuinely separate resource in a large deployment platform, and bundling many actions under each tool keeps the surface from exploding into hundreds of entries. Slightly over the ideal 3-15 band but defensible for this scope.
Broad CRUD/lifecycle coverage exists for almost every resource: projects, environments, applications, compose, databases, backups, volume backups, domains, redirects, networks, DNS/vault providers, registries, destinations, SSH keys, mounts, schedules, previews, deployments, docker and settings. Some platform areas lack tools (user/custom-role management, notifications, git-provider management) even though audit-log resource types reference them.
Maintenance
Related MCP Connectors
Devopness MCP server for DevOps happiness! Empower AI Agents to deploy apps and infra, to any cloud.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceComprehensive, type-safe MCP server providing 380 tools to manage Dokploy deployments, applications, and infrastructure via natural language.16 npm5MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to manage Dokploy infrastructure (Docker, projects, applications, databases, etc.) through natural language, acting as a universal translator between AI and cloud systems.16 npmMIT
- AlicenseBqualityCmaintenanceMCP server for EasyPanel that enables AI agents to manage servers, projects, services, databases, and domains via 40 curated tools or raw tRPC access to all 347 API procedures.4235 npm4MIT
- AlicenseNot gradedqualityFmaintenanceMCP server for Coolify infrastructure management, providing 45 tools for servers, applications, databases, deployments, and diagnostics via natural language.10 npmMIT