Trial only
Skip the credit card and use the platform on trial:
- Flexible or Autonomous: 2 GB or 4 GB server
- Velocity: Starter pack (2 GB server)
A field guide, updated October 28, 2026
Launch a server, deploy with Git, automate with the v2 API, and hand the boring parts to an AI agent. Written for developers who learn by doing.
Hackathon signup
We'll share a promo code with all hackers—use it when you sign up. From there you have two paths:
Skip the credit card and use the platform on trial:
To unlock the $20 worth of credits, add your credit card details after signup, then use the platform as usual.
What changed in 2026
The email and API key flow ended on Oct 15, 2026. Send an Access Token as a Bearer header instead.
The base URL is api.cloudways.com/api/v2. v1 is sunset, though some help articles still show it.
Only the primary account owner can create tokens. Team members can't, so plan who holds the keys.
The path
01First server and appStart the free trial, launch a server, connect over SSH and SFTP.10 min02Deploy appsWordPress, Git deployments, Laravel and PHP, and Node.js on Velocity.20 min03API and automationAccess Tokens, the v2 API, and scripts that run your fleet.20 min04MCP and AI agentsDrive Cloudways from Claude, Cursor, VS Code and friends.15 min05Ops basicsDomains, SSL, backups, staging, monitoring and scaling.15 minTutorial 01 · about 10 min
Start the free trial, launch a server, connect over SSH and SFTP.
Goal: a running Cloudways server with one app, reachable over SSH and SFTP.
Cloudways offers a 3-day Flexible trial with no credit card. To keep your server afterward you must add a card (a small temporary verification charge, reversed automatically, may appear).
Hackathon paths: sign up with the shared promo code. Without a card you can trial Flexible/Autonomous on a 2 GB or 4 GB server, or Velocity Starter (2 GB). Add a card if you want the $20 credits.
Provisioning takes a few minutes. The dashboard shows progress.
Menu labels shift over time, so look for the equivalents if yours differ. Open Servers → your server → Master Credentials for the public IP, master username, and password. For a single app, open Applications → your app → Access Details.
SSH is not enabled by default for application users. Open the app's Application Settings and toggle Enable SSH Access. Master credentials work without this.
ssh <username>@<server-ip>
For SFTP use the same host, user, and password with any client (sftp, Cyberduck, FileZilla).
Prefer keys: add your public key under the server's SSH key settings so you can skip passwords. (You can also do this by API or MCP; see tutorials 3 and 4.)
cd ~/applications # one folder per app, named by an internal ID
ls
cd <app-folder>/public_html
public_html is the web root. Edit a file, refresh the app URL, and you've confirmed the full loop.
scripts/list_servers.py output)Tutorial 02 · about 20 min
WordPress, Git deployments, Laravel and PHP, and Node.js on Velocity.
Goal: get real code running on your server three ways: a one-click app, a Git deployment, and a PHP/Laravel app.
When you launch a server (or later, Add Application on an existing server), choose an application type. Cloudways installs and configures it. Supported types include WordPress, WooCommerce, Laravel, Magento, and PHP, among others.
After install, the app has a default Cloudways URL. Use it right away; add your own domain in tutorial 5.
Cloudways can pull code from your repo into an app. Know these up front:
git yourself on the server (push, checkout, etc.) you need master credentials and your own key pair.Manual deploys (console)
[email protected]:you/repo.git), then Get Branches.public_html), then Start Deployment.Auto-deploy on push
Cloudways documents this as a small webhook script you host, which calls the Git API. Prerequisites: you are the primary account owner, the app is on a Flexible server, and manual Git deployment already works. In short:
public_html, and keep it out of Git.Cloudways' step-by-step webhook guide includes the full hardened script. Its sample code still shows the v1 base URL; use v2 (see tutorial 3).
You can also trigger a pull from your own CI with scripts/git_deploy.py. The pull call takes the server ID, app ID, SSH Git URL, and branch name (deploy path optional).
public/. Point the app's webroot at it (Application Settings → webroot, or the app_webroot_update MCP tool): /public_html/public.cd ~/applications/<app-folder>/public_html
composer install --no-dev
cp .env.example .env && php artisan key:generate
php artisan migrate --force
Get the database host, name, user, and password from Application → Access Details.
Cloudways Velocity is managed Node.js hosting, now Generally Available. Per the Velocity page (checked Oct 28, 2026):
Starter templates live at github.com/CloudwaysbyDO. Velocity is separate from the Flexible (PHP-centric) servers used in the other sections.
| Symptom | Likely cause |
|---|---|
| Git "permission denied" | Deploy key not added to the repo, or you used an HTTPS URL |
git works in the console but not over SSH |
UI-generated keys only work for console deploys; use master credentials and your own key |
| 403 / blank page on Laravel | Webroot not set to public |
ssh: permission denied for an app user |
SSH not enabled in Application Settings |
| Files owned by wrong user after manual edits | Use Reset File Permissions |
Tutorial 03 · about 20 min
Access Tokens, the v2 API, and scripts that run your fleet.
Goal: authenticate with an Access Token and script your Cloudways account.
/oauth/access_token): scheduled end of life October 15, 2026 (passed); keys are revoked afterward. Cloudways says not to build new integrations on it.Authorization: Bearer <token>.v1 with v2 in URL paths.hackathon-dev), pick a short expiry (1 day is plenty for a hackathon), and choose a scope:
- Read-Only: GET calls only. Start here.
- Limited Access (beta): pick endpoint groups (Server, Application, Git, Lists, Monitoring, ...).
- Full Access: everything. Avoid unless needed.export CLOUDWAYS_TOKEN="<paste here>" # never commit this
Open the API Playground, click Authorize, choose the Access Token tab, paste your token. Run GET /server (list servers). The Playground shows request and response shapes for every endpoint. It acts on your real account, so test on a throwaway server.
Base URL (confirmed by Cloudways' MCP 2.0 announcement, which lists https://api.cloudways.com/api/v2/providers):
https://api.cloudways.com/api/v2
Override with CLOUDWAYS_API_BASE if it ever changes. Note: some help articles (e.g. the Git webhook guide) still show /api/v1 in sample code; that's stale.
curl -s -H "Authorization: Bearer $CLOUDWAYS_TOKEN" \
https://api.cloudways.com/api/v2/server | head -c 600
# reference data (providers, regions, sizes) lives under the Lists endpoints:
curl -s -H "Authorization: Bearer $CLOUDWAYS_TOKEN" \
https://api.cloudways.com/api/v2/providers | head -c 600
Or use the helper scripts (standard library only, Python 3.8+):
| Script | What it does |
|---|---|
scripts/cw.py |
Tiny client: auth, errors, and operation polling |
scripts/list_servers.py |
List servers and their apps (read-only) |
scripts/create_server.py |
Launch a server. Dry run by default; needs --yes to spend money |
scripts/git_deploy.py |
Clone or pull a Git repo into an app |
scripts/app_backup.py |
Back up an app before you deploy |
python3 scripts/list_servers.py
python3 scripts/create_server.py --provider do --region nyc3 --size 1GB --app wordpress
python3 scripts/git_deploy.py pull --server 123 --app 456 --url [email protected]:me/repo.git --branch main
POST /server returns an operation ID; poll the operation endpoint until it completes. cw.wait_for_operation() does this.422. Discover valid values from the Lists endpoints (providers, regions, sizes, apps) rather than guessing.POST /server and backups are marked (verify). Check each against the Playground's request schema. The Git pull body (server_id, app_id, git_url, branch_name, optional deploy_path) matches Cloudways' current webhook guide. That guide sends form-encoded bodies, and cw.py does the same.Tutorial 04 · about 15 min
Drive Cloudways from Claude, Cursor, VS Code and friends.
Goal: manage Cloudways in plain English from an AI client such as Claude, Cursor, or VS Code.
The Cloudways MCP server exposes 240+ tools (servers, apps, backups, Git, DNS, monitoring, security, and more) to any Model Context Protocol client. To keep your context window small, a client initially sees 65 tools; the rest are reached through three meta-tools: list_available_toolsets, get_toolset_tools, and execute_tool.
mcp-remote. The setup article asks for v24.14.1+, though its troubleshooting table says v18+; use a current LTS to be safe.https://mcp.cloudways.com/mcp/ (the trailing slash matters)| Header | Value |
|---|---|
X-Access-Token |
your token |
X-Mcp-Host |
your client: cursor, claude-desktop, claude-code, vs-code, gemini-cli, codex, codex-cli, or Devin |
claude mcp add --transport http \
--header "X-Access-Token: <your-token>" \
--header "X-Mcp-Host: claude-code" \
-s user \
cloudways https://mcp.cloudways.com/mcp/
claude mcp list
Config file on macOS: ~/Library/Application Support/Claude/claude_desktop_config.json. Uses the mcp-remote bridge. No spaces after the colon in --header values:
{
"mcpServers": {
"cloudways": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.cloudways.com/mcp/",
"--header", "X-Access-Token:<your-token>",
"--header", "X-Mcp-Host:claude-desktop"
]
}
}
}
Fully quit and reopen Claude Desktop afterward.
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"cloudways": {
"url": "https://mcp.cloudways.com/mcp/",
"headers": {
"X-Access-Token": "<your-token>",
"X-Mcp-Host": "cursor"
}
}
}
}
Note servers (not mcpServers) and type: http:
{
"servers": {
"cloudways": {
"type": "http",
"url": "https://mcp.cloudways.com/mcp/",
"headers": {
"X-Access-Token": "<your-token>",
"X-Mcp-Host": "vs-code"
}
}
},
"inputs": []
}
Gemini CLI uses httpUrl; Codex uses TOML ([mcp_servers.cloudways] with http_headers). See the official setup article for those.
Prompt: Show me all my servers. You should see names, providers, regions, and IPs.
| Intent | Prompt |
|---|---|
| Inventory | "Show me all my running servers." |
| Health | "Are all services healthy on server 12345?" |
| Performance | "Show CPU usage for server 12345 over the last 24 hours." |
| Slow code | "Which PHP pages are slowest on app 67890?" |
Then, with a Full or Limited token:
| Intent | Prompt |
|---|---|
| Provision | "Create a 2GB DigitalOcean server in NYC with WordPress." |
| Safe deploys | "Back up app 67890 on server 12345, then pull the latest from main." |
| Staging | "Clone app 67890 on server 12345 as 'Staging Copy'." |
Tutorial 05 · about 15 min
Domains, SSL, backups, staging, monitoring and scaling.
Goal: make your app production-shaped: your own domain, HTTPS, backups, a staging copy, visibility, and room to scale.
Menu names shift as the dashboard evolves; use search in the Help Center if something has moved.
A record), or use the app URL via a CNAME for subdomains.API/MCP equivalents: app_cname_update, app_aliases_update. Cloudways also offers DNS Made Easy as an add-on.
In SSL Certificate, install a free SSL certificate for your domain (it must already resolve to the server). Then enable Force HTTPS (app_enforce_https_update).
scripts/app_backup.py, or MCP "Back up app 67890 on server 12345".Clone your app to a staging copy (Staging Management or app_clone), test there, then push changes back. Protect staging with password protection (HTTP basic auth) so search engines and strangers stay out.
server_scale). Disk and volume scaling support varies by provider.When you're done, delete servers you won't keep (Server → Delete Server, or server_delete). Deletion is permanent.
git pull a known-good branch)Appendix
Where to go next, and how not to get burned.