agentsclimarketplace

Run dokploy mcp

Skill ppezzull/use-dockploy-mcp/skills/run-dokploy-mcp

Claude Code skill for Dokploy MCP — deploy, manage, and monitor services

Install
npx -y skills add ppezzull/use-dockploy-mcp --skill run-dokploy-mcp

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Deploy, manage, and monitor services on Dokploy via MCP tools. Use when deploying apps, checking logs, managing domains, updating environment variables, or inspecting container status on the Dokploy host.

SKILL.md

5.8 KB, as published. Nobody here has run it

Dokploy MCP Integration

Manage Dokploy services exclusively through MCP tools (mcp__dokploy__*). Never call the Dokploy HTTP API directly — no curl, no fetch.

Cardinal Rule: project-all Is Huge

project-all returns 140K+ characters on most instances. It will blow the context window if read directly. Always use the Python extraction pattern.

Finding Resource IDs

# Step 1: Call mcp__dokploy__project-all (output auto-saved to file by harness)
# Step 2: Extract with the helper script:
python3 skills/run-dokploy-mcp/extract.py <output-file> [filter-term]

Example:

python3 skills/run-dokploy-mcp/extract.py /tmp/result.txt my-project
# Output:
# Project: My Project (ID: abc-123)
#   Environment: production (ID: env-456)
#     Application: frontend | ID: app-789 | Status: running
#     Compose: supabase | ID: comp-012 | Status: running
#     Postgres: db | ID: pg-345

Data Structure

projects[] > environments[] > {
  applications[], compose[],
  postgres[], mysql[], mariadb[],
  mongo[], redis[], libsql[]
}

ID fields: projectId, environmentId, applicationId, composeId, postgresId, etc.

Common Operations

Look Up a Specific Resource (when you have the ID)

mcp__dokploy__project-one(projectId: "...")
mcp__dokploy__compose-one(composeId: "...")
mcp__dokploy__application-one(applicationId: "...")

Deploy

mcp__dokploy__application-deploy(applicationId: "...")
mcp__dokploy__compose-deploy(composeId: "...")

After deploying, check: mcp__dokploy__deployment-queueList()

Read Logs

mcp__dokploy__application-readLogs(applicationId: "...", tail: 50, search: "error")
mcp__dokploy__compose-readLogs(composeId: "...", containerId: "...", tail: 50)

For compose logs, containerId is the Docker container name (e.g. myapp-next-x7k2p-next-1), not the compose ID.

Update Environment Variables

# Application (newline-separated KEY=value, not JSON)
mcp__dokploy__application-saveEnvironment(
  applicationId: "...",
  env: "KEY=value\nKEY2=value2",
  buildArgs: null,
  buildSecrets: null,
  createEnvFile: true
)

# Compose
mcp__dokploy__compose-saveEnvironment(composeId: "...", env: "KEY=value\nKEY2=value2")

Manage Domains

mcp__dokploy__domain-byApplicationId(applicationId: "...")
mcp__dokploy__domain-create(host: "example.it", port: 3000, https: true, certificateType: "letsencrypt", applicationId: "...")
mcp__dokploy__domain-update(domainId: "...", host: "new.example.it", https: true)

Docker Containers

mcp__dokploy__docker-getContainers()                              # all containers on host
mcp__dokploy__docker-getContainersByAppLabel(appName: "...", type: "standalone")
mcp__dokploy__docker-restartContainer(containerId: "...")

serverId is optional — omit for the Dokploy host (most services).

Update Patterns

Application Update

mcp__dokploy__application-update(applicationId: "...", description: "New desc")

Only applicationId is required. Omitted fields stay unchanged. appName must match ^[a-zA-Z0-9._-]+$ (max 63 chars).

Compose Update

mcp__dokploy__compose-update(
  composeId: "...",
  sourceType: "github",
  repository: "RepoName",
  owner: "OrgName",
  branch: "main",
  composePath: "docker-compose.yml",
  autoDeploy: true
)

Only composeId is required.

Project Update

mcp__dokploy__project-update(projectId: "...", name: "ProjectName", description: "...")

Must include name even if only changing description.

Anti-Patterns

Don'tWhyDo This Instead
Read project-all output directly140K+ chars, blows contextPython extraction (extract.py)
Rely on *-search toolsFrequently return "not found"project-all + filter
Forget name in project-updateRequired in practiceAlways include current name
Pass serverId everywhereMost services use hostOnly for remote servers
Confuse composeId / containerIdDifferent thingsCompose logs need Docker container ID
Send bare "not found" to modelModel fixates on failureImmediately try project-all fallback

Destructive Operations — Always Confirm First

These are irreversible:

  • application-delete, compose-delete, postgres-remove
  • settings-cleanAll, settings-cleanDockerPrune
  • server-remove

Deployment Status

mcp__dokploy__deployment-all(applicationId: "...")
mcp__dokploy__deployment-allByCompose(composeId: "...")
mcp__dokploy__deployment-queueList()

Field Reference

ConceptFieldValues/Notes
Source typesourceTypegithub, git, raw, docker, gitlab, bitbucket, gitea, drop
Build typebuildTypenixpacks, dockerfile, railpack, heroku_buildpacks, paketo_buildpacks, static
StatusapplicationStatusidle, running, done, error
ServerserverIdnull = Dokploy host

Troubleshooting

SymptomFix
project-all output too largeUse extract.py — never read raw output
compose-search returns "not found"Fall back to project-all + Python filter
Deploy queued but not runningCheck deployment-queueList() for stuck items
Container crash-loopingapplication-readLogs(tail: 50, search: "error")
Port conflict between servicesCheck docker-getContainers() for conflicting published ports
Env vars not taking effectEnsure createEnvFile: true and redeploy after saving
compose-one on Supabase returns 70K+Huge env block — extract specific fields with Python instead of reading full output

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.