About contabo
contabo is an operations skill for managing Contabo infrastructure with the cntb CLI, aimed at users configuring and deploying VPS instances or object storage. It covers parameter checks, instance creation and verification, and guidance on credentials and cleanup risks.
Key features
- 01Collect deployment parameters and server profile
- 02Create and inspect VPS instances with cntb CLI
- 03Set region, product, and SSH public key
- 04Create object storage with a scaling limit
- 05Verify connectivity and cancel instances
- 06Document credential handling and operation logging
Use cases
- 01Configure and deploy a Contabo VPS for a purpose
- 02Check instance status, IP address, and SSH access
- 03Create object storage with a capacity limit
- 04Troubleshoot cntb CLI credentials or deployment
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ evolv3-ai/ vibe-skills --skill contaboAfter installing, type/contaboin Claude Code to confirm it loaded.
Bundled filesassets/env-templatereferences/OPERATIONS.md
Details
From the project READMEContabo Infrastructure
CRITICAL: Secrets and .env
- NEVER store live
.envfiles or credentials inside any skill folder. .env.templatefiles belong only inassets/within a skill.- Store live secrets in
~/.admin/.envand reference from there.
Status: Production Ready | Dependencies: cntb CLI, SSH key pair
Navigation
- Operations, troubleshooting, config, and cost snapshot:
references/OPERATIONS.md
Step 0: Gather Required Information (MANDATORY)
STOP. Before ANY deployment commands, collect ALL parameters from the user.
Copy this checklist and confirm each item:
Required Parameters:
- [ ] SERVER_NAME - Unique name for this server
- [ ] CONTABO_REGION - Region (EU, US-central, US-east, US-west, SIN, JPN, AUS)
- [ ] CONTABO_PRODUCT_ID - Product/plan ID (see profiles below)
- [ ] SSH_KEY_PATH - Path to SSH private key (default: ~/.ssh/id_rsa)
Deployment Purpose (determines recommended profile):
- [ ] Purpose: coolify / kasm / both / custom
coolify → V39 (Cloud VPS 10 SP, €5/mo)
kasm → V45 (Cloud VPS 20 SP, €8/mo)
both → V46 (Cloud VPS 30, €14/mo)
custom → Ask for specific product ID
Recommended profiles by purpose:
| Purpose | Product ID | Plan | vCPU | RAM | Monthly |
|---|---|---|---|---|---|
| coolify | V39 | Cloud VPS 10 SP | 4 | 8GB | €5 |
| kasm | V45 | Cloud VPS 20 SP | 6 | 18GB | €8 |
| both | V46 | Cloud VPS 30 | 8 | 24GB | €14 |
DO NOT proceed to Prerequisites until ALL parameters are confirmed.
Prerequisites
Before using this skill, verify the following:
1. Contabo CLI Installed
cntb version
Note: The CLI uses
cntb version(no--).cntb --versionis not a valid flag.
If missing, install with:
# Linux / WSL
curl -sL https://github.com/contabo/cntb/releases/latest/download/cntb_linux_amd64.tar.gz | tar xz
sudo mv cntb /usr/local/bin/
# macOS
curl -sL https://github.com/contabo/cntb/releases/latest/download/cntb_darwin_amd64.tar.gz | tar xz
sudo mv cntb /usr/local/bin/
# Windows (cmd / Git Bash)
curl -L -o "%TEMP%\cntb.zip" "https://github.com/contabo/cntb/releases/latest/download/cntb_windows_amd64.zip"
unzip -o "%TEMP%\cntb.zip" -d "%TEMP%\cntb-extract"
copy "%TEMP%\cntb-extract\cntb.exe" "%USERPROFILE%\.local\bin\cntb.exe"
Windows note: Ensure the target directory (e.g.
%USERPROFILE%\.local\bin) is on your PATH. The PowerShellInvoke-WebRequest/Expand-Archiveapproach may fail due to execution policies.
2. Contabo Account & API Credentials
If you don't have a Contabo account:
Sign up at: https://contabo.com/?ref=YOUR_REFERRAL_CODE
Disclosure: This is a referral link from the CJ Affiliate program. The skill author may receive $25-$250 commission. Using this link helps support the development of these skills.
Get API Credentials: https://my.contabo.com/api/details
You need:
- Client ID (OAuth2)
- Client Secret (OAuth2)
- API User (your email)
- API Password (your account password or generated one)
3. cntb CLI Configured
cntb get instances
If it shows an error, configure with set-credentials (writes to ~/.cntb.yaml):
cntb config set-credentials \
--oauth2-clientid "your_client_id" \
--oauth2-client-secret "your_client_secret" \
--oauth2-user "your_email" \
--oauth2-password 'your_password'
Important: Use
cntb config set-credentials, not environment variables. TheCNTB_OAUTH2_*env vars documented elsewhere are unreliable and may produceclientId is emptyerrors. The config file approach (~/.cntb.yamlon Linux,%USERPROFILE%\.cntb.yamlon Windows) is the only reliable method.
Special characters in password: If your password contains
*,^,!, or other shell metacharacters, wrap it in single quotes to prevent shell expansion.
Verify config was saved:
cntb config view
4. SSH Key Pair
ls ~/.ssh/id_rsa.pub
If missing, generate with:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
5. SSH Key Available
Unlike other providers, Contabo requires you to specify the SSH key during instance creation via the --sshKeys parameter with the actual public key content.
cat ~/.ssh/id_rsa.pub
6. Test Authentication
cntb get datacenters
If this fails: Credentials may be incorrect. Verify at https://my.contabo.com/api/details
Server Profiles
Coolify/Kasm Deployments - BEST VALUE
| Profile | Plan | vCPU | RAM | Disk | Monthly Cost |
|---|---|---|---|---|---|
coolify | Cloud VPS 10 SP | 4 | 8GB | 100GB | €5 |
kasm | Cloud VPS 20 SP | 6 | 18GB | 150GB | €8 |
both | Cloud VPS 30 | 8 | 24GB | 200GB | €14 |
Standard Plans (More Storage)
| Profile | Plan | vCPU | RAM | Disk | Monthly Cost |
|---|---|---|---|---|---|
standard-small | Cloud VPS S | 4 | 8GB | 200GB SSD | €8 |
standard-medium | Cloud VPS M | 6 | 16GB | 400GB SSD | €14 |
standard-large | Cloud VPS L | 8 | 30GB | 800GB SSD | €26 |
standard-xl | Cloud VPS XL | 10 | 60GB | 1600GB SSD | €39 |
Price Comparison - Why Contabo?
| Provider | 6 vCPU, 16-18GB RAM | Monthly Cost |
|---|---|---|
| Contabo VPS 20 SP | 6 vCPU, 18GB | €8 |
| Hetzner CX42 | 8 vCPU, 16GB | €20 |
| DigitalOcean | 8 vCPU, 16GB | $96 |
| Vultr | 6 vCPU, 16GB | $96 |
| Linode | 6 vCPU, 16GB | $96 |
Contabo offers 5-10x better value than most competitors.
Deployment Steps
Step 1: Set Environment Variables
export CONTABO_REGION="EU" # EU, US-central, US-east, US-west, SIN, JPN, AUS
export CONTABO_PRODUCT_ID="V48" # See product IDs below (V48 verified working)
export SERVER_NAME="my-server"
Region options
| Code | Location | Region |
|---|---|---|
EU | Germany (Nuremberg) | Europe |
US-central | St. Louis, MO | US Central |
US-east | New York | US East |
US-west | Seattle | US West |
SIN | Singapore | Asia |
JPN | Tokyo | Japan |
AUS | Sydney | Australia |
Run cntb get datacenters for full list.
Product ID reference
| Product ID | Plan | vCPU | RAM | Disk | Price | Status |
|---|---|---|---|---|---|---|
| V12 | VPS S NVMe | 4 | 8GB | 100GB | €5 | ✅ Verified |
| V48 | VPS M (Cloud VPS 2 SSD) | 6 | 16GB | 400GB | €14 | ✅ Verified |
| V92 | Cloud VPS 10 SSD | 4 | 8GB | 150GB | ~€5 | ✅ Verified |
| V101 | Cloud VPS 40 SSD | 12 | 48GB | 500GB | ~€20 | ✅ Verified |
| V35 | Cloud VPS 1 | 4 | 6GB | 100GB | €4.50 | Untested |
| V39 | Cloud VPS 10 SP | 4 | 8GB | 100GB NVMe | €5 | Untested |
| V45 | Cloud VPS 20 SP | 6 | 18GB | 150GB NVMe | €8 | ⚠️ May not work |
| V46 | Cloud VPS 30 | 8 | 24GB | 200GB | €14 | Untested |
| V47 | Cloud VPS S | 4 | 8GB | 200GB SSD | €8 | Untested |
| V49 | Cloud VPS L | 8 | 30GB | 800GB SSD | €26 | Untested |
| V50 | Cloud VPS XL | 10 | 60GB | 1600GB SSD | €39 | Untested |
Important: Contabo frequently restructures product IDs. Run cntb get products --productType vps for the current list. Verified working (Feb 2026): V12, V48, V92, V101.
Step 2: Create Instance
# Get the SSH public key content
SSH_KEY_CONTENT=$(cat ~/.ssh/id_rsa.pub)
# Create instance
cntb create instance \
--productId "$CONTABO_PRODUCT_ID" \
--region "$CONTABO_REGION" \
--displayName "$SERVER_NAME" \
--imageId "ubuntu-22.04" \
--sshKeys "$SSH_KEY_CONTENT"
Step 3: Get Instance Details
# List instances to get the ID
INSTANCE_ID=$(cntb get instances --output json | jq -r '.[] | select(.displayName=="'"$SERVER_NAME"'") | .instanceId')
echo "Instance ID: $INSTANCE_ID"
# Get instance details
cntb get instance "$INSTANCE_ID"
# Get IP address
SERVER_IP=$(cntb get instance "$INSTANCE_ID" --output json | jq -r '.ipConfig.v4.ip')
echo "SERVER_IP=$SERVER_IP"
Step 4: Wait for Server Ready
# Wait for instance to be running
echo "Waiting for instance to be running..."
while [ "$(cntb get instance "$INSTANCE_ID" --output json | jq -r '.status')" != "running" ]; do
sleep 10
done
echo "Instance is running!"
# Wait for SSH to be available (typically 2-5 minutes for Contabo)
echo "Waiting for SSH to be available..."
until ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$SERVER_IP "echo connected" 2>/dev/null; do
sleep 10
done
echo "Server is ready!"
Step 5: Verify Connection
ssh root@$SERVER_IP "uname -a && free -h && df -h /"
Step 6: Output for Downstream Skills
# Contabo only offers x86 architecture
SERVER_ARCH="amd64"
# Save to .env.local for downstream skills
echo "SERVER_IP=$SERVER_IP" >> .env.local
echo "SSH_USER=root" >> .env.local
echo "SSH_KEY_PATH=~/.ssh/id_rsa" >> .env.local
echo "SERVER_ARCH=$SERVER_ARCH" >> .env.local
echo "COOLIFY_SERVER_IP=$SERVER_IP" >> .env.local
echo "KASM_SERVER_IP=$SERVER_IP" >> .env.local
echo ""
echo "Instance deployed successfully!"
echo " IP: $SERVER_IP"
echo " Arch: $SERVER_ARCH"
echo " SSH: ssh root@$SERVER_IP"
Verify Deployment
ssh root@$SERVER_IP "echo 'Contabo instance connected successfully'"
Object Storage Auto-Scaling
Contabo supports auto-scaling limits for object storage to control costs.
Create Object Storage with Auto-Scaling
# Create object storage bucket
cntb create objectStorage \
--region "$CONTABO_REGION" \
--displayName "my-storage" \
--totalPurchasedSpaceTB 0.5 \
--autoScaling.state enabled \
--autoScaling.sizeLimitTB 2
This allows storage to automatically grow up to 2TB as needed.
Cleanup
Warning: This is destructive and cannot be undone.
# Cancel instance (Contabo uses "cancel" not "delete")
cntb cancel instance "$INSTANCE_ID"
# Note: Cancellation may take effect at end of billing period
# For immediate deletion, contact Contabo support
Operations
Troubleshooting, best practices, configuration variables, and cost snapshots are in references/OPERATIONS.md.
Logging Integration
When performing infrastructure operations, log to the centralized system:
# After provisioning
log_admin "SUCCESS" "operation" "Provisioned Contabo VPS" "id=$INSTANCE_ID provider=Contabo"
# After destroying
log_admin "SUCCESS" "operation" "Cancelled Contabo VPS" "id=$INSTANCE_ID"
# On error
log_admin "ERROR" "operation" "Contabo deployment failed" "error=$ERROR_MSG"
See admin skill's references/logging.md for full logging documentation.