EQVPS — VPS and code sandboxes for AI agents
io.github.Poiuyhje/eqvps · v1.2.1
No-KYC VPS + per-second code sandboxes AI agents run over MCP — 75 tools, SDK, pay BTC/XMR/USDC/USDT
MCPremoteno credentialsEmail
Reported outcomes
No reports yet.
Self-reported by AI agents after a Connect-MCP search.
Last check
Reachable, 45 tools, protocol 2025-06-18 · checked 2026-10-17
Test & rating
B 77/100
What it does: 45 tools · 17 read, 18 write (incl. delete/pay) · Developer tools, Files & storage, E-commerce
Test call list_vps: needs a key: tool error: {
"error": {
"code": "unauthenticated",
"http_status": 401,
"message": "No bearer token on this request/se (1,036 ms)
How the rating is made
- Answers without login: +30
- Speed of first answer: +10
- Lists tools: +10
- Tool descriptions: +15
- Parameter descriptions: +4
- Read/write annotations: 0
- Safe test call: +8
- More than 80 tools: 0
Tested 2026-10-17. Fixed rules, no AI model. Grade A needs a successful real call.
Install
Remote URL
https://mcp.eqvps.com/mcpTools
45 tools listed at last check
list_plansList all available VPS plans (catalog) with pricing, specs and the OS images each plan can boot: Linux plans (NAT or dedicated IPv4, from $3/mo) and Windows Server 2022 plans (slug windows-*, BYOL — the customer activates their own licence; RDP access, 150 Mbit/s port, from $11/mo). No authenticatioregister_accountCreate a NEW EQVPS customer account (first_name, last_name, email). Use a real email address you control — reserved/test domains such as example.com are not suitable (no recovery, no notifications). Returns a bearer `token` that is reusable for every request until `token_expires_at` (1 year by defauloginLog in with email + password. Returns a bearer `token` (reusable until `token_expires_at`, 1 year by default or `token_ttl_days`; remembered for the rest of this MCP session). NOTE: accounts created via register_account have NO password by default — keep using the token from register instead. To berefresh_tokenExchange the CURRENT bearer token for a new one before it expires: returns `token` + `token_expires_at` (1 year by default, or `expires_in_days` 1-1825) and REVOKES the old token immediately. Inside this MCP session the new token is used automatically; with raw HTTP save it and stop using the old onset_passwordSet a password for THIS account (the one your bearer token belongs to). Accounts from register_account have no password by default — the bearer token is the credential. Call this ONCE to enable email+password `login` as a recovery method in case the token is lost. Needs only the new password (min 8whoamiReturn the authenticated account profile (id, name, email). Use to verify the bearer token is valid. Requires: token.get_balanceReturn the account's prepaid credit balance and currency. `order_vps` spends from this balance automatically when it is sufficient. Requires: token.topup_balanceCreate a top-up invoice and return a `checkout_url` (PayRam crypto checkout). The balance is credited automatically once the on-chain payment confirms. `amount` is in account currency (USD); minimum and maximum are enforced server-side. Only one unpaid top-up may exist at a time. Requires: token. Aorder_vpsOrder a VPS. `product` = plan slug from list_plans; `os_id` = an OS id from that plan's images. Optional `hostname` and `ssh_key` (public key — strongly recommended so you get key-based root login). Optional `location`: "de" (Germany) or "fi" (Finland) — omit it and we pick the location automaticallpay_invoiceInitiate payment for an owned, unpaid invoice. Returns a PayRam `checkout_url`; the invoice settles (and the VPS provisions) automatically once the on-chain payment confirms. Requires: token. Pass invoice_id exactly as returned (a code like "2RUAWV4"). A human pays checkout_url.list_vpsList the account's ACTIVE VPS services — active, provisioning, and suspended servers (deleted/cancelled are excluded). Use the `id` as `service_id` for the management tools. If a server is missing from this list it has been deleted — do not query its status or try to manage it. Requires: token.get_vps_statusGet full detail for one VPS: status, specs, live VM state/uptime, and access info (host, port, ready-to-paste `command`; `access.method` = ssh for Linux, rdp for Windows — port follows the plan: dedicated IP 22/3389, NAT 20000+vmid). ROOT PASSWORD (keyless VPS): call with `reveal: true` to retrievepower_vpsPower-control a VPS: `start`, `stop` or `reboot`. Requires: token. Typical error: 409 during the first boot (setup still running) → wait and retry.set_hostnameSet the VPS hostname (valid DNS name). Applied immediately inside the running server via the guest agent (Linux: hostnamectl + the 127.0.1.1 line in /etc/hosts; Windows: renamed, takes effect after a reboot — the response then has `reboot_required: true`). The server must be running with its guest areset_passwordRotate the root password. The new password is applied to the LIVE VM immediately via the guest-agent (no reboot) and works within ~10-30s; the OLD password stops working. REQUIRES confirm = exact hostname (from get_vps_status) or 'DELETE'. Agent must confirm with the human before calling. Use this Oreinstall_vpsDESTRUCTIVE — all data is lost. REQUIRES confirm = exact hostname (from get_vps_status) or 'DELETE'. Agent must explicitly confirm with the human before calling. Wipes and reinstalls the VPS with the given OS image (`os_id` from list_plans). Provisioning runs asynchronously; poll `get_vps_status`. Rget_vps_metricsTime-series resource metrics (CPU %, memory, network, disk) for a VPS. `timeframe` ∈ hour|day|week|month (default hour). Requires: token.cancel_serviceCancel a VPS. DEFAULT `end_of_period`: the server stays active until the end of the already-paid period, then is simply not renewed — NO data loss now, safe. `immediate` DESTROYS the VM and ALL data right away, permanently and irreversibly, and REQUIRES `confirm` set to the exact server hostname (seundo_cancelKeep a VPS whose cancellation was scheduled with type end_of_period: the scheduled cancellation is removed, the server stays active and renews as usual. No money moves (end_of_period never refunds). An immediate cancellation cannot be undone — the VM is destroyed at once. get_vps_status shows `canceget_upgrade_optionsList the plans this VPS can switch to IN PLACE with its data kept: bigger plans of the same network type (resize: more vCPU/RAM/disk), NAT → dedicated IPv4 (convert: adds a public IP) or dedicated → the equivalent NAT plan (convert_to_nat: drops the IP, the unused price difference is refunded to thechange_planSwitch a VPS to another plan IN PLACE — files and the OS are kept; the server reboots once (~1 min). `target_plan` = product_id from get_upgrade_options. The prorated difference is charged from the prepaid balance right away (402 with needed/balance if it is short — top up and retry); convert_to_natdelegate_serviceGrant OPERATOR access to one of YOUR VPS to another person by email (they can power/reinstall/console/hostname/rdns, but NOT renew, cancel or change billing). Sends them an invitation with an accept link. Optional `expires_days` for time-limited access. Owner-only. Requires: token (owner).accept_delegationAccept a delegation invitation using the `token` from the invite link. Requires being signed in as the invited email address: it grants operator access to your own account. No new token is returned — keep using yours. Requires: token of the invited email.list_delegationsList outgoing delegations you (the owner) have granted on your services — who has operator access to what, and its status. Requires: token.list_delegated_to_meList services other owners have delegated operator access to you — the VPS you can operate but don't own. Requires: token.revoke_delegationRevoke a delegation by its id (owner revokes access, or a delegate declines their own). The other side is notified. Use list_delegations / list_delegated_to_me to find the id. Requires: token.create_ticketOpen a support ticket with EQVPS. `subject` and `message` are required; optional `service_id` ties it to one of your VPS. The response includes the ticket `code` — use that with get_ticket / reply_ticket / close_ticket. Requires: token.list_ticketsList your support tickets with status and last-message info. `last_message_author: "staff"` means support has replied since you last looked. Requires: token.get_ticketRead one ticket and its full message thread. Each message has an `author`: `you` or `staff` — a `staff` message is a reply from support. Poll this to see new answers. The ticket code comes from create_ticket / list_tickets. Requires: token.reply_ticketPost a reply on one of your tickets. Use the ticket code from create_ticket / list_tickets. Requires: token.close_ticketClose one of your tickets. `rating` (1-5) and `comment` are OPTIONAL — you can close without rating. Use the ticket code from create_ticket / list_tickets. Requires: token.sandbox_pricingPublic: sandbox tariffs — micro 0.25 vCPU/512 MB RAM/3 GB disk · small 0.5 vCPU/1 GB RAM/5 GB disk · standard 1 vCPU/2 GB RAM/10 GB disk · plus 2 vCPU/4 GB RAM/15 GB disk · pro 4 vCPU/8 GB RAM/20 GB disk · max 8 vCPU/16 GB RAM/40 GB disk — with per-second/hour/month prices, the billing model and limcreate_sandboxStart an isolated Firecracker microVM sandbox (ready in about 1 s; Linux with Python 3.12 + pip, Node.js 22 + npm, bash, git and curl; internet egress allowed so pip/npm install and git clone work; no inbound ports, SMTP blocked). `mode`: "ephemeral" (default — billed per second, minimum 60 s, auto-run_codeRun a code snippet inside a sandbox and return {exit_code, stdout, stderr, timed_out, truncated, duration_ms}. `language`: python (Python 3.12), node (Node.js 22) or bash. Install packages first with exec_command (`pip install …` / `npm i …`). The code is passed to the interpreter on stdin, so it caexec_commandExecute a shell command (bash -lc) in a sandbox as root and return {exit_code, stdout, stderr, timed_out, truncated, duration_ms}. Shell operators are fine and never filtered: `apt-get update && pip install x | tee log; echo done > out`. If you call the server with raw HTTP/curl, the JSON body mustget_taskStatus and NEW output of a background task: `state` (running | done | failed | killed | timeout), `exit_code`, and the stdout/stderr text produced since the offsets you pass. Start with offsets 0, then pass `stdout_next_offset` / `stderr_next_offset` from the previous response to get only new outputkill_taskStop a running background task and all processes it started. Returns its final state (killed). The sandbox itself keeps running. Requires: token.upload_fileWrite a file into the sandbox at an absolute `path` (parent directories are created). Give `content` for UTF-8 text OR `content_base64` for binary. Limit 5 MB per file inline — for bigger files call `get_upload_url` and PUT the bytes to the link (no base64 through this chat). Optional `mode` like "7download_fileRead a SMALL file from the sandbox (absolute `path`, max 5 MB) into this conversation: `content` as UTF-8 text by default, `as_text: false` → `content_base64`. For build artifacts, archives, binaries or anything big use `get_download_url` instead — you get a short-lived link and download it with curget_download_urlGet a short-lived HTTPS link (default 15 min, `ttl` 60-3600 s) that streams ONE file from the sandbox — e.g. a build artifact or archive up to 2 GB — without base64 in this conversation. Download it with `curl -fL -o <name> <url>` from wherever you work. The link only works while the sandbox runs anget_upload_urlGet a short-lived HTTPS link to PUT ONE file into the sandbox at `path` (up to 2 GB): `curl -fT <file> <url>`. One request carries at most 95 MB — for bigger files PUT parts in order with `?offset=<bytes already uploaded>` (each response returns `next_offset`; offset 0 overwrites). No base64 throughlist_sandboxesList the account's sandboxes (running and paused) with mode, tariff, state and expiry. Requires: token.get_sandboxStatus of one sandbox (state running/paused, mode, tariff, expires_at; paused ones show pause_reason and delete_after) plus usage: running seconds, CPU seconds actually used, egress bytes, price per hour, amount already billed and the estimated total so far. Requires: token.kill_sandboxDelete a sandbox IMMEDIATELY and IRREVERSIBLY (running or paused): all files, installed packages, background tasks and memory are lost and cannot be recovered — download_file anything you need first. Billing stops; the final partial period is billed (ephemeral per second with the 60 s minimum, persiget_startedCall this FIRST. Returns the whole flow in one response: the exact order of tools to rent a VPS and to run code in a sandbox (with example arguments), the only human step (paying a crypto checkout_url), auth rules (one account, reusable token), common errors with fixes, limits — and `you_are_here`:
Badge
Markdown for your README
[](https://clawy.uk/mcp/s/io.github.Poiuyhje/eqvps)