DPLoy
# DPLoy
An MCP server that deploys to your VPS in plain English. Give your AI coding
agent an IP address and an SSH key path, then just say what you want — "deploy
this repo as a Python bot", "put SSL on this domain", "spin up this
docker-compose project" — and it does the work over SSH.
Built for use with **Claude Code**, **Cursor**, **Codex**, or any other
MCP-compatible client. No dashboard, no daemon, no account. It's a thin
stdio MCP server that wraps SSH.
## Why this exists
Most "AI + infrastructure" tools are full platforms with their own UI,
memory, and message-routing layer. This is the opposite: a small set of
tools that plug straight into the agent you already use, so you don't have
to leave your editor to deploy something.
## What it can do
- `exec` — run any single shell command over SSH
- `write_file` — write a file to the server via SFTP
- `deploy_python_bot` — clone a repo, set up a venv, install
`requirements.txt`, and run it as a `systemd` service with auto-restart
(built with aiogram-style Telegram bots in mind, but works for any
long-running Python process)
- `setup_nginx_ssl` — install nginx + certbot, reverse-proxy to a local
port, and get a free Let's Encrypt certificate
- `deploy_docker_compose` — clone a repo, install Docker if needed, and run
`docker compose up -d --build`
- `view_audit_log_path` — find the local log of everything that's been run
## Security model
- **Key-based auth only.** Password authentication isn't supported anywhere
in this codebase, on purpose.
- **No persisted server list.** You pass `host` / `username` /
`privateKeyPath` on every call. Nothing about your servers is written to
disk by this tool (besides the audit log of commands run).
- **Dangerous commands require confirmation.** Things like `rm -rf`,
`reboot`, `mkfs`, `dd`, flushing iptables, etc. are pattern-matched and
blocked unless the call includes `confirmed: true`. The intended flow is:
the agent tries the command, gets blocked, explains the risk to you in
plain language, and only retries with confirmation after you say yes.
- **Local audit log.** Every command run through this tool is appended to
`~/.dploy-mcp/audit.log` as one JSON line per command (host, command,
exit code, duration, timestamp).
This is a tool that gives an AI agent shell access to a real server. Use a
non-root deploy user with `sudo` only where needed, point it at
non-critical / staging servers first, and read what the agent is about to
run before approving anything destructive.
## Install
```bash
git clone https://github.com/wellmb/DPloy.git
cd DPloy
npm install
npm run build
```
### Claude Code
```bash
claude mcp add --transport stdio dploy -- node /absolute/path/to/DPloy/build/index.js
```
### Cursor
Add to `~/.cursor/mcp.json` (or your project's `.cursor/mcp.json`):
```json
{
"mcpServers": {
"dploy": {
"command": "node",
"args": ["/absolute/path/to/DPloy/build/index.js"]
}
}
}
```
### Any other MCP client (Claude Desktop, etc.)
Same shape as above — point `command` at `node` and `args` at the built
`build/index.js`.
## Usage
Once connected, just talk to your agent normally:
> Deploy https://github.com/me/my-bot.git to 168.119.45.12 as root using
> ~/.ssh/id_ed25519. Entry point is main.py, app name "my-bot". Here's the
> .env content: ...
> Put SSL on bot.example.com for 168.119.45.12, my app listens on port
> 3000, use ~/.ssh/id_ed25519 as root, email me@example.com
> SSH into 168.119.45.12 and check the systemd status of my-bot
If the agent ever needs to run something destructive, it will tell you what
it wants to do and why, and ask you to confirm before it's allowed through.
## Recipes vs. raw exec
The `deploy_*` tools cover the common cases end to end. For anything outside
that — checking logs, restarting a single service, inspecting disk space,
one-off debugging — the agent will fall back to `exec` and just run the
right command directly.
## License
MIT
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: Docker deployment, Python bot deployment, general command execution, Nginx/SSL setup, audit log path retrieval, and file writing. No overlap.
All tool names follow a consistent verb_noun pattern with lowercase and underscores (e.g., deploy_docker_compose, setup_nginx_ssl). 'exec' is a concise verb that fits the pattern.
Six tools cover the core deployment and management operations for a remote server without being excessive or insufficient. The count is well-scoped.
The tool set covers essential deployment workflows (Docker, Python bot, Nginx/SSL, file management) and auditing. Minor gaps like deployment rollback or environment variable editing are not present but can be handled via exec and write_file.