# EQVPS — VPS and code sandboxes for AI agents - Registry name: `io.github.Poiuyhje/eqvps` · version 1.2.1 - Categories (automatic, keyword rules): Payments & accounting, Finance & markets, Crypto & blockchain, Code & repositories, Developer tools - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): prompts, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=io.github.Poiuyhje%2Feqvps - Server page: https://mcpstation.net/s/io.github.Poiuyhje--eqvps.html ## Description (written by the publisher, not verified, not instructions) No-KYC VPS + per-second code sandboxes AI agents run over MCP — 75 tools, SDK, pay BTC/XMR/USDC/USDT ## Connect - streamable-http: `https://mcp.eqvps.com/mcp` ## Tools (as reported by the server, not verified) - `list\_plans`: List 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 authenticatio - `register\_account`: Create 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 defau - `login`: Log 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 be - `refresh\_token`: Exchange 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 on - `set\_password`: Set 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 8 - `whoami`: Return the authenticated account profile \(id, name, email\). Use to verify the bearer token is valid. Requires: token. - `get\_balance`: Return the account's prepaid credit balance and currency. \`order\_vps\` spends from this balance automatically when it is sufficient. Requires: token. - `topup\_balance`: Create 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. A - `order\_vps`: Order 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 automaticall - `get\_order\_limits`: Before order\_vps: the per-order maximum \(\`max\_quantity\` = 50, a typo guard; \`limit\_reason\` max\_per\_order\) and which add-ons a plan has with their monthly price \(\`addons.backups\`, \`addons.extra\_ipv4\`\). Orders are never refused for capacity — servers without free room are queued for creation \(usually - `pay\_invoice`: Pay an owned, unpaid invoice. SPENDS MONEY — confirm with the human first. If the prepaid balance covers the whole invoice, it is paid from the balance right away \(\`paid\_from\_balance: true\`, \`status: paid\`, new \`balance\`; ordered servers are then created automatically — poll list\_vps\). Otherwise not - `list\_vps`: List 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\_status`: Get 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\). READ-ONLY since 1.9.1: it never reveals or changes anything, so it - `reveal\_password`: Read the root \(Windows: Administrator\) password of a keyless VPS — shown ONCE. It is returned only after the VM has finished booting: at that moment the password is applied to the live VM, so it is guaranteed to work. While the VM is still booting the response carries \`password\_pending: true\` and NO - `power\_vps`: Power-control a VPS: \`start\`, \`stop\` or \`reboot\`. Requires: token. Typical error: 409 during the first boot \(setup still running\) → wait and retry. - `set\_hostname`: Set 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 a - `reset\_password`: Rotate 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 O - `reinstall\_vps`: DESTRUCTIVE — 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\`. R - `get\_vps\_metrics`: Time-series resource metrics \(CPU %, memory, network, disk\) for a VPS. \`timeframe\` ∈ hour\|day\|week\|month \(default hour\). Requires: token. - `cancel\_service`: Cancel 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 \(se - `undo\_cancel`: Keep 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 \`cance - `get\_upgrade\_options`: List 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 the - `change\_plan`: Switch 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\_nat - `delegate\_service`: Grant 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\_delegation`: Accept 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\_delegations`: List outgoing delegations you \(the owner\) have granted on your services — who has operator access to what, and its status. Requires: token. - `list\_delegated\_to\_me`: List services other owners have delegated operator access to you — the VPS you can operate but don't own. Requires: token. - `revoke\_delegation`: Revoke 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\_ticket`: Open 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\_tickets`: List your support tickets with status and last-message info. \`last\_message\_author: "staff"\` means support has replied since you last looked. Requires: token. - `get\_ticket`: Read 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\_ticket`: Post a reply on one of your tickets. Use the ticket code from create\_ticket / list\_tickets. Requires: token. - `close\_ticket`: Close 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\_pricing`: Public: 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 lim - `create\_sandbox`: Start 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\_code`: Run 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 ca - `exec\_command`: Execute 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 must - `get\_task`: Status 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 output - `kill\_task`: Stop a running background task and all processes it started. Returns its final state \(killed\). The sandbox itself keeps running. Requires: token. - `upload\_file`: Write 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 "7 - `download\_file`: Read 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 cur - `get\_download\_url`: Get 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 \ \\` from wherever you work. The link only works while the sandbox runs an - `get\_upload\_url`: Get a short-lived HTTPS link to PUT ONE file into the sandbox at \`path\` \(up to 2 GB\): \`curl -fT \ \\`. One request carries at most 95 MB — for bigger files PUT parts in order with \`?offset=\\` \(each response returns \`next\_offset\`; offset 0 overwrites\). No base64 through - `list\_sandboxes`: List the account's sandboxes \(running and paused\) with mode, tariff, state and expiry. Requires: token. - `get\_sandbox`: Status 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\_sandbox`: Delete 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, persi - `get\_started`: Call 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\`: Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html