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-serverlist 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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | search: freeform query across name/appName/description/repository/owner | |
| env | No | Environment variables as KEY=VALUE pairs, one per line. Example: 'DB_HOST=localhost\nDB_PORT=5432'. Used by saveEnvironment (full replace). | |
| set | No | setEnvVars: KEY=VALUE pairs to upsert, one per line. Existing keys retain order; new keys append. | |
| name | No | ||
| tail | No | Number of recent log lines to return (default 100) | |
| limit | No | search: max results (default 20) | |
| owner | No | GitHub org/user | |
| since | No | Time range: 'all' or a duration like '30m', '1h', '7d' | |
| title | No | ||
| unset | No | setEnvVars: list of KEY names to remove. Unknown keys are silently skipped. | |
| action | Yes | ||
| branch | No | Branch name | |
| offset | No | search: pagination offset | |
| search | No | Filter log lines by substring (alphanumeric + ' ._-' only) | |
| appName | No | ||
| command | No | ||
| cpuLimit | No | ||
| githubId | No | GitHub App provider ID for private repo access | |
| redeploy | No | ||
| replicas | No | ||
| serverId | No | ||
| buildArgs | No | ||
| buildType | No | dockerfile | heroku_buildpacks | paketo_buildpacks | nixpacks | static | railpack | |
| projectId | No | search: filter to a project | |
| autoDeploy | No | ||
| dockerfile | No | ||
| networkIds | No | update: Docker network IDs to attach this application to (see dokploy_network list) | |
| repository | No | GitHub repository name | |
| sourceType | No | Source type. github → set repository+owner+branch (+githubId for private). git → set customGitUrl+customGitBranch. docker → set dockerImage. The API also supports gitlab/bitbucket/gitea/drop sources, but those need provider-specific fields not yet exposed by this tool. | |
| description | No | ||
| dockerImage | No | ||
| memoryLimit | No | ||
| buildSecrets | No | ||
| customGitUrl | No | Custom git repository URL (for sourceType: git) | |
| applicationId | No | ||
| createEnvFile | No | ||
| environmentId | No | ||
| traefikConfig | No | New config content (omit to read current) | |
| customGitBranch | No | Branch for custom git source | |
| dockerBuildStage | No | ||
| publishDirectory | No | ||
| deployDescription | No | Deploy description (maps to API description field) | |
| dockerContextPath | No | ||
| targetEnvironmentId | No | ||
| detachDokployNetwork | No | update: detach from the default dokploy-network, leaving only networkIds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that get masks env values, that saveEnvironment is a full replace, that setEnvVars is a server-side read-modify-write returning only changed key names, and that getEnvValuesUnsafe exposes plaintext values into the transcript and retained logs. It also surfaces the first-deploy failure/retry quirk and the narrow search index.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The 'action: params' pattern is consistent and front-loaded after a one-line purpose statement, and given 24 actions and 45 parameters nearly every clause carries information. It is still a single dense paragraph with no visual breaks, which makes scanning for a specific action slower than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of this complexity with no output schema and sub-50% schema coverage, the description gives an agent enough to invoke each action correctly, including which actions read versus mutate env state and what each returns in summary form. Only peripheral build/resource-limit parameters are left unaddressed, which is acceptable given they belong to the already-enumerated update path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 49% across 45 parameters, so the description must compensate, and it does for the action-critical ones — mapping action to required fields and clarifying semantics like 'KEY=VALUE pairs, full replace' versus upsert plus unset. However, a sizeable set of update parameters (command, cpuLimit, memoryLimit, replicas, buildArgs, dockerfile, publishDirectory, autoDeploy, createEnvFile) is named in a bare list without explanation or the schema documenting them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource ('applications') and then enumerates every action with its required parameters, so an agent knows exactly which operation each action value performs. It also names related sibling tools (dokploy_project, dokploy_overview, dokploy_network) in contrasting contexts, distinguishing this tool from adjacent ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Several actions carry explicit when-to-use guidance: getEnvValuesUnsafe is flagged 'use only when you need actual values', search is scoped to finding a known service rather than inventorying, and the deploy note warns of a retry pattern. It doesn't systematically contrast application actions against dokploy_compose or dokploy_database alternatives, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO-8601 end timestamp | |
| from | No | ISO-8601 start timestamp | |
| limit | No | ||
| action | Yes | ||
| offset | No | ||
| userId | No | ||
| userEmail | No | ||
| auditAction | No | Filter by audit action verb | |
| resourceName | No | ||
| resourceType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by indicating this is a read operation, listing all filters, and explicitly documenting the wire-level vs MCP parameter naming. It does not describe the return format or pagination behavior beyond limit/offset, but the provided details are substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, and every sentence provides essential information. It is dense but well-structured, making efficient use of space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters, no output schema, and no annotations, the description covers all parameters, provides defaults and limits, and clarifies a potential naming conflict. It does not describe the output structure, but that is not essential for invocation. Overall, it is sufficiently complete for an agent to select and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 30%, so the description compensates by explaining all filter parameters, enumerating allowed values for auditAction and resourceType, and adding default/max information for limit and offset. This adds significant semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Read the Dokploy audit log with filters', which clearly specifies the verb (Read), resource (audit log), and scope (with filters). It distinguishes itself from sibling tools that focus on specific resources like projects or deployments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool (reading audit logs) and states that the only action is 'list', which defines the operation scope. It does not explicitly mention alternatives or when-not-to-use, but the context is sufficiently clear given the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| prefix | No | ||
| search | No | ||
| enabled | No | ||
| mongoId | No | ||
| mysqlId | No | ||
| backupId | No | ||
| database | No | ||
| libsqlId | No | ||
| schedule | No | Cron expression | |
| serverId | No | ||
| composeId | No | ||
| mariadbId | No | ||
| backupType | No | Manual-backup target: postgres | mysql | mariadb | mongo | compose | libsql | webServer | |
| postgresId | No | ||
| serviceName | No | ||
| databaseType | No | postgres | mariadb | mysql | mongo | web-server | libsql | |
| destinationId | No | ||
| keepLatestCount | No | ||
| includeEncryptionKey | No | Store the database encryption key alongside the backup |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of behavioral disclosure. It fails to state side effects (e.g., 'remove' is destructive), permission requirements, failure modes, or return values. The only behavioral hint is that includeEncryptionKey stores the encryption key, which is more parameter semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient, using compact colon-separated summaries for each action. Every sentence provides actionable information, though the lack of formatting makes it somewhat hard to scan. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with 20 parameters and no output schema or annotations. The description covers the main actions and key parameter relationships, but misses several parameters, return value details, and operational caveats. It is adequate for basic selection and invocation but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, but the description compensates by explaining action-specific parameter combinations and enum relationships (e.g., databaseType to postgresId/mysqlId/mariadbId, manualBackup backupType variants). However, it leaves some parameters unexplained (search, enabled, keepLatestCount, serverId) and the 'update: backupId+fields' is vague.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Manage backups' and then enumerates the specific actions (create, get, update, remove, listFiles, manualBackup), making the tool's purpose clear. It does not explicitly differentiate itself from the sibling dokploy_volume_backup, but the action list and parameter requirements are specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description maps each action to its required parameters (e.g., 'get: backupId', 'remove: backupId', 'listFiles: destinationId') and gives conditional guidance for compose-stack backups. It does not explicitly mention when to prefer this over dokploy_volume_backup or other siblings, but it provides practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | search: freeform query | |
| env | No | Environment variables as KEY=VALUE pairs, one per line. Example: 'DB_HOST=localhost\nDB_PORT=5432'. Used by saveEnvironment (full replace). | |
| set | No | setEnvVars: KEY=VALUE pairs to upsert, one per line. | |
| name | No | ||
| tail | No | Number of recent log lines (default 100) | |
| type | No | ||
| limit | No | search: max results (default 20) | |
| owner | No | GitHub owner/organization | |
| since | No | Time range: 'all' or a duration like '30m', '1h', '7d' | |
| title | No | ||
| unset | No | setEnvVars: list of KEY names to remove. | |
| action | Yes | ||
| branch | No | GitHub branch | |
| offset | No | search: pagination offset | |
| search | No | Filter log lines by substring | |
| appName | No | Internal app name | |
| command | No | ||
| redeploy | No | ||
| serverId | No | ||
| composeId | No | ||
| projectId | No | search: filter to a project | |
| autoDeploy | No | Enable auto-deploy on git push | |
| repository | No | GitHub repository (owner/repo format) | |
| sourceType | No | Source type. github → set repository+owner+branch (+composePath). git → set customGitUrl+customGitBranch (+customGitSSHKeyId for private). raw → set composeFile (inline YAML). The API also supports gitlab/bitbucket/gitea sources, but those need provider-specific fields not yet exposed by this tool. | |
| composeFile | No | Docker Compose YAML content (for sourceType: raw, set this to the inline compose file) | |
| composePath | No | Path to compose file in repo | |
| composeType | No | docker-compose or stack | |
| containerId | No | Container ID for readLogs (use dokploy_docker findContainers to discover) | |
| description | No | ||
| serviceName | No | ||
| customGitUrl | No | Custom git repository URL | |
| freshVolumes | No | deploy: delete the service's volumes before deploying — destroys their data | |
| createEnvFile | No | update/saveEnvironment: also write the env out to a .env file beside the compose file | |
| deleteVolumes | No | ||
| environmentId | No | ||
| customGitBranch | No | Custom git branch | |
| serviceNetworks | No | update: per-service Docker network attachments. All three fields are required per entry (see dokploy_network list for IDs). | |
| customGitSSHKeyId | No | SSH key ID for private git repos | |
| deployDescription | No | ||
| targetEnvironmentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that deploy is DESTRUCTIVE (runs `docker compose down --volumes`, deletes volume data), that get returns a masked env summary, that getEnvValuesUnsafe is an unsafe escape hatch writing full secrets to the transcript, that saveEnvironment is a full replace, and that first deploy may fail and should be retried.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the general verb+resource leads, then action-by-action parameter requirements follow in a scannable run-on structure. Nearly every clause conveys actionable information, though the single-block paragraph format makes it harder to parse than a bulleted layout would.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 40-parameter, no-annotation, no-output-schema tool, the description covers destructive behavior, secret handling, action prerequisites, and return-value caveats (masked env, KEY-only vs KEY=VALUE). Coverage is strong; residual gaps are the handful of parameters undocumented anywhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 65% across 40 parameters, but the description compensates by mapping actions to their required fields and explaining semantics not in the schema (sourceType gitlab/bitbucket caveat, serviceNetworks requiring all three fields, redeploy/freshVolumes behavior). Some parameters (deleteVolumes, deployDescription, composeType) remain unexplained in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Manage Docker Compose services') and then enumerates every supported action with its distinguishing inputs. This lets an agent distinguish it from siblings like dokploy_application and dokploy_deployment without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides per-action routing guidance and sequencing prerequisites (e.g. 'loadServices: must deploy first', search 'use it to find a known service, not to inventory'). It lacks an explicit comparison against sibling tools such as dokploy_application (when to pick compose vs application), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | search: freeform query | |
| env | No | Environment variables as KEY=VALUE pairs, one per line. Used by saveEnvironment (full replace). | |
| set | No | setEnvVars: KEY=VALUE pairs to upsert, one per line. | |
| name | No | ||
| limit | No | search: max results (default 20) | |
| unset | No | setEnvVars: list of KEY names to remove. | |
| action | Yes | ||
| dbType | Yes | postgres, mysql, mariadb, mongo, redis, or libsql | |
| offset | No | search: pagination offset | |
| appName | No | ||
| command | No | ||
| cpuLimit | No | ||
| serverId | No | ||
| sqldNode | No | libsql sqld role | |
| projectId | No | search: filter to a project | |
| databaseId | No | ||
| description | No | ||
| dockerImage | No | ||
| memoryLimit | No | ||
| databaseName | No | ||
| databaseUser | No | ||
| externalPort | No | ||
| environmentId | No | ||
| sqldPrimaryUrl | No | libsql replica primary URL | |
| databasePassword | No | ||
| enableNamespaces | No | libsql multi-tenant namespaces | |
| externalGRPCPort | No | libsql only | |
| applicationStatus | No | ||
| externalAdminPort | No | libsql only | |
| targetEnvironmentId | No | ||
| databaseRootPassword | No | mysql/mariadb only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and carries it well. It discloses masking ('returns metadata + masked env summary — never values'), an unsafe path ('UNSAFE escape hatch that returns full KEY=VALUE pairs'), destructive semantics ('saveEnvironment ... (full replace)'), merge behavior ('merge inside the server, masked confirmation only'), search-index limitations, and per-engine constraints ('mongo: REUIREs databaseUser (databaseName not used)'; 'redis: only databasePassword'). This is exactly the behavioral context annotations would only hint at.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every clause carries required-parameter information; there is zero filler. However, it is one dense unbroken paragraph covering 17 actions and 6 engines, which makes scanning harder than if it were broken into per-action lines. For a dispatch tool of this breadth the length is justified, but the structure could be cleaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 17 actions, 6 dbTypes, 31 params, no annotations, and no output schema, the description covers per-action contracts, per-engine constraints, return-value masking, and search caveats — an unusually high bar. Remaining gaps: 'update: dbType+databaseId+fields' never enumerates which fields are updatable, and schema params command/cpULimit/memoriLimit/serverId apear nowhere in the description, leaving an agent unsure how to set resource limits or associate a server.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 45% and many params (name, databaseId, databasePassword, environmentId, externalPort, etc.) have no schema description. The description fully compensates by mapping every param to its action and engine: create=dbType+name+environmentId+databasePassword, with per-engine REQUIRES/accepts/not-used rules; get/update/move/start/stop/deploy/rebuild/emove/reload/changeStatus/saveEnvironment/setEnvVars/getEnvKeys/getEnvValuesUnsafe/saveExternalPort/search each get their param sets. This removes real ambiguity that the bare schema would leave.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line 'Manage databases (postgres/mysql/mariadb/mongo/redis/libsql)' states a specific resource and scope, and the 17 enumerated actions each get a verb+parameter contract. The database scope clearly distinguishes it from siblings like dokploy_application, dokploy_compose, and dokploy_docker without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The search note is an explicit usage guideline: it warns the index is narrower than the project tree, can return fewer results than dokploy_project/dokploy_overview, and says to use search to find a known service, not to inventory. For the other 16 actions, when-to-use is implied by the action names and per-action parameter requirements, but no explicit exclusions are given for when to prefer a sibling (e.g., backup vs. database tool).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Resource ID (used with type) | |
| tail | No | readLogs: tail N lines (default 100) | |
| type | No | Resource type. The Dokploy API accepts only: application | compose | server | schedule | previewDeployment | backup | volumeBackup. Database deployments are listed via the resource itself, not here. | |
| action | Yes | ||
| serverId | No | ||
| composeId | No | ||
| deploymentId | No | ||
| applicationId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose effects. It states that killProcess 'kill[s] an in-flight build' and remove 'drops the record', which surfaces destructive behavior. It doesn't address permissions, reversibility, return formats, or side effects, leaving gaps for a management tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact single paragraph using action:usage pairs, front-loading the purpose and wasting no words. Each clause adds information, and the final exclusion is succinct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-action tool with 8 parameters and no annotations, the description covers action selection, parameter combination, and a notable exclusion. It doesn't describe return values or failure modes, so it's not fully complete but adequate for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 38%, but the description compensates by mapping each action to its relevant parameters (e.g., list takes applicationId|composeId|serverId|type+id, readLogs takes deploymentId and optional tail). This gives meaning beyond the bare schema, though some param types like serverId and composeId lack deeper semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates five concrete actions (list, queueList, killProcess, readLogs, remove) under 'Manage deployments', giving a clear verb+resource pairing. It differentiates scope by noting database deployments are listed elsewhere, though it doesn't explicitly position sibling tools like dokploy_preview_deployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Per-action parameter guidance tells the agent which parameters to supply for each operation, and the final sentence draws an exclusion boundary for database deployments. However, it never names an alternative tool or explains when to prefer this tool over related siblings, so it's only partial guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | Yes | ||
| bucket | No | ||
| region | No | ||
| endpoint | No | S3 endpoint URL | |
| provider | No | Provider hint for rclone (e.g. AWS, Cloudflare, MinIO) | |
| serverId | No | ||
| accessKey | No | ||
| destinationId | No | ||
| additionalFlags | No | Extra rclone flags, e.g. ['--s3-no-check-bucket'] | |
| secretAccessKey | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the 'test' action creates without persisting, which is a valuable behavioral trait. It also implies the CRUD nature of other actions. However, it does not discuss side effects (e.g., does removing a destination affect existing backups?), authorization needs, or rate limits. Given no annotations, the burden is higher, and the description provides only moderate transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using compact notation to convey action-specific parameters. Every part adds value without redundancy. It is well-structured for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 11 parameters, no output schema, and no annotations, the description covers most necessary context for understanding how to use each action. It explains the test action's dry-run behavior and lists required fields. The missing serverId parameter and lack of return value explanation are minor gaps, but overall it provides sufficient guidance for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 27%, the description compensates by explaining which parameters are needed for each action and their roles (e.g., 'name+accessKey+bucket+region+endpoint+secretAccessKey' for create, 'provider?' as optional rclone hint, 'additionalFlags?' as rclone flags). However, 'serverId' appears in the schema but is not mentioned in the description, leaving a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages S3-compatible backup destinations and enumerates specific actions (list, get, create, update, remove, test). This distinguishes it from sibling tools like dokploy_backup, which likely handles backup operations rather than destination configuration. However, it could be more explicit about its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides per-action parameter requirements (e.g., list takes no params, create requires multiple fields). It implies when to use each action but offers no guidance on when to use this tool versus alternatives like dokploy_backup or dokploy_server. There is no mention of prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | ||
| name | No | Provider name (letters, digits, _ and - only) | |
| type | No | Record type | |
| action | Yes | ||
| config | No | Provider credentials, keyed by providerType | |
| zoneId | No | ||
| content | No | Record value, e.g. an IP for A or a target host for CNAME | |
| proxied | No | Cloudflare only: route the record through Cloudflare's proxy | |
| recordId | No | ||
| recordName | No | DNS record name (sent as `name`; distinct from the provider name) | |
| dnsProviderId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well. It discloses that update REPLACES the provider (both name and config must be sent), that proxied only affects Cloudflare, that credentials are never echoed back, and exactly what provider reads return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded and well organized, with separate provider and record action groups. Every sentence adds operational detail, and there is no redundant restatement of the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter multi-action tool with no output schema and no annotations, the definition is highly complete on inputs and provider read behavior. It could be slightly richer on what zone and record list operations return, but the missing detail is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning beyond the 55% schema coverage: it maps every action to its required parameters, explains the discriminated config shapes per providerType, lists valid record types, clarifies recordName versus provider name, and notes the update caveat that both name and config are mandatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource and scope: DNS provider configuration and DNS record management, then enumerates every action. It distinguishes the tool from neighboring resources like domains by content, but does not explicitly name or contrast with any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Action-specific guidance is strong: each action is paired with its required identifiers, update semantics are called out, and testConnection is explained for both saved and unsaved credentials. The description does not provide when-not-to-use guidance or point to alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path inside the container, for the file actions | |
| type | No | Required for method=label: standalone | swarm | |
| action | Yes | ||
| method | No | ||
| appName | No | ||
| appType | No | App type filter for method=match only: stack | docker-compose | |
| content | No | writeContainerFile: full new file contents | |
| minutes | No | getEvents: look back N minutes (default 15) | |
| serverId | No | ||
| sinceHours | No | getServerHealth: look back N hours (max 168) | |
| containerId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden, and it does so well. It warns that writeContainerFile writes into the running container and 'the change is lost on redeploy unless the path is a mount', discloses that readContainerFile output is 'truncated at 100k chars', and equates pruneBuildCache with a specific existing dokploy_settings action. These are exactly the kind of behavioral traits an agent cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause adds operational value, and it is organized into clear sections: containers, container files, observability, and disk. The overview is front-loaded, and even parenthetical details like default ranges and truncation limits are compact. For a tool with 17 actions, this length is warranted and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 17-action tool with no output schema and no annotations, the description is remarkably complete: parameter bindings, defaults, min/max bounds, side effects, and equivalents are all present. The main missing piece is detailed return-shape information for actions like getContainers, getConfig, and getEvents, and explicit routing against sibling tools; these are not strictly required for selection and invocation but would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 55%, but the description substantially fills the gap by mapping parameters to actions: containerId+serverId for container operations, containerId+path for file operations, content for writeContainerFile, minutes with default 15, and sinceHours with max 168. It also explains the meaning of method values and the conditional requirement of type, which the schema alone does not connect to specific actions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Docker daemon management' and then enumerates exact action families: containers, files inside them, events, health, and disk usage. It names each operation with its parameters, so an agent knows precisely what resource and verb this tool exposes. The scope is distinct from sibling tools like dokploy_docker_volume and dokploy_docker_image, which target narrower resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear within-tool usage guidance, such as 'label → REQUIRES type: standalone|swarm' and 'match → fuzzy name match (optional appType...)', which helps an agent pick the right action and parameter combination. It does not explicitly say when to prefer this tool over a sibling, but the daemon-level scope and action categories make the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | removeImage: image ID from getImages | |
| tag | No | removeImage: image tag, e.g. 'latest' | |
| force | No | removeImage: remove even when containers reference the image | |
| action | Yes | ||
| imageRef | No | getImageConfig: image reference or ID | |
| serverId | No | ||
| repository | No | removeImage: image repository, e.g. 'nginx' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that removeImage requires all three identifiers and that force is optional, and it explains a workflow (read values from getImages). However, it does not state consequences of removing an image, permission requirements, or what getImageConfig returns, leaving some behavior implied by the action names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences pack the action inventory, parameter requirements, an example, and a sibling-tool pointer with zero filler. The most important scoping statement ('Docker image inventory') is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool with no output schema and no annotations, the description covers each action's parameters and routing to the sibling tool. It is missing only minor behavioral details such as return shape for getImageConfig and removal side effects, but an agent has enough to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so the schema already documents most parameters. The description adds value by showing a concrete imageRef example ('nginx:latest'), specifying that removeImage needs all three of repository/tag/id, and noting that they should be read off getImages — a dependency not visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Docker image inventory' and enumerates three specific actions (getImages, getImageConfig, removeImage), each with a clear verb and target resource. It distinguishes this tool from dokploy_docker by pointing disk-usage and build-cache operations there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit per-action usage: getImages for listing, getImageConfig with imageRef, and removeImage with the mandatory triplet repository/tag/id read from getImages, plus optional force/serverId. It also names dokploy_docker getDiskUsage/getBuildCache/pruneBuildCache as the alternative for disk usage and build cache, so an agent knows when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path inside the volume, for the file actions | |
| action | Yes | ||
| content | No | writeVolumeFile: full new file contents | |
| serverId | No | ||
| volumeName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly warns that removeVolume destroys the volume and its data, documents that readVolumeFile is truncated at 100k chars, and explains that volume writes persist across redeploys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficiently structured, front-loading the tool's purpose and then grouping actions clearly. Every clause adds information: optional serverId, raw inspect behavior, truncation, destructiveness, and sibling tool routing. There is little wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool with no output schema, the description covers the main behaviors, parameter requirements, safety warnings, and cross-tool distinctions. Missing return-format details for list/read actions are a minor gap, but an agent can still select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, but the description compensates by mapping actions to their required parameters, e.g. getVolumeConfig: volumeName and file actions require volumeName + path, with writeVolumeFile also requiring content. It adds meaningful context beyond the bare schema, though it could be more explicit about path formatting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource pair — 'Docker volume management and volume file access' — and then enumerates each action with its precise effect. It clearly distinguishes the tool from related siblings like dokploy_docker and dokploy_volume_backup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use volume file writes versus container writes, noting that volume writes survive redeploys. It also directs users to dokploy_volume_backup for scheduled backups and warns to take a backup before removeVolume.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| path | No | ||
| port | No | ||
| https | No | ||
| action | Yes | ||
| domain | No | ||
| appName | No | ||
| enabled | No | update only: enable or disable the domain | |
| domainId | No | ||
| serverId | No | ||
| composeId | No | ||
| domainType | No | compose | application | preview | |
| serviceName | No | ||
| applicationId | No | ||
| certificateType | No | letsencrypt | none | custom |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose real behavior: toggleEnable is a blind flag flip, validate performs DNS-against-server-IP checking, and serverId omission targets the Dokploy host. However, it omits whether delete is permanent, what side effects create has (Traefik/cert provisioning), auth requirements, and certificate issuance implications, leaving significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Highly dense, front-loaded with the resource, then a tight action:params mapping. Every clause carries information and nothing is padded. The semicolon-heavy wall of text is compact but readable as a lookup table.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-action, 15-param tool with no annotations and no output schema, the description covers action/parameter routing but omits return-value expectations, the semantics of five undocumented params, and the side effects of mutation actions. It is adequate but leaves an agent guessing on several invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20% across 15 params, so the description must compensate, and it does well on the identifier wiring (host+applicationId|composeId, domainId, appName, serverId, serviceName, enabled). But path, port, https, domainType, and certificateType are never mentioned in the description and lack schema docs, leaving a meaningful compensation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening 'Manage domains' is a generic umbrella, but the per-action breakdown (create/list/get/update/delete/toggleEnable/generate/canGenerateTraefikMe/validate) with their required identifiers makes the tool's scope and each operation concrete. An agent can tell this is the domain resource manager and distinguish it from siblings like dokploy_redirects or dokploy_dns_provider. It stops short of a crisp verb+resource statement and never says what a 'domain' record actually represents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong intra-tool routing: it explicitly says toggleEnable 'flips the enable flag blind' and to 'prefer update with enabled:true|false when you need a known end state', and clarifies validate's serverId is optional ('omit for the Dokploy host'). It does not give when-to-use-this-tool-vs-sibling guidance (e.g. domain vs redirect), but the action-selection advice is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dokploy_environmentA
Manage project environments. create: projectId+name. get: environmentId. list: projectId. update: environmentId+fields. remove: environmentId. duplicate: environmentId+name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | Yes | ||
| projectId | No | ||
| description | No | ||
| environmentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only lists parameters per action but fails to disclose side effects (e.g., whether remove is destructive, whether updates are partial, return values) or any safety/authorization concerns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, listing all actions and their parameters in a compact format. It is front-loaded with the general purpose. Minor improvement could be clearer formatting (e.g., bullets), but no unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no output schema, no annotations), the description is incomplete. It lacks details on update fields, the role of the description parameter, return values, error handling, and any behavioral constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description maps each action to required parameters (e.g., create needs projectId+name), which adds meaning beyond the schema's property names alone. However, it does not specify constraints on parameters like name or what 'fields' includes for update, limiting completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Manage project environments' and lists all supported actions (create, get, list, update, remove, duplicate) with required parameters. This distinguishes it from sibling tools like dokploy_project, which handles project-level operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for environment management through its name and listed actions, but does not explicitly state when to use this tool over alternatives, nor does it provide context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | Yes | ||
| portId | No | ||
| password | No | ||
| protocol | No | ||
| serverId | No | ||
| username | No | ||
| autoRenew | No | ||
| privateKey | No | PEM format | |
| securityId | No | ||
| targetPort | No | ||
| publishMode | No | ||
| applicationId | No | ||
| certificateId | No | ||
| publishedPort | No | ||
| certificateData | No | PEM format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fails to disclose behavioral traits like side effects, permissions, or reversibility. It only lists actions and parameters, providing minimal insight into the tool's behavior beyond the obvious mutation implied by action names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using a single sentence to state purpose and then a compact list of actions with parameters. It front-loads the general purpose, making it efficient, though the dense format might be slightly harder to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool with 16 parameters and no output schema, the description is adequate but incomplete. It covers input requirements per action but omits output specifics, error handling, prerequisites, or contextual usage scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (13%), but the description compensates by explicitly mapping each action to its required parameters (e.g., createPort needs applicationId, publishedPort, targetPort). This adds significant meaning beyond the raw schema, though some parameters remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages ports, auth, and certs, and lists specific actions with their required parameters. This distinguishes it from sibling tools which handle other aspects like applications, backups, or domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description does not mention contexts, prerequisites, or when not to use it, leaving the agent to infer based on action names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | bind | volume | file | |
| action | Yes | ||
| content | No | File contents for type=file | |
| mongoId | No | ||
| mountId | No | ||
| mysqlId | No | ||
| redisId | No | ||
| filePath | No | Required for type=file | |
| hostPath | No | Required for type=bind | |
| libsqlId | No | ||
| composeId | No | ||
| mariadbId | No | ||
| mountPath | No | Path inside the container | |
| serviceId | No | ID of the service the mount attaches to | |
| postgresId | No | ||
| volumeName | No | Required for type=volume | |
| serviceType | No | ||
| applicationId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the redeploy requirement but does not mention authorization, rate limits, side effects of removal, or return values. This is adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the main purpose, but the action listing is cluttered. It could benefit from bullet points or clearer formatting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 18 parameters, low schema coverage, and no annotations or output schema, the description covers action patterns but lacks details on return values, error scenarios, idempotency, and data loss implications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (39%). The description adds significant meaning by mapping actions to required parameters (e.g., type=volume needs volumeName). However, some parameters like mongoId, mysqlId remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Manage mounts (volumes, bind mounts, files) attached to services' and enumerates all sub-actions with required parameters, distinguishing it from sibling tools like dokploy_application or dokploy_deployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit context: 'Mount changes require a redeploy of the parent service to take effect.' It also gives patterns for each action (create, update, remove, etc.). However, it does not mention when not to use this tool or compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mtu | No | ||
| ipam | No | create: IPAM settings, e.g. { config: [{ subnet: '10.0.1.0/24', gateway: '10.0.1.1' }] } | |
| name | No | create: network name | |
| names | No | import: network names to bring under Dokploy | |
| action | Yes | ||
| driver | No | create: bridge | overlay | |
| internal | No | ||
| serverId | No | ||
| networkId | No | ||
| attachable | No | ||
| enableIPv4 | No | ||
| enableIPv6 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it warns that recreate 'drops and re-adds the network so attached services are briefly disconnected', that resync 're-reads... without touching the network itself', and that inspect returns the raw Docker payload. It omits what remove destroys and whether operations are reversible or require elevated auth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tight and front-loaded: it opens with the domain, then walks action-by-action with a consistent 'action: params' pattern. It is somewhat run-on and packs every branch into one paragraph, but nearly every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-param, 9-action tool with nested ipam and no output schema, the description covers the critical decision points and destructive side effects. It doesn't explain the return shape for list/get (which the agent may need) or the impact of remove, leaving modest gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% across 12 params, but the description compensates by mapping each parameter to its action (serverId for list/networksToSync, networkId for get/inspect/remove/recreate/resync, name+driver+internal+attachable+enableIPv4/IPv6+mtu+ipam for create). This adds real meaning beyond the bare enum/type schema, though constraints like driver/overlay semantics are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'Docker network management' then enumerates the nine actions with a specific verb+object for each (list, inspect, recreate, resync, import, etc.). It also names the sibling tools (dokploy_application/dokploy_compose) used for the adjacent task of attaching networks, distinguishing it from general app/compose tools, though it doesn't explicitly contrast against dokploy_docker or dokploy_docker_volume.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides per-action conditions, e.g. networksToSync is for networks existing on the host but untracked, and import consumes names from networksToSync. It routes the agent onward for attachment ('Attach networks to workloads with dokploy_application update networkIds'). However it doesn't state exclusions or prerequisites (e.g. when not to use recreate vs resync beyond a single clause).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and it delivers the key safety trait up front: 'Read-only', implying no side effects. It also discloses the unfiltered global scope ('span every project', 'fleet-wide') and what each mode surfaces, setting expectations about breadth. However, the literal claim 'No parameters' is behaviorally misleading because the schema requires an `action` argument, which could cause an agent to attempt an invalid call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly 75 words cover purpose, scope, all three mode semantics, when-to-use, and follow-up routing, front-loaded with 'Read-only fleet-wide rollups'. Every sentence earns its place except the short 'No parameters' phrase, which is both incorrect and confusing. The structure is otherwise tight and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-mode read-only tool with no output schema and no annotations, the description covers what each mode returns, the global scope, and the navigation flow into detail tools. It doesn't specify the output shape beyond field hints (status, schedule, target), which is acceptable for an orientation tool. An agent has everything needed to choose a mode and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining the meaning of each enum value — 'services', 'backups', 'domains' — and what each returns. The action-to-meaning mapping is clear enough for an agent to select the right value. The 'No parameters' sentence creates tension with the required `action` parameter, but the surrounding content resolves that ambiguity in practice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: read-only fleet-wide rollups spanning every project, used for orientation before drilling into a specific resource. It differentiates itself from siblings by naming the detail tools (dokploy_application, dokploy_domain, dokploy_backup) as follow-ups. Each action mode is tied to concrete output ('services: every application, compose service and database with its status'), so an agent knows exactly what the tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit decision rule: use these first when asked 'what is running / what is exposed / what is backed up', then switch to the named sibling tools for detail and for changes. This directly tells the agent when to invoke this tool versus alternatives, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| action | Yes | ||
| description | No | ||
| applicationId | No | ||
| previewDeploymentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of behavioral disclosure. It only lists action-parameter mappings without mentioning side effects (e.g., remove is destructive, redeploy triggers a build), permission requirements, or return value behavior. This is a significant gap for mutating actions like remove and redeploy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently enumerates actions and their parameter usage using a structured list. It is front-loaded with the resource type and contains no filler, making it highly concise and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core action-to-parameter mapping but lacks details on return values, error behavior, and side effects. For a multi-action tool with no output schema and no annotations, this is a moderate gap that prevents full autonomous understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds crucial meaning by mapping each action to its required parameter (applicationId for list, previewDeploymentId for get/remove/redeploy, and title/description for redeploy). It stops short of stating whether parameters are required or optional per action, but the mapping is valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'preview deployments' and enumerates four specific actions (list, get, remove, redeploy), clearly stating what the tool does. It also distinguishes this from sibling tools like dokploy_deployment by specifying 'per-PR / per-branch deploys off a parent application'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'per-PR / per-branch deploys off a parent application' gives context for when this tool should be used, implying its niche. However, it does not explicitly compare with alternatives like dokploy_deployment or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | Yes | ||
| projectId | No | ||
| description | No | ||
| sourceEnvironmentId | No | ||
| duplicateInSameProject | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses basic behavior for each action (e.g., list returns nested environments, remove deletes a project), but does not cover side effects, permission requirements, or idempotency. Since annotations are absent, the description carries full burden and provides minimal depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using a single sentence with colon-separated actions. Every word earns its place, and the structure is front-loaded with the purpose ('Manage projects') followed by a compact list of operations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, 1 required, and no output schema, the description covers the main actions and their key parameters but lacks details on optional parameters (e.g., description), output format, and edge cases. It is functional but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema by mapping each action to required parameters (e.g., 'list: all' implies no parameters needed, 'duplicate: sourceEnvironmentId+name'). However, it omits details for some parameters like 'description' and 'duplicateInSameProject', leaving gaps despite 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Manage projects' and enumerates each action (list, get, create, update, remove, duplicate) with specific parameter requirements, effectively distinguishing it from sibling tools that manage other entities like applications or databases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly guides usage through action enumeration (e.g., 'list: all' indicates when to use list), but lacks explicit guidance on when to choose this tool over alternatives or exclusion criteria, such as 'use dokploy_environment for environment-level operations'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| regex | No | Traefik-compatible source regex (e.g. ^https?://old.example.com/(.*)) | |
| action | Yes | ||
| permanent | No | true = 301, false = 302 | |
| redirectId | No | ||
| replacement | No | Target URL template (e.g. https://new.example.com/$${1}) | |
| applicationId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the important behavior that 'A redeploy of the application is required for changes to take effect', which is valuable. However, it does not cover other behavioral aspects like error handling, idempotency, or authorization requirements, leaving gaps for a no-annotation context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the tool's purpose. It uses a list-like structure for actions, which is efficient. However, it is a single run-on sentence that could be better formatted for readability, but it earns a 4 for being concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, no annotations, and no output schema, the description covers the core functionality well: it lists all actions, required parameters, and the critical redeploy requirement. It does not explain return values, but for a simple CRUD tool this is acceptable. The description is sufficiently complete for an agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by specifying which parameters are required for each action (create: regex+replacement+permanent+applicationId, update: redirectId+regex+replacement+permanent, etc.). This is not present in the schema for action, redirectId, and applicationId. Schema coverage is only 50%, but the description compensates by mapping actions to parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Manage URL redirect rules on an application (Traefik regex/replacement)'. It identifies the resource (redirect rules), the context (application/Traefik), and the CRUD actions. This distinguishes it from sibling tools like dokploy_application or dokploy_domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context (URL redirects on an application) but does not explicitly state when to use this tool versus alternatives or when not to use it. It does list all sub-actions and their required parameters, which implies usage, but there is no explicit comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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?.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| password | No | ||
| serverId | No | ||
| username | No | ||
| registryId | No | ||
| imagePrefix | No | Optional image prefix prepended to pull paths | |
| registryUrl | No | Registry URL, e.g. ghcr.io or registry.hub.docker.com | |
| registryName | No | ||
| registryType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes that the 'test' action does not persist, which is a behavioral trait. However, it does not disclose other behavioral details such as destructive nature of 'remove', authentication requirements, or rate limits. With no annotations, the description carries moderate transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, using a compact notation to convey action-parameter mappings. It front-loads the purpose and then lists actions efficiently. Every sentence contributes, though the terse style may reduce readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (9 parameters, no output schema, no annotations), the description covers action-specific parameter requirements but lacks overall context such as return values, error handling, or authentication. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (22%), but the description adds value by mapping parameters to specific actions (e.g., 'create: registryName+username+password+registryUrl'). However, it does not explain the semantic meaning of individual parameters beyond the schema, leaving interpretation to the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages container registries for pulling private images, and enumerates actions. It is specific about the resource and verb, but does not explicitly differentiate from sibling tools beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description only lists actions with parameter hints, but does not provide criteria for selecting this tool over sibling tools like dokploy_docker or dokploy_settings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Parent resource id for list action | |
| name | No | ||
| action | Yes | ||
| script | No | Optional multi-line script body | |
| appName | No | Container appName (for application/compose scope) | |
| command | No | Shell command to execute | |
| enabled | No | ||
| serverId | No | ||
| timezone | No | IANA timezone name (e.g. America/New_York) | |
| composeId | No | ||
| shellType | No | ||
| scheduleId | No | ||
| description | No | ||
| serviceName | No | Compose service name when scheduleType=compose | |
| scheduleType | No | ||
| applicationId | No | ||
| cronExpression | No | Standard cron expression (e.g. '0 3 * * *') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does state that schedules run commands against resources, which implies execution behavior, but it does not disclose potential side effects (e.g., that runManually immediately executes the command, or that remove deletes an active schedule). The action list is descriptive but lacks explicit warnings or consequences, placing it at the minimum viable level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense, information-packed block with no filler. The first sentence states the core purpose, then actions are compactly listed with required parameter patterns. Every phrase earns its place, making it highly efficient for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (17 parameters, 6 actions, no output schema), the description is reasonably complete. It covers all actions, required parameters, relationship between scheduleType and target IDs, and special list id value. Minor gaps exist (e.g., whether update is partial or full replacement, or error behavior), but overall it provides sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 41%, so the description must compensate. It effectively adds meaning by grouping parameters per action, clarifying parent-id semantics for list ('applicationId|composeId|serverId|dokploy-server'), and listing enum values (scheduleType, shellType). This goes beyond the raw schema and helps an agent assemble valid requests.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Manage cron schedules that run commands against applications, compose services, or servers.' It clearly distinguishes this tool from sibling tools (none of which mention schedules) and enumerates all supported actions (create, update, remove, get, list, runManually), leaving no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit per-action parameter requirements (e.g., 'create: name+cronExpression+command (+ scheduleType and matching applicationId/composeId/serverId)'), which effectively tells an agent what to provide for each operation. It does not name sibling alternatives, but the scope of targets (applications, compose services, servers) is clear and no overlapping sibling exists, so this is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| name | No | ||
| port | No | ||
| token | No | ||
| action | Yes | ||
| serverId | No | ||
| sshKeyId | No | ||
| username | No | ||
| ipAddress | No | ||
| dataPoints | No | ||
| serverType | No | deploy | build | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses what getServices returns (applications, compose services, databases and their projects) and cautions to check before removal, which is genuine added context. But it says nothing about auth requirements, reversibility, what remove actually destroys, or error behavior for a tool containing destructive actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely compact, action-by-action with zero filler and the key constraint front-loaded. Structure is efficient, though the dense run-on formatting makes it slightly harder to scan than a bulleted breakdown would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-action, twelve-parameter tool with no annotations and no output schema, the description covers the calling mechanics well (which params per action, one return-content note, one caution). It is still thin on mutation semantics, permissions, and the undocumented dataPoints parameter, leaving meaningful gaps for such a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 8%, so the description must compensate, and it does partially by mapping parameters to actions (create: name+ipAddress+port+username+sshKeyId+serverType, etc.). However, it omits the dataPoints parameter entirely and never explains the meaning or format of any parameter, so the compensation is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool is a multi-action server manager, and the description enumerates all nine actions with their parameters, making the resource (servers) and each operation concrete. 'Manage servers' alone is generic, but the per-action breakdown removes ambiguity about what the tool actually does and separates it from siblings like dokploy_ssh_key or dokploy_infrastructure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an implicit when-to-use signal by mapping each action to its required params, and adds a real routing hint: '(check before removing a server)'. However, it never states when to prefer this tool over alternatives or when an action is inappropriate, so usage is only partially guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| serverId | No | ||
| cleanType | No | ||
| reloadTarget | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden for behavioral disclosure. It does not warn that clean is destructive or that reload may interrupt services, nor does it explain permissions or side effects. The only behavioral nuance provided is the conditional serverId handling, which is useful but insufficient for a tool containing destructive and system-impacting operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact and front-loaded with 'System settings.' followed by action-specific details. Every phrase carries informational weight, with no fluff or repetition. The dense colon-separated format is efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all actions and parameter dependencies, so an agent can likely invoke the tool correctly. However, there is no output schema and no annotations, and the description omits behavioral context such as destructive consequences and expected return values for operations like clean and reload. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does by explaining each action and enumerating valid cleanType and reloadTarget values with conditional rules for serverId. A minor gap is that serverId itself is not explicitly defined beyond when it applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines what the tool does: it exposes system settings operations such as health, version, IP, clean, and reload. Each action is paired with a concise verb and target, making the tool's scope understandable. However, it does not explicitly differentiate these operations from overlapping sibling tools like dokploy_server, info, or dokploy_docker.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear conditional usage context: serverId is only honored for docker-related clean types and only for reload when the target is traefik. This helps an agent decide which parameters to include for each action. It does not explicitly compare this tool to sibling alternatives, but the parameter-level guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | Key type for generate action | |
| action | Yes | ||
| sshKeyId | No | ||
| publicKey | No | ||
| lastUsedAt | No | ISO date string for update action | |
| privateKey | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It states the tool 'manages' SSH keys but does not disclose that actions like 'remove' are destructive, that authorization is required, or any side effects. The automatic resolution of organizationId is a positive mention, but overall behavioral details are sparse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the main purpose and then lists actions concisely. Each sentence adds value, but the density could be slightly improved with clearer separation of actions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and 6 actions with no output schema, the description covers the action-parameter mappings but lacks details on return values, error handling, or parameter constraints. It is incomplete for an agent to reliably invoke the tool without additional knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25%, with descriptions only for 'type' and 'lastUsedAt'. The description maps parameters to actions (e.g., 'create: name+privateKey+publicKey, description?'), adding some meaning beyond the schema. However, it does not explain formats, constraints, or optional/required status for parameters in each action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Manage SSH keys' and explicitly lists all six actions (create, list, get, update, remove, generate) with their required parameters, making the tool's purpose and scope immediately clear. It distinguishes well from sibling tools by focusing on SSH key management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists actions and associated parameters, providing clear context for when to use each action. However, it does not offer guidance on when not to use the tool or alternatives, such as other methods for managing SSH keys.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Provider name (letters, digits, _ and - only) | |
| action | Yes | ||
| config | No | Vault credentials, keyed by providerType | |
| projectId | No | listSecretNames: Dokploy project ID | |
| assignments | No | Dokploy projects/environments this vault serves | |
| environmentId | No | listSecretNames: narrow to one environment | |
| vaultProviderId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that update REPLACES the provider (all four fields required even for a one-field change), that listSecretNames returns names only because no API reads values, and that provider credentials are never echoed back. Missing pieces are auth/permission requirements and rate-limit behavior, which keeps it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense, front-loaded paragraph that opens with purpose and then walks the action list; nearly every clause carries information (defaults, caveats, disambiguation) rather than filler. It loses a point for being a single unbroken run-on block that is harder to scan than a short action-per-line structure would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, 7-action tool with no annotations and no output schema, the description covers the essentials: action semantics, required fields per action, config discrimination, and return-value behavior for listSecretNames. Remaining gaps (permission scopes, exact list/get payload shape) are modest given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, and the description compensates well beyond it: it maps parameters to each action, documents the assignments shape ([{projectId, environmentIds?}]), and warns that infisical.projectId and scaleway.projectId are the provider's own project, not the Dokploy projectId. This cross-field disambiguation is genuine added meaning the schema only partially conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely (external secret-manager / vault configuration) and enumerates the exact operations it supports (list, get, create, update, remove, testConnection, listSecretNames) with the key parameter for each. This cleanly distinguishes it from every sibling dokploy_* tool, none of which deal with vault providers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives actionable routing guidance within the multi-action tool: testConnection takes a vaultProviderId for a saved provider or a raw config to validate credentials before saving, and update explicitly says 'run get first' because the API replaces the provider. What it lacks is any statement of when not to use this tool versus a sibling, but given no sibling overlaps the domain, the intra-tool guidance is the valuable part and it is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Parent service id for list | |
| name | No | ||
| action | Yes | ||
| prefix | No | Object key prefix on the destination | |
| appName | No | ||
| enabled | No | ||
| mongoId | No | ||
| mysqlId | No | ||
| redisId | No | ||
| turnOff | No | Stop the service during the backup window | |
| libsqlId | No | ||
| composeId | No | ||
| mariadbId | No | ||
| postgresId | No | ||
| volumeName | No | Docker volume name to snapshot | |
| serviceName | No | ||
| serviceType | No | ||
| applicationId | No | ||
| destinationId | No | ||
| cronExpression | No | ||
| volumeBackupId | No | ||
| keepLatestCount | No | ||
| volumeBackupType | No | Service type for list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions the rclone-based nature, scheduling, the turnOff option to stop services during backup, and runManually for immediate triggers. However, it does not disclose potential side effects such as downtime implications of turnOff, the destructive nature of remove, or how keepLatestCount affects retention. It adds some meaningful context but not a full behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficiently communicates all key information without fluff. It uses a compact action-colon format that packs a lot of detail. However, it's a single block of text; a bulleted list would improve readability, but it remains reasonably structured and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 23 parameters, 6 actions, no output schema, and no annotations, the description does a solid job of covering the operational aspects. It explains each action's required parameters and the distinction from related tools. Missing elements include return value descriptions and specific behavior of each action (e.g., what get returns, what runManually does beyond 'trigger immediately'), but given the high complexity, the description is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is only 22%, and the schema alone does not indicate which parameters apply to which action. The description compensates exceptionally well by explicitly mapping each action to its required and optional parameters (e.g., create needs name+volumeName+prefix+cronExpression+destinationId, list needs id+volumeBackupType). This is critical semantic guidance that the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages scheduled volume-level backups using rclone, and explicitly distinguishes it from dokploy_backup which does DB-native dumps. This specific verb+resource+scope fully clarifies what the tool does and differentiates it from its sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts this tool with dokploy_backup ('Distinct from dokploy_backup, which does DB-native dumps'), giving direct when-to-use/when-not-to-use guidance. It also enumerates the actions (create, update, remove, get, list, runManually) and the required parameters for each, effectively guiding the agent on how to invoke the tool correctly for different operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infoARead-only
Returns identity and build information for this server (name, version, build commit, runtime, capability counts)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the description's disclosure of a read operation is consistent. It adds value by specifying the exact return content (name, version, build commit, runtime, capability counts), which is not captured in the annotations. No behavioral contradictions or hidden effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the purpose ('Returns identity and build information for this server') and immediately lists the specific fields. Every word earns its place; there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and is read-only, the description fully covers what the agent needs to know: what it returns (identity and build info with listed fields). The context of sibling tools is clear, and no additional information is needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the baseline is 4. The description does not need to explain parameters since there are none. It adds no additional parameter information but none is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool returns 'identity and build information for this server' and lists the specific fields (name, version, build commit, runtime, capability counts). This clearly distinguishes it from the sibling tools, which are all time-related operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. However, the sibling tools are all time-focused (get_current_time, convert_timezone, etc.), so the context implies this is the tool for server info. No explicit guidance on when not to use it is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v1.10.0- Changed
dokploy_application1 field changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "get", - "update", - "move", - "deploy", - "start", - "stop", - "delete", - "markRunning", - "refreshToken", - "cleanQueues", - "killBuild", - "cancelDeployment", - "reload", - "saveEnvironment", - "setEnvVars", - "getEnvKeys", - "getEnvValuesUnsafe", - "saveBuildType", - "traefikConfig", - "readMonitoring", - "readLogs", - "search" -]New value: +[ + "create", + "get", + "update", + "move", + "deploy", + "start", + "stop", + "delete", + "markRunning", + "refreshToken", + "cleanQueues", + "killBuild", + "cancelDeployment", + "reload", + "saveEnvironment", + "setEnvVars", + "getEnvKeys", + "getEnvValuesUnsafe", + "saveBuildType", + "traefikConfig", + "readMonitoring", + "readLogs", + "search", + "deployNginxQuickstart" +]
- Changed
dokploy_compose1 field changed- added
Input schema / properties / freshVolumesAdded value: +{ + "description": "deploy: delete the service's volumes before deploying — destroys their data", + "type": "boolean" +}
- Changed
dokploy_dns_provider4 fields changed- changed
Input schema / properties / config / oneOfPrevious value: -[ - { - "properties": { - "apiToken": { - "minLength": 1, - "type": "string" - }, - "providerType": { - "const": "cloudflare", - "type": "string" - } - }, - "required": [ - "providerType", - "apiToken" - ], - "type": "object" - }, - { - "properties": { - "accessKeyId": { - "minLength": 1, - "type": "string" - }, - "providerType": { - "const": "route53", - "type": "string" - }, - "secretAccessKey": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "providerType", - "accessKeyId", - "secretAccessKey" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "apiToken": { + "minLength": 1, + "type": "string" + }, + "providerType": { + "const": "cloudflare", + "type": "string" + } + }, + "required": [ + "providerType", + "apiToken" + ], + "type": "object" + }, + { + "properties": { + "accessKeyId": { + "minLength": 1, + "type": "string" + }, + "providerType": { + "const": "route53", + "type": "string" + }, + "secretAccessKey": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "providerType", + "accessKeyId", + "secretAccessKey" + ], + "type": "object" + }, + { + "properties": { + "apiKey": { + "minLength": 1, + "type": "string" + }, + "providerType": { + "const": "porkbun", + "type": "string" + }, + "secretApiKey": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "providerType", + "apiKey", + "secretApiKey" + ], + "type": "object" + }, + { + "properties": { + "apiToken": { + "minLength": 1, + "type": "string" + }, + "providerType": { + "const": "infomaniak", + "type": "string" + } + }, + "required": [ + "providerType", + "apiToken" + ], + "type": "object" + }, + { + "properties": { + "applicationKey": { + "minLength": 1, + "type": "string" + }, + "applicationSecret": { + "minLength": 1, + "type": "string" + }, + "consumerKey": { + "minLength": 1, + "type": "string" + }, + "endpoint": { + "description": "defaults to ovh-eu", + "enum": [ + "ovh-eu", + "ovh-ca", + "ovh-us", + "kimsufi-eu", + "kimsufi-ca", + "soyoustart-eu", + "soyoustart-ca" + ], + "type": "string" + }, + "providerType": { + "const": "ovh", + "type": "string" + } + }, + "required": [ + "providerType", + "applicationKey", + "applicationSecret", + "consumerKey" + ], + "type": "object" + } +] - added
Input schema / properties / proxiedAdded value: +{ + "description": "Cloudflare only: route the record through Cloudflare's proxy", + "type": "boolean" +} - changed
Input schema / properties / type / descriptionPrevious value: -"Record type — the API accepts only A or CNAME"New value: +"Record type" - changed
Input schema / properties / type / enumPrevious value: -[ - "A", - "CNAME" -]New value: +[ + "A", + "AAAA", + "CNAME", + "MX", + "TXT", + "NS", + "SRV", + "CAA", + "PTR" +]
- Changed
dokploy_domain1 field changed- removed
Input schema / properties / serverIpRemoved value: -{ - "type": "string" -}
- Changed
dokploy_network1 field changed- changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "get", - "create", - "remove", - "recreate", - "inspect", - "import", - "networksToSync" -]New value: +[ + "list", + "get", + "create", + "remove", + "recreate", + "resync", + "inspect", + "import", + "networksToSync" +]
- Changed
dokploy_server1 field changed- changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "get", - "create", - "update", - "remove", - "count", - "publicIp", - "getMetrics" -]New value: +[ + "list", + "get", + "create", + "update", + "remove", + "count", + "publicIp", + "getMetrics", + "getServices" +]
- Changed
dokploy_vault_provider1 field changed- changed
Input schema / properties / config / oneOfPrevious value: -[ - { - "properties": { - "mount": { - "description": "defaults to 'secret'", - "minLength": 1, - "type": "string" - }, - "namespace": { - "type": "string" - }, - "providerType": { - "const": "hashicorp", - "type": "string" - }, - "token": { - "minLength": 1, - "type": "string" - }, - "url": { - "format": "uri", - "type": "string" - } - }, - "required": [ - "providerType", - "url", - "token" - ], - "type": "object" - }, - { - "properties": { - "clientId": { - "minLength": 1, - "type": "string" - }, - "clientSecret": { - "minLength": 1, - "type": "string" - }, - "environmentSlug": { - "minLength": 1, - "type": "string" - }, - "projectId": { - "description": "the Infisical project, not a Dokploy projectId", - "minLength": 1, - "type": "string" - }, - "providerType": { - "const": "infisical", - "type": "string" - }, - "secretPath": { - "description": "defaults to '/'", - "type": "string" - }, - "siteUrl": { - "description": "defaults to https://app.infisical.com", - "format": "uri", - "type": "string" - } - }, - "required": [ - "providerType", - "clientId", - "clientSecret", - "projectId", - "environmentSlug" - ], - "type": "object" - }, - { - "properties": { - "accessKeyId": { - "minLength": 1, - "type": "string" - }, - "endpoint": { - "format": "uri", - "type": "string" - }, - "providerType": { - "const": "aws", - "type": "string" - }, - "region": { - "minLength": 1, - "type": "string" - }, - "secretAccessKey": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "providerType", - "region", - "accessKeyId", - "secretAccessKey" - ], - "type": "object" - }, - { - "properties": { - "config": { - "description": "Doppler config name, e.g. 'prod'", - "type": "string" - }, - "project": { - "type": "string" - }, - "providerType": { - "const": "doppler", - "type": "string" - }, - "serviceToken": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "providerType", - "serviceToken" - ], - "type": "object" - }, - { - "properties": { - "clientId": { - "minLength": 1, - "type": "string" - }, - "clientSecret": { - "minLength": 1, - "type": "string" - }, - "providerType": { - "const": "azure", - "type": "string" - }, - "tenantId": { - "minLength": 1, - "type": "string" - }, - "vaultUri": { - "format": "uri", - "type": "string" - } - }, - "required": [ - "providerType", - "vaultUri", - "tenantId", - "clientId", - "clientSecret" - ], - "type": "object" - }, - { - "properties": { - "apiUrl": { - "description": "defaults to https://api.scaleway.com", - "format": "uri", - "type": "string" - }, - "projectId": { - "description": "the Scaleway project, not a Dokploy projectId", - "minLength": 1, - "type": "string" - }, - "providerType": { - "const": "scaleway", - "type": "string" - }, - "region": { - "description": "defaults to 'fr-par'", - "type": "string" - }, - "secretKey": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "providerType", - "projectId", - "secretKey" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "mount": { + "description": "defaults to 'secret'", + "minLength": 1, + "type": "string" + }, + "namespace": { + "type": "string" + }, + "providerType": { + "const": "hashicorp", + "type": "string" + }, + "token": { + "minLength": 1, + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "required": [ + "providerType", + "url", + "token" + ], + "type": "object" + }, + { + "properties": { + "clientId": { + "minLength": 1, + "type": "string" + }, + "clientSecret": { + "minLength": 1, + "type": "string" + }, + "environmentSlug": { + "minLength": 1, + "type": "string" + }, + "projectId": { + "description": "the Infisical project, not a Dokploy projectId", + "minLength": 1, + "type": "string" + }, + "providerType": { + "const": "infisical", + "type": "string" + }, + "secretPath": { + "description": "defaults to '/'", + "type": "string" + }, + "siteUrl": { + "description": "defaults to https://app.infisical.com", + "format": "uri", + "type": "string" + } + }, + "required": [ + "providerType", + "clientId", + "clientSecret", + "projectId", + "environmentSlug" + ], + "type": "object" + }, + { + "properties": { + "accessKeyId": { + "minLength": 1, + "type": "string" + }, + "endpoint": { + "format": "uri", + "type": "string" + }, + "providerType": { + "const": "aws", + "type": "string" + }, + "region": { + "minLength": 1, + "type": "string" + }, + "secretAccessKey": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "providerType", + "region", + "accessKeyId", + "secretAccessKey" + ], + "type": "object" + }, + { + "properties": { + "accessKeyId": { + "minLength": 1, + "type": "string" + }, + "endpoint": { + "format": "uri", + "type": "string" + }, + "parameterPath": { + "description": "parameter discovery path, e.g. '/myapp/prod'", + "type": "string" + }, + "providerType": { + "const": "aws-parameter-store", + "type": "string" + }, + "region": { + "minLength": 1, + "type": "string" + }, + "secretAccessKey": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "providerType", + "region", + "accessKeyId", + "secretAccessKey" + ], + "type": "object" + }, + { + "properties": { + "config": { + "description": "Doppler config name, e.g. 'prod'", + "type": "string" + }, + "project": { + "type": "string" + }, + "providerType": { + "const": "doppler", + "type": "string" + }, + "serviceToken": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "providerType", + "serviceToken" + ], + "type": "object" + }, + { + "properties": { + "clientId": { + "minLength": 1, + "type": "string" + }, + "clientSecret": { + "minLength": 1, + "type": "string" + }, + "providerType": { + "const": "azure", + "type": "string" + }, + "tenantId": { + "minLength": 1, + "type": "string" + }, + "vaultUri": { + "format": "uri", + "type": "string" + } + }, + "required": [ + "providerType", + "vaultUri", + "tenantId", + "clientId", + "clientSecret" + ], + "type": "object" + }, + { + "properties": { + "apiUrl": { + "description": "defaults to https://api.scaleway.com", + "format": "uri", + "type": "string" + }, + "projectId": { + "description": "the Scaleway project, not a Dokploy projectId", + "minLength": 1, + "type": "string" + }, + "providerType": { + "const": "scaleway", + "type": "string" + }, + "region": { + "description": "defaults to 'fr-par'", + "type": "string" + }, + "secretKey": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "providerType", + "projectId", + "secretKey" + ], + "type": "object" + }, + { + "properties": { + "apiUrl": { + "description": "defaults to https://api.phase.dev", + "format": "uri", + "type": "string" + }, + "appId": { + "description": "the Phase app ID", + "minLength": 1, + "type": "string" + }, + "env": { + "description": "Phase environment name, e.g. 'production'", + "minLength": 1, + "type": "string" + }, + "path": { + "description": "defaults to '/'", + "type": "string" + }, + "providerType": { + "const": "phase", + "type": "string" + }, + "token": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "providerType", + "token", + "appId", + "env" + ], + "type": "object" + } +]
11 tool updates
v1.9.1- Changed
dokploy_application2 fields changed- added
Input schema / properties / detachDokployNetworkAdded value: +{ + "description": "update: detach from the default dokploy-network, leaving only networkIds", + "type": "boolean" +} - added
Input schema / properties / networkIdsAdded value: +{ + "description": "update: Docker network IDs to attach this application to (see dokploy_network list)", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
dokploy_compose2 fields changed- added
Input schema / properties / createEnvFileAdded value: +{ + "description": "update/saveEnvironment: also write the env out to a .env file beside the compose file", + "type": "boolean" +} - added
Input schema / properties / serviceNetworksAdded value: +{ + "description": "update: per-service Docker network attachments. All three fields are required per entry (see dokploy_network list for IDs).", + "items": { + "properties": { + "detachDokployNetwork": { + "type": "boolean" + }, + "networkIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "serviceName": { + "type": "string" + } + }, + "required": [ + "serviceName", + "networkIds", + "detachDokployNetwork" + ], + "type": "object" + }, + "type": "array" +}
- Added
dokploy_dns_provider - Changed
dokploy_docker5 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "getContainers", - "restartContainer", - "startContainer", - "stopContainer", - "killContainer", - "removeContainer", - "getConfig", - "findContainers" -]New value: +[ + "getContainers", + "restartContainer", + "startContainer", + "stopContainer", + "killContainer", + "removeContainer", + "getConfig", + "findContainers", + "listContainerFiles", + "readContainerFile", + "writeContainerFile", + "deleteContainerFile", + "getEvents", + "getServerHealth", + "getDiskUsage", + "getBuildCache", + "pruneBuildCache" +] - added
Input schema / properties / contentAdded value: +{ + "description": "writeContainerFile: full new file contents", + "type": "string" +} - added
Input schema / properties / minutesAdded value: +{ + "description": "getEvents: look back N minutes (default 15)", + "maximum": 1440, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / pathAdded value: +{ + "description": "Absolute path inside the container, for the file actions", + "maxLength": 4096, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / sinceHoursAdded value: +{ + "description": "getServerHealth: look back N hours (max 168)", + "maximum": 168, + "minimum": 1, + "type": "integer" +}
- Added
dokploy_docker_image - Added
dokploy_docker_volume - Changed
dokploy_domain2 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "list", - "get", - "update", - "delete", - "generate", - "canGenerateTraefikMe", - "validate" -]New value: +[ + "create", + "list", + "get", + "update", + "delete", + "toggleEnable", + "generate", + "canGenerateTraefikMe", + "validate" +] - added
Input schema / properties / enabledAdded value: +{ + "description": "update only: enable or disable the domain", + "type": "boolean" +}
- Added
dokploy_network - Added
dokploy_overview - Changed
dokploy_settings2 fields changed- changed
Input schema / properties / cleanType / enumPrevious value: -[ - "all", - "images", - "volumes", - "stoppedContainers", - "dockerBuilder", - "dockerPrune", - "monitoring", - "redis", - "deploymentQueue", - "sshPrivateKey" -]New value: +[ + "all", + "images", + "volumes", + "stoppedContainers", + "dockerBuilder", + "dockerPrune", + "monitoring", + "deploymentQueue", + "sshPrivateKey" +] - changed
Input schema / properties / reloadTarget / enumPrevious value: -[ - "server", - "traefik", - "redis" -]New value: +[ + "server", + "traefik" +]
- Added
dokploy_vault_provider
10 tool updates
v1.8.3- Changed
dokploy_application5 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "get", - "update", - "move", - "deploy", - "start", - "stop", - "delete", - "markRunning", - "refreshToken", - "cleanQueues", - "killBuild", - "cancelDeployment", - "reload", - "saveEnvironment", - "setEnvVars", - "getEnvKeys", - "getEnvValuesUnsafe", - "saveBuildType", - "traefikConfig", - "readMonitoring", - "readLogs" -]New value: +[ + "create", + "get", + "update", + "move", + "deploy", + "start", + "stop", + "delete", + "markRunning", + "refreshToken", + "cleanQueues", + "killBuild", + "cancelDeployment", + "reload", + "saveEnvironment", + "setEnvVars", + "getEnvKeys", + "getEnvValuesUnsafe", + "saveBuildType", + "traefikConfig", + "readMonitoring", + "readLogs", + "search" +] - added
Input schema / properties / limitAdded value: +{ + "description": "search: max results (default 20)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "search: pagination offset", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / projectIdAdded value: +{ + "description": "search: filter to a project", + "type": "string" +} - added
Input schema / properties / qAdded value: +{ + "description": "search: freeform query across name/appName/description/repository/owner", + "type": "string" +}
- Added
dokploy_audit_log - Changed
dokploy_backup1 field changed- added
Input schema / properties / includeEncryptionKeyAdded value: +{ + "description": "Store the database encryption key alongside the backup", + "type": "boolean" +}
- Changed
dokploy_compose5 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "get", - "update", - "delete", - "deploy", - "start", - "stop", - "move", - "loadServices", - "loadMounts", - "getDefaultCommand", - "cancelDeployment", - "cleanQueues", - "killBuild", - "refreshToken", - "saveEnvironment", - "setEnvVars", - "getEnvKeys", - "getEnvValuesUnsafe", - "readLogs" -]New value: +[ + "create", + "get", + "update", + "delete", + "deploy", + "start", + "stop", + "move", + "loadServices", + "loadMounts", + "getDefaultCommand", + "cancelDeployment", + "cleanQueues", + "killBuild", + "refreshToken", + "saveEnvironment", + "setEnvVars", + "getEnvKeys", + "getEnvValuesUnsafe", + "readLogs", + "search" +] - added
Input schema / properties / limitAdded value: +{ + "description": "search: max results (default 20)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "search: pagination offset", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / projectIdAdded value: +{ + "description": "search: filter to a project", + "type": "string" +} - added
Input schema / properties / qAdded value: +{ + "description": "search: freeform query", + "type": "string" +}
- Changed
dokploy_database5 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "get", - "update", - "move", - "start", - "stop", - "deploy", - "rebuild", - "remove", - "reload", - "changeStatus", - "saveEnvironment", - "setEnvVars", - "getEnvKeys", - "getEnvValuesUnsafe", - "saveExternalPort" -]New value: +[ + "create", + "get", + "update", + "move", + "start", + "stop", + "deploy", + "rebuild", + "remove", + "reload", + "changeStatus", + "saveEnvironment", + "setEnvVars", + "getEnvKeys", + "getEnvValuesUnsafe", + "saveExternalPort", + "search" +] - added
Input schema / properties / limitAdded value: +{ + "description": "search: max results (default 20)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "search: pagination offset", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / projectIdAdded value: +{ + "description": "search: filter to a project", + "type": "string" +} - added
Input schema / properties / qAdded value: +{ + "description": "search: freeform query", + "type": "string" +}
- Changed
dokploy_deployment2 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "killProcess" -]New value: +[ + "list", + "queueList", + "killProcess", + "readLogs", + "remove" +] - added
Input schema / properties / tailAdded value: +{ + "description": "readLogs: tail N lines (default 100)", + "maximum": 10000, + "minimum": 1, + "type": "integer" +}
- Added
dokploy_preview_deployment - Added
dokploy_redirects - Added
dokploy_schedule - Added
dokploy_volume_backup
16 tool updates
v1.7.4- Changed
dokploy_application1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_backup1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_compose1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_database3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / sqldPrimaryUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / sqldPrimaryUrl / typeAdded value: +"string"
- Changed
dokploy_deployment1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_destination6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / additionalFlags / anyOfRemoved value: -[ - { - "items": { - "pattern": "^--[a-zA-Z0-9-]+(=[a-zA-Z0-9._:/@-]+)?$", - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / additionalFlags / itemsAdded value: +{ + "pattern": "^--[a-zA-Z0-9-]+(=[a-zA-Z0-9._:/@-]+)?$", + "type": "string" +} - added
Input schema / properties / additionalFlags / typeAdded value: +"array" - removed
Input schema / properties / provider / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / provider / typeAdded value: +"string"
- Changed
dokploy_docker1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_domain1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_environment1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_infrastructure1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_mounts25 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / applicationId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / applicationId / typeAdded value: +"string" - removed
Input schema / properties / composeId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / composeId / typeAdded value: +"string" - removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / filePath / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / filePath / typeAdded value: +"string" - removed
Input schema / properties / hostPath / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / hostPath / typeAdded value: +"string" - removed
Input schema / properties / libsqlId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / libsqlId / typeAdded value: +"string" - removed
Input schema / properties / mariadbId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mariadbId / typeAdded value: +"string" - removed
Input schema / properties / mongoId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mongoId / typeAdded value: +"string" - removed
Input schema / properties / mysqlId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mysqlId / typeAdded value: +"string" - removed
Input schema / properties / postgresId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / postgresId / typeAdded value: +"string" - removed
Input schema / properties / redisId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / redisId / typeAdded value: +"string" - removed
Input schema / properties / volumeName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / volumeName / typeAdded value: +"string"
- Changed
dokploy_project1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_registry3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / imagePrefix / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / imagePrefix / typeAdded value: +"string"
- Changed
dokploy_server1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_settings1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dokploy_ssh_key1 field changed- added
Input schema / additionalPropertiesAdded value: +false
7 tool updates
v1.7.3- Changed
dokploy_application4 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "get", - "update", - "move", - "deploy", - "start", - "stop", - "delete", - "markRunning", - "refreshToken", - "cleanQueues", - "killBuild", - "cancelDeployment", - "reload", - "saveEnvironment", - "saveBuildType", - "traefikConfig", - "readMonitoring", - "readLogs" -]New value: +[ + "create", + "get", + "update", + "move", + "deploy", + "start", + "stop", + "delete", + "markRunning", + "refreshToken", + "cleanQueues", + "killBuild", + "cancelDeployment", + "reload", + "saveEnvironment", + "setEnvVars", + "getEnvKeys", + "getEnvValuesUnsafe", + "saveBuildType", + "traefikConfig", + "readMonitoring", + "readLogs" +] - changed
Input schema / properties / env / descriptionPrevious value: -"Environment variables as KEY=VALUE pairs, one per line. Example: 'DB_HOST=localhost\\nDB_PORT=5432'"New value: +"Environment variables as KEY=VALUE pairs, one per line. Example: 'DB_HOST=localhost\\nDB_PORT=5432'. Used by saveEnvironment (full replace)." - added
Input schema / properties / setAdded value: +{ + "description": "setEnvVars: KEY=VALUE pairs to upsert, one per line. Existing keys retain order; new keys append.", + "type": "string" +} - added
Input schema / properties / unsetAdded value: +{ + "description": "setEnvVars: list of KEY names to remove. Unknown keys are silently skipped.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
dokploy_compose4 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "get", - "update", - "delete", - "deploy", - "start", - "stop", - "move", - "loadServices", - "loadMounts", - "getDefaultCommand", - "cancelDeployment", - "cleanQueues", - "killBuild", - "refreshToken", - "readLogs" -]New value: +[ + "create", + "get", + "update", + "delete", + "deploy", + "start", + "stop", + "move", + "loadServices", + "loadMounts", + "getDefaultCommand", + "cancelDeployment", + "cleanQueues", + "killBuild", + "refreshToken", + "saveEnvironment", + "setEnvVars", + "getEnvKeys", + "getEnvValuesUnsafe", + "readLogs" +] - changed
Input schema / properties / env / descriptionPrevious value: -"Environment variables as KEY=VALUE pairs, one per line. Example: 'DB_HOST=localhost\\nDB_PORT=5432'"New value: +"Environment variables as KEY=VALUE pairs, one per line. Example: 'DB_HOST=localhost\\nDB_PORT=5432'. Used by saveEnvironment (full replace)." - added
Input schema / properties / setAdded value: +{ + "description": "setEnvVars: KEY=VALUE pairs to upsert, one per line.", + "type": "string" +} - added
Input schema / properties / unsetAdded value: +{ + "description": "setEnvVars: list of KEY names to remove.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
dokploy_database4 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create", - "get", - "update", - "move", - "start", - "stop", - "deploy", - "rebuild", - "remove", - "reload", - "changeStatus", - "saveEnvironment", - "saveExternalPort" -]New value: +[ + "create", + "get", + "update", + "move", + "start", + "stop", + "deploy", + "rebuild", + "remove", + "reload", + "changeStatus", + "saveEnvironment", + "setEnvVars", + "getEnvKeys", + "getEnvValuesUnsafe", + "saveExternalPort" +] - changed
Input schema / properties / env / descriptionPrevious value: -"Environment variables as KEY=VALUE pairs, one per line. Example: 'DB_HOST=localhost\\nDB_PORT=5432'"New value: +"Environment variables as KEY=VALUE pairs, one per line. Used by saveEnvironment (full replace)." - added
Input schema / properties / setAdded value: +{ + "description": "setEnvVars: KEY=VALUE pairs to upsert, one per line.", + "type": "string" +} - added
Input schema / properties / unsetAdded value: +{ + "description": "setEnvVars: list of KEY names to remove.", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
info - Removed
soma_capabilities - Removed
soma_connections - Removed
soma_health
19 tool updates
v1.7.0- First observed
dokploy_application - First observed
dokploy_backup - First observed
dokploy_compose - First observed
dokploy_database - First observed
dokploy_deployment - First observed
dokploy_destination - First observed
dokploy_docker - First observed
dokploy_domain - First observed
dokploy_environment - First observed
dokploy_infrastructure - First observed
dokploy_mounts - First observed
dokploy_project - First observed
dokploy_registry - First observed
dokploy_server - First observed
dokploy_settings - First observed
dokploy_ssh_key - First observed
soma_capabilities - First observed
soma_connections - First observed
soma_health
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 for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceComprehensive, type-safe MCP server providing 380 tools to manage Dokploy deployments, applications, and infrastructure via natural language.20 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.20 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.4217 npm4MIT
- AlicenseNot gradedqualityFmaintenanceMCP server for Coolify infrastructure management, providing 45 tools for servers, applications, databases, deployments, and diagnostics via natural language.16 npmMIT