Skip to main content
Glama
piyushladhar

iotamine-mcp

by piyushladhar

create_vps

Deploy a new VPS by specifying region, cores, RAM, disk, OS, and SSH key. Requires confirmation before spending real money; returns VPS ID for tracking asynchronous provisioning.

Instructions

Deploy a new VPS. Spends real money — requires confirm=true, and should only be called after explicitly telling the user what will be provisioned and its estimated cost (see "Cost" below — get this right; it's a common mistake to quote only compute and forget the IP).

pop: a Point of Presence id from list_regions. cores/ram/disk: must match one of the allowed values the real API enforces — see get_quota or just try a value; a rejection names the allowed set.

Boot disk — exactly one of these two:

  • disk + operating_system: provisions a fresh disk (disk in GB) with a fresh OS install (operating_system an id from list_os_images). Both required together.

  • existing_boot_volume: boots from a standalone volume this account already owns instead (an id from list_volumes, kind "boot", not already attached to anything — check first). disk/operating_system are ignored if this is given; the volume already has its own OS. Costs nothing extra — the volume's own cost, if any, was already paid when it was purchased.

IP address — one of these two:

  • Omit existing_ip: a brand-new IP is automatically purchased and assigned as part of deployment. This is NOT free — it's the pop's own ip_price, billed the same as calling purchase_ip separately.

  • existing_ip: attach a standalone IP this account already owns instead (an id from list_ip_addresses, not already attached to anything — check first). No new IP purchased, no extra cost.

ssh_key: an id from list_ssh_keys, to install onto the new VPS.

Cost: call list_regions first and use the matching pop's own hourly rates. Total hourly cost = cores * cpu_price + ram * ram_price + (disk * disk_price, only if provisioning a fresh disk — 0 if existing_boot_volume is given) + (ip_price, only if existing_ip is NOT given — 0 if it is). Quote this full total, not just compute, before asking for confirmation.

Provisioning is asynchronous — this call returns immediately with the new VPS's id and is_building=true; poll get_vps for it to finish.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
popYes
ramYes
diskNo
coresYes
confirmNo
ssh_keyNo
hostnameYes
passwordNo
existing_ipNo
disable_pwd_authNo
operating_systemNo
existing_boot_volumeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A5/5.0
Behavior5/5

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

Given annotations provide no hints beyond readOnlyHint=false, the description fully carries behavior disclosure. It clearly warns that the tool spends real money, requires confirm=true, provisions asynchronously (returns immediately with id and is_building=true), and explains the exact cost formula including the often-forgotten IP price. It also notes that invalid core/ram/disk values will be rejected with an allowed-value list.

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

Conciseness5/5

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

Although long, the description is tightly structured with clear sections for boot disk, IP address, and cost. Every sentence conveys necessary information, and critical warnings are front-loaded. The length is justified by the tool's complexity, and no words are wasted.

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?

The description is complete for a tool with 12 interdependent parameters, no schema descriptions, and no output schema. It covers all parameters, the asynchronous nature, the cost calculation, and points to the relevant lookup tools. An agent has everything needed to invoke it correctly and safely.

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?

With 0% schema description coverage, the description does all the work for all 12 parameters. It explains each parameter in detail, including mutually exclusive groups (boot disk and IP address), default behaviors, which parameters are ignored in certain cases, and which values come from other tools. This goes far beyond what the schema alone provides.

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 description opens with 'Deploy a new VPS', a specific verb and resource. It clearly distinguishes this from sibling tools like start_vps (which starts an existing VPS) and destroy_vps, making the purpose unmistakable.

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

Usage Guidelines5/5

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

The description explicitly states when to call this tool (only after telling the user what will be provisioned and estimated cost) and provides detailed preconditions, such as checking whether existing_ip or existing_boot_volume are already attached. It also names specific lookup tools (list_regions, list_ssh_keys) to acquire required IDs, leaving no ambiguity about prerequisites.

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