dokploy-mcp-server 1.1.0 → 1.3.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,5 +1,7 @@
1
1
  # dokploy-mcp-server
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/dokploy-mcp-server)](https://www.npmjs.com/package/dokploy-mcp-server)
4
+
3
5
  A comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for [Dokploy](https://dokploy.com/) - the open-source, self-hosted PaaS. Deploy apps, manage containers, databases, domains, and servers through AI assistants like Claude.
4
6
 
5
7
  ## Why This Server?
@@ -12,7 +14,7 @@ The [official Dokploy MCP](https://github.com/Dokploy/mcp) covers only ~5 of 42
12
14
  | -------------- | ------------------- | ----------------------------- |
13
15
  | Projects | 6 tools | 1 tool (6 actions) |
14
16
  | Applications | 26 tools | 1 tool (18 actions) |
15
- | Compose | - | 1 tool (11 actions) |
17
+ | Compose | - | 1 tool (15 actions) |
16
18
  | Deployments | - | 1 tool (2 actions) |
17
19
  | Docker | - | 1 tool (4 actions) |
18
20
  | Domains | 9 tools | 1 tool (8 actions) |
@@ -99,7 +101,7 @@ Each tool uses an `action` enum to select the operation. Parameters are optional
99
101
 
100
102
  Actions: `list | get | create | update | remove | duplicate`
101
103
 
102
- Manage projects. `list` returns all projects. `get` requires `projectId`. `create` requires `name`. `update` requires `projectId` + fields. `remove` requires `projectId`. `duplicate` requires `sourceEnvironmentId` + `name`.
104
+ 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`.
103
105
 
104
106
  ### `dokploy_application` (18 actions)
105
107
 
@@ -107,11 +109,11 @@ Actions: `create | get | update | move | deploy | start | stop | delete | markRu
107
109
 
108
110
  Full application lifecycle. Most actions require `applicationId`. `create` requires `name` + `environmentId`. `deploy` supports `redeploy` flag. `readMonitoring` requires `appName`.
109
111
 
110
- ### `dokploy_compose` (11 actions)
112
+ ### `dokploy_compose` (15 actions)
111
113
 
112
- Actions: `create | get | update | delete | deploy | start | stop | move | loadServices | loadMounts | getDefaultCommand`
114
+ Actions: `create | get | update | delete | deploy | start | stop | move | loadServices | loadMounts | getDefaultCommand | cancelDeployment | cleanQueues | killBuild | refreshToken`
113
115
 
114
- Docker Compose management. Most actions require `composeId`. `create` requires `name` + `environmentId`. `loadMounts` requires `serviceName`.
116
+ Docker Compose management. Most actions require `composeId`. `create` requires `name` + `environmentId`. `loadMounts` requires `serviceName`. `cancelDeployment`/`cleanQueues`/`killBuild`/`refreshToken` require `composeId`.
115
117
 
116
118
  ### `dokploy_database` (13 actions)
117
119
 
@@ -205,3 +207,7 @@ pnpm inspect # Open MCP Inspector
205
207
  ## License
206
208
 
207
209
  MIT
210
+
211
+ ---
212
+
213
+ **Sponsored by <a href="https://sapientsai.com/"><img src="https://sapientsai.com/images/logo.svg" alt="SapientsAI" width="20" style="vertical-align: middle;"> SapientsAI</a>** — Building agentic AI for businesses
package/dist/bin.js CHANGED
@@ -3,12 +3,12 @@
3
3
  if (!process.env.TRANSPORT_TYPE) process.env.TRANSPORT_TYPE = "stdio";
4
4
  const args = process.argv.slice(2);
5
5
  if (args.includes("--version") || args.includes("-v")) {
6
- console.log("1.1.0");
6
+ console.log("1.3.0");
7
7
  process.exit(0);
8
8
  }
9
9
  if (args.includes("--help") || args.includes("-h")) {
10
10
  console.log(`
11
- Dokploy MCP Server v1.1.0
11
+ Dokploy MCP Server v1.3.0
12
12
 
13
13
  Usage: dokploy-mcp-server [options]
14
14
 
package/dist/index.js CHANGED
@@ -59,6 +59,23 @@ function getDokployClient() {
59
59
  return client;
60
60
  }
61
61
 
62
+ //#endregion
63
+ //#region src/types.ts
64
+ const DB_TYPES = [
65
+ "postgres",
66
+ "mysql",
67
+ "mariadb",
68
+ "mongo",
69
+ "redis"
70
+ ];
71
+ const DB_ID_FIELDS = {
72
+ postgres: "postgresId",
73
+ mysql: "mysqlId",
74
+ mariadb: "mariadbId",
75
+ mongo: "mongoId",
76
+ redis: "redisId"
77
+ };
78
+
62
79
  //#endregion
63
80
  //#region src/utils/formatters.ts
64
81
  function formatDate(dateStr) {
@@ -76,12 +93,27 @@ function statusIcon(status) {
76
93
  if (s === "stopped") return "[STOPPED]";
77
94
  return `[${status.toUpperCase()}]`;
78
95
  }
96
+ function formatEnvironmentServices(env) {
97
+ var _env$applications, _env$compose;
98
+ const lines = [];
99
+ if ((_env$applications = env.applications) === null || _env$applications === void 0 ? void 0 : _env$applications.length) for (const app of env.applications) lines.push(` - App: **${app.name}** ${statusIcon(app.applicationStatus)} (ID: ${app.applicationId})`);
100
+ if ((_env$compose = env.compose) === null || _env$compose === void 0 ? void 0 : _env$compose.length) for (const c of env.compose) lines.push(` - Compose: **${c.name}** ${statusIcon(c.composeStatus)} (ID: ${c.composeId})`);
101
+ for (const dbType of DB_TYPES) {
102
+ const dbs = env[dbType];
103
+ if (dbs === null || dbs === void 0 ? void 0 : dbs.length) for (const db of dbs) lines.push(` - ${dbType}: **${db.name}** ${statusIcon(db.applicationStatus)} (ID: ${db.databaseId})`);
104
+ }
105
+ return lines.join("\n");
106
+ }
79
107
  function formatProject(project) {
80
- var _project$environments;
81
- const envCount = ((_project$environments = project.environments) === null || _project$environments === void 0 ? void 0 : _project$environments.length) ?? 0;
108
+ const envs = project.environments ?? [];
109
+ const envLines = envs.map((env) => {
110
+ const services = formatEnvironmentServices(env);
111
+ const header = ` - **${env.name}** (ID: ${env.environmentId})`;
112
+ return services ? `${header}\n${services}` : header;
113
+ });
82
114
  return `- **${project.name}** (ID: ${project.projectId})
83
115
  Description: ${project.description || "None"}
84
- Environments: ${envCount}
116
+ Environments: ${envs.length}${envLines.length ? "\n" + envLines.join("\n") : ""}
85
117
  Created: ${formatDate(project.createdAt)}`;
86
118
  }
87
119
  function formatProjectList(projects) {
@@ -89,10 +121,11 @@ function formatProjectList(projects) {
89
121
  return `# Projects (${projects.length})\n\n${projects.map(formatProject).join("\n\n")}`;
90
122
  }
91
123
  function formatEnvironment(env) {
124
+ const services = formatEnvironmentServices(env);
92
125
  return `- **${env.name}** (ID: ${env.environmentId})
93
126
  Description: ${env.description || "None"}
94
127
  Project: ${env.projectId}
95
- Created: ${formatDate(env.createdAt)}`;
128
+ Created: ${formatDate(env.createdAt)}${services ? "\n" + services : ""}`;
96
129
  }
97
130
  function formatEnvironmentList(envs) {
98
131
  if (envs.length === 0) return "No environments found.";
@@ -446,12 +479,16 @@ const ACTIONS$9 = [
446
479
  "move",
447
480
  "loadServices",
448
481
  "loadMounts",
449
- "getDefaultCommand"
482
+ "getDefaultCommand",
483
+ "cancelDeployment",
484
+ "cleanQueues",
485
+ "killBuild",
486
+ "refreshToken"
450
487
  ];
451
488
  function registerComposeTools(server) {
452
489
  server.addTool({
453
490
  name: "dokploy_compose",
454
- description: "Manage Docker Compose services. create: name+environmentId. get/delete/start/stop/getDefaultCommand: composeId. update: composeId+fields. deploy: composeId, redeploy?. move: composeId+targetEnvironmentId. loadServices: composeId. loadMounts: composeId+serviceName.",
491
+ description: "Manage Docker Compose services. create: name+environmentId. get/delete/start/stop/getDefaultCommand: composeId. update: composeId+fields. deploy: composeId, redeploy?. move: composeId+targetEnvironmentId. loadServices: composeId. loadMounts: composeId+serviceName. cancelDeployment/cleanQueues/killBuild/refreshToken: composeId.",
455
492
  parameters: z.object({
456
493
  action: z.enum(ACTIONS$9),
457
494
  composeId: z.string().optional(),
@@ -535,28 +572,17 @@ function registerComposeTools(server) {
535
572
  return `# Mounts: ${args.serviceName}\n\n\`\`\`json\n${JSON.stringify(mounts, null, 2)}\n\`\`\``;
536
573
  }
537
574
  case "getDefaultCommand": return `Default command: ${await client.get("compose.getDefaultCommand", { composeId: args.composeId })}`;
575
+ case "cancelDeployment":
576
+ case "cleanQueues":
577
+ case "killBuild":
578
+ case "refreshToken":
579
+ await client.post(`compose.${args.action}`, { composeId: args.composeId });
580
+ return `Compose ${args.composeId}: ${args.action} completed.`;
538
581
  }
539
582
  }
540
583
  });
541
584
  }
542
585
 
543
- //#endregion
544
- //#region src/types.ts
545
- const DB_TYPES = [
546
- "postgres",
547
- "mysql",
548
- "mariadb",
549
- "mongo",
550
- "redis"
551
- ];
552
- const DB_ID_FIELDS = {
553
- postgres: "postgresId",
554
- mysql: "mysqlId",
555
- mariadb: "mariadbId",
556
- mongo: "mongoId",
557
- redis: "redisId"
558
- };
559
-
560
586
  //#endregion
561
587
  //#region src/tools/database-tools.ts
562
588
  const dbTypeSchema = z.enum(DB_TYPES).describe("postgres, mysql, mariadb, mongo, or redis");
@@ -688,7 +714,7 @@ const ACTIONS$7 = ["list", "killProcess"];
688
714
  function registerDeploymentTools(server) {
689
715
  server.addTool({
690
716
  name: "dokploy_deployment",
691
- description: "Manage deployments. list: applicationId|composeId|serverId|type+id. killProcess: deploymentId.",
717
+ description: "Manage deployments. list: applicationId|composeId|serverId|type+id. killProcess: deploymentId. Note: no log retrieval API exists; deployment data includes logPath for reference only.",
692
718
  parameters: z.object({
693
719
  action: z.enum(ACTIONS$7),
694
720
  deploymentId: z.string().optional(),
@@ -732,7 +758,7 @@ const ACTIONS$6 = [
732
758
  function registerDockerTools(server) {
733
759
  server.addTool({
734
760
  name: "dokploy_docker",
735
- description: "Docker management. getContainers: serverId?. restartContainer: containerId. getConfig: containerId, serverId?. findContainers: appName+method(match|label|stack|service), serverId?.",
761
+ description: "Docker container management. getContainers: list all containers, serverId?. restartContainer: containerId. getConfig: containerId (required, not appName), serverId?. findContainers: appName+method(match|label|stack|service), serverId?.",
736
762
  parameters: z.object({
737
763
  action: z.enum(ACTIONS$6),
738
764
  containerId: z.string().optional(),
@@ -762,6 +788,7 @@ function registerDockerTools(server) {
762
788
  return `# Container Config\n\n\`\`\`json\n${JSON.stringify(config, null, 2)}\n\`\`\``;
763
789
  }
764
790
  case "findContainers": {
791
+ if (!args.method) throw new Error("findContainers requires method (match|label|stack|service)");
765
792
  const endpointMap = {
766
793
  match: "docker.getContainersByAppNameMatch",
767
794
  label: "docker.getContainersByAppLabel",
@@ -1033,14 +1060,13 @@ const ACTIONS$2 = [
1033
1060
  function registerProjectTools(server) {
1034
1061
  server.addTool({
1035
1062
  name: "dokploy_project",
1036
- description: "Manage projects. list: all. get: projectId. create: name. update: projectId+fields. remove: projectId. duplicate: sourceEnvironmentId+name.",
1063
+ description: "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.",
1037
1064
  parameters: z.object({
1038
1065
  action: z.enum(ACTIONS$2),
1039
1066
  projectId: z.string().optional(),
1040
1067
  name: z.string().optional(),
1041
1068
  description: z.string().optional(),
1042
1069
  sourceEnvironmentId: z.string().optional(),
1043
- includeServices: z.boolean().optional(),
1044
1070
  duplicateInSameProject: z.boolean().optional()
1045
1071
  }),
1046
1072
  execute: async (args) => {
@@ -1067,7 +1093,6 @@ function registerProjectTools(server) {
1067
1093
  sourceEnvironmentId: args.sourceEnvironmentId,
1068
1094
  name: args.name,
1069
1095
  ...args.description && { description: args.description },
1070
- ...args.includeServices !== void 0 && { includeServices: args.includeServices },
1071
1096
  ...args.duplicateInSameProject !== void 0 && { duplicateInSameProject: args.duplicateInSameProject }
1072
1097
  });
1073
1098
  return `Environment duplicated as "${args.name}".`;
@@ -1198,7 +1223,7 @@ function registerSettingsTools(server) {
1198
1223
  //#endregion
1199
1224
  //#region src/index.ts
1200
1225
  dotenv.config();
1201
- const VERSION = "1.1.0";
1226
+ const VERSION = "1.3.0";
1202
1227
  function setupDokployClient() {
1203
1228
  const baseUrl = process.env.DOKPLOY_URL;
1204
1229
  const apiKey = process.env.DOKPLOY_API_KEY;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS"],"sources":["../src/client/dokploy-client.ts","../src/utils/formatters.ts","../src/tools/application-tools.ts","../src/tools/backup-tools.ts","../src/tools/compose-tools.ts","../src/types.ts","../src/tools/database-tools.ts","../src/tools/deployment-tools.ts","../src/tools/docker-tools.ts","../src/tools/domain-tools.ts","../src/tools/environment-tools.ts","../src/tools/infrastructure-tools.ts","../src/tools/project-tools.ts","../src/tools/server-tools.ts","../src/tools/settings-tools.ts","../src/index.ts"],"sourcesContent":["type RequestOptions = {\n method: \"GET\" | \"POST\"\n params?: Record<string, string | number | boolean | undefined>\n body?: Record<string, unknown>\n}\n\nexport class DokployClient {\n private baseUrl: string\n private apiKey: string\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\")\n this.apiKey = apiKey\n }\n\n async get<T>(path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {\n return this.request<T>(path, { method: \"GET\", params })\n }\n\n async post<T>(path: string, body?: Record<string, unknown>): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body })\n }\n\n private async request<T>(path: string, options: RequestOptions): Promise<T> {\n const url = new URL(`/api/${path}`, this.baseUrl)\n\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value))\n }\n }\n }\n\n const headers: Record<string, string> = {\n \"x-api-key\": this.apiKey,\n Accept: \"application/json\",\n }\n\n const init: RequestInit = {\n method: options.method,\n headers,\n }\n\n if (options.body) {\n headers[\"Content-Type\"] = \"application/json\"\n init.body = JSON.stringify(options.body)\n }\n\n const response = await fetch(url.toString(), init)\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => \"Unknown error\")\n throw new Error(\n `Dokploy API error (${response.status} ${response.statusText}) on ${options.method} /${path}: ${errorText}`,\n )\n }\n\n const text = await response.text()\n if (!text) {\n return undefined as T\n }\n\n return JSON.parse(text) as T\n }\n}\n\nlet client: DokployClient | undefined\n\nexport function initializeDokployClient(baseUrl: string, apiKey: string): DokployClient {\n client = new DokployClient(baseUrl, apiKey)\n return client\n}\n\nexport function getDokployClient(): DokployClient {\n if (!client) {\n throw new Error(\n \"Dokploy client not initialized. Ensure DOKPLOY_URL and DOKPLOY_API_KEY environment variables are set.\",\n )\n }\n return client\n}\n","import type {\n DokployApplication,\n DokployBackup,\n DokployCompose,\n DokployContainer,\n DokployDatabase,\n DokployDeployment,\n DokployDomain,\n DokployEnvironment,\n DokployProject,\n DokployServer,\n} from \"../types\"\n\nfunction formatDate(dateStr?: string): string {\n if (!dateStr) return \"N/A\"\n try {\n return new Date(dateStr)\n .toISOString()\n .replace(\"T\", \" \")\n .replace(/\\.\\d+Z$/, \" UTC\")\n } catch {\n return dateStr\n }\n}\n\nfunction statusIcon(status: string): string {\n const s = status.toLowerCase()\n if (s === \"running\" || s === \"done\" || s === \"idle\") return \"[RUNNING]\"\n if (s === \"error\" || s === \"failed\") return \"[ERROR]\"\n if (s === \"stopped\") return \"[STOPPED]\"\n return `[${status.toUpperCase()}]`\n}\n\nexport function formatProject(project: DokployProject): string {\n const envCount = project.environments?.length ?? 0\n return `- **${project.name}** (ID: ${project.projectId})\n Description: ${project.description || \"None\"}\n Environments: ${envCount}\n Created: ${formatDate(project.createdAt)}`\n}\n\nexport function formatProjectList(projects: DokployProject[]): string {\n if (projects.length === 0) return \"No projects found.\"\n return `# Projects (${projects.length})\\n\\n${projects.map(formatProject).join(\"\\n\\n\")}`\n}\n\nexport function formatEnvironment(env: DokployEnvironment): string {\n return `- **${env.name}** (ID: ${env.environmentId})\n Description: ${env.description || \"None\"}\n Project: ${env.projectId}\n Created: ${formatDate(env.createdAt)}`\n}\n\nexport function formatEnvironmentList(envs: DokployEnvironment[]): string {\n if (envs.length === 0) return \"No environments found.\"\n return `# Environments (${envs.length})\\n\\n${envs.map(formatEnvironment).join(\"\\n\\n\")}`\n}\n\nexport function formatApplication(app: DokployApplication): string {\n return `- **${app.name}** ${statusIcon(app.applicationStatus)} (ID: ${app.applicationId})\n App Name: ${app.appName}\n Description: ${app.description || \"None\"}\n Build Type: ${app.buildType || \"N/A\"}\n Source: ${app.sourceType || \"N/A\"}\n Auto Deploy: ${app.autoDeploy ?? \"N/A\"}\n Created: ${formatDate(app.createdAt)}`\n}\n\nexport function formatDeployment(dep: DokployDeployment): string {\n return `- ${statusIcon(dep.status)} **${dep.title || \"Deployment\"}** (ID: ${dep.deploymentId})\n Status: ${dep.status}\n Description: ${dep.description || \"None\"}\n Created: ${formatDate(dep.createdAt)}`\n}\n\nexport function formatDeploymentList(deployments: DokployDeployment[]): string {\n if (deployments.length === 0) return \"No deployments found.\"\n return `# Deployments (${deployments.length})\\n\\n${deployments.map(formatDeployment).join(\"\\n\\n\")}`\n}\n\nexport function formatCompose(compose: DokployCompose): string {\n return `- **${compose.name}** ${statusIcon(compose.composeStatus)} (ID: ${compose.composeId})\n App Name: ${compose.appName}\n Description: ${compose.description || \"None\"}\n Type: ${compose.composeType || \"N/A\"}\n Source: ${compose.sourceType || \"N/A\"}\n Created: ${formatDate(compose.createdAt)}`\n}\n\nexport function formatDomain(domain: DokployDomain): string {\n const protocol = domain.https ? \"https\" : \"http\"\n return `- **${protocol}://${domain.host}${domain.path || \"\"}** (ID: ${domain.domainId})\n Port: ${domain.port ?? \"default\"}\n HTTPS: ${domain.https}\n Certificate: ${domain.certificateType || \"None\"}\n Type: ${domain.domainType || \"N/A\"}\n Service: ${domain.serviceName || \"N/A\"}`\n}\n\nexport function formatDomainList(domains: DokployDomain[]): string {\n if (domains.length === 0) return \"No domains found.\"\n return `# Domains (${domains.length})\\n\\n${domains.map(formatDomain).join(\"\\n\\n\")}`\n}\n\nexport function formatServer(server: DokployServer): string {\n return `- **${server.name}** (ID: ${server.serverId})\n Description: ${server.description || \"None\"}\n IP: ${server.ipAddress}:${server.port}\n User: ${server.username}\n Type: ${server.serverType}\n Created: ${formatDate(server.createdAt)}`\n}\n\nexport function formatServerList(servers: DokployServer[]): string {\n if (servers.length === 0) return \"No servers found.\"\n return `# Servers (${servers.length})\\n\\n${servers.map(formatServer).join(\"\\n\\n\")}`\n}\n\nexport function formatDatabase(db: DokployDatabase, dbType: string): string {\n return `- **${db.name}** ${statusIcon(db.applicationStatus)} (ID: ${db.databaseId})\n Type: ${dbType}\n App Name: ${db.appName}\n Description: ${db.description || \"None\"}\n Database Name: ${db.databaseName || \"N/A\"}\n Image: ${db.dockerImage || \"default\"}\n External Port: ${db.externalPort ?? \"None\"}\n Created: ${formatDate(db.createdAt)}`\n}\n\nexport function formatContainer(container: DokployContainer): string {\n return `- **${container.name}** [${container.state?.toUpperCase() || \"UNKNOWN\"}]\n ID: ${container.containerId}\n Image: ${container.image}\n Status: ${container.status}\n Ports: ${container.ports || \"None\"}`\n}\n\nexport function formatContainerList(containers: DokployContainer[]): string {\n if (containers.length === 0) return \"No containers found.\"\n return `# Containers (${containers.length})\\n\\n${containers.map(formatContainer).join(\"\\n\\n\")}`\n}\n\nexport function formatBackup(backup: DokployBackup): string {\n return `- **${backup.prefix}** (ID: ${backup.backupId})\n Schedule: ${backup.schedule}\n Enabled: ${backup.enabled ?? true}\n Database: ${backup.database}\n Type: ${backup.databaseType}\n Destination: ${backup.destinationId}\n Keep Latest: ${backup.keepLatestCount ?? \"unlimited\"}`\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployApplication } from \"../types\"\nimport { formatApplication } from \"../utils/formatters\"\n\nconst ACTIONS = [\n \"create\",\n \"get\",\n \"update\",\n \"move\",\n \"deploy\",\n \"start\",\n \"stop\",\n \"delete\",\n \"markRunning\",\n \"refreshToken\",\n \"cleanQueues\",\n \"killBuild\",\n \"cancelDeployment\",\n \"reload\",\n \"saveEnvironment\",\n \"saveBuildType\",\n \"traefikConfig\",\n \"readMonitoring\",\n] as const\n\nconst SIMPLE_ACTIONS = [\n \"start\",\n \"stop\",\n \"delete\",\n \"markRunning\",\n \"refreshToken\",\n \"cleanQueues\",\n \"killBuild\",\n \"cancelDeployment\",\n] as const\ntype SimpleAction = (typeof SIMPLE_ACTIONS)[number]\n\nexport function registerApplicationTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_application\",\n description:\n \"Manage applications. create: name+environmentId. get: applicationId. update: applicationId+fields. move: applicationId+targetEnvironmentId. deploy: applicationId, redeploy?. start/stop/delete/markRunning/refreshToken/cleanQueues/killBuild/cancelDeployment: applicationId. reload: applicationId+appName. saveEnvironment: applicationId+env. saveBuildType: applicationId+buildType. traefikConfig: applicationId, traefikConfig? (omit to read). readMonitoring: appName.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n applicationId: z.string().optional(),\n name: z.string().optional(),\n environmentId: z.string().optional(),\n description: z.string().optional(),\n serverId: z.string().optional(),\n targetEnvironmentId: z.string().optional(),\n redeploy: z.boolean().optional(),\n title: z.string().optional(),\n deployDescription: z.string().optional().describe(\"Deploy description (maps to API description field)\"),\n dockerImage: z.string().optional(),\n command: z.string().optional(),\n memoryLimit: z.number().optional(),\n cpuLimit: z.number().optional(),\n replicas: z.number().optional(),\n autoDeploy: z.boolean().optional(),\n appName: z.string().optional(),\n env: z.string().optional().describe(\"KEY=VALUE pairs, newline separated\"),\n buildArgs: z.string().optional(),\n createEnvFile: z.boolean().optional(),\n buildType: z.string().optional(),\n dockerfile: z.string().optional(),\n dockerContextPath: z.string().optional(),\n dockerBuildStage: z.string().optional(),\n publishDirectory: z.string().optional(),\n traefikConfig: z.string().optional().describe(\"New config content (omit to read current)\"),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const app = await client.post<DokployApplication>(\"application.create\", {\n name: args.name!,\n environmentId: args.environmentId!,\n ...(args.description && { description: args.description }),\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Application Created\\n\\n${formatApplication(app)}`\n }\n case \"get\": {\n const app = await client.get<DokployApplication>(\"application.one\", {\n applicationId: args.applicationId!,\n })\n return `# Application Details\\n\\n${formatApplication(app)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = { applicationId: args.applicationId! }\n const updateFields = [\n \"name\",\n \"description\",\n \"dockerImage\",\n \"command\",\n \"memoryLimit\",\n \"cpuLimit\",\n \"replicas\",\n \"autoDeploy\",\n ] as const\n for (const key of updateFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(\"application.update\", body)\n return `Application ${args.applicationId} updated.`\n }\n case \"move\": {\n await client.post(\"application.move\", {\n applicationId: args.applicationId!,\n targetEnvironmentId: args.targetEnvironmentId!,\n })\n return `Application ${args.applicationId} moved to environment ${args.targetEnvironmentId}.`\n }\n case \"deploy\": {\n const endpoint = args.redeploy ? \"application.redeploy\" : \"application.deploy\"\n await client.post(endpoint, {\n applicationId: args.applicationId!,\n ...(args.title && { title: args.title }),\n ...(args.deployDescription && { description: args.deployDescription }),\n })\n return `${args.redeploy ? \"Redeployment\" : \"Deployment\"} triggered for application ${args.applicationId}.`\n }\n case \"start\":\n case \"stop\":\n case \"delete\":\n case \"markRunning\":\n case \"refreshToken\":\n case \"cleanQueues\":\n case \"killBuild\":\n case \"cancelDeployment\": {\n await client.post(`application.${args.action satisfies SimpleAction}`, {\n applicationId: args.applicationId!,\n })\n return `Application ${args.applicationId}: ${args.action} completed.`\n }\n case \"reload\": {\n await client.post(\"application.reload\", {\n applicationId: args.applicationId!,\n appName: args.appName!,\n })\n return `Application ${args.applicationId} reloaded.`\n }\n case \"saveEnvironment\": {\n await client.post(\"application.saveEnvironment\", {\n applicationId: args.applicationId!,\n createEnvFile: args.createEnvFile ?? false,\n ...(args.env !== undefined && { env: args.env }),\n ...(args.buildArgs !== undefined && { buildArgs: args.buildArgs }),\n })\n return `Environment saved for application ${args.applicationId}.`\n }\n case \"saveBuildType\": {\n await client.post(\"application.saveBuildType\", {\n applicationId: args.applicationId!,\n buildType: args.buildType!,\n dockerContextPath: args.dockerContextPath || \".\",\n dockerBuildStage: args.dockerBuildStage || \"\",\n ...(args.dockerfile && { dockerfile: args.dockerfile }),\n ...(args.publishDirectory && { publishDirectory: args.publishDirectory }),\n })\n return `Build type set to \"${args.buildType}\" for application ${args.applicationId}.`\n }\n case \"traefikConfig\": {\n if (args.traefikConfig) {\n await client.post(\"application.updateTraefikConfig\", {\n applicationId: args.applicationId!,\n traefikConfig: args.traefikConfig,\n })\n return `Traefik config updated for application ${args.applicationId}.`\n }\n const config = await client.get<string>(\"application.readTraefikConfig\", {\n applicationId: args.applicationId!,\n })\n return `# Traefik Config\\n\\n\\`\\`\\`yaml\\n${config}\\n\\`\\`\\``\n }\n case \"readMonitoring\": {\n const data = await client.get<unknown>(\"application.readAppMonitoring\", { appName: args.appName! })\n return `# Monitoring: ${args.appName}\\n\\n\\`\\`\\`json\\n${JSON.stringify(data, null, 2)}\\n\\`\\`\\``\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployBackup } from \"../types\"\nimport { formatBackup } from \"../utils/formatters\"\n\nconst ACTIONS = [\"create\", \"get\", \"update\", \"remove\", \"listFiles\", \"manualBackup\"] as const\n\nexport function registerBackupTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_backup\",\n description:\n \"Manage backups. create: schedule+prefix+destinationId+database+databaseType. get: backupId. update: backupId+fields. remove: backupId. listFiles: destinationId. manualBackup: backupId+backupType.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n backupId: z.string().optional(),\n schedule: z.string().optional().describe(\"Cron expression\"),\n prefix: z.string().optional(),\n destinationId: z.string().optional(),\n database: z.string().optional(),\n databaseType: z.string().optional().describe(\"postgres, mysql, mariadb, or mongo\"),\n serviceName: z.string().optional(),\n enabled: z.boolean().optional(),\n keepLatestCount: z.number().optional(),\n postgresId: z.string().optional(),\n mysqlId: z.string().optional(),\n mariadbId: z.string().optional(),\n mongoId: z.string().optional(),\n composeId: z.string().optional(),\n backupType: z.enum([\"postgres\", \"mysql\", \"mariadb\", \"mongo\", \"compose\"]).optional(),\n search: z.string().optional(),\n serverId: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const body: Record<string, unknown> = {}\n const fields = [\n \"schedule\",\n \"prefix\",\n \"destinationId\",\n \"database\",\n \"databaseType\",\n \"enabled\",\n \"keepLatestCount\",\n \"postgresId\",\n \"mysqlId\",\n \"mariadbId\",\n \"mongoId\",\n \"composeId\",\n \"serviceName\",\n ] as const\n for (const key of fields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n const backup = await client.post<DokployBackup>(\"backup.create\", body)\n return `# Backup Created\\n\\n${formatBackup(backup)}`\n }\n case \"get\": {\n const backup = await client.get<DokployBackup>(\"backup.one\", { backupId: args.backupId! })\n return `# Backup Details\\n\\n${formatBackup(backup)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = {}\n const fields = [\n \"backupId\",\n \"schedule\",\n \"prefix\",\n \"destinationId\",\n \"database\",\n \"serviceName\",\n \"databaseType\",\n \"enabled\",\n \"keepLatestCount\",\n ] as const\n for (const key of fields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(\"backup.update\", body)\n return `Backup ${args.backupId} updated.`\n }\n case \"remove\": {\n await client.post(\"backup.remove\", { backupId: args.backupId! })\n return `Backup ${args.backupId} removed.`\n }\n case \"listFiles\": {\n const files = await client.get<unknown>(\"backup.listBackupFiles\", {\n destinationId: args.destinationId!,\n ...(args.search && { search: args.search }),\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Backup Files\\n\\n\\`\\`\\`json\\n${JSON.stringify(files, null, 2)}\\n\\`\\`\\``\n }\n case \"manualBackup\": {\n const endpointMap: Record<string, string> = {\n postgres: \"backup.manualBackupPostgres\",\n mysql: \"backup.manualBackupMySql\",\n mariadb: \"backup.manualBackupMariadb\",\n mongo: \"backup.manualBackupMongo\",\n compose: \"backup.manualBackupCompose\",\n }\n const endpoint = endpointMap[args.backupType!]\n await client.post(endpoint, { backupId: args.backupId! })\n return `Manual ${args.backupType} backup triggered for backup config ${args.backupId}.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployCompose } from \"../types\"\nimport { formatCompose } from \"../utils/formatters\"\n\nconst ACTIONS = [\n \"create\",\n \"get\",\n \"update\",\n \"delete\",\n \"deploy\",\n \"start\",\n \"stop\",\n \"move\",\n \"loadServices\",\n \"loadMounts\",\n \"getDefaultCommand\",\n] as const\n\nexport function registerComposeTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_compose\",\n description:\n \"Manage Docker Compose services. create: name+environmentId. get/delete/start/stop/getDefaultCommand: composeId. update: composeId+fields. deploy: composeId, redeploy?. move: composeId+targetEnvironmentId. loadServices: composeId. loadMounts: composeId+serviceName.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n composeId: z.string().optional(),\n name: z.string().optional(),\n environmentId: z.string().optional(),\n description: z.string().optional(),\n composeType: z.string().optional().describe(\"docker-compose or stack\"),\n composeFile: z.string().optional(),\n serverId: z.string().optional(),\n env: z.string().optional(),\n command: z.string().optional(),\n deleteVolumes: z.boolean().optional(),\n redeploy: z.boolean().optional(),\n title: z.string().optional(),\n deployDescription: z.string().optional(),\n targetEnvironmentId: z.string().optional(),\n type: z.string().optional(),\n serviceName: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const compose = await client.post<DokployCompose>(\"compose.create\", {\n name: args.name!,\n environmentId: args.environmentId!,\n ...(args.description && { description: args.description }),\n ...(args.composeType && { composeType: args.composeType }),\n ...(args.composeFile && { composeFile: args.composeFile }),\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Compose Created\\n\\n${formatCompose(compose)}`\n }\n case \"get\": {\n const compose = await client.get<DokployCompose>(\"compose.one\", { composeId: args.composeId! })\n return `# Compose Details\\n\\n${formatCompose(compose)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = { composeId: args.composeId! }\n const updateFields = [\"name\", \"description\", \"composeFile\", \"env\", \"command\"] as const\n for (const key of updateFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(\"compose.update\", body)\n return `Compose ${args.composeId} updated.`\n }\n case \"delete\": {\n await client.post(\"compose.delete\", {\n composeId: args.composeId!,\n deleteVolumes: args.deleteVolumes ?? false,\n })\n return `Compose ${args.composeId} deleted.`\n }\n case \"deploy\": {\n const endpoint = args.redeploy ? \"compose.redeploy\" : \"compose.deploy\"\n await client.post(endpoint, {\n composeId: args.composeId!,\n ...(args.title && { title: args.title }),\n ...(args.deployDescription && { description: args.deployDescription }),\n })\n return `${args.redeploy ? \"Redeployment\" : \"Deployment\"} triggered for compose ${args.composeId}.`\n }\n case \"start\":\n case \"stop\": {\n await client.post(`compose.${args.action}`, { composeId: args.composeId! })\n return `Compose ${args.composeId}: ${args.action} completed.`\n }\n case \"move\": {\n await client.post(\"compose.move\", {\n composeId: args.composeId!,\n targetEnvironmentId: args.targetEnvironmentId!,\n })\n return `Compose ${args.composeId} moved to environment ${args.targetEnvironmentId}.`\n }\n case \"loadServices\": {\n const services = await client.get<unknown>(\"compose.loadServices\", {\n composeId: args.composeId!,\n ...(args.type && { type: args.type }),\n })\n return `# Compose Services\\n\\n\\`\\`\\`json\\n${JSON.stringify(services, null, 2)}\\n\\`\\`\\``\n }\n case \"loadMounts\": {\n const mounts = await client.get<unknown>(\"compose.loadMountsByService\", {\n composeId: args.composeId!,\n serviceName: args.serviceName!,\n })\n return `# Mounts: ${args.serviceName}\\n\\n\\`\\`\\`json\\n${JSON.stringify(mounts, null, 2)}\\n\\`\\`\\``\n }\n case \"getDefaultCommand\": {\n const command = await client.get<string>(\"compose.getDefaultCommand\", { composeId: args.composeId! })\n return `Default command: ${command}`\n }\n }\n },\n })\n}\n","export const DB_TYPES = [\"postgres\", \"mysql\", \"mariadb\", \"mongo\", \"redis\"] as const\nexport type DatabaseType = (typeof DB_TYPES)[number]\n\nexport const DB_ID_FIELDS: Record<DatabaseType, string> = {\n postgres: \"postgresId\",\n mysql: \"mysqlId\",\n mariadb: \"mariadbId\",\n mongo: \"mongoId\",\n redis: \"redisId\",\n}\n\nexport type DokployProject = {\n projectId: string\n name: string\n description?: string\n createdAt?: string\n organizationId?: string\n environments?: DokployEnvironment[]\n}\n\nexport type DokployEnvironment = {\n environmentId: string\n name: string\n description?: string\n projectId: string\n createdAt?: string\n}\n\nexport type DokployApplication = {\n applicationId: string\n name: string\n appName: string\n description?: string\n applicationStatus: string\n buildType?: string\n sourceType?: string\n dockerImage?: string\n repository?: string\n branch?: string\n environmentId: string\n createdAt?: string\n autoDeploy?: boolean\n env?: string\n domains?: DokployDomain[]\n}\n\nexport type DokployCompose = {\n composeId: string\n name: string\n appName: string\n description?: string\n composeFile?: string\n composeType?: string\n composeStatus: string\n sourceType?: string\n environmentId: string\n createdAt?: string\n}\n\nexport type DokployDeployment = {\n deploymentId: string\n title?: string\n description?: string\n status: string\n logPath?: string\n applicationId?: string\n composeId?: string\n serverId?: string\n createdAt?: string\n}\n\nexport type DokployDomain = {\n domainId: string\n host: string\n path?: string\n port?: number\n https: boolean\n certificateType?: string\n applicationId?: string\n composeId?: string\n serviceName?: string\n domainType?: string\n createdAt?: string\n}\n\nexport type DokployServer = {\n serverId: string\n name: string\n description?: string\n ipAddress: string\n port: number\n username: string\n sshKeyId: string\n serverType: string\n createdAt?: string\n}\n\nexport type DokployDatabase = {\n databaseId: string\n name: string\n appName: string\n description?: string\n databaseName?: string\n databaseUser?: string\n dockerImage?: string\n applicationStatus: string\n environmentId: string\n externalPort?: number\n createdAt?: string\n}\n\nexport type DokployBackup = {\n backupId: string\n schedule: string\n enabled?: boolean\n prefix: string\n destinationId: string\n database: string\n databaseType: string\n keepLatestCount?: number\n postgresId?: string\n mysqlId?: string\n mariadbId?: string\n mongoId?: string\n}\n\nexport type DokployContainer = {\n containerId: string\n name: string\n image: string\n state: string\n status: string\n ports?: string\n}\n\nexport type DokployMount = {\n mountId: string\n type: string\n hostPath?: string\n volumeName?: string\n mountPath: string\n applicationId?: string\n}\n\nexport type DokployPort = {\n portId: string\n publishedPort: number\n targetPort: number\n protocol?: string\n publishMode?: string\n applicationId?: string\n}\n\nexport type DokployCertificate = {\n certificateId: string\n name: string\n certificateData?: string\n privateKey?: string\n autoRenew?: boolean\n}\n\nexport type DokploySecurity = {\n securityId: string\n username: string\n password: string\n applicationId?: string\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DatabaseType, DokployDatabase } from \"../types\"\nimport { DB_ID_FIELDS, DB_TYPES } from \"../types\"\nimport { formatDatabase } from \"../utils/formatters\"\n\nconst dbTypeSchema = z.enum(DB_TYPES).describe(\"postgres, mysql, mariadb, mongo, or redis\")\n\nfunction dbIdField(dbType: DatabaseType): string {\n return DB_ID_FIELDS[dbType]\n}\n\nfunction dbBody(dbType: DatabaseType, databaseId: string): Record<string, unknown> {\n return { [dbIdField(dbType)]: databaseId }\n}\n\nconst ACTIONS = [\n \"create\",\n \"get\",\n \"update\",\n \"move\",\n \"start\",\n \"stop\",\n \"deploy\",\n \"rebuild\",\n \"remove\",\n \"reload\",\n \"changeStatus\",\n \"saveEnvironment\",\n \"saveExternalPort\",\n] as const\n\nconst SIMPLE_ACTIONS = [\"start\", \"stop\", \"deploy\", \"rebuild\", \"remove\"] as const\ntype SimpleAction = (typeof SIMPLE_ACTIONS)[number]\n\nexport function registerDatabaseTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_database\",\n description:\n \"Manage databases (postgres/mysql/mariadb/mongo/redis). create: dbType+name+environmentId+databasePassword. get: dbType+databaseId. update: dbType+databaseId+fields. move: dbType+databaseId+targetEnvironmentId. start/stop/deploy/rebuild/remove: dbType+databaseId. reload: dbType+databaseId+appName. changeStatus: dbType+databaseId+applicationStatus. saveEnvironment: dbType+databaseId+env. saveExternalPort: dbType+databaseId+externalPort.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n dbType: dbTypeSchema,\n databaseId: z.string().optional(),\n name: z.string().optional(),\n environmentId: z.string().optional(),\n databaseName: z.string().optional(),\n databaseUser: z.string().optional(),\n databasePassword: z.string().optional(),\n databaseRootPassword: z.string().optional().describe(\"mysql/mariadb only\"),\n dockerImage: z.string().optional(),\n description: z.string().optional(),\n serverId: z.string().optional(),\n command: z.string().optional(),\n memoryLimit: z.number().optional(),\n cpuLimit: z.number().optional(),\n targetEnvironmentId: z.string().optional(),\n appName: z.string().optional(),\n applicationStatus: z.string().optional().describe(\"idle, running, done, or error\"),\n env: z.string().optional().describe(\"KEY=VALUE, newline separated\"),\n externalPort: z.number().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n const { dbType } = args\n\n switch (args.action) {\n case \"create\": {\n const body: Record<string, unknown> = {}\n const createFields = [\n \"name\",\n \"environmentId\",\n \"databaseName\",\n \"databaseUser\",\n \"databasePassword\",\n \"databaseRootPassword\",\n \"dockerImage\",\n \"description\",\n \"serverId\",\n ] as const\n for (const key of createFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n const db = await client.post<DokployDatabase>(`${dbType}.create`, body)\n return `# Database Created\\n\\n${formatDatabase(db, dbType)}`\n }\n case \"get\": {\n const db = await client.get<DokployDatabase>(`${dbType}.one`, {\n [dbIdField(dbType)]: args.databaseId!,\n })\n return `# Database Details\\n\\n${formatDatabase(db, dbType)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = { [dbIdField(dbType)]: args.databaseId! }\n const updateFields = [\"name\", \"description\", \"dockerImage\", \"command\", \"memoryLimit\", \"cpuLimit\"] as const\n for (const key of updateFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(`${dbType}.update`, body)\n return `Database ${args.databaseId} (${dbType}) updated.`\n }\n case \"move\": {\n await client.post(`${dbType}.move`, {\n ...dbBody(dbType, args.databaseId!),\n targetEnvironmentId: args.targetEnvironmentId!,\n })\n return `Database ${args.databaseId} moved to environment ${args.targetEnvironmentId}.`\n }\n case \"start\":\n case \"stop\":\n case \"deploy\":\n case \"rebuild\":\n case \"remove\": {\n await client.post(`${dbType}.${args.action satisfies SimpleAction}`, dbBody(dbType, args.databaseId!))\n return `Database ${args.databaseId} (${dbType}): ${args.action} completed.`\n }\n case \"reload\": {\n await client.post(`${dbType}.reload`, {\n ...dbBody(dbType, args.databaseId!),\n appName: args.appName!,\n })\n return `Database ${args.databaseId} (${dbType}) reloaded.`\n }\n case \"changeStatus\": {\n await client.post(`${dbType}.changeStatus`, {\n ...dbBody(dbType, args.databaseId!),\n applicationStatus: args.applicationStatus!,\n })\n return `Database ${args.databaseId} status changed to ${args.applicationStatus}.`\n }\n case \"saveEnvironment\": {\n await client.post(`${dbType}.saveEnvironment`, {\n ...dbBody(dbType, args.databaseId!),\n ...(args.env !== undefined && { env: args.env }),\n })\n return `Environment saved for database ${args.databaseId}.`\n }\n case \"saveExternalPort\": {\n await client.post(`${dbType}.saveExternalPort`, {\n ...dbBody(dbType, args.databaseId!),\n externalPort: args.externalPort!,\n })\n return `External port set to ${args.externalPort} for database ${args.databaseId}.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployDeployment } from \"../types\"\nimport { formatDeploymentList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"list\", \"killProcess\"] as const\n\nexport function registerDeploymentTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_deployment\",\n description: \"Manage deployments. list: applicationId|composeId|serverId|type+id. killProcess: deploymentId.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n deploymentId: z.string().optional(),\n applicationId: z.string().optional(),\n composeId: z.string().optional(),\n serverId: z.string().optional(),\n type: z.string().optional().describe(\"Resource type (application, compose, postgres, mysql, etc.)\"),\n id: z.string().optional().describe(\"Resource ID (used with type)\"),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"list\": {\n let deployments: DokployDeployment[]\n\n if (args.applicationId) {\n deployments = await client.get<DokployDeployment[]>(\"deployment.all\", {\n applicationId: args.applicationId,\n })\n } else if (args.composeId) {\n deployments = await client.get<DokployDeployment[]>(\"deployment.allByCompose\", {\n composeId: args.composeId,\n })\n } else if (args.serverId) {\n deployments = await client.get<DokployDeployment[]>(\"deployment.allByServer\", {\n serverId: args.serverId,\n })\n } else if (args.type && args.id) {\n deployments = await client.get<DokployDeployment[]>(\"deployment.allByType\", {\n type: args.type,\n id: args.id,\n })\n } else {\n throw new Error(\"Provide applicationId, composeId, serverId, or type+id\")\n }\n\n return formatDeploymentList(deployments)\n }\n case \"killProcess\": {\n await client.post(\"deployment.killProcess\", { deploymentId: args.deploymentId! })\n return `Deployment ${args.deploymentId} killed.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployContainer } from \"../types\"\nimport { formatContainerList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"getContainers\", \"restartContainer\", \"getConfig\", \"findContainers\"] as const\n\nexport function registerDockerTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_docker\",\n description:\n \"Docker management. getContainers: serverId?. restartContainer: containerId. getConfig: containerId, serverId?. findContainers: appName+method(match|label|stack|service), serverId?.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n containerId: z.string().optional(),\n serverId: z.string().optional(),\n appName: z.string().optional(),\n method: z.enum([\"match\", \"label\", \"stack\", \"service\"]).optional(),\n appType: z.string().optional().describe(\"App type filter (match method only)\"),\n type: z.string().optional().describe(\"Label type (label method only)\"),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"getContainers\": {\n const containers = await client.get<DokployContainer[]>(\"docker.getContainers\", {\n ...(args.serverId && { serverId: args.serverId }),\n })\n return formatContainerList(containers)\n }\n case \"restartContainer\": {\n await client.post(\"docker.restartContainer\", { containerId: args.containerId! })\n return `Container ${args.containerId} restarted.`\n }\n case \"getConfig\": {\n const config = await client.get<unknown>(\"docker.getConfig\", {\n containerId: args.containerId!,\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Container Config\\n\\n\\`\\`\\`json\\n${JSON.stringify(config, null, 2)}\\n\\`\\`\\``\n }\n case \"findContainers\": {\n const endpointMap: Record<string, string> = {\n match: \"docker.getContainersByAppNameMatch\",\n label: \"docker.getContainersByAppLabel\",\n stack: \"docker.getStackContainersByAppName\",\n service: \"docker.getServiceContainersByAppName\",\n }\n const method = args.method!\n const params: Record<string, string> = { appName: args.appName! }\n if (args.serverId) params.serverId = args.serverId\n if (args.appType && method === \"match\") params.appType = args.appType\n if (args.type && method === \"label\") params.type = args.type\n const containers = await client.get<DokployContainer[]>(endpointMap[method], params)\n return formatContainerList(containers)\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployDomain } from \"../types\"\nimport { formatDomain, formatDomainList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"create\", \"list\", \"get\", \"update\", \"delete\", \"generate\", \"canGenerateTraefikMe\", \"validate\"] as const\n\nexport function registerDomainTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_domain\",\n description:\n \"Manage domains. create: host+applicationId|composeId. list: applicationId|composeId. get: domainId. update: domainId+host. delete: domainId. generate: appName. canGenerateTraefikMe: serverId?. validate: domain.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n domainId: z.string().optional(),\n host: z.string().optional(),\n applicationId: z.string().optional(),\n composeId: z.string().optional(),\n serviceName: z.string().optional(),\n path: z.string().optional(),\n port: z.number().optional(),\n https: z.boolean().optional(),\n certificateType: z.string().optional(),\n domainType: z.string().optional(),\n appName: z.string().optional(),\n serverId: z.string().optional(),\n domain: z.string().optional(),\n serverIp: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const body: Record<string, unknown> = { host: args.host! }\n const optionalFields = [\n \"applicationId\",\n \"composeId\",\n \"serviceName\",\n \"path\",\n \"port\",\n \"https\",\n \"certificateType\",\n \"domainType\",\n ] as const\n for (const key of optionalFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n const domain = await client.post<DokployDomain>(\"domain.create\", body)\n return `# Domain Created\\n\\n${formatDomain(domain)}`\n }\n case \"list\": {\n let domains: DokployDomain[]\n if (args.applicationId) {\n domains = await client.get<DokployDomain[]>(\"domain.byApplicationId\", {\n applicationId: args.applicationId,\n })\n } else if (args.composeId) {\n domains = await client.get<DokployDomain[]>(\"domain.byComposeId\", { composeId: args.composeId })\n } else {\n throw new Error(\"Provide applicationId or composeId\")\n }\n return formatDomainList(domains)\n }\n case \"get\": {\n const domain = await client.get<DokployDomain>(\"domain.one\", { domainId: args.domainId! })\n return `# Domain Details\\n\\n${formatDomain(domain)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = { domainId: args.domainId!, host: args.host! }\n const optionalFields = [\"path\", \"port\", \"https\", \"certificateType\"] as const\n for (const key of optionalFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(\"domain.update\", body)\n return `Domain ${args.domainId} updated.`\n }\n case \"delete\": {\n await client.post(\"domain.delete\", { domainId: args.domainId! })\n return `Domain ${args.domainId} deleted.`\n }\n case \"generate\": {\n const result = await client.post<unknown>(\"domain.generateDomain\", {\n appName: args.appName!,\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Generated Domain\\n\\n\\`\\`\\`json\\n${JSON.stringify(result, null, 2)}\\n\\`\\`\\``\n }\n case \"canGenerateTraefikMe\": {\n const result = await client.get<boolean>(\"domain.canGenerateTraefikMeDomains\", {\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `Traefik.me: ${result ? \"Available\" : \"Not available\"}`\n }\n case \"validate\": {\n const result = await client.post<unknown>(\"domain.validateDomain\", {\n domain: args.domain!,\n ...(args.serverIp && { serverIp: args.serverIp }),\n })\n return `# DNS Validation: ${args.domain}\\n\\n\\`\\`\\`json\\n${JSON.stringify(result, null, 2)}\\n\\`\\`\\``\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployEnvironment } from \"../types\"\nimport { formatEnvironment, formatEnvironmentList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"create\", \"get\", \"list\", \"update\", \"remove\", \"duplicate\"] as const\n\nexport function registerEnvironmentTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_environment\",\n description:\n \"Manage project environments. create: projectId+name. get: environmentId. list: projectId. update: environmentId+fields. remove: environmentId. duplicate: environmentId+name.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n environmentId: z.string().optional(),\n projectId: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const env = await client.post<DokployEnvironment>(\"environment.create\", {\n name: args.name!,\n projectId: args.projectId!,\n ...(args.description && { description: args.description }),\n })\n return `# Environment Created\\n\\n${formatEnvironment(env)}`\n }\n case \"get\": {\n const env = await client.get<DokployEnvironment>(\"environment.one\", { environmentId: args.environmentId! })\n return `# Environment Details\\n\\n${formatEnvironment(env)}`\n }\n case \"list\": {\n const envs = await client.get<DokployEnvironment[]>(\"environment.byProjectId\", {\n projectId: args.projectId!,\n })\n return formatEnvironmentList(envs)\n }\n case \"update\": {\n await client.post(\"environment.update\", {\n environmentId: args.environmentId!,\n ...(args.name && { name: args.name }),\n ...(args.description !== undefined && { description: args.description }),\n })\n return `Environment ${args.environmentId} updated.`\n }\n case \"remove\": {\n await client.post(\"environment.remove\", { environmentId: args.environmentId! })\n return `Environment ${args.environmentId} removed.`\n }\n case \"duplicate\": {\n await client.post(\"environment.duplicate\", {\n environmentId: args.environmentId!,\n name: args.name!,\n ...(args.description && { description: args.description }),\n })\n return `Environment duplicated as \"${args.name}\".`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployCertificate, DokployPort, DokploySecurity } from \"../types\"\n\nconst ACTIONS = [\n \"createPort\",\n \"deletePort\",\n \"createAuth\",\n \"deleteAuth\",\n \"listCerts\",\n \"getCert\",\n \"createCert\",\n \"removeCert\",\n] as const\n\nexport function registerInfrastructureTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_infrastructure\",\n description:\n \"Manage ports, auth, certs. createPort: applicationId+publishedPort+targetPort. deletePort: portId. createAuth: applicationId+username+password. deleteAuth: securityId. listCerts: all. getCert: certificateId. createCert: name+certificateData+privateKey+organizationId. removeCert: certificateId.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n applicationId: z.string().optional(),\n publishedPort: z.number().optional(),\n targetPort: z.number().optional(),\n protocol: z.string().optional(),\n publishMode: z.string().optional(),\n portId: z.string().optional(),\n username: z.string().optional(),\n password: z.string().optional(),\n securityId: z.string().optional(),\n certificateId: z.string().optional(),\n name: z.string().optional(),\n certificateData: z.string().optional().describe(\"PEM format\"),\n privateKey: z.string().optional().describe(\"PEM format\"),\n organizationId: z.string().optional(),\n autoRenew: z.boolean().optional(),\n serverId: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"createPort\": {\n const port = await client.post<DokployPort>(\"port.create\", {\n applicationId: args.applicationId!,\n publishedPort: args.publishedPort!,\n targetPort: args.targetPort!,\n ...(args.protocol && { protocol: args.protocol }),\n ...(args.publishMode && { publishMode: args.publishMode }),\n })\n return `Port mapping created: ${port.publishedPort} -> ${port.targetPort} (ID: ${port.portId})`\n }\n case \"deletePort\": {\n await client.post(\"port.delete\", { portId: args.portId! })\n return `Port mapping ${args.portId} deleted.`\n }\n case \"createAuth\": {\n const security = await client.post<DokploySecurity>(\"security.create\", {\n applicationId: args.applicationId!,\n username: args.username!,\n password: args.password!,\n })\n return `Basic auth created for application ${args.applicationId} (ID: ${security.securityId})`\n }\n case \"deleteAuth\": {\n await client.post(\"security.delete\", { securityId: args.securityId! })\n return `Security credentials ${args.securityId} deleted.`\n }\n case \"listCerts\": {\n const certs = await client.get<DokployCertificate[]>(\"certificates.all\")\n if (certs.length === 0) return \"No certificates found.\"\n const lines = certs.map(\n (c) => `- **${c.name}** (ID: ${c.certificateId}) | Auto-renew: ${c.autoRenew ?? \"N/A\"}`,\n )\n return `# Certificates (${certs.length})\\n\\n${lines.join(\"\\n\")}`\n }\n case \"getCert\": {\n const cert = await client.get<DokployCertificate>(\"certificates.one\", {\n certificateId: args.certificateId!,\n })\n return `# Certificate: ${cert.name}\\n\\n- ID: ${cert.certificateId}\\n- Auto-renew: ${cert.autoRenew ?? \"N/A\"}`\n }\n case \"createCert\": {\n const body: Record<string, unknown> = {\n name: args.name!,\n certificateData: args.certificateData!,\n privateKey: args.privateKey!,\n organizationId: args.organizationId!,\n }\n if (args.autoRenew !== undefined) body.autoRenew = args.autoRenew\n if (args.serverId) body.serverId = args.serverId\n const cert = await client.post<DokployCertificate>(\"certificates.create\", body)\n return `Certificate \"${cert.name}\" created (ID: ${cert.certificateId}).`\n }\n case \"removeCert\": {\n await client.post(\"certificates.remove\", { certificateId: args.certificateId! })\n return `Certificate ${args.certificateId} removed.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployProject } from \"../types\"\nimport { formatProject, formatProjectList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"list\", \"get\", \"create\", \"update\", \"remove\", \"duplicate\"] as const\n\nexport function registerProjectTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_project\",\n description:\n \"Manage projects. list: all. get: projectId. create: name. update: projectId+fields. remove: projectId. duplicate: sourceEnvironmentId+name.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n projectId: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n sourceEnvironmentId: z.string().optional(),\n includeServices: z.boolean().optional(),\n duplicateInSameProject: z.boolean().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"list\": {\n const projects = await client.get<DokployProject[]>(\"project.all\")\n return formatProjectList(projects)\n }\n case \"get\": {\n const project = await client.get<DokployProject>(\"project.one\", { projectId: args.projectId! })\n return `# Project Details\\n\\n${formatProject(project)}`\n }\n case \"create\": {\n const project = await client.post<DokployProject>(\"project.create\", {\n name: args.name!,\n ...(args.description && { description: args.description }),\n })\n return `# Project Created\\n\\n${formatProject(project)}`\n }\n case \"update\": {\n await client.post(\"project.update\", {\n projectId: args.projectId!,\n ...(args.name && { name: args.name }),\n ...(args.description !== undefined && { description: args.description }),\n })\n return `Project ${args.projectId} updated.`\n }\n case \"remove\": {\n await client.post(\"project.remove\", { projectId: args.projectId! })\n return `Project ${args.projectId} removed.`\n }\n case \"duplicate\": {\n await client.post(\"project.duplicate\", {\n sourceEnvironmentId: args.sourceEnvironmentId!,\n name: args.name!,\n ...(args.description && { description: args.description }),\n ...(args.includeServices !== undefined && { includeServices: args.includeServices }),\n ...(args.duplicateInSameProject !== undefined && { duplicateInSameProject: args.duplicateInSameProject }),\n })\n return `Environment duplicated as \"${args.name}\".`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployServer } from \"../types\"\nimport { formatServer, formatServerList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"list\", \"get\", \"create\", \"update\", \"remove\", \"count\", \"publicIp\", \"getMetrics\"] as const\n\nexport function registerServerTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_server\",\n description:\n \"Manage servers. list/count/publicIp: no params. get: serverId. create: name+ipAddress+port+username+sshKeyId+serverType. update: serverId+fields. remove: serverId. getMetrics: url+token.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n serverId: z.string().optional(),\n name: z.string().optional(),\n ipAddress: z.string().optional(),\n port: z.number().optional(),\n username: z.string().optional(),\n sshKeyId: z.string().optional(),\n serverType: z.string().optional(),\n description: z.string().optional(),\n url: z.string().optional(),\n token: z.string().optional(),\n dataPoints: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"list\": {\n const servers = await client.get<DokployServer[]>(\"server.all\")\n return formatServerList(servers)\n }\n case \"get\": {\n const srv = await client.get<DokployServer>(\"server.one\", { serverId: args.serverId! })\n return `# Server Details\\n\\n${formatServer(srv)}`\n }\n case \"create\": {\n const srv = await client.post<DokployServer>(\"server.create\", {\n name: args.name!,\n ipAddress: args.ipAddress!,\n port: args.port!,\n username: args.username!,\n sshKeyId: args.sshKeyId!,\n serverType: args.serverType!,\n ...(args.description && { description: args.description }),\n })\n return `# Server Created\\n\\n${formatServer(srv)}`\n }\n case \"update\": {\n await client.post(\"server.update\", {\n serverId: args.serverId!,\n name: args.name!,\n ipAddress: args.ipAddress!,\n port: args.port!,\n username: args.username!,\n sshKeyId: args.sshKeyId!,\n serverType: args.serverType!,\n ...(args.description && { description: args.description }),\n })\n return `Server ${args.serverId} updated.`\n }\n case \"remove\": {\n await client.post(\"server.remove\", { serverId: args.serverId! })\n return `Server ${args.serverId} removed.`\n }\n case \"count\": {\n const count = await client.get<number>(\"server.count\")\n return `Total servers: ${count}`\n }\n case \"publicIp\": {\n const ip = await client.get<string>(\"server.publicIp\")\n return `Public IP: ${ip}`\n }\n case \"getMetrics\": {\n const metrics = await client.get<unknown>(\"server.getServerMetrics\", {\n url: args.url!,\n token: args.token!,\n ...(args.dataPoints && { dataPoints: args.dataPoints }),\n })\n return `# Server Metrics\\n\\n\\`\\`\\`json\\n${JSON.stringify(metrics, null, 2)}\\n\\`\\`\\``\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\n\nconst ACTIONS = [\"health\", \"version\", \"ip\", \"clean\", \"reload\"] as const\n\nexport function registerSettingsTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_settings\",\n description:\n \"System settings. health: check status. version: get version. ip: get IP. clean: cleanType (all|images), serverId?. reload: reloadTarget (server|traefik), serverId?.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n cleanType: z.enum([\"all\", \"images\"]).optional(),\n reloadTarget: z.enum([\"server\", \"traefik\"]).optional(),\n serverId: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"health\": {\n const health = await client.get<unknown>(\"settings.health\")\n return `# Health\\n\\n\\`\\`\\`json\\n${JSON.stringify(health, null, 2)}\\n\\`\\`\\``\n }\n case \"version\": {\n const version = await client.get<string>(\"settings.getDokployVersion\")\n return `Dokploy version: ${version}`\n }\n case \"ip\": {\n const ip = await client.get<string>(\"settings.getIp\")\n return `Server IP: ${ip}`\n }\n case \"clean\": {\n const type = args.cleanType ?? \"all\"\n const endpoint = type === \"all\" ? \"settings.cleanAll\" : \"settings.cleanUnusedImages\"\n await client.post(endpoint, {\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `Cleanup (${type}) completed.`\n }\n case \"reload\": {\n const target = args.reloadTarget ?? \"server\"\n if (target === \"server\") {\n await client.post(\"settings.reloadServer\")\n } else {\n await client.post(\"settings.reloadTraefik\", {\n ...(args.serverId && { serverId: args.serverId }),\n })\n }\n return `${target} reloaded.`\n }\n }\n },\n })\n}\n","import dotenv from \"dotenv\"\nimport { FastMCP } from \"fastmcp\"\n\nimport { initializeDokployClient } from \"./client/dokploy-client\"\nimport {\n registerApplicationTools,\n registerBackupTools,\n registerComposeTools,\n registerDatabaseTools,\n registerDeploymentTools,\n registerDockerTools,\n registerDomainTools,\n registerEnvironmentTools,\n registerInfrastructureTools,\n registerProjectTools,\n registerServerTools,\n registerSettingsTools,\n} from \"./tools\"\n\ndotenv.config()\n\ndeclare const __VERSION__: string\nconst VERSION = (typeof __VERSION__ !== \"undefined\" ? __VERSION__ : \"0.0.0-dev\") as `${number}.${number}.${number}`\n\nfunction setupDokployClient() {\n const baseUrl = process.env.DOKPLOY_URL\n const apiKey = process.env.DOKPLOY_API_KEY\n\n if (!baseUrl) {\n console.error(\"[Error] DOKPLOY_URL environment variable is required\")\n console.error(\"[Error] Set it to your Dokploy instance URL (e.g., https://dokploy.example.com)\")\n process.exit(1)\n }\n\n if (!apiKey) {\n console.error(\"[Error] DOKPLOY_API_KEY environment variable is required\")\n console.error(\"[Error] Generate an API key in Dokploy Settings > API Keys\")\n process.exit(1)\n }\n\n initializeDokployClient(baseUrl, apiKey)\n console.error(`[Setup] Dokploy client initialized for ${baseUrl}`)\n}\n\nconst server = new FastMCP({\n name: \"dokploy-mcp-server\",\n version: VERSION,\n instructions: `A comprehensive Dokploy MCP server for managing deployments, applications, databases, domains, and infrastructure.\n\nAvailable capabilities:\n- Projects: list, create, update, remove, duplicate\n- Applications: create, deploy, redeploy, start, stop, delete, configure builds, manage environment variables\n- Docker Compose: create, deploy, start, stop, manage services\n- Databases: unified tools for postgres, mysql, mariadb, mongo, redis (create, deploy, start, stop, manage)\n- Domains: create, configure, validate DNS, generate traefik.me domains\n- Docker: list containers, restart, inspect configuration\n- Servers: add, configure, monitor remote servers\n- Deployments: list, track, kill deployment processes\n- Backups: schedule, trigger manual backups, list backup files\n- Environments: create, duplicate, manage project environments\n- Infrastructure: ports, certificates, basic auth security\n- Settings: health checks, version info, cleanup, reload services`,\n})\n\nregisterProjectTools(server)\nregisterApplicationTools(server)\nregisterComposeTools(server)\nregisterDeploymentTools(server)\nregisterDockerTools(server)\nregisterDomainTools(server)\nregisterServerTools(server)\nregisterSettingsTools(server)\nregisterDatabaseTools(server)\nregisterBackupTools(server)\nregisterEnvironmentTools(server)\nregisterInfrastructureTools(server)\n\nasync function main() {\n try {\n setupDokployClient()\n\n const useHttp = process.env.TRANSPORT_TYPE === \"httpStream\" || process.env.TRANSPORT_TYPE === \"http\"\n const port = parseInt(process.env.PORT || \"3000\")\n const host = process.env.HOST || \"0.0.0.0\"\n\n if (useHttp) {\n console.error(`[Setup] Starting HTTP server on ${host}:${port}`)\n await server.start({\n transportType: \"httpStream\",\n httpStream: {\n port,\n host,\n endpoint: \"/mcp\",\n },\n })\n console.error(`[Setup] HTTP server ready at http://${host}:${port}/mcp`)\n } else {\n console.error(\"[Setup] Starting in stdio mode\")\n await server.start({\n transportType: \"stdio\",\n })\n }\n } catch (error) {\n console.error(\"[Error] Failed to start server:\", error)\n process.exit(1)\n }\n}\n\nprocess.on(\"SIGINT\", () => {\n console.error(\"[Shutdown] Shutting down Dokploy MCP Server...\")\n process.exit(0)\n})\n\nprocess.on(\"SIGTERM\", () => {\n console.error(\"[Shutdown] Shutting down Dokploy MCP Server...\")\n process.exit(0)\n})\n\nmain().catch(console.error)\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS","ACTIONS"],"sources":["../src/client/dokploy-client.ts","../src/types.ts","../src/utils/formatters.ts","../src/tools/application-tools.ts","../src/tools/backup-tools.ts","../src/tools/compose-tools.ts","../src/tools/database-tools.ts","../src/tools/deployment-tools.ts","../src/tools/docker-tools.ts","../src/tools/domain-tools.ts","../src/tools/environment-tools.ts","../src/tools/infrastructure-tools.ts","../src/tools/project-tools.ts","../src/tools/server-tools.ts","../src/tools/settings-tools.ts","../src/index.ts"],"sourcesContent":["type RequestOptions = {\n method: \"GET\" | \"POST\"\n params?: Record<string, string | number | boolean | undefined>\n body?: Record<string, unknown>\n}\n\nexport class DokployClient {\n private baseUrl: string\n private apiKey: string\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\")\n this.apiKey = apiKey\n }\n\n async get<T>(path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {\n return this.request<T>(path, { method: \"GET\", params })\n }\n\n async post<T>(path: string, body?: Record<string, unknown>): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body })\n }\n\n private async request<T>(path: string, options: RequestOptions): Promise<T> {\n const url = new URL(`/api/${path}`, this.baseUrl)\n\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value))\n }\n }\n }\n\n const headers: Record<string, string> = {\n \"x-api-key\": this.apiKey,\n Accept: \"application/json\",\n }\n\n const init: RequestInit = {\n method: options.method,\n headers,\n }\n\n if (options.body) {\n headers[\"Content-Type\"] = \"application/json\"\n init.body = JSON.stringify(options.body)\n }\n\n const response = await fetch(url.toString(), init)\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => \"Unknown error\")\n throw new Error(\n `Dokploy API error (${response.status} ${response.statusText}) on ${options.method} /${path}: ${errorText}`,\n )\n }\n\n const text = await response.text()\n if (!text) {\n return undefined as T\n }\n\n return JSON.parse(text) as T\n }\n}\n\nlet client: DokployClient | undefined\n\nexport function initializeDokployClient(baseUrl: string, apiKey: string): DokployClient {\n client = new DokployClient(baseUrl, apiKey)\n return client\n}\n\nexport function getDokployClient(): DokployClient {\n if (!client) {\n throw new Error(\n \"Dokploy client not initialized. Ensure DOKPLOY_URL and DOKPLOY_API_KEY environment variables are set.\",\n )\n }\n return client\n}\n","export const DB_TYPES = [\"postgres\", \"mysql\", \"mariadb\", \"mongo\", \"redis\"] as const\nexport type DatabaseType = (typeof DB_TYPES)[number]\n\nexport const DB_ID_FIELDS: Record<DatabaseType, string> = {\n postgres: \"postgresId\",\n mysql: \"mysqlId\",\n mariadb: \"mariadbId\",\n mongo: \"mongoId\",\n redis: \"redisId\",\n}\n\nexport type DokployProject = {\n projectId: string\n name: string\n description?: string\n createdAt?: string\n organizationId?: string\n environments?: DokployEnvironment[]\n}\n\nexport type DokployEnvironment = {\n environmentId: string\n name: string\n description?: string\n projectId: string\n createdAt?: string\n applications?: DokployApplication[]\n compose?: DokployCompose[]\n postgres?: DokployDatabase[]\n mysql?: DokployDatabase[]\n mariadb?: DokployDatabase[]\n mongo?: DokployDatabase[]\n redis?: DokployDatabase[]\n}\n\nexport type DokployApplication = {\n applicationId: string\n name: string\n appName: string\n description?: string\n applicationStatus: string\n buildType?: string\n sourceType?: string\n dockerImage?: string\n repository?: string\n branch?: string\n environmentId: string\n createdAt?: string\n autoDeploy?: boolean\n env?: string\n domains?: DokployDomain[]\n}\n\nexport type DokployCompose = {\n composeId: string\n name: string\n appName: string\n description?: string\n composeFile?: string\n composeType?: string\n composeStatus: string\n sourceType?: string\n environmentId: string\n createdAt?: string\n}\n\nexport type DokployDeployment = {\n deploymentId: string\n title?: string\n description?: string\n status: string\n logPath?: string\n applicationId?: string\n composeId?: string\n serverId?: string\n createdAt?: string\n}\n\nexport type DokployDomain = {\n domainId: string\n host: string\n path?: string\n port?: number\n https: boolean\n certificateType?: string\n applicationId?: string\n composeId?: string\n serviceName?: string\n domainType?: string\n createdAt?: string\n}\n\nexport type DokployServer = {\n serverId: string\n name: string\n description?: string\n ipAddress: string\n port: number\n username: string\n sshKeyId: string\n serverType: string\n createdAt?: string\n}\n\nexport type DokployDatabase = {\n databaseId: string\n name: string\n appName: string\n description?: string\n databaseName?: string\n databaseUser?: string\n dockerImage?: string\n applicationStatus: string\n environmentId: string\n externalPort?: number\n createdAt?: string\n}\n\nexport type DokployBackup = {\n backupId: string\n schedule: string\n enabled?: boolean\n prefix: string\n destinationId: string\n database: string\n databaseType: string\n keepLatestCount?: number\n postgresId?: string\n mysqlId?: string\n mariadbId?: string\n mongoId?: string\n}\n\nexport type DokployContainer = {\n containerId: string\n name: string\n image: string\n state: string\n status: string\n ports?: string\n}\n\nexport type DokployMount = {\n mountId: string\n type: string\n hostPath?: string\n volumeName?: string\n mountPath: string\n applicationId?: string\n}\n\nexport type DokployPort = {\n portId: string\n publishedPort: number\n targetPort: number\n protocol?: string\n publishMode?: string\n applicationId?: string\n}\n\nexport type DokployCertificate = {\n certificateId: string\n name: string\n certificateData?: string\n privateKey?: string\n autoRenew?: boolean\n}\n\nexport type DokploySecurity = {\n securityId: string\n username: string\n password: string\n applicationId?: string\n}\n","import type {\n DokployApplication,\n DokployBackup,\n DokployCompose,\n DokployContainer,\n DokployDatabase,\n DokployDeployment,\n DokployDomain,\n DokployEnvironment,\n DokployProject,\n DokployServer,\n} from \"../types\"\nimport { DB_TYPES } from \"../types\"\n\nfunction formatDate(dateStr?: string): string {\n if (!dateStr) return \"N/A\"\n try {\n return new Date(dateStr)\n .toISOString()\n .replace(\"T\", \" \")\n .replace(/\\.\\d+Z$/, \" UTC\")\n } catch {\n return dateStr\n }\n}\n\nfunction statusIcon(status: string): string {\n const s = status.toLowerCase()\n if (s === \"running\" || s === \"done\" || s === \"idle\") return \"[RUNNING]\"\n if (s === \"error\" || s === \"failed\") return \"[ERROR]\"\n if (s === \"stopped\") return \"[STOPPED]\"\n return `[${status.toUpperCase()}]`\n}\n\nfunction formatEnvironmentServices(env: DokployEnvironment): string {\n const lines: string[] = []\n\n if (env.applications?.length) {\n for (const app of env.applications) {\n lines.push(` - App: **${app.name}** ${statusIcon(app.applicationStatus)} (ID: ${app.applicationId})`)\n }\n }\n if (env.compose?.length) {\n for (const c of env.compose) {\n lines.push(` - Compose: **${c.name}** ${statusIcon(c.composeStatus)} (ID: ${c.composeId})`)\n }\n }\n for (const dbType of DB_TYPES) {\n const dbs = env[dbType]\n if (dbs?.length) {\n for (const db of dbs) {\n lines.push(` - ${dbType}: **${db.name}** ${statusIcon(db.applicationStatus)} (ID: ${db.databaseId})`)\n }\n }\n }\n\n return lines.join(\"\\n\")\n}\n\nexport function formatProject(project: DokployProject): string {\n const envs = project.environments ?? []\n const envLines = envs.map((env) => {\n const services = formatEnvironmentServices(env)\n const header = ` - **${env.name}** (ID: ${env.environmentId})`\n return services ? `${header}\\n${services}` : header\n })\n\n return `- **${project.name}** (ID: ${project.projectId})\n Description: ${project.description || \"None\"}\n Environments: ${envs.length}${envLines.length ? \"\\n\" + envLines.join(\"\\n\") : \"\"}\n Created: ${formatDate(project.createdAt)}`\n}\n\nexport function formatProjectList(projects: DokployProject[]): string {\n if (projects.length === 0) return \"No projects found.\"\n return `# Projects (${projects.length})\\n\\n${projects.map(formatProject).join(\"\\n\\n\")}`\n}\n\nexport function formatEnvironment(env: DokployEnvironment): string {\n const services = formatEnvironmentServices(env)\n return `- **${env.name}** (ID: ${env.environmentId})\n Description: ${env.description || \"None\"}\n Project: ${env.projectId}\n Created: ${formatDate(env.createdAt)}${services ? \"\\n\" + services : \"\"}`\n}\n\nexport function formatEnvironmentList(envs: DokployEnvironment[]): string {\n if (envs.length === 0) return \"No environments found.\"\n return `# Environments (${envs.length})\\n\\n${envs.map(formatEnvironment).join(\"\\n\\n\")}`\n}\n\nexport function formatApplication(app: DokployApplication): string {\n return `- **${app.name}** ${statusIcon(app.applicationStatus)} (ID: ${app.applicationId})\n App Name: ${app.appName}\n Description: ${app.description || \"None\"}\n Build Type: ${app.buildType || \"N/A\"}\n Source: ${app.sourceType || \"N/A\"}\n Auto Deploy: ${app.autoDeploy ?? \"N/A\"}\n Created: ${formatDate(app.createdAt)}`\n}\n\nexport function formatDeployment(dep: DokployDeployment): string {\n return `- ${statusIcon(dep.status)} **${dep.title || \"Deployment\"}** (ID: ${dep.deploymentId})\n Status: ${dep.status}\n Description: ${dep.description || \"None\"}\n Created: ${formatDate(dep.createdAt)}`\n}\n\nexport function formatDeploymentList(deployments: DokployDeployment[]): string {\n if (deployments.length === 0) return \"No deployments found.\"\n return `# Deployments (${deployments.length})\\n\\n${deployments.map(formatDeployment).join(\"\\n\\n\")}`\n}\n\nexport function formatCompose(compose: DokployCompose): string {\n return `- **${compose.name}** ${statusIcon(compose.composeStatus)} (ID: ${compose.composeId})\n App Name: ${compose.appName}\n Description: ${compose.description || \"None\"}\n Type: ${compose.composeType || \"N/A\"}\n Source: ${compose.sourceType || \"N/A\"}\n Created: ${formatDate(compose.createdAt)}`\n}\n\nexport function formatDomain(domain: DokployDomain): string {\n const protocol = domain.https ? \"https\" : \"http\"\n return `- **${protocol}://${domain.host}${domain.path || \"\"}** (ID: ${domain.domainId})\n Port: ${domain.port ?? \"default\"}\n HTTPS: ${domain.https}\n Certificate: ${domain.certificateType || \"None\"}\n Type: ${domain.domainType || \"N/A\"}\n Service: ${domain.serviceName || \"N/A\"}`\n}\n\nexport function formatDomainList(domains: DokployDomain[]): string {\n if (domains.length === 0) return \"No domains found.\"\n return `# Domains (${domains.length})\\n\\n${domains.map(formatDomain).join(\"\\n\\n\")}`\n}\n\nexport function formatServer(server: DokployServer): string {\n return `- **${server.name}** (ID: ${server.serverId})\n Description: ${server.description || \"None\"}\n IP: ${server.ipAddress}:${server.port}\n User: ${server.username}\n Type: ${server.serverType}\n Created: ${formatDate(server.createdAt)}`\n}\n\nexport function formatServerList(servers: DokployServer[]): string {\n if (servers.length === 0) return \"No servers found.\"\n return `# Servers (${servers.length})\\n\\n${servers.map(formatServer).join(\"\\n\\n\")}`\n}\n\nexport function formatDatabase(db: DokployDatabase, dbType: string): string {\n return `- **${db.name}** ${statusIcon(db.applicationStatus)} (ID: ${db.databaseId})\n Type: ${dbType}\n App Name: ${db.appName}\n Description: ${db.description || \"None\"}\n Database Name: ${db.databaseName || \"N/A\"}\n Image: ${db.dockerImage || \"default\"}\n External Port: ${db.externalPort ?? \"None\"}\n Created: ${formatDate(db.createdAt)}`\n}\n\nexport function formatContainer(container: DokployContainer): string {\n return `- **${container.name}** [${container.state?.toUpperCase() || \"UNKNOWN\"}]\n ID: ${container.containerId}\n Image: ${container.image}\n Status: ${container.status}\n Ports: ${container.ports || \"None\"}`\n}\n\nexport function formatContainerList(containers: DokployContainer[]): string {\n if (containers.length === 0) return \"No containers found.\"\n return `# Containers (${containers.length})\\n\\n${containers.map(formatContainer).join(\"\\n\\n\")}`\n}\n\nexport function formatBackup(backup: DokployBackup): string {\n return `- **${backup.prefix}** (ID: ${backup.backupId})\n Schedule: ${backup.schedule}\n Enabled: ${backup.enabled ?? true}\n Database: ${backup.database}\n Type: ${backup.databaseType}\n Destination: ${backup.destinationId}\n Keep Latest: ${backup.keepLatestCount ?? \"unlimited\"}`\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployApplication } from \"../types\"\nimport { formatApplication } from \"../utils/formatters\"\n\nconst ACTIONS = [\n \"create\",\n \"get\",\n \"update\",\n \"move\",\n \"deploy\",\n \"start\",\n \"stop\",\n \"delete\",\n \"markRunning\",\n \"refreshToken\",\n \"cleanQueues\",\n \"killBuild\",\n \"cancelDeployment\",\n \"reload\",\n \"saveEnvironment\",\n \"saveBuildType\",\n \"traefikConfig\",\n \"readMonitoring\",\n] as const\n\nconst SIMPLE_ACTIONS = [\n \"start\",\n \"stop\",\n \"delete\",\n \"markRunning\",\n \"refreshToken\",\n \"cleanQueues\",\n \"killBuild\",\n \"cancelDeployment\",\n] as const\ntype SimpleAction = (typeof SIMPLE_ACTIONS)[number]\n\nexport function registerApplicationTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_application\",\n description:\n \"Manage applications. create: name+environmentId. get: applicationId. update: applicationId+fields. move: applicationId+targetEnvironmentId. deploy: applicationId, redeploy?. start/stop/delete/markRunning/refreshToken/cleanQueues/killBuild/cancelDeployment: applicationId. reload: applicationId+appName. saveEnvironment: applicationId+env. saveBuildType: applicationId+buildType. traefikConfig: applicationId, traefikConfig? (omit to read). readMonitoring: appName.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n applicationId: z.string().optional(),\n name: z.string().optional(),\n environmentId: z.string().optional(),\n description: z.string().optional(),\n serverId: z.string().optional(),\n targetEnvironmentId: z.string().optional(),\n redeploy: z.boolean().optional(),\n title: z.string().optional(),\n deployDescription: z.string().optional().describe(\"Deploy description (maps to API description field)\"),\n dockerImage: z.string().optional(),\n command: z.string().optional(),\n memoryLimit: z.number().optional(),\n cpuLimit: z.number().optional(),\n replicas: z.number().optional(),\n autoDeploy: z.boolean().optional(),\n appName: z.string().optional(),\n env: z.string().optional().describe(\"KEY=VALUE pairs, newline separated\"),\n buildArgs: z.string().optional(),\n createEnvFile: z.boolean().optional(),\n buildType: z.string().optional(),\n dockerfile: z.string().optional(),\n dockerContextPath: z.string().optional(),\n dockerBuildStage: z.string().optional(),\n publishDirectory: z.string().optional(),\n traefikConfig: z.string().optional().describe(\"New config content (omit to read current)\"),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const app = await client.post<DokployApplication>(\"application.create\", {\n name: args.name!,\n environmentId: args.environmentId!,\n ...(args.description && { description: args.description }),\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Application Created\\n\\n${formatApplication(app)}`\n }\n case \"get\": {\n const app = await client.get<DokployApplication>(\"application.one\", {\n applicationId: args.applicationId!,\n })\n return `# Application Details\\n\\n${formatApplication(app)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = { applicationId: args.applicationId! }\n const updateFields = [\n \"name\",\n \"description\",\n \"dockerImage\",\n \"command\",\n \"memoryLimit\",\n \"cpuLimit\",\n \"replicas\",\n \"autoDeploy\",\n ] as const\n for (const key of updateFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(\"application.update\", body)\n return `Application ${args.applicationId} updated.`\n }\n case \"move\": {\n await client.post(\"application.move\", {\n applicationId: args.applicationId!,\n targetEnvironmentId: args.targetEnvironmentId!,\n })\n return `Application ${args.applicationId} moved to environment ${args.targetEnvironmentId}.`\n }\n case \"deploy\": {\n const endpoint = args.redeploy ? \"application.redeploy\" : \"application.deploy\"\n await client.post(endpoint, {\n applicationId: args.applicationId!,\n ...(args.title && { title: args.title }),\n ...(args.deployDescription && { description: args.deployDescription }),\n })\n return `${args.redeploy ? \"Redeployment\" : \"Deployment\"} triggered for application ${args.applicationId}.`\n }\n case \"start\":\n case \"stop\":\n case \"delete\":\n case \"markRunning\":\n case \"refreshToken\":\n case \"cleanQueues\":\n case \"killBuild\":\n case \"cancelDeployment\": {\n await client.post(`application.${args.action satisfies SimpleAction}`, {\n applicationId: args.applicationId!,\n })\n return `Application ${args.applicationId}: ${args.action} completed.`\n }\n case \"reload\": {\n await client.post(\"application.reload\", {\n applicationId: args.applicationId!,\n appName: args.appName!,\n })\n return `Application ${args.applicationId} reloaded.`\n }\n case \"saveEnvironment\": {\n await client.post(\"application.saveEnvironment\", {\n applicationId: args.applicationId!,\n createEnvFile: args.createEnvFile ?? false,\n ...(args.env !== undefined && { env: args.env }),\n ...(args.buildArgs !== undefined && { buildArgs: args.buildArgs }),\n })\n return `Environment saved for application ${args.applicationId}.`\n }\n case \"saveBuildType\": {\n await client.post(\"application.saveBuildType\", {\n applicationId: args.applicationId!,\n buildType: args.buildType!,\n dockerContextPath: args.dockerContextPath || \".\",\n dockerBuildStage: args.dockerBuildStage || \"\",\n ...(args.dockerfile && { dockerfile: args.dockerfile }),\n ...(args.publishDirectory && { publishDirectory: args.publishDirectory }),\n })\n return `Build type set to \"${args.buildType}\" for application ${args.applicationId}.`\n }\n case \"traefikConfig\": {\n if (args.traefikConfig) {\n await client.post(\"application.updateTraefikConfig\", {\n applicationId: args.applicationId!,\n traefikConfig: args.traefikConfig,\n })\n return `Traefik config updated for application ${args.applicationId}.`\n }\n const config = await client.get<string>(\"application.readTraefikConfig\", {\n applicationId: args.applicationId!,\n })\n return `# Traefik Config\\n\\n\\`\\`\\`yaml\\n${config}\\n\\`\\`\\``\n }\n case \"readMonitoring\": {\n const data = await client.get<unknown>(\"application.readAppMonitoring\", { appName: args.appName! })\n return `# Monitoring: ${args.appName}\\n\\n\\`\\`\\`json\\n${JSON.stringify(data, null, 2)}\\n\\`\\`\\``\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployBackup } from \"../types\"\nimport { formatBackup } from \"../utils/formatters\"\n\nconst ACTIONS = [\"create\", \"get\", \"update\", \"remove\", \"listFiles\", \"manualBackup\"] as const\n\nexport function registerBackupTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_backup\",\n description:\n \"Manage backups. create: schedule+prefix+destinationId+database+databaseType. get: backupId. update: backupId+fields. remove: backupId. listFiles: destinationId. manualBackup: backupId+backupType.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n backupId: z.string().optional(),\n schedule: z.string().optional().describe(\"Cron expression\"),\n prefix: z.string().optional(),\n destinationId: z.string().optional(),\n database: z.string().optional(),\n databaseType: z.string().optional().describe(\"postgres, mysql, mariadb, or mongo\"),\n serviceName: z.string().optional(),\n enabled: z.boolean().optional(),\n keepLatestCount: z.number().optional(),\n postgresId: z.string().optional(),\n mysqlId: z.string().optional(),\n mariadbId: z.string().optional(),\n mongoId: z.string().optional(),\n composeId: z.string().optional(),\n backupType: z.enum([\"postgres\", \"mysql\", \"mariadb\", \"mongo\", \"compose\"]).optional(),\n search: z.string().optional(),\n serverId: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const body: Record<string, unknown> = {}\n const fields = [\n \"schedule\",\n \"prefix\",\n \"destinationId\",\n \"database\",\n \"databaseType\",\n \"enabled\",\n \"keepLatestCount\",\n \"postgresId\",\n \"mysqlId\",\n \"mariadbId\",\n \"mongoId\",\n \"composeId\",\n \"serviceName\",\n ] as const\n for (const key of fields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n const backup = await client.post<DokployBackup>(\"backup.create\", body)\n return `# Backup Created\\n\\n${formatBackup(backup)}`\n }\n case \"get\": {\n const backup = await client.get<DokployBackup>(\"backup.one\", { backupId: args.backupId! })\n return `# Backup Details\\n\\n${formatBackup(backup)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = {}\n const fields = [\n \"backupId\",\n \"schedule\",\n \"prefix\",\n \"destinationId\",\n \"database\",\n \"serviceName\",\n \"databaseType\",\n \"enabled\",\n \"keepLatestCount\",\n ] as const\n for (const key of fields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(\"backup.update\", body)\n return `Backup ${args.backupId} updated.`\n }\n case \"remove\": {\n await client.post(\"backup.remove\", { backupId: args.backupId! })\n return `Backup ${args.backupId} removed.`\n }\n case \"listFiles\": {\n const files = await client.get<unknown>(\"backup.listBackupFiles\", {\n destinationId: args.destinationId!,\n ...(args.search && { search: args.search }),\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Backup Files\\n\\n\\`\\`\\`json\\n${JSON.stringify(files, null, 2)}\\n\\`\\`\\``\n }\n case \"manualBackup\": {\n const endpointMap: Record<string, string> = {\n postgres: \"backup.manualBackupPostgres\",\n mysql: \"backup.manualBackupMySql\",\n mariadb: \"backup.manualBackupMariadb\",\n mongo: \"backup.manualBackupMongo\",\n compose: \"backup.manualBackupCompose\",\n }\n const endpoint = endpointMap[args.backupType!]\n await client.post(endpoint, { backupId: args.backupId! })\n return `Manual ${args.backupType} backup triggered for backup config ${args.backupId}.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployCompose } from \"../types\"\nimport { formatCompose } from \"../utils/formatters\"\n\nconst ACTIONS = [\n \"create\",\n \"get\",\n \"update\",\n \"delete\",\n \"deploy\",\n \"start\",\n \"stop\",\n \"move\",\n \"loadServices\",\n \"loadMounts\",\n \"getDefaultCommand\",\n \"cancelDeployment\",\n \"cleanQueues\",\n \"killBuild\",\n \"refreshToken\",\n] as const\n\nexport function registerComposeTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_compose\",\n description:\n \"Manage Docker Compose services. create: name+environmentId. get/delete/start/stop/getDefaultCommand: composeId. update: composeId+fields. deploy: composeId, redeploy?. move: composeId+targetEnvironmentId. loadServices: composeId. loadMounts: composeId+serviceName. cancelDeployment/cleanQueues/killBuild/refreshToken: composeId.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n composeId: z.string().optional(),\n name: z.string().optional(),\n environmentId: z.string().optional(),\n description: z.string().optional(),\n composeType: z.string().optional().describe(\"docker-compose or stack\"),\n composeFile: z.string().optional(),\n serverId: z.string().optional(),\n env: z.string().optional(),\n command: z.string().optional(),\n deleteVolumes: z.boolean().optional(),\n redeploy: z.boolean().optional(),\n title: z.string().optional(),\n deployDescription: z.string().optional(),\n targetEnvironmentId: z.string().optional(),\n type: z.string().optional(),\n serviceName: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const compose = await client.post<DokployCompose>(\"compose.create\", {\n name: args.name!,\n environmentId: args.environmentId!,\n ...(args.description && { description: args.description }),\n ...(args.composeType && { composeType: args.composeType }),\n ...(args.composeFile && { composeFile: args.composeFile }),\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Compose Created\\n\\n${formatCompose(compose)}`\n }\n case \"get\": {\n const compose = await client.get<DokployCompose>(\"compose.one\", { composeId: args.composeId! })\n return `# Compose Details\\n\\n${formatCompose(compose)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = { composeId: args.composeId! }\n const updateFields = [\"name\", \"description\", \"composeFile\", \"env\", \"command\"] as const\n for (const key of updateFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(\"compose.update\", body)\n return `Compose ${args.composeId} updated.`\n }\n case \"delete\": {\n await client.post(\"compose.delete\", {\n composeId: args.composeId!,\n deleteVolumes: args.deleteVolumes ?? false,\n })\n return `Compose ${args.composeId} deleted.`\n }\n case \"deploy\": {\n const endpoint = args.redeploy ? \"compose.redeploy\" : \"compose.deploy\"\n await client.post(endpoint, {\n composeId: args.composeId!,\n ...(args.title && { title: args.title }),\n ...(args.deployDescription && { description: args.deployDescription }),\n })\n return `${args.redeploy ? \"Redeployment\" : \"Deployment\"} triggered for compose ${args.composeId}.`\n }\n case \"start\":\n case \"stop\": {\n await client.post(`compose.${args.action}`, { composeId: args.composeId! })\n return `Compose ${args.composeId}: ${args.action} completed.`\n }\n case \"move\": {\n await client.post(\"compose.move\", {\n composeId: args.composeId!,\n targetEnvironmentId: args.targetEnvironmentId!,\n })\n return `Compose ${args.composeId} moved to environment ${args.targetEnvironmentId}.`\n }\n case \"loadServices\": {\n const services = await client.get<unknown>(\"compose.loadServices\", {\n composeId: args.composeId!,\n ...(args.type && { type: args.type }),\n })\n return `# Compose Services\\n\\n\\`\\`\\`json\\n${JSON.stringify(services, null, 2)}\\n\\`\\`\\``\n }\n case \"loadMounts\": {\n const mounts = await client.get<unknown>(\"compose.loadMountsByService\", {\n composeId: args.composeId!,\n serviceName: args.serviceName!,\n })\n return `# Mounts: ${args.serviceName}\\n\\n\\`\\`\\`json\\n${JSON.stringify(mounts, null, 2)}\\n\\`\\`\\``\n }\n case \"getDefaultCommand\": {\n const command = await client.get<string>(\"compose.getDefaultCommand\", { composeId: args.composeId! })\n return `Default command: ${command}`\n }\n case \"cancelDeployment\":\n case \"cleanQueues\":\n case \"killBuild\":\n case \"refreshToken\": {\n await client.post(`compose.${args.action}`, { composeId: args.composeId! })\n return `Compose ${args.composeId}: ${args.action} completed.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DatabaseType, DokployDatabase } from \"../types\"\nimport { DB_ID_FIELDS, DB_TYPES } from \"../types\"\nimport { formatDatabase } from \"../utils/formatters\"\n\nconst dbTypeSchema = z.enum(DB_TYPES).describe(\"postgres, mysql, mariadb, mongo, or redis\")\n\nfunction dbIdField(dbType: DatabaseType): string {\n return DB_ID_FIELDS[dbType]\n}\n\nfunction dbBody(dbType: DatabaseType, databaseId: string): Record<string, unknown> {\n return { [dbIdField(dbType)]: databaseId }\n}\n\nconst ACTIONS = [\n \"create\",\n \"get\",\n \"update\",\n \"move\",\n \"start\",\n \"stop\",\n \"deploy\",\n \"rebuild\",\n \"remove\",\n \"reload\",\n \"changeStatus\",\n \"saveEnvironment\",\n \"saveExternalPort\",\n] as const\n\nconst SIMPLE_ACTIONS = [\"start\", \"stop\", \"deploy\", \"rebuild\", \"remove\"] as const\ntype SimpleAction = (typeof SIMPLE_ACTIONS)[number]\n\nexport function registerDatabaseTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_database\",\n description:\n \"Manage databases (postgres/mysql/mariadb/mongo/redis). create: dbType+name+environmentId+databasePassword. get: dbType+databaseId. update: dbType+databaseId+fields. move: dbType+databaseId+targetEnvironmentId. start/stop/deploy/rebuild/remove: dbType+databaseId. reload: dbType+databaseId+appName. changeStatus: dbType+databaseId+applicationStatus. saveEnvironment: dbType+databaseId+env. saveExternalPort: dbType+databaseId+externalPort.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n dbType: dbTypeSchema,\n databaseId: z.string().optional(),\n name: z.string().optional(),\n environmentId: z.string().optional(),\n databaseName: z.string().optional(),\n databaseUser: z.string().optional(),\n databasePassword: z.string().optional(),\n databaseRootPassword: z.string().optional().describe(\"mysql/mariadb only\"),\n dockerImage: z.string().optional(),\n description: z.string().optional(),\n serverId: z.string().optional(),\n command: z.string().optional(),\n memoryLimit: z.number().optional(),\n cpuLimit: z.number().optional(),\n targetEnvironmentId: z.string().optional(),\n appName: z.string().optional(),\n applicationStatus: z.string().optional().describe(\"idle, running, done, or error\"),\n env: z.string().optional().describe(\"KEY=VALUE, newline separated\"),\n externalPort: z.number().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n const { dbType } = args\n\n switch (args.action) {\n case \"create\": {\n const body: Record<string, unknown> = {}\n const createFields = [\n \"name\",\n \"environmentId\",\n \"databaseName\",\n \"databaseUser\",\n \"databasePassword\",\n \"databaseRootPassword\",\n \"dockerImage\",\n \"description\",\n \"serverId\",\n ] as const\n for (const key of createFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n const db = await client.post<DokployDatabase>(`${dbType}.create`, body)\n return `# Database Created\\n\\n${formatDatabase(db, dbType)}`\n }\n case \"get\": {\n const db = await client.get<DokployDatabase>(`${dbType}.one`, {\n [dbIdField(dbType)]: args.databaseId!,\n })\n return `# Database Details\\n\\n${formatDatabase(db, dbType)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = { [dbIdField(dbType)]: args.databaseId! }\n const updateFields = [\"name\", \"description\", \"dockerImage\", \"command\", \"memoryLimit\", \"cpuLimit\"] as const\n for (const key of updateFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(`${dbType}.update`, body)\n return `Database ${args.databaseId} (${dbType}) updated.`\n }\n case \"move\": {\n await client.post(`${dbType}.move`, {\n ...dbBody(dbType, args.databaseId!),\n targetEnvironmentId: args.targetEnvironmentId!,\n })\n return `Database ${args.databaseId} moved to environment ${args.targetEnvironmentId}.`\n }\n case \"start\":\n case \"stop\":\n case \"deploy\":\n case \"rebuild\":\n case \"remove\": {\n await client.post(`${dbType}.${args.action satisfies SimpleAction}`, dbBody(dbType, args.databaseId!))\n return `Database ${args.databaseId} (${dbType}): ${args.action} completed.`\n }\n case \"reload\": {\n await client.post(`${dbType}.reload`, {\n ...dbBody(dbType, args.databaseId!),\n appName: args.appName!,\n })\n return `Database ${args.databaseId} (${dbType}) reloaded.`\n }\n case \"changeStatus\": {\n await client.post(`${dbType}.changeStatus`, {\n ...dbBody(dbType, args.databaseId!),\n applicationStatus: args.applicationStatus!,\n })\n return `Database ${args.databaseId} status changed to ${args.applicationStatus}.`\n }\n case \"saveEnvironment\": {\n await client.post(`${dbType}.saveEnvironment`, {\n ...dbBody(dbType, args.databaseId!),\n ...(args.env !== undefined && { env: args.env }),\n })\n return `Environment saved for database ${args.databaseId}.`\n }\n case \"saveExternalPort\": {\n await client.post(`${dbType}.saveExternalPort`, {\n ...dbBody(dbType, args.databaseId!),\n externalPort: args.externalPort!,\n })\n return `External port set to ${args.externalPort} for database ${args.databaseId}.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployDeployment } from \"../types\"\nimport { formatDeploymentList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"list\", \"killProcess\"] as const\n\nexport function registerDeploymentTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_deployment\",\n description:\n \"Manage deployments. list: applicationId|composeId|serverId|type+id. killProcess: deploymentId. Note: no log retrieval API exists; deployment data includes logPath for reference only.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n deploymentId: z.string().optional(),\n applicationId: z.string().optional(),\n composeId: z.string().optional(),\n serverId: z.string().optional(),\n type: z.string().optional().describe(\"Resource type (application, compose, postgres, mysql, etc.)\"),\n id: z.string().optional().describe(\"Resource ID (used with type)\"),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"list\": {\n let deployments: DokployDeployment[]\n\n if (args.applicationId) {\n deployments = await client.get<DokployDeployment[]>(\"deployment.all\", {\n applicationId: args.applicationId,\n })\n } else if (args.composeId) {\n deployments = await client.get<DokployDeployment[]>(\"deployment.allByCompose\", {\n composeId: args.composeId,\n })\n } else if (args.serverId) {\n deployments = await client.get<DokployDeployment[]>(\"deployment.allByServer\", {\n serverId: args.serverId,\n })\n } else if (args.type && args.id) {\n deployments = await client.get<DokployDeployment[]>(\"deployment.allByType\", {\n type: args.type,\n id: args.id,\n })\n } else {\n throw new Error(\"Provide applicationId, composeId, serverId, or type+id\")\n }\n\n return formatDeploymentList(deployments)\n }\n case \"killProcess\": {\n await client.post(\"deployment.killProcess\", { deploymentId: args.deploymentId! })\n return `Deployment ${args.deploymentId} killed.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployContainer } from \"../types\"\nimport { formatContainerList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"getContainers\", \"restartContainer\", \"getConfig\", \"findContainers\"] as const\n\nexport function registerDockerTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_docker\",\n description:\n \"Docker container management. getContainers: list all containers, serverId?. restartContainer: containerId. getConfig: containerId (required, not appName), serverId?. findContainers: appName+method(match|label|stack|service), serverId?.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n containerId: z.string().optional(),\n serverId: z.string().optional(),\n appName: z.string().optional(),\n method: z.enum([\"match\", \"label\", \"stack\", \"service\"]).optional(),\n appType: z.string().optional().describe(\"App type filter (match method only)\"),\n type: z.string().optional().describe(\"Label type (label method only)\"),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"getContainers\": {\n const containers = await client.get<DokployContainer[]>(\"docker.getContainers\", {\n ...(args.serverId && { serverId: args.serverId }),\n })\n return formatContainerList(containers)\n }\n case \"restartContainer\": {\n await client.post(\"docker.restartContainer\", { containerId: args.containerId! })\n return `Container ${args.containerId} restarted.`\n }\n case \"getConfig\": {\n const config = await client.get<unknown>(\"docker.getConfig\", {\n containerId: args.containerId!,\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Container Config\\n\\n\\`\\`\\`json\\n${JSON.stringify(config, null, 2)}\\n\\`\\`\\``\n }\n case \"findContainers\": {\n if (!args.method) throw new Error(\"findContainers requires method (match|label|stack|service)\")\n const endpointMap: Record<string, string> = {\n match: \"docker.getContainersByAppNameMatch\",\n label: \"docker.getContainersByAppLabel\",\n stack: \"docker.getStackContainersByAppName\",\n service: \"docker.getServiceContainersByAppName\",\n }\n const method = args.method!\n const params: Record<string, string> = { appName: args.appName! }\n if (args.serverId) params.serverId = args.serverId\n if (args.appType && method === \"match\") params.appType = args.appType\n if (args.type && method === \"label\") params.type = args.type\n const containers = await client.get<DokployContainer[]>(endpointMap[method], params)\n return formatContainerList(containers)\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployDomain } from \"../types\"\nimport { formatDomain, formatDomainList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"create\", \"list\", \"get\", \"update\", \"delete\", \"generate\", \"canGenerateTraefikMe\", \"validate\"] as const\n\nexport function registerDomainTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_domain\",\n description:\n \"Manage domains. create: host+applicationId|composeId. list: applicationId|composeId. get: domainId. update: domainId+host. delete: domainId. generate: appName. canGenerateTraefikMe: serverId?. validate: domain.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n domainId: z.string().optional(),\n host: z.string().optional(),\n applicationId: z.string().optional(),\n composeId: z.string().optional(),\n serviceName: z.string().optional(),\n path: z.string().optional(),\n port: z.number().optional(),\n https: z.boolean().optional(),\n certificateType: z.string().optional(),\n domainType: z.string().optional(),\n appName: z.string().optional(),\n serverId: z.string().optional(),\n domain: z.string().optional(),\n serverIp: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const body: Record<string, unknown> = { host: args.host! }\n const optionalFields = [\n \"applicationId\",\n \"composeId\",\n \"serviceName\",\n \"path\",\n \"port\",\n \"https\",\n \"certificateType\",\n \"domainType\",\n ] as const\n for (const key of optionalFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n const domain = await client.post<DokployDomain>(\"domain.create\", body)\n return `# Domain Created\\n\\n${formatDomain(domain)}`\n }\n case \"list\": {\n let domains: DokployDomain[]\n if (args.applicationId) {\n domains = await client.get<DokployDomain[]>(\"domain.byApplicationId\", {\n applicationId: args.applicationId,\n })\n } else if (args.composeId) {\n domains = await client.get<DokployDomain[]>(\"domain.byComposeId\", { composeId: args.composeId })\n } else {\n throw new Error(\"Provide applicationId or composeId\")\n }\n return formatDomainList(domains)\n }\n case \"get\": {\n const domain = await client.get<DokployDomain>(\"domain.one\", { domainId: args.domainId! })\n return `# Domain Details\\n\\n${formatDomain(domain)}`\n }\n case \"update\": {\n const body: Record<string, unknown> = { domainId: args.domainId!, host: args.host! }\n const optionalFields = [\"path\", \"port\", \"https\", \"certificateType\"] as const\n for (const key of optionalFields) {\n if (args[key] !== undefined) body[key] = args[key]\n }\n await client.post(\"domain.update\", body)\n return `Domain ${args.domainId} updated.`\n }\n case \"delete\": {\n await client.post(\"domain.delete\", { domainId: args.domainId! })\n return `Domain ${args.domainId} deleted.`\n }\n case \"generate\": {\n const result = await client.post<unknown>(\"domain.generateDomain\", {\n appName: args.appName!,\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `# Generated Domain\\n\\n\\`\\`\\`json\\n${JSON.stringify(result, null, 2)}\\n\\`\\`\\``\n }\n case \"canGenerateTraefikMe\": {\n const result = await client.get<boolean>(\"domain.canGenerateTraefikMeDomains\", {\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `Traefik.me: ${result ? \"Available\" : \"Not available\"}`\n }\n case \"validate\": {\n const result = await client.post<unknown>(\"domain.validateDomain\", {\n domain: args.domain!,\n ...(args.serverIp && { serverIp: args.serverIp }),\n })\n return `# DNS Validation: ${args.domain}\\n\\n\\`\\`\\`json\\n${JSON.stringify(result, null, 2)}\\n\\`\\`\\``\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployEnvironment } from \"../types\"\nimport { formatEnvironment, formatEnvironmentList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"create\", \"get\", \"list\", \"update\", \"remove\", \"duplicate\"] as const\n\nexport function registerEnvironmentTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_environment\",\n description:\n \"Manage project environments. create: projectId+name. get: environmentId. list: projectId. update: environmentId+fields. remove: environmentId. duplicate: environmentId+name.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n environmentId: z.string().optional(),\n projectId: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"create\": {\n const env = await client.post<DokployEnvironment>(\"environment.create\", {\n name: args.name!,\n projectId: args.projectId!,\n ...(args.description && { description: args.description }),\n })\n return `# Environment Created\\n\\n${formatEnvironment(env)}`\n }\n case \"get\": {\n const env = await client.get<DokployEnvironment>(\"environment.one\", { environmentId: args.environmentId! })\n return `# Environment Details\\n\\n${formatEnvironment(env)}`\n }\n case \"list\": {\n const envs = await client.get<DokployEnvironment[]>(\"environment.byProjectId\", {\n projectId: args.projectId!,\n })\n return formatEnvironmentList(envs)\n }\n case \"update\": {\n await client.post(\"environment.update\", {\n environmentId: args.environmentId!,\n ...(args.name && { name: args.name }),\n ...(args.description !== undefined && { description: args.description }),\n })\n return `Environment ${args.environmentId} updated.`\n }\n case \"remove\": {\n await client.post(\"environment.remove\", { environmentId: args.environmentId! })\n return `Environment ${args.environmentId} removed.`\n }\n case \"duplicate\": {\n await client.post(\"environment.duplicate\", {\n environmentId: args.environmentId!,\n name: args.name!,\n ...(args.description && { description: args.description }),\n })\n return `Environment duplicated as \"${args.name}\".`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployCertificate, DokployPort, DokploySecurity } from \"../types\"\n\nconst ACTIONS = [\n \"createPort\",\n \"deletePort\",\n \"createAuth\",\n \"deleteAuth\",\n \"listCerts\",\n \"getCert\",\n \"createCert\",\n \"removeCert\",\n] as const\n\nexport function registerInfrastructureTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_infrastructure\",\n description:\n \"Manage ports, auth, certs. createPort: applicationId+publishedPort+targetPort. deletePort: portId. createAuth: applicationId+username+password. deleteAuth: securityId. listCerts: all. getCert: certificateId. createCert: name+certificateData+privateKey+organizationId. removeCert: certificateId.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n applicationId: z.string().optional(),\n publishedPort: z.number().optional(),\n targetPort: z.number().optional(),\n protocol: z.string().optional(),\n publishMode: z.string().optional(),\n portId: z.string().optional(),\n username: z.string().optional(),\n password: z.string().optional(),\n securityId: z.string().optional(),\n certificateId: z.string().optional(),\n name: z.string().optional(),\n certificateData: z.string().optional().describe(\"PEM format\"),\n privateKey: z.string().optional().describe(\"PEM format\"),\n organizationId: z.string().optional(),\n autoRenew: z.boolean().optional(),\n serverId: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"createPort\": {\n const port = await client.post<DokployPort>(\"port.create\", {\n applicationId: args.applicationId!,\n publishedPort: args.publishedPort!,\n targetPort: args.targetPort!,\n ...(args.protocol && { protocol: args.protocol }),\n ...(args.publishMode && { publishMode: args.publishMode }),\n })\n return `Port mapping created: ${port.publishedPort} -> ${port.targetPort} (ID: ${port.portId})`\n }\n case \"deletePort\": {\n await client.post(\"port.delete\", { portId: args.portId! })\n return `Port mapping ${args.portId} deleted.`\n }\n case \"createAuth\": {\n const security = await client.post<DokploySecurity>(\"security.create\", {\n applicationId: args.applicationId!,\n username: args.username!,\n password: args.password!,\n })\n return `Basic auth created for application ${args.applicationId} (ID: ${security.securityId})`\n }\n case \"deleteAuth\": {\n await client.post(\"security.delete\", { securityId: args.securityId! })\n return `Security credentials ${args.securityId} deleted.`\n }\n case \"listCerts\": {\n const certs = await client.get<DokployCertificate[]>(\"certificates.all\")\n if (certs.length === 0) return \"No certificates found.\"\n const lines = certs.map(\n (c) => `- **${c.name}** (ID: ${c.certificateId}) | Auto-renew: ${c.autoRenew ?? \"N/A\"}`,\n )\n return `# Certificates (${certs.length})\\n\\n${lines.join(\"\\n\")}`\n }\n case \"getCert\": {\n const cert = await client.get<DokployCertificate>(\"certificates.one\", {\n certificateId: args.certificateId!,\n })\n return `# Certificate: ${cert.name}\\n\\n- ID: ${cert.certificateId}\\n- Auto-renew: ${cert.autoRenew ?? \"N/A\"}`\n }\n case \"createCert\": {\n const body: Record<string, unknown> = {\n name: args.name!,\n certificateData: args.certificateData!,\n privateKey: args.privateKey!,\n organizationId: args.organizationId!,\n }\n if (args.autoRenew !== undefined) body.autoRenew = args.autoRenew\n if (args.serverId) body.serverId = args.serverId\n const cert = await client.post<DokployCertificate>(\"certificates.create\", body)\n return `Certificate \"${cert.name}\" created (ID: ${cert.certificateId}).`\n }\n case \"removeCert\": {\n await client.post(\"certificates.remove\", { certificateId: args.certificateId! })\n return `Certificate ${args.certificateId} removed.`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployProject } from \"../types\"\nimport { formatProject, formatProjectList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"list\", \"get\", \"create\", \"update\", \"remove\", \"duplicate\"] as const\n\nexport function registerProjectTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_project\",\n description:\n \"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.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n projectId: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n sourceEnvironmentId: z.string().optional(),\n duplicateInSameProject: z.boolean().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"list\": {\n const projects = await client.get<DokployProject[]>(\"project.all\")\n return formatProjectList(projects)\n }\n case \"get\": {\n const project = await client.get<DokployProject>(\"project.one\", { projectId: args.projectId! })\n return `# Project Details\\n\\n${formatProject(project)}`\n }\n case \"create\": {\n const project = await client.post<DokployProject>(\"project.create\", {\n name: args.name!,\n ...(args.description && { description: args.description }),\n })\n return `# Project Created\\n\\n${formatProject(project)}`\n }\n case \"update\": {\n await client.post(\"project.update\", {\n projectId: args.projectId!,\n ...(args.name && { name: args.name }),\n ...(args.description !== undefined && { description: args.description }),\n })\n return `Project ${args.projectId} updated.`\n }\n case \"remove\": {\n await client.post(\"project.remove\", { projectId: args.projectId! })\n return `Project ${args.projectId} removed.`\n }\n case \"duplicate\": {\n await client.post(\"project.duplicate\", {\n sourceEnvironmentId: args.sourceEnvironmentId!,\n name: args.name!,\n ...(args.description && { description: args.description }),\n ...(args.duplicateInSameProject !== undefined && { duplicateInSameProject: args.duplicateInSameProject }),\n })\n return `Environment duplicated as \"${args.name}\".`\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\nimport type { DokployServer } from \"../types\"\nimport { formatServer, formatServerList } from \"../utils/formatters\"\n\nconst ACTIONS = [\"list\", \"get\", \"create\", \"update\", \"remove\", \"count\", \"publicIp\", \"getMetrics\"] as const\n\nexport function registerServerTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_server\",\n description:\n \"Manage servers. list/count/publicIp: no params. get: serverId. create: name+ipAddress+port+username+sshKeyId+serverType. update: serverId+fields. remove: serverId. getMetrics: url+token.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n serverId: z.string().optional(),\n name: z.string().optional(),\n ipAddress: z.string().optional(),\n port: z.number().optional(),\n username: z.string().optional(),\n sshKeyId: z.string().optional(),\n serverType: z.string().optional(),\n description: z.string().optional(),\n url: z.string().optional(),\n token: z.string().optional(),\n dataPoints: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"list\": {\n const servers = await client.get<DokployServer[]>(\"server.all\")\n return formatServerList(servers)\n }\n case \"get\": {\n const srv = await client.get<DokployServer>(\"server.one\", { serverId: args.serverId! })\n return `# Server Details\\n\\n${formatServer(srv)}`\n }\n case \"create\": {\n const srv = await client.post<DokployServer>(\"server.create\", {\n name: args.name!,\n ipAddress: args.ipAddress!,\n port: args.port!,\n username: args.username!,\n sshKeyId: args.sshKeyId!,\n serverType: args.serverType!,\n ...(args.description && { description: args.description }),\n })\n return `# Server Created\\n\\n${formatServer(srv)}`\n }\n case \"update\": {\n await client.post(\"server.update\", {\n serverId: args.serverId!,\n name: args.name!,\n ipAddress: args.ipAddress!,\n port: args.port!,\n username: args.username!,\n sshKeyId: args.sshKeyId!,\n serverType: args.serverType!,\n ...(args.description && { description: args.description }),\n })\n return `Server ${args.serverId} updated.`\n }\n case \"remove\": {\n await client.post(\"server.remove\", { serverId: args.serverId! })\n return `Server ${args.serverId} removed.`\n }\n case \"count\": {\n const count = await client.get<number>(\"server.count\")\n return `Total servers: ${count}`\n }\n case \"publicIp\": {\n const ip = await client.get<string>(\"server.publicIp\")\n return `Public IP: ${ip}`\n }\n case \"getMetrics\": {\n const metrics = await client.get<unknown>(\"server.getServerMetrics\", {\n url: args.url!,\n token: args.token!,\n ...(args.dataPoints && { dataPoints: args.dataPoints }),\n })\n return `# Server Metrics\\n\\n\\`\\`\\`json\\n${JSON.stringify(metrics, null, 2)}\\n\\`\\`\\``\n }\n }\n },\n })\n}\n","import type { FastMCP } from \"fastmcp\"\nimport { z } from \"zod\"\n\nimport { getDokployClient } from \"../client/dokploy-client\"\n\nconst ACTIONS = [\"health\", \"version\", \"ip\", \"clean\", \"reload\"] as const\n\nexport function registerSettingsTools(server: FastMCP) {\n server.addTool({\n name: \"dokploy_settings\",\n description:\n \"System settings. health: check status. version: get version. ip: get IP. clean: cleanType (all|images), serverId?. reload: reloadTarget (server|traefik), serverId?.\",\n parameters: z.object({\n action: z.enum(ACTIONS),\n cleanType: z.enum([\"all\", \"images\"]).optional(),\n reloadTarget: z.enum([\"server\", \"traefik\"]).optional(),\n serverId: z.string().optional(),\n }),\n execute: async (args) => {\n const client = getDokployClient()\n\n switch (args.action) {\n case \"health\": {\n const health = await client.get<unknown>(\"settings.health\")\n return `# Health\\n\\n\\`\\`\\`json\\n${JSON.stringify(health, null, 2)}\\n\\`\\`\\``\n }\n case \"version\": {\n const version = await client.get<string>(\"settings.getDokployVersion\")\n return `Dokploy version: ${version}`\n }\n case \"ip\": {\n const ip = await client.get<string>(\"settings.getIp\")\n return `Server IP: ${ip}`\n }\n case \"clean\": {\n const type = args.cleanType ?? \"all\"\n const endpoint = type === \"all\" ? \"settings.cleanAll\" : \"settings.cleanUnusedImages\"\n await client.post(endpoint, {\n ...(args.serverId && { serverId: args.serverId }),\n })\n return `Cleanup (${type}) completed.`\n }\n case \"reload\": {\n const target = args.reloadTarget ?? \"server\"\n if (target === \"server\") {\n await client.post(\"settings.reloadServer\")\n } else {\n await client.post(\"settings.reloadTraefik\", {\n ...(args.serverId && { serverId: args.serverId }),\n })\n }\n return `${target} reloaded.`\n }\n }\n },\n })\n}\n","import dotenv from \"dotenv\"\nimport { FastMCP } from \"fastmcp\"\n\nimport { initializeDokployClient } from \"./client/dokploy-client\"\nimport {\n registerApplicationTools,\n registerBackupTools,\n registerComposeTools,\n registerDatabaseTools,\n registerDeploymentTools,\n registerDockerTools,\n registerDomainTools,\n registerEnvironmentTools,\n registerInfrastructureTools,\n registerProjectTools,\n registerServerTools,\n registerSettingsTools,\n} from \"./tools\"\n\ndotenv.config()\n\ndeclare const __VERSION__: string\nconst VERSION = (typeof __VERSION__ !== \"undefined\" ? __VERSION__ : \"0.0.0-dev\") as `${number}.${number}.${number}`\n\nfunction setupDokployClient() {\n const baseUrl = process.env.DOKPLOY_URL\n const apiKey = process.env.DOKPLOY_API_KEY\n\n if (!baseUrl) {\n console.error(\"[Error] DOKPLOY_URL environment variable is required\")\n console.error(\"[Error] Set it to your Dokploy instance URL (e.g., https://dokploy.example.com)\")\n process.exit(1)\n }\n\n if (!apiKey) {\n console.error(\"[Error] DOKPLOY_API_KEY environment variable is required\")\n console.error(\"[Error] Generate an API key in Dokploy Settings > API Keys\")\n process.exit(1)\n }\n\n initializeDokployClient(baseUrl, apiKey)\n console.error(`[Setup] Dokploy client initialized for ${baseUrl}`)\n}\n\nconst server = new FastMCP({\n name: \"dokploy-mcp-server\",\n version: VERSION,\n instructions: `A comprehensive Dokploy MCP server for managing deployments, applications, databases, domains, and infrastructure.\n\nAvailable capabilities:\n- Projects: list, create, update, remove, duplicate\n- Applications: create, deploy, redeploy, start, stop, delete, configure builds, manage environment variables\n- Docker Compose: create, deploy, start, stop, manage services\n- Databases: unified tools for postgres, mysql, mariadb, mongo, redis (create, deploy, start, stop, manage)\n- Domains: create, configure, validate DNS, generate traefik.me domains\n- Docker: list containers, restart, inspect configuration\n- Servers: add, configure, monitor remote servers\n- Deployments: list, track, kill deployment processes\n- Backups: schedule, trigger manual backups, list backup files\n- Environments: create, duplicate, manage project environments\n- Infrastructure: ports, certificates, basic auth security\n- Settings: health checks, version info, cleanup, reload services`,\n})\n\nregisterProjectTools(server)\nregisterApplicationTools(server)\nregisterComposeTools(server)\nregisterDeploymentTools(server)\nregisterDockerTools(server)\nregisterDomainTools(server)\nregisterServerTools(server)\nregisterSettingsTools(server)\nregisterDatabaseTools(server)\nregisterBackupTools(server)\nregisterEnvironmentTools(server)\nregisterInfrastructureTools(server)\n\nasync function main() {\n try {\n setupDokployClient()\n\n const useHttp = process.env.TRANSPORT_TYPE === \"httpStream\" || process.env.TRANSPORT_TYPE === \"http\"\n const port = parseInt(process.env.PORT || \"3000\")\n const host = process.env.HOST || \"0.0.0.0\"\n\n if (useHttp) {\n console.error(`[Setup] Starting HTTP server on ${host}:${port}`)\n await server.start({\n transportType: \"httpStream\",\n httpStream: {\n port,\n host,\n endpoint: \"/mcp\",\n },\n })\n console.error(`[Setup] HTTP server ready at http://${host}:${port}/mcp`)\n } else {\n console.error(\"[Setup] Starting in stdio mode\")\n await server.start({\n transportType: \"stdio\",\n })\n }\n } catch (error) {\n console.error(\"[Error] Failed to start server:\", error)\n process.exit(1)\n }\n}\n\nprocess.on(\"SIGINT\", () => {\n console.error(\"[Shutdown] Shutting down Dokploy MCP Server...\")\n process.exit(0)\n})\n\nprocess.on(\"SIGTERM\", () => {\n console.error(\"[Shutdown] Shutting down Dokploy MCP Server...\")\n process.exit(0)\n})\n\nmain().catch(console.error)\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dokploy-mcp-server",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "A comprehensive Model Context Protocol (MCP) server for Dokploy - deploy apps, manage containers, databases, domains, and servers.",
5
5
  "keywords": [
6
6
  "mcp",