Skip to main content
Glama

EQVPS — VPS and code sandboxes for AI agents

Order a VPS

order_vps
Destructive

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. Orders are never refused for capacity: if the chosen country has no free room or IPv4 right now, the paid server waits in the creation queue in that same country (get_vps_status shows queued: true) and is created automatically, usually within 24 hours; the customer gets the usual access email. Optional months (1–36): the billing term paid upfront — the invoice is the monthly price × months, payment moves the paid-until date by exactly that many months, after that the server renews monthly from the balance; months: 12 is the annual plan with its discount; terms other than 1 and 12 have no discount. Or period ("month" by default, or "year" for annual billing) or an explicit plan_id from list_plans plans[] (months takes precedence over both); 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: it pays from the balance if the balance now covers it, otherwise it returns a crypto checkout_url. Or topup_balance and then pay_invoice (or re-order).

Several servers in one order: quantity 2–50 → one invoice, N separate services (each with its own renewal), names -1…-N, created one after another after payment (service_ids in the response). 50 is only a typo guard — there is no limit for new accounts and no maximum by free capacity: servers that do not fit right now are queued for creation (usually within 24 hours). Promo codes apply to single-server orders paid for 1 or 12 months only. Optional addons: "backups" (Managed Backups, monthly plans only — annual plans include them) and "extra_ipv4" (a second public IPv4, dedicated-IP plans only); each add-on is added to the same invoice for every month of the chosen term (the first month on an annual plan), see get_order_limits for availability and price. Send the same idempotency_key when you retry the same order — a repeated call returns the existing order instead of creating a second one. Requires: token + enough balance (else an unpaid invoice is returned). Never refused for capacity: no free room/IPv4 → the paid server is queued (get_vps_status queued: true, usually ready within 24 hours). Typical errors: 422 unknown product/os_id (see list_plans), 422 quantity above 50, 422 months outside 1–36, 422 coupon_term_only (promo code with a term other than 1 or 12 months).

Input Schema

NameRequiredDescriptionDefault
os_idYesRequired. OS image id from the chosen plan's `available_os` in list_plans, integer, e.g. 4 (Ubuntu 24.04).
addonsNoOptional. Add-ons created automatically with each server: "backups", "extra_ipv4".
monthsNoOptional. 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.
periodNoOptional. Billing period: "month" (default) or "year" (annual plan). Ignored when `months` or `plan_id` is given.
plan_idNoOptional. Explicit billing plan id from list_plans `plans[].plan_id`, integer, e.g. 12. Ignored when `months` is given.
productYesRequired. Plan slug from list_plans, e.g. "nano-ip", "small" or "windows-medium-ip".
ssh_keyNoOptional. 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).
hostnameNoOptional. Server hostname, a valid DNS name up to 128 characters (letters, digits, dots, hyphens), e.g. "web-1". Default: generated.
locationNoOptional. Server country: "de" (Germany) or "fi" (Finland). Omit for automatic placement.
quantityNoOptional. 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.
idempotency_keyNoOptional. 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. Default: none.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • changedInput schema / properties / addons / description
      Previous value: -"Optional add-ons created automatically with each server: \"backups\", \"extra_ipv4\"."New value: +"Optional. Add-ons created automatically with each server: \"backups\", \"extra_ipv4\"."
    • addedInput schema / properties / hostname / description
      Added value: +"Optional. Server hostname, a valid DNS name up to 128 characters (letters, digits, dots, hyphens), e.g. \"web-1\". Default: generated."
    • changedInput schema / properties / idempotency_key / description
      Previous value: -"Optional key (letters, digits, - and _). Repeat it when retrying the same order so no second order is created."New value: +"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. Default: none."
    • changedInput schema / properties / location / description
      Previous value: -"Optional server country: \"de\" (Germany) or \"fi\" (Finland). Omit for automatic placement."New value: +"Optional. Server country: \"de\" (Germany) or \"fi\" (Finland). Omit for automatic placement."
    • changedInput schema / properties / months / description
      Previous value: -"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."New value: +"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."
    • addedInput schema / properties / os_id / description
      Added value: +"Required. OS image id from the chosen plan's `available_os` in list_plans, integer, e.g. 4 (Ubuntu 24.04)."
    • addedInput schema / properties / period / description
      Added value: +"Optional. Billing period: \"month\" (default) or \"year\" (annual plan). Ignored when `months` or `plan_id` is given."
    • addedInput schema / properties / plan_id / description
      Added value: +"Optional. Explicit billing plan id from list_plans `plans[].plan_id`, integer, e.g. 12. Ignored when `months` is given."
    • addedInput schema / properties / product / description
      Added value: +"Required. Plan slug from list_plans, e.g. \"nano-ip\", \"small\" or \"windows-medium-ip\"."
    • changedInput schema / properties / quantity / description
      Previous value: -"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."New value: +"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."
    • addedInput schema / properties / ssh_key / description
      Added value: +"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)."
  2. Changed1 schema field changed
    • addedInput schema / properties / months
      Added value: +{
      +  "description": "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.",
      +  "maximum": 36,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / quantity / description
      Previous value: -"How many identical servers to order in one invoice (1–10, default 1). Check get_order_limits for the current maximum."New value: +"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."
    • changedInput schema / properties / quantity / maximum
      Previous value: -10New value: +50
  4. Changed3 schema fields changed
    • addedInput schema / properties / addons
      Added value: +{
      +  "description": "Optional add-ons created automatically with each server: \"backups\", \"extra_ipv4\".",
      +  "items": {
      +    "enum": [
      +      "backups",
      +      "extra_ipv4"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 2,
      +  "type": "array"
      +}
    • addedInput schema / properties / idempotency_key
      Added value: +{
      +  "description": "Optional key (letters, digits, - and _). Repeat it when retrying the same order so no second order is created.",
      +  "pattern": "^[A-Za-z0-9_-]{1,64}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / quantity
      Added value: +{
      +  "description": "How many identical servers to order in one invoice (1–10, default 1). Check get_order_limits for the current maximum.",
      +  "maximum": 10,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / location
      Added value: +{
      +  "description": "Optional server country: \"de\" (Germany) or \"fi\" (Finland). Omit for automatic placement.",
      +  "enum": [
      +    "de",
      +    "fi"
      +  ],
      +  "type": "string"
      +}
  6. Changed2 schema fields changed
    • addedInput schema / properties / period
      Added value: +{
      +  "enum": [
      +    "month",
      +    "year"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / plan_id
      Added value: +{
      +  "exclusiveMinimum": 0,
      +  "type": "integer"
      +}
  7. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it explains capacity queue behavior, billing term semantics, promo application, Windows plan constraints, add-on availability, idempotency_key retry behavior, and typical errors. These are substantial behavioral details an agent would not get from the annotations or schema alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and uses bullets for response branching, but it is very long and repeats the capacity-queue behavior multiple times ('never refused for capacity', 'usually within 24 hours'). Much of the detail is useful, but the repetition and density make it less concise than ideal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter financial/provisioning tool with no output schema, it covers prerequisites, payment flow, response fields, error cases, queuing, and add-on constraints thoroughly. An agent has enough information to call it correctly and interpret the main outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is already 100%, the description adds real semantic value: product and os_id source relationships, months precedence and billing consequences, location omission behavior, quantity batching, add-on billing, and ssh_key/Windows exceptions. This is more than restating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: 'Order a VPS.' The description immediately distinguishes the core action from sibling reads like list_plans and get_vps_status, which it references as inputs/status checks rather than alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when ordering applies, including required inputs and the payment/queue outcomes, plus response branching to pay_invoice or topup_balance. It does not explicitly say when not to use this tool or contrast it with siblings such as create_sandbox or change_plan.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.