{"_id":"@bravos2k5/mcp","_rev":"2-6eaaa562375c2a7fdee0174be239f7d6","name":"@bravos2k5/mcp","dist-tags":{"latest":"0.29.1"},"versions":{"0.29.0":{"name":"@bravos2k5/mcp","version":"0.29.0","keywords":["modelcontextprotocol","mcp","dokploy"],"author":{"name":"Henrique Andrade","email":"developer@henriqueandrade.dev"},"license":"Apache-2.0","_id":"@bravos2k5/mcp@0.29.0","maintainers":[{"name":"bravos2k5","email":"baonq54@fpt.com"}],"homepage":"https://github.com/bravos2k5/mcp#readme","bugs":{"url":"https://github.com/bravos2k5/mcp/issues"},"bin":{"dokploy-mcp":"build/index.js"},"dist":{"shasum":"270a8f37850555c5141bbf8d7ae8bc558383fdbc","tarball":"https://registry.npmjs.org/@bravos2k5/mcp/-/mcp-0.29.0.tgz","fileCount":14,"integrity":"sha512-vz0wxEX+6RyNqhOoVeNkjXaoyKFwerrzza0CUDnOk1UJfdKQEtkEVmxlH5J2iB6tCb+VL4IlZuxo1V/iDpjbng==","signatures":[{"sig":"MEQCIBSmMRiY8krnM9FiL+7AhHdX4b0bfl2gJGcXncuTGAsyAiAeI32LcndHxsJmYTiPl22vKUdH5qlllRYMFMkKiwNXzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":337808},"main":"build/index.js","type":"module","_from":"file:bravos2k5-mcp-0.29.0.tgz","scripts":{"dev":"tsc --watch","lint":"biome check","test":"echo \"Error: no test spcified\" && exit 1","build":"pnpm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","format":"biome format --write","dev:sse":"pnpm run build && pnpm run start:sse","dev:http":"pnpm run build && pnpm run start:http","generate":"tsx scripts/generate-tools.ts","lint:fix":"biome check --fix","precommit":"biome check && pnpm run type-check","start:sse":"node --env-file=.env build/index.js --sse","start:http":"node --env-file=.env build/index.js --http","type-check":"tsc --noEmit","start:stdio":"node --env-file=.env build/index.js","format:check":"biome format","generate:all":"pnpm fetch-openapi && pnpm generate","fetch-openapi":"tsx scripts/fetch-openapi.ts"},"_npmUser":{"name":"bravos2k5","email":"baonq54@fpt.com"},"_resolved":"/tmp/f5d0307a066518ed23a0a3152af23d92/bravos2k5-mcp-0.29.0.tgz","_integrity":"sha512-vz0wxEX+6RyNqhOoVeNkjXaoyKFwerrzza0CUDnOk1UJfdKQEtkEVmxlH5J2iB6tCb+VL4IlZuxo1V/iDpjbng==","repository":{"url":"git+https://github.com/bravos2k5/mcp.git","type":"git"},"_npmVersion":"11.11.1","description":"MCP Server for Dokploy API","directories":{},"_nodeVersion":"24.13.1","dependencies":{"zod":"^3.25.28","hono":"^4.12.12","axios":"^1.9.0","@hono/node-server":"^1.19.13","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.8.3","@types/node":"^22.15.21","@biomejs/biome":"^2.4.10","json-schema-to-zod":"^2.8.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.29.0_1776771132628_0.7164419886397844","host":"s3://npm-registry-packages-npm-production"}},"0.29.1":{"name":"@bravos2k5/mcp","version":"0.29.1","description":"MCP Server for Dokploy API","main":"build/index.js","bin":{"dokploy-mcp":"build/index.js"},"repository":{"type":"git","url":"git+https://github.com/bravos2k5/mcp.git"},"keywords":["modelcontextprotocol","mcp","dokploy"],"author":{"name":"Henrique Andrade","email":"developer@henriqueandrade.dev"},"bugs":{"url":"https://github.com/bravos2k5/mcp/issues"},"homepage":"https://github.com/bravos2k5/mcp#readme","license":"Apache-2.0","type":"module","dependencies":{"@hono/node-server":"^1.19.13","@modelcontextprotocol/sdk":"^1.12.0","axios":"^1.9.0","hono":"^4.12.12","zod":"^3.25.28"},"devDependencies":{"@biomejs/biome":"^2.4.10","@types/node":"^22.15.21","json-schema-to-zod":"^2.8.1","tsx":"^4.21.0","typescript":"^5.8.3"},"scripts":{"build":"pnpm run clean && tsc && chmod 755 build/index.js","dev":"tsc --watch","start:stdio":"node --env-file=.env build/index.js","start:http":"node --env-file=.env build/index.js --http","start:sse":"node --env-file=.env build/index.js --sse","dev:http":"pnpm run build && pnpm run start:http","dev:sse":"pnpm run build && pnpm run start:sse","fetch-openapi":"tsx scripts/fetch-openapi.ts","generate":"tsx scripts/generate-tools.ts","generate:all":"pnpm fetch-openapi && pnpm generate","lint":"biome check","lint:fix":"biome check --fix","format":"biome format --write","format:check":"biome format","type-check":"tsc --noEmit","clean":"rm -rf build","precommit":"biome check && pnpm run type-check","test":"echo \"Error: no test spcified\" && exit 1"},"_id":"@bravos2k5/mcp@0.29.1","_integrity":"sha512-QScT1dF6KhvKmQNMg8JTKQTI5eM1qxaiU7YY5Tj1rJvrw8C82dwLMWMThBQQnqMZtoVqdS7axFnXf1QqAY232w==","_resolved":"/tmp/2f7034607264cf11810b4dfe082c50c4/bravos2k5-mcp-0.29.1.tgz","_from":"file:bravos2k5-mcp-0.29.1.tgz","_nodeVersion":"24.13.1","_npmVersion":"11.11.1","dist":{"integrity":"sha512-QScT1dF6KhvKmQNMg8JTKQTI5eM1qxaiU7YY5Tj1rJvrw8C82dwLMWMThBQQnqMZtoVqdS7axFnXf1QqAY232w==","shasum":"fbb71dc63f3632776ec93df0cefed8bb2fb4dc3d","tarball":"https://registry.npmjs.org/@bravos2k5/mcp/-/mcp-0.29.1.tgz","fileCount":14,"unpackedSize":341354,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDA6XgtN7X1q9LgHjJbahW5KTegzUyyLIvB1J1jm6ITdAiEA5RJRmz7/VtwBxufmHbl0bSWaxzpg9QdO1/qEYsxOI9g="}]},"_npmUser":{"name":"bravos2k5","email":"baonq54@fpt.com"},"directories":{},"maintainers":[{"name":"bravos2k5","email":"baonq54@fpt.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.29.1_1776796161673_0.024805126883714612"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-21T11:32:12.499Z","modified":"2026-04-21T18:29:21.915Z","0.29.0":"2026-04-21T11:32:12.791Z","0.29.1":"2026-04-21T18:29:21.817Z"},"bugs":{"url":"https://github.com/bravos2k5/mcp/issues"},"author":{"name":"Henrique Andrade","email":"developer@henriqueandrade.dev"},"license":"Apache-2.0","homepage":"https://github.com/bravos2k5/mcp#readme","keywords":["modelcontextprotocol","mcp","dokploy"],"repository":{"type":"git","url":"git+https://github.com/bravos2k5/mcp.git"},"description":"MCP Server for Dokploy API","maintainers":[{"name":"bravos2k5","email":"baonq54@fpt.com"}],"readme":"# Dokploy MCP Server\n\n[![npm version](https://img.shields.io/npm/v/@dokploy/mcp.svg)](https://www.npmjs.com/package/@dokploy/mcp) [<img alt=\"Install in VS Code (npx)\" src=\"https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Dokploy%20MCP&color=0098FF\">](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%7B%22name%22%3A%22dokploy-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40dokploy%2Fmcp%40latest%22%5D%7D)\n\nDokploy MCP Server exposes **all Dokploy API endpoints** as tools consumable via the Model Context Protocol (MCP). It allows MCP-compatible clients (e.g., AI models, other applications) to interact with your Dokploy server programmatically.\n\nWith **508 tools** across **49 categories**, this server provides complete coverage of the Dokploy API — from project and application management to databases, notifications, SSO, Docker, backups, and more.\n\n## Getting Started\n\n### Requirements\n\n- Node.js >= v18.0.0 (or Docker)\n- Cursor, VS Code, Claude Desktop, or another MCP Client\n- A running Dokploy server instance\n\n### Install in Cursor\n\nGo to: `Settings` -> `Cursor Settings` -> `MCP` -> `Add new global MCP server`\n\nAdd this to your Cursor `~/.cursor/mcp.json` file. You may also install in a specific project by creating `.cursor/mcp.json` in your project folder. See [Cursor MCP docs](https://docs.cursor.com/context/model-context-protocol) for more info.\n\n```json\n{\n  \"mcpServers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n<details>\n<summary>Alternative: Use Bun</summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"bunx\",\n      \"args\": [\"-y\", \"@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary>Alternative: Use Deno</summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"deno\",\n      \"args\": [\"run\", \"--allow-env\", \"--allow-net\", \"npm:@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n</details>\n\n### Install in Windsurf\n\nAdd this to your Windsurf MCP config file. See [Windsurf MCP docs](https://docs.windsurf.com/windsurf/mcp) for more info.\n\n```json\n{\n  \"mcpServers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Install in VS Code\n\n[<img alt=\"Install in VS Code (npx)\" src=\"https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Dokploy%20MCP&color=0098FF\">](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%7B%22name%22%3A%22dokploy-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40dokploy%2Fmcp%40latest%22%5D%7D)\n[<img alt=\"Install in VS Code Insiders (npx)\" src=\"https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Dokploy%20MCP&color=24bfa5\">](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Amcp%2Finstall%3F%7B%22name%22%3A%22dokploy-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40dokploy%2Fmcp%40latest%22%5D%7D)\n\nAdd this to your VS Code MCP config file. See [VS Code MCP docs](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) for more info.\n\n```json\n{\n  \"servers\": {\n    \"dokploy-mcp\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Install in Claude Code\n\nAdd the MCP server to Claude Code using the CLI:\n\n```bash\nclaude mcp add dokploy-mcp -- npx -y @dokploy/mcp\n```\n\nThen set the environment variables in your `.claude/settings.json` or pass them inline:\n\n```bash\nDOKPLOY_URL=https://your-dokploy-server.com DOKPLOY_API_KEY=your-token claude\n```\n\n### Install in Zed\n\nAdd this to your Zed `settings.json`. See [Zed Context Server docs](https://zed.dev/docs/assistant/context-servers) for more info.\n\n```json\n{\n  \"context_servers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Install in Claude Desktop\n\nAdd this to your Claude Desktop `claude_desktop_config.json` file. See [Claude Desktop MCP docs](https://modelcontextprotocol.io/quickstart/user) for more info.\n\n```json\n{\n  \"mcpServers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Install in BoltAI\n\nOpen the \"Settings\" page of the app, navigate to \"Plugins,\" and enter the following JSON:\n\n```json\n{\n  \"mcpServers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Using Docker\n\nThe Docker container supports both **stdio** and **HTTP** transport modes, making it flexible for different deployment scenarios.\n\n1.  **Build the Docker Image:**\n\n    ```bash\n    git clone https://github.com/Dokploy/mcp.git\n    cd mcp\n    docker build -t dokploy-mcp .\n    ```\n\n2.  **Manual Docker Commands:**\n\n    **Stdio Mode (for MCP clients):**\n\n    ```bash\n    docker run -it --rm \\\n      -e DOKPLOY_URL=https://your-dokploy-server.com \\\n      -e DOKPLOY_API_KEY=your_token_here \\\n      dokploy-mcp\n    ```\n\n    **HTTP Mode (for web applications):**\n\n    ```bash\n    docker run -it --rm \\\n      -p 8080:3000 \\\n      -e MCP_TRANSPORT=http \\\n      -e DOKPLOY_URL=https://your-dokploy-server.com \\\n      -e DOKPLOY_API_KEY=your_token_here \\\n      dokploy-mcp\n    ```\n\n3.  **Docker Compose:**\n\n    Use the provided `docker-compose.yml` for production deployments:\n\n    ```bash\n    # Start HTTP service\n    docker-compose up -d dokploy-mcp-http\n\n    # View logs\n    docker-compose logs -f dokploy-mcp-http\n    ```\n\n4.  **MCP Client Configuration:**\n\n    **For stdio mode (Claude Desktop, VS Code, etc.):**\n\n    ```json\n    {\n      \"mcpServers\": {\n        \"dokploy-mcp\": {\n          \"command\": \"docker\",\n          \"args\": [\n            \"run\",\n            \"-i\",\n            \"--rm\",\n            \"-e\",\n            \"DOKPLOY_URL=https://your-dokploy-server.com\",\n            \"-e\",\n            \"DOKPLOY_API_KEY=your_token_here\",\n            \"dokploy-mcp\"\n          ]\n        }\n      }\n    }\n    ```\n\n    **For HTTP mode (web applications):**\n\n    Start the HTTP server first, then configure your client to connect to `http://localhost:3000/mcp`.\n\n### Install in Windows\n\nThe configuration on Windows is slightly different compared to Linux or macOS. Use `cmd` as the command wrapper:\n\n```json\n{\n  \"mcpServers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"cmd\",\n      \"args\": [\"/c\", \"npx\", \"-y\", \"@dokploy/mcp\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `DOKPLOY_URL` | Yes | Your Dokploy server URL (e.g., `https://your-dokploy-server.com`) |\n| `DOKPLOY_API_KEY` | Yes | Your Dokploy API authentication token |\n| `DOKPLOY_ENABLED_TAGS` | No | Comma-separated list of tags to filter which tools are loaded (e.g., `project,application,postgres`) |\n| `DOKPLOY_TIMEOUT` | No | Request timeout in milliseconds (default: `30000`) |\n| `DOKPLOY_RETRY_ATTEMPTS` | No | Number of retry attempts (default: `3`) |\n| `DOKPLOY_RETRY_DELAY` | No | Delay between retries in milliseconds (default: `1000`) |\n\n## Transport Modes\n\nThis MCP server supports multiple transport modes to suit different use cases:\n\n### Stdio Mode (Default)\n\nThe default mode uses stdio for direct process communication, ideal for desktop applications and command-line usage.\n\n```bash\n# Run with stdio (default)\nnpx -y @dokploy/mcp\n```\n\n### HTTP Mode (Streamable HTTP + Legacy SSE)\n\nModern HTTP mode exposes the server via HTTP/HTTPS supporting **both modern and legacy protocols** for maximum compatibility:\n\n- **Streamable HTTP (MCP 2025-03-26)** - Modern protocol with session management\n- **Legacy SSE (MCP 2024-11-05)** - Backwards compatibility for older clients\n\n```bash\n# Run with HTTP mode\nnpx -y @dokploy/mcp --http\n# or via environment variable\nMCP_TRANSPORT=http npx -y @dokploy/mcp\n```\n\n**Modern Streamable HTTP Endpoints:**\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/mcp` | POST | Client-to-server requests |\n| `/mcp` | GET | Server-to-client notifications (SSE) |\n| `/mcp` | DELETE | Session termination |\n| `/health` | GET | Health check |\n\n**Legacy SSE Endpoints (Backwards Compatibility):**\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/sse` | GET | SSE stream initialization |\n| `/messages` | POST | Client message posting |\n\n## Available Tools (508)\n\nThis MCP server provides **508 tools** covering the entire Dokploy API, organized into **49 categories**:\n\n### Core Resources\n\n| Category | Tools | Description |\n|----------|-------|-------------|\n| **Project** | 8 | Create, list, update, duplicate, search, and delete projects |\n| **Application** | 30 | Full application lifecycle — create, deploy, redeploy, start, stop, build types, git providers (GitHub, GitLab, Bitbucket, Gitea), environment, Traefik config |\n| **Compose** | 29 | Docker Compose management — create, deploy, templates, services, environment, isolated deployments |\n| **Domain** | 9 | Domain CRUD, DNS validation, Traefik.me generation |\n| **Environment** | 7 | Multi-environment support per project |\n| **Deployment** | 8 | Deployment history, queue management, centralized view |\n\n### Databases\n\n| Category | Tools | Description |\n|----------|-------|-------------|\n| **PostgreSQL** | 15 | Full lifecycle — create, deploy, start, stop, rebuild, passwords, external ports, environment |\n| **MySQL** | 15 | Full lifecycle — create, deploy, start, stop, rebuild, passwords, external ports, environment |\n| **MariaDB** | 15 | Full lifecycle — create, deploy, start, stop, rebuild, passwords, external ports, environment |\n| **MongoDB** | 15 | Full lifecycle — create, deploy, start, stop, rebuild, passwords, external ports, environment |\n| **Redis** | 15 | Full lifecycle — create, deploy, start, stop, rebuild, passwords, external ports, environment |\n| **LibSQL** | 13 | Full lifecycle — create, deploy, start, stop, rebuild, external ports, environment |\n\n### Infrastructure\n\n| Category | Tools | Description |\n|----------|-------|-------------|\n| **Server** | 17 | Multi-server management, metrics, security, monitoring setup |\n| **Docker** | 9 | Container management — list, restart, remove, upload files, inspect config |\n| **Cluster / Swarm** | 8 | Swarm node management, container stats, cluster operations |\n| **Settings** | 51 | Server settings, Traefik config, Docker cleanup, GPU, monitoring, Redis, disk usage |\n| **Registry** | 7 | Docker registry management and testing |\n\n### Security & Auth\n\n| Category | Tools | Description |\n|----------|-------|-------------|\n| **SSO** | 10 | Single sign-on providers, trusted origins |\n| **SSH Keys** | 7 | SSH key management — create, generate, list, update, remove |\n| **Certificates** | 5 | SSL/TLS certificate management |\n| **Security** | 4 | Basic auth and security rules per application |\n| **Custom Roles** | 6 | Role-based access control with custom permissions |\n| **User** | 23 | User management, permissions, API keys, invitations, metrics |\n| **Organization** | 11 | Multi-org support, invitations, member roles |\n\n### Operations\n\n| Category | Tools | Description |\n|----------|-------|-------------|\n| **Backup** | 12 | Database backups — Postgres, MySQL, MariaDB, MongoDB, LibSQL, Compose, WebServer |\n| **Volume Backups** | 6 | Volume-level backup scheduling and management |\n| **Destination** | 6 | S3-compatible backup destinations (AWS, Cloudflare R2, etc.) |\n| **Schedule** | 6 | Scheduled tasks — cron-based automation |\n| **Notification** | 41 | Multi-channel alerts — Slack, Discord, Telegram, Email, Teams, Gotify, Ntfy, Pushover, Lark, Mattermost, Resend, Custom webhooks |\n| **Rollback** | 2 | Application rollback management |\n\n### Other\n\n| Category | Tools | Description |\n|----------|-------|-------------|\n| **AI** | 9 | AI-powered suggestions, model management |\n| **Git Providers** | 27 | GitHub, GitLab, Gitea, Bitbucket — branches, repos, connection testing |\n| **Tag** | 8 | Project tagging and bulk assignment |\n| **Patch** | 12 | File patching system for applications |\n| **Mounts** | 6 | Volume and bind mount management |\n| **Port** | 4 | Port mapping configuration |\n| **Redirects** | 4 | URL redirect rules |\n| **Preview Deployments** | 4 | PR preview deployment management |\n| **Stripe** | 7 | Billing and subscription management |\n| **License Key** | 6 | Enterprise license management |\n| **Whitelabeling** | 4 | Custom branding for enterprise |\n| **Audit Log** | 1 | Activity audit trail |\n| **Admin** | 1 | Admin-level monitoring setup |\n\n### Tool Filtering\n\nYou can limit which tools are loaded by setting the `DOKPLOY_ENABLED_TAGS` environment variable. This is useful when you only need a subset of tools:\n\n```bash\n# Only load project, application, and postgres tools\nDOKPLOY_ENABLED_TAGS=project,application,postgres\n```\n\nAll tools include semantic annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`) to help MCP clients understand their behavior and safety characteristics.\n\n### Environment Tool Data Format\n\nThe MCP server includes four environment helper tools with a normalized shape for AI agents:\n\n- `projectEnvironment-get`\n- `projectEnvironment-save`\n- `serviceEnvironment-get`\n- `serviceEnvironment-save`\n\n`*-get` tools return both forms:\n\n- `envMap`: object map in `KEY -> VALUE` format for reliable agent parsing.\n- `envText`: reconstructed `.env` string format (`KEY=VALUE` per line).\n\n`*-save` tools accept `env` in either format:\n\n- String: `.env` text (`KEY=VALUE` lines)\n- Object: map (`{ \"KEY\": \"VALUE\" }`)\n\nWhen a map is provided, the server automatically serializes it to `.env` text before calling Dokploy API endpoints.\n\nExample request for `serviceEnvironment-save` (map input):\n\n```json\n{\n  \"serviceType\": \"application\",\n  \"serviceId\": \"app_123\",\n  \"env\": {\n    \"NODE_ENV\": \"production\",\n    \"PORT\": \"3000\"\n  }\n}\n```\n\nExample response payload for `serviceEnvironment-get`:\n\n```json\n{\n  \"serviceType\": \"application\",\n  \"serviceId\": \"app_123\",\n  \"envMap\": {\n    \"NODE_ENV\": \"production\",\n    \"PORT\": \"3000\"\n  },\n  \"envText\": \"NODE_ENV=production\\nPORT=3000\"\n}\n```\n\n## Architecture\n\nBuilt with **@modelcontextprotocol/sdk**, **TypeScript**, and **Zod** for type-safe schema validation:\n\n- **508 Tools** covering the entire Dokploy API\n- **Multiple Transports**: Stdio (default) and HTTP (Streamable HTTP + legacy SSE)\n- **Auto-generated Tools**: Tools are generated from the Dokploy OpenAPI spec via `pnpm generate:all`\n- **Tool Filtering**: Load only the categories you need via `DOKPLOY_ENABLED_TAGS`\n- **Robust Error Handling**: Centralized API client with interceptors and retry logic\n- **Type Safety**: Full TypeScript with Zod schema validation\n- **Tool Annotations**: Semantic hints for MCP client behavior understanding\n\n## Development\n\nClone the project and install dependencies:\n\n```bash\ngit clone https://github.com/Dokploy/mcp.git\ncd mcp\npnpm install\n```\n\nBuild:\n\n```bash\npnpm build\n```\n\nRegenerate tools from the Dokploy OpenAPI spec:\n\n```bash\npnpm generate:all\n```\n\n### Local Configuration Example\n\n```json\n{\n  \"mcpServers\": {\n    \"dokploy-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"tsx\", \"/path/to/mcp/src/index.ts\"],\n      \"env\": {\n        \"DOKPLOY_URL\": \"https://your-dokploy-server.com\",\n        \"DOKPLOY_API_KEY\": \"your-dokploy-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Testing with MCP Inspector\n\n```bash\nnpx -y @modelcontextprotocol/inspector npx @dokploy/mcp\n```\n\n## Troubleshooting\n\n### MCP Client Errors\n\n1. Try adding `@latest` to the package name.\n\n2. Make sure you are using Node v18 or higher to have native fetch support with `npx`.\n\n3. Verify your `DOKPLOY_URL` and `DOKPLOY_API_KEY` environment variables are correctly set.\n\n4. If too many tools are loading, use `DOKPLOY_ENABLED_TAGS` to filter by category.\n\n## Contributing\n\nWe welcome contributions! If you'd like to contribute to the Dokploy MCP Server, please check out our [Contributing Guide](CONTRIBUTING.md).\n\n## Support\n\nIf you encounter any issues, have questions, or want to suggest a feature, please [open an issue](https://github.com/Dokploy/mcp/issues) in our GitHub repository.\n\n## License\n\nThis project is licensed under the [Apache License](LICENSE).\n","readmeFilename":"README.md"}