dokploy-mcp-server
The dokploy-mcp-server provides a comprehensive MCP interface for managing a self-hosted Dokploy PaaS instance through AI assistants, covering the full DevOps lifecycle with 21 tools and minimal token usage.
Core capabilities include:
Projects – List, create, update, remove, and duplicate projects with nested environment/service discovery
Applications – Full lifecycle management: create, deploy, start, stop, delete, update source/build config, manage env vars safely, read logs and monitoring, configure Traefik, manage build queues
Docker Compose – Create, deploy, start, stop, update, and delete Compose stacks; manage env vars and read logs
Databases – Unified management of all 6 types (PostgreSQL, MySQL, MariaDB, MongoDB, Redis, libSQL): create, deploy, start, stop, rebuild, manage env vars, set external ports
Deployments – List and kill deployments across applications, compose stacks, servers, schedules, preview deployments, backups, and volume backups
Docker Containers – List, restart, start, stop, kill, remove containers; get config; find by name/label/stack/service
Domains – Create, list, update, delete domains; generate Traefik-me domains; validate DNS
Servers – List, add, update, remove remote servers; get public IP, metrics, and server count
Backups – Schedule and trigger manual backups for any database type or the Dokploy server itself
Environments – Create, list, update, remove, and duplicate project environments
Infrastructure – Manage ports, basic auth, and SSL certificates
Mounts – Manage volume, bind, and file mounts across any service type
SSH Keys – Create, list, update, remove, and generate (RSA/Ed25519) SSH keys
Registries – Manage private container registries and test credentials
Destinations – Manage S3-compatible backup destinations and test connections
Settings – Check system health, get version/IP, clean Docker resources, reload server/Traefik/Redis
Environment Variable Safety – Granular upsert/remove with masked confirmation, keys-only retrieval, and an explicit unsafe escape hatch
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 "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@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?
The official Dokploy MCP generates one tool per API endpoint — at the 0.29.14 measurement below, 546 of them, exactly matching the 546 paths in Dokploy's OpenAPI spec at that version. (Dokploy v0.30.2 ships 597 paths; the figures in this section are left at their measured values rather than re-estimated.) 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 | 546 | 22 (21 + |
| 294,957 bytes | 34,528 bytes |
Approximate tokens loaded up front | ~74k | ~8.6k |
Median tool schema | 388 bytes | 1,131 bytes |
Measured 2026-08-08 against @dokploy/mcp@0.29.14 and dokploy-mcp-server@1.8.2, by starting each server, calling tools/list, and counting the serialized schema bytes (divided by 4 for a rough token estimate).
Since that measurement this server grew to 27 tools tracking Dokploy v0.30.2. Measured the same way — live tools/list over stdio — it now exposes 28 tools (27 + info) for 48,452 bytes (~12.1k tokens). The official server has not been re-measured against 0.30.2, so the table above is left at the paired 0.29.14 figures rather than mixing a new number for one side with an old one for the other.
On a 200k-token context window, the official server spends more than a third of it before you ask anything. 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.
Category | Official MCP | This Server |
Projects | 9 tools | 1 tool (6 actions) |
Applications | 31 tools | 1 tool (23 actions) |
Compose | 31 tools | 1 tool (21 actions) |
Deployments | 9 tools | 1 tool (5 actions) |
Docker | 12 tools | 1 tool (17 actions) |
Docker Volumes | n/a (new in 0.30.2) | 1 tool (8 actions) |
Docker Images | n/a (new in 0.30.2) | 1 tool (3 actions) |
Networks | n/a (new in 0.30.2) | 1 tool (8 actions) |
Overview | n/a (new in 0.30.2) | 1 tool (3 actions) |
DNS Providers | n/a (new in 0.30.2) | 1 tool (11 actions) |
Vault Providers | n/a (new in 0.30.2) | 1 tool (7 actions) |
Domains | 9 tools | 1 tool (9 actions) |
Redirects | 4 tools | 1 tool (4 actions) |
Servers | 18 tools | 1 tool (8 actions) |
Settings | 54 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) | 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 | 346 tools | 27 tools |
Key advantages:
Minimal token usage - 346 endpoints' worth of surface in 27 tools, for roughly an eighth 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
The official server covers 49 categories to this server's 27. Of its 546 tools, 346 fall inside the categories above; the remaining 200 have no equivalent here:
Notifications (41 tools) - email, Slack, Discord, Telegram, Gotify webhooks
Users, organizations, roles, SSO (64 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 (18 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 (23 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
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.
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. 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.
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 (8 actions)
Actions: list | get | create | update | remove | count | publicIp | getMetrics
Server management. create requires name + ipAddress + port + username + sshKeyId + serverType (deploy | build). getMetrics requires url + token.
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 (8 actions)
Actions: list | get | create | remove | recreate | 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, and recreate take networkId — recreate drops and re-adds the network, so attached services are briefly disconnected. 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) or route53 (accessKeyId, secretAccessKey). 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, plus recordId for update), deleteRecord (+ recordId). type accepts A or CNAME only. 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 six backends: hashicorp, infisical, aws, doppler, azure, scaleway. 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. 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 provided, the description carries the full burden and does it well: it reveals that get returns a masked env summary and never values, saveEnvironment is a full replace, setEnvVars is a server-side read-modify-write with masked confirmation, and getEnvValuesUnsafe writes real values into the transcript/logs. It also exposes the first-deploy failure mode and the search-index limitation, which 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 appropriately sized for a 23-action tool, front-loaded with the resource name and using a consistent action: parameter pattern. Trivial grouped actions like start/stop/delete/markRunning/refreshToken/cleanQueues/killBuild/cancelDeployment are collapsed into one clause, and every sentence carries caveats or semantics rather than 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?
For a tool with no annotations and no output schema, this is remarkably complete: required IDs per action, env-var safety boundaries, log defaults, deploy retry behavior, and search limitations are all present. The remaining gaps are undefined return shapes for most actions and missing prerequisites for some update paths (e.g., sourceType github requiring repository+owner+branch), but the coverage is strong for the size.
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%, so the description compensates by mapping parameters to actions and adding semantics that are not in the schema: env KEY=VALUE full replace, set/unset upsert/remove behavior, traefikConfig omit-to-read, search fields, and log tail/since/search meaning. Still, the update action hand-waves some fields with 'etc.', and many numeric/resource fields remain unspecified in both schema and description.
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 identifies this as the application management dispatcher ('Manage applications') and enumerates every supported action: create, get, update, move, deploy, start/stop/delete, env operations, build type, traefik config, monitoring, logs, and search. It differentiates from sibling tools by noting the search index is narrower than dokploy_project/dokploy_overview and that it should be used to find a known service, not to inventory.
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 usage guidance for search, naming dokploy_project/dokploy_overview as better for inventory, and warns that the first deploy on new services may fail and should be retried immediately. It also flags getEnvValuesUnsafe as an unsafe escape hatch. It does not systematically compare against every sibling (e.g., dokploy_compose, dokploy_deployment) for overlapping operations, but the key routing decisions are covered.
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? (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 | |
| 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 provided, the description carries the full disclosure burden and excels at it: get 'never values' (masked summary), setEnvVars 'merge inside the server, masked confirmation only', saveEnvironment 'full replace', getEnvValuesUnsafe explicitly flagged 'UNSAFE' with output going to the tool transcript, and update/createEnvFile's side effect of writing a .env file beside the compose file. It also reveals the latent first-deploy failure mode and the search index's narrowness — exactly the behavioral knowledge an agent cannot derive 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?
For a 21-action dispatcher, the description is remarkably dense with zero filler — each action is compressed into a signature plus caveats, and the most important safety warnings are front-loaded within each segment. The weakness is purely structural: a single unbroken paragraph that is hard to scan; per-action line breaks or a bulleted layout would make it exemplary.
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 39 parameters, 21 actions, no annotations, and no output schema, the description covers the high-risk and high-confusion paths well: the unsafe env escape hatch, masking behavior, deployment retry semantics, full-replace vs merge distinctions, and a cross-tool pointer (dokploy_docker findContainers for readLogs discovery). The tail actions (cancelDeployment/cleanQueues/killBuild/refreshToken) are name-listed without any behavioral explanation, and return shapes are only specified for env-related and get actions, leaving other actions' outputs unspecified.
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 64% (mid-range), and the description's main contribution is the action→parameter routing — critical for a tool where only 'action' is required and the other 38 params are context-dependent. It adds real semantics beyond the schema ('createEnvFile? (also write a .env file next to the compose file)', serviceNetworks per-entry requirements, env as KEY=VALUE lines). However, it references 'composeFile' and 'containerId' which do not map cleanly to the schema (containerId is documented under the oddly-named 'description' property; composeFile doesn't exist as a property despite additionalProperties:false).
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 clause 'Manage Docker Compose services' plus the exhaustive action enumeration (create/get/update/deploy/delete/start/stop/move/readLogs/search, etc.) makes the tool's scope fully unambiguous. It stays at 4 rather than 5 because the verb 'Manage' is generic and it never explicitly names a sibling it is not (e.g., dokploy_application), relying instead on the 'compose' resource to differentiate.
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 embeds per-action usage constraints throughout, e.g., 'loadServices: composeId (must deploy first)', deploy's 'first deploy on new services may fail — retry immediately', and the search caveat that the API index is narrower than the project tree, explicitly recommending dokploy_project/dokploy_overview for inventory instead. However, there is no global when-to-use-vs-alternatives statement for the tool itself or for most actions; the agent must infer applicability from the action signatures.
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} or route53{accessKeyId,secretAccessKey}. Records: listZones (dnsProviderId), listRecords (dnsProviderId+zoneId), createRecord/updateRecord (dnsProviderId+zoneId+type+recordName+content, ttl?, plus recordId for update), deleteRecord (dnsProviderId+zoneId+recordId). Record type is A or CNAME only. 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 — the API accepts only A or CNAME | |
| 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 | |
| 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 provided, the description carries full responsibility and discloses important hidden behaviors: update REPLACES the provider, credentials are never echoed, provider reads return only id/name/providerType, and record type is restricted to A or CNAME. This is far beyond what the input schema alone reveals.
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 organized into 'Providers:' and 'Records:' sections, front-loaded with the overall purpose. Every sentence adds operational value, especially the behavioral caveats about replacement and credential non-echoing.
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-action tool with 10 parameters, no annotations, and no output schema, the description is remarkably complete, covering action-specific requirements, config construction, and provider read return shape. The only notable gap is that record-related list operations (listZones/listRecords) do not describe their return structure, but this is minor given the level of detail provided.
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 50%, but the description compensates by mapping each action to its required parameters, explaining the discriminated config union, clarifying that recordName is distinct from provider name, and noting ttl is optional. It also gives examples for content (IP vs target host), adding meaning 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?
States specific verb + resource: 'DNS provider configuration and DNS record management.' It enumerates all actions with their required parameters, making it unmistakable what the tool does and how it is differentiated from sibling tools like dokploy_vault_provider.
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 for each action, e.g. 'update (dnsProviderId+name+config)' and 'testConnection (dnsProviderId for a saved provider, or config to check credentials before saving)'. It does not explicitly mention when not to use the tool or alternatives, but the resource-specific name and sibling list make the use case clear.
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.
| 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 | ||
| serverIp | 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 zero annotations, the description carries the full burden and it does disclose one meaningful trait: toggleEnable 'flips the enable flag blind', warning the agent that the end state is unknowable without a subsequent read. But it says nothing about the destructive side effects of delete, side effects of create (certificate generation, traefik config changes), authentication or permission needs, or idempotency. The single disclosed behavior is good, but coverage of the safety profile is thin.
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 dense with zero fluff; every phrase earns its place and the 'action: params' pair format is compact and scannable. It loses a point only for the single run-on paragraph structure — bullets or line separators would materially improve parsability for an agent picking out one action's requirements.
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?
Complexity is high — 9 actions, 16 parameters, no annotations, no output schema — and the description covers the action/parameter dispatch matrix well. But material gaps remain: return values are unspecified, the meaning of path/port/https/certificateType is unexplained, validate's behavior and error semantics are unknown, and preview domainType handling is absent. For a dispatcher of this size, 'manage domains' plus a param map is not fully self-sufficient.
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 19%, so the description must compensate — and it does, but only partially. It adds the critical action→parameter association matrix, including the conditional nuances '( +serviceName for compose)' and '(include composeId+serviceName for compose domains)', which the schema cannot express. However, parameters like path, port, https, serverIp, and certificateType remain unexplained in either source, and host is never defined as a domain name vs. IP.
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 'Manage domains' — a specific verb and resource — and then enumerates nine distinct sub-operations (create, list, get, update, delete, toggleEnable, generate, canGenerateTraefikMe, validate), giving a precise map of the tool's surface. It is clearly the domain manager among the dokploy_* siblings, though it never explicitly names a sibling it is not, so it stops short of a 5.
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?
Each action is paired with the parameters it requires ('create: host+applicationId|composeId', 'get: domainId', etc.), giving an agent explicit invocation routing. The toggleEnable entry adds a strong preference rule — 'prefer update with enabled:true|false when you need a known end state' — which is genuine guidance. However, it never addresses when to use a sibling tool instead (e.g., dokploy_redirects, dokploy_dns_provider, dokploy_server), so cross-tool routing is left implicit.
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: networkId — inspect returns the raw Docker inspect payload, recreate drops and re-adds the network so attached services are briefly disconnected. 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 provided, the description carries the behavioral burden. It discloses that inspect returns the raw Docker inspect payload and that recreate drops and re-adds the network, causing brief disconnection for attached services. It also clarifies the tracked-vs-untracked distinction for networksToSync. It could go further by stating whether remove deletes the Docker network or only removes it from Dokploy tracking, and by describing return shapes for list/get, but the most consequential side effects are covered.
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 organized by action type, with the 'Docker network management.' lead-in establishing scope immediately. It packs all action-parameter mappings, behavioral caveats, and cross-tool guidance into a compact set of sentences with no filler. The final cross-tool note is high-value and 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?
Given the tool's complexity—12 parameters, 8 actions, nested IPAM object, no output schema, and no annotations—the description is notably complete. It covers every action, the parameters each action needs, a destructive side effect, and the relationship between networksToSync and import. Minor gaps remain around the exact return values for list/get/remove and the precise semantics of remove, but nothing essential blocks correct tool selection or 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 33%, so the description must compensate, and it does. It maps actions to their relevant parameters, lists the create-specific parameters (driver bridge|overlay, internal, attachable, enableIPv4, enableIPv6, mtu 68-65535, ipam, serverId), and explains that import takes 'names (one or more names from networksToSync)'. This gives the agent actionable parameter semantics that the bare schema does not provide.
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 network management' and enumerates eight discrete actions: list, get, inspect, remove, recreate, create, networksToSync, and import. It specifies the resource types each acts on (serverId-scoped lists, networkId-scoped operations, names for import) and even distinguishes itself by pointing to dokploy_application/dokploy_compose for attaching networks, which separates it cleanly from sibling tools.
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 the exact parameter it needs: serverId for list/networksToSync/import, networkId for get/inspect/remove/recreate, and names for import. It explains when networksToSync is relevant ('networks that exist on the Docker host but are not yet tracked by Dokploy') and explicitly routes attachment work to sibling tools with 'Attach networks to workloads with dokploy_application update networkIds, or dokploy_compose update serviceNetworks.'
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_serverC
Manage servers. list/count/publicIp: no params. get: serverId. create: name+ipAddress+port+username+sshKeyId+serverType. update: serverId+fields. remove: serverId. getMetrics: url+token.
| 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?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention side effects, permissions, rate limits, return values, or what happens on success/failure. For actions like 'remove' or 'update', the behavior is not described. The description is purely parametric.
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 format to list actions and their parameters. It front-loads the purpose with 'Manage servers.' and then efficiently summarizes action-specific requirements. However, it could be better structured with bullet points or clearer separation between actions, but overall it earns its 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?
Given the complexity of 12 parameters and 8 actions with no output schema or annotations, the description is incomplete. It covers only basic parameter requirements per action, omitting details about return values, error states, pagination, or behavioral nuances. A more thorough description is needed for such a multi-action 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?
The schema coverage is only 8%, so the description must add meaning. While it does not explain each parameter's semantics, it groups required parameters per action (e.g., 'create: name+ipAddress+port+username+sshKeyId+serverType'), which adds value by indicating which parameters are relevant for which action. This partially compensates for the low schema coverage, but not entirely.
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 servers' which clearly identifies the resource. It then lists specific actions (list, get, create, update, remove, etc.) and their required parameters, providing a clear purpose. However, it does not differentiate from sibling tools like dokploy_infrastructure, which might also involve server management, but the action list makes it distinct 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 lacks any guidance on when to use this tool versus alternatives. It does not mention prerequisites, context, or when not to use it. The list of actions with required parameters implies usage, but no explicit context or exclusions are provided.
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 | doppler | azure | scaleway. 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 provided, the description carries full responsibility for behavioral disclosure. It reveals the critical update-replaces-provider semantics requiring all four fields, the limitation that secret values are never readable, and that credentials are never echoed. These are material traits an agent must know before calling correctly.
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 organized, front-loaded with the tool's purpose and then moving through action semantics and caveats. It is longer than average, but every sentence carries operational value for a complex multi-provider, multi-action tool.
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, absent annotations, and absent output schema, the description does a strong job: it covers action semantics, required parameter groupings, provider-type discrimination, assignment meaning, and secret-value limitations. It still leaves some operational detail to the schema (defaults, exact fields per provider), but those are already structed, so the description is nearly complete on its own.
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 schema: it explains that config is discriminated by providerType, clarifies the dangerous ambiguity between provider-owned projectId and Dokploy assignment projectId, and defines assignments as Dokploy project/environment scopes. This directly compensates for the schema's under-described nested fields.
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 identifies the tool as managing external secret-manager (vault) providers and enumerates every action (list, get, create, update, remove, testConnection, listSecretNames). This makes the resource and verb set unambiguous, and the 'vault' resource clearly differentiates it from sibling tools like dns_provider or registry.
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 clear practical guidance for selecting and sequencing operations: run get before update, use testConnection with config before saving, and note that listSecretNames returns names only. It does not explicitly compare against sibling tools, but the resource scope makes the intended use obvious and the in-tool action 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_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?
Annotations already declare readOnlyHint: true, so the description adds value by detailing the exact fields returned (name, version, build commit, runtime, capability counts). There is no contradiction, and the description provides useful behavioral context beyond the annotation.
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 with no waste. It front-loads the purpose ('Returns...') and lists the included fields concisely. Every word 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?
Despite lacking an output schema, the description sufficiently explains the return values by listing the fields. With zero parameters and a simple purpose, the description is complete for the agent to understand what the tool does and what it returns.
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 the schema coverage is 100%. With no parameters, the description does not need to explain parameter semantics. A baseline of 4 is appropriate as the description adds no parameter information, but none is needed.
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 that the tool returns identity and build information (name, version, build commit, runtime, capability counts) for the server. This is a specific verb+resource and distinguishes it from siblings which focus on managing specific resources like applications, databases, etc.
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 context is clear: use this tool to retrieve server metadata. While it doesn't explicitly mention when not to use it or name alternatives, the purpose is straightforward and self-explanatory for such a simple information retrieval tool.
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. Dates show when Glama detected each change.
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
Nearly every tool targets a distinct resource domain, and descriptions carefully separate near-neighbors like `dokploy_backup` vs `dokploy_volume_backup`. A few overlaps remain—`info` vs `dokploy_settings` version/health, and `dokploy_docker.pruneBuildCache` vs `dokploy_settings clean dockerBuilder`—so agents could mis-select in those edge cases.
Names follow a consistent `dokploy_<resource>` snake_case convention, with nested prefixes like `dokploy_docker_volume` and `dokploy_docker_image`; sub-action verbs (create/update/remove/list) are also consistent. The bare `info` tool and noun-only module names like `dokploy_settings` are deviations from a strict verb_noun pattern, but the overall scheme remains predictable.
With 28 top-level tools, the set exceeds the 25+ threshold and creates a heavy selection burden for agents. Although the Dokploy platform is broad, some tools could be consolidated (settings/info, docker/image/volume, overview/search), making the count feel higher than necessary.
The surface covers the full deployment lifecycle: projects, environments, applications, composes, databases, deployments, backups, domains, DNS, networks, volumes, registries, SSH keys, schedules, and audit logs. Missing user/role, git-provider, and notification management tools are notable gaps, since the audit log implies those resource types exist.
Maintenance
Related MCP Connectors
Devopness MCP server for DevOps happiness! Empower AI Agents to deploy apps and infra, to any cloud.
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.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceComprehensive, type-safe MCP server providing 380 tools to manage Dokploy deployments, applications, and infrastructure via natural language.295MIT
- 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.29MIT
- 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.42294MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Coolify infrastructure management, providing 45 tools for servers, applications, databases, deployments, and diagnostics via natural language.22MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sapientsai/dokploy-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server