poiuyhje avatar

EQVPS — VPS and code sandboxes for AI agents

poiuyhje/eqvps-mcp

Connects Claude to EQVPS, a no-KYC VPS host designed for autonomous agents. Your AI can call register_account to create its own account, list_plans to browse offerings, topup_balance to generate a crypto payment invoice, then order_vps to spin up servers. Once running, the agent gets full control: power_vps for reboots, reinstall_vps for OS changes, get_vps_status for SSH credentials, cancel_service to tear down. Payment is crypto-only (USDC/USDT) via prepaid balance. Reach for this when you want an agent to provision and manage its own compute without human gatekeeping. The one manual step is funding the initial balance; after that, it's hands-off.

tools
47
transport
HTTP
last updated
Oct 6, 2026

Install

From registry metadata
$ npx add-mcp https://mcp.eqvps.com/mcp --name eqvps

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http eqvps https://mcp.eqvps.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 47 tools

Verified live against the running server on Nov 6, 2026.

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 $1...

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 $1...

No parameters. Call it with no arguments.

register_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_expir...4 params

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_expir...

Parameters* required
email*string
Required. Real email address you control (login, recovery and service emails), e.g. "ops@yourcompany.com". Reserved/test domains such as example.com are rejected in practice.
first_name*string
Required. Account holder's first name, 1+ characters, e.g. "Alex".
last_name*string
Required. Account holder's last name, 1+ characters, e.g. "Smith".
token_ttl_daysinteger
Optional. Token lifetime in days (default 365).
loginLog 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 r...3 params

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 r...

Parameters* required
email*string
Required. Email of an existing account, e.g. "ops@yourcompany.com".
password*string
Required. Account password set earlier with set_password (accounts from register_account have none by default).
token_ttl_daysinteger
Optional. Token lifetime in days (default 365).
refresh_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 an...1 params

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 an...

Parameters* required
expires_in_daysinteger
Optional. Lifetime of the NEW token in days, integer 1–1825 (default 365).
set_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 t...1 params

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 t...

Parameters* required
password*string
Required. New account password: at least 8 characters with letters and numbers, e.g. "Rainy-Harbor-2026".
whoamiReturn the authenticated account profile (id, name, email). Use to verify the bearer token is valid. Requires: token.

Return the authenticated account profile (id, name, email). Use to verify the bearer token is valid. Requires: token.

No parameters. Call it with no arguments.

get_balanceReturn the account's prepaid credit balance and currency. `order_vps` spends from this balance automatically when it is sufficient. Requires: token.

Return the account's prepaid credit balance and currency. `order_vps` spends from this balance automatically when it is sufficient. Requires: token.

No parameters. Call it with no arguments.

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 ti...1 params

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 ti...

Parameters* required
amount*number
Required. Top-up amount in USD (account currency), number 3–10000, e.g. 25. The checkout shows the crypto amount.
order_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 th...11 params

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 th...

Parameters* required
addonsarray
Optional. Add-ons created automatically with each server: "backups", "extra_ipv4".
hostnamestring
Optional. Server hostname, a valid DNS name up to 128 characters (letters, digits, dots, hyphens), e.g. "web-1". Default: generated.
idempotency_keystring
Optional. Retry key of 1–64 letters, digits, "-" or "_", e.g. "web1-2026-10-20". Send the same key when retrying the same order — the existing order is returned instead of creating a second one. De...
locationstring
Optional. Server country: "de" (Germany) or "fi" (Finland). Omit for automatic placement.one of de · fi
monthsinteger
Optional. Billing term in months, 1–36 (default 1). Invoice = monthly price × months; 12 = the annual plan with its discount; other terms have no discount. Takes precedence over period/plan_id.
os_id*integer
Required. OS image id from the chosen plan's `available_os` in list_plans, integer, e.g. 4 (Ubuntu 24.04).
periodstring
Optional. Billing period: "month" (default) or "year" (annual plan). Ignored when `months` or `plan_id` is given.one of month · year
plan_idinteger
Optional. Explicit billing plan id from list_plans `plans[].plan_id`, integer, e.g. 12. Ignored when `months` is given.
product*string
Required. Plan slug from list_plans, e.g. "nano-ip", "small" or "windows-medium-ip".
quantityinteger
Optional. How many identical servers to order in one invoice (1–50, default 1). Servers without free room right now are queued for creation, not refused.
ssh_keystring
Optional. OpenSSH public key for root login, one line, e.g. "ssh-ed25519 AAAAC3Nza… you@laptop". Strongly recommended for Linux; ignored on Windows plans. Default: none (a root password is generated).
get_order_limitsBefore 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...6 params

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...

Parameters* required
addonsarray
Optional. Add-ons to price: array of "backups" and/or "extra_ipv4", e.g. ["backups"]. Default: none.
locationstring
Optional. Server country to check: "de" (Germany) or "fi" (Finland). Default: automatic placement.one of de · fi
monthsinteger
Optional. Billing term in months, integer 1–36 (default 1); 12 = the annual plan. Takes precedence over period/plan_id.
periodstring
Optional. Billing period to price: "month" (default) or "year". Ignored when `months` or `plan_id` is given.one of month · year
plan_idinteger
Optional. Billing plan id from list_plans `plans[].plan_id`, integer, e.g. 24. Ignored when `months` is given.
product*string
Required. Plan slug from list_plans, e.g. "nano-ip".
pay_invoicePay 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 l...1 params

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 l...

Parameters* required
invoice_idstring
Optional. Invoice id exactly as returned by order_vps / topup_balance, e.g. "2RUAWV4" (a plain number is also accepted).
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...

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...

No parameters. Call it with no arguments.

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). READ-ONLY since 1.9.1: it never reveals or...2 params

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...

Parameters* required
revealboolean
Optional. Ignored since MCP 1.9.1 (kept so existing calls still validate): get_vps_status never reveals the password — call reveal_password. Default false.
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
reveal_passwordRead 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 `passwor...1 params

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 `passwor...

Parameters* required
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
power_vpsPower-control a VPS: `start`, `stop` or `reboot`. Requires: token. Typical error: 409 during the first boot (setup still running) → wait and retry.2 params

Power-control a VPS: `start`, `stop` or `reboot`. Requires: token. Typical error: 409 during the first boot (setup still running) → wait and retry.

Parameters* required
action*string
Required. Power action: "start", "stop" or "reboot". stop/reboot interrupt everything running on the server.one of start · stop · reboot
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
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 r...2 params

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 r...

Parameters* required
hostname*string
Required. New hostname, a valid DNS name up to 128 characters (letters, digits, dots, hyphens; no leading/trailing dot or hyphen), e.g. "db-2.example.org".
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
reset_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 bef...2 params

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 bef...

Parameters* required
confirm*string
Required. Safety confirmation: the server's exact hostname (from get_vps_status) or the literal "DELETE". Ask the human first.
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
reinstall_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; p...3 params

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; p...

Parameters* required
confirm*string
Required. Safety confirmation: the server's exact hostname (from get_vps_status) or the literal "DELETE". ALL data is erased — ask the human first.
os_id*integer
Required. OS image id from this plan's `available_os` in list_plans, integer, e.g. 4 (Ubuntu 24.04).
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
get_vps_metricsTime-series resource metrics (CPU %, memory, network, disk) for a VPS. `timeframe` ∈ hour|day|week|month (default hour). Requires: token.2 params

Time-series resource metrics (CPU %, memory, network, disk) for a VPS. `timeframe` ∈ hour|day|week|month (default hour). Requires: token.

Parameters* required
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
timeframestring
Optional. Time window: "hour" (default), "day", "week" or "month".one of hour · day · week · month
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 ex...4 params

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 ex...

Parameters* required
confirmstring
Optional. Needed only with type "immediate": the server's exact hostname (from get_vps_status). Ask the human first.
reason*string
Required. Why this VPS is being cancelled (e.g. project finished, too expensive, no longer needed).
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
typestring
Optional. "end_of_period" (default: runs until the paid period ends, undoable) or "immediate" (destroys the server and all data now).one of end_of_period · immediate
undo_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_...1 params

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_...

Parameters* required
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
get_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 differ...1 params

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 differ...

Parameters* required
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
change_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...3 params

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...

Parameters* required
confirm*boolean
Required. Must be true — you agree to the charge and one reboot.
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
target_plan*integer
Required. Target plan `product_id` from get_upgrade_options `options[]`, integer, e.g. 11.
delegate_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: t...3 params

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: t...

Parameters* required
email*string
Required. Email of the person who gets operator access, e.g. "admin@partner.org". They receive an invitation link.
expires_daysinteger
Optional. Access lifetime in days, integer 1–365. Default: no expiry (until revoked).
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
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.1 params

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.

Parameters* required
token*string
Required. Invitation token from the accept link in the invitation email — the long random string after `token=` in the URL, e.g. "9f3c…e1a7".
list_delegationsList outgoing delegations you (the owner) have granted on your services — who has operator access to what, and its status. Requires: token.

List outgoing delegations you (the owner) have granted on your services — who has operator access to what, and its status. Requires: token.

No parameters. Call it with no arguments.

list_delegated_to_meList services other owners have delegated operator access to you — the VPS you can operate but don't own. Requires: token.

List services other owners have delegated operator access to you — the VPS you can operate but don't own. Requires: token.

No parameters. Call it with no arguments.

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.1 params

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.

Parameters* required
delegation_id*integer
Required. Delegation id from list_delegations or list_delegated_to_me, integer, e.g. 31.
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.3 params

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.

Parameters* required
message*string
Required. Problem description, up to 5000 characters: what you did, what you expected, what happened.
service_idstring
Optional. Service code as returned by list_vps/order_vps, e.g. "68J67T5" (a plain numeric id is also accepted).
subject*string
Required. Short ticket subject, up to 255 characters, e.g. "SSH refused after reboot".
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.

List your support tickets with status and last-message info. `last_message_author: "staff"` means support has replied since you last looked. Requires: token.

No parameters. Call it with no arguments.

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.1 params

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.

Parameters* required
ticket_code*string
Required. Ticket code from create_ticket / list_tickets (field `id`/`code`), e.g. "K7Q2M9X".
reply_ticketPost a reply on one of your tickets. Use the ticket code from create_ticket / list_tickets. Requires: token.2 params

Post a reply on one of your tickets. Use the ticket code from create_ticket / list_tickets. Requires: token.

Parameters* required
message*string
Required. Reply text, up to 5000 characters.
ticket_code*string
Required. Ticket code from create_ticket / list_tickets, e.g. "K7Q2M9X".
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.3 params

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.

Parameters* required
commentstring
Optional. Comment for the rating, up to 2000 characters. Default: none.
ratinginteger
Optional. Support rating, integer 1–5 (5 = excellent). Default: no rating.
ticket_code*string
Required. Ticket code from create_ticket / list_tickets, e.g. "K7Q2M9X".
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, th...

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, th...

No parameters. Call it with no arguments.

create_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 seco...5 params

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 seco...

Parameters* required
envobject
Optional. Environment variables for every command and code run in this sandbox, e.g. {"OPENAI_API_KEY": "sk-..."}. Stored encrypted; responses show only the names (env_keys). Up to 64 variables, 64...
idle_timeoutinteger
Optional. Seconds of inactivity before an ephemeral sandbox is deleted (default 300, max 3600). 0 = none (persistent only).
modestring
Optional. "ephemeral" (default: billed per second, minimum 60 s, auto-deleted when idle) or "persistent" (billed per started hour, kept up to 30 days).one of ephemeral · persistent
tariffstring
Optional. Tariff: micro | small | standard | plus | pro | max (see sandbox_pricing). Default "small"; e.g. "plus" for heavy pip installs.one of micro · small · standard · plus · pro · max
ttlinteger
Optional. Maximum lifetime in seconds (ephemeral up to 86400, persistent up to 2592000).
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 interpr...6 params

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 interpr...

Parameters* required
backgroundboolean
Optional. True = run as a background task and return `task_id` at once (poll get_task). Default false (wait up to `timeout`, max 55 s).
code*string
Required. Source code to run, passed to the interpreter on stdin, e.g. "print(2+2)".
envobject
Optional. Environment variables for this run only (override the ones set at create_sandbox). Example: {"DEBUG": "1"}.
language*string
Required. Interpreter: "python" (Python 3.12), "node" (Node.js 22) or "bash".one of python · node · bash
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
timeoutinteger
Optional. Seconds. Synchronous: max 55. With background: true: up to the sandbox's remaining lifetime (default).
exec_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/cu...6 params

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/cu...

Parameters* required
backgroundboolean
Optional. True = run as a background task and return `task_id` at once (poll get_task). Default false (wait up to `timeout`, max 55 s).
command*string
Required. Shell command run as root via bash -lc; operators like &&, | and > are allowed, e.g. "pip install requests && python app.py".
cwdstring
Optional. Working directory, absolute path, e.g. "/root/app". Default "/root".
envobject
Optional. Environment variables for this command only (override the ones set at create_sandbox). Example: {"DEBUG": "1"}.
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
timeoutinteger
Optional. Seconds. Synchronous: max 55. With background: true: up to the sandbox's remaining lifetime (default).
get_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...4 params

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...

Parameters* required
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
stderr_offsetinteger
Optional. Byte offset in stderr to read from, integer ≥ 0 (default 0); pass `stderr_next_offset` from the previous response.
stdout_offsetinteger
Optional. Byte offset in stdout to read from, integer ≥ 0 (default 0); pass `stdout_next_offset` from the previous response.
task_id*string
Required. Task id returned by run_code / exec_command with background: true.
kill_taskStop a running background task and all processes it started. Returns its final state (killed). The sandbox itself keeps running. Requires: token.2 params

Stop a running background task and all processes it started. Returns its final state (killed). The sandbox itself keeps running. Requires: token.

Parameters* required
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
task_id*string
Required. Task id returned by run_code / exec_command with background: true.
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)....5 params

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)....

Parameters* required
contentstring
Optional. File content as UTF-8 text. Give either `content` or `content_base64` (default: empty file).
content_base64string
Optional. File content as base64 for binary files, up to 5 MB decoded. Use instead of `content`.
modestring
Optional. File permissions in octal, 3–4 digits, e.g. "644" or "755". Default: the sandbox default.
path*string
Required. Absolute path inside the sandbox to write; parent directories are created, e.g. "/root/app/main.py". Must start with "/".
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
download_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 a...3 params

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 a...

Parameters* required
as_textboolean
Optional. True (default) = return `content` as UTF-8 text; false = return `content_base64` (for binary files).
path*string
Required. Absolute path inside the sandbox to read (max 5 MB), e.g. "/root/app/main.py". Must start with "/".
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
get_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 wh...3 params

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 <name> <url>` from wherever you work. The link only works wh...

Parameters* required
path*string
Required. Absolute path inside the sandbox of the file to download, e.g. "/root/app/main.py". Must start with "/".
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
ttlinteger
Optional. Link lifetime in seconds, 60–3600 (default 900 = 15 min).
get_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 overwri...4 params

Get 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 overwri...

Parameters* required
max_bytesinteger
Optional. Maximum size of the uploaded file in bytes, integer 1–2147483648 (2 GB). Default: the server limit (2 GB).
path*string
Required. Absolute path inside the sandbox to write the uploaded file to (overwritten at offset 0), e.g. "/root/app/main.py". Must start with "/".
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
ttlinteger
Optional. Link lifetime in seconds, 60–3600 (default 900 = 15 min).
list_sandboxesList the account's sandboxes (running and paused) with mode, tariff, state and expiry. Requires: token.

List the account's sandboxes (running and paused) with mode, tariff, state and expiry. Requires: token.

No parameters. Call it with no arguments.

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.1 params

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.

Parameters* required
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
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...1 params

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...

Parameters* required
sandbox_id*string
Required. Sandbox id as returned by create_sandbox / list_sandboxes, e.g. "sb_3f2a…".
get_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...

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...

No parameters. Call it with no arguments.

Sponsors

Readme

MCP Tools Sandboxes Site Pay KYC License

EQVPS — MCP Server

No-KYC VPS hosting and per-second code sandboxes (Firecracker microVMs) that AI agents rent and run by themselves. EQVPS exposes a Model Context Protocol server so an autonomous agent can discover plans, create an account, pay with crypto, then order and operate a VPS or start code sandboxes — no human in the loop.

⭐ If this is useful, please star the repo — it helps other agents & devs discover it.


View the full README on GitHub

Details

Repository
github.com/poiuyhje/eqvps-mcp
Website
eqvps.com
Transport
HTTP
Registry
MCP registry, active
Prompts
3
Tools verified
Nov 6, 2026