# VPS servers

Your own Ubuntu Linux server with root, the plan's resources and full control from the dashboard or over MCP.

Source: https://ardumaker.com/en/docs/vps/

- Category: Servers and infrastructure
- Status: Available
- Requirements: A company on ArduMaker with no overdue charges; Being a company admin to create, resize, start, stop or move the VPS; A plan available to the company (its `elegibilidad` block says so)
- MCP tools (Read only): `listar_vps`, `listar_todos_los_vps`, `ver_vps`, `ver_estado_vps`, `listar_planes_vps`, `ver_opciones_vps`, `ver_funciones_vps`, `ver_funciones_por_sistema`
- MCP tools (Write or modify): `crear_vps`, `editar_vps`, `cambiar_plan_vps`
- MCP tools (Destructive): `controlar_vps`

## What can you do with it?

An ArduMaker VPS is a Linux server that belongs to the company: an isolated system container running Ubuntu 22.04, with `root` access and the resources of the chosen plan. Everything else is installed on top of it: apps, databases, Git deploys, services and scheduled tasks.

- Create a server choosing the plan, the location and the storage type (`nvme`, `ssd` or `hdd`, depending on what the location offers).
- Log in over SSH as `root` or as `admin` (with sudo), with random passwords unique to that VPS.
- Start, stop and restart the server, and move it to another plan (CPU, RAM and disk).
- Rename it, transfer it to another company and decide which members can see it (allowed and excluded lists).
- See its live status: CPU, memory, disk, uptime and running services.
- Know which features it supports given the operating system its agent reports.

## When should you use it?

- You need a server with `root` to deploy an application, an API or a website.
- You want to install [PostgreSQL](https://ardumaker.com/en/docs/postgresql), [MySQL](https://ardumaker.com/en/docs/mysql), [Redis](https://ardumaker.com/en/docs/redis), [n8n](https://ardumaker.com/en/docs/n8n) or [WordPress](https://ardumaker.com/en/docs/wordpress) without maintaining the machine by hand.
- You want an AI agent to operate the infrastructure over MCP with the same permissions you have in the dashboard.

## How does it work in ArduMaker?

Creating a VPS answers right away with the `creating` status. Provisioning runs in the background for a few minutes and can resume: if something is interrupted, it continues from the last saved status.

1. `creating`: the container is launched with Ubuntu 22.04 and the plan's CPU and memory limits; then the plan's disk size is applied to the root disk.
2. `create_api`: the ArduMaker agent is installed inside; the platform reads the status and runs operations through it.
3. `assigning_port`: the VPS gets its own DNS name and the private path to the agent is set up.
4. `updating_system`: `apt-get update`, `upgrade` and `autoremove`, then a container restart.
5. `installing_base_tools`: `sudo`, `curl`, `openssh-server`, `ca-certificates`, `python3-venv`, `python3-pip`, Node.js LTS with npm and `nginx`; a random password for `root` and the SSH policy.
6. `creating_user`: the `admin` user with sudo and a random password that must be changed at first login.
7. `active`: the VPS is ready. ArduMaker opens SSH for 6 hours and sends the welcome email with the server, port, user, initial password and a ready-to-paste `ssh` command.

The platform can also create the VPS from an up-to-date base image. In that path the intermediate statuses are `importing_base`, `customizing` (new SSH host keys, its own random passwords, hostname) and `verifying`. If verification fails, the container is destroyed and created through the normal path: a half-built VPS is never delivered.

Every new VPS is born with the container permissions Docker needs (nesting and system call interception), without being privileged. The Docker daemon is not installed by itself: it is installed when you ask for it or when an app needs it. If the host does not accept those permissions, the VPS is created anyway, more restricted, and Docker shows as unsupported.

## What actually changes?

| What | Where / how |
| --- | --- |
| System | Ubuntu 22.04 updated with `apt-get upgrade` |
| Tools | `sudo`, `curl`, `openssh-server`, `python3-venv`, `python3-pip`, Node.js LTS, npm and `nginx` |
| `root` user | Random password stored encrypted; the first interactive SSH login asks for a new one |
| `admin` user | With sudo and a random password expired from the start (`chage -d 0`) |
| SSH | Password and keys enabled; `root` may log in with a password according to the platform policy |
| Login banner | ArduMaker MOTD; Ubuntu's default MOTD is disabled |
| Web | `nginx` installed with its default configuration: it is the internal web server domains arrive at |

> **INFO:** Provisioning passwords are not written to any creation log. They only travel in the welcome email, which is meant for the first login.

## VPS statuses

| Status | Meaning |
| --- | --- |
| `creating` … `creating_user` | Creation in progress (see the steps) |
| `active` | Ready to use |
| `stopped` | Stopped |
| `migrating` | Being moved to another machine |
| `errored` | Creation could not finish |
| `deleting` / `dead` | Deletion in progress or finished |

## Deletion and final copy

When a VPS is deleted a final copy is kept, visible and downloadable only by company admins. Its term depends on the reason: 90 days if it was deleted for non-payment; while the account stays open if the customer deleted it (who can ask for it to be erased); 30 days if the company was closed. Admins get an email 7 days before it is erased.

> **PELIGRO:** Deleting the VPS removes all its apps, repos and terminals. It is not done over MCP.

## Diagram

**Creating a VPS**

```text
Request (dashboard or `crear_vps`; answers `creating`)
  ↓
ArduMaker backend (resumable creation queue)
  ↓
Host (Ubuntu 22.04 container with the plan's CPU, RAM and disk)
  ↓
ArduMaker agent (installed inside the VPS)
  ↓
Update and tools (apt, Node.js, nginx, SSH)
  ↓
Users (`root` and `admin` with random passwords)
  ↓
active (SSH open for 6 h and welcome email)
```

## Expected result

The VPS shows as `active` in the dashboard and in `listar_vps`. `ver_estado_vps` returns, under `system_status`, CPU, memory, disk, uptime and services read from the server itself.

- To log in, use the `ssh` command from the welcome email while the 6-hour window is open. Afterwards it is reopened from the VPS port management.
- `ver_funciones_vps` confirms which features are available on that system before installing anything.

## Errors and troubleshooting

| Symptom | Cause and what to do |
| --- | --- |
| `crear_vps` answers 409 | The chosen location filled up between the lookup and the creation. Pick another one with `ver_opciones_vps`; do not retry the same. |
| The plan is listed but cannot be created | `elegibilidad.puede` is `false` and `elegibilidad.codigo` explains why (free server already used, school out of slots). Creating anyway fails with that code. |
| `empresa_en_mora` | The company has an overdue charge: nothing new is created until it is settled. |
| `funcion_no_disponible` | The feature does not run on that VPS's system (for example Docker on Ubuntu 16.04). Retrying does not help. |
| The agent cannot see the new VPS | The MCP connection is scoped to specific VPS: the owner has to add it to the connection's scope. |

Creation progress is followed with `ver_vps` (status field). If a creation call was cut off and you do not know whether it went through, repeat it with the same `idempotency_key` and the same arguments: it returns the original VPS instead of creating another one.

> **PRECAUCION:** `stop` and `restart` interrupt everything running on the machine, including open web terminals, which are marked as lost by reboot.

## MCP access

The whole VPS lifecycle except deletion can be operated over MCP with the permissions of the person who authorized the agent. Full reference at [/mcp/docs](https://ardumaker.com/en/mcp/docs) and in the [/mcp/vps](https://ardumaker.com/en/mcp/vps) domain.

| Kind | Tools |
| --- | --- |
| Read | `listar_vps`, `listar_todos_los_vps`, `ver_vps`, `ver_estado_vps`, `listar_planes_vps`, `ver_opciones_vps`, `ver_funciones_vps`, `ver_funciones_por_sistema` |
| Modify (admins only) | `crear_vps`, `editar_vps`, `cambiar_plan_vps` |
| Destructive (admins only) | `controlar_vps` with `stop` or `restart` |

> **INFO:** Deleting an entire VPS does not exist over MCP, whatever the agent's scope: it is done only from the dashboard.

An agent authorized as read-only sees the read tools but not the ones that modify. Before `crear_vps`, the agent should check `elegibilidad` in `listar_planes_vps` and, if the location matters, `ver_opciones_vps`.

## Related features

- [VPS plans](https://ardumaker.com/en/docs/planes-vps/)
- [Web terminal](https://ardumaker.com/en/docs/terminal-web/)
- [Linux users](https://ardumaker.com/en/docs/usuarios-linux/)
- [Firewall and ports](https://ardumaker.com/en/docs/firewall-y-puertos/)
- [Backups](https://ardumaker.com/en/docs/backups/)
- [Monitoring](https://ardumaker.com/en/docs/monitorizacion/)
