Skip to main content
Glama

dokploy_compose

Manage Docker Compose services end-to-end: create, deploy, update, start/stop, read logs, set environment variables, and move between environments.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNosearch: freeform query
envNoEnvironment variables as KEY=VALUE pairs, one per line. Example: 'DB_HOST=localhost\nDB_PORT=5432'. Used by saveEnvironment (full replace).
setNosetEnvVars: KEY=VALUE pairs to upsert, one per line.
nameNo
tailNoNumber of recent log lines (default 100)
typeNo
limitNosearch: max results (default 20)
ownerNoGitHub owner/organization
sinceNoTime range: 'all' or a duration like '30m', '1h', '7d'
titleNo
unsetNosetEnvVars: list of KEY names to remove.
actionYes
branchNoGitHub branch
offsetNosearch: pagination offset
searchNoFilter log lines by substring
appNameNoInternal app name
commandNo
redeployNo
serverIdNo
composeIdNo
projectIdNosearch: filter to a project
autoDeployNoEnable auto-deploy on git push
repositoryNoGitHub repository (owner/repo format)
sourceTypeNoSource 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.
composeFileNoDocker Compose YAML content (for sourceType: raw, set this to the inline compose file)
composePathNoPath to compose file in repo
composeTypeNodocker-compose or stack
containerIdNoContainer ID for readLogs (use dokploy_docker findContainers to discover)
descriptionNo
serviceNameNo
customGitUrlNoCustom git repository URL
createEnvFileNoupdate/saveEnvironment: also write the env out to a .env file beside the compose file
deleteVolumesNo
environmentIdNo
customGitBranchNoCustom git branch
serviceNetworksNoupdate: per-service Docker network attachments. All three fields are required per entry (see dokploy_network list for IDs).
customGitSSHKeyIdNoSSH key ID for private git repos
deployDescriptionNo
targetEnvironmentIdNo

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed2 schema fields changedv1.9.1
    • addedInput schema / properties / createEnvFile
      Added value: +{
      +  "description": "update/saveEnvironment: also write the env out to a .env file beside the compose file",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / serviceNetworks
      Added 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"
      +}
  2. Changed5 schema fields changedv1.8.3
    • changedInput schema / properties / action / enum
      Previous 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"
      +]
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "search: max results (default 20)",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "search: pagination offset",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / projectId
      Added value: +{
      +  "description": "search: filter to a project",
      +  "type": "string"
      +}
    • addedInput schema / properties / q
      Added value: +{
      +  "description": "search: freeform query",
      +  "type": "string"
      +}
  3. Changed1 schema field changedv1.7.4
    • addedInput schema / additionalProperties
      Added value: +false
  4. Changed4 schema fields changedv1.7.3
    • changedInput schema / properties / action / enum
      Previous 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"
      +]
    • changedInput schema / properties / env / description
      Previous 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)."
    • addedInput schema / properties / set
      Added value: +{
      +  "description": "setEnvVars: KEY=VALUE pairs to upsert, one per line.",
      +  "type": "string"
      +}
    • addedInput schema / properties / unset
      Added value: +{
      +  "description": "setEnvVars: list of KEY names to remove.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  5. First observedv1.7.0

TDQS

A4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

Latest Blog Posts

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