eqvps
No-KYC crypto VPS AI agents rent & run over MCP — 57 tools, pay USDC/USDT on Base/Eth/Polygon/Solana
Should I use this
Quality & Safety
Findings (1)
- LOWin get_vps_metrics
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"eqvps": {
"url": "https://mcp.eqvps.com/mcp"
}
}
}Remote endpoints
https://mcp.eqvps.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (27)
🟢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 authentication needed. Use this first to pick a `product` slug and an `os_id` for `order_vps`. Each plan lists `plans[]` (monthly and annual `plan_id`); an active automatic offer shows up as `plans[].promo` and in `meta.promotions`. PROMO until 2026-10-31 23:59 Europe/Kyiv: -25% on ANNUAL billing, first year only, applied automatically (no code) to windows-medium ($171/yr), windows-small-ip ($252/yr) and windows-medium-ip ($324/yr); renewal at the regular annual price; windows-small not included — order with period="year".
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡register_account(first_name, last_name, email)
Create a new EQVPS customer account with first_name, last_name, email. Returns a bearer `token` — STORE IT SAFELY: it is your only credential. Send it as `Authorization: Bearer <token>` on every following request. No password or human step is needed. If you may lose the token, call `set_password` once (while authenticated) to also enable email+password `login` as a backup.
Input Schema
{
"type": "object",
"properties": {
"first_name": {
"type": "string",
"minLength": 1
},
"last_name": {
"type": "string",
"minLength": 1
},
"email": {
"type": "string",
"format": "email"
}
},
"required": [
"first_name",
"last_name",
"email"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪login(email, password)
Log in with email + password. Returns a bearer `token`. NOTE: accounts created via register_account have NO password by default — reuse the token from register instead. If you have no password, first call `set_password` (while still authenticated with your register token), or use the human email-OTP flow in a browser.
Input Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email"
},
"password": {
"type": "string",
"minLength": 1
}
},
"required": [
"email",
"password"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡set_password(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 chars, letters+numbers) — no current password the first time. If a password was already set, this returns 409 (use change-password instead).
Input Schema
{
"type": "object",
"properties": {
"password": {
"type": "string",
"minLength": 8
}
},
"required": [
"password"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪whoami
Return the authenticated account profile (id, name, email). Use to verify the bearer token is valid.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_balance
Return the account's prepaid credit balance and currency. `order_vps` spends from this balance automatically when it is sufficient.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡topup_balance(amount)
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.
Input Schema
{
"type": "object",
"properties": {
"amount": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"amount"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢order_vps(product, os_id, hostname, ssh_key, period, ...)
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 automatically; if the chosen country has no free capacity for that plan the call fails with 409 `location_unavailable` (nothing is charged) and `available` lists the countries that can take it. Optional `period` ("month" by default, or "year" for annual billing) or an explicit `plan_id` from list_plans `plans[]`; an active automatic offer (`plans[].promo`) is applied to the first invoice and the response then carries `promo`. Windows plans (windows-*) accept only the Windows Server 2022 image, ignore `ssh_key`, and are reached over RDP as Administrator (see get_vps_status → access); the licence is BYOL. Branching on the response: • `paid_from_balance: true` → the prepaid balance covered it; the server is provisioning. Poll `get_vps_status` until status is `active` and the VM is reachable. • `paid_from_balance: false` → balance was insufficient; an unpaid `invoice` is returned. Call `pay_invoice` with `invoice.id` to get a crypto `checkout_url`, OR `topup_balance` then re-order. PROMO until 2026-10-31 23:59 Europe/Kyiv: -25% on ANNUAL billing, first year only, applied automatically (no code) to windows-medium ($171/yr), windows-small-ip ($252/yr) and windows-medium-ip ($324/yr); renewal at the regular annual price; windows-small not included — order with period="year".
Input Schema
{
"type": "object",
"properties": {
"product": {
"type": "string",
"minLength": 1
},
"os_id": {
"type": "integer",
"exclusiveMinimum": 0
},
"hostname": {
"type": "string"
},
"ssh_key": {
"type": "string"
},
"period": {
"type": "string",
"enum": [
"month",
"year"
]
},
"plan_id": {
"type": "integer",
"exclusiveMinimum": 0
},
"location": {
"type": "string",
"enum": [
"de",
"fi"
],
"description": "Optional server country: \"de\" (Germany) or \"fi\" (Finland). Omit for automatic placement."
}
},
"required": [
"product",
"os_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪pay_invoice(invoice_id)
Initiate 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.
Input Schema
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer",
"exclusiveMinimum": 0
}
},
"required": [
"invoice_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢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.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_vps_status(service_id, reveal)
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). ROOT PASSWORD (keyless VPS): call with `reveal: true` to retrieve it. It is shown ONCE, and 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 password; just call again with `reveal: true` in ~30-60s (the one-time reveal is NOT spent until a password is actually returned — no reset or reboot needed). Without `reveal`, `password_available: true` means a password is waiting to be revealed. If you supplied an SSH key at order time, log in with that key (no password); `ssh_ready: false` means the VM is still booting — retry shortly. Use `reset_password` ONLY if the password is lost. Poll this (without `reveal`) after `order_vps` to watch provisioning reach `active`. NAT plans (no dedicated IP): the SSH `port` shown is an EXTERNAL DNAT port forwarded to the VM internal port 22 (`internal_port` in the response). If you configure a host firewall, allow the INTERNAL port — `ufw allow OpenSSH` — NOT the external port, or `ufw enable` will lock SSH out. See `firewall_note` in the response.
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
},
"reveal": {
"type": "boolean"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪power_vps(service_id, action)
Power-control a VPS: `start`, `stop` or `reboot`.
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
},
"action": {
"type": "string",
"enum": [
"start",
"stop",
"reboot"
]
}
},
"required": [
"action"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡set_hostname(service_id, 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 agent active; otherwise the call fails with 409 `agent_unavailable` and nothing is changed. Your password, SSH host keys and files are not touched.
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
},
"hostname": {
"type": "string",
"minLength": 1
}
},
"required": [
"hostname"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢reset_password(service_id, confirm)
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 ONLY if the password was lost — NOT because SSH was not instant on a fresh order (a new VM needs ~60s to boot; poll get_vps_status with reveal:true instead). New password is NOT in this response — read it ONCE via get_vps_status (reveal:true); also emailed.
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
},
"confirm": {
"type": "string"
}
},
"required": [
"confirm"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢reinstall_vps(service_id, os_id, confirm)
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`.
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
},
"os_id": {
"type": "integer",
"exclusiveMinimum": 0
},
"confirm": {
"type": "string"
}
},
"required": [
"os_id",
"confirm"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_vps_metrics(service_id, timeframe)
Time-series resource metrics (CPU %, memory, network, disk) for a VPS. `timeframe` ∈ hour|day|week|month (default hour).
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
},
"timeframe": {
"type": "string",
"enum": [
"hour",
"day",
"week",
"month"
]
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴cancel_service(service_id, type, confirm, reason)
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 (see get_vps_status). Use end_of_period unless you explicitly intend to wipe the server now. On `immediate`, the unused portion of the already-paid period is refunded to your account balance (see `refund_amount` in the response).
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
},
"type": {
"type": "string",
"enum": [
"end_of_period",
"immediate"
]
},
"confirm": {
"type": "string"
},
"reason": {
"type": "string",
"minLength": 3,
"maxLength": 500,
"description": "REQUIRED: why this VPS is being cancelled (e.g. project finished, too expensive, no longer needed)."
}
},
"required": [
"reason"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delegate_service(service_id, email, expires_days)
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.
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
},
"email": {
"type": "string",
"format": "email"
},
"expires_days": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 365
}
},
"required": [
"email"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪accept_delegation(token)
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.
Input Schema
{
"type": "object",
"properties": {
"token": {
"type": "string",
"minLength": 1
}
},
"required": [
"token"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_delegations
List outgoing delegations you (the owner) have granted on your services — who has operator access to what, and its status.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_delegated_to_me
List services other owners have delegated operator access to you — the VPS you can operate but don't own.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢revoke_delegation(delegation_id)
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.
Input Schema
{
"type": "object",
"properties": {
"delegation_id": {
"type": "integer",
"exclusiveMinimum": 0
}
},
"required": [
"delegation_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_ticket(subject, message, service_id)
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.
Input Schema
{
"type": "object",
"properties": {
"subject": {
"type": "string",
"minLength": 1
},
"message": {
"type": "string",
"minLength": 1
},
"service_id": {
"type": "string",
"minLength": 1,
"description": "Service code as returned by list_vps/order_vps, e.g. \"68J67T5\" (a plain numeric id is also accepted)."
}
},
"required": [
"subject",
"message"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_tickets
List your support tickets with status and last-message info. `last_message_author: "staff"` means support has replied since you last looked.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡get_ticket(ticket_code)
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.
Input Schema
{
"type": "object",
"properties": {
"ticket_code": {
"type": "string",
"minLength": 1
}
},
"required": [
"ticket_code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡reply_ticket(ticket_code, message)
Post a reply on one of your tickets. Use the ticket code from create_ticket / list_tickets.
Input Schema
{
"type": "object",
"properties": {
"ticket_code": {
"type": "string",
"minLength": 1
},
"message": {
"type": "string",
"minLength": 1
}
},
"required": [
"ticket_code",
"message"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡close_ticket(ticket_code, rating, comment)
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.
Input Schema
{
"type": "object",
"properties": {
"ticket_code": {
"type": "string",
"minLength": 1
},
"rating": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"comment": {
"type": "string"
}
},
"required": [
"ticket_code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence