Found a bug? Want a tool added? Just feel like improving something on a Sunday afternoon? Welcome. The bar is low but it does exist.
git clone https://github.com/vcode-sh/dokploy-mcp.git
cd dokploy-mcp
npm installRequirements: Node.js >= 22, npm. If you're still on Node 18, I can't help you. That's not sarcasm, it literally won't build.
| Command | What it does |
|---|---|
npm run build |
Compile TypeScript to dist/ |
npm run dev |
Watch mode with auto-recompile |
npm run typecheck |
tsc --noEmit |
npm run lint |
Biome check |
npm run lint:fix |
Biome auto-fix |
npm run format |
Biome format |
npm start |
Run the built server |
src/
index.ts # Entry point, routes CLI vs MCP server
server.ts # MCP server creation, tool registration
api/client.ts # Fetch-based API client, lazy config, ApiError
config/types.ts # Config types and platform paths
config/resolver.ts # Config resolution chain (env -> file -> CLI)
cli/index.ts # CLI command router
cli/setup.ts # Interactive setup wizard (@clack/prompts)
tools/_factory.ts # Tool creation helpers (createTool, postTool, getTool)
tools/index.ts # Aggregates all tool module exports
tools/{module}.ts # 24 domain modules (224 tools total)
One file per Dokploy API module. Each tool is a single postTool() or getTool() call. If you can read one, you can read all 224.
- Find the module file in
src/tools/(e.g.,application.ts) - Add a
postTool()orgetTool()call with name, description, schema, endpoint - Use
.describe()on all Zod schema parameters - Set
annotations: { destructiveHint: true }for destructive operations - Add it to the module's exported array
npm run build
That's it. No registration step, no config file, no ceremony.
- Run
npm run lintbefore committing. Biome is strict. That's a feature, not a bug. - Run
npm run typecheck. TypeScript strict mode is on. Deal with it. - Use
import typefor type-only imports.verbatimModuleSyntaxwill yell at you if you don't. - ESM only. No CommonJS. It's 2026. Let it go.
- All Zod schemas get
.strict(). No sneaky extra fields. - ID parameters get
.min(1).describe(). Every time. No exceptions.
- Fork it. Branch from
main. - Make your changes. Run the whole suite.
npm run lint && npm run typecheck && npm run build-- all green or don't bother opening the PR. I will not debug your CI for you.- Write a real PR description. What changed, why, how to test it. "Fixed stuff" is not a description, it's a cry for help.
- One PR per feature or fix. Don't bundle unrelated changes.
- Include: Node version, OS, Dokploy version, what you did, what happened, what you expected. Minimum viable bug report.
- Security vulnerabilities: email hello@vcode.sh. Do NOT open a public issue. See SECURITY.md.
Biome handles formatting. Don't fight it. Tabs for indentation, double quotes, no semicolons. If you disagree with any of these choices, you're entitled to your wrong opinion.
No CLA. No 47-page contributor agreement. No corporate nonsense. Just write good code and don't be terrible to people. That's genuinely it.