minectl
minectl creates and manages Minecraft servers on 15 cloud providers via declarative YAML manifests.
Creating a Manifest
Every operation starts with a manifest file:
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: my-minecraft
spec:
server:
cloud: hetzner
region: fsn1
size: cx21
ssh:
port: 22
publickeyfile: ~/.ssh/id_rsa.pub
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: changeme
port: 25575
enabled: true
edition: papermc
version: "1.21"
eula: true
properties: |
max-players=20
difficulty=normal
motd=My Minecraft Server
Choosing an Edition
| Edition |
Best for |
java |
Vanilla experience, no mods |
papermc |
Performance + plugin support (recommended) |
spigot |
Bukkit plugin ecosystem |
craftbukkit |
Legacy Bukkit plugins |
fabric |
Lightweight mods |
forge |
Large mod packs |
purpur |
Paper + extra gameplay tweaks |
bedrock |
Cross-platform (mobile/console/PC) |
nukkit |
Java-based Bedrock server |
powernukkit |
Extended Nukkit |
For proxy setups, use kind: MinecraftProxy with editions: bungeecord, waterfall, or velocity.
Edition-Specific Tuning
Different editions need different server.properties and resource allocations. Getting these wrong causes crashes, kicks, or poor performance — this is where most new server admins struggle.
Forge / Fabric (modded servers):
- Set
max-tick-time=90000 (or -1 to disable). Modded servers regularly exceed the default 60s watchdog, especially during chunk generation or mod initialization. Leaving the default causes the server to kill itself under normal modded load.
- Set
allow-flight=true. Many mods (Botania, Mekanism jetpacks, Elytra mods, etc.) trigger the vanilla flight detection. Without this, modded players get kicked constantly.
- Allocate generous heap: 8G minimum for light mods, 12G+ for heavy packs (100+ mods). Set
xms equal to xmx to avoid expensive heap resizing under load.
- Always add
volumeSize: 50 (or more). Mod packs, world data with modded chunks, and backups consume significant disk. Running out of disk silently corrupts worlds.
- Upload mods to
/minecraft/mods (not /minecraft/plugins).
- Enable monitoring (
monitoring.enabled: true) — modded servers are resource-hungry and benefit from Prometheus metrics to catch memory/CPU issues early.
PaperMC / Spigot / CraftBukkit / Purpur (plugin servers):
- Default
max-tick-time=60000 is usually fine.
- Keep
allow-flight=false unless a specific plugin requires it.
- 2-4G heap is sufficient for up to 20 players with typical plugins.
- Upload plugins to
/minecraft/plugins.
- PaperMC is the recommended default — it's the most performant fork and supports all Bukkit/Spigot plugins.
Bedrock / Nukkit / PowerNukkit:
- No
java block needed in the manifest (Bedrock is a native binary, not Java-based).
- Default port is
19132 (UDP), not 25565.
- RCON is not available for Bedrock edition.
- Lower resource requirements: 1-2G RAM is typically sufficient.
Instance Sizing Guide
| Use case |
Players |
Recommended RAM |
Example sizes |
| Vanilla / Paper (casual) |
1-10 |
2-4 GB |
Hetzner cx21, DO s-2vcpu-4gb |
| Paper with plugins |
10-20 |
4-8 GB |
Hetzner cpx31, DO s-4vcpu-8gb, AWS t3.large |
| Forge/Fabric (light mods) |
1-10 |
8 GB |
AWS t3.xlarge, Hetzner cpx41 |
| Forge/Fabric (heavy mods) |
5-15 |
16 GB+ |
AWS m5.xlarge, Hetzner cpx51 |
| Proxy (BungeeCord/Velocity) |
N/A |
1-2 GB |
Smallest available |
When using spot instances (spot: true), prefer regions with large capacity pools (e.g., us-east-1 for AWS) to minimize interruption risk. Always warn users that spot instances can be terminated with 2 minutes notice — world backups are essential.
Security Recommendations
Always include these in every manifest:
fail2ban block under SSH config (prevents brute-force attacks)
- Strong RCON password (never deploy with "changeme")
- Consider
white-list=true and enforce-whitelist=true for private servers
online-mode=true to verify player accounts (prevents unauthorized access)
Optional Features
Add to spec.server:
spot: true - Spot/preemptible instances (AWS, Azure, GCE) to save cost
arm: true - ARM instances (Hetzner, AWS, GCE)
volumeSize: 50 - Extra storage in GB
Add to spec:
monitoring: { enabled: true } - Prometheus + Node Exporter
Naming Rules
metadata.name must be lowercase alphanumeric with hyphens only
- SSH port must be 22 or between 1024-65535
eula must be true
Server Lifecycle
# Generate a manifest interactively
minectl wizard
# Create a server (waits for startup by default)
minectl create -f server.yaml
# Verify the server is running after creation
minectl list -p hetzner -r fsn1
# Expected: server appears with a valid ID and status. If absent, check credentials and quota.
# List running servers
minectl list -p hetzner -r fsn1
# Connect via RCON for remote commands
minectl rcon -f server.yaml --id <server-id>
# Upload a plugin
minectl plugins -f server.yaml --id <server-id> -k ~/.ssh/id_rsa \
-p myplugin.jar -d /minecraft/plugins
# Update Minecraft version (edit version in manifest first)
minectl update -f server.yaml --id <server-id> -k ~/.ssh/id_rsa
# Delete the server
minectl delete -f server.yaml --id <server-id> -y
Error Recovery
| Symptom |
Likely cause |
Action |
create exits without a server ID |
Authentication failure |
Verify provider environment variables are exported (see references/cloud-providers.md) |
create fails with quota/limit error |
Cloud account quota exceeded |
Switch region, use a smaller size, or request a quota increase from the provider |
create succeeds but server absent from list |
Wrong region or provider flag |
Re-run minectl list with the exact -p and -r values from the manifest |
| Plugin upload fails |
SSH key mismatch |
Confirm -k points to the private key matching spec.server.ssh.publickeyfile |
| RCON connection refused |
RCON not enabled or wrong port |
Ensure rcon.enabled: true and the port in the manifest matches rcon.port |
Cloud Provider Selection
When helping a user choose a provider, consider:
- Budget: Civo, Hetzner, and DigitalOcean are cheapest. Use
spot: true on AWS/Azure/GCE for savings.
- Region needs: Check references/cloud-providers.md for available regions.
- Local testing: Use
multipass for local VMs with no cloud account needed.
Each provider requires specific environment variables for authentication. See references/cloud-providers.md for the full list.
References
- Cloud providers, credentials, and sizes: references/cloud-providers.md
- Full manifest schema: references/manifest-schema.md
- CLI command flags and details: references/cli-commands.md
1---2name: minectl3description: Use this skill for every message containing the word "minectl". Claude has zero built-in knowledge of minectl — it is an obscure, third-party CLI for deploying Minecraft servers to cloud providers. Without this skill, any response about minectl will be fabricated. This covers all minectl topics: manifests, create/delete/update commands, RCON troubleshooting, authentication errors, cloud provider selection, instance sizing, budget optimization, TPS tuning, plugin uploads, and edition choice. Do NOT trigger for Minecraft servers managed via Docker, Kubernetes, Ansible, Terraform, or Pulumi — only for minectl-based workflows.4---56# minectl78minectl creates and manages Minecraft servers on 15 cloud providers via declarative YAML manifests.910## Creating a Manifest1112Every operation starts with a manifest file:1314```yaml15apiVersion: minectl.ediri.io/v1alpha116kind: MinecraftServer17metadata:18 name: my-minecraft19spec:20 server:21 cloud: hetzner22 region: fsn123 size: cx2124 ssh:25 port: 2226 publickeyfile: ~/.ssh/id_rsa.pub27 fail2ban:28 bantime: 100029 maxretry: 330 port: 2556531 minecraft:32 java:33 openjdk: 2134 xmx: 2G35 xms: 2G36 rcon:37 password: changeme38 port: 2557539 enabled: true40 edition: papermc41 version: "1.21"42 eula: true43 properties: |44 max-players=2045 difficulty=normal46 motd=My Minecraft Server47```4849### Choosing an Edition5051| Edition | Best for |52|---------|----------|53| `java` | Vanilla experience, no mods |54| `papermc` | Performance + plugin support (recommended) |55| `spigot` | Bukkit plugin ecosystem |56| `craftbukkit` | Legacy Bukkit plugins |57| `fabric` | Lightweight mods |58| `forge` | Large mod packs |59| `purpur` | Paper + extra gameplay tweaks |60| `bedrock` | Cross-platform (mobile/console/PC) |61| `nukkit` | Java-based Bedrock server |62| `powernukkit` | Extended Nukkit |6364For proxy setups, use `kind: MinecraftProxy` with editions: `bungeecord`, `waterfall`, or `velocity`.6566### Edition-Specific Tuning6768Different editions need different server.properties and resource allocations. Getting these wrong causes crashes, kicks, or poor performance — this is where most new server admins struggle.6970**Forge / Fabric (modded servers):**71- Set `max-tick-time=90000` (or `-1` to disable). Modded servers regularly exceed the default 60s watchdog, especially during chunk generation or mod initialization. Leaving the default causes the server to kill itself under normal modded load.72- Set `allow-flight=true`. Many mods (Botania, Mekanism jetpacks, Elytra mods, etc.) trigger the vanilla flight detection. Without this, modded players get kicked constantly.73- Allocate generous heap: 8G minimum for light mods, 12G+ for heavy packs (100+ mods). Set `xms` equal to `xmx` to avoid expensive heap resizing under load.74- Always add `volumeSize: 50` (or more). Mod packs, world data with modded chunks, and backups consume significant disk. Running out of disk silently corrupts worlds.75- Upload mods to `/minecraft/mods` (not `/minecraft/plugins`).76- Enable monitoring (`monitoring.enabled: true`) — modded servers are resource-hungry and benefit from Prometheus metrics to catch memory/CPU issues early.7778**PaperMC / Spigot / CraftBukkit / Purpur (plugin servers):**79- Default `max-tick-time=60000` is usually fine.80- Keep `allow-flight=false` unless a specific plugin requires it.81- 2-4G heap is sufficient for up to 20 players with typical plugins.82- Upload plugins to `/minecraft/plugins`.83- PaperMC is the recommended default — it's the most performant fork and supports all Bukkit/Spigot plugins.8485**Bedrock / Nukkit / PowerNukkit:**86- No `java` block needed in the manifest (Bedrock is a native binary, not Java-based).87- Default port is `19132` (UDP), not `25565`.88- RCON is not available for Bedrock edition.89- Lower resource requirements: 1-2G RAM is typically sufficient.9091### Instance Sizing Guide9293| Use case | Players | Recommended RAM | Example sizes |94|----------|---------|----------------|---------------|95| Vanilla / Paper (casual) | 1-10 | 2-4 GB | Hetzner cx21, DO s-2vcpu-4gb |96| Paper with plugins | 10-20 | 4-8 GB | Hetzner cpx31, DO s-4vcpu-8gb, AWS t3.large |97| Forge/Fabric (light mods) | 1-10 | 8 GB | AWS t3.xlarge, Hetzner cpx41 |98| Forge/Fabric (heavy mods) | 5-15 | 16 GB+ | AWS m5.xlarge, Hetzner cpx51 |99| Proxy (BungeeCord/Velocity) | N/A | 1-2 GB | Smallest available |100101When using spot instances (`spot: true`), prefer regions with large capacity pools (e.g., `us-east-1` for AWS) to minimize interruption risk. Always warn users that spot instances can be terminated with 2 minutes notice — world backups are essential.102103### Security Recommendations104105Always include these in every manifest:106- `fail2ban` block under SSH config (prevents brute-force attacks)107- Strong RCON password (never deploy with "changeme")108- Consider `white-list=true` and `enforce-whitelist=true` for private servers109- `online-mode=true` to verify player accounts (prevents unauthorized access)110111### Optional Features112113Add to `spec.server`:114- `spot: true` - Spot/preemptible instances (AWS, Azure, GCE) to save cost115- `arm: true` - ARM instances (Hetzner, AWS, GCE)116- `volumeSize: 50` - Extra storage in GB117118Add to `spec`:119- `monitoring: { enabled: true }` - Prometheus + Node Exporter120121### Naming Rules122123- `metadata.name` must be lowercase alphanumeric with hyphens only124- SSH port must be 22 or between 1024-65535125- `eula` must be `true`126127## Server Lifecycle128129```bash130# Generate a manifest interactively131minectl wizard132133# Create a server (waits for startup by default)134minectl create -f server.yaml135136# Verify the server is running after creation137minectl list -p hetzner -r fsn1138# Expected: server appears with a valid ID and status. If absent, check credentials and quota.139140# List running servers141minectl list -p hetzner -r fsn1142143# Connect via RCON for remote commands144minectl rcon -f server.yaml --id <server-id>145146# Upload a plugin147minectl plugins -f server.yaml --id <server-id> -k ~/.ssh/id_rsa \148 -p myplugin.jar -d /minecraft/plugins149150# Update Minecraft version (edit version in manifest first)151minectl update -f server.yaml --id <server-id> -k ~/.ssh/id_rsa152153# Delete the server154minectl delete -f server.yaml --id <server-id> -y155```156157### Error Recovery158159| Symptom | Likely cause | Action |160|---------|--------------|--------|161| `create` exits without a server ID | Authentication failure | Verify provider environment variables are exported (see [references/cloud-providers.md](references/cloud-providers.md)) |162| `create` fails with quota/limit error | Cloud account quota exceeded | Switch region, use a smaller `size`, or request a quota increase from the provider |163| `create` succeeds but server absent from `list` | Wrong region or provider flag | Re-run `minectl list` with the exact `-p` and `-r` values from the manifest |164| Plugin upload fails | SSH key mismatch | Confirm `-k` points to the private key matching `spec.server.ssh.publickeyfile` |165| RCON connection refused | RCON not enabled or wrong port | Ensure `rcon.enabled: true` and the port in the manifest matches `rcon.port` |166167## Cloud Provider Selection168169When helping a user choose a provider, consider:170- **Budget**: Civo, Hetzner, and DigitalOcean are cheapest. Use `spot: true` on AWS/Azure/GCE for savings.171- **Region needs**: Check [references/cloud-providers.md](references/cloud-providers.md) for available regions.172- **Local testing**: Use `multipass` for local VMs with no cloud account needed.173174Each provider requires specific environment variables for authentication. See [references/cloud-providers.md](references/cloud-providers.md) for the full list.175176## References177178- **Cloud providers, credentials, and sizes**: [references/cloud-providers.md](references/cloud-providers.md)179- **Full manifest schema**: [references/manifest-schema.md](references/manifest-schema.md)180- **CLI command flags and details**: [references/cli-commands.md](references/cli-commands.md)