@vibetools/dokploy-mcp 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,115 +1,62 @@
1
1
  # @vibetools/dokploy-mcp
2
2
 
3
- MCP server for the Dokploy API.
4
-
5
3
  [![npm version](https://img.shields.io/npm/v/@vibetools/dokploy-mcp)](https://www.npmjs.com/package/@vibetools/dokploy-mcp)
6
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
5
  [![Node >= 22](https://img.shields.io/badge/node-%3E%3D22-brightgreen)](https://nodejs.org/)
8
6
 
9
- ## Overview
10
-
11
- A [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server that provides complete coverage of the Dokploy API. With 224 tools across 24 modules, it enables LLMs to manage Dokploy infrastructure through natural language -- deploying applications, managing databases, configuring domains, handling backups, and more.
12
-
13
- ## Features
14
-
15
- - **Complete API coverage** across all 24 Dokploy modules (224 tools)
16
- - **Interactive setup wizard** -- run `npx @vibetools/dokploy-mcp setup` and start using it in seconds
17
- - **Auto-config detection** -- picks up credentials from env vars, config file, or Dokploy CLI
18
- - **Type-safe schemas** with Zod v4 validation on every parameter
19
- - **Tool annotations** (`readOnlyHint`, `destructiveHint`, `idempotentHint`) so clients can warn before destructive operations
20
- - **Lazy configuration loading** -- environment variables are validated on first API call, not at startup
21
- - **Comprehensive error handling** with actionable messages mapped from HTTP status codes
22
- - **Minimal dependencies** -- only `@modelcontextprotocol/sdk`, `zod`, and `@clack/prompts`
7
+ MCP server for the Dokploy API. 196 tools across 23 modules. Your AI agent can now deploy apps, manage databases, configure domains, and handle backups -- without you touching a dashboard.
23
8
 
24
- ## Installation
25
-
26
- ```bash
27
- npm install @vibetools/dokploy-mcp
28
- ```
29
-
30
- Or run directly:
31
-
32
- ```bash
33
- npx @vibetools/dokploy-mcp
34
- ```
9
+ Forked from [Dokploy/mcp](https://github.com/Dokploy/mcp) and rebuilt with expanded API coverage, tool annotations, Zod v4 schemas, lazy config loading, and a setup wizard. The original had 67 tools. This one has 196. Standing on shoulders, etc.
35
10
 
36
11
  ## Quick Start
37
12
 
38
- ```bash
39
- npx @vibetools/dokploy-mcp setup
40
- ```
41
-
42
- The setup wizard will:
43
- 1. Prompt for your Dokploy server URL and API key
44
- 2. Validate the credentials
45
- 3. Save configuration to `~/.config/dokploy-mcp/config.json`
46
- 4. Show the MCP client config to add
47
-
48
- After setup, add this minimal config to your MCP client:
13
+ Grab your API key from **Dokploy Settings > Profile > API/CLI** and add this to your MCP client config:
49
14
 
50
15
  ```json
51
16
  {
52
17
  "mcpServers": {
53
18
  "dokploy": {
54
19
  "command": "npx",
55
- "args": ["@vibetools/dokploy-mcp"]
20
+ "args": ["@vibetools/dokploy-mcp"],
21
+ "env": {
22
+ "DOKPLOY_URL": "https://panel.example.com",
23
+ "DOKPLOY_API_KEY": "your-api-key"
24
+ }
56
25
  }
57
26
  }
58
27
  }
59
28
  ```
60
29
 
61
- No environment variables needed -- credentials are loaded from the saved config file.
62
-
63
- ## Configuration Resolution
64
-
65
- Credentials are resolved in this order (first match wins):
30
+ That's it. No setup wizard, no config files, no PhD.
66
31
 
67
- 1. **Environment variables** -- `DOKPLOY_URL` and `DOKPLOY_API_KEY`
68
- 2. **Config file** -- `~/.config/dokploy-mcp/config.json` (created by `setup`)
69
- 3. **Dokploy CLI** -- Auto-detected from globally installed `@dokploy/cli`
32
+ ### Alternative: setup wizard
70
33
 
71
- If you have the [Dokploy CLI](https://github.com/Dokploy/cli) installed and authenticated, the MCP server will automatically use those credentials with zero configuration.
34
+ If you prefer saving credentials to disk instead of env vars:
72
35
 
73
- ## Alternative: Manual Configuration
36
+ ```bash
37
+ npx @vibetools/dokploy-mcp setup
38
+ ```
74
39
 
75
- For CI/CD pipelines or when you prefer environment variables over the config file, you can set credentials directly. Environment variables always take priority over the config file.
40
+ Validates credentials, saves to `~/.config/dokploy-mcp/config.json`, and shows you the minimal MCP config to copy. After that, the `env` block is optional.
76
41
 
77
- | Variable | Required | Description | Default |
78
- |---|---|---|---|
79
- | `DOKPLOY_URL` | Yes | Dokploy panel URL (e.g., `https://panel.example.com`) — automatically normalized | -- |
80
- | `DOKPLOY_API_KEY` | Yes | API key from Dokploy Settings > API | -- |
81
- | `DOKPLOY_TIMEOUT` | No | Request timeout in milliseconds | `30000` |
42
+ ### Alternative: Dokploy CLI auto-detection
82
43
 
83
- ## CLI Commands
44
+ If you already have the [Dokploy CLI](https://github.com/Dokploy/cli) installed and authenticated -- zero config needed. It just works.
84
45
 
85
- | Command | Description |
86
- |---|---|
87
- | `npx @vibetools/dokploy-mcp` | Start MCP server (stdio transport) |
88
- | `npx @vibetools/dokploy-mcp setup` | Interactive setup wizard |
89
- | `npx @vibetools/dokploy-mcp version` | Show version |
46
+ ## Features
90
47
 
91
- Aliases: `init` and `auth` are aliases for `setup`.
48
+ - **196 tools, 23 modules** -- applications, compose, databases (Postgres/MySQL/MariaDB/MongoDB/Redis), domains, backups, Docker, settings, and more
49
+ - **Tool annotations** -- `readOnlyHint`, `destructiveHint`, `idempotentHint` so clients can warn before you nuke something
50
+ - **Type-safe schemas** -- Zod v4 validation on every parameter
51
+ - **Lazy config loading** -- validates credentials on first API call, not at startup
52
+ - **Three config sources** -- env vars > config file > Dokploy CLI (first match wins)
53
+ - **Minimal dependencies** -- just `@modelcontextprotocol/sdk`, `zod`, and `@clack/prompts`
92
54
 
93
- ## Usage with MCP Clients
55
+ ## MCP Client Config
94
56
 
95
57
  ### Claude Desktop
96
58
 
97
- Add the following to your Claude Desktop configuration file (`claude_desktop_config.json`):
98
-
99
- **With setup (recommended):**
100
-
101
- ```json
102
- {
103
- "mcpServers": {
104
- "dokploy": {
105
- "command": "npx",
106
- "args": ["@vibetools/dokploy-mcp"]
107
- }
108
- }
109
- }
110
- ```
111
-
112
- **With environment variables:**
59
+ Add to `claude_desktop_config.json`:
113
60
 
114
61
  ```json
115
62
  {
@@ -128,22 +75,7 @@ Add the following to your Claude Desktop configuration file (`claude_desktop_con
128
75
 
129
76
  ### Claude Code
130
77
 
131
- Add the following to your `.mcp.json` configuration file:
132
-
133
- **With setup (recommended):**
134
-
135
- ```json
136
- {
137
- "mcpServers": {
138
- "dokploy": {
139
- "command": "npx",
140
- "args": ["@vibetools/dokploy-mcp"]
141
- }
142
- }
143
- }
144
- ```
145
-
146
- **With environment variables:**
78
+ Add to `.mcp.json`:
147
79
 
148
80
  ```json
149
81
  {
@@ -162,22 +94,7 @@ Add the following to your `.mcp.json` configuration file:
162
94
 
163
95
  ### Cursor
164
96
 
165
- Add to `~/.cursor/mcp.json` or `.cursor/mcp.json` in your project:
166
-
167
- **With setup (recommended):**
168
-
169
- ```json
170
- {
171
- "mcpServers": {
172
- "dokploy": {
173
- "command": "npx",
174
- "args": ["@vibetools/dokploy-mcp"]
175
- }
176
- }
177
- }
178
- ```
179
-
180
- **With environment variables:**
97
+ Add to `~/.cursor/mcp.json` or `.cursor/mcp.json`:
181
98
 
182
99
  ```json
183
100
  {
@@ -198,21 +115,6 @@ Add to `~/.cursor/mcp.json` or `.cursor/mcp.json` in your project:
198
115
 
199
116
  Add to `.vscode/mcp.json`:
200
117
 
201
- **With setup (recommended):**
202
-
203
- ```json
204
- {
205
- "servers": {
206
- "dokploy": {
207
- "command": "npx",
208
- "args": ["@vibetools/dokploy-mcp"]
209
- }
210
- }
211
- }
212
- ```
213
-
214
- **With environment variables:**
215
-
216
118
  ```json
217
119
  {
218
120
  "servers": {
@@ -228,15 +130,56 @@ Add to `.vscode/mcp.json`:
228
130
  }
229
131
  ```
230
132
 
231
- ### Local Development
133
+ Already ran `setup` or have Dokploy CLI authenticated? Drop the `env` block entirely.
134
+
135
+ ## Tools
136
+
137
+ | Module | Tools | Module | Tools |
138
+ |--------|-------|--------|-------|
139
+ | Project | 6 | Deployment | 2 |
140
+ | Application | 26 | Docker | 4 |
141
+ | Compose | 14 | Certificates | 4 |
142
+ | Domain | 8 | Registry | 6 |
143
+ | PostgreSQL | 13 | Destination | 6 |
144
+ | MySQL | 13 | Backup | 8 |
145
+ | MariaDB | 13 | Mounts | 4 |
146
+ | MongoDB | 13 | Port | 4 |
147
+ | Redis | 13 | Redirects | 4 |
148
+ | Security | 4 | Cluster | 4 |
149
+ | Settings | 25 | Admin | 1 |
150
+ | User | 1 | | |
151
+
152
+ Full reference with parameters and descriptions: **[docs/tools.md](docs/tools.md)**
153
+
154
+ API coverage report: **[docs/coverage.md](docs/coverage.md)**
155
+
156
+ ## Configuration
157
+
158
+ | Variable | Required | Description |
159
+ |---|---|---|
160
+ | `DOKPLOY_URL` | Yes | Dokploy panel URL -- automatically normalized to `/api/trpc` |
161
+ | `DOKPLOY_API_KEY` | Yes | API key from Dokploy Settings > API |
162
+ | `DOKPLOY_TIMEOUT` | No | Request timeout in ms (default: `30000`) |
163
+
164
+ Resolution order: env vars > `~/.config/dokploy-mcp/config.json` > Dokploy CLI config.
165
+
166
+ ## CLI
167
+
168
+ ```bash
169
+ npx @vibetools/dokploy-mcp # Start MCP server (stdio)
170
+ npx @vibetools/dokploy-mcp setup # Interactive setup wizard (aliases: init, auth)
171
+ npx @vibetools/dokploy-mcp version # Show version
172
+ ```
173
+
174
+ ## Development
232
175
 
233
176
  ```bash
234
- git clone <this-repo>
235
- npm install
236
- npm run build
177
+ git clone https://github.com/vcode-sh/dokploy-mcp.git
178
+ cd dokploy-mcp
179
+ npm install && npm run build
237
180
  ```
238
181
 
239
- Then point your MCP client at the local build:
182
+ Point your MCP client at the local build:
240
183
 
241
184
  ```json
242
185
  {
@@ -253,440 +196,37 @@ Then point your MCP client at the local build:
253
196
  }
254
197
  ```
255
198
 
256
- ## Getting Your API Key
257
-
258
- 1. Open your Dokploy dashboard
259
- 2. Go to Settings > Profile > API/CLI section
260
- 3. Generate a token
261
- 4. Use it as the `DOKPLOY_API_KEY` environment variable
262
-
263
- ## Tool Reference
264
-
265
- All 224 tools are organized into 24 modules. Each table below shows the tool name, a brief description, and whether the tool is read-only or mutating/destructive.
266
-
267
- For the complete reference with full descriptions and parameter details, see [docs/TOOLS.md](docs/TOOLS.md).
268
-
269
- ### Project (6 tools)
270
-
271
- | Tool | Description | Type |
272
- |---|---|---|
273
- | `dokploy_project_all` | List all projects | Read-only |
274
- | `dokploy_project_one` | Get project details by ID | Read-only |
275
- | `dokploy_project_create` | Create a new project | Mutating |
276
- | `dokploy_project_update` | Update an existing project | Mutating |
277
- | `dokploy_project_duplicate` | Duplicate a project with its services | Mutating |
278
- | `dokploy_project_remove` | Remove a project and all its resources | Destructive |
279
-
280
- ### Application (25 tools)
281
-
282
- | Tool | Description | Type |
283
- |---|---|---|
284
- | `dokploy_application_create` | Create a new application in a project | Mutating |
285
- | `dokploy_application_one` | Get application details by ID | Read-only |
286
- | `dokploy_application_update` | Update application configuration | Mutating |
287
- | `dokploy_application_delete` | Delete an application permanently | Destructive |
288
- | `dokploy_application_move` | Move application to another project | Mutating |
289
- | `dokploy_application_deploy` | Trigger a new deployment | Mutating |
290
- | `dokploy_application_redeploy` | Force a full redeploy from source | Mutating |
291
- | `dokploy_application_start` | Start a stopped application | Mutating |
292
- | `dokploy_application_stop` | Stop a running application | Destructive |
293
- | `dokploy_application_cancel_deployment` | Cancel an in-progress deployment | Mutating |
294
- | `dokploy_application_reload` | Reload application containers | Mutating |
295
- | `dokploy_application_mark_running` | Manually mark application as running | Mutating |
296
- | `dokploy_application_clean_queues` | Clean pending deployment queues | Mutating |
297
- | `dokploy_application_refresh_token` | Refresh the webhook token | Mutating |
298
- | `dokploy_application_save_build_type` | Set build type and settings | Mutating |
299
- | `dokploy_application_save_environment` | Save environment variables and build args | Mutating |
300
- | `dokploy_application_save_github_provider` | Configure GitHub as source | Mutating |
301
- | `dokploy_application_save_gitlab_provider` | Configure GitLab as source | Mutating |
302
- | `dokploy_application_save_bitbucket_provider` | Configure Bitbucket as source | Mutating |
303
- | `dokploy_application_save_gitea_provider` | Configure Gitea as source | Mutating |
304
- | `dokploy_application_save_git_provider` | Configure custom Git repo as source | Mutating |
305
- | `dokploy_application_save_docker_provider` | Configure Docker image as source | Mutating |
306
- | `dokploy_application_disconnect_git_provider` | Disconnect the current Git provider | Mutating |
307
- | `dokploy_application_read_app_monitoring` | Read application monitoring metrics | Read-only |
308
- | `dokploy_application_read_traefik_config` | Read Traefik config for an application | Read-only |
309
- | `dokploy_application_update_traefik_config` | Update Traefik config for an application | Mutating |
310
-
311
- ### Compose (17 tools)
312
-
313
- | Tool | Description | Type |
314
- |---|---|---|
315
- | `dokploy_compose_create` | Create a new Docker Compose service | Mutating |
316
- | `dokploy_compose_one` | Get compose service details by ID | Read-only |
317
- | `dokploy_compose_update` | Update compose service configuration | Mutating |
318
- | `dokploy_compose_delete` | Delete a compose service permanently | Destructive |
319
- | `dokploy_compose_deploy` | Deploy a compose service | Mutating |
320
- | `dokploy_compose_redeploy` | Redeploy a compose service | Mutating |
321
- | `dokploy_compose_stop` | Stop all containers in a compose service | Destructive |
322
- | `dokploy_compose_clean_queues` | Clean pending deployment queues | Mutating |
323
- | `dokploy_compose_all_services` | List individual services in a compose stack | Read-only |
324
- | `dokploy_compose_randomize` | Randomize service names to avoid conflicts | Mutating |
325
- | `dokploy_compose_get_default_command` | Get the default deployment command | Read-only |
326
- | `dokploy_compose_generate_ssh_key` | Generate SSH key pair for Git access | Mutating |
327
- | `dokploy_compose_refresh_token` | Refresh the webhook token | Mutating |
328
- | `dokploy_compose_remove_ssh_key` | Remove the SSH key | Mutating |
329
- | `dokploy_compose_deploy_template` | Deploy from a predefined template | Mutating |
330
- | `dokploy_compose_templates` | List available compose templates | Read-only |
331
- | `dokploy_compose_save_environment` | Save environment variables and build args | Mutating |
332
-
333
- ### Domain (9 tools)
334
-
335
- | Tool | Description | Type |
336
- |---|---|---|
337
- | `dokploy_domain_create` | Create a new domain configuration | Mutating |
338
- | `dokploy_domain_one` | Get domain details by ID | Read-only |
339
- | `dokploy_domain_by_application_id` | List domains for an application | Read-only |
340
- | `dokploy_domain_by_compose_id` | List domains for a compose service | Read-only |
341
- | `dokploy_domain_update` | Update a domain configuration | Mutating |
342
- | `dokploy_domain_delete` | Delete a domain permanently | Destructive |
343
- | `dokploy_domain_validate` | Validate domain DNS records | Mutating |
344
- | `dokploy_domain_generate` | Generate a default domain for an app | Mutating |
345
- | `dokploy_domain_generate_wildcard` | Generate a wildcard domain for an app | Mutating |
346
-
347
- ### PostgreSQL (13 tools)
348
-
349
- | Tool | Description | Type |
350
- |---|---|---|
351
- | `dokploy_postgres_one` | Get Postgres database details | Read-only |
352
- | `dokploy_postgres_create` | Create a new Postgres database | Mutating |
353
- | `dokploy_postgres_update` | Update Postgres configuration | Mutating |
354
- | `dokploy_postgres_remove` | Remove a Postgres database | Destructive |
355
- | `dokploy_postgres_move` | Move database to another project | Mutating |
356
- | `dokploy_postgres_deploy` | Deploy the database container | Mutating |
357
- | `dokploy_postgres_start` | Start a stopped database | Mutating |
358
- | `dokploy_postgres_stop` | Stop a running database | Destructive |
359
- | `dokploy_postgres_reload` | Reload the database container | Mutating |
360
- | `dokploy_postgres_rebuild` | Rebuild the database from scratch | Mutating |
361
- | `dokploy_postgres_change_status` | Manually set application status | Mutating |
362
- | `dokploy_postgres_save_external_port` | Set or clear the external port | Mutating |
363
- | `dokploy_postgres_save_environment` | Save environment variables | Mutating |
364
-
365
- ### MySQL (13 tools)
366
-
367
- | Tool | Description | Type |
368
- |---|---|---|
369
- | `dokploy_mysql_one` | Get MySQL database details | Read-only |
370
- | `dokploy_mysql_create` | Create a new MySQL database | Mutating |
371
- | `dokploy_mysql_update` | Update MySQL configuration | Mutating |
372
- | `dokploy_mysql_remove` | Remove a MySQL database | Destructive |
373
- | `dokploy_mysql_move` | Move database to another project | Mutating |
374
- | `dokploy_mysql_deploy` | Deploy the database container | Mutating |
375
- | `dokploy_mysql_start` | Start a stopped database | Mutating |
376
- | `dokploy_mysql_stop` | Stop a running database | Destructive |
377
- | `dokploy_mysql_reload` | Reload the database container | Mutating |
378
- | `dokploy_mysql_rebuild` | Rebuild the database from scratch | Mutating |
379
- | `dokploy_mysql_change_status` | Manually set application status | Mutating |
380
- | `dokploy_mysql_save_external_port` | Set or clear the external port | Mutating |
381
- | `dokploy_mysql_save_environment` | Save environment variables | Mutating |
382
-
383
- ### MariaDB (13 tools)
384
-
385
- | Tool | Description | Type |
386
- |---|---|---|
387
- | `dokploy_mariadb_one` | Get MariaDB database details | Read-only |
388
- | `dokploy_mariadb_create` | Create a new MariaDB database | Mutating |
389
- | `dokploy_mariadb_update` | Update MariaDB configuration | Mutating |
390
- | `dokploy_mariadb_remove` | Remove a MariaDB database | Destructive |
391
- | `dokploy_mariadb_move` | Move database to another project | Mutating |
392
- | `dokploy_mariadb_deploy` | Deploy the database container | Mutating |
393
- | `dokploy_mariadb_start` | Start a stopped database | Mutating |
394
- | `dokploy_mariadb_stop` | Stop a running database | Destructive |
395
- | `dokploy_mariadb_reload` | Reload the database container | Mutating |
396
- | `dokploy_mariadb_rebuild` | Rebuild the database from scratch | Mutating |
397
- | `dokploy_mariadb_change_status` | Manually set application status | Mutating |
398
- | `dokploy_mariadb_save_external_port` | Set or clear the external port | Mutating |
399
- | `dokploy_mariadb_save_environment` | Save environment variables | Mutating |
400
-
401
- ### MongoDB (13 tools)
402
-
403
- | Tool | Description | Type |
404
- |---|---|---|
405
- | `dokploy_mongo_one` | Get MongoDB database details | Read-only |
406
- | `dokploy_mongo_create` | Create a new MongoDB database | Mutating |
407
- | `dokploy_mongo_update` | Update MongoDB configuration | Mutating |
408
- | `dokploy_mongo_remove` | Remove a MongoDB database | Destructive |
409
- | `dokploy_mongo_move` | Move database to another project | Mutating |
410
- | `dokploy_mongo_deploy` | Deploy the database container | Mutating |
411
- | `dokploy_mongo_start` | Start a stopped database | Mutating |
412
- | `dokploy_mongo_stop` | Stop a running database | Destructive |
413
- | `dokploy_mongo_reload` | Reload the database container | Mutating |
414
- | `dokploy_mongo_rebuild` | Rebuild the database from scratch | Mutating |
415
- | `dokploy_mongo_change_status` | Manually set application status | Mutating |
416
- | `dokploy_mongo_save_external_port` | Set or clear the external port | Mutating |
417
- | `dokploy_mongo_save_environment` | Save environment variables | Mutating |
418
-
419
- ### Redis (13 tools)
420
-
421
- | Tool | Description | Type |
422
- |---|---|---|
423
- | `dokploy_redis_one` | Get Redis database details | Read-only |
424
- | `dokploy_redis_create` | Create a new Redis database | Mutating |
425
- | `dokploy_redis_update` | Update Redis configuration | Mutating |
426
- | `dokploy_redis_remove` | Remove a Redis database | Destructive |
427
- | `dokploy_redis_move` | Move database to another project | Mutating |
428
- | `dokploy_redis_deploy` | Deploy the database container | Mutating |
429
- | `dokploy_redis_start` | Start a stopped database | Mutating |
430
- | `dokploy_redis_stop` | Stop a running database | Destructive |
431
- | `dokploy_redis_reload` | Reload the database container | Mutating |
432
- | `dokploy_redis_rebuild` | Rebuild the database from scratch | Mutating |
433
- | `dokploy_redis_change_status` | Manually set application status | Mutating |
434
- | `dokploy_redis_save_external_port` | Set or clear the external port | Mutating |
435
- | `dokploy_redis_save_environment` | Save environment variables | Mutating |
436
-
437
- ### Deployment (2 tools)
438
-
439
- | Tool | Description | Type |
440
- |---|---|---|
441
- | `dokploy_deployment_all` | List all deployments for an application | Read-only |
442
- | `dokploy_deployment_all_by_compose` | List all deployments for a compose service | Read-only |
443
-
444
- ### Docker (4 tools)
445
-
446
- | Tool | Description | Type |
447
- |---|---|---|
448
- | `dokploy_docker_get_containers` | List all Docker containers on the server | Read-only |
449
- | `dokploy_docker_get_config` | Get full config of a container by ID | Read-only |
450
- | `dokploy_docker_get_containers_by_app_name_match` | Find containers by app name substring | Read-only |
451
- | `dokploy_docker_get_containers_by_app_label` | Find containers by app label | Read-only |
452
-
453
- ### Certificates (4 tools)
454
-
455
- | Tool | Description | Type |
456
- |---|---|---|
457
- | `dokploy_certificate_all` | List all SSL/TLS certificates | Read-only |
458
- | `dokploy_certificate_one` | Get certificate details by ID | Read-only |
459
- | `dokploy_certificate_create` | Create a new certificate | Mutating |
460
- | `dokploy_certificate_remove` | Remove a certificate | Destructive |
461
-
462
- ### Registry (7 tools)
463
-
464
- | Tool | Description | Type |
465
- |---|---|---|
466
- | `dokploy_registry_all` | List all container registries | Read-only |
467
- | `dokploy_registry_one` | Get registry details by ID | Read-only |
468
- | `dokploy_registry_create` | Create a new registry configuration | Mutating |
469
- | `dokploy_registry_update` | Update a registry configuration | Mutating |
470
- | `dokploy_registry_remove` | Remove a registry configuration | Destructive |
471
- | `dokploy_registry_test` | Test registry connection | Mutating |
472
- | `dokploy_registry_enable_self_hosted` | Enable the built-in self-hosted registry | Mutating |
473
-
474
- ### Destination (6 tools)
475
-
476
- | Tool | Description | Type |
477
- |---|---|---|
478
- | `dokploy_destination_all` | List all S3 backup destinations | Read-only |
479
- | `dokploy_destination_one` | Get destination details by ID | Read-only |
480
- | `dokploy_destination_create` | Create a new S3 backup destination | Mutating |
481
- | `dokploy_destination_update` | Update a backup destination | Mutating |
482
- | `dokploy_destination_remove` | Remove a backup destination | Destructive |
483
- | `dokploy_destination_test_connection` | Test S3 destination connection | Mutating |
484
-
485
- ### Backup (8 tools)
486
-
487
- | Tool | Description | Type |
488
- |---|---|---|
489
- | `dokploy_backup_one` | Get backup configuration details | Read-only |
490
- | `dokploy_backup_create` | Create a scheduled backup | Mutating |
491
- | `dokploy_backup_update` | Update a backup schedule | Mutating |
492
- | `dokploy_backup_remove` | Remove a backup schedule | Destructive |
493
- | `dokploy_backup_manual_postgres` | Trigger manual Postgres backup | Mutating |
494
- | `dokploy_backup_manual_mysql` | Trigger manual MySQL backup | Mutating |
495
- | `dokploy_backup_manual_mariadb` | Trigger manual MariaDB backup | Mutating |
496
- | `dokploy_backup_manual_mongo` | Trigger manual MongoDB backup | Mutating |
497
-
498
- ### Mounts (4 tools)
499
-
500
- | Tool | Description | Type |
501
- |---|---|---|
502
- | `dokploy_mount_one` | Get mount configuration details | Read-only |
503
- | `dokploy_mount_create` | Create a new mount (bind, volume, or file) | Mutating |
504
- | `dokploy_mount_update` | Update a mount configuration | Mutating |
505
- | `dokploy_mount_remove` | Remove a mount | Destructive |
506
-
507
- ### Port (4 tools)
508
-
509
- | Tool | Description | Type |
510
- |---|---|---|
511
- | `dokploy_port_one` | Get port mapping details | Read-only |
512
- | `dokploy_port_create` | Create a new port mapping | Mutating |
513
- | `dokploy_port_update` | Update a port mapping | Mutating |
514
- | `dokploy_port_delete` | Delete a port mapping | Destructive |
515
-
516
- ### Redirects (4 tools)
517
-
518
- | Tool | Description | Type |
519
- |---|---|---|
520
- | `dokploy_redirect_one` | Get redirect rule details | Read-only |
521
- | `dokploy_redirect_create` | Create a new redirect rule | Mutating |
522
- | `dokploy_redirect_update` | Update a redirect rule | Mutating |
523
- | `dokploy_redirect_delete` | Delete a redirect rule | Destructive |
524
-
525
- ### Security (4 tools)
526
-
527
- | Tool | Description | Type |
528
- |---|---|---|
529
- | `dokploy_security_one` | Get HTTP basic-auth entry details | Read-only |
530
- | `dokploy_security_create` | Create HTTP basic-auth protection | Mutating |
531
- | `dokploy_security_update` | Update basic-auth credentials | Mutating |
532
- | `dokploy_security_delete` | Delete basic-auth protection | Destructive |
533
-
534
- ### Cluster (4 tools)
535
-
536
- | Tool | Description | Type |
537
- |---|---|---|
538
- | `dokploy_cluster_get_nodes` | List all Docker Swarm cluster nodes | Read-only |
539
- | `dokploy_cluster_add_worker` | Get the command to add a worker node | Read-only |
540
- | `dokploy_cluster_add_manager` | Get the command to add a manager node | Read-only |
541
- | `dokploy_cluster_remove_worker` | Remove a worker node from the cluster | Destructive |
542
-
543
- ### Settings (23 tools)
544
-
545
- | Tool | Description | Type |
546
- |---|---|---|
547
- | `dokploy_settings_reload_server` | Reload the Dokploy server process | Mutating |
548
- | `dokploy_settings_reload_traefik` | Reload the Traefik reverse proxy | Mutating |
549
- | `dokploy_settings_clean_unused_images` | Remove unused Docker images | Mutating |
550
- | `dokploy_settings_clean_unused_volumes` | Remove unused Docker volumes | Destructive |
551
- | `dokploy_settings_clean_stopped_containers` | Remove all stopped containers | Destructive |
552
- | `dokploy_settings_clean_docker_builder` | Clean Docker builder cache | Mutating |
553
- | `dokploy_settings_clean_docker_prune` | Full Docker system prune | Destructive |
554
- | `dokploy_settings_clean_all` | Clean all unused Docker resources | Destructive |
555
- | `dokploy_settings_clean_monitoring` | Clear all monitoring data | Destructive |
556
- | `dokploy_settings_save_ssh_private_key` | Save SSH private key for remote access | Mutating |
557
- | `dokploy_settings_clean_ssh_private_key` | Remove stored SSH private key | Destructive |
558
- | `dokploy_settings_assign_domain_server` | Assign domain to the server with SSL | Mutating |
559
- | `dokploy_settings_update_docker_cleanup` | Configure automatic Docker cleanup | Mutating |
560
- | `dokploy_settings_read_traefik_config` | Read the main Traefik config | Read-only |
561
- | `dokploy_settings_update_traefik_config` | Update the main Traefik config | Mutating |
562
- | `dokploy_settings_read_web_server_traefik_config` | Read web server Traefik config | Read-only |
563
- | `dokploy_settings_update_web_server_traefik_config` | Update web server Traefik config | Mutating |
564
- | `dokploy_settings_read_middleware_traefik_config` | Read Traefik middleware config | Read-only |
565
- | `dokploy_settings_update_middleware_traefik_config` | Update Traefik middleware config | Mutating |
566
- | `dokploy_settings_check_and_update_image` | Check for and apply image updates | Mutating |
567
- | `dokploy_settings_update_server` | Update Dokploy to latest version | Mutating |
568
- | `dokploy_settings_get_version` | Get current Dokploy version | Read-only |
569
- | `dokploy_settings_read_directories` | Read server directory listing | Read-only |
570
- | `dokploy_settings_get_openapi_document` | Get the OpenAPI specification | Read-only |
571
-
572
- ### Auth (14 tools)
573
-
574
- | Tool | Description | Type |
575
- |---|---|---|
576
- | `dokploy_auth_create_admin` | Create the initial admin account | Mutating |
577
- | `dokploy_auth_create_user` | Create a user from invitation token | Mutating |
578
- | `dokploy_auth_login` | Log in with email and password | Mutating |
579
- | `dokploy_auth_get` | Get current authenticated user profile | Read-only |
580
- | `dokploy_auth_logout` | Log out and invalidate session | Mutating |
581
- | `dokploy_auth_update` | Update current user profile | Mutating |
582
- | `dokploy_auth_generate_token` | Generate a new API token | Mutating |
583
- | `dokploy_auth_one` | Get user auth info by ID | Read-only |
584
- | `dokploy_auth_update_by_admin` | Update any user with admin privileges | Mutating |
585
- | `dokploy_auth_generate_2fa_secret` | Generate 2FA secret and QR code | Read-only |
586
- | `dokploy_auth_verify_2fa_setup` | Verify and enable 2FA | Mutating |
587
- | `dokploy_auth_verify_login_2fa` | Verify 2FA PIN during login | Mutating |
588
- | `dokploy_auth_disable_2fa` | Disable two-factor authentication | Mutating |
589
- | `dokploy_auth_verify_token` | Verify auth token validity | Mutating |
590
-
591
- ### Admin (9 tools)
592
-
593
- | Tool | Description | Type |
594
- |---|---|---|
595
- | `dokploy_admin_one` | Get admin profile and configuration | Read-only |
596
- | `dokploy_admin_create_user_invitation` | Send user invitation email | Mutating |
597
- | `dokploy_admin_remove_user` | Remove a user permanently | Destructive |
598
- | `dokploy_admin_get_user_by_token` | Look up user by invitation token | Read-only |
599
- | `dokploy_admin_assign_permissions` | Assign granular permissions to a user | Mutating |
600
- | `dokploy_admin_clean_github_app` | Remove GitHub App integration | Mutating |
601
- | `dokploy_admin_get_repositories` | List GitHub App repositories | Read-only |
602
- | `dokploy_admin_get_branches` | List branches for a GitHub repo | Read-only |
603
- | `dokploy_admin_have_github_configured` | Check if GitHub App is configured | Read-only |
604
-
605
- ### User (3 tools)
606
-
607
- | Tool | Description | Type |
608
- |---|---|---|
609
- | `dokploy_user_all` | List all registered users | Read-only |
610
- | `dokploy_user_by_auth_id` | Get user by authentication ID | Read-only |
611
- | `dokploy_user_by_user_id` | Get user by user ID | Read-only |
612
-
613
- ## Architecture
614
-
615
- ```
616
- src/
617
- index.ts - Entry point, routes CLI vs MCP server
618
- server.ts - MCP server creation, tool registration
619
- api/client.ts - Fetch-based API client with config resolver
620
- config/types.ts - Config types and platform paths
621
- config/resolver.ts - Config resolution chain (env -> file -> CLI)
622
- cli/index.ts - CLI command router
623
- cli/setup.ts - Interactive setup wizard (@clack/prompts TUI)
624
- tools/_factory.ts - Tool creation helpers (createTool, postTool, getTool)
625
- tools/index.ts - Aggregates all tool module exports
626
- tools/{module}.ts - 24 domain modules (224 tools total)
627
- ```
628
-
629
- **Key patterns:**
630
-
631
- - `postTool()` creates tools that call POST endpoints (mutations)
632
- - `getTool()` creates tools that call GET endpoints (reads), automatically annotated with `readOnlyHint` and `idempotentHint`
633
- - `createTool()` is the low-level factory for tools with custom handler logic
634
- - The API client uses native `fetch` with config resolution: env vars -> config file -> Dokploy CLI
635
- - Authentication is via `x-api-key` header on every request
636
- - All tool schemas use Zod v4 with `.describe()` on all parameters
637
- - Error handling maps HTTP status codes (401, 403, 404, 422) to user-friendly messages
638
- - CLI setup uses `@clack/prompts` for a modern terminal UI
639
-
640
- ## Development
641
-
642
199
  ```bash
643
- npm run build # Compile TypeScript to dist/
644
- npm run dev # Watch mode with auto-recompile
645
- npm run typecheck # Type-check without emitting files
200
+ npm run dev # Watch mode
201
+ npm run typecheck # Type-check
646
202
  npm run lint # Lint with Biome
647
- npm run lint:fix # Auto-fix lint issues
648
- npm run format # Format with Biome
649
- npm start # Run the built server
203
+ npm run lint:fix # Auto-fix
650
204
  ```
651
205
 
652
- ### Testing
653
-
654
- Use the MCP Inspector to test tools interactively:
206
+ Test with the MCP Inspector:
655
207
 
656
208
  ```bash
657
209
  npx @modelcontextprotocol/inspector node dist/index.js
658
210
  ```
659
211
 
660
- Pass environment variables via the inspector UI or prefix the command:
212
+ ## Standing on the Shoulders of People Who Actually Did the Work
661
213
 
662
- ```bash
663
- DOKPLOY_URL=https://panel.example.com DOKPLOY_API_KEY=your-key npx @modelcontextprotocol/inspector node dist/index.js
664
- ```
214
+ This project is a fork of [Dokploy/mcp](https://github.com/Dokploy/mcp). I rewrote most of it, tripled the tool count, and added things like a setup wizard and config resolution chain -- but "rewrote" is easy when someone else already built the thing you're rewriting.
665
215
 
666
- ## Adding a New Tool
667
-
668
- 1. Find the module file in `src/tools/` (e.g., `application.ts`)
669
- 2. Add a `postTool()` or `getTool()` call with `name`, `title`, `description`, `schema`, and `endpoint`
670
- 3. Use `.describe()` on all Zod schema parameters
671
- 4. Set `annotations: { destructiveHint: true }` for destructive operations
672
- 5. Add the tool to the module's exported array
673
- 6. Run `npm run build`
674
-
675
- Example:
676
-
677
- ```typescript
678
- const myTool = postTool({
679
- name: 'dokploy_application_my_action',
680
- title: 'My Action',
681
- description: 'Description of what this tool does.',
682
- schema: z.object({
683
- applicationId: z.string().min(1).describe('The unique application ID'),
684
- }),
685
- endpoint: '/application.myAction',
686
- annotations: { destructiveHint: true }, // if applicable
687
- })
688
- ```
216
+ [Mauricio Siu](https://github.com/Siumauricio) created [Dokploy](https://dokploy.com) itself -- a genuinely impressive open-source PaaS -- and kicked off the MCP server repo. Without Dokploy, there's no API. Without the API, there's no MCP server. Without the MCP server, I'd have had to start from zero instead of "from scratch."
217
+
218
+ [Henrique Andrade](https://github.com/andradehenrique) did the actual heavy lifting on the original MCP. Projects, applications, PostgreSQL, MySQL, domains -- that was all him. 15 commits, every merged PR. The kind of contributor who doesn't just open issues, he closes them.
219
+
220
+ And to everyone who opened PRs on the original repo -- merged or not -- your code and ideas shaped what this became:
221
+
222
+ [Joshua Macauley](https://github.com/Macawls) · [lucasleal-developer](https://github.com/lucasleal-developer) · [Nour Eddine Hamaidi](https://github.com/HenkDz) · [Corey](https://github.com/limehawk) · [Azil0ne](https://github.com/Azilone)
223
+
224
+ Unmerged PRs are still blueprints. Someone reads your compose tools PR and thinks "right, I should cover that." Someone sees your consolidation approach and borrows the idea. That's how open source actually works -- not through clean merge histories, but through stolen inspiration with better commit messages.
225
+
226
+ Cheers to all of you. I owe you mass-produced coffee at minimum.
689
227
 
690
228
  ## License
691
229
 
692
- MIT
230
+ MIT - [Vibe Code](https://vcode.sh)
231
+
232
+ Original work by [Henrique Andrade](https://github.com/andradehenrique) under Apache 2.0 -- see [LICENSE-ORIGINAL](LICENSE-ORIGINAL).