VPSnet
vpsnet-mcp
Model Context Protocol (MCP) server for managing VPSnet.com services. Gives AI assistants access to VPS lifecycle operations, managed applications, DNS zones, domain registration and contacts, billing, API-key metadata, SSH-key provisioning, and related account tooling through the VPSNet API.
Features
280+ tools covering VPSNet service management, managed applications, free and paid TLS certificates, Automatic SSL subscriptions, DNS, domains, billing, API keys, and account operations
Account & profile management
VPS lifecycle (start, stop, restart, reinstall OS)
Plan changes (free upgrades/downgrades; KVM/Firecracker disks cannot shrink)
Service reverse DNS (rDNS/PTR records)
Forward DNS zones, records, DNSSEC, templates, import/export, and DDNS tokens
Domain availability, contacts, register/transfer/renew/restore quotes, and paid confirmations
Publication-gated managed applications with install, health, events, and typed lifecycle actions
SSH key management — deploy keys and gain direct server access
API-key metadata inspection (key creation, changes, and revocation remain session-only)
Backups, billing, invoices
Ordering new VPS instances
System status & pricing
Related MCP server: vps-mcp
Remote OAuth connector
The remote profile also includes scoped DNS, domain and certificate management, public SSH keys, server recovery and backup browsing. It uses the same customer APIs as the panel; permissions are enforced by the backend on every request.
The remote connector uses https://mcp.vpsnet.com/mcp and customer consent through
VPSnet. See Remote AI connections for connection setup,
permissions and supported operations.
For expired or revoked authorization and unavailable consent choices, see
reconnecting and requested permissions.
The distributable plugin README, manifests and skills are in English. See directory readiness for package validation and publisher requirements, and supported use cases for server, application and networking scenarios. Directory publication and provider account availability are separate from installing this source code.
See AI client setup for Gemini CLI, Cursor, Kimi Code, Kiro, Cline and other remote OAuth clients. Their packages share the same VPSnet endpoint and task skills. The npm package supplies the local MCP server; installable plugin bundles also carry the AI application's manifest and skills.
Build all client bundles with python3 scripts/package-distribution.py.
The same build creates four self-contained skill imports
for clients that import one skill folder or ZIP at a time.
The output includes checksums and identifies each format. Public directory
submission materials are in the catalog kit.
Ordering uses the existing VPSnet connection, with customer-controlled purchase permissions and spending limits. The AI shows the final price and asks for approval before charging the account balance. Availability follows the application’s distribution rules.
The instructions below describe the existing local stdio/API-key client.
Prerequisites
Before installing, ensure you have:
Node.js 20 or newer
Check:
node --versionLinux/macOS: nodejs.org or your package manager
Windows:
winget install OpenJS.NodeJS.LTSor download from nodejs.orgAfter installing Node.js, restart your terminal/editor
For Claude Code (CLI or VS Code extension) users:
Claude Code CLI installed globally:
npm install -g @anthropic-ai/claude-codeCheck:
claude --version
Active VPSnet.com account with an API key (see Getting an API key)
Credential configuration paths
VPSNET_API_KEY is the preferred per-launch credential and takes precedence over files.
For file-based configuration, set VPSNET_CONFIG_DIR to the absolute directory
containing .vpsnet-mcp-key or .mcp.json. The key file takes precedence over
mcpServers.vpsnet.env.VPSNET_API_KEY in that JSON file. Alternatively,
VPSNET_API_KEY_FILE selects one absolute key-file path; an unreadable or invalid
explicit file fails startup instead of choosing another account.
Without VPSNET_CONFIG_DIR, files are read only from the process's launch directory
(cwd). This is the same for node /path/to/vpsnet-mcp/build/index.js and npx vpsnet-mcp: the package installation/cache directory and parent directories are
never searched. Set the directory explicitly when an editor or MCP client launches
from a different working directory. Keep credential files out of version control.
VPSNET_API_URL takes precedence over the URL in that same .mcp.json; the existing
trusted-host and HTTPS checks apply to either source.
Managed applications
Managed Applications, manual SSH, DNS, APIs, and other deployment surfaces are peer capabilities. Their order in this document and in the tool list is not a recommendation. Choose the path that best matches the user's requested outcome, target support, existing state, and explicit constraints. A catalog entry is one available managed path, not a reason to override a valid manual or custom deployment request. Catalog applications run as Docker containers in the customer's server and use typed installation and lifecycle tools.
Application reads require applications:read. Installation and lifecycle
changes require applications:manage and an idempotency key; ordinary
application lifecycle changes are not paid
API-key operations. CPU, RAM, and disk figures are sizing recommendations, not
installation gates: a supported application remains selectable during ordering
and installable below those figures. Product, OS, architecture, and runtime
compatibility remain hard requirements. Changes are asynchronous, so verify them
with get_application_installation and get_application_events. Use
get_application_health for a fresh container-health inspection and
get_application_logs for recent size-bounded troubleshooting logs, optionally
limited to one exact Compose service. Log inspections accept at most 500 lines
and 131,072 bytes. These two read-scoped inspections create short-lived
inspection jobs, so the API key must permit POST requests.
Installation detail includes bounded application and per-container CPU, memory,
network, restart, and storage history when the worker reports it. Containers are
identified only by Compose service and ordinal. Use
configure_application_resource_thresholds after explicit confirmation to
replace optional display thresholds. Omitted values clear a threshold; the
thresholds only highlight measurements and do not enforce resources, trigger
server actions, or affect billing. Set email_enabled after explicit
confirmation to send one account email when a threshold is reached and one when
it recovers; repeated measurements above the same threshold do not resend.
Use configure_application_access to change how an installed application is
reached. Read the installation first and pass its current revision with a new
idempotency key. platform_https allocates an opaque VPSnet hostname with
automatic DNS and HTTPS, private has no public listener, public_http uses
the server's public IP over HTTP, and managed_https uses an eligible
VPSnet-managed DNS zone. external_https records an existing customer-managed
HTTPS address; VPSnet does not configure or validate its DNS, TLS certificate,
or reverse proxy.
A managed_https access may also list additional_addresses (up to 4 per
endpoint, 8 per application): other names in the customer's own VPSnet DNS
zones, each with zone_id, name, action and approve_dns: true. An empty
name or "@" is the zone's bare domain, so example.com can sit next to
www.example.com. action is redirect (default; a 301 to the main address
that keeps the path and query) or serve (opens the same application). Adding
or removing an additional address never changes the main address. The list is
the complete wanted set: an access change that omits additional_addresses
removes the saved ones, so pass them again to keep them. Additional
addresses are refused on every other access mode, and VPSnet charges nothing
for them.
list_application_registry_credentials exposes only private registry credential
metadata. Registry token creation and rotation are intentionally not MCP tools:
use the VPSnet panel or direct REST API so a token never enters a model prompt or
tool argument. Metadata can identify Docker Hub, GHCR, or an exact custom HTTPS
registry hostname.
Customer recipes are customer-owned Compose definitions, separate from VPSnet catalog blueprints. They can be validated on the target worker, saved as immutable revisions, installed through the managed lifecycle, and exported without secret values. VPSnet catalog recipes are never exportable. Container discovery is bounded and read-only: it reports customer and managed containers without returning environment values or mounts, and it never adopts or modifies detected containers. Controlled adoption is a separate prepare, inspect, and explicit-confirm flow for an eligible Compose project. The initial takeover is one-time, but its exact external-volume binding remains signed into later lifecycle actions. Recovery restarts the source only after the managed replacement is conclusively contained; uncertain outcomes fail closed.
An immutable update is available only when get_application_installation
returns an available_actions entry with type: "update". After explicit user
confirmation, call update_application with the exact
advertised expected_blueprint_version and expected_upstream_version, and a
new idempotency key. Keys are client-global: reuse a key only to replay the
exact same request, never for another service or operation. The
backend selects and freezes the eligible published release; the caller does not
submit an image, tag, or target version.
No separate application backup is created. On supported Firecracker services,
list_application_restore_points returns opaque application-consistent nightly
whole-VM points for the exact current installation revision.
Viewing points is free, but API keys require applications:manage, paid
operations enabled, applications:restore paid scope, and full access because
the response includes the account balance.
quote_application_data_restore freezes the exact
charge without debiting the account. restore_application_data requires the
returned quote token, the same idempotency key, and explicit confirmation of
both payment and data replacement. Paid API keys also require
applications:restore, paid operations enabled, and daily/monthly spend caps.
It replaces only
worker-derived declared application data, excludes secrets and unrelated
Docker/server data, and requires rollback capacity. Poll
get_application_data_restore; needs_attention remains locked and must not
be treated as success. These tools never accept or expose PBS credentials,
archive names, devices, or filesystem paths.
Installation list and detail responses carry a per-platform capabilities
block — data_restore, console, compose_adoption, custom_projects and
log_service_filter — plus a separate access.capabilities.can_configure
flag. Treat those flags as the authority on what an installation supports
rather than attempting an action and reading the failure.
Uninstall permanently deletes the managed containers, configuration, saved
credentials, and application data; existing server backups are retained. The
uninstall_application call requires acknowledge_data_loss=true,
and it must only be set after explicit user confirmation.
The MCP surface is task-oriented rather than a one-to-one mirror of every REST route. Legacy SMS micro-payment and macro-payment callback integrations remain available through the documented REST API and control panel, but are intentionally not exposed as MCP tools. Public pre-login order and domain-search routes likewise have authenticated MCP equivalents where an account operation needs them.
TLS certificates and Automatic SSL
Certificate products are not limited to managed applications. Portable DV, OV, and EV orders can be installed on customer-controlled web servers, proxies, mail servers, load balancers, APIs, or other TLS-capable systems. Automatic SSL subscriptions instead connect a compatible ACME client on VPSnet or another provider and keep short-lived certificates current during the paid term.
Eligible accounts can also request no-cost portable DV certificates through
get_free_certificate_eligibility → preflight_free_certificate →
create_free_certificate. For API or assistant deployment, create a CSR on the
destination and keep its private key there; MCP accepts only the public CSR and
later returns only the public certificate chain. VPSnet-managed keys support
unattended early renewal, but their export remains portal-only behind two-factor
verification. Free certificates, paid certificate files, paid Automatic SSL,
and application Managed HTTPS are separate products and lifecycle surfaces.
Use list_certificate_catalog to distinguish portable_certificate from
acme_subscription offers. Automatic SSL follows
quote_automatic_ssl_subscription → order_automatic_ssl_subscription, with
the exact unchanged request, quote token, idempotency key, and explicit payment
approval. Read state with list_automatic_ssl_subscriptions and
get_automatic_ssl_subscription. Additional names use
quote_automatic_ssl_domain → order_automatic_ssl_domain; the API prevents
paying twice for names already covered by base/www or wildcard/base rules.
During the final 30 days, an eligible next term uses
quote_automatic_ssl_renewal → order_automatic_ssl_renewal and is prepaid
from account balance only after the exact EUR total is approved. Cancellation,
domain removal, and same-type correction use cancel_automatic_ssl_subscription,
remove_automatic_ssl_domain, and replace_automatic_ssl_domain;
ambiguous state is reconciled with refresh_automatic_ssl_subscription, never
by inventing a second mutation. Private ACME server and EAB credentials stay
in the two-factor-protected customer portal and are intentionally unavailable
to API keys and MCP, so they cannot enter model context.
Restoring a whole service
request_restore is paid and destructive: it charges the restore price from the
account balance and overwrites the whole service disk with the backup point,
losing everything written since. It is a confirmation call, not a price
enquiry — the API refuses a body that does not carry an explicit confirmation,
and refuses the charge outright if the price has moved since it was disclosed.
There is no dialog on this surface to collect that confirmation, so the tool
does not manufacture it. acknowledge_data_replacement and
acknowledge_restore_charge must each be true, and are only to be set after
the user has actually approved the disk replacement and the charge — the same
rule as acknowledge_data_loss on uninstall_application. Omitting either is a
schema error, so an unattended caller cannot fall through to a charge: nothing
is even quoted.
expected_total_charged is the VAT-inclusive total_charged you read from
get_restore_status and showed the user, passed back unchanged. Do not
re-read it just before the call: it is meant to be the figure the customer
agreed to, and a freshly fetched number would agree with whatever the price has
become and defeat the check entirely. If the price has moved, the restore is
refused as restoreQuoteChanged with the current total and nothing is charged;
disclose the new figure, get approval again, and retry.
Browsing inside a backup
Looking inside a backup is free and completely separate from paying to restore
one. list_restore_file_points, browse_restore_files and
get_restore_file_browse only read a backup's directory listing: they never
charge the account, never overwrite the disk, and never put a file back on the
server. Initially supported on Firecracker VPS.
Browsing is asynchronous. browse_restore_files creates a persisted job and
queues worker activity, so its MCP annotation is readOnlyHint: false even
though the backup and running server are unchanged. It returns a browse id in a
pending state; poll get_restore_file_browse until state is succeeded.
Entries exist only in that state — a failed browse carries an errorCode and
no listing, and must not be presented as an empty directory.
Directories can hold an enormous number of files, so the server selects pages
of 200 or 1,000 entries according to the worker capability. When
result.nextOffset is non-null, call again with the same sourceBrowseId and
directoryEntryId and set offset to that cursor. Use result.pageSize
rather than assuming 200 when moving backwards. Subdirectories are entered
with the opaque id of a
type: "directory" entry; filesystem paths are never accepted. Entry types are
file, directory, symlink and unsupported.
Folder search (the filter argument) matches entry names in the one
directory being listed — case-insensitive substring, never a path, never
recursive. It depends on a worker capability that older nodes do not report, so
list_restore_file_points returns searchAvailable. browse_restore_files
checks that flag before sending a filter and fails with
serviceFileBrowseSearchUnavailable when search is unsupported, rather than
quietly returning an unfiltered listing that would be mistaken for search
results. Plain browsing keeps working on those nodes.
Restoring selected files back onto the server is a paid operation and is deliberately not exposed here; use the VPSnet panel for it.
SSH access workflow
This MCP server manages your VPS infrastructure through the VPSnet.com API, including SSH key provisioning. Once an SSH key is deployed to a VPS, the AI assistant can connect directly using its environment's terminal (e.g. Claude Code's Bash tool, Cline's terminal).
Typical flow:
AI reads the local machine's public key (
~/.ssh/id_rsa.pub)Uploads it to VPSnet.com via
create_ssh_keyDeploys it to a VPS via
deploy_ssh_keywith explicitvm:execpermission for remote OAuth (or passes it when ordering withorder_service)Connects directly:
ssh root@<vps_ip>
Most AI coding environments (Claude Code, Cline, Cursor, Codex) have built-in terminal access, so the AI can SSH into your VPS immediately after deploying a key — no extra tools needed.
For environments without native SSH access, pair this with mcp-server-ssh for direct server connectivity via MCP tools.
Combined config:
{
"mcpServers": {
"vpsnet": {
"command": "npx",
"args": ["-y", "vpsnet-mcp"],
"env": {
"VPSNET_API_KEY": "your_api_key_here"
}
},
"ssh": {
"command": "npx",
"args": ["-y", "mcp-server-ssh"]
}
}
}Getting started
Choose your environment:
Claude Code (CLI) — Terminal-based AI coding
Claude Code for VS Code — VS Code extension
Claude Desktop — Desktop app
VS Code with GitHub Copilot — Copilot agent mode
Cline / Cursor / Windsurf / Roo Code / Codex — Other clients
The following local stdio example uses the mcpServers configuration format
supported by several MCP clients. Use your client's native schema; VS Code's
.vscode/mcp.json uses servers instead. For customer OAuth and the hosted
connector, use AI client setup.
{
"mcpServers": {
"vpsnet": {
"command": "npx",
"args": ["-y", "vpsnet-mcp"],
"env": {
"VPSNET_API_KEY": "your_api_key_here",
"VPSNET_API_TIMEOUT_MS": "45000"
}
}
}
}claude mcp add vpsnet -- npx -y vpsnet-mcpSet the environment variable before running:
export VPSNET_API_KEY="your_api_key_here"
export VPSNET_API_TIMEOUT_MS="45000"This section is for the Claude Code VS Code extension, not GitHub Copilot. If you use VS Code with GitHub Copilot, see the VS Code with GitHub Copilot section instead.
Step 1: Install Claude Code CLI globally (required for the extension):
npm install -g @anthropic-ai/claude-codeStep 2: Add the MCP server via CLI:
claude mcp add vpsnet -- npx -y vpsnet-mcpStep 3: Add your API key. Edit ~/.claude.json (or C:\Users\<username>\.claude.json on Windows), find the vpsnet server section and add the env block:
"vpsnet": {
"type": "stdio",
"command": "npx",
"args": ["-y", "vpsnet-mcp"],
"env": {
"VPSNET_API_KEY": "your_api_key_here",
"VPSNET_API_URL": "https://api.vpsnet.com"
}
}Step 4: Restart VS Code completely (Ctrl+Shift+P > "Reload Window" or close and reopen).
Step 5: Verify by asking Claude: "Get my VPSnet account info"
Windows users: Use PowerShell or CMD (not Git Bash) when running
claude mcp addcommands.
The
code --add-mcpcommand does NOT work with Claude Code extension — that's for VS Code Copilot only.
Follow the MCP install guide, use the standard config above.
Open Cline MCP settings and add to your cline_mcp_settings.json:
{
"mcpServers": {
"vpsnet": {
"type": "stdio",
"command": "npx",
"args": ["-y", "vpsnet-mcp"],
"env": {
"VPSNET_API_KEY": "your_api_key_here"
},
"disabled": false
}
}
}Use the Codex CLI:
codex mcp add vpsnet --env VPSNET_API_KEY=your_api_key_here -- npx -y vpsnet-mcpOr edit ~/.codex/config.toml:
[mcp_servers.vpsnet]
command = "npx"
args = ["-y", "vpsnet-mcp"]
[mcp_servers.vpsnet.env]
VPSNET_API_KEY = "your_api_key_here"If your system's default Node.js is older than 20 (common with nvm — check with node --version), wrap the command so nvm loads the right version:
codex mcp add vpsnet --env VPSNET_API_KEY=your_api_key_here -- bash -lc 'source ~/.nvm/nvm.sh >/dev/null 2>&1 && nvm use --silent 20 && npx -y vpsnet-mcp'Note: Codex requires network access to install packages via npx. If you run Codex in a restricted sandbox without network, npx installs will fail.
Go to Cursor Settings > MCP > Add new MCP Server. Use command type with the command npx -y vpsnet-mcp. Or add manually to .cursor/mcp.json:
{
"mcpServers": {
"vpsnet": {
"command": "npx",
"args": ["-y", "vpsnet-mcp"],
"env": {
"VPSNET_API_KEY": "your_api_key_here"
}
}
}
}Open Roo Code MCP settings and choose Edit Global MCP (currently
mcp_settings.json), or Edit Project MCP for .roo/mcp.json:
{
"mcpServers": {
"vpsnet": {
"type": "stdio",
"command": "npx",
"args": ["-y", "vpsnet-mcp"],
"env": {
"VPSNET_API_KEY": "your_api_key_here"
},
"disabled": false
}
}
}For the hosted customer OAuth connection, run MCP: Add Server and enter
https://mcp.vpsnet.com/mcp, or merge this native VS Code entry into
.vscode/mcp.json, preserving other servers:
{
"servers": {
"vpsnet": {
"type": "http",
"url": "https://mcp.vpsnet.com/mcp"
}
}
}Complete the browser sign-in and consent flow when requested. Copilot's portable
workspace .mcp.json and user ~/.copilot/mcp-config.json use a top-level
mcpServers object instead. These formats are distinct from the Claude Code
extension's configuration.
For the separate local stdio package with your own VPSnet API key, install using the VS Code CLI:
code --add-mcp '{"name":"vpsnet","command":"npx","args":["-y","vpsnet-mcp"],"env":{"VPSNET_API_KEY":"your_api_key_here"}}'For manual native VS Code configuration, place that local server's command,
args and private env under servers.vpsnet, rather than copying the generic
mcpServers wrapper. VS Code's MCP: Reset Cached Tools refreshes a stale
tool catalog. See official MCP configuration.
This is for GitHub Copilot agent mode in VS Code. For the Claude Code extension, see the Claude Code for VS Code Extension section.
Current official Windsurf documentation redirects to Devin Desktop. Choose the agent you are using: legacy Cascade and the current Devin Local agent have different MCP setup paths.
For Devin Local, add and authenticate the hosted connector with the Devin CLI:
devin mcp add vpsnet https://mcp.vpsnet.com/mcp
devin mcp login vpsnet --scopes services:readThis requests a read baseline. Request the documented scopes required for other
tasks through a new authorization flow before approving them. If authorization
is lost, use the Desktop Authenticate action, or devin mcp logout vpsnet
followed by the login command. Current CLI versions use dedicated
.devin/mcp_config.json, .devin/mcp_config.local.json or user
~/.config/devin/mcp_config.json files.
For legacy Cascade, open the panel's Actions → Open MCP config file and merge
a server under mcpServers with serverUrl: "https://mcp.vpsnet.com/mcp".
Complete its OAuth flow. Cascade has a 100-tool total limit, so inspect the
enabled tools. The local stdio example above is a separate API-key connection.
Follow the official Devin Local MCP guide or legacy Cascade guide for your surface. Client authentication and VPSnet compatibility still need verification on the actual client version.
Windows Users
Use PowerShell or CMD (not Git Bash) for
claude mcp addcommandsConfig file location:
C:\Users\<YourUsername>\.claude.jsonInstall Node.js:
winget install OpenJS.NodeJS.LTSor download from nodejs.orgAfter installing Node.js, restart your terminal and VS Code
Environment variables in Claude Code extension must be in the
envobject within.claude.json, NOT system environment variables
Environment variables
Variable | Required | Description |
| Yes | Your VPSnet.com API key |
| No | API base URL (defaults to |
| No | Delegated SSH runtime; production uses |
| Non-production SSH only | Operator-approved HTTPS VPSnet API origin; must exactly match |
| No | Per-request timeout (default 45000) |
Requests go out from the machine that runs this server, not from your browser. A
deployment that restricts access by source address can answer a blocked
request with an HTML 403 page from its web server; the tool result then says
so (non_api_response: true, http_status: 403) instead of passing the page on.
Every error result carries http_status; a 429 also carries retry_after.
Authentication, scopes and paid operations
Every request is sent with the X-API-KEY header (VPSNET_API_KEY).
Use a management key. Its access level is
full(reads and changes) orread(GET only). An AI-scoped key is issued only for VPSnet AI assistant inference and is refused on every account route, so no tool here works with one; the error result carriesauth_problemwith the reason and the fix.Granular scopes only narrow a key. A key with an empty scope list keeps everything its access level allows; listing scopes (for example
dns:read,services:manage) restricts it.X:manageincludesX:read. Networking is the exception:networking:read/networking:manage/networking:orderare never implied byfullorreadand must be granted explicitly.Paid operations are a separate gate. A tool marked
PaidorQuotein the tables below needs afull-access key,paid_operations_enabled, the named paid scope (vps:order,vds:order,ds:order,fc:order,domains:order,domains:renew,domains:transfer,certificates:order,applications:restore,services:restore,fn:invoke,networking:order), configured daily and monthly spend caps, and a stableidempotencyKey(reuse the same key to replay an uncertain attempt, never a new one). Orders run quote, then confirm with the returnedquoteToken; disclose the exact EUR total to the user before confirming. Uselist_api_keysto see your key's scopes, paid scopes, caps and rate limit.Rate limits. Requests are rate-limited per key (
rate_limitinlist_api_keys, requests per minute). On HTTP429back off and retry afterretry_afterseconds instead of retrying immediately.API keys can never create, change or revoke API keys, and never receive admin access.
Tools
The tables below are generated: edit scripts/tool-scopes.json (or the tool
registration) and run npm run docs:tools; npm test fails when they drift.
Scope is the granular API-key scope the tool needs (none = any management
key; a + b = both; a or b = either, depending on the object). Paid:
Paid: x spends account balance and needs the paid scope x plus the gates
above; Quote: x creates a price quote without charging but is gated the same
way; Paid alone charges the balance with a full-access key and no separate
paid scope; Needs paid scope: x is a read that exposes balance or price data;
Billed while kept means free for an initial window, then metered; free is
everything else.
Account
Tool | Description | Scope | Paid |
| Get account info (user ID, email, balance, VAT rate) | none | free |
| Get user profile details (name, address, company) |
| free |
Services
Tool | Description | Scope | Paid |
| List all active VPS services |
| free |
| Read service details and the next readiness check; keep provisioning, guest access and application health separate |
| free |
| Get one graph series: metric (cpu, ram, ssd, net, io, …) and period (5m … 1y) |
| free |
| Read an async action's state by its |
| free |
| Poll an async action until completed or error (or a timeout) |
| free |
| Get action history for a service |
| free |
Managed Applications
Tool | Description | Scope | Paid |
| List published applications compatible with a service |
| free |
| List installed applications and pending checkout selection |
| free |
| Get observed state, health, drift, endpoints, components, resource history, and thresholds |
| free |
| Get bounded customer-safe installation events |
| free |
| Run and poll a fresh container-health inspection |
| free |
| Run and poll a size-bounded recent-log inspection |
| free |
| Poll the exact persisted health or logs inspection returned by get_application_health or get_application_logs when it remains pending. |
| free |
| List eligible nightly points for the exact application revision |
| Needs paid scope: |
| Freeze the exact selective-restore balance charge without payment |
| Quote: |
| Pay and queue confirmed selective replacement of declared application data |
| Paid: |
| Poll one tenant-bound selective data restore |
| free |
| List non-secret private registry credential metadata |
| free |
| Validate customer Compose against the target worker policy |
| free |
| Poll the exact persisted customer recipe validation returned by validate_application_recipe or a pending recipe creation/revision. |
| free |
| List customer-owned immutable recipe projects |
| free |
| List immutable revisions for a customer recipe |
| free |
| Validate and save a new customer recipe without installing it |
| free |
| Validate and save a later immutable customer recipe revision |
| free |
| Export only a customer-owned recipe without secret values |
| free |
| Install an exact validated customer recipe revision |
| free |
| Discover bounded read-only container metadata |
| free |
| Poll the exact persisted service container discovery returned by discover_service_containers when it remains pending. |
| free |
| Prepare and poll a scrubbed candidate for one discovered Compose project |
| free |
| Poll one tenant-bound Compose adoption candidate |
| free |
| Confirm the exact source takeover after explicit approval |
| free |
| Queue a confirmed, version-pinned managed installation |
| free |
| Queue a confirmed platform-hostname, private, public-IP, managed-HTTPS, or customer-managed external-HTTPS access change |
| free |
| Replace confirmed non-enforcing application resource thresholds and reached/recovered email preference |
| free |
| Compatibility tool for older clients; use the individual actions below |
| free |
| Reconcile an application with its declared configuration |
| free |
| Repair an application runtime |
| free |
| Restart an application after confirming interruption |
| free |
| Start a stopped application |
| free |
| Stop an application after confirming interruption |
| free |
| Delete an application after explicit data-loss approval |
| free |
| Apply the eligible immutable update with exact version preconditions |
| free |
| Queue the exact reverse transition advertised as type=rollback by get_application_installation. |
| free |
| Cancel the exact latest queued action only while the backend advertises it as cancellable |
| free |
Service Actions
Tool | Description | Scope | Paid |
| Start a stopped VPS |
| free |
| Stop a running VPS |
| free |
| Restart a VPS |
| free |
| Request an out-of-band console session for a running VPS |
| free |
| Suspend a running Cloud VPS |
| free |
| Resume a suspended Cloud VPS |
| free |
Service Settings
Tool | Description | Scope | Paid |
| Get current and automatic service hostname state |
| free |
| Get the server's saved guest DNS resolver configuration: nsData.type is own (VPSnet defaults) or custom, with ns1-ns4 resolver IP addresses. |
| free |
| Change VPS hostname |
| free |
| Restore the VPSnet-managed automatic hostname |
| free |
| Change DNS resolvers inside a supported Linux server. |
| free |
| Change VPS root password |
| free |
| Get current rDNS records |
| free |
| Change reverse DNS (PTR) record |
| free |
| Clear a PTR override and restore the automatic value |
| free |
| Flush iptables rules (useful when locked out) |
| free |
| Get the current service display title |
| free |
| Change service display title |
| free |
| Enable or disable IPv6 |
| free |
| Toggle ppp, fuse, tuntap, or nfs |
| free |
| Deploy an SSH key to a VPS; remote OAuth also requires |
| free |
OS Reinstall
Tool | Description | Scope | Paid |
| Get available OS templates |
| free |
| Reinstall VPS OS (destroys existing data). Cloud/Firecracker VPS also delete existing snapshots and require explicit |
| free |
Plan Changes (free)
Tool | Description | Scope | Paid |
| Get available plans for upgrade/downgrade; KVM/Firecracker targets that would shrink disk are unavailable |
| free |
| Get configurable resources for a plan |
| free |
| Preview a plan change: no payment, the remaining value is converted, so an upgrade moves the expiry earlier |
| free |
| Change VPS plan |
| free |
Renewal & Billing
Tool | Description | Scope | Paid |
| Get billing period and auto-renewal options |
| free |
| Enable or disable auto-renewal |
| Paid (future renewals) |
| Manually renew a service |
| Paid |
| List invoices |
| free |
| Get a specific invoice |
| free |
| List payment history |
| free |
| List itemized metered-usage statements separately from invoices |
| free |
Ordering
Tool | Description | Scope | Paid |
| Get available plans for an explicitly selected service product | none | free |
| Get configurable options for a plan | none | free |
| Quote a new VPS, then confirm the exact total and period after customer approval; optionally attach a private network with | none | Paid: |
Backups
Tool | Description | Scope | Paid |
| Get backup status and configuration |
| free |
| Get nightly off-node backup status for a Firecracker VPS, including running count and the latest retained backup's consistency provenance. |
| free |
| Get backup history |
| free |
| Get retained nightly Firecracker VPS backup history, including failed/running attempts and consistency provenance. |
| free |
| Retrieve historical Container VPS backup content with explicit payment consent and a stable request key |
| Paid |
Restore
Tool | Description | Scope | Paid |
| Get retention, restore price, and any restore in progress |
| Needs paid scope: |
| List whole-service restore points |
| free |
| Paid and destructive: restore the whole service disk from a point |
| Paid: |
| List browsable backup points and whether folder search is available (free) |
| free |
| Queue a backup directory listing job without restoring files |
| free |
| Poll a queued backup directory listing (free, read-only) |
| free |
SSH Keys
Tool | Description | Scope | Paid |
| List all SSH keys |
| free |
| Get a specific SSH key |
| free |
| Add a new SSH key |
| free |
| Delete an SSH key |
| free |
API Keys
Tool | Description | Scope | Paid |
| Show the API key authenticating this MCP connection | none | free |
| Get one active key's non-secret metadata | none | free |
| Get the calling key's bounded retained request activity and recorded totals | none | free |
| Get the calling inference key's exact paid VPSnet AI usage and cap state | none | free |
API-key creation, changes, and revocation require a browser/session login. They cannot be performed by an MCP connection authenticated with an API key.
Free TLS certificates
Tool | Description | Scope | Paid |
| Check account eligibility, quota, key modes, and currently ready public CAs |
| free |
| Plan exact names, validation, delivery, custody, and CA without issuing |
| free |
| List owned no-cost certificate requests and lifecycle state |
| free |
| Get one owned request, renewal schedule, and safe timeline |
| free |
| Read automatic-DNS status or every required external-DNS CNAME |
| free |
| Create one explicitly approved, idempotent no-cost DV request |
| free |
| Retrieve only the issued public leaf and chain, never a private key |
| free |
| Compatibility tool for older clients; use the individual actions below |
| free |
| Request early renewal for the authorized certificate names |
| free |
| Revoke an owned certificate after explicit approval |
| free |
| Recheck validation for a pending certificate |
| free |
| Cancel an eligible pending certificate request |
| free |
For portable API or assistant installation, use customer_csr and retain the
private key where the CSR was generated. A managed request can renew unattended,
but MCP cannot export its private key. Issuance is asynchronous and quota-bound:
poll get_free_certificate, follow get_free_certificate_instruction, and do
not treat a queued request as issued.
Automatic SSL subscriptions
Tool | Description | Scope | Paid |
| List customer-owned Automatic SSL subscriptions without exposing ACME credentials |
| free |
| Get one owned subscription, its domain set, renewal state, and readiness |
| free |
| Quote an exact domain set in EUR without charging |
| Quote: |
| Confirm and pay for the explicitly approved subscription quote |
| Paid: |
| List customer-visible subscription and DNS-name changes |
| free |
| Schedule an authoritative read-only status refresh |
| free |
| Quote one additional DNS name in EUR without charging |
| Quote: |
| Confirm and pay for the explicitly approved DNS-name quote |
| Paid: |
| Quote the next eligible subscription term in EUR |
| Quote: |
| Prepay the explicitly approved next term from account balance |
| Paid: |
| Compatibility tool for older clients; use the individual actions below |
| free |
| Cancel an owned Automatic SSL subscription |
| free |
| Remove one eligible DNS name from a subscription |
| free |
| Correct an eligible DNS name within its correction window |
| free |
Automatic SSL is a portable paid ACME subscription. It works with a compatible client on VPSnet or another provider; it is not limited to managed applications. The private ACME server URL and EAB credentials are revealed only in the two-factor-protected customer portal. They are intentionally not an MCP tool or API-key response, so an assistant cannot copy them into model context.
Paid TLS certificates
Tool | Description | Scope | Paid |
| List published DV/OV/EV products and final customer offers in EUR |
| free |
| Get one published product, its capabilities, and current offers |
| free |
| List customer-owned paid certificate orders and issuance state |
| free |
| Get one owned paid certificate order |
| free |
| Quote an exact certificate or renewal without charging |
| Quote: |
| Confirm and pay for an explicitly approved certificate quote |
| Paid: |
| Read per-name validation state and an owner-visible pending challenge |
| free |
| Download the issued public leaf and chain; private keys are never returned |
| free |
| List durable customer-visible management actions |
| free |
| Schedule a read-only certificate-authority status reconciliation |
| free |
| Compatibility tool for older clients; use the individual actions below |
| free |
| Cancel an eligible pending certificate order |
| free |
| Recheck certificate validation |
| free |
| Resend a certificate validation message after approval |
| free |
| Change the validation method for one certificate name |
| free |
| Request a same-name reissue with a new public CSR |
| free |
Paid certificates are portable account products: customers may install them on Nginx, Apache, lighttpd, OpenLiteSpeed, HAProxy, Caddy, mail, API, load-balancer, or other TLS endpoints. They are separate from automatic HTTPS attached to a VPSnet-managed application. The MCP accepts only a public PKCS#10 CSR; the private key must remain under customer control and must never enter a tool argument or model context. Quote responses contain the final customer price in EUR, and ordering requires explicit approval plus the same idempotency key and short-lived quote token.
Domains
Tool | Description | Scope | Paid |
| List domains owned by the account |
| free |
| Get one owned domain and its pending action |
| free |
| List TLDs currently enabled for ordering |
| free |
| Check domain availability without ordering |
| free |
| Get non-secret domain-ordering readiness |
| free |
| Queue a nameserver change for an owned domain |
| free |
| List same-domain nameserver address records |
| free |
| Queue creation or update of a nameserver address record |
| free |
| Queue deletion of a nameserver address record |
| free |
| List parent-zone DNSSEC DS records |
| free |
| Queue addition of parent-zone DS records |
| free |
| Queue deletion of parent-zone DS records |
| free |
| List domain contacts owned by the account |
| free |
| Create a domain contact |
| free |
| Update an existing domain contact |
| free |
| Delete an unused domain contact |
| free |
| Quote a domain registration without charging |
| Quote: |
| Confirm and pay for an exact registration quote |
| Paid: |
| Quote a domain transfer without charging |
| Quote: |
| Confirm and pay for an exact transfer quote |
| Paid: |
| Quote renewal of an owned domain without charging |
| Quote: |
| Confirm and pay for an exact renewal quote |
| Paid: |
| Quote restoration of a domain in redemption without charging |
| Quote: |
| Confirm and pay for an exact restoration quote |
| Paid: |
| Enable or disable automatic renewal for an owned domain |
| Paid (future renewals) |
| Get registrar transfer-lock state; changes remain panel-only |
| free |
DNS
Tool | Description | Scope | Paid |
| List owned zones and service addresses available for DNS attachment |
| free |
| Point an owned-zone name at one service address |
| free |
| List forward DNS zones owned by the account |
| free |
| Create a native or secondary zone awaiting ownership TXT verification |
| free |
| Get desired records with IDs and a recoverable ownership TXT value |
| free |
| Retry publication of a published DNS zone whose apply_state is failed. |
| free |
| Inspect delegation, SOA, DNSSEC, and record hygiene |
| free |
| Export a native zone as a BIND-style zone file |
| free |
| Import bounded BIND-style records into a native zone |
| free |
| List backend-defined DNS record templates |
| free |
| Preview or apply one DNS record template |
| free |
| Delete a forward DNS zone |
| free |
| Verify ownership and publish a pending or verification-expired zone |
| free |
| Rotate ownership TXT for a pending or verification-expired zone after checking its recoverable value |
| free |
| Get DNSSEC state and public DNSKEY/DS material |
| free |
| Enable or safely disable DNSSEC signing |
| free |
| Add a name/type/content tuple; an identical tuple updates TTL/comment and re-enables the record |
| free |
| Replace one existing non-system DNS record's content by exact record ID |
| free |
| Delete one forward DNS desired-state record |
| free |
| Get managed DNS cluster status and published endpoints |
| free |
| Get recent zone and record change history |
| free |
| List non-secret DDNS and ACME token metadata |
| free |
| Create a narrow DDNS or ACME updater token |
| free |
| Revoke a DDNS or ACME updater token |
| free |
Snapshots
Tool | Description | Scope | Paid |
| List Cloud VPS disk snapshots and billing policy |
| free |
| Create a Cloud VPS disk snapshot |
| Billed while kept |
| Destructively roll a Cloud VPS back to a snapshot |
| free |
| Delete a Cloud VPS disk snapshot and stop its keep billing |
| free |
| List temporary Firecracker VPS snapshots and expiry |
| free |
| Create a temporary Firecracker VPS snapshot |
| Billed while kept |
| Destructively roll a Firecracker VPS back to a snapshot |
| free |
| Delete a Firecracker VPS snapshot and stop its keep billing |
| free |
Service Rescue
Tool | Description | Scope | Paid |
| Get rescue capability and current durable rescue session |
| free |
| Restart an eligible service into an advertised rescue image |
| free |
| Restore the exact pre-rescue boot configuration and state |
| free |
Firecracker Functions
Tool | Description | Scope | Paid |
| List usage-billed Firecracker Functions |
| free |
| Read paginated account-wide Firecracker Function invocation history. |
| free |
| Get one function, including integrity state and protected values when readable |
| free |
| Create a Firecracker Function |
| free |
| Update a function; unreadable protected values require explicit replacement approval |
| free |
| Delete a Firecracker Function |
| free |
| Invoke a function with metered CPU and memory usage; one stable Idempotency-Key prevents exact retries from running or billing twice |
| Paid: |
| List a function's invocations, status, duration, and cost |
| free |
| Get one invocation's output, logs, and usage cost |
| free |
On-demand servers
Tool | Description | Scope | Paid |
| Get launch state, profiles, compatibility pricing inputs, and exact storage/network policy |
| free |
| Inspect the disabled quote operation and its coming-soon response |
| Disabled (coming soon) |
| List the account's on-demand server sessions and current options |
| free |
| Inspect the disabled create operation; no payment or allocation occurs while the product is coming soon |
| Disabled (coming soon) |
| Get one tenant-owned on-demand server session |
| free |
| Permanently delete an on-demand server after explicit data-loss acknowledgement; no customer refund is initiated |
| free |
Customer ordering is disabled while the on-demand server lifecycle is being validated. Current options disclose that automatic backups and snapshots are not included and outbound connections to mail-delivery TCP ports 25, 2525, 465, and 587 are restricted. Existing sessions remain available through list/get/delete for cleanup. Fixed-TTL and prepaid fields in the disabled compatibility schema are not a launch promise; the flexible duration and metered-billing contract must be published consistently before ordering is enabled.
Guest Agent
Tool | Description | Scope | Paid |
| Read guest-agent availability on Cloud VPS or Firecracker; this does not establish application readiness |
| free |
History
Tool | Description | Scope | Paid |
| Get account login history |
| free |
| Get management/activity history |
| free |
Public
Tool | Description | Scope | Paid |
| Get public pricing | none | free |
| Get VPSnet.com system status | none | free |
| Get frequently asked questions | none | free |
SDN networking
Networking permissions must be granted explicitly: networking:read or
networking:manage; the ordinary full/read defaults do not include them.
Start with capabilities, then read the exact owned resource and its generation.
The backend enforces tenant ownership, availability and server 2FA locks.
Accepted, paid, and ready are separate states; poll the matching operation or
resource. DNS changes are polled through the network's settings.dns_change.
New private/public load balancers, VPNs and public addresses use an explicit
quote → common checkout → order-status flow. Quote tools always send
prepare_after_payment=true: no provisioning happens before payment.
Show the quote's exact EUR gross_amount, obtain approval, and pass the same
idempotencyKey, quote_id and quoteToken to order_network_product.
API keys additionally need full access, enabled paid operations,
networking:order, and spend limits. Read get_network_payment_methods and
select system=balance; non-balance checkout is refused for API keys.
If confirmation is uncertain, recover by the original quote ID and key.
For an SDN order with status=paid_pending, billing_state=captured and
reason_code=network_product_ip_inventory_wait, payment is retained while
public IP inventory is unavailable. Poll get_network_product_order with
the same order ID; the backend resumes automatically when inventory returns.
Do not create another order, charge again or submit a manual retry.
manual_review or network_product_stock_reconciliation_required instead
requires operator review; it does not authorize an automatic retry.
Ordinary VPS orders expose this wait through
get_service.stateProcess.waitingReason=public_ip_inventory (also mirrored
in the legacy stateProccess field). Poll the same service without reordering.
stateProcess.attention=true requires operator attention. A successful
payment or accepted create does not establish that the server is ready.
Public load balancer tiers alb_proxy_3/alb_proxy_5 use request kind
proxy_lb; private tier nlb uses private_lb. Availability and prices come
from the live product catalog. A legacy unpaid appliance-create endpoint is
not an alternative to checkout.
Device configuration pickup is a one-time management action, even though its HTTP method is GET. Generate the reveal key pair outside MCP, submit only the X25519 public key, save the returned sealed ciphertext, and decrypt it outside the conversation. Neither private keys nor plaintext WireGuard configuration are requested or decrypted by these tools. Never automatically repeat a pickup after an uncertain response.
The current backend has no customer network rename, existing-port fixed-IP edit, appliance retry, or native site-to-site API in this release. Fixed DHCP addresses are selected at attach; removing/recreating an attachment requires separate approval and is not represented as an in-place edit. Legacy unpaid LB/VPN create routes, legacy stock-before-payment purchases and enabling automatic renewal via API keys are deliberately not exposed. Existing public binding management remains available; new public addresses use account ownership and common checkout. A tool being listed does not enable a backend feature gate.
Tool | Description | Scope | Paid |
| Read payment-method metadata without starting payment | none | free |
| Read account networking availability, quota, creation options and eligible order-time attachments |
| free |
| Read current networking feature gates, DNS options and supported contract extensions. |
| free |
| Read owned networks, quota and operation snapshot |
| free |
| Read the account topology with network-scoped identities |
| free |
| Read recent network operations and operations_has_more |
| free |
| Read an accepted network or port operation |
| free |
| List owned private networks, including deletion awaiting verified cleanup. |
| free |
| Read one owned network including DHCP reservations, DNS change progress, generation and project_id. |
| free |
| Create a private network intent |
| free |
| Request deletion of an empty network |
| free |
| Retry the failed current network operation only; preserve its current generation |
| free |
| Change DHCP DNS servers in place |
| free |
| Replace the complete internal DNS zone label and alias list |
| free |
| Read owned network ports, their fixed DHCP addresses, generations and attachment states |
| free |
| Read private ports and order attachment recovery state for one owned service order number. |
| free |
| Read attachable services and each attachment_mode |
| free |
| Attach an owned service; omit ipv4 for automatic allocation or pass a fixed usable address |
| free |
| Detach the owned server port |
| free |
| Retry the failed current port operation with the PORT generation and any required restart approval. |
| free |
| Read the network's VPN summary, including truthful absence |
| free |
| Read this network's NAT/internet access, public address and qualification state. |
| free |
| Request the currently supported NAT transition for an owned network; the backend may refuse mode changes |
| free |
| Read security-group availability and whether the network default policy can be changed. |
| free |
| List groups in the owned project |
| free |
| Create a named allow-rule set |
| free |
| Replace the complete group name and rule list at its expected revision |
| free |
| Delete an unreferenced customer group at its expected revision; referenced groups are refused. |
| free |
| Clone an owned group into a new name; use the source group's current revision. |
| free |
| Read default policy, assigned groups and policy application state |
| free |
| Change accept/deny for servers without custom groups |
| free |
| Replace the port's complete customer-group list |
| free |
| Retry the failed network security policy using its current desired state. |
| free |
| Retire the policy only after its server ports are gone |
| free |
| Read available load balancer providers/tiers, public qualification, VPN capabilities and quota |
| free |
| Read owned load balancers and VPN gateways with one stream cursor. |
| free |
| Read current customer-visible recurring appliance lines and currency. |
| free |
| Poll an accepted appliance operation |
| free |
| List private and public load balancers and customer-safe health/qualification state. |
| free |
| Read one owned load balancer, listeners, members, generation and health |
| free |
| Read a technical load balancer estimate for this exact configuration |
| free |
| Request appliance teardown at its current generation; this is not a refund or paid-period cancellation |
| free |
| Add an attached private server address to the selected listener; backend validates membership in this network. |
| free |
| Remove a member from rotation using the load balancer generation. |
| free |
| Add a listener and optional initial members using currently offered protocol capabilities |
| free |
| Remove a listener and its members; deleting the last listener is refused. |
| free |
| List owned VPN gateways, their device peers and safe status |
| free |
| Read one owned VPN gateway, current generation, device peers, grant candidates and attachment capability. |
| free |
| Request teardown of an owned VPN gateway; all devices lose connectivity |
| free |
| Attach or move an account VPN to an owned network only when standalone attachment is advertised |
| free |
| Detach an account VPN from its network when supported; it keeps its paid period and devices but recreates the gateway |
| free |
| Choose accept or groups_only for the VPN's access to attached servers when this capability is available |
| free |
| Add a device with an externally generated one-time PUBLIC reveal key |
| free |
| Consume the device's sealed configuration ONCE |
| free |
| Revoke one device using the VPN GATEWAY generation |
| free |
| Replace the device's complete reachable-server list when standalone VPN is available |
| free |
| Read supported VPN Internet exits and qualification |
| free |
| Set a device's private-only, inherited NAT, or advertised chosen exit policy |
| free |
| Read current paid products, live tier names, prices and purchase capability; public proxy load balancer 3/5-node offerings must come from this catalog. |
| free |
| Read owned product periods, renewal availability and lifecycle facts. |
| free |
| Create the network product's exact paid quote for COMMON CHECKOUT |
| Quote: |
| Create an account VPN quote for common checkout when vpn_account_order is advertised |
| Quote: |
| Confirm a common-checkout purchase from an approved exact quote |
| Paid: |
| Read an owned common-checkout order's payment and fulfilment state |
| free |
| Recover an uncertain checkout by the ORIGINAL quote_id; order=null means no order was found, not proof to use a new payment key. |
| free |
| Quote one next paid month for a network product; no charge |
| Quote: |
| Pay the exact previously disclosed renewal from account balance |
| Paid: |
| Disable automatic renewal |
| free |
| Quote the VPN's next month on its actual paid scope; no charge |
| Quote: |
| Pay the VPN's approved next-month renewal from account balance using the exact quote and original key. |
| Paid: |
| Disable the VPN's automatic renewal; the current paid period remains |
| free |
| Read owned paid public addresses, account limits, target support and purchase availability. |
| free |
| Read one owned public address, attachment and paid-period state. |
| free |
| Quote a new paid public address for common checkout; no charge |
| Quote: |
| Attach or move an already-paid address to an owned network's NAT |
| free |
| Attach or move an owned paid public address to an eligible zero-public-IP server's private port |
| free |
| Detach an owned public address from its current target; it stays owned for the paid period |
| free |
| Quote the address's next month without charging; use the returned quote and this key for confirmation. |
| Quote: |
| Pay the approved address renewal from balance with its exact quote ID/token and original key. |
| Paid: |
| Disable address automatic renewal; ownership lasts until paid_until |
| free |
| Read one existing owned public binding's generation, state and assigned address |
| free |
| Bind an already reserved floating public binding to an owned private port when supported |
| free |
| Move a prepared floating public binding to another owned private port; confirm interruption to the old target. |
| free |
| Configure an existing reserved forwarding binding's TCP/UDP listeners |
| free |
| Request deletion of an existing binding using its generation |
| free |
Worked examples
Each example is a request to your assistant and the tools it calls.
Order a VPS (quote, then confirm)
Order the cheapest Cloud VPS with Debian and my SSH key, paid from balance.
get_order_plansfor the product, thenget_order_optionsfor the chosen plan (OS, period, resource IDs) andlist_ssh_keysfor the key ID.order_servicewithplan,os,period,resources,sshKey(orrootPassword, not both),payment: { payment: 1, successUrl: '', cancelUrl: '' }and a stableidempotencyKey. The first call returns a quote without charging. The API key needsvps:order(orvds:order,ds:order,fc:order) and spend caps.Show the exact gross EUR total and billing period. After the customer's approval, repeat the unchanged order and key with the returned
quoteToken,expected_total_eurandacknowledge_charge: true. Inspect the original attempt in the panel if its outcome is unknown; do not create another key to retry it.Poll
get_servicefor the returned order number; payment accepted is not server ready.
Networking (quote, then order)
Add a private load balancer to my network and pay from balance.
get_networking_capabilities,list_network_productsandget_network_payment_methods(pick thesystem=balancemethod).quote_network_productwithkind(private_lb,proxy_lborvpn_gateway),tierand anidempotencyKey; show the quote's EURgross_amount.After approval,
order_network_productwith the sameidempotencyKey,quote_id,quoteToken, the balancepaymentandacknowledge_charge: true. If the result is uncertain,find_network_product_orderby the originalquote_id, then pollget_network_product_order. Never buy a second copy.
DNS record upsert
Point www.example.com at 203.0.113.10 with a 5 minute TTL.
list_dns_zonesto find thezone_id, thenget_dns_zoneto inspect the existing records and their IDs (needsdns:read).To add an A value, call
upsert_dns_recordwithzone_id,name: "www",type: "A",content: "203.0.113.10",ttl: 300(needsdns:write). Different content adds another record and keeps existing values. An identical name/type/content tuple updates its TTL/comment and re-enables it if disabled. To replace an existing value, useupdate_dns_recordwith its exactrecord_idand the desired name, type, content and TTL.get_dns_zoneto read the desired records back, orget_dns_zone_historyto see the change.
For a waiting zone whose ownership TXT value was lost, first read
get_dns_zone.zone.verification.record.value. Use
reissue_dns_zone_verification only if that value is null/unrecoverable or the
customer requests rotation. It supports both pending_verification and
verification_expired; the previous value stops being accepted. Update the TXT
at the location given by zone.verification.next_step, then call
verify_dns_zone. Reissuing alone does not verify the zone or reset its status.
Order a paid certificate
Buy a one-year DV certificate for example.com; I generated the CSR myself.
list_certificate_catalogandget_certificate_catalog_productto choose a product and read its current EUR offer.quote_certificatewithproduct_id,offer_id,offer_generation,common_name(plus anyalternative_names), the public PKCS#10csr, the owned contact IDs and anidempotencyKey(needscertificates:order, paid operations and caps). Never send a private key.After the user approves the exact total,
order_certificatewith the same request, the sameidempotencyKey, thequote_token, thepaymentandacknowledge_exact_quote_and_payment: true.get_certificate_validation(publish the challenge, for example throughupsert_dns_record), thendownload_certificateonce it is issued.
Getting an API key
Log in at vpsnet.com
Go to Account > API Keys
Click Create API Key
Give it a name and copy the key
The key is shown only once — store it securely.
Troubleshooting
MCP tools not appearing in Claude Code VS Code extension
Install Claude Code CLI:
npm install -g @anthropic-ai/claude-codeVerify:
claude --versionshould show a version numberAdd server via CLI:
claude mcp add vpsnet -- npx -y vpsnet-mcpCompletely restart VS Code (not just reload window)
Check
~/.claude.jsonfor correct configuration
claude: command not found
Install the Claude Code CLI globally:
npm install -g @anthropic-ai/claude-codeVerify your PATH includes npm global packages. On Windows, restart your terminal after installing.
Environment variables not working
For Claude Code extension, environment variables must be in the env object within .claude.json, NOT system environment variables:
"vpsnet": {
"type": "stdio",
"command": "npx",
"args": ["-y", "vpsnet-mcp"],
"env": {
"VPSNET_API_KEY": "your_actual_key_here"
}
}API key errors
This server needs a management API key. Every failure below is reported by
the tools with an auth_problem object containing the cause and the fix, so
read that rather than guessing from the HTTP status.
Tool failures carry isError: true while preserving the API error details and
recovery guidance. Unknown mutation outcomes must be checked before another
attempt. Service order numbers must be copied from list_services; ASCII
letters, digits, and hyphens are supported, including multi-order suffixes.
Malformed or oversized URL identifiers are rejected before an API request.
What you see | What it means | Fix |
| The key is an AI-scoped key. Those are issued only for VPSnet AI assistant inference and are deliberately refused on the entire account API. Granting scopes cannot change this — the restriction is on the key type. | Create a separate key with scope |
| The key failed authentication outright. The API returns one identical 401 for every cause, so it is one of: unknown, revoked, expired, malformed, or your source IP is not on the key's IP allowlist. | Check the key is active and copied whole, and that any IP allowlist includes the address this server calls from. |
| A read-scoped key was used for a write; read keys are limited to GET. | Use a full-scope key, or stay on read-only tools. |
| The key authenticated but lacks the granular scope named in | Add that scope in Account > API Keys. |
| The endpoint refuses API keys entirely. API keys never grant admin access. | Use the panel with a signed-in session. |
Verify the key is correct (starts with
vpsnet_followed by 43 characters)Keys are shown only once at creation — if lost, create a new one
Check that the key hasn't expired (Account > API Keys)
deploy_ssh_key succeeded but SSH still fails
All VPSnet.com servers use
rootas the SSH usernameKey deployment is async — wait 15-30 seconds after deploying before attempting SSH
fetch is not defined or unexpected errors
This server requires Node.js 20+. If your default node is older (common with nvm setups), either:
Set Node 20+ as default:
nvm alias default 20Or use the nvm wrapper shown in the Codex section
License
Available Tools
311 toolsadd_domain_parent_dsAdd domain parent DSADestructiveIdempotentInspect
Queue adding public DNSSEC DS records at the parent zone for an owned domain. Confirm the records match the child zone's DNSKEY; mismatched DS records can prevent validating resolvers from resolving the domain. Requires domains:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| ds | Yes | One or more DS records, one per line. Accepted forms include '12345 13 2 ABCDEF...' or full BIND-style DS lines. | |
| domain_id | Yes | Owned domain ID from list_domains | |
| idempotencyKey | Yes | Unique key for this queued domain action; sent as Idempotency-Key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring destructiveHint=true and idempotentHint=true, the description adds valuable context beyond structured fields: it warns that mismatched DS records can prevent validating resolvers from resolving the domain, and states the API-key auth requirement. It does not describe what exactly gets destroyed or the queued operation's return behavior, but it meaningfully supplements the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is three sentences and front-loads the core action. The warning and auth sentences are informative and earn their place, though the middle sentence is more directive than descriptive and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a queued mutation tool with no output schema and full annotation coverage, the description supplies the key operational context: it is a write operation on the parent zone, requires domains:manage with an API key, and has a resolution-breaking failure mode if DS records do not match the child DNSKEY. Return-value behavior is not needed because no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters with formats and constraints. The description adds no parameter-level syntax or semantics beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Queue adding public DNSSEC DS records at the parent zone for an owned domain.' It is clear what the tool does, but it does not explicitly differentiate from close siblings such as delete_domain_parent_ds or set_dnssec.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context and a prerequisite: 'Confirm the records match the child zone's DNSKEY' and 'Requires domains:manage when using an API key.' It does not name explicit alternatives or when-not conditions, but the conditions for safe use are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_network_load_balancer_listenerAdd network load balancer listenerAIdempotentInspect
Add a listener and optional initial members using currently offered protocol capabilities. SMTP ports may be refused. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | ||
| members | No | ||
| protocol | Yes | ||
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| load_balancer_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only cover read-only/idempotent/destructive/open-world flags) by disclosing permission scopes, SMTP port refusal, ownership/feature/2FA enforcement, the meaning of an accepted-but-pending operation, the in_progress/reason_kind/reason_code polling contract, and the no-auto-retry recovery rule.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and constraints, and nearly every sentence carries actionable information. The polling paragraph is dense and long relative to the rest, but it is a deliberate operational contract rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return/outcome burden and does so: it explains that acceptance means pending, how to poll via in_progress and next_check_seconds, how to interpret reason_code/reason_kind, and how to recover from transport uncertainty. Complete for this mutation-plus-async tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, so the description must compensate. It adds real meaning for idempotencyKey (preserve key and unchanged body) and for port (SMTP refusal) and protocol capabilities, but says nothing about members, weight, or address shape, leaving part of the parameter set undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a listener and optional initial members'), which is clearer than the bare title. It does not explicitly contrast itself with the sibling add_network_load_balancer_member, which also touches members, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites: read capabilities and owned resource state first, obtain approval for the exact change, and note that reads need networking:read while changes need networking:manage. No alternative tool is named, but the when-to-use conditions are concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_network_load_balancer_memberAdd network load balancer memberAIdempotentInspect
Add an attached private server address to the selected listener; backend validates membership in this network. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | ||
| address | Yes | ||
| listener_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| load_balancer_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation hints cover the safety profile (readOnly=false, idempotent=true, destructive=false, openWorld=true), and the description goes well beyond them: required scopes (networking:read/manage, not granted by full/read defaults), ownership and 2FA lock enforcement, the fact that acceptance means pending rather than connectivity, the polling contract (in_progress, next_check_seconds, reason_kind waiting vs failure), and explicit idempotency recovery rules (reuse the original key and unchanged request, never auto-retry). This is exactly the behavioral context an agent needs for a risky async mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and prerequisites are front-loaded and there is essentially no filler; every clause maps to a real constraint (permissions, approval, async semantics, idempotency recovery). It reads as one very dense block, and fragments like 'Preserve reason_code.' hurt scannability, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter async mutation with no output schema, the description covers everything the agent needs: auth scope, approval workflow, non-destructive-but-pending semantics, how to interpret operation state, and how to behave under transport uncertainty. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, so the schema carries most parameter documentation. The description adds meaning only for idempotencyKey (preserve the original key and unchanged body on uncertain recovery) and obliquely for address ('private server address', validated for network membership). It says nothing about how listener_id and load_balancer_id relate, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (add) plus resource (attached private server address on the selected listener) and adds a scoping constraint: the backend validates membership in this network. An agent can distinguish it from add_network_load_balancer_listener and remove_network_load_balancer_member by name alone. It stops short of explicitly differentiating itself from sibling tools, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states concrete preconditions: read current capabilities and owned resource state first, and obtain approval for the exact change. It also implies the required permission scope, which effectively gates when the call can succeed. It does not, however, name an alternative tool or an explicit when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_dns_templateApply DNS templateADestructiveInspect
Apply a backend-defined DNS template to a native forward zone. The written records can change public DNS answers; overwrite=true replaces conflicting records. Records still pass the same API validation, quotas and conflict rules as manual record writes. Prefer preview=true first to show the user exactly which records a template would write before changing the zone. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| preview | No | true to dry-run the template and return the records it would write without changing the zone | |
| zone_id | Yes | DNS zone ID | |
| template | Yes | Template ID returned by list_dns_templates, e.g. web_service, null_mx, google_workspace, microsoft_365, mail_security, caa_letsencrypt | |
| overwrite | No | true to replace existing records that conflict with the template. Destructive: confirm the exact conflicts with the user first, ideally from a preview run. | |
| parameters | No | Template parameters, e.g. { ipv4, ipv6, www, mx_target, ttl } depending on the template |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive and open-world, but the description adds concrete consequences: the written records can change public DNS answers, overwrite=true replaces conflicting records, all writes pass the same API validation, quotas, and conflict rules, and dns:write is required for API keys. It even recommends preview to inspect the exact changes before applying. This is rich disclosure beyond structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, each earning its place, with the core action front-loaded. No filler or redundancy; the progression from action to side effects to validation to preview to auth is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with no output schema, the description covers the essential context: side effects on public DNS, destructive overwrite behavior, safety recommendation (preview), auth requirement, and validation/quotas. Nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents preview, overwrite, zone_id, template, and parameters. The description reinforces the meaning of preview and overwrite but adds no new syntax or constraints beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Apply a backend-defined DNS template to a native forward zone' — and distinguishes the operation from manual record writes by noting records pass the same validation, quotas, and conflict rules. It does not name a specific sibling tool (e.g., list_dns_templates or upsert_dns_record), so it falls just short of the sibling-differentiation bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Recommends 'Prefer preview=true first to show the user exactly which records a template would write before changing the zone,' which is a clear context and safe-order guideline. It also notes the dns:write requirement, but stops short of explicitly stating when to choose this tool over manual record writes or naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_network_vpn_gatewayAttach network VPN gatewayADestructiveIdempotentInspect
Attach or move an account VPN to an owned network only when standalone attachment is advertised. This recreates the gateway and interrupts connections; confirm the interruption. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that the operation recreates the gateway and interrupts connections, that it requires explicit networking:read/networking:manage scopes (and that default scopes do not grant networking), that the backend enforces ownership/feature/2FA locks, and how to interpret pending vs failed states. It also details idempotency-key recovery behavior on transport uncertainty, which annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and its disruptive consequence are front-loaded, followed by auth, preconditions, and result-interpretation guidance. It is dense and long, but nearly every sentence carries actionable information for a destructive, idempotent operation, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the safety/idempotency profile and the schema fully documents all three parameters, yet the description still supplies the missing operational context: interruption warning, auth scope requirements, pending-vs-failure semantics, polling cadence, and recovery rules. Nothing an agent needs to invoke this safely is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description nonetheless adds usage semantics for idempotencyKey ('reuse only the original key and unchanged request; never automatically retry') and implies that gateway_id/network_id must reference owned resources. This meaningfully extends the schema's field-level documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Attach or move an account VPN to an owned network') and adds a gating condition ('only when standalone attachment is advertised'). It clearly implies the inverse of the sibling detach_network_vpn_gateway without naming it explicitly, so sibling differentiation is present but not stated outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use condition ('only when standalone attachment is advertised'), a prerequisite sequence ('Read current capabilities and owned resource state first; obtain approval for the exact change'), and a confirmation requirement. It does not name alternative tools or spell out when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_private_network_portAttach private network portAIdempotentInspect
Attach an eligible existing owned service to a private network with port_intent_ready=true; omit ipv4 for automatic allocation or pass a fixed usable address. Check list_network_attachment_candidates for this network and service first, including pagination and attachment_mode. Set restart=true only after the user approves a required restart. An accepted attach is pending: it returns the port's reserve operation (queued with private_port_apply_pending; reserve, activate and detach take 13-81 s through the host) - poll it with get_networking_operation on in_progress, read its activation_operation_id once the activation that finishes the attachment exists, and verify the final port and service attachment state. Honor this endpoint's own refusal and reason_code. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| ipv4 | No | ||
| restart | No | Only after the user authorizes a required restart from attachment-candidates; omit otherwise | |
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| service_id | Yes | ||
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotentHint=true, destructiveHint=false), it discloses a great deal: the accepted attach is pending rather than confirmed, reserve/activate/detach take 13-81 s, the reason_code/in_progress state machine semantics, required networking:read vs networking:manage scopes, and backend ownership/2FA enforcement. Idempotency recovery behavior (reuse only the original key and unchanged body) is spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and prerequisites are correctly front-loaded, but the polling instruction is stated twice ('poll it with get_networking_operation...' and later 'Poll the returned operation/resource on its in_progress flag...'), and the pending/reason_code guidance is repeated, making the description longer than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async, world-mutating tool with no output schema and partial parameter coverage, the description covers the full lifecycle: pre-flight candidate check, auth scopes, pending semantics, poll cadence via get_networking_operation, activation_operation_id chaining, failure-vs-waiting reason interpretation, and safe recovery on transport uncertainty. An agent has everything needed to invoke and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description fills the notable gap: ipv4 has no schema description, yet the description explains omitting it triggers automatic allocation while passing one requires a fixed usable address. It also reinforces the restart approval condition and idempotencyKey preservation, adding meaning beyond the schema for the parameters that matter most.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause names a specific verb and resource ('Attach an eligible existing owned service to a private network') with an eligibility qualifier (port_intent_ready=true), which clearly separates it from siblings like attach_public_address_to_server or attach_network_vpn_gateway. It is slightly weakened by burying the core action under a long run-on sentence with operational detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit preconditions and ordering: check list_network_attachment_candidates for pagination and attachment_mode first, set restart=true only after user approval, omit ipv4 for auto-allocation, and poll with get_networking_operation rather than retrying blindly. This is textbook when-to-use and when-not guidance with named collaborating tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_public_address_to_networkAttach public address to networkADestructiveInspect
Attach or move an already-paid address to an owned network's NAT. Uses NETWORK generation; moving it removes the prior target's use of this address. No purchase occurs. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive, open-world, and non-idempotent behavior, but the description adds critical context: moving removes the prior target's use, permissions do not come from full/read defaults, backend enforces ownership and 2FA locks, and an accepted operation is pending rather than proof of connectivity. It also explains polling semantics and safe retry guidance, which is substantial behavioral detail beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, and subsequent sentences carry important operational information given the absence of an output schema. However, the description is a dense wall of procedural text that could be more scannable with structure, so it falls short of ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex asynchronous mutation with no output schema, the description covers what is needed: permission requirements, approval prerequisites, pending-operation semantics, polling behavior with next_check_seconds and reason_code, failure interpretation, and safe handling of transport uncertainty. It is complete enough for an agent to invoke and monitor the operation correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%: address_id and network_id have schema descriptions, but expected_generation has none. The description mentions NETWORK generation, which hints at the generation parameter, but does not explain what expected_generation represents or how to obtain it. Baseline 3 is appropriate since the schema does most of the work and the description adds only marginal parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (attach or move) and resource (already-paid public address) with the exact target (owned network's NAT). It also clarifies scope by saying no purchase occurs, which distinguishes it from purchase or allocation tools and from sibling attach/detach operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear prerequisites and permission context: read current capabilities and owned resource state first, obtain approval, and use networking:read or networking:manage. It does not explicitly name alternative sibling tools or say when not to use this tool, but the operational context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_public_address_to_serverAttach public address to serverADestructiveInspect
Attach or move an owned paid public address to an eligible zero-public-IP server's private port. Read server_target_enabled and candidate state; movement affects the previous target. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| private_port_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that movement affects the previous target, specifies the networking:read vs networking:manage permission split (and that full/read defaults do not grant networking), notes backend enforcement of ownership/feature/2FA locks, and fully documents the async model (accepted = pending, in_progress/reason_kind/reason_code semantics, no automatic retry). This is unusually rich behavioral context for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action in the first sentence, and nearly every clause carries behavioral information. It is dense and somewhat run-on in the polling/retry section, with a few fragments ('Preserve reason_code.'), but there is little pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with annotations present and no output schema, the description covers permissions, pre-checks, side effects on the previous target, and the full async/error handling contract. An agent has everything needed to invoke and monitor it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both UUID parameters are fully described in the schema, so the baseline is 3. The description adds only indirect meaning (that address_id is an owned paid address and private_port_id belongs to the target server) but no formatting or lookup guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb pair (attach or move), the exact resource (an owned paid public address), and the target (an eligible zero-public-IP server's private port). This distinguishes it immediately from siblings like attach_public_address_to_network and attach_private_network_port without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong context: pre-read server_target_enabled and candidate state, obtain approval for the exact change, and the eligibility constraint (zero-public-IP server). It stops short of explicitly naming alternative sibling tools for non-server targets, so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_service_dns_recordAttach service DNS recordADestructiveInspect
Point a DNS name at a service in one call: creates an A/AAAA/CNAME record in an owned forward DNS zone using the service's own IP (A/AAAA default to the service IP when ip is omitted; the ip, when given, must belong to the service). Not for secondary/suspended zones. For arbitrary record content use upsert_dns_record instead. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Optional service IP for A/AAAA; defaults to the service's first matching IP | |
| ttl | No | TTL in seconds (default 120) | |
| name | Yes | Record name inside the zone, e.g. 'www' or '@' for the apex | |
| type | Yes | Record type | |
| target | No | CNAME target hostname (required when type=CNAME) | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| zone_id | Yes | Owned forward DNS zone ID from list_dns_zones |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it constrains the target zone type (owned forward, not secondary/suspended), explains the IP ownership rule, and states the dns:write requirement. It does not clarify whether an existing record is overwritten or what happens on conflict, which is a minor gap given the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by tightly packed constraints, exclusions, an alternative, and an auth requirement. Every sentence earns its place; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers purpose, constraints, alternative, and permissions well enough for correct selection and invocation. However, it does not describe the return value or error behavior (e.g., what happens if the record already exists), which would be useful since no output schema is provided to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all seven parameters. The description adds meaningful semantics beyond the schema by stating that the provided ip must belong to the service (a constraint not present in the schema) and that A/AAAA default to the service IP when ip is omitted. It does not elaborate on ttl, target, or name handling, but those are covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('creates an A/AAAA/CNAME record') and immediately distinguishes the tool from siblings by naming upsert_dns_record for arbitrary record content. The scope ('owned forward DNS zone', 'using the service's own IP') further disambiguates it from generic DNS record creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives when to use (point a DNS name at a service), when not to use ('Not for secondary/suspended zones'), the alternative for other cases ('For arbitrary record content use upsert_dns_record instead'), and a required permission ('Requires dns:write when using an API key'). This is comprehensive guidance with no inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bind_network_public_ipBind network public IPADestructiveIdempotentInspect
Bind an already reserved floating public binding to an owned private port when supported. Does not purchase an address. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| binding_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| private_port_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: exact scope requirements (networking:read vs networking:manage, with full/read defaults not granting networking), backend enforcement of ownership, feature availability and 2FA locks, and the crucial warning that an accepted operation is pending rather than proof of connectivity. It also fully specifies the polling contract (in_progress/reason_kind/reason_code, next_check_seconds) and the no-auto-retry policy on transport uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the 'does not purchase' scope, then moves to prerequisites and the polling protocol; every sentence carries operational weight. It is dense and long, but for a tool with no output schema the polling/reason_code detail is not filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and does: it describes the returned operation/resource, the in_progress flag, reason_kind/reason_code semantics, next_check_seconds, and the failure condition. Combined with auth scopes and idempotent recovery rules, an agent has everything needed to invoke and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents binding_id, private_port_id and idempotencyKey. The description reinforces idempotency-key preservation and body-unchanged recovery, but adds nothing for expected_generation (optimistic-concurrency semantics are left unexplained), so it only marginally exceeds the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (bind a floating public binding to a private port) and scopes it with 'already reserved' and 'does not purchase an address,' which separates it from purchase/attach siblings. It stops short of naming an explicit alternative tool, so it is clear but not fully sibling-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions: read capabilities and owned resource state first, obtain approval for the exact change, and the operation only applies 'when supported.' No sibling tool is named as an alternative, but the when-to-use context is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_restore_filesBrowse backup filesAIdempotentInspect
Create a persisted asynchronous browse job to list one directory inside a backup point. This queues worker activity and stores the listing result; it does not restore files, change backup contents or the running server, or charge the account. Start at the backup root by passing only backupPointId. To open a subdirectory, pass sourceBrowseId plus the directoryEntryId of a type=directory entry from that result; filesystem paths are never accepted. A directory can hold an enormous number of files, so the server selects pages of 200 or 1,000 entries: while result.nextOffset is non-null, call again with the same sourceBrowseId and directoryEntryId and offset set to result.nextOffset. Use result.pageSize rather than assuming 200 when moving backwards. When nextOffset is null the listing cannot be paged further even if truncated is true — that is a capped scan; check result.listingStatus: 'complete' means the folder was read end to end, 'partial' means the listing is a bounded lower-bound slice, so never present it as the whole folder. Optionally pass filter to search entry NAMES in that one directory (substring, case-insensitive, never recursive) — but only when list_restore_file_points reported searchAvailable=true, otherwise this tool refuses rather than silently returning an unfiltered listing. The call is asynchronous: it returns a browse id in a pending state, and you must poll get_restore_file_browse until state is succeeded. Requires services:read and, because it is a POST, an API key that permits write operations plus an idempotencyKey.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring matched against entry NAMES in the browsed directory only. It never matches full paths and never searches subdirectories. Requires node search capability; check searchAvailable from list_restore_file_points first. | |
| offset | No | Copy a non-null result.nextOffset to page further through the SAME directory (a null nextOffset means the listing cannot be paged further). Must be 0 (or omitted) when starting a root listing or entering a directory. | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| backupPointId | Yes | Backup point ID returned by list_restore_file_points | |
| idempotencyKey | Yes | Client-global unique key for this exact browse request; reuse it only to replay the same request. | |
| sourceBrowseId | No | Browse id of the succeeded listing the directory entry came from. Omit to list the backup root. | |
| directoryEntryId | No | Opaque id of a type=directory entry from the source browse result. Filesystem paths are never accepted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: declares the call is asynchronous and returns a pending browse id, requires services:read and a write-capable API key because it is a POST, requires an idempotencyKey, and warns that 'partial'/'truncated' listings are bounded lower-bound slices that must never be presented as a whole folder. This is rich context the structured annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the 'does not' scope are front-loaded, but the body is a single dense paragraph that mixes paging, filtering, and async semantics. Nearly every clause earns its place, though breaking the paging and filter rules into separate sentences would improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return contract — and it does: pending browse id, state polling via get_restore_file_browse, result.nextOffset, result.pageSize, truncated, and listingStatus 'complete' vs 'partial'. Complete for a 7-parameter async tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3, but the description adds relational meaning the schema fields do not: sourceBrowseId and directoryEntryId must be used as a pair from the same result, paths are never accepted, offset must be 0 when entering a directory, and pageSize should be read from the result rather than assumed. That is genuine added value over the per-field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a persisted asynchronous browse job to list one directory inside a backup point') and immediately scopes what it is NOT ('does not restore files, change backup contents or the running server, or charge the account'). This cleanly separates it from list_restore_file_points and get_restore_file_browse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit entry conditions (root via backupPointId, subdirectory via sourceBrowseId + directoryEntryId), explicit paging loop (while result.nextOffset is non-null, call again with same sourceBrowseId/directoryEntryId and offset), the filter precondition (searchAvailable=true from list_restore_file_points), and the follow-up step (poll get_restore_file_browse until succeeded). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_plan_changeCalculate plan changeARead-onlyInspect
Preview a plan change. No payment is taken: the unused value of the current plan is converted at the new plan's price, so an upgrade moves the expiry EARLIER and a downgrade moves it later. Returns expirationDate, currentExpirationDate, expirationChangeDays (negative = shorter) and paymentRequired=false; show the customer both dates. Use get_plan_resources first to see available resource IDs for the target plan. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Plan ID from get_plan_options | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| resources | Yes | Array of numeric resource value IDs — one per resource type (RAM, SSD, IP, etc.). Get IDs from get_plan_resources response: each resource type has 'values' array, pick one value's 'id' per type. A type left out keeps its current value; an id the target plan does not offer is refused with 422 invalidResources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), and the description adds real behavioral context beyond them: the conversion arithmetic, that upgrades move expiry EARLIER while downgrades move it later, that paymentRequired=false, and the required permission scope. This is unusually rich disclosure for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then value/semantics, then return fields, then the prerequisite, then auth. Every sentence carries distinct information — no restatement of the name or filler — despite being a single dense paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the exact returned fields (expirationDate, currentExpirationDate, expirationChangeDays with sign convention, paymentRequired) and telling the agent to surface both dates to the customer. Combined with 100% param coverage and read-only annotations, nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents orderNo format, plan ID sourcing, and the resources array semantics in detail. The description's only added param signal is the get_plan_resources pointer for resource IDs, which largely duplicates the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Preview a plan change') and immediately disambiguates it from the actual-change siblings (change_plan) by emphasizing 'No payment is taken' and the preview output. An agent can tell this is a read-only estimator rather than a mutation without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit ordering guidance ('Use get_plan_resources first to see available resource IDs for the target plan') and states the auth scope ('Requires services:read when called with an API key'). It stops short of naming change_plan as the alternative when the customer actually wants to apply the change, so the when-not is only implied by 'Preview'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_application_actionCancel queued application actionADestructiveIdempotentInspect
Request pre-dispatch cancellation of the exact latest action for one owned managed application. This is available only while get_application_installation advertises latest_action.cancellable=true for the same action UUID. The backend verifies eligibility for new requests and replays the exact same-key retry even after the advertised state changes. Cancellation never stops or interrupts a running worker job. Requires applications:manage, the exact latest_action.id UUID, and a fresh client-global idempotencyKey that was not used for the original action or another request. Reuse that key only to replay this exact cancellation request. This is not a paid API-key operation.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| action_id | Yes | Exact action UUID from the current installation latest_action.id | |
| idempotencyKey | Yes | Fresh client-global unique key for this cancellation request. Do not reuse the original action's key or a key from another request; reuse it only to replay this exact cancellation request. | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give broad hints (destructive, idempotent); the description adds critical context: backend eligibility verification, exact same-key retry replay semantics after advertised state changes, required applications:manage scope, fresh idempotency key rules, and that it is not a paid API-key operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core constraint (exact latest cancellable action) then layers eligibility, retry semantics, requirements, and scope. Every sentence carries distinct information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, precondition-heavy mutation tool with no output schema, the description covers eligibility prerequisites, idempotency behavior, permissions, and limitations – sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters including patterns and formats. The description reinforces the idempotencyKey 'fresh, not reused' rule and the action_id exactness, but adds only marginal value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cancel), scope (pre-dispatch, exact latest action), and resource (owned managed application). Clearly distinguishes from siblings like cancel_vm_operation or restart_application by naming the exact-action constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly conditions use on get_application_installation advertising latest_action.cancellable=true, names the exact required UUID, and states what it does not do (never stops a running worker job) – clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_automatic_ssl_subscriptionCancel Automatic SSL subscriptionADestructiveIdempotentInspect
Cancel an owned Automatic SSL subscription after reading get_automatic_ssl_subscription and list_automatic_ssl_actions. Requires explicit approval. The action is durable and idempotent; for an ambiguous outcome, refresh and read state instead of using a new key. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| idempotencyKey | Yes | Client-global key for this exact action; reuse only for an unchanged retry | |
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions | |
| acknowledge_automatic_ssl_action | Yes | The user approved this exact Automatic SSL action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description still adds real value beyond them: durability of the action, the explicit-approval requirement, the certificates:manage permission, and idempotency-key reuse discipline. It stops short of stating the downstream effect of cancellation (e.g., what happens to the associated certificate), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the action and its prerequisites, then the durability/idempotency rule, then the permission. No filler and no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, it covers prerequisites, approval, permissions, and retry semantics adequately. The main remaining gap is what the cancellation actually does to the subscription's certificates and whether it is reversible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema largely documents the parameters itself, setting the baseline at 3. The description reinforces idempotencyKey semantics ('instead of using a new key') and implies the acknowledgement/approval requirement, but adds no syntax or format detail for reason or certificate_subscription_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Cancel an owned Automatic SSL subscription') with the owning-scope qualifier, which cleanly separates it from cancel_certificate, cancel_free_certificate, and refresh_automatic_ssl_subscription. An agent can identify the tool's function and its target resource without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit prerequisites: read get_automatic_ssl_subscription and list_automatic_ssl_actions first, obtain explicit approval, and hold certificates:manage. It also gives recovery guidance for the ambiguous-outcome case (refresh and read state rather than retry with a new key), which is precisely the when/when-not instruction an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_certificateCancel paid TLS certificateADestructiveIdempotentInspect
Cancel an eligible pending paid TLS certificate order. Read the product capabilities, current order and list_certificate_actions, then obtain explicit approval. If the outcome is ambiguous, refresh and read state before retrying. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| idempotencyKey | Yes | Client-global key for this exact action; reuse only for an unchanged retry | |
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates | |
| acknowledge_certificate_action | Yes | The user approved this exact paid-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this destructive, non-read-only and idempotent, so the safety profile is known. The description adds auth scope ('Requires certificates:manage'), a mandatory human-approval gate, and back-off behaviour on ambiguous results, all of which go beyond the annotations. It still says nothing about what state the order lands in after cancellation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by required preconditions and the permission requirement, with no filler. The intermediate 'read product capabilities / current order' enumeration is slightly procedural but each sentence carries an actionable instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description supplies the prerequisites, the approval gate, auth scope, and a retry discipline. The main remaining gap is the post-cancellation state and whether the action is reversible, which is minor given the rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so idempotencyKey, certificate_order_id and acknowledge_certificate_action are already documented in the schema; the description simply hints at approval and idempotent retries. The one undocumented parameter, reason, gets no added meaning from the description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus a tightly scoped resource: 'Cancel an eligible pending paid TLS certificate order.' The qualifiers 'pending' and 'paid' cleanly separate it from cancel_free_certificate, revoke_free_certificate and cancel_automatic_ssl_subscription without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear pre-flight workflow (read product capabilities, current order, list_certificate_actions, then obtain explicit approval) and a retry rule for ambiguous outcomes, which is real when-to-use guidance. It stops short of naming an alternative action to take instead when the order is not eligible or when cancelling is the wrong move.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_free_certificateCancel free TLS certificateADestructiveInspect
Cancel an owned pending free TLS certificate request before issuance. Read its current state and obtain explicit user approval; poll get_free_certificate for the final result. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| free_certificate_request_id | Yes | Customer-owned free-certificate request UUID returned by list_free_certificates | |
| acknowledge_free_certificate_action | Yes | The user approved this exact free-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true, idempotent=false, openWorld=true, but the description adds genuinely new behavior: the required certificates:manage permission, the mandate for explicit user approval, and the instruction to poll get_free_certificate to observe the outcome. This is more than the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler; the destructive scope is front-loaded, followed by the approval/polling workflow and the permission requirement. Every sentence carries distinct, actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive mutation with full schema coverage and annotations, the description supplies the missing operational context: permission scope, approval gate, and result-verification path. No output schema exists, so it correctly does not attempt to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the UUID and the acknowledge boolean are fully documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Cancel) and a precisely scoped resource: an owned pending free TLS certificate request, explicitly before issuance. This distinguishes it from revoke_free_certificate and cancel_certificate by lifecycle stage, though it does not name those siblings outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear workflow: read current state, get explicit user approval, then poll get_free_certificate for the final result, which names an alternative retrieval tool. It does not, however, explicitly state when to prefer revoke_free_certificate instead of cancelling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_certificate_validationChange paid certificate validationADestructiveIdempotentInspect
Change the validation method for one authorized DNS name on an owned paid TLS certificate order. Read current validation and list_certificate_actions first, then obtain explicit approval. For an ambiguous outcome, refresh and read state instead of using a new key. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| idempotencyKey | Yes | Client-global key for this exact action; reuse only for an unchanged retry | |
| validation_method | Yes | ||
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates | |
| acknowledge_certificate_action | Yes | The user approved this exact paid-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive, idempotent and open-world behavior, so the bar is lower; the description still adds the certificates:manage permission requirement, the mandatory approval gate, and the retry rule (reuse the key / refresh and read state rather than minting a new key). It does not say what the change disrupts for in-flight validation, which would have pushed this higher.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and scope, then preconditions, then the edge-case rule. No waste, though 'Read current validation' is slightly vague about which tool is meant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 5-required-parameter mutation with no output schema, the description covers preconditions, approval, permissions and retry behavior. The main omission is the set of valid validation_method values and any statement of what the change affects, but the essential calling information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, but the description compensates meaningfully: 'one authorized DNS name' clarifies domain, 'obtain explicit approval' maps to acknowledge_certificate_action, and 'instead of using a new key' explains idempotencyKey reuse semantics. It adds no guidance on acceptable validation_method values, which is the remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (change), resource (validation method), and precise scope: one authorized DNS name on an owned paid TLS certificate order. The 'paid' and 'one DNS name' qualifiers distinguish it from free-certificate siblings and from recheck/resend/get validation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite sequence — read current validation and list_certificate_actions first, then obtain explicit approval — and a conditional rule for ambiguous outcomes. It does not explicitly contrast with siblings like recheck_certificate_validation or resend_certificate_validation, so the agent must infer when those are preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_hostnameChange hostnameADestructiveInspect
Queue a customer-managed hostname change for a Container VPS, VPS, or Cloud VPS. VPSnet-managed vpsnet.cloud names are reserved. The returned noty UUID tracks the asynchronous action (get_event / wait_for_event). Also refused (422 reservedHostname): localhost, localdomain, www, ns and ns0-ns99 as bare names, names below .localhost or .internal, and names containing vpsnet. The hostname rule: at least 3 characters, at most 5 dot-separated labels of 1-30 letters, digits or inner hyphens. Requires services:manage and a full-access API key; this route is not idempotency-keyed.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| hostname | Yes | Customer hostname: 3-154 ASCII characters, at most five labels, each 1-30 alphanumeric/hyphen characters without a leading or trailing hyphen |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Substantial disclosure beyond annotations: reserved-name rules, the 422 reservedHostname error, hostname format constraints, required scope (services:manage) and full-access API key, and that the route is not idempotency-keyed. The async nature and tracking UUID are clearly explained, matching the destructiveHint and openWorldHint annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information is dense but front-loaded with the core action, then validation rules and the async return. It is a bit long, but nearly every sentence carries a distinct constraint, so waste is minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with no output schema, the description covers the action, side effects, error cases, required permissions, async tracking, and hostname validation—everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters with patterns and lengths. The description restates the hostname rule but adds no syntax or format detail beyond the schema, which is the baseline expectation at full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Queue a customer-managed hostname change') for named service types (Container VPS, VPS, Cloud VPS). It is clearly distinguishable from siblings like get_hostname and reset_hostname.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage by describing the operation, and mentions the returned noty UUID ties to get_event/wait_for_event, which hints at a follow-up pattern. However, it never explicitly states when to use this vs alternatives like reset_hostname, nor does it name any alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_planChange planADestructiveInspect
Change VPS plan. No payment is taken; the remaining value is converted at the new price, so an upgrade shortens the service period. Always call calculate_plan_change first and confirm the new expiry with the customer. Use get_plan_resources to get resource IDs for the target plan. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Plan ID from get_plan_options | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| resources | Yes | Array of numeric resource value IDs — one per resource type (RAM, SSD, IP, etc.). Get IDs from get_plan_resources response: each resource type has 'values' array, pick one value's 'id' per type. A type left out keeps its current value; an id the target plan does not offer is refused with 422 invalidResources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond the annotations: no payment is taken on plan change, remaining value is converted at the new price, and an upgrade shortens the service period. It also discloses required permissions (services:manage) and a full-access API key, which the structured fields do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and then adds prioritised behavioral and prerequisite information in tight, imperative sentences. Every sentence carries useful weight, though it is slightly longer than a minimal ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a destructive mutation with no output schema and annotations that only flag destructiveness, the description covers the essential billing semantics, prerequisites, and authentication requirements an agent needs to invoke it correctly. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents each parameter. The description references get_plan_resources for resource IDs, adding procedural guidance, but does not expand on parameter formats or meanings beyond what the schema provides, keeping it at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change VPS plan') that unambiguously identifies the operation. The scope is narrowed to VPS plans, and related tools (calculate_plan_change, get_plan_resources) are named, so an agent can place it precisely in the plan-change workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisites: always call calculate_plan_change first, confirm new expiry with the customer, and use get_plan_resources for resource IDs. These are clear usage conditions, though it does not state when to use this tool versus alternatives like renew_service or order_service, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_rdnsChange rDNSADestructiveInspect
Set a customer PTR override for an address returned by get_rdns. The new reverse DNS value replaces the previous public PTR answer after propagation. Canonical length is 3-253 characters; labels are 1-63 ASCII alphanumeric/hyphen characters without leading/trailing hyphens. A trailing dot is removed and reserved VPSnet names are blocked. OAuth requires services:manage; API keys require full access. This route is not idempotency-keyed.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | Assigned IPv4 or IPv6 address returned by get_rdns | |
| value | Yes | PTR hostname. Canonical length 3-253, labels 1-63 ASCII alphanumeric/hyphen characters, no leading/trailing hyphen; an optional trailing dot is removed | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds substantial context: propagation replacement, trailing-dot removal, reserved VPSnet names being blocked, OAuth scope services:manage, API-key full-access requirement, and lack of idempotency-keying. This is rich behavioral disclosure beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then constraints, then auth, then idempotency. Every sentence carries distinct operational value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no output schema, the description covers the action, value constraints, auth requirements, propagation behavior, and idempotency caveat. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already carries a description, including the PTR validation rules. The description repeats the canonical length/label constraints and adds that reserved names are blocked, but does not add much new meaning for the individual parameters beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Set'), resource ('customer PTR override'), and scope ('for an address returned by get_rdns'). Distinguishes itself from sibling read tool get_rdns and clear_rdns, so an agent can route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: use it to set a PTR override for an address returned by get_rdns, and notes the value replaces the previous public PTR after propagation. It does not explicitly name when-not to use it or contrast with clear_rdns, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_root_passwordChange root passwordADestructiveInspect
Change VPS root password. Rules: 6-40 chars, alphanumeric, MUST contain uppercase + lowercase + digit. Example: 'MyPass123'. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| password | Yes | New root password. 6-40 chars, alphanumeric, must contain uppercase + lowercase + digit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true but say nothing about the operation's side effects. The description adds meaningful context: the password format constraints, the required permission scope, and the full-access key requirement. It does not state whether the old password is invalidated or the service restarted, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, front-loaded with the action and immediately followed by constraints and prerequisites. Every sentence carries information the caller needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param mutation with no output schema, it covers action, constraints, example, and auth prerequisites. The one gap is what happens to the instance afterward (e.g., whether a reboot or session invalidation occurs), but the core invocation needs are met.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents both parameters; the description nonetheless restates the password rules with a concrete example ('MyPass123'), which is useful for constructing a valid value. It adds no new meaning for orderNo, but the password guidance has practical value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Change VPS root password') with no ambiguity, and 'VPS' plus 'root' clearly distinguish it from the many networking/SSL sibling tools. An agent can identify this as a server credential mutation immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states prerequisites (services:manage, full-access API key) but gives no explicit when-to-use vs alternatives guidance. Since no sibling tool changes root passwords, the risk of misrouting is low, but the description relies on that inference rather than stating it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_titleChange titleADestructiveInspect
Change service display title Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | New customer-visible display title, 3-25 characters | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so safety profile is partly covered. The description adds concrete auth requirements (services:manage, full-access API key) that annotations don't provide, which is genuinely useful. It does not explain what changes or side effects, but the auth disclosure exceeds the annotation bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One efficient sentence with zero waste; the action is front-loaded. Could be structured with the prerequisite separated from the action, but it is tight and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param mutation with no output schema, the description covers the core action and auth requirements. It omits scope details (e.g., whether title must be unique, whether change is immediate) but annotations and schema carry most of the burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully documented in the schema including length constraints and patterns. The description adds no parameter syntax or format details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Change service display title'. An agent understands it renames a service's visible title. It does not distinguish from sibling get_title or change_hostname, but the resource 'title' is specific enough to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the prerequisite (services:manage and full-access API key), which is useful context, but provides no explicit when-to-use vs alternative (e.g., change_hostname, get_title) guidance. Usage is implied by the name only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_domain_availabilityCheck domain availabilityARead-onlyInspect
Check read-only domain availability. Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check, e.g. example.lt or example.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is clear. The description adds a valuable operational context: the required API key scope (domains:read), which an agent must know before invoking with an API key. It does not cover return behavior or rate limits, but the added auth need earns credit above the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: the first front-loads purpose, the second adds the key prerequisite. No filler or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only check with rich annotations and no output schema, the description covers purpose and the key auth requirement. It does not explain what the returned availability result looks like, but with no output schema that is not strictly required, and the definition is otherwise complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'domain' parameter is already documented with an example in the schema. The description adds no additional syntax, format, or constraint details beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Check) and resource (domain availability) and adds 'read-only' to signal a safe query. It distinguishes itself from sibling mutation and quoting tools by focusing on availability, though it does not explicitly name an alternative or sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Requires domains:read when using an API key,' which is an authentication prerequisite rather than when to use this tool versus alternatives. No when-to-use context or exclusions are provided, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_rdnsClear rDNSADestructiveInspect
Clear a customer PTR override for an address returned by get_rdns. The automatic VPSnet PTR is restored, or PTR is removed when no automatic hostname exists. OAuth requires services:manage; API keys require full access. This route is not idempotency-keyed.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | Assigned IPv4 or IPv6 address returned by get_rdns | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description goes well beyond them: it names what is destroyed (the customer override), what replaces it (the automatic VPSnet PTR, or nothing when no automatic hostname exists), the required OAuth scope and API-key access level, and the absence of idempotency-keying. These are exactly the traits an agent needs before invoking a destructive route.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct load: purpose, post-condition, auth requirements, idempotency caveat. The primary action is front-loaded and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive action with no output schema, the description covers the post-call state, permission prerequisites, and retry safety. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both ip and orderNo are already documented, and the description's 'address returned by get_rdns' largely repeats the ip field description. Baseline 3 is appropriate since the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Clear a customer PTR override') and anchors it to a concrete address returned by get_rdns. An agent can distinguish this from change_rdns/get_rdns without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when this applies — an address previously returned by get_rdns — and describes both outcomes after the call. It stops short of explicitly contrasting with the sibling change_rdns, so no exclusion or alternative is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_network_security_groupClone network security groupAIdempotentInspect
Clone an owned group into a new name; use the source group's current revision. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| group_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_revision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-readonly, idempotent, non-destructive and open-world; the description goes far beyond by disclosing scope requirements, backend ownership/feature/2FA-lock enforcement, that acceptance is pending rather than proof of connectivity, the polling contract (in_progress, next_check_seconds, reason_code/reason_kind), and the recovery rule of reusing the original idempotency key with an unchanged body and never auto-retrying. This is exactly the behavioral detail an agent needs for an async mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the polling contract are front-loaded, and most sentences carry real information, but the description is a single dense paragraph with long run-on clauses and some redundancy ('Preserve reason_code' / 'never automatically retry'). It would be substantially more usable split into purpose, prerequisites, and result-handling sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and an async operation as the result, the description correctly covers how to interpret the returned operation/resource, what counts as failure, and how to recover from transport uncertainty. It does not say what the successful clone yields (e.g. the new group identifier) or whether rules and memberships are copied, which leaves a small gap for a 5-param required-argument mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the description must carry part of the load, and it does: 'use the source group's current revision' explains expected_revision, 'into a new name' maps to name, and the idempotency guidance explains idempotencyKey's recovery semantics beyond the schema's terse note. project_id/group_id are already documented in the schema, so only the deeper semantics of the remaining params are added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause states a specific verb and resource ('Clone an owned group into a new name') and adds the key constraint that the source's current revision is used. This is clearly distinguishable from siblings like create_network_security_group, update_network_security_group and delete_network_security_group without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real preconditions: read capabilities and owned resource state first, obtain approval for the exact change, and it names the exact OAuth scopes required (networking:read vs networking:manage) while warning that full/read defaults do not cover networking. It stops short of naming an alternative tool for the non-clone case, so it is clear context without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_application_accessConfigure application accessADestructiveIdempotentInspect
Queue an access change for one owned managed application. Read get_application_installation first and pass its current revision. If access.request.schema_version=2, preserve every exact endpoint key and configure each endpoint independently; use service and port metadata to match the user's intent instead of prioritizing array order or primary=true. Private removes that route's public listener. Public HTTP exposes it through the server public IP. Managed HTTPS requires an eligible VPSnet-managed DNS zone, subdomain, and explicit DNS approval; it may also carry additional_addresses (up to 4 per endpoint, 8 per application): other names in the customer's own VPSnet zones, each with its own DNS approval, where name '' or '@' is the zone's bare domain (for example example.com next to www.example.com) and action 'redirect' (default) answers 301 to the main address keeping path and query while 'serve' opens the same application; the main address is never changed by adding or removing an additional address; the list is the complete wanted set, so an access change that omits additional_addresses removes the saved ones (pass them again to keep them); additional_addresses are refused on every other mode. External HTTPS only records the customer-managed URL; VPSnet does not configure or validate its DNS, TLS, or reverse proxy. Confirm the exact change with the user first. A queued response must be verified with get_application_installation and get_application_events. Requires applications:manage and is not a paid API-key operation.
| Name | Required | Description | Default |
|---|---|---|---|
| access | Yes | One access choice, or schema_version=2 with every exact endpoint key and its independent access choice | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirmed this access change | |
| idempotencyKey | Yes | Client-global unique key. Reuse it only to replay this exact access request; never reuse it for another service or request. | |
| installation_id | Yes | Managed application installation UUID | |
| expected_revision | Yes | Current installation revision returned by get_application_installation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive, idempotent, and open-world, but the description adds substantial context beyond them: the operation is queued/asynchronous and must be verified, private mode removes a public listener, additional_addresses are refused on all other modes and are treated as the complete wanted set (omitting them deletes saved entries), external_https is not validated by VPSnet, and it requires applications:manage and is not a paid API-key op.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and prerequisite, and dense with useful detail, but it is delivered as one long semicolon-chained paragraph that is harder to parse than necessary. Little is wasted, yet a bulleted breakdown of modes would improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the verification tools and describing every mode's behavior in depth. Given a fully documented nested schema and complete annotations, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, but the description adds real business meaning: it explains the schema_version=2 per-endpoint model, the redirect (301, keeps path/query) vs serve distinction for additional_addresses, the '@'/'' bare-domain convention, and the max-address constraints — all beyond what the raw schema conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Queue an access change for one owned managed application' — and immediately distinguishes itself from read siblings by naming get_application_installation as a prerequisite rather than an alternative. An agent can tell this is the write-side counterpart to the application inspection tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sequences the workflow: read get_application_installation first, pass its revision, confirm with the user, then verify the queued result with get_application_installation and get_application_events. It also tells the agent how to disambiguate endpoint intent (use service/port metadata instead of array order or primary=true).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_application_resource_thresholdsConfigure application resource thresholdsADestructiveIdempotentInspect
Replace the complete optional resource-threshold set and email preference for one owned managed application. Read get_application_installation first. Omitted or null numeric fields disable that threshold; omitted email_enabled is false; omitting all four thresholds clears the preferences and disables email. Thresholds highlight measured CPU, memory, combined network-per-minute, and restart-delta samples. When email is enabled, VPSnet sends one account email when a configured threshold is reached and one when it recovers, without repeating while it remains high. Replacing thresholds can stop existing alerts. Thresholds do not reserve or enforce resources, restart containers, or affect billing. Confirm the exact thresholds and email preference with the user first. Requires applications:manage and is not a paid API-key operation.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirmed the complete threshold set | |
| memory_mib | No | Optional application memory display threshold in MiB | |
| cpu_percent | No | Optional display threshold as a percentage of one CPU core | |
| email_enabled | No | Send one account email when a configured threshold is reached and one when it recovers | |
| restart_delta | No | Optional restart display threshold between comparable samples | |
| installation_id | Yes | Managed application installation UUID | |
| network_mib_per_minute | No | Optional combined RX and TX display threshold in MiB per minute |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint, idempotentHint, and openWorldHint, but the description goes well beyond them: full-replacement semantics, the fact that replacing thresholds can stop existing alerts, the exact one-email-per-crossing notification behavior and that it does not repeat while high, and explicit non-effects (no reservation, enforcement, restarts, or billing impact), plus the applications:manage permission requirement. This is the kind of context structured fields cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core operation is front-loaded in the first sentence and every subsequent sentence carries distinct information (prerequisite, defaults, side effects, non-effects, authorization). It is dense with nine sentences for a high-complexity mutation tool, but nothing is redundant; slightly more could have been consolidated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a destructive, idempotent write tool, the description still covers prerequisites, confirmation requirements, default/null behavior, side effects on existing alerts, explicit non-effects, and authorization. An agent has everything needed to call this safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning the schema lacks: null or omitted numeric fields disable that threshold, omitted email_enabled defaults to false, and omitting all four thresholds clears preferences and disables email. These default/null semantics are the crux of calling the tool correctly and are not inferable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb (replace), resource (resource-threshold set plus email preference), and scope (one owned managed application), and 'Replace the complete... set' immediately distinguishes it from partial-update and from siblings like configure_application_access. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear prerequisite sequence: read get_application_installation first, and confirm the exact thresholds and email preference with the user before calling. It does not name a sibling alternative for the case where the agent wants a partial or read-only threshold view, so it stops just short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_network_public_forwardingConfigure network public forwardingADestructiveIdempotentInspect
Configure an existing reserved forwarding binding's TCP/UDP listeners. Forwarding uses one backend per listener; proxy load balancers use their own appliance authority and are refused here. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| listeners | Yes | ||
| binding_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructive/idempotent/openWorld annotations: it discloses the credential scope (networking:read vs networking:manage, with full/read denied), backend enforcement of ownership, feature availability and 2FA locks, and the pending-vs-failure semantics of the returned operation with reason_code/reason_kind polling rules. This is exactly the operational context an agent needs for a mutating, asynchronous call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is a dense single paragraph stacking polling, reason_code, retry and permission rules with heavy nesting. The content is mostly useful, but it would read better as distinct short statements rather than one long run-on block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, asynchronous mutation with no output schema, the description covers permissions, approval, idempotent recovery and operation-status interpretation thoroughly. The remaining gap is the meaning and conflict behavior of expected_generation, which is undocumented in both schema and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: binding_id and idempotencyKey carry their own descriptions, and the description reinforces the idempotency-key preservation rule. However it says nothing about expected_generation, which is a required optimistic-concurrency token, and the phrase 'one backend per listener' sits awkwardly beside the schema's backends array of 1-64 items.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb (Configure) and resource (an existing reserved forwarding binding's TCP/UDP listeners), and notes that proxy load balancers are refused, which separates it from LB-listener siblings. It never names an alternative tool by name, so differentiation is inferred rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition workflow: read capabilities and owned resource state first, obtain approval for the exact change, and never auto-retry on transport uncertainty. It stops short of pointing to the specific read tools (get_network_public_binding, get_networking_capabilities) or an alternative write tool, so the agent must infer which siblings to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_application_compose_adoptionConfirm Compose project adoptionADestructiveIdempotentInspect
Confirm the one-time takeover of an eligible unexpired Compose candidate. Re-enter every declared variable because VPSnet never reads or copies existing values. This destructive operation revalidates the exact source, stops its containers, and starts a managed replacement with the same verified local named volumes. On failure, source containers resume only after the managed replacement is conclusively contained; otherwise recovery fails closed. The exact external-volume binding remains signed into later lifecycle actions. Confirm the exact service, candidate, reconstructed recipe, variable NAMES, container/volume counts, and source-stop impact with the user first. Never repeat secret values in approval text or results. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Plain, non-secret environment values. Put secret values in the install tool's secrets field. | |
| name | Yes | Lowercase customer recipe name, 2-41 characters | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| secrets | No | Install-time secret values keyed by the exact declared names. Values are encrypted by VPSnet and omitted from tool results. | |
| confirmed | Yes | True only after the user confirmed this exact destructive takeover | |
| adoption_id | Yes | Opaque Compose adoption UUID returned by the prepare operation | |
| idempotencyKey | Yes | Client-global unique key. Reuse it only to replay this exact adoption confirmation. | |
| acknowledge_source_stop | Yes | True only after the user approved stopping the exact source containers during takeover | |
| registry_credential_ids | No | Owned registry credential UUIDs from list_application_registry_credentials | |
| acknowledge_recipe_risks | Yes | True only after the user approved the reconstructed customer-owned recipe | |
| acknowledge_runtime_restart | No | Explicit consent for a possible one-time service restart while the application runtime is prepared |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/open-world/idempotent, but the description adds substantial context beyond them: variables must be re-entered because VPSnet never copies values, the source is stopped and replaced with the same verified named volumes, failure recovery 'fails closed', external-volume binding persists into later lifecycle actions, and secrets must never be echoed in results. This is exactly the kind of behavior an agent needs for a destructive takeover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and its one-time destructive nature, then layered with the confirmation checklist and secret-handling rule. Dense, but for a destructive 11-parameter tool nearly every sentence carries actionable weight; minor tightening is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the preconditions, destructive consequences, failure semantics, and authorization requirement, which is comprehensive for a tool with no output schema. Pagination/return-shape details are unnecessary here, and the 11 parameters are fully documented in the schema; only the explicit prepare-then-confirm sequencing is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning by explaining the env/secrets split ('Re-enter every declared variable'), the variable-name-only confirmation requirement, and the no-secret-echo rule. It does not add per-parameter syntax, but the added semantic nuance over the schema justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (confirm), resource (Compose project adoption), and precise scope (one-time takeover of an eligible unexpired candidate). It also implicitly positions itself against the prepare operation it depends on, so an agent can distinguish it from the other compose-adoption siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete pre-call checklist ('Confirm the exact service, candidate, reconstructed recipe, variable NAMES, container/volume counts, and source-stop impact with the user first') and a hard prerequisite ('Requires applications:manage'). It stops short of explicitly naming prepare_application_compose_adoption as the required predecessor, but the 'returned by the prepare operation' reference and the checklist make the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_domain_registerConfirm domain registerADestructiveIdempotentInspect
Confirm a quoted domain registration and pay from the VPSNet account. Domain payments are non-refundable once confirmed and the domain action is queued only after payment succeeds. Requires the same idempotencyKey and quoteToken from quote_domain_register.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Registration period in years, exactly as quoted | |
| domain | Yes | Domain to register, exactly as quoted | |
| payment | Yes | Payment object. For balance: { payment: 1, successUrl: '', cancelUrl: '' } | |
| quoteToken | Yes | quoteToken returned by quote_domain_register | |
| nameservers | No | Nameserver hostnames used in quote | |
| whois_privacy | No | Hide public WHOIS contact details where supported. Defaults to the TLD setting. | |
| idempotencyKey | Yes | Same idempotencyKey used for quote | |
| tech_contact_id | No | Technical contact ID used in quote | |
| admin_contact_id | No | Admin contact ID used in quote | |
| billing_contact_id | No | Billing contact ID used in quote | |
| registrant_contact_id | No | Registrant contact ID used in quote |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds critical context: the payment is non-refundable, the domain action is queued only after payment succeeds, and the operation requires token reuse. This goes well beyond what structured fields communicate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences: what it does, what it costs, and what identifiers to pass. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, a nested payment object, and mutation semantics, the description covers the essential workflow (quote identifiers, non-refundability, payment gating). No output schema is needed since the domain action is queued asynchronously.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds the reuse constraint for idempotencyKey and quoteToken, but no format/semantic details beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Confirm a quoted domain registration') and the payment side effect ('pay from the VPSNet account'). Sibling tools quote_domain_register_register are named, making the quote/confirm pairing unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs that the same idempotencyKey and quoteToken from quote_domain_register must be reused, and warns that payments are non-refundable once confirmed. The quote→confirm workflow is clearly gated on having a prior quote.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_domain_renewConfirm domain renewADestructiveIdempotentInspect
Confirm a quoted domain renewal and pay from the VPSNet account. Domain renewal payments are non-refundable once confirmed and the renewal is queued only after payment succeeds. Requires the same idempotencyKey and quoteToken from quote_domain_renew.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Renewal period used in quote | |
| domain | No | Owned domain name used in quote | |
| payment | Yes | Payment object. For balance: { payment: 1, successUrl: '', cancelUrl: '' } | |
| domain_id | No | Owned domain ID used in quote | |
| quoteToken | Yes | quoteToken returned by quote_domain_renew | |
| idempotencyKey | Yes | Same idempotencyKey used for quote |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint/idempotentHint but not the consequences. The description adds crucial context beyond them: payment is non-refundable once confirmed, and the renewal is queued only after payment succeeds. This is exactly the behavioral disclosure a payment tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero waste: the action is front-loaded, followed by the consequence (non-refundable) and the prerequisite. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a payment/confirmation mutation with a nested payment object and no output schema, the description covers the key concerns: irreversibility, payment-gated sequencing, and required quote artifacts. Return/result behavior is not described, a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters including the nested payment object. The description reinforces that idempotencyKey/quoteToken must match the quote but adds no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (confirm, pay) and resource (quoted domain renewal) with clear scope, and distinguishes itself from quote_domain_renew by being the confirmation/payment step. An agent can tell it apart from confirm_domain_register and confirm_domain_transfer by the 'renewal' scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the prerequisite: 'Requires the same idempotencyKey and quoteToken from quote_domain_renew,' which routes the agent to the quoting sibling first. It stops short of stating when-not-to-use or failure handling, but the context is clear enough to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_domain_restoreConfirm domain restoreADestructiveIdempotentInspect
Confirm a quoted domain restore and pay from the VPSNet account. Domain restore payments are non-refundable once confirmed and the restore is queued only after payment succeeds. Requires the same idempotencyKey and quoteToken from quote_domain_restore.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Owned domain name used in quote | |
| payment | Yes | Payment object. For balance: { payment: 1, successUrl: '', cancelUrl: '' } | |
| domain_id | No | Owned domain ID used in quote | |
| quoteToken | Yes | quoteToken returned by quote_domain_restore | |
| idempotencyKey | Yes | Same idempotencyKey used for quote |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive, idempotent, open-world, and non-read-only behavior. The description adds important context beyond annotations: payments are non-refundable once confirmed and the restore is queued only after payment succeeds, which is crucial for an irreversible payment operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loads the primary action, and contains no redundant filler. Every sentence adds relevant information about payment, irreversibility, and prerequisites.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive payment-confirmation tool with no output schema, the description covers the key behavioral constraints: non-refundability, payment dependency, and idempotency token reuse. It is nearly complete, though it could clarify retry behavior or the meaning of the optional domain/domain_id fields, which the schema handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already fully documented in the input schema. The description reiterates the idempotencyKey and quoteToken linkage to quote_domain_restore, but does not add meaningful syntax or format detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: confirming a quoted domain restore and paying from the VPSNet account. It clearly distinguishes this action from quote_domain_restore by emphasizing confirmation and payment rather than quoting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear prerequisite: use the same idempotencyKey and quoteToken returned by quote_domain_restore, which implies this tool should be called only after obtaining a quote. It does not explicitly state when not to use it or compare it to alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_domain_transferConfirm domain transferADestructiveIdempotentInspect
Confirm a quoted domain transfer and pay from the VPSNet account. Domain payments are non-refundable once confirmed and the transfer is queued only after payment succeeds. Requires the same idempotencyKey, quoteToken, and authCode used for quote.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to transfer, exactly as quoted | |
| payment | Yes | Payment object. For balance: { payment: 1, successUrl: '', cancelUrl: '' } | |
| authCode | Yes | Transfer auth/EPP code used in quote; stored encrypted server-side after confirm | |
| quoteToken | Yes | quoteToken returned by quote_domain_transfer | |
| nameservers | No | Nameserver hostnames used in quote | |
| whois_privacy | No | Hide public WHOIS contact details where supported. Defaults to the TLD setting. | |
| idempotencyKey | Yes | Same idempotencyKey used for quote | |
| tech_contact_id | No | Technical contact ID used in quote | |
| admin_contact_id | No | Admin contact ID used in quote | |
| billing_contact_id | No | Billing contact ID used in quote | |
| registrant_contact_id | No | Registrant contact ID used in quote |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag the operation as destructive and idempotent, but the description adds critical behavioral context: payments are non-refundable once confirmed and the transfer is queued only after payment succeeds. It also specifies the payment source (VPSNet account), which goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loading the main action and payment consequence. Every sentence contributes necessary information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a payment-confirmation mutation with no output schema, the description covers prerequisites, irreversibility, and sequencing. It does not describe the return value or how to check transfer status afterward, which is a minor gap given the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter meaning is already well documented. The description adds a useful cross-parameter constraint: idempotencyKey, quoteToken, and authCode must match the values used for the quote.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: confirm a quoted domain transfer and pay. It clearly distinguishes this action from the preceding quote step by requiring the same idempotencyKey, quoteToken, and authCode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the sequencing clear: this is the confirmation step after quote_domain_transfer, and it must reuse the quote's tokens. It does not explicitly name the alternative tool or state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_serviceConsole serviceAInspect
Request a legacy or Cloud VPS console session and return its tracking event ID. This tool cannot redeem the one-time console token: redemption requires the customer signed into the VPSnet panel. Direct the user to the service console in the panel to open it. Firecracker serial console is browser-only and refuses API-key calls. The service must be running unless an active rescue session permits console access. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly=false, destructive=false, openWorld=false). The description adds substantial behavioral context beyond them: the token cannot be redeemed via API, Firecracker refuses API-key calls, the service must be running or in rescue, and it requires services:manage plus a full-access API key. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the action and return value, then the limitations. Every sentence carries distinct, decision-relevant information with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description supplies everything an agent needs: purpose, return type, redemption limitation, environment constraint, authentication requirements, and a fallback action. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single orderNo parameter is fully documented in the schema (pattern, length, example). The description adds no additional meaning to the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Request a legacy or Cloud VPS console session') plus the return value ('tracking event ID'). It explicitly scopes itself against the Firecracker serial console, letting an agent tell which console tool applies without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance ('cannot redeem the one-time console token', 'Firecracker serial console is browser-only and refuses API-key calls') and prerequisites ('service must be running unless an active rescue session permits console access'). It even tells the agent what to do instead: direct the user to the panel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_application_recipeCreate customer application recipeAIdempotentInspect
Resolve image tags from their registries, validate the resulting digest-pinned Compose definition, and freeze that exact definition as the first immutable customer-owned recipe revision. This saves a definition only and does not install or start containers. If validation remains pending, retain its ID and resolved_compose_yaml, poll get_application_recipe_validation, then retry with validation_id and that exact pinned document. Plain environment values belong in env; secret_names contain names only. Confirm the exact service, name, Compose definition, variable names, and registry bindings first. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Plain, non-secret environment values. Put secret values in the install tool's secrets field. | |
| name | Yes | Lowercase customer recipe name, 2-41 characters | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirmed this immutable recipe definition | |
| compose_yaml | Yes | Docker Compose YAML. Mutable image tags are resolved once and replaced with immutable sha256 digests before worker validation. | |
| secret_names | No | Secret variable names only; definitions and exports never contain values | |
| validation_id | No | Resume only the exact successful validation for this service and digest-pinned compose_yaml; retain the initial resolved document | |
| idempotencyKey | Yes | Client-global unique key. Reuse it only to replay this exact recipe creation request. | |
| registry_credential_ids | No | Owned registry credential UUIDs from list_application_registry_credentials |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only declare idempotency and non-destructiveness), the description discloses irreversibility ('immutable'), the resolve-then-pin digest behavior, the pending-validation resume loop, and the required applications:manage scope. These are material behaviors not captured in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then the workflow, then the preconditions and permission. Dense but each sentence contributes; the closing confirmation list is slightly enumerative but useful for a 9-param tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-parameter mutation with no output schema, the description covers the operation's semantics, the async validation/resume path, digest pinning, the env-vs-secrets contract, preconditions, and the required permission. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents parameter meanings. The description largely restates the env/secret_names distinction that the schema covers, adding only marginal value (validation_id resume intent, 'names only' emphasis), so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses specific verbs (resolve, validate, freeze) on a specific resource (the first immutable customer-owned recipe revision) and explicitly distinguishes itself from install/start behavior. An agent can differentiate it from create_application_recipe_revision and install_application_recipe without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit workflow guidance: confirm service/name/compose/variables/registry bindings first, and if validation is pending, retain the ID and poll get_application_recipe_validation then retry with validation_id. Also states the exclusion that it saves a definition only and does not install or start containers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_application_recipe_revisionCreate customer recipe revisionAIdempotentInspect
Resolve image tags from their registries, validate the resulting digest-pinned Compose definition, and freeze that exact definition as a later immutable customer-owned recipe revision. This does not update the running installation. If validation remains pending, retain its ID and resolved_compose_yaml, poll get_application_recipe_validation, then retry with validation_id and that exact pinned document. In-place updates retain the existing secret names and registry bindings for rollback safety; create a separate project when those bindings must change. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Plain, non-secret environment values. Put secret values in the install tool's secrets field. | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirmed this immutable recipe revision | |
| project_id | Yes | Customer-owned recipe project UUID returned by list_application_recipes | |
| compose_yaml | Yes | Docker Compose YAML. Mutable image tags are resolved once and replaced with immutable sha256 digests before worker validation. | |
| secret_names | No | Secret variable names only; definitions and exports never contain values | |
| validation_id | No | Resume only the exact successful validation for this service and digest-pinned compose_yaml; retain the initial resolved document | |
| idempotencyKey | Yes | Client-global unique key. Reuse it only to replay this exact immutable revision request. | |
| registry_credential_ids | No | Owned registry credential UUIDs from list_application_registry_credentials |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), and the description adds material context beyond them: the revision is immutable, the running installation is untouched, in-place updates preserve existing secret names and registry bindings for rollback safety, and applications:manage is required. This is exactly the extra behavioral disclosure annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five dense sentences, front-loaded with the core action before the validation-pending and binding-retention caveats. Every sentence carries distinct information, though the run-on first sentence and the tightly packed conditional clauses could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, nested-object mutation tool with no output schema and an asynchronous validation dependency, the description covers the full workflow: what is frozen, what is untouched, how to resume a pending validation, and the binding-change escape hatch. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by explaining the validation_id workflow (retain the ID and resolved_compose_yaml, retry with the same pinned document) and the digest-pinning behavior of compose_yaml, adding operational meaning to parameters whose schema text is already complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb chain (resolve, validate, freeze) and an exact resource ('immutable customer-owned recipe revision'), which distinguishes it from create_application_recipe, install_application_recipe, and validate_application_recipe. An agent can tell what it produces and that it is not an installation action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when/when-not guidance: it states this does not update the running installation, routes pending validations to get_application_recipe_validation with the retained validation_id, and tells the agent to create a separate project rather than reuse this tool when secret names or registry bindings must change. Alternatives and preconditions are named, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_backupCreate backupADestructiveInspect
Create a new backup. Returns noty UUID for tracking. First call get_backup_status to see available period dates and price. Backup is a paid operation (price shown in get_backup_status). Call only after the user approves the exact service, historical date, directories and disclosed price. Reuse the same idempotencyKey and unchanged request after a lost response; never rotate the key to retry an uncertain payment. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| period | Yes | Backup date in YYYY-MM-DD format. Must be one of the dates from get_backup_status options (up to 7 days in the past) | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| payment | Yes | Payment object. For balance: { payment: 1, successUrl: '', cancelUrl: '' } | |
| directories | Yes | Directories to backup, e.g. '/' for full backup | |
| idempotencyKey | Yes | Stable unique key for this exact approved backup purchase: 16-190 ASCII letters, digits, dots, underscores, colons or hyphens; first character must be alphanumeric. Reuse unchanged on retry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description goes well beyond them: it discloses this is a paid operation, that the price is product-specific, the required auth scope (services:manage) and full-access key, and the idempotency contract for lost responses. This is exactly the extra behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then prerequisites, payment disclosure, retry semantics, and auth in tight sentences; every sentence carries operational weight. Slightly dense and the 'noty UUID' typo is a minor blemish, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, paid, multi-param mutation with no output schema, the description covers the prerequisite read path, approval gate, payment nature, idempotency handling and required permissions. An agent has everything needed to invoke it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents each field (period, orderNo, payment, directories, idempotencyKey). The description adds meaning beyond the schema by tying period to get_backup_status options and explaining why idempotencyKey must be reused unchanged on retry, which enriches two parameters beyond their raw definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a new backup') and immediately scopes it against siblings by naming get_backup_status as the prerequisite and disclosing the returned tracking UUID. An agent can distinguish this from get_backup_history/list_restore_points without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit ordered workflow: call get_backup_status first for dates/price, then only proceed after the user approves the exact service/date/directories/price. It also names the retry rule and the anti-pattern (never rotate the key to retry an uncertain payment), which is exactly the when/when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ddns_tokenCreate DDNS tokenAInspect
Create a narrow DNS updater token for one hostname/pattern inside a verified customer-owned zone. purpose=ddns allows A/AAAA updater use; purpose=acme allows TXT only under _acme-challenge for DNS-01. Set allow_from to restrict updater source IPs/CIDRs. The full token is returned once. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | No | Token purpose. ddns allows A/AAAA updates; acme allows TXT-only DNS-01 updates under _acme-challenge. Defaults to ddns. | |
| zone_id | Yes | DNS zone ID | |
| allow_from | No | Optional comma-separated source IP/CIDR allowlist for updater requests, e.g. 203.0.113.10,2001:db8::/64. | |
| expires_at | No | Optional expiry date (YYYY-MM-DD or datetime). | |
| name_pattern | Yes | Allowed hostname or wildcard pattern. For purpose=acme this must be _acme-challenge.<zone> or _acme-challenge.<host>.<zone>. | |
| record_types | No | Allowed record types. For purpose=ddns: A, AAAA, or A,AAAA. For purpose=acme: TXT only. | |
| rate_limit_per_minute | No | Per-token update limit, 1-120/min. Defaults to 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, openWorldHint=false, destructiveHint=false) with no secrets-handling or auth info. The description adds genuinely useful behavior: the full token is returned only once, allow_from can restrict source IPs, and dns:write is required when using an API key. That is real context beyond the annotations, though it doesn't cover rate/return format in depth (rate limit is left to the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with zero filler; the creation scope leads, followed by purpose semantics, IP restriction, one-time token return, and permission requirement. Every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description supplies the key precondition (verified customer-owned zone), the critical return caveat (token shown once), and the auth requirement (dns:write). It could say more about what happens on expiry or about the returned token's non-retrievability after creation, but the essentials an agent needs are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents purpose, allow_from, name_pattern, record_types, and rate_limit_per_minute thoroughly. The description's explanations of purpose and allow_from largely restate the schema descriptions rather than adding syntax or edge-case detail beyond them. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Create a narrow DNS updater token for one hostname/pattern inside a verified customer-owned zone.' This clearly distinguishes it from list_ddns_tokens and revoke_ddns_token, and the adjective 'narrow' plus 'verified customer-owned zone' conveys the constraint profile up front.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what each purpose value is for (ddns = A/AAAA updates, acme = TXT under _acme-challenge), which guides the purpose field choice. However, it never states when to use this tool versus alternatives like revoke_ddns_token or the broader DNS record tools, nor does it give an explicit 'do not use for X' exclusion. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dns_zoneCreate DNS zoneAInspect
Create a forward DNS zone in pending verification state. Native zones are managed here; secondary zones AXFR from public primary DNS servers and require TSIG. Returns the ownership TXT in verificationRecord (name _vpsnet-dns.). If the value is lost, read get_dns_zone.zone.verification.record.value first; use reissue_dns_zone_verification only when it is null/unrecoverable or the customer requests rotation. The API records the nameservers the parent zone delegates the name to, so the TXT can still be proven at that previous provider after the domain is pointed at VPSnet. warnings: delegatedToPlatform (the domain already points at VPSnet nameservers - keep them, do not point it back) or parentServedByPlatform (the TXT goes in the parent zone); zone.verification.next_step says what to do next. Add the TXT at that location, then call verify_dns_zone. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Zone kind. Defaults to native. Use secondary for AXFR-backed zones. | |
| zone | Yes | Zone name, e.g. example.com | |
| secondary_masters | No | Public primary DNS server IPs for a secondary zone. Non-public IPs are rejected by the API. | |
| secondary_tsig_secret | No | Required for secondary zones. Base64 TSIG secret, 32-64 decoded bytes, e.g. openssl rand -base64 32. It is encrypted and never returned. | |
| secondary_tsig_key_name | No | Required for secondary zones. TSIG key name configured on the primary DNS server. | |
| secondary_tsig_algorithm | No | TSIG algorithm. Defaults to hmac-sha256. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safe-write profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description adds substantial behavioral context beyond that: the pending-verification state, the ownership TXT location, what the API records about nameservers, the delegatedToPlatform/parentServedByPlatform warnings, zone.verification.next_step, and the required dns:write scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and then proceeds through verification flow, warnings, and scoping in a dense but mostly non-redundant block. It is long and packed with near-prose clauses, so it is slightly heavy, but each sentence carries operational value and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must carry the return-shape burden, and it does: verificationRecord, zone.verification.record.value, warning fields, and next_step are all described. For a create tool with verification semantics, an agent has everything needed to invoke and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters, giving a baseline of 3. The description goes beyond by framing when secondary parameters matter ('secondary zones ... require TSIG') and giving the TXT naming convention _vpsnet-dns.<zone>, but it does not walk through each parameter explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a forward DNS zone') and immediately scopes the two kinds ('Native zones are managed here; secondary zones AXFR from public primary DNS servers and require TSIG'). An agent can tell this apart from get_dns_zone, list_dns_zones and verify_dns_zone without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: read get_dns_zone.zone.verification.record.value first, use reissue_dns_zone_verification only when it is null/unrecoverable or the customer requests rotation, and call verify_dns_zone after adding the TXT. Names the alternative tools and the exact conditions that select them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_domain_contactCreate domain contactADestructiveInspect
Create a domain contact for future domain registration/transfer. Requires domains:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City | |
| kind | Yes | Contact kind | |
| Yes | Contact email | ||
| phone | No | Phone number, preferably E.164 | |
| state | No | State/province | |
| address1 | No | Street address | |
| address2 | No | Street address line 2 | |
| vat_code | No | VAT code when relevant | |
| last_name | No | Required for individual contacts | |
| first_name | No | Required for individual contacts | |
| is_default | No | Make this the default domain contact | |
| postal_code | No | Postal code | |
| country_code | Yes | ISO-3166 alpha-2 country code | |
| organization | No | Required for business contacts | |
| organization_code | No | Company/legal entity code required for business contacts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/destructive profile is covered. The description adds a meaningful non-annotation fact: the domains:manage API-key scope requirement. It does not say whether creation is idempotent, whether the contact is immediately usable, or what the response contains, so extra value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste: purpose first, the API-key scope requirement second. Every clause earns its place and it is front-loaded with what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter destructive write with no output schema, the description covers purpose and auth scope but omits validation or conditional requirements (individual vs business fields) and return behavior. Those are described in the schema, but a destructive-create tool with no output schema would benefit from slightly more guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each of the 15 parameters is described in the schema, including kind, email, country_code, and the business/individual conditional requirements, so the description need not compensate. The description adds nothing param-specific beyond the required kind/email/country_code, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a domain contact') and adds the intended lifecycle purpose ('for future domain registration/transfer'), which distinguishes it from siblings like update_domain_contact and delete_domain_contact. It does not name those siblings explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for future domain registration/transfer' gives clear context on when to create a contact, and the sibling-family (list/update/delete_domain_contact) makes the create-specific role inferable. No explicit exclusions or named alternatives are given, so it stops at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_domain_glue_recordCreate domain glue recordADestructiveIdempotentInspect
Queue creating or updating a same-domain nameserver IP record at the registrar for an owned domain. The public parent-zone glue can direct resolvers to new nameserver addresses; updating an existing hostname replaces its previous addresses. Hostname must be below the domain, addresses must be public IPs, and this does not create DNS A/AAAA records or PTR. Requires domains:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Nameserver hostname below the owned domain, e.g. ns1.example.com. IP addresses are not accepted as hostnames. | |
| addresses | Yes | Public IPv4/IPv6 addresses for this nameserver host | |
| domain_id | Yes | Owned domain ID from list_domains | |
| idempotencyKey | Yes | Unique key for this queued domain action; sent as Idempotency-Key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive, idempotent, openWorld), the description discloses that the action is queued asynchronously, that updating an existing hostname replaces its previous addresses, the permission scope needed (domains:manage with an API key), and what it explicitly does not touch. That replacement semantics meaningfully enriches the destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose, followed by mechanism, constraints, and scope. Every sentence carries distinct information with no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers async queuing, replacement behavior, auth, and boundaries well. It could say more about how to track the queued action's outcome (e.g., events), but the annotation set already conveys the safety and idempotency profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds validation meaning beyond the schema: hostname must sit below the owned domain, addresses must be public IPs. It does not mention the 13-address ceiling or the idempotency key's role beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (queue creating or updating) and precise resource (same-domain nameserver IP record / glue at the registrar for an owned domain). It explicitly distinguishes itself from DNS record tools by noting it does not create A/AAAA or PTR records, letting an agent separate it from upsert_dns_record and create_dns_zone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear when this applies: registering glue for a nameserver hostname below an owned domain, and it flags the exclusion (not a DNS A/AAAA/PTR operation), which implicitly routes record edits elsewhere. It stops short of naming the concrete alternative sibling (e.g., upsert_dns_record) or the prerequisites like list_domains to obtain domain_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_firecracker_snapshotCreate firecracker snapshotAInspect
Create a temporary snapshot of a Firecracker VPS. Free for a short window, then billed per GB while kept until its automatic expiry. Take a snapshot before any risky or automated change, and delete it once the change succeeds to stop keep billing early. Check list_firecracker_snapshots for the exact policy and expiry fields. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| description | No | Optional note/label for the snapshot (helps identify what it was taken before) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, destructive=false), but the description adds distinctive context the annotations cannot convey: a free window followed by per-GB billing until automatic expiry, plus auth requirements (services:manage and a full-access API key). It stops short of describing reversibility or the response payload, but it substantially enriches the operational picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the billing/lifecycle context follows logically; every sentence earns its place. Minor awkwardness in 'stop keep billing early' slightly hurts readability, but the density is justified for a tool with billing implications.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining the billing lifecycle, expiry semantics, auth prerequisites, and the recommended cleanup step. Combined with 100% schema coverage, an agent has enough to call it correctly, though it does not say explicitly that the snapshot ID must be captured from an external source.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both orderNo and description are fully documented in the schema (including pattern, length, and examples). The description adds no parameter-level detail, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a temporary snapshot of a Firecracker VPS'), and the 'Firecracker' qualifier distinguishes it from the generic create_snapshot sibling. An agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('before any risky or automated change'), the follow-up action ('delete it once the change succeeds'), and a referral to list_firecracker_snapshots for the exact policy. This is precisely the decision guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_free_certificateCreate free TLS certificateAIdempotentInspect
Create one idempotent no-cost public DV certificate request after preflight. Call only after the user explicitly approves the exact DNS names, public CA, validation method, delivery method, and key-custody mode. For portable API/AI deployment use customer_csr and retain the private key on the destination. Managed mode permits unattended renewal, but its private key is portal-only behind two-factor verification and can never be retrieved through MCP. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| csr | No | Required only for customer_csr. Supply a public PKCS#10 CSR, never a private key | |
| hostname | Yes | Primary lowercase DNS name; wildcards begin with *. | |
| key_mode | Yes | managed enables unattended renewal but its private key stays portal/2FA-only; customer_csr keeps the private key with the caller | |
| idempotencyKey | Yes | Stable key for this exact free-certificate request; reuse only for an unchanged retry | |
| delivery_method | Yes | Choose only a delivery method that preflight reports available | |
| target_order_id | No | Optional owned VPS or Cloud VPS order ID returned by service tools | |
| alternative_names | No | Optional unique lowercase DNS subject alternative names | |
| validation_method | Yes | Choose only a validation method that preflight reports available | |
| certificate_authority | No | Optional CA choice; omit to let preflight recommend a currently ready authority | |
| acknowledge_public_certificate_request | Yes | True only after the user approves this exact public-certificate request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the required certificates:manage permission, explains the key-custody consequence of managed mode (key is portal-only behind 2FA and never retrievable via MCP), and reinforces idempotency. These are exactly the behavioral facts an agent needs before a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A tight four-sentence block that front-loads the purpose, then preconditions, then mode guidance, then permission. Every sentence earns its place, though it is dense enough that a small amount of condensed phrasing could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, 6-required, enum-heavy write tool with no output schema, the description covers preconditions, key-custody tradeoffs, and permissions. The main gap is that it doesn't describe what the call returns or idempotency-key retry behavior, though the schema covers the key semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every parameter including key_mode, csr, and delivery_method. The description's key_mode guidance ('use customer_csr for portable deployment', 'managed permits unattended renewal') largely restates what the schema already documents, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create), resource (free public DV TLS certificate request), and key qualifiers (idempotent, no-cost, after preflight). This clearly distinguishes it from siblings like renew_free_certificate, cancel_free_certificate, and preflight_free_certificate, which the 'after preflight' clause implicitly references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a strong, explicit precondition (call only after the user approves the exact DNS names, CA, validation/delivery method, and key-custody mode) and ties invocation to a prior preflight. It does not name the preflight tool or an alternative tool explicitly, so it stops short of full routing detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_functionCreate functionAIdempotentInspect
Create a Firecracker Function. Requires name, runtime_os_id, and code. Read list_functions for current runtimes and limits. Retain the idempotency key for creation recovery. webhook_enabled exposes a public URL for external callers. Invocations are usage-billed (CPU + memory seconds) from the account balance.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Function source code | |
| name | No | Function name | |
| vcpus | No | 1-8 vCPUs, default 1 | |
| enabled | No | Whether the function can be invoked | |
| memory_mb | No | 64-8192 MB, default 256 | |
| entrypoint | No | Entrypoint command/handler | |
| description | No | Description (max 2000 chars) | |
| environment | No | Environment variables as JSON object string. Omit during unrelated edits to preserve existing values; never send back redacted placeholders. | |
| runtime_os_id | No | Runtime OS ID (see list_functions response for available runtimes) | |
| idempotency_key | No | Stable key for this exact creation. Reuse it after an uncertain response; do not create a second function. | |
| timeout_seconds | No | 1-300 seconds, default 30 | |
| webhook_enabled | No | Expose a public webhook URL for this function | |
| private_network_id | No | Private network ID from list_functions privateNetworking discovery. Omit to preserve an existing binding during update; null detaches it. Backend validates ownership and availability. | |
| rotate_webhook_secret | No | Rotate the webhook secret |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-destructive, idempotent, open-world behavior. The description adds real value beyond them: idempotency-key retention for recovery after an uncertain response, public URL exposure via webhook_enabled, and usage-based billing from the account balance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then layered with prerequisites, recovery, webhook, and billing in five tight sentences. Each sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter mutation with no output schema, the description covers the key operational concerns an agent needs: required inputs, runtime discovery, idempotency recovery, webhook exposure, and billing. It omits lifecycle/error semantics but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description adds meaning: it names the three required fields and explains webhook_enabled's external-caller semantics beyond the schema's terse text. Minor inconsistency: it calls name/runtime_os_id/code required while the schema lists zero required params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a Firecracker Function"), clarifying the platform beyond the bare name/title. It does not explicitly differentiate from sibling creation tools like create_temp_vm or update_function, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete prerequisite ("Read list_functions for current runtimes and limits") and a recovery instruction about the idempotency key. However it never states when to use this versus update_function or when not to call it, so usage is only partially guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_network_security_groupCreate network security groupAIdempotentInspect
Create a named allow-rule set. If no egress rule is supplied, the backend adds an egress-any allow rule; updates instead keep exactly the rules supplied. Optional network_id scopes it to that network; otherwise it belongs to the project. IPv6 rules are unavailable. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| rules | Yes | ||
| network_id | No | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations: it discloses the implicit egress-any default rule, IPv6 unavailability, the exact auth scopes required (networking:read/networking:manage), backend-enforced ownership/feature/2FA locks, and detailed async semantics (in_progress polling, reason_code meaning, waiting vs failure). The idempotency and no-auto-retry recovery rules are also spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and long, but front-loaded with the create semantics before moving to auth and async behavior, and no sentence is filler given the async-operation complexity. The lack of visual structure in a single block keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the return contract ('An accepted operation is pending, not proof of connectivity'), how to poll it, and how to interpret reasons and recover from transport uncertainty. Combined with auth and default-rule disclosure, an agent has everything needed to call and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description compensates by clarifying network_id scoping (network vs project), the egress-default behavior of the rules array, and the precise handling of idempotencyKey on uncertain recovery. It adds real meaning over the schema, though rule-field details (direction/protocol/ports) are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a named allow-rule set') and immediately distinguishes the create case from updates ('updates instead keep exactly the rules supplied'). An agent can tell this apart from update_network_security_group and clone_network_security_group without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions ('Read current capabilities and owned resource state first; obtain approval for the exact change') and contrasts create vs update semantics, plus the network_id scoping choice. It does not explicitly name alternative sibling tools or state when-not to use this, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_network_vpn_peerCreate network VPN peerAIdempotentInspect
Add a device with an externally generated one-time PUBLIC reveal key. Pass 0-16 owned grant-candidate IPv4 addresses: split-tunnel VPNs require at least one; full-tunnel VPNs may use an empty list. Keep the matching private key entirely outside MCP. The gateway generates the WireGuard key; wait for config_available before consuming its sealed configuration. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| grants | Yes | ||
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| reveal_public_key | Yes | Customer-generated one-time X25519 PUBLIC key only. Keep its private key outside MCP; needed to decrypt the sealed configuration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=false, idempotentHint=true and openWorldHint=true, the description still adds a great deal: the accepted-but-pending nature of the operation, the polling contract on in_progress with next_check_seconds, how to interpret reason_kind waiting vs failure, permission/ownership/2FA enforcement by the backend, and the no-automatic-retry rule on transport uncertainty. It also discloses that the gateway generates the WireGuard key and that private key material must stay out of MCP.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and key-material constraint in the first three sentences, then handles lifecycle, permissions and recovery. Dense but information-bearing throughout; the polling/reason_code passage is long and could be tightened, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex async mutation with no output schema, it covers the operation lifecycle, idempotency recovery, and interpretation of status fields well enough to call and poll correctly. It leaves the concrete shape of the returned operation/resource slightly implicit, but no serious gap remains for a caller.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description compensates meaningfully: it clarifies that grants is a 0-16 list of owned grant-candidate IPv4 addresses with split-tunnel/full-tunnel semantics, and that reveal_public_key is a one-time X25519 public key whose private half must remain external. gateway_id, idempotencyKey and reveal_public_key already carry schema descriptions, so this is additive rather than essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a device' as a network VPN peer) plus the key mechanic (externally generated one-time public reveal key), which separates it from revoke_network_vpn_peer, set_network_vpn_peer_grants and take_network_vpn_peer_config. It doesn't explicitly name any sibling, so an agent must infer the boundary, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage conditions: 0-16 owned grant-candidate IPs, split-tunnel requires at least one, full-tunnel may be empty. It also states prerequisites ('Read current capabilities and owned resource state first; obtain approval for the exact change') and required scopes. It stops short of naming alternative tools for adjacent operations, so 4 not 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_private_networkCreate private networkAIdempotentInspect
Create an approved private network for existing services when no suitable owned network exists. A false new-order private_network.available or order_availability result alone does not block this route; honor this endpoint's own quota and feature refusal. Every subnet is unique on the whole platform and comes from 100.64.0.0/10. Omit subnet and the platform allocates a free block of subnet_prefix_length (28..24, default 26 = 64 addresses; capabilities.private_network.subnet_sizes lists each size with its server count and suggested block); or name an aligned /28 through /24 inside 100.64.0.0/10 that no network holds (409 subnet_in_use), never both. Creation is asynchronous: poll its operation and get_private_network until network.port_intent_ready is true, then check attachment candidates. A successful network_graph_created operation and provisioning_status=configured describe the graph stage; the first guest has not yet qualified connectivity. Never wait for applied_generation to equal generation before the first attachment. Creation does not itself attach a server or buy a public address. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| subnet | No | ||
| settings | No | Use only choices currently advertised by get_networking_capabilities. Custom addresses require an explicit subnet; DHCP is currently always enabled. | |
| default_policy | No | ||
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| subnet_prefix_length | No | Size of the allocated subnet when subnet is omitted; default 26 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds extensive behavior beyond annotations: asynchronous creation, polling via operation and get_private_network until port_intent_ready, graph-stage nuance, no automatic attachment, explicit networking:read/manage requirements, quota/2FA enforcement, and in_progress versus failure semantics. It also aligns with the idempotentHint by stressing preservation of the original idempotency key and never auto-retrying on transport uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, subnet rules, async behavior, and auth/approval constraints efficiently for such a complex operation. However, the polling and idempotency guidance is repeated in multiple places, so the description is longer and less tightly structured than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex open-world, idempotent, asynchronous creation tool with no output schema and only partial parameter description coverage, the description covers the critical operational concerns: auth scope, approval, subnet allocation, async polling, reason_code handling, idempotent recovery, and the fact that creation does not attach or purchase connectivity. It gives an agent enough to call and monitor the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema description coverage, the description adds important semantics for subnet and subnet_prefix_length: uniqueness across the platform, 100.64.0.0/10 range, omission behavior, default /26, capability-based sizing, alignment rules, and subnet_in_use conflict. It does not explain default_policy or add much beyond the schema for some other nested settings, so it is strong but not fully comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: creating an approved private network for existing services when no suitable owned network exists. It also distinguishes the operation from attachment or public-address purchase by saying creation does not itself attach a server or buy a public address.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for use: when no suitable owned network exists, and clarifies that a false order-availability result alone does not block this route. It also says to read current capabilities and owned resource state first and obtain approval, though it does not name the exact alternative sibling tool for checking existing networks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_snapshotCreate snapshotADestructiveInspect
Create a disk snapshot of a Cloud VPS (KVM/VDS) service. Free for a short window, then billed per GB while kept (see list_snapshots policy). Take a snapshot before any risky or automated change — it's free for an initial window, so it's cheap insurance you can roll back to. DELETE the snapshot once the change succeeds and you no longer need it — after the free window it is billed per GB while kept (Cloud VPS snapshots do NOT auto-expire), so never leave snapshots lying around. Only one snapshot action can run at a time; snapshot count is limited per service. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| description | No | Optional snapshot description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the free window followed by per-GB billing, that snapshots do NOT auto-expire, that only one snapshot action runs at a time, that snapshot count is limited per service, and the auth requirements (services:manage + full-access API key). This is exactly the operational context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and readable, but the billing fact is stated twice ('Free for a short window, then billed per GB while kept' and 'after the free window it is billed per GB while kept'), which is redundant for a description of this length. The repeated cost warning costs a point on structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers cost model, expiry behavior, concurrency limits, per-service caps and auth requirements, which is thorough for a mutation tool with no annotation support for those facts. It does not describe what is returned or how to track the resulting operation, a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so orderNo (tenant-owned service order number, with pattern and length bounds) and the optional description are already fully documented in the schema. The description adds no additional parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and precise resource (disk snapshot of a Cloud VPS KVM/VDS service), and implicitly contrasts with the sibling read/delete tools via the 'see list_snapshots policy' and 'DELETE the snapshot' workflow. An agent can distinguish this from list_snapshots, rollback_snapshot and delete_snapshot without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('Take a snapshot before any risky or automated change') plus follow-up workflow guidance (delete once the change succeeds). It does not explicitly name a sibling alternative (e.g. rollback_snapshot) or state when NOT to snapshot, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ssh_keyCreate SSH keyAInspect
Add a new SSH key to the account. To deploy software on a VPS, read the local machine's public key from ~/.ssh/id_rsa.pub or ~/.ssh/id_ed25519.pub, upload it here, then deploy_ssh_key to the VPS.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Key name/label | |
| public_key | Yes | SSH public key content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the mutation/safety profile is covered structurally. The description adds the workflow context (this only registers the key on the account; a separate deploy step is required), but says nothing about permissions, duplicate-name/idempotency behavior, or key-format validation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: purpose first, workflow second. No filler, no repetition of the title, and the ordering constraint (read local key -> upload here -> deploy) is presented in execution order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter creation tool with annotations covering safety, the description supplies purpose, prerequisite and follow-up step adequately. The remaining gaps are minor: no mention of the response shape (no output schema exists) or failure modes such as duplicate key names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning by telling the agent where public_key content comes from (~/.ssh/id_rsa.pub or ~/.ssh/id_ed25519.pub) rather than just 'SSH public key content'. It does not elaborate on the name/label constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a new SSH key') plus scope ('to the account'), which cleanly separates it from the sibling deploy_ssh_key (which acts on a VPS) and from list_ssh_keys/get_ssh_key/delete_ssh_key. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use scenario ('To deploy software on a VPS') and names the alternative/next tool (deploy_ssh_key), plus the prerequisite of reading the local public key. It stops short of stating when *not* to use it or how it relates to list_ssh_keys (e.g. checking for an existing key first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_temp_vmCreate on-demand server session (Coming soon)BDestructiveIdempotentInspect
Coming soon: customer ordering is disabled. The backend returns tempVmComingSoon before any paid intent, charge, host, IP, or service allocation.
| Name | Required | Description | Default |
|---|---|---|---|
| os_id | No | Optional enabled Firecracker guest OS ID. Omit it to use the current default; Functions runtime images are rejected. | |
| profile | No | on-demand server profile returned by get_temp_vm_options | |
| quote_token | Yes | Short-lived quote token returned by quote_temp_vm | |
| ttl_minutes | No | Session duration from get_temp_vm_options.allowed_ttls | |
| root_password | No | Optional root password with uppercase, lowercase, and numeric characters. Never use together with ssh_public_key. | |
| ssh_public_key | No | Optional SSH public key. Never use together with root_password. Omit both credential fields for password delivery by account email. | |
| idempotency_key | Yes | Client-global key for one exact on-demand server quote and create attempt. Reuse it only with the unchanged request. | |
| acknowledge_price_eur | Yes | Exact gross EUR amount disclosed by quote_temp_vm and approved by the user | |
| acknowledge_no_backups | Yes | Confirm the disclosed data policy: automatic backups and snapshots are not included, so required data must be stored elsewhere before server deletion |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (destructiveHint=true, idempotentHint=true, openWorldHint=true). The description adds genuinely new behavioral context: the call short-circuits with tempVmComingSoon before any paid intent, charge, host, IP, or service allocation — i.e., invoking it is a guaranteed no-op with no billing impact. It does not describe the required quote/idempotency handshake or error surface, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the critical availability status front-loaded before the backend behavior detail. Efficient, though it allocates all its budget to status rather than purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, 4-required mutation tool with no output schema, the description covers the most important current fact (it is unavailable and will not allocate anything) but says nothing about what the tool creates, its prerequisite quote flow, or the response shape. Adequate for steering the agent away, incomplete as a specification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 9 parameters (quote_token, idempotency_key, acknowledgements, credentials, ttl, profile, os_id) are already documented in the schema with cross-references to sibling tools. The description adds no parameter meaning whatsoever, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description never states what the tool does — it only announces that ordering is disabled. The agent must infer the operation (provisioning a temporary on-demand server session) from the name and title. It is closer to a status/tautology note than a purpose statement, and it does not distinguish this tool from siblings like quote_temp_vm or order_service.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Customer ordering is disabled" is an implicit but strong when-not-to-use signal: an agent reading this should avoid calling it expecting a server. However, no alternative path is named (e.g., use quote_temp_vm or retry later), and there is no guidance on whether the call is safe to attempt for probing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dns_recordDelete DNS recordADestructiveInspect
Delete a forward DNS record from desired state. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID | |
| record_id | Yes | DNS record ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new context beyond them: the required dns:write scope for API-key auth and the fact that deletion targets declarative desired state. It does not state irreversibility or synchronous-vs-async behavior, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the core action front-loaded and the auth constraint second. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two well-documented parameters and annotations covering the destructive profile, the definition is close to adequate. However, for a destructive operation with no output schema, it omits whether the record is removed immediately or queued, whether a missing record errors, and how success is reported, leaving real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with zone_id and record_id both documented in the schema, so the baseline is 3. The description adds no additional semantics such as identifier formats, lookup behavior, or whether zone_id is derivable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a forward DNS record') plus a qualifier ('from desired state'), which is clearly distinguishable from write-oriented siblings like upsert_dns_record and update_dns_record. It stops short of explicitly contrasting itself with those siblings, so it isn't a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the delete verb; the description never says when to remove a record versus upserting or updating one, nor what happens if the record is already absent. The 'Requires dns:write when using an API key' line gives a partial prerequisite, which lifts it above pure absence of guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dns_zoneDelete DNS zoneADestructiveInspect
Delete a forward DNS zone. Published zones are queued for removal from the managed DNS platform. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the description earns credit for the extra behavioral facts it supplies: published zones go through a queued/asynchronous removal path rather than instant deletion, and API-key callers need dns:write. It stops short of saying whether the operation is reversible or cancelable once queued.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: the action first, then the behavioral consequence, then the permission requirement. No filler and nothing important buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no output schema and annotations covering the safety profile, the description supplies the async queueing behavior and the required scope, which is most of what an agent needs. Minor gap: no statement of what happens on an invalid/already-queued zone or how to confirm completion (list_networking_operations-style follow-up).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter (zone_id) and schema coverage is 100%, so the schema already documents it fully. The description adds no extra meaning about the identifier (e.g. how to obtain it, whether it accepts a name), which is the expected baseline when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Delete a forward DNS zone'), which distinguishes it from delete_dns_record and delete_domain_glue_record among the many delete_* siblings. It does not explicitly name which sibling to use instead, but the resource specificity makes the target unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the destructive verb rather than stated: there is no guidance on preconditions (e.g. whether the zone must be unpublished or empty) or on when to prefer delete_dns_record instead. The 'published zones are queued' note gives some situational context but no when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_domain_contactDelete domain contactADestructiveInspect
Delete an unused domain contact. Contacts referenced by domains are rejected. Requires domains:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain contact ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds useful context beyond that: the authorization requirement ('Requires domains:manage when using an API key') and the rejection rule for referenced contacts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and immediately followed by the two most important constraints. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete tool, the description covers the action, the key precondition, the failure constraint, and the required permission scope. Annotations cover destructiveness and no output schema exists, so nothing further is required for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' has 100% schema description coverage ('Domain contact ID'), so the schema already carries the semantics. The description adds no additional meaning about format or lookup behavior beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Delete an unused domain contact.' It clearly distinguishes this tool from sibling operations like list_domain_contacts, create_domain_contact, and update_domain_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-to-use condition ('unused domain contact') and a when-not condition ('Contacts referenced by domains are rejected'), but it does not name an alternative tool to use when the contact is referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_domain_glue_recordDelete domain glue recordADestructiveIdempotentInspect
Queue deleting a same-domain nameserver IP record for an owned domain. Remove or change domain nameserver delegation first if the hostname is still delegated. Requires domains:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | Owned domain ID from list_domains | |
| record_id | Yes | Record ID from list_domain_glue_records | |
| idempotencyKey | Yes | Unique key for this queued domain action; sent as Idempotency-Key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds value beyond that: the operation is queued/asynchronous, it requires domains:manage with an API key, and deletion is blocked by existing delegation. It does not say how to observe the queued result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the destructive action front-loaded and the prerequisite and auth requirement following in order of relevance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, queued delete with no output schema and fully described params, the description covers the safety-relevant essentials: what is destroyed, the blocking precondition, and auth scope. It omits what the agent gets back (e.g. a queued action to track via wait_for_event) and failure behavior on a missing record.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so domain_id, record_id and idempotencyKey are already fully documented in the schema (including the source list tools). The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Queue deleting a same-domain nameserver IP record for an owned domain') and defines the domain concept (glue record) in a way that separates it from siblings like delete_dns_record and delete_domain_parent_ds. An agent can identify the target object without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition: remove or change domain nameserver delegation first if the hostname is still delegated. That is genuine when/when-not style guidance. It stops short of naming sibling alternatives (list_domain_glue_records, create_domain_glue_record) or stating when a glue record should be deleted at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_domain_parent_dsDelete domain parent DSADestructiveIdempotentInspect
Queue deleting DNSSEC DS records at the parent zone for an owned domain. Requires domains:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| ds | Yes | One or more DS records to remove, one per line. Accepted forms include '12345 13 2 ABCDEF...' or full BIND-style DS lines. | |
| domain_id | Yes | Owned domain ID from list_domains | |
| idempotencyKey | Yes | Unique key for this queued domain action; sent as Idempotency-Key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds two useful pieces of context beyond the annotations: the operation is queued (asynchronous) and requires the domains:manage scope. It falls short of 5 because it doesn't describe what happens after queuing or how to track completion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler, front-loading the action and resource before the permission requirement. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation, annotations carry the safety profile, the schema fully documents all params, and the description adds the async/queued nature and required scope. Lacking an output schema, it doesn't explain the returned queued action or how the agent should await completion, which keeps it just shy of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (ds, domain_id, idempotencyKey) are documented in the schema itself. The description adds no syntax or format detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Queue deleting DNSSEC DS records at the parent zone for an owned domain.' This is immediately distinguishable from its sibling add_domain_parent_ds by the add/delete verb, and the 'parent zone' scoping is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the auth prerequisite (domains:manage when using an API key) but gives no explicit when-to-use guidance or route to alternatives such as get_domain_parent_ds or add_domain_parent_ds. Usage is implied by the name but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_firecracker_snapshotDelete firecracker snapshotADestructiveInspect
Delete a Firecracker VPS temporary snapshot (stops its keep billing). Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| snapshot_id | Yes | Snapshot ID from list_firecracker_snapshots |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds the billing consequence ('stops its keep billing') and the authorization requirement, which the annotations do not cover. It stops short of stating irreversibility or what happens to the underlying snapshot data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the action front-loaded and the qualifying details (billing impact, permissions) appended. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive mutation with full annotation coverage and no output schema, the description covers the essentials: what it deletes, the billing effect, and the auth prerequisites. Only irreversibility/recovery behavior is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both orderNo and snapshot_id are fully documented in the schema, including a pointer to list_firecracker_snapshots as the source of snapshot_id. The description adds no parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a Firecracker VPS temporary snapshot') with a concrete consequence ('stops its keep billing'). It does not, however, distinguish this from the sibling delete_snapshot, so an agent must infer that this targets Firecracker temporary snapshots specifically from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives valuable prerequisites ('Requires services:manage and a full-access API key'), which is actionable context. It does not say when to prefer this over delete_snapshot or rollback_firecracker_snapshot, so alternative-selection guidance is only implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_functionDelete functionADestructiveInspect
Delete a Firecracker Function, including its public webhook endpoint when enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| function_id | Yes | Function ID from list_functions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as destructive, open-world, and not read-only. The description adds useful behavioral context beyond annotations by noting that the public webhook endpoint is also deleted when enabled. It does not cover authorization requirements or explicitly state irreversibility, so it does not reach 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted wording. It communicates the main action and the notable cascade effect immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete tool with complete schema coverage and annotations carrying the destructive safety profile, the description is nearly complete. It adds the important webhook-endpoint cascade detail, though it omits prerequisites and explicit irreversibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage and documents function_id as coming from list_functions. The description adds no parameter meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Delete a Firecracker Function," and adds the cascade behavior for its public webhook endpoint. This clearly distinguishes it from sibling tools such as delete_firecracker_snapshot, delete_temp_vm, and delete_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives, no prerequisites, and no when-not-to-use conditions. It only implies usage through the verb "Delete."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_network_load_balancerDelete network load balancerADestructiveIdempotentInspect
Request appliance teardown at its current generation; this is not a refund or paid-period cancellation. Addresses are released only after verified cleanup. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| load_balancer_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations: explains that an accepted operation is pending rather than proof of connectivity, that addresses release only after verified cleanup, that the backend enforces ownership/feature availability/2FA locks, and details the in_progress/reason_code/reason_kind polling protocol with next_check_seconds. It also prescribes no auto-retry and key reuse on transport uncertainty. Consistent with readOnlyHint=false, destructiveHint=true, idempotentHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and a useful exclusion, then dense but purposeful operational detail. It is long and the polling clause is packed, yet nearly every sentence carries load-bearing semantics for a destructive async operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world, async mutation with no output schema, the description covers permissions, async/failure interpretation, polling cadence, idempotency recovery, and side effects on addresses. Nothing an agent needs to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; expected_generation has no schema description, but the prose supplies the concept ('at its current generation'). It also adds real meaning to idempotencyKey (preserve it and the unchanged request on uncertain recovery), which enriches the parameter beyond its pattern description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (teardown of the network load balancer at its current generation) and distinguishes itself from cancellation/refund siblings. It stops short of explicitly differentiating among the many sibling delete_* tools, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear prerequisites: read current capabilities and owned resource state first, obtain approval for the exact change, and the required networking:read/networking:manage scopes. No named alternative tool or explicit when-not-to-use condition, but the invocation context is well specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_network_public_bindingDelete network public bindingADestructiveIdempotentInspect
Request deletion of an existing binding using its generation. Account address ownership/paid renewal is managed separately; do not claim a refund. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| binding_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it names the required scopes (networking:read vs networking:manage), states that defaults do not grant networking, and discloses that the backend enforces ownership, feature availability and 2FA locks. It also explains the full async lifecycle — accepted operation is pending, poll on in_progress, reason_kind waiting vs failure, preserve reason_code — which the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose in the first clause, then permissions, then polling semantics — a sensible ordering. It is dense and long for a single-paragraph description, and the idempotency warning partly repeats the idempotencyKey schema text, but each clause largely earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description explains the return shape effectively (operation/resource with in_progress, reason_code, next_check_seconds), the permission model, and recovery behavior. For a destructive, idempotent async mutation, an agent has everything needed to call and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; binding_id and idempotencyKey are documented in-schema while expected_generation has no description. The description compensates by tying deletion to a "generation" (optimistic concurrency) and by reinforcing idempotencyKey semantics ("reuse only the original key and unchanged request"). This adds real meaning beyond the schema, though it never explicitly defines expected_generation's value range or how to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Request deletion of an existing binding using its generation" states a specific verb (delete) and resource (network public binding) plus the concurrency mechanism. It does not explicitly contrast itself with closely named siblings such as detach_network_public_address or bind_network_public_ip, so an agent must infer the distinction from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear preconditions: "Read current capabilities and owned resource state first; obtain approval for the exact change" and warns not to claim a refund. It does not name an alternative tool or state when deletion should be avoided (e.g. when the binding is still in use), so the routing guidance is contextual rather than comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_network_security_groupDelete network security groupADestructiveIdempotentInspect
Delete an unreferenced customer group at its expected revision; referenced groups are refused. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_revision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: required permissions (networking:manage, with the note that full/read defaults do not grant networking), backend-enforced ownership/feature/2FA locks, and that acceptance is pending rather than proof of connectivity. It also documents async polling semantics (in_progress/reason_kind/reason_code, next_check_seconds) and recovery guidance (reuse only the original idempotencyKey, never auto-retry).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its precondition, then proceeds to permissions and operation-polling guidance. It is dense and long, but nearly every sentence carries operational instruction; the polling/error-handling sentences are the most verbose and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining what is returned and how to interpret it (the returned operation/resource, its in_progress flag, next_check_seconds between reads, reason_kind failure as the only failure). For a destructive async delete with 4 required params, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description adds meaning for two parameters the schema only partially explains: expected_revision ('delete at its expected revision' implies optimistic concurrency) and idempotencyKey ('reuse only the original key and unchanged request'). group_id is characterized as an unreferenced customer group; project_id is not addressed in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (delete a network security group) and adds a scoping condition (only unreferenced groups; referenced ones are refused). This clearly separates it from siblings like update_network_security_group, clone_network_security_group, and create_network_security_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions: read current capabilities and owned resource state first, obtain approval for the exact change, and note that referenced groups are refused. It does not name a specific read-only sibling tool to call first, so it stops short of fully explicit tool routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_network_vpn_gatewayDelete network VPN gatewayADestructiveIdempotentInspect
Request teardown of an owned VPN gateway; all devices lose connectivity. Paid time is not refunded by this operation. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructive/idempotent/openWorld annotations: discloses refund impact, backend ownership and 2FA enforcement, that acceptance is pending not proof of connectivity, and precise polling/failure semantics (in_progress vs reason_kind failure, next_check_seconds, preserve reason_code). Also explains the no-auto-retry recovery rule for transport uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded with the highest-value fact (connectivity loss) and the refund caveat before the procedural detail. Length is justified by the polling/recovery semantics, though a couple of clauses could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return contract itself (operation/resource, in_progress, reason_code, reason_kind) and covers permissions, ownership, async polling, and idempotent recovery. Nothing an agent needs to invoke and track this destructive operation correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the schema already documents gateway_id and idempotencyKey well. The description reinforces idempotency-key preservation on recovery and hints at reading current state (expected_generation), but does not explain expected_generation's concurrency role, so it adds only marginal meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Request teardown of an owned VPN gateway') plus the key consequence ('all devices lose connectivity'), which distinguishes it from detach_network_vpn_gateway. It does not explicitly name the sibling it is not, so it falls just short of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear prerequisite workflow ('Read current capabilities and owned resource state first; obtain approval for the exact change') and permission requirements (networking:manage vs networking:read). No explicit alternative is named for the case where a non-destructive detach is wanted, so no exclusion is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_private_networkDelete private networkADestructiveIdempotentInspect
Request deletion of an empty network. Referenced appliances/ports may prevent deletion; quota is released only after verified cleanup. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructive/idempotent/openWorld): it discloses quota release timing, the required networking:manage scope, backend ownership/feature/2FA enforcement, and the asynchronous pending-not-success semantics. It also details polling via in_progress/reason_code and warns against automatic retry, adding genuine behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and precondition, then layers permissions, async semantics and recovery guidance; nearly every sentence carries operational value. It is dense and long, with a fairly extended polling clause, but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the return semantics (operation/resource with in_progress and reason_code), how to poll with next_check_seconds, and what constitutes failure versus pending. Combined with the permission and idempotent-recovery guidance, an agent has everything needed to call and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, so the schema already documents network_id and idempotencyKey. The description reinforces idempotency-key reuse semantics but never explains expected_generation, leaving one required parameter's meaning to the schema alone; the coverage is mid-range so the baseline 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Request deletion of ... network') and narrows scope with the 'empty network' precondition, which cleanly separates it from retry_private_network, get_private_network and create_private_network. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions ('Referenced appliances/ports may prevent deletion') and an explicit read-first workflow ('Read current capabilities and owned resource state first; obtain approval for the exact change'). It stops short of naming the specific read/capability sibling tools, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_snapshotDelete snapshotADestructiveInspect
Delete a Cloud VPS (KVM/VDS) disk snapshot. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| snapname | Yes | Snapshot name from list_snapshots |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the deletion semantics are covered structurally. The description adds genuinely new behavioral context in the form of the required auth scope and API key tier, which is exactly the kind of permission information annotations cannot convey. It stops short of saying whether deletion is permanent or whether snapshots must be in a particular state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, verb and resource front-loaded, with the prerequisite as a second clause. Every word earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but this is a simple destructive call whose safety profile is carried by annotations and whose parameters are fully documented in the schema. The remaining omission is whether the delete is irreversible and what error surfaces if the snapshot is in use, which is minor for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both orderNo and snapname carry patterns, length limits, and an example, including a pointer back to list_snapshots. The description adds nothing beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (Cloud VPS KVM/VDS disk snapshot), which scopes it against the near-identical delete_firecracker_snapshot and rollback_snapshot siblings. It stops short of naming those siblings explicitly, so the disambiguation is left to the reader's inference rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies a prerequisite (services:manage scope plus a full-access API key) but gives no when-to-use vs. alternatives guidance, e.g. rollback_snapshot for reverting rather than removing. Usage is implied by the verb rather than explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ssh_keyDelete SSH keyBDestructiveInspect
Delete an SSH key from the account
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | SSH key ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is fully covered by structured data. The description adds only the phrase 'from the account', which conveys no real behavioral detail; it does not note irreversibility, idempotency, or what happens to keys in use by services.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with zero filler. Appropriate size for a one-parameter delete operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive operation with full annotation coverage and a fully documented single parameter, the definition is minimally sufficient. However, it omits any caution about irreversibility or downstream effects on servers using the key, which would be valuable context for a delete tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'id' parameter is documented as 'SSH key ID', so the schema carries the meaning. The description adds nothing about the identifier format or where to obtain it, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (SSH key) with scope (from the account). An agent can easily distinguish it from create_ssh_key, list_ssh_keys, and get_ssh_key, but the description does not explicitly name or contrast those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as get_ssh_key to verify before deletion. The agent must infer all usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_temp_vmPermanently delete on-demand serverADestructiveIdempotentInspect
Permanently delete a tenant-owned on-demand server before expiry. Requires services:manage. This preserves no disk or IP, has no customer-controlled refund, and is refused while payment confirmation is unresolved. Export required data first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | on-demand server session ID returned by list_temp_vms | |
| acknowledge_permanent_destruction | Yes | Confirm that required data has been exported and permanent deletion is intended |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description goes well beyond them: it names the required permission scope (services:manage), states that no disk or IP is preserved, that no customer-controlled refund exists, and that the operation is blocked while payment confirmation is unresolved. These are exactly the behavioral facts an agent cannot get from the annotation block.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the irreversible action and its scope, then prerequisites, consequences, and preconditions in descending priority. Nothing is wasted, though 'This preserves no disk or IP' is slightly awkward phrasing for a deletion operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation with annotations covering the safety profile, the description supplies everything an agent needs: authorization scope, irreversibility, refund policy, blocking condition, and a data-export warning. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'id' and 'acknowledge_permanent_destruction' are already documented, and the required const=true constraint is enforced structurally. The description's 'Export required data first' reinforces the acknowledgement parameter but adds no new syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Permanently delete') and resource ('tenant-owned on-demand server') plus a scope qualifier ('before expiry'), which cleanly distinguishes it from sibling delete_* operations on networks, snapshots, functions, and DNS zones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides strong preconditions: 'Export required data first' and the note that the call is 'refused while payment confirmation is unresolved' tell the agent when the call will and won't succeed. It stops short of naming an alternative (e.g. list_temp_vms/get_temp_vm for inspection, or expiry-based teardown), so it is clear context without explicit sibling routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_ssh_keyDeploy SSH keyADestructiveInspect
Deploy an SSH key to VPS. Returns a noty UUID; follow it with wait_for_event. ASYNC — wait 15-30 seconds after deploying before attempting SSH. Use list_ssh_keys to get available key IDs. To add your own key first: read ~/.ssh/id_rsa.pub from local machine, then create_ssh_key, then deploy it here. Remote OAuth requires vm:exec; direct API-key use requires services:manage and a full-access key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| ssh_key | Yes | SSH key ID from list_ssh_keys |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/not-readOnly, but the description adds substantial context beyond them: async semantics, the returned noty UUID and its follow-up tool, the 15-30 second propagation delay, and two distinct auth paths (vm:exec for OAuth, services:manage + full-access key for API keys).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the async wait, then the prerequisite workflow and auth requirements. Dense but each clause carries actionable information; not padded, though it is busy enough to be slightly harder to scan in one pass.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive async operation with no output schema, the description covers the return value convention, the follow-up tool, timing, prerequisite key setup, and both authentication modes — everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: orderNo's format and ssh_key's provenance are already documented ('SSH key ID from list_ssh_keys'). The description's pointer to list_ssh_keys for IDs largely restates the schema, so baseline 3 applies with no meaningful added syntax or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (deploy) + resource (SSH key) + target (VPS). It clearly distinguishes itself from siblings by naming list_ssh_keys and create_ssh_key as the tools for the adjacent steps, so an agent can tell deploy_ssh_key apart from the other key tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use routing: list_ssh_keys to obtain IDs, create_ssh_key to add a personal key, wait_for_event to follow up npm the async noty UUID. It also states the deployment-to-SSH timing (15-30s) and the auth preconditions, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detach_network_public_addressDetach network public addressADestructiveInspect
Detach an owned public address from its current target; it stays owned for the paid period. This can remove Internet connectivity. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds what annotations provide. Annotations only say destructive/not-readOnly/openWorld, while the description adds that the address remains owned, that Internet connectivity can be lost, required scopes (networking:read vs networking:manage) and that full/read defaults do not grant networking, backend enforcement of ownership plus service 2FA locks, the meaning of an accepted-but-pending operation, and the reason_code semantics for waiting vs failure. This is exactly the context a mutation tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key consequence (connectivity loss) are front-loaded, and the operational runbook detail that follows is load-bearing rather than filler. It is a single dense paragraph without headings or bullets, which makes the polling and retry rules harder to scan than they should be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description explains the return shape an agent must act on (an accepted operation/resource with in_progress and reason_code) and how to interpret it. Combined with auth requirements, idempotency-key reuse on transport failure, and the no-auto-retry rule, nothing an agent needs to complete the call correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (address_id) and schema description coverage is 100%, including UUID pattern and 'returned by an owned networking resource'. The description adds nothing specific about the identifier beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Detach an owned public address from its current target') and immediately clarifies the scope boundary that separates it from sibling operations: the address 'stays owned for the paid period', distinguishing it from delete_network_public_binding and from the attach_* siblings. An agent can identify the action and its effect without reading further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions (read capabilities and owned resource state first, obtain approval for the exact change) and explicit post-call procedure (poll on in_progress, wait next_check_seconds). It does not name sibling alternatives such as delete_network_public_binding or move_network_public_ip for when detachment is the wrong choice, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detach_network_vpn_gatewayDetach network VPN gatewayADestructiveIdempotentInspect
Detach an account VPN from its network when supported; it keeps its paid period and devices but recreates the gateway. Confirm the interruption. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations (which only declare destructive/idempotent/openWorld). It discloses that the paid period and devices survive while the gateway is recreated, the exact permission scopes, backend enforcement of ownership/feature/2FA locks, the pending-not-success semantics of accepted operations, and the in_progress/reason_code polling contract with explicit prohibition on automatic retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and consequence, then layers permissions, safety, and polling. Dense but nearly every clause carries operational value; the polling/recovery passage is long, though justified for an async destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and does so: it explains the returned operation/resource, the in_progress flag, reason_code semantics, waiting behavior, and recovery on transport uncertainty. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the two params are already documented, but the description adds real semantic guidance for idempotencyKey ('reuse only the original key and unchanged request; never automatically retry') and implies gateway_id must refer to an owned resource, going beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (detach) and resource (account VPN from its network), plus the concrete side effects: keeps paid period and devices but recreates the gateway. This clearly distinguishes it from the sibling attach_network_vpn_gateway and delete_network_vpn_gateway.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives prerequisites and gating conditions: 'when supported', 'Read current capabilities and owned resource state first', 'obtain approval for the exact change', and explicit scope requirements (networking:read vs networking:manage). It does not name alternative tools to consider, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detach_private_network_portDetach private network portADestructiveIdempotentInspect
Detach the owned server port. Use the PORT generation and confirm any required restart. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| port_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| restart | No | Only after the user authorizes a required restart from attachment-candidates; omit otherwise | |
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive, idempotent, openWorld), it discloses that the backend enforces ownership, feature availability and 2FA locks, that an accepted operation is pending rather than proof of connectivity, and it fully explains the polling contract (in_progress/reason_code/reason_kind, next_check_seconds, failure only on reason_kind failure) and the no-auto-retry recovery rule. This is substantial context the structured fields do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the polling guidance is genuinely useful, but the single dense paragraph repeats the idempotency/recovery rule that the schema's idempotencyKey description already states and could be materially shortened. Length is defensible for a destructive async operation but not tightly edited.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and five parameters, the description compensates well: it covers auth scopes, ownership/2FA enforcement, pending-vs-complete semantics, and the polling loop. It references "the returned operation/resource" without describing the shape, a minor gap, but an agent has enough to call and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, and the schema already documents port_id, restart, and idempotencyKey in detail. The description adds only light framing — "Use the PORT generation" for expected_generation and confirming a restart — without new syntax or format guidance. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ("Detach the owned server port"), making the mutation unambiguous. It does not explicitly name the inverse sibling (attach_private_network_port) or list_private_network_ports as alternatives, so an agent must infer sibling differentiation rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real preconditions: "Requires explicit networking:read... or networking:manage," "Read current capabilities and owned resource state first," and "obtain approval for the exact change." It also ties the restart flag to prior user authorization. It stops short of naming alternative tools or a when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_network_product_auto_renewDisable network product auto renewAInspect
Disable automatic renewal. The paid product continues to its paid-until time; API keys cannot enable automatic renewal. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| resource_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring the safety profile, the description adds substantial behavior: exact auth scopes required (networking:read vs networking:manage, with the note that full/read defaults do not grant networking), backend-enforced ownership/feature/2FA locks, and the async contract (accepted op is pending, poll in_progress, reason_code semantics, waiting vs failure). It also covers transport-uncertainty handling and forbids auto-retry — rich context an agent cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the dense operational guidance (auth, polling, retry policy) is genuinely relevant for an async mutation. It is long and somewhat sprawling in a single block, which slightly taxes readability, but almost every sentence carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex async mutation with no output schema, the description supplies everything needed: authorization requirements, ownership/2FA enforcement, and the full polling/return contract including reason_code and failure semantics. Nothing an agent needs to invoke and correctly interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the two UUID parameters (network_id, resource_id) are fully documented in the schema, establishing the baseline of 3. The description adds no additional meaning about which resource these IDs reference or how they relate, so it neither helps nor harms.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Disable automatic renewal') and immediately clarifies the scope: the paid product continues to its paid-until time, so the agent understands this only stops renewal rather than terminating the product. It does not explicitly differentiate from the near-identical siblings (disable_vpn_auto_renew, disable_public_address_auto_renew), so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong preconditions — read current capabilities and owned resource state first, and obtain approval for the exact change — which tells the agent when this call is appropriate. It stops short of naming alternatives or explicitly stating when-not to use it, so it is clear context without exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_public_address_auto_renewDisable public address auto renewAInspect
Disable address automatic renewal; ownership lasts until paid_until. There is no early paid-address cancellation route. API keys cannot enable automatic renewal. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring the safety profile, the description adds substantial non-obvious behavior: ownership persists until paid_until, no early cancellation path, API keys cannot re-enable renewal, the operation is asynchronous ('accepted operation is pending'), and detailed polling/reason_code semantics plus transport-uncertainty retry rules. This is rich behavioral disclosure well beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded, but the passage is dense and much of the polling/reason_code/retry guidance reads like generic operation boilerplate that inflates length. Several sentences earn their place, but the overall block is heavier than needed for a one-parameter mutation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent, open-world mutation with no output schema, the description supplies the missing pieces an agent needs: permission scopes, backend enforcement, async completion semantics, and failure/retry handling. Nothing material for correct invocation appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single address_id parameter is fully documented in the schema (pattern, UUID source). The description adds no syntax or format detail for address_id beyond 'owned resource state', so the schema does the heavy lifting — the baseline 3 for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Disable address automatic renewal') and clarifies scope with the 'ownership lasts until paid_until' and 'no early cancellation route' caveats. It is clear what the tool does, though it never explicitly contrasts itself with adjacent siblings like renew_network_public_address or disable_network_product_auto_renew.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives pre-conditions ('Read current capabilities and owned resource state first; obtain approval for the exact change') and permission requirements, which imply when the tool is appropriate. However, it never states when NOT to use it or which alternative tool to pick (e.g. product vs address auto-renew disable), leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_vpn_auto_renewDisable VPN auto renewAInspect
Disable the VPN's automatic renewal; the current paid period remains. API keys cannot enable it. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly/idempotent/openWorld/destructive hints, but the description goes well beyond: the current paid period is preserved, explicit networking:read/networking:manage scopes are required and defaults do not grant them, backend enforces ownership/feature/2FA locks, the accepted call is asynchronous and pending rather than proof of connectivity, polling semantics via in_progress/reason_code/reason_kind/next_check_seconds, and a strict no-auto-retry rule. This is exactly the behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and effect are front-loaded, then permissions, then async polling semantics. Every sentence carries operational weight, though the polling/reason_code block is dense and reads as reusable boilerplate rather than tool-specific guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a mutation operation, the description carries the full burden and does so: it explains auth scopes, error-vs-pending semantics, polling cadence, reason_code preservation, and retry safety. An agent needs nothing more to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and gateway_id already documents the exact lowercase UUID format returned by an owned resource. The description adds no parameter-specific syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (disable) and resource (VPN automatic renewal) and immediately clarifies the consequence — 'the current paid period remains'. It distinguishes itself from the near-named siblings (disable_network_product_auto_renew, disable_public_address_auto_renew) by scoping to the VPN resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions: 'Read current capabilities and owned resource state first; obtain approval for the exact change' and 'API keys cannot enable it'. It does not name a sibling alternative to use instead, so it is clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_service_containersDiscover service containersAIdempotentInspect
Run a bounded read-only Docker discovery on one supported Firecracker service. Returns container names, images, state, health, published ports, Compose labels, and whether each container is VPSnet-managed. If still pending after polling, retain discovery.id and call get_service_container_discovery. It never returns environment values or mounts and does not adopt or modify containers. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description asserts a 'read-only Docker discovery' and that it 'does not adopt or modify containers', while annotations declare readOnlyHint=false. That is a direct conflict on the tool's most safety-critical attribute, so per the rules a 1 with a contradiction flag applies even though the description otherwise adds useful detail about exclusions and pending handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the operation and its scope, then return fields, then the pending escape hatch, then exclusions, then the auth requirement. Five sentences are dense but each carries information; slight tightening would still be possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned fields and by disclosing what is deliberately excluded (environment values, mounts). It covers the pending/async path and the auth scope. Remaining gaps are minor (what 'bounded' means, poll timing), but the read-only mischaracterization is a completeness problem in itself.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single orderNo parameter is documented at 100% schema coverage with pattern, length and example, so the schema carries the meaning. The description only implies 'one supported Firecracker service' without adding format or lookup guidance beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (run discovery), a bounded scope (one supported Firecracker service) and the resource (Docker containers), and names what it returns. It also distinguishes itself from the sibling get_service_container_discovery by defining that tool's role as the pending follow-up.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use this tool first, and if it is still pending after polling, retain discovery.id and switch to get_service_container_discovery. It also states the applications:read prerequisite. No explicit when-not-to-use case, but the decision path between the two tools is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_certificateDownload public TLS certificate bundleARead-onlyIdempotentInspect
Download the issued public leaf, chain, and full chain for one owned order after download_available becomes true. The bundle is portable to Nginx, Apache, lighttpd, OpenLiteSpeed, HAProxy, Caddy, mail, API, and load-balancer endpoints. It never includes or reconstructs the customer private key. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the readOnly/idempotent annotations: exactly what the bundle contains, the guarantee that the private key is never included or reconstructed, and the required 'certificates:read' permission. These are the security and auth facts an agent needs before logging or forwarding the payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and the availability precondition in the first sentence. The long server-platform enumeration is somewhat verbose but supports the concrete portability claim, so it mostly earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read operation with no output schema, the description covers the returned artifact (leaf/chain/full chain), the precondition, the permission requirement, and the private-key exclusion. Only minor gaps (e.g., response/encoding format) remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single UUID parameter is fully documented there (including that it comes from list_certificates). The description only echoes the 'one owned order' framing without adding format or sourcing detail, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (download) and precise resource (public leaf, chain, and full chain for one owned order), and the scope ('public', 'one owned order') distinguishes it from cert-management siblings like get_certificate and download_free_certificate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition ('after download_available becomes true') and the ownership constraint, which tells the agent when the call is valid. It does not explicitly name alternative siblings (e.g., download_free_certificate) or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_free_certificateDownload public free-certificate bundleARead-onlyIdempotentInspect
Retrieve only the public leaf, issuer chain, and full chain for one issued no-cost certificate. It never decrypts, reconstructs, or returns a managed private key. A customer_csr result is deployable only together with the private key the customer retained when creating the CSR; managed private-key export remains portal-only with two-factor verification. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| free_certificate_request_id | Yes | Customer-owned free-certificate request UUID returned by list_free_certificates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantive context: it never decrypts, reconstructs, or returns a managed private key, and it states the certificates:read permission requirement. This is useful safety/authorization disclosure beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the return contents before the negative constraints. Every sentence carries information, though the CSR/private-key sentence is slightly longer than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description responsibly enumerates what is returned and what is deliberately excluded (private key), and it names the required scope. For a single-parameter read tool this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, including the UUID pattern and a pointer to list_free_certificates. The description adds nothing about the parameter, so the schema-baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve') and precisely enumerates the returned resource ('public leaf, issuer chain, and full chain for one issued no-cost certificate'). The scope-limiting word 'only' cleanly separates it from sibling operations like download_certificate or get_free_certificate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: it requires certificates:read and that a customer_csr result is only deployable with the customer-retained private key. It stops short of naming which sibling to use instead when a managed private key is actually needed, only saying that path stays portal-only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enter_service_rescueEnter service rescue modeADestructiveIdempotentInspect
Restart one owned active Firecracker VPS or Cloud VPS into an operator-owned rescue system. Read get_service_rescue first and use an exact advertised image ID. This interrupts every running service. Call only after the user explicitly confirms the target service, rescue image, and reboot. Requires services:rescue, full API-key access, and a fresh idempotencyKey.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | Exact opaque rescue image ID returned by get_service_rescue | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| idempotencyKey | Yes | Fresh stable key for this exact rescue-entry request | |
| acknowledge_reboot | Yes | Explicit user approval that rescue entry restarts the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds concrete side effect 'interrupts every running service' and authorization requirements ('services:rescue, full API-key access') plus idempotency-key freshness. Annotations already declare destructiveHint=true, but the description supplies the specific blast radius and auth context. Strong disclosure beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with purpose, then prerequisite, side effect, confirmation gate, and auth. Every sentence carries a distinct operational fact; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation with full schema coverage and no output schema, the description covers purpose, prerequisites, side effects, and auth. It does not explain the post-entry state, but exit_service_rescue is a sibling and no output schema exists, so this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including image provenance and idempotency-key semantics. The description reinforces 'exact advertised image ID' and 'fresh idempotencyKey' but adds no new syntax or constraints. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Restart one owned active Firecracker VPS or Cloud VPS into an operator-owned rescue system.' The rescue-system target distinguishes it from generic restart_service. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites ('Read get_service_rescue first') and a hard gate ('Call only after the user explicitly confirms the target service, rescue image, and reboot'). Also warns 'This interrupts every running service.' It does not name a competing alternative such as restart_service or exit_service_rescue, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_network_load_balancerEstimate network load balancerARead-onlyIdempotentInspect
Read a technical load balancer estimate for this exact configuration. This does not issue a paid purchase token; buy through quote_network_product and order_network_product. Legacy POST /appliances/load-balancers refuses unpaid creation. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| pool | Yes | ||
| listener | Yes | ||
| provider | Yes | ||
| placement | No | ||
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| public_vip | No | ||
| health_monitor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, the description discloses concrete behavioral traits: required scopes (networking:read for reads, networking:manage for changes), that full/read defaults do not grant networking, that the legacy POST endpoint refuses unpaid creation, and that the backend enforces ownership, feature availability, and service 2FA locks. This is substantive context an agent could not derive from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by routing and constraint sentences. It is dense but each sentence carries behavioral information; the legacy-endpoint sentence is mildly tangential but still clarifies the creation path.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 8 parameters at 13% documented coverage, the description's behavioral coverage (auth, ownership, 2FA) is strong but its parameter coverage is essentially absent. For a nested, enum-bearing configuration object it leaves the agent relying entirely on the raw schema for the required config shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13% across 8 parameters (6 required) with nested objects, so the description must compensate for the gap. Instead it explains no individual parameter — no mention of name, network_id, provider, listener, pool, or health_monitor semantics. 'This exact configuration' implies all fields matter but adds no usable meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read a technical load balancer estimate for this exact configuration.' It differentiates from the purchase-flow siblings by clarifying that it does not issue a paid purchase token and pointing to quote_network_product/order_network_product. The verb 'read' plus 'estimate' is reasonably clear, though the exact nature of the estimate (dry-run vs. quota check) is left slightly implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternatives (quote_network_product and order_network_product) and states the condition that selects them ('does not issue a paid purchase token; buy through...'). This is a clear when-not/alternative statement, though it does not describe when this estimate is required before ordering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exit_service_rescueExit service rescue modeADestructiveIdempotentInspect
Restore the exact pre-rescue boot configuration and original running or stopped state for one owned service. Read get_service_rescue first and pass its exact session UUID. This may restart the service. Call only after explicit user confirmation. Requires services:rescue, full API-key access, and a stable idempotencyKey. If the same exit reaches needs_attention, retry this tool with the same key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| idempotencyKey | Yes | Stable key for this exact rescue exit; reuse it for a needs_attention retry | |
| rescue_session_id | Yes | Exact current session UUID from get_service_rescue | |
| acknowledge_restart | Yes | Explicit user approval to restore normal boot state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, idempotentHint), it discloses that the service may restart, that it requires services:rescue and full API-key access, and that a needs_attention outcome should be retried with the same idempotencyKey. This is exactly the extra behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and effect, then prerequisites, then the retry edge case. No filler and nothing repeated unnecessarily.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation tool with no output schema, the description covers the side effect, auth scope, confirmation requirement, and failure/retry handling. An agent has everything needed to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description reinforces the session UUID provenance and the idempotencyKey stability rule but adds little semantic meaning beyond the schema text. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (restore), the exact resource (pre-rescue boot configuration and original running/stopped state), and the scope (one owned service). This clearly distinguishes it from enter_service_rescue and get_service_rescue among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites and sequencing: read get_service_rescue first, pass its exact session UUID, and only call after explicit user confirmation. It also names the retry condition for needs_attention. No explicit exclusion of an alternative tool is given, but the when-to-use path is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_application_recipeExport customer application recipeARead-onlyIdempotentInspect
Export one immutable customer-owned recipe revision. Secret values are never returned. VPSnet catalog recipes are not exportable through this or any other MCP tool. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| revision | No | Exact revision to export; omit for the current revision | |
| project_id | Yes | Customer-owned recipe project UUID returned by list_application_recipes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description goes beyond them by disclosing the authorization requirement, that secret values are redacted from the output, and that the exported revision is immutable. It does not describe the export payload shape or size/pagination characteristics, which with no output schema is a remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, zero filler, with the core action and its scope front-loaded before the exclusion and the permission note. Every sentence carries a distinct constraint an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read-only export with full schema coverage and rich annotations, the description covers scope, exclusions, authorization and output redaction, which is nearly everything needed to call it correctly. The main omission is what the returned export actually contains or its format, though the absence of an output schema makes that a lesser concern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so orderNo, revision and project_id are each documented in the schema, including the revision default ("omit for the current revision") and the project_id provenance from list_application_recipes. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Export one immutable customer-owned recipe revision") and immediately scopes it by excluding VPSnet catalog recipes, which separates it from catalog/inspection siblings like list_application_catalog and get_application_recipe_validation. An agent can tell what this returns and what it does not without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit exclusion ("VPSnet catalog recipes are not exportable through this or any other MCP tool") and a prerequisite ("Requires applications:read"), which is stronger than typical guidance. It stops short of naming the sibling tools to use instead for catalog recipes or for listing revisions, so it is clear context without full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_dns_zoneExport DNS zoneARead-onlyInspect
Export a native forward DNS zone's desired-state records as a BIND-style zone file. System-managed SOA/apex NS/DNSSEC wire records and PTR/reverse DNS are not exported here. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that: the required scope (dns:read with an API key) and the precise contents that are excluded from the export, which the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: the core action and output format lead, the exclusions follow, and the auth requirement closes. Nothing is redundant and every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return value, and it does: a BIND-style zone file containing desired-state records, explicitly excluding system-managed SOA/NS/DNSSEC and PTR records. Auth requirements and scope are also covered, so an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema already documents zone_id. The description adds only the indirect qualifier 'native forward DNS zone', implying the ID must reference such a zone, but gives no format or sourcing detail beyond the schema. Baseline 3 for a fully covered single param.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (export), the resource (a native forward DNS zone), and the output artifact (a BIND-style zone file), which distinguishes it from siblings like import_dns_zone, get_dns_zone, and list_dns_zones. An agent knows exactly what it produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It scopes usage well by stating what is NOT handled here (system-managed SOA/apex NS/DNSSEC wire records, PTR/reverse DNS), which implicitly routes the agent elsewhere. It stops short of naming a specific alternative tool or a positive 'use this when you want to migrate/back up a zone' trigger, so the guidance is clear but not fully directional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_network_product_orderFind network product orderARead-onlyIdempotentInspect
Recover an uncertain checkout by the ORIGINAL quote_id; order=null means no order was found, not proof to use a new payment key. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses null-result semantics, required permission scopes (networking:read vs networking:manage), and backend enforcement of ownership, feature availability, and service 2FA locks. This is rich behavioral context for a read-only lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, each earning its place: purpose first, then critical null semantics, then permission and backend constraints. It is appropriately sized for the tool’s complexity and front-loads the key intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately covers the critical null-vs-found behavior, permissions, and backend checks. It does not describe the shape of a non-null order response, which is a minor gap but not a blocker for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents quote_id format and constraints. The description adds useful meaning by emphasizing it must be the ORIGINAL quote_id and that null indicates no order was found.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (recover an uncertain checkout) tied to the original quote_id, which is effectively finding a network product order. It does not explicitly name or compare against sibling tools like get_network_product_order, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly identifies the scenario (uncertain checkout) and gives an important interpretation rule (order=null does not justify a new payment key). It does not name alternative tools or explicit when-not-to-use-this-tool conditions, keeping it at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flush_iptablesFlush iptablesADestructiveInspect
Flush iptables rules on VPS (useful when locked out) Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so safety is covered. The description adds real value beyond that by disclosing the required permission (services:manage) and the full-access API key precondition, which an agent needs before attempting the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the action is front-loaded and the auth caveat follows. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive operation with annotations and no output schema, the description covers purpose, precondition, and use case. It could note the post-flush state (e.g., whether rules are removed entirely or reset to defaults), but it is otherwise sufficient to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (orderNo is fully documented with pattern, length, and example), so the schema carries the load. The description adds no additional parameter meaning, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (flush) and resource (iptables rules) scoped to a VPS, which is unambiguous and clearly distinct from every sibling tool in the list. An agent can immediately tell what this does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(useful when locked out)' gives a concrete when-to-use scenario, which is genuinely helpful routing context. It stops short of naming alternatives or stating when NOT to use it, so it misses the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountGet accountARead-onlyInspect
Get account info: user ID, email, balance, VAT rate
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the returned account fields, which is useful without an output schema, but it omits auth scope, rate limits, or other behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste; the colon list efficiently enumerates the return fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param read-only tool, annotations cover the safety profile and the description supplies key return fields despite no output schema. Minor gaps remain: no mention of account scope or auth context and no indication that the field list is exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. Schema coverage is 100% and the empty schema correctly signals no inputs are required; the description does not need to document parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Get' and resource 'account info', and lists key fields, so an agent knows it returns user ID, email, balance, and VAT rate. However, it does not differentiate itself from sibling lookups like get_profile or get_pricing, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not, or alternative guidance is provided. The field list implies retrieval, but the agent gets no help deciding between get_account, get_profile, or get_pricing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_keyGet API keyARead-onlyInspect
Get metadata for one active API key: scope, granular scopes, paid_scopes, paid_operations_enabled, daily_spend_limit_eur, monthly_spend_limit_eur, allowed IPs, expiry and rate_limit. For API-key callers only the calling key's own ID is accessible — any other id answers 403 apiKeyForbidden, even when it does not exist. The full key and stored secrets are never returned. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID from list_api_keys (the calling key's own ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond the readOnlyHint/destructiveHint annotations: the exact 403 apiKeyForbidden outcome for any other id, the surprising fact that this holds even for non-existent ids, and an explicit guarantee that the full key and stored secrets are never returned. This is precisely the kind of disclosure annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with what is returned before the access restrictions. Every clause carries information: field list, auth boundary, error code, and secret-exclusion guarantee.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description properly carries the return-value burden by enumerating the metadata fields. Combined with the access and secrecy guarantees, an agent has everything needed to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage on a single parameter, the schema already documents the id ('API key ID from list_api_keys... the calling key's own ID'). The description's access constraint largely restates that, so the baseline of 3 applies despite adding minor reinforcement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get metadata for one active API key') and enumerates the returned fields, which clearly separates it from list_api_keys and get_api_key_activity. However, it never explicitly names the sibling alternatives, so an agent must infer the routing rather than being told it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context by specifying that API-key callers can only fetch the calling key's own ID, which is exactly the kind of precondition an agent needs. It stops short of explicit when-not guidance (e.g., 'to list all keys use list_api_keys' or how to view another key as an account caller).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_key_activityGet API key activityARead-onlyInspect
Get the recorded request activity for this API key: recent matched route patterns and statuses, resolved and separately labelled caller-claimed source addresses, endpoint/source totals, and retained daily history. API-key callers can inspect only the same key that authenticated the MCP connection. Key values, headers, query strings, path values, and request bodies are never returned. To protect the control plane during abusive bursts, audit writes are capped per key per minute and retained detail has a separate per-key row ceiling; totals describe recorded rows and are not a billing ledger.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID from list_api_keys (the calling key's own ID) | |
| limit | No | Recent request rows to return (default 50, maximum 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description adds substantial context beyond that: sensitive fields (key values, headers, query strings, path values, bodies) are never returned, audit writes are rate-capped per key per minute, retained detail has a per-key row ceiling, and the totals are explicitly not a billing ledger. These are exactly the operational caveats an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with what is returned, then layers constraints and caveats in a logical order, and every sentence carries distinct information about scope, privacy, or retention. The opening sentence is a fairly dense field list, but nothing is redundant or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the return payload — and it does (route patterns, statuses, source addresses, totals, daily history) along with retention limits and write caps. For a simple two-parameter read tool, an agent has everything required to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id and limit, with defaults and bounds) are already fully documented in the schema. The description adds no parameter-level detail beyond that, which matches the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (get recorded request activity for this API key) and enumerates the concrete contents returned: matched route patterns and statuses, resolved vs caller-claimed source addresses, endpoint/source totals, and daily history. That level of specificity distinguishes it from siblings like get_api_key (key metadata) and get_api_key_inference_usage (inference usage) without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a real precondition — API-key callers can only inspect the key that authenticated the MCP connection — which tells the agent whether the call is even permitted. However, it never routes the agent between this tool and adjacent options such as get_api_key or get_api_key_inference_usage, and gives no when-not-to-use guidance, so usage is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_key_inference_usageGet API key inference usageARead-onlyInspect
Get exact paid VPSnet AI usage for this inference API key: committed and currently reserved spend for the UTC day and month, request and token totals by public VPSnet model profile, configured spend limits, remaining spend, and notification preferences. API-key callers can inspect only the same key that authenticated the MCP connection. Internal provider model names are never returned. This is read-only and does not change limits, notifications, or billing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Inference API key ID from list_api_keys (the calling key's own ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description goes further: it spells out the authorization scope (same key only), a data-redaction guarantee (internal provider model names are never returned), and an explicit no-side-effect commitment (does not change limits, notifications, or billing). Those authorization and redaction details are not recoverable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The return-value inventory is front-loaded and dense but every clause carries information; the two trailing sentences are short and each adds a distinct guarantee (scope, read-only). Minor redundancy between 'read-only' in the last sentence and the enumerated non-effects keeps it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the burden and does so by enumerating the returned data (spend, limits, remaining, per-model request/token totals, notification preferences) plus the scope and redaction rules. Nothing an agent needs to call or interpret this single-parameter read tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the single id parameter already documents its source (list_api_keys), its meaning (the calling key's own ID), and its bounds. The description only reinforces the same-key constraint rather than adding new parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (get) and resource (paid inference usage for an API key) and enumerates the exact returned dimensions: committed/reserved spend for UTC day and month, request and token totals per model profile, spend limits, remaining spend, notification preferences. This is clearly distinguishable from siblings like get_api_key, get_api_key_activity, and get_usage_statements, which cover identity, activity log, and account-level statements respectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a real usage boundary — API-key callers may only inspect the key that authenticated the MCP connection — which tells the agent when the call will succeed. However, it never routes the agent to alternatives (get_api_key_activity for per-request history, get_usage_statements for broader billing) or states prerequisites, so selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_compose_adoptionGet Compose project adoptionARead-onlyIdempotentInspect
Poll one tenant-bound Compose adoption candidate. Inspect eligibility, the reconstructed Compose file, all variable names, container count, and data-volume count before requesting destructive confirmation. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| adoption_id | Yes | Opaque Compose adoption UUID returned by the prepare operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-structured context: the required 'applications:read' scope, the tenant-bound isolation of the candidate, and a warning that a destructive confirmation is the next step. It also enumerates the returned fields in lieu of an output schema, though it omits retry/backoff or not-yet-ready behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The resource and scope come first, the inspected fields second, and the workflow/authorization constraints last — properly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full schema coverage and no output schema, the description covers preconditions, authorization and the shape of the result. Minor gap: it doesn't say what to do when the candidate is not yet eligible or how often to poll.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: orderNo documents its pattern, length and example format, and adoption_id documents its UUID type and where it comes from. The description adds only the qualifier 'tenant-bound', so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Poll one tenant-bound Compose adoption candidate') and enumerates exactly what is inspected (eligibility, reconstructed Compose file, variable names, container and data-volume counts). The framing as the inspection step 'before requesting destructive confirmation' cleanly separates it from the prepare and confirm siblings in the same workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Poll' establishes that this is a repeated/status-check call, and 'before requesting destructive confirmation' places it explicitly before the confirm step. However, it never names prepare_application_compose_adoption or confirm_application_compose_adoption as the alternatives, nor states the when-not condition (e.g., do not call after adoption is confirmed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_data_restoreGet application data restoreARead-onlyIdempotentInspect
Poll one tenant-bound selective application data restore. queued, running, and awaiting_reply remain active. needs_attention is not success and keeps application/service mutations locked until a signed worker result or operator verification resolves it. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| restore_id | Yes | Opaque selective restore UUID returned by restore_application_data | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the status lifecycle (queued, running, awaiting_reply stay active; needs_attention is not success) and the consequential side effect that mutations stay locked until a signed worker result or operator verification resolves it. It also states the required scope, applications:read, which an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, front-loaded with the core purpose before status semantics and the auth requirement. Each sentence carries distinct information, though the status clause is dense enough to need a second read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what polling yields, and the status enumeration largely does that, plus the tenant-bound scoping and required scope. It omits return shape and any backoff guidance, which keeps it just short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so orderNo, restore_id, and installation_id are fully documented in the schema, including that restore_id comes from restore_application_data. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (poll) and resource (one tenant-bound selective application data restore), clearly indicating a repeated status-check operation rather than a mutation. It does not explicitly contrast itself against a sibling like get_backup_status, but the scope wording is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The imperative 'Poll' and the enumeration of which statuses remain active versus terminal convey when this tool is meant to be called and when to stop polling. It stops short of naming an alternative tool or an explicit exclusion, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_eventsGet managed application eventsARead-onlyIdempotentInspect
Get the latest customer-safe audit events for one owned managed application. Use this with get_application_installation to verify asynchronous changes. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds that events are 'customer-safe', that it returns the 'latest' events, that the app must be 'owned', and that it requires 'applications:read' — useful context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then the usage context and permission requirement. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read with no output schema, the description covers purpose, companion tool, and permission. It doesn't describe the event payload, but with annotations and schema carrying the rest, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters fully described. The description adds no parameter syntax or format details beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the latest customer-safe audit events for one owned managed application.' It distinguishes scope (one owned app, audit events, latest) but does not explicitly contrast with sibling read tools like get_application_logs or get_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear use case: 'Use this with get_application_installation to verify asynchronous changes' and states the required permission. It doesn't specify when not to use it or name an alternative to avoid, but the context is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_healthInspect managed application healthAIdempotentInspect
Run an on-demand health inspection of one owned managed application and return the observed container/service health. Use this instead of trusting the last-reported health, which can be stale. If still pending after polling, retain inspection.id and call get_application_inspection with kind=health. This queues an inspection (a POST), so it needs an API key that permits write operations; a read-only key is rejected. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the call actually queues an inspection via POST, requires a write-capable API key (read-only keys are rejected), needs applications:read, and can remain pending so results must be polled. These are exactly the non-obvious traits annotations (readOnlyHint=false, idempotentHint=true) cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences with essentially no filler and the core purpose front-loaded. The permission/API-key sentence and the polling sentence are both load-bearing, though the block is dense enough that a shorter framing could convey the same payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers the async/polling outcome, the follow-up tool and field to pass, and the auth requirement. Combined with annotations for the safety profile, an agent has everything needed to invoke and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (orderNo, installation_id) are fully described in the schema with patterns and formats, so the description adds nothing about them. It references inspection.id, but that is a response field, not an input. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Run an on-demand health inspection of one owned managed application and return the observed container/service health.' It also explicitly contrasts with the stale last-reported health, which is what sibling get_application_inspection surfaces, so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('Use this instead of trusting the last-reported health, which can be stale') and a concrete follow-up path with the alternative named: 'retain inspection.id and call get_application_inspection with kind=health'. Both the condition and the sibling are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_inspectionGet application inspectionARead-onlyIdempotentInspect
Poll the exact persisted health or logs inspection returned by get_application_health or get_application_logs when it remains pending. This GET does not queue another inspection. Keep the same service, installation, inspection UUID and kind until succeeded, failed or expired. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| inspection_id | Yes | ||
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, not open-world), but the description adds genuinely new behaviour: this call is non-queuing, it must be repeated with unchanged identifiers until succeeded/failed/expired, and it requires the applications:read scope. Only the polling/retry cadence and error behaviour (e.g. what a 404 on an unknown inspection_id means) are left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences with the action front-loaded, zero filler, and the non-queuing constraint and terminal-state contract stated as short imperatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-required-param polling tool with an inlined schema and no output schema, the description supplies the essential contract: the source of the inspection, the reuse-identifier rule, the terminal states, and the auth scope. It stops short of describing the returned payload shape or retry timing, which are the only remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% — inspection_id and kind carry no schema descriptions — and the description compensates only partially by tying 'service, installation, inspection UUID and kind' together and implying the same values must be reused. It never explains what an inspection_id is or how orderNo relates to the tenant scope beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb ('Poll') and resource ('the exact persisted health or logs inspection') and explicitly scopes it as the follow-up to get_application_health / get_application_logs. An agent can immediately distinguish this tool from the two siblings that originate inspections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the trigger condition ('when it remains pending'), names the alternative tools that would instead queue a new inspection, and states the exclusion 'This GET does not queue another inspection.' It also prescribes holding the same identifiers until a terminal state, covering when-to-use and when-not in one paragraph.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_installationGet managed application stateARead-onlyIdempotentInspect
Get customer-safe observed state, health, drift, endpoints, components, bounded application/container resource history, optional display thresholds, and latest action for one owned managed application. Container samples expose only Compose service and ordinal; Docker identities and internal generation digests are withheld. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new behavioral content: it discloses that container samples expose only Compose service and ordinal, and that Docker identities and internal generation digests are withheld, plus that history is bounded and excludes 'internal generation digests'. This is useful redaction/limit context not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence led by the verb and resource, with the redaction caveat and the permission requirement following. It is dense but every clause contributes (returned facets, redaction limits, auth). No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly compensates by enumerating what comes back (health, drift, endpoints, components, bounded resource history, latest action) and stating the required scope. Combined with annotations that carry the safety profile, an agent has enough to call it correctly; only the sibling-routing question remains unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully documented in the schema (100% coverage) including the orderNo pattern and installation_id UUID format, so the schema carries the load. The description adds only the implicit ownership scoping ('one owned managed application') and no new per-parameter meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) plus a resource (managed application) and enumerates the returned facets - state, health, drift, endpoints, components, resource history, latest action - for 'one owned managed application'. This is far more than a restatement of the name. It stops short of 5 because the sibling set contains near-overlapping reads (get_application_health, get_application_inspection, get_application_events) and none are named or contrasted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to call this versus its many siblings, and no exclusions. The phrase 'one owned managed application' and the 'Requires applications:read' line imply a read-only inspection context, but an agent still has to guess whether this or get_application_health is the right entry point for a health check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_logsInspect managed application logsAIdempotentInspect
Run an on-demand logs inspection of one owned managed application and return recent, size-bounded container logs for troubleshooting. If still pending after polling, retain inspection.id and call get_application_inspection with kind=logs. Optionally select one exact Compose service; omit it to inspect all services. This queues an inspection (a POST), so it needs an API key that permits write operations; a read-only key is rejected. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| service | No | Optional exact Compose service whose recent logs should be returned | |
| max_bytes | No | Maximum log size in bytes; defaults to 65536 and cannot exceed 131072 | |
| tail_lines | No | Maximum log lines to return; defaults to 200 and cannot exceed 500 | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds critical context beyond them: the tool is a POST that queues an inspection despite its 'get_' name, it requires an API key permitting write operations, and requires the applications:read scope. This is exactly the gotcha an agent would otherwise miss from the read-flavored name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the pending-follow-up, the service scoping, and the auth caveat. Four dense sentences with little waste, though the auth/permission sentences could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does describe the return as 'recent, size-bounded container logs,' plus the async inspection.id/polling flow. Response shape details (fields of the inspection result) remain unspecified, but the operational flow is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning for `service` (one exact Compose service; omit to inspect all services) and signals the size-bounding behavior behind `max_bytes`/`tail_lines`, though it adds no detail for orderNo or installation_id beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Run an on-demand logs inspection of one owned managed application and return recent, size-bounded container logs.' It scopes the operation (single owned application, size-bounded logs) and implicitly distinguishes itself from the sibling get_application_inspection, which it references for the pending follow-up path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent what to do next when the operation is pending ('retain inspection.id and call get_application_inspection with kind=logs') and names the alternative tool by name. It also states when to supply the `service` parameter vs omit it, and gives the auth precondition (write-permitting key required, read-only key rejected).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_recipe_validationGet application recipe validationARead-onlyIdempotentInspect
Poll the exact persisted customer recipe validation returned by validate_application_recipe or a pending recipe creation/revision. This GET does not resolve tags or create another validation. Retain the initial resolved_compose_yaml; after this ID succeeds with valid=true, resume creation using that exact pinned document and validation_id. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| validation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, but the description adds genuinely non-obvious context: that this GET has no side effects on tags and does not spawn a new validation, plus the 'Requires applications:read' auth requirement. It does not specify polling cadence or timeout behavior, so it stops short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the distinguishing constraint, then the follow-up workflow. Every sentence carries information, though the dense internal jargon (resolved_compose_yaml, pinned document) makes it slightly harder to parse at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description does the work of naming the key return signal (valid=true) and the state to retain (resolved_compose_yaml). Combined with the auth requirement and the sibling-based entry condition, an agent has enough to call and act on this correctly; only terminal/error handling is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (orderNo is documented, validation_id is bare), so the description carries extra weight. It supplies the provenance of validation_id (the value returned by validate_application_recipe) and ties it to the recipe creation flow, which meaningfully supplements the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (poll/get) on a specific resource (the persisted customer recipe validation) and explicitly separates itself from validate_application_recipe by noting it 'does not resolve tags or create another validation.' An agent can distinguish it from all the sibling get_* and validate_* tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent when this is used (after validate_application_recipe, or during a pending creation/revision) and what to do with the result (resume creation using the pinned document and validation_id once valid=true). It also implicitly states a when-not: do not call this to create a validation. Missing only guidance for the failure/pending-forever case, which keeps it off a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_automatic_ssl_subscriptionGet Automatic SSL subscriptionARead-onlyIdempotentInspect
Read one customer-owned Automatic SSL subscription. state=active and credentials_available=true means setup may continue in the two-factor-protected VPSnet portal; it does not expose credentials here. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is covered. The description adds value beyond that: it explicitly states credentials are NOT exposed here, that setup continues in a two-factor-protected external portal, and that certificates:read is required — auth scope and data-exposure limits that the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, purpose front-loaded, followed by result semantics and the permission requirement; no filler. The middle sentence is dense and slightly convoluted but every clause carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry return-value context; it does explain the key state=active + credentials_available=true combination and that no credentials are returned. It still doesn't sketch the broader subscription shape, but for a simple single-read tool with full annotation coverage that gap is modest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented in the schema (UUID format and provenance from list_automatic_ssl_subscriptions). The description adds no syntax, format, or constraint detail for the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('Read one customer-owned Automatic SSL subscription'), including the single-item scope that separates it from list_automatic_ssl_subscriptions and from the mutating siblings (refresh_, cancel_, replace_automatic_ssl_domain). An agent can pick this tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a prerequisite ('Requires certificates:read') and explains how to read the result, but never names when to prefer this over list_automatic_ssl_subscriptions, list_automatic_ssl_actions, or refresh_automatic_ssl_subscription, and gives no when-not condition. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backup_historyGet backup historyBRead-onlyInspect
Get backup history for a service Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number; follow response pagination for older records. | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds a genuinely useful auth scope (services:read when using an API key), but says nothing about pagination depth, retention, or ordering of the returned history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded clauses with no wasted words. It loses a point only because the sentences run together without punctuation ('service Requires'), slightly blurring the permission statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage and annotations carrying the safety profile, the description is minimally sufficient. It omits any sibling disambiguation and history-retrieval semantics, which are the remaining gaps an agent would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: orderNo format and the page/pagination hint are fully documented in the schema itself. The description adds no parameter meaning beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get backup history for a service), which is clear on its own. However it does nothing to distinguish itself from nearby siblings like get_backup_status or get_firecracker_backup_history, so the agent must infer which of the backup-history tools applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is the permission requirement (services:read with an API key); there is no statement of when to call this versus get_backup_status, create_backup, or get_firecracker_backup_history. No exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backup_statusGet backup statusBRead-onlyInspect
Get backup status and configuration for a service Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is known. The description adds real value beyond that by disclosing the required scope ('services:read when called with an API key'), which the agent needs before invoking. It stops short of noting rate limits or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that leads with the core purpose. It is slightly marred by a missing sentence break and period before 'Requires', which makes the auth clause read as run-on text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with a full annotation safety profile, the definition is adequate but not complete: there is no output schema, so the description could have said what 'status and configuration' returns, and it offers no help distinguishing this tool from the other backup-status/history siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – orderNo is fully documented with format, length, and example in the schema. The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get backup status and configuration for a service.' It is clearly distinguishable from write siblings like create_backup, but does not explicitly distinguish itself from near-neighbors such as get_backup_history or get_firecracker_backup_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no named alternative among the many backup-related siblings. The only condition given is an auth requirement (services:read with an API key), which is permission guidance rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_certificateGet paid TLS certificateARead-onlyIdempotentInspect
Read one customer-owned paid TLS certificate order. A paid, queued, or validating order is not issued; require state=active and download_available=true before treating the public certificate as ready. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds behavior annotations do not: the lifecycle semantics (paid/queued/validating orders are not issued) and the auth scope required. It does not describe the response payload shape, though no output schema exists to do that for it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, zero filler, and the core action is front-loaded before the readiness caveat and the permission requirement. Every sentence carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full annotation coverage, the description covers purpose, state precondition, and auth. The main gap is that with no output schema, the return shape is only partially inferable from the mentioned state/download_available fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema description coverage and the schema already explains it is the order UUID returned by list_certificates. The prose adds only 'customer-owned paid' as scope framing, no format or lookup guidance beyond the schema — baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read one customer-owned paid TLS certificate order.' The 'paid' qualifier implicitly separates it from the free-certificate siblings (get_free_certificate, list_free_certificates), which is meaningful differentiation. It stops short of naming an alternative tool outright, so it lands at clear-but-not-routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Supplies a concrete decision condition — 'require state=active and download_available=true before treating the public certificate as ready' — plus the required scope 'certificates:read', so an agent knows both the precondition and the permission needed. It does not explicitly compare against list_certificates or get_free_certificate, so there is no exclusion/alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_certificate_catalog_productGet paid TLS certificate productARead-onlyIdempotentInspect
Read one published paid TLS product with final EUR offers and customer-visible capabilities. Use the exact offer ID and generation from this response when quoting. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Published product ID returned by list_certificate_catalog |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds value beyond them by stating the auth scope ('Requires certificates:read') and by characterizing the payload as final EUR pricing plus customer-visible capabilities, which signals the pricing is authoritative and that some fields are filtered from the customer view.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation and its return content, with the precondition last. Everything earns its place, though 'with final EUR offers and customer-visible capabilities' is slightly dense phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully covers what comes back (offers, capabilities) and the required permission scope. The dependency on list_certificate_catalog for obtaining product_id is only in the schema, not the description, but overall an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single required product_id, so the schema already carries the semantics; baseline is 3. The description's reference to 'offer ID and generation from this response' does not map cleanly onto the product_id parameter, adding mild ambiguity rather than clarifying it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one published paid TLS product'), and immediately scopes what it returns: final EUR offers and customer-visible capabilities. This clearly separates it from the sibling list_certificate_catalog (which enumerates products) and get_certificate (which reads an issued certificate).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete downstream instruction: use the exact offer ID and generation from this response when quoting. That tells the agent this is a pre-ordering lookup step. It stops short of explicitly naming quote_certificate/order_certificate as the follow-on tools or stating a when-not condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_certificate_validationGet certificate validationARead-onlyIdempotentInspect
Read current per-name domain-control validation state and the owner-visible challenge while it is pending. Wildcards require DNS validation. This never submits or changes a validation method. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior, and the description adds meaningful context: the required certificates:read scope, the pending-challenge visibility, and the wildcard DNS-validation rule. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short, front-loaded sentences with no filler. Each sentence adds a distinct piece of information: read scope, wildcard behavior, non-mutation, and required permission.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, one-parameter tool with rich annotations and no output schema, the description covers the important behavioral constraints and authorization requirement. It could be slightly stronger by pointing to the mutation/recheck siblings, but it is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single parameter is fully documented in the schema as a certificate order UUID returned by list_certificates. The description adds no additional parameter meaning beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific read verb and clearly scopes the resource to per-name domain-control validation state and the owner-visible pending challenge. It implicitly distinguishes itself from certificate retrieval and mutation tools, though it does not name sibling alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the relevant usage context (while a challenge is pending) and explicitly says it never submits or changes a validation method, which is a clear when-not signal. It stops short of naming the alternative tools to use for submitting, changing, or rechecking validation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dnssecGet DNSSECARead-onlyInspect
Get DNSSEC state and public DNSKEY/DS material for a native DNS zone. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the dns:read permission requirement when using an API key, and that it returns public key material (DNSKEY/DS) rather than private data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero filler; the return content is front-loaded before the permission note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read with no output schema, the description names the returned material (DNSSEC state, DNSKEY/DS) and the auth requirement. It could be slightly more explicit about the shape of the returned state, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema fully documents zone_id. The description only implies the zone scope ('for a native DNS zone') without adding format or constraint details, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (DNSSEC state, DNSKEY/DS material) scoped to a native DNS zone. This is clearly distinguishable from siblings like set_dnssec (mutation) and get_dns_zone (general zone read).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent can infer this is the read path for DNSSEC, vs set_dnssec for writes. There is no explicit 'use this when...' or routing to an alternative for related DNSSEC inspection needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_service_statusGet DNS service statusARead-onlyInspect
Get the VPSNet DNS cluster status: whether the anycast DNS service is operational, healthy node count, the public nameservers to delegate domains to, and the recursive resolver IPs to use on VPSNet servers. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely non-structured context by naming the required authorization scope ('Requires dns:read when using an API key'), which an agent needs before invoking and which annotations do not express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-front-loaded sentence leads with the verb and resource, then lists the payload fields, and closes with the auth requirement. No filler and nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by enumerating the principal return fields and the required scope, which is what an agent needs for a zero-parameter read tool. Minor gap: it doesn't describe response shape or error behavior, but for a status probe this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies per the rubric. There is nothing further the description could add on parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the VPSNet DNS cluster status') and then enumerates exactly what is returned: anycast service health, node count, public nameservers, recursive resolver IPs. This clearly distinguishes it from the many sibling DNS tools, which operate on zones, records, and templates rather than cluster-wide service state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by naming concrete consumer scenarios ('nameservers to delegate domains to', 'resolver IPs to use on VPSNet servers'), so an agent can infer when the data is useful. However, it never states when to prefer this over alternatives or any exclusions, so guidance stays implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_zoneGet DNS zoneARead-onlyInspect
Get a DNS zone and desired records, including their record IDs for update_dns_record. A waiting zone's ownership TXT value is available in zone.verification.record.value when recoverable; read it before considering reissue_dns_zone_verification. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds value beyond that: the dns:read API-key scope requirement and the conditional behavior that the verification value is only present 'when recoverable' — genuinely useful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then two dense but purpose-driven sentences on downstream use and verification handling. Slightly packed with dotted paths (zone.verification.record.value) but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry return-value information, and it does describe the key returned artifacts (record IDs, the ownership TXT value path) plus the auth requirement. It does not sketch the overall zone object shape, but nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter (zone_id) with 100% schema description coverage, so the schema already carries the meaning. The description adds nothing about the parameter itself, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a DNS zone and desired records') and immediately distinguishes it from siblings by naming the record IDs it supplies for update_dns_record. An agent can tell it apart from list_dns_zones and get_dns_zone_diagnostics without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real when-to-use routing: read the ownership TXT value before considering reissue_dns_zone_verification, and use this output as the source of record IDs for update_dns_record. It stops short of stating when NOT to use it versus list_dns_zones, so it is clear context rather than full when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_zone_diagnosticsGet DNS zone diagnosticsARead-onlyInspect
Run customer-facing DNS health diagnostics for a zone: delegation, public SOA, DNSSEC signal, and common record hygiene checks. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds real value beyond that: it states the auth requirement (dns:read with an API key) and clarifies the tool performs live external-facing checks (public SOA, delegation), consistent with openWorldHint. No rate limits or caching/freshness behavior are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded with the action and the check list, plus the permission requirement tacked on last. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the diagnostic categories the agent can expect back and notes the permission requirement. For a one-parameter read-only tool this is nearly complete; only the exact response shape and any latency/external-dependency caveats are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (zone_id) exists and schema description coverage is 100%, so the schema already documents it fully. The description does not add syntax, format, or sourcing detail for zone_id, making this the baseline 3 where the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Run) and resource (DNS health diagnostics) and enumerates the checks performed — delegation, public SOA, DNSSEC signal, record hygiene — so an agent can distinguish it from get_dns_zone or verify_dns_zone by content. It stops short of explicitly naming a sibling it contrasts with, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'customer-facing DNS health diagnostics' framing implies a diagnostic (read-only inspection) use case, and the description states the required permission 'dns:read when using an API key', which is useful gating context. However, it never says when to prefer this over verify_dns_zone, reapply_dns_zone, or get_dns_zone, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_zone_historyGet DNS zone historyARead-onlyInspect
Get the recent change history for a DNS zone and its records (action, record, who, when). Useful for auditing what changed. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds valuable context beyond annotations: it requires dns:read with an API key and lists the return fields, though it omits retention window and pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first front-loads the tool's purpose and return shape, the second covers use case and permission. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only history tool with annotations covering safety, the description supplies the return fields and permission requirement. It omits practical details like how far back 'recent' reaches or whether results are paginated, which would be helpful given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one parameter (zone_id) already documented as 'DNS zone ID'. The description adds no additional syntax or meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('recent change history for a DNS zone and its records'), and enumerates the returned fields (action, record, who, when). It does not explicitly differentiate from siblings like get_dns_zone, but the 'change history' resource is inherently distinct from current-configuration or list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case ('Useful for auditing what changed') but does not mention when-not to use it or name alternative tools. This is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domainGet domainARead-onlyInspect
Get one owned domain with current nameservers and any pending domain action. Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | Owned domain ID from list_domains |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description goes beyond them by disclosing the required API-key scope (domains:read) and naming the returned fields (nameservers, pending action), which helps an agent decide whether a call is permitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what is fetched and followed by the auth requirement. No filler or restated title content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-read tool with no output schema and a fully documented single parameter, naming the returned fields and the required scope is close to sufficient. A brief note on error behavior for non-owned/invalid IDs would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and the schema already documents it at 100% coverage ('Owned domain ID from list_domains'). The description adds nothing about the identifier beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (one owned domain) plus the payload scope (current nameservers and any pending domain action). It is immediately distinguishable from the sibling list_domains, which returns many domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description adds an auth condition (requires domains:read when using an API key) but never states when to reach for this tool versus list_domains or the other domain-inspection siblings. Usage is only implied by the 'one owned domain' scoping.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_ordering_statusGet domain ordering statusBRead-onlyInspect
Show non-secret domain ordering readiness. Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and non-destructive, so the safety profile is covered. The description adds two pieces of genuinely useful context beyond the annotations: the required scope (domains:read, API-key path) and the fact that output is redacted ('non-secret'). It stops short of describing the return shape or whether readiness can be partially satisfied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the output-character constraint front-loaded before the auth requirement. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place the return value could be explained, and 'readiness' remains unexplained – the agent knows it will get non-secret data but not what readiness dimensions are reported. For a zero-parameter read tool this is close to adequate, but the central noun of the tool is undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema has nothing to document and the description is not obliged to compensate. Baseline 4 applies; there is no parameter ambiguity an agent could trip over.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb ('Show') and resource ('domain ordering readiness') are present, but 'readiness' is left undefined – an agent cannot tell whether this returns required contacts, lock status, eligibility flags, or something else. It also does not differentiate itself from the many sibling ordering/quote tools (quote_domain_register, confirm_domain_register). Purpose is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is an auth prerequisite ('Requires domains:read when using an API key'). There is no statement of when to call this versus quote_domain_register or confirm_domain_register, and no exclusion conditions. An agent must infer the place of this tool in the ordering workflow entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_parent_dsGet domain parent DSARead-onlyInspect
List parent-zone DNSSEC DS records for an owned domain. Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | Owned domain ID from list_domains |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds one useful trait beyond the schema—the domains:read permission requirement for API keys—but says nothing about pagination, result size, or what an empty result means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core purpose front-loaded and no wasted prose. The permission requirement is appended efficiently rather than padding the lead sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with full schema coverage and annotations covering safety, the description is nearly sufficient, and the mention of DS records implies the return content. It stops just short of describing the returned record shape (key tag, algorithm, digest), which for a no-output-schema tool would have been the final useful addition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and domain_id is already documented as 'Owned domain ID from list_domains', so the baseline is 3. The description adds no format, source, or constraint detail about the parameter beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (List) and a precise resource (parent-zone DNSSEC DS records for an owned domain), which cleanly separates it from the add_domain_parent_ds and delete_domain_parent_ds siblings. An agent knows exactly what this retrieves without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'for an owned domain' and the tool's read-only nature, and the description supplies a prerequisite (domains:read with an API key). However, it never states when to use this versus alternatives such as get_domain or the add/delete DS tools, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet eventARead-onlyInspect
Read the state of an asynchronous action: created, proccessing (sic), completed or error, with its message and payload. Accepts the numeric event id (start/stop/restart/console/suspend/resume return event) or the noty UUID (hostname, root password, SSH key deploy, OS reinstall, IPv6, extra settings and plan changes return noty). Service events need services:read; account events need account:read. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric `event` id or `noty` UUID returned by the action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds real behavioral context by disclosing the two id namespaces, the return shape (message and payload), and the services:read vs account:read authorization split. It does not discuss pagination or retention, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and state list, then the accepted id forms, then permissions — a logical order. Efficient overall, though the 'proccessing' typo and some redundancy in the long action list detract slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers purpose, id semantics, return contents, and authorization needs. An agent has everything required to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema type pattern already covers the id, but the description adds meaning beyond it by mapping which specific operations emit an event id versus a UUID. That mapping is genuinely value-adding over the schema's generic 'returned by the action' phrasing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read the state of an asynchronous action,' and enumerates the possible states (created, processing, completed, error). An agent can immediately distinguish this polling tool from sibling wait_for_event and from the mutation tools that generate events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains exactly which ids to supply and where they originate (start/stop/restart/console/suspend/resume return `event`; hostname/password/SSH-key/reinstall/IPv6/etc. return `noty`), plus the required read permissions per event class. It does not explicitly name the alternative (wait_for_event) or state when not to use it, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_faqGet faqCRead-onlyInspect
Get frequently asked questions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: no indication of what FAQ content is returned, whether it is static or account-scoped, or whether it is paginated. With annotations carrying the burden, the description still contributes zero additional behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and wastes no words, but it is under-specified rather than concise — it conveys almost no information. Adequate in form, deficient in substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no output schema, the description carries full responsibility for conveying what the agent will receive, and it does not. No output schema means the description should at least hint at the shape or scope of the returned FAQ data, which it entirely omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline is 4 per the rubric. There is no parameter semantics to explain, and the empty schema is self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get frequently asked questions' essentially restates the tool name and title with no added specificity. It does not say whose FAQs, about what domain (account, billing, networking), or how it differs from other informational tools like get_system_status or get_networking_overview. This is tautological rather than clarifying.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool, no conditions, no alternatives, and no exclusions. An agent cannot infer from the description whether this is a support/help lookup or something domain-specific within this large networking/account API surface.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firecracker_backup_historyGet firecracker backup historyARead-onlyIdempotentInspect
Get retained nightly Firecracker VPS backup history, including failed/running attempts and consistency provenance. records and backups contain the same list; this endpoint is not paginated. Temporary VMs return an empty disabled history. Requires services:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description adds real value beyond them: the endpoint is not paginated, records and backups return the same list, temporary VMs yield an empty disabled history, and it requires services:read. These are concrete behavioral traits the annotations don't carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the purpose, followed by behavioral caveats and the auth requirement. Every sentence carries useful information, though the density of clauses in the first half slightly reduces scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates by noting the list contents, the records/backups equivalence, and the absence of pagination, plus the auth requirement and the temporary-VM edge case. This is nearly enough for correct invocation, with the only gap being return-field shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single orderNo parameter is fully documented in the schema (pattern, length, example). The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Get') plus a scoped resource ('retained nightly Firecracker VPS backup history'), and enumerates what the history contains ('failed/running attempts and consistency provenance'). It distinguishes itself from the broader get_backup_history by the 'nightly Firecracker' qualifier, though it doesn't explicitly name sibling alternatives like get_firecracker_backup_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides prerequisite context ('Requires services:read') and an edge-case behavior ('Temporary VMs return an empty disabled history'), which help decide applicability. However, it never states when to use this versus get_firecracker_backup_status or get_backup_history, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firecracker_backup_statusGet firecracker backup statusARead-onlyIdempotentInspect
Get nightly off-node backup status for a Firecracker VPS, including running count and the latest retained backup's consistency provenance. A guest_agent attestation is the guest's claim. Temporary VMs have no automatic backups. Requires services:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/ idempotent/ non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: 'nightly off-node' backups, the fact that a guest_agent attestation is only the guest's claim, that temporary VMs have no automatic backups, and the required services:read scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences that front-load the core purpose and then layer caveats. Every sentence contributes, though the guest_agent attestation remark is dense and could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden and does so adequately by naming running count and consistency provenance. It also states the required scope. Complete enough for an agent to call and interpret it, missing only explicit sibling routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single orderNo parameter is well documented in the schema (pattern, length, example). The description adds no parameter-level detail, so baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get nightly off-node backup status for a Firecracker VPS') and enumerates what is returned (running count, latest retained backup's consistency provenance). This clearly distinguishes it from siblings like get_firecracker_backup_history (history) and get_backup_status (non-Firecracker).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Firecracker/VPS framing implies the context, and the caveat that temporary VMs have no automatic backups is useful scoping. However, it never explicitly states when to prefer this over get_firecracker_backup_history or get_backup_status, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_free_certificateGet free TLS certificateARead-onlyIdempotentInspect
Read one owned no-cost certificate request, including public CA, renewal schedule, validation state, safe timeline, and whether its public certificate is ready. A queued request is not proof of issuance. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| free_certificate_request_id | Yes | Customer-owned free-certificate request UUID returned by list_free_certificates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive safety, and the description adds genuinely new behavioral context: the required scope (certificates:read) and the semantic warning that a queued request does not mean the certificate is issued. That warning is the kind of non-obvious trait an agent cannot derive from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the verb and resource, and each clause (returned fields, issuance caveat, permission requirement) earns its place. No filler or restatement of the name/title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, enumerating the returned fields and the issuance-state caveat is exactly the right compensation, and the auth requirement covers the permission dimension. It falls short of 5 only because it does not mention failure modes (e.g., unknown or non-owned request ID) or confirm the ID's origin, which it leaves to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage; the schema already documents the UUID and its pattern. The description adds no format or sourcing detail beyond noting ownership, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Read one') and resource ('owned no-cost certificate request') and enumerates the returned facets (public CA, renewal schedule, validation state), making it distinct from list_free_certificates and the eligibility/instruction siblings. It does not explicitly name those siblings, but the singular 'one owned ... request' framing differentiates adequately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a prerequisite ('Requires certificates:read') and a key interpretation caveat ('A queued request is not proof of issuance'), which implies when the tool is useful. However, it never says when to reach for this versus get_certificate, get_free_certificate_eligibility, or list_free_certificates, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_free_certificate_eligibilityCheck free-certificate eligibilityARead-onlyIdempotentInspect
Check whether this account may request no-cost public DV certificates, its current anti-abuse quota, supported key-custody modes, and only the public certificate authorities that are operational in the current environment. This never exposes provider account IDs, credentials, or private keys. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower; the description still adds value by stating the required scope (certificates:read) and that the result never exposes provider account IDs, credentials, or private keys, plus that CAs are limited to those operational in the current environment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core purpose, then the returned facets and the disclosure/permission constraints. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the response and does so by enumerating the returned fields (eligibility, quota, custody modes, operational CAs). It is complete enough for an agent to call the tool and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is no parameter semantics to clarify; the schema is empty and the description correctly does not invent inputs. Baseline for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource (check eligibility for no-cost public DV certificates) with the returned facets enumerated: anti-abuse quota, key-custody modes, and operational public CAs. This distinguishes it clearly from get_free_certificate (which reads an existing cert) and create_free_certificate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied ('check whether this account may request...' reads as a pre-request gate) and the prerequisite 'Requires certificates:read' is stated, but there is no explicit when-to-use/when-not guidance relative to siblings like preflight_free_certificate or create_free_certificate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_free_certificate_instructionGet free-certificate validation instructionsARead-onlyIdempotentInspect
Read the current DNS validation instruction for one owned no-cost certificate request. VPSnet-hosted DNS may be automatic; external DNS returns every durable CNAME delegation the customer must create. No ACME challenge token or provider credential is returned. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| free_certificate_request_id | Yes | Customer-owned free-certificate request UUID returned by list_free_certificates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, non-open-world), yet the description adds real value: it discloses what is NOT returned (no ACME challenge token, no provider credential) and names the required scope (certificates:read). This is context an agent could not derive from structured fields alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the primary action, each carrying distinct information (scope, DNS-branch behavior, negative returns, auth). Dense but every sentence earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description itself explains the return content (durable CNAME delegations for external DNS) and the auth requirement, which is exactly what an agent needs to call and interpret this read tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and the schema documents it at 100% coverage, including format and the sibling that produces it. The description adds no additional parameter-level detail, so the schema-baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and a precisely scoped resource ('current DNS validation instruction for one owned no-cost certificate request'). The 'no-cost certificate request' framing cleanly separates it from the paid-certificate sibling get_certificate_validation and from get_free_certificate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (fetching validation instructions after a free-certificate request) and explains branch-dependent behavior for VPSnet-hosted vs external DNS, but never states when to prefer this over siblings such as recheck_free_certificate, recheck_certificate_validation, or get_free_certificate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_functionGet functionBInspect
Get one Firecracker Function with code, config, and webhook details. OAuth reads redact environment values and webhook secrets; omit those fields during unrelated edits.
| Name | Required | Description | Default |
|---|---|---|---|
| function_id | Yes | Function ID from list_functions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds genuinely useful behavior beyond structured fields: OAuth reads redact environment values and webhook secrets, and those fields should be omitted on unrelated edits. However, it frames the call as a plain read ('Get', 'OAuth reads') while annotations set readOnlyHint=false, which signals a non-read-only operation and risks misleading the agent about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what is returned and followed by the redaction caveat. The 'omit those fields during unrelated edits' clause is slightly tangential to a getter but earns its place as a data-safety warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing the payload (code, config, webhook details) and the redaction behavior, which is enough for a single-parameter getter. It lacks any note on failure modes or auth scopes needed to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself cross-references list_functions for the ID's origin, so the description adds nothing about the single parameter. Baseline 3 applies when the schema fully carries parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one Firecracker Function') plus what the single call returns: code, config, and webhook details. It is clearly distinct from list_functions by the word 'one', though it never names siblings to differentiate explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this over list_functions, get_function_invocation, or update_function, and no prerequisite/auth requirement spelled out. The second sentence gives an edit-time caveat rather than usage context for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_function_invocationGet function invocationARead-onlyInspect
Get a Firecracker Function invocation's status and usage cost. Output/logs are available when output_retained is true.
| Name | Required | Description | Default |
|---|---|---|---|
| function_id | Yes | Function ID from list_functions | |
| invocation_id | Yes | The invocation_uuid returned by invoke_function or list_function_invocations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false. The description meaningfully adds beyond that: it discloses that output/logs are only present when output_retained is true, warning the agent that fields may be absent. It stops short of describing permissions or the full response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler, and the core purpose is front-loaded ahead of the conditional output caveat. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries some burden for return values, and it names status, usage cost, and conditional outputs. That is reasonably complete for a simple two-parameter lookup, though it does not enumerate the remaining fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented as function_id and invocation_id with clear provenance (list_functions, invoke_function, list_function_invocations). The description adds no parameter-level detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (get a Firecracker Function invocation) and names the returned content (status and usage cost). It is distinguishable from siblings like list_function_invocations by the singular scope, though the description never explicitly contrasts the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the resource name suggests fetching a single invocation, and the schema descriptions point to invoke_function or list_function_invocations as the source of the ID. There is no explicit when-to-use or when-not-to-use guidance, and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guest_agent_statusGet guest agent statusARead-onlyInspect
Read guest-agent availability for Cloud VPS (KVM/VDS) or Firecracker. KVM probes its QEMU agent; Firecracker reads worker-reported health. This is separate from VM provisioning and application health. Unknown is advisory, not proof the server failed; unavailable gates only operations that need the agent. Delegated Linux tools do not provide Windows PowerShell or RDP verification. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive, closed-world), but the description adds substantial semantics beyond that: what 'Unknown' means (advisory, not proof of failure), what 'unavailable' gates, per-platform probe mechanics (QEMU agent vs worker-reported health), a limitation on Windows PowerShell/RDP verification, and the required services:read scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each carrying distinct load, with purpose and platform scope front-loaded before the caveats. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description explains how to interpret results (Unknown is advisory; unavailable gates only agent-dependent operations), lists per-platform behavior, and states the auth requirement. Nothing an agent needs to call or interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single orderNo parameter is fully documented in the schema (pattern, length, example). The description never mentions orderNo, so it adds no meaning beyond the structured field. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read guest-agent availability') and narrows scope to Cloud VPS (KVM/VDS) or Firecracker. It explicitly separates itself from application health and VM provisioning, so an agent can distinguish it from get_application_health without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent this is distinct from VM provisioning and application health, and notes that 'unavailable gates only operations that need the agent', which implies when the result matters. It stops short of naming an explicit alternative tool or giving a clear when-to-prefer-this condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guest_nameserversGet guest nameserversARead-onlyIdempotentInspect
Get the server's saved guest DNS resolver configuration: nsData.type is own (VPSnet defaults) or custom, with ns1-ns4 resolver IP addresses. Own mode stores null custom addresses; these are not an observation of the guest's current resolver file. Requires services:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds context the annotations cannot: the required services:read scope and the important interpretation caveat that own mode returns null custom addresses and is not a live observation of the guest's resolver file, which prevents an agent from misreading the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: identity of the resource, semantics of the returned modes, then the interpretation caveat and auth requirement. Nothing is repeated from the schema or annotations and the most decision-relevant information (what the tool actually returns) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description compensates by describing the return structure (nsData.type plus ns1-ns4 addresses) and its edge case. Combined with the stated auth scope and the read-only annotations, an agent has everything needed to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the orderNo property already documents the pattern, length bounds and an example. The description adds no syntax, format or constraint detail beyond that, so the baseline 3 for a fully documented single parameter is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the server's saved guest DNS resolver configuration') and pins down the exact shape of the payload (nsData.type own/custom, ns1-ns4). The caveat that this is stored configuration rather than an observation of the guest's resolver file cleanly separates it from the setter (set_guest_nameservers) and from other DNS getters in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies a prerequisite ('Requires services:read') but never says when to reach for this tool versus alternatives such as get_dns_zone or set_guest_nameservers. Usage is implied by the resource name rather than stated, which is the definition of minimum viable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hostnameGet hostnameBDestructiveInspect
Get the current service hostname, reserved automatic hostname, and automatic/customer management mode. Read-only API keys are accepted. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description calls this a read operation and explicitly says read-only API keys are accepted, requiring services:read. This contradicts the annotations, which declare readOnlyHint=false and destructiveHint=true. The contradiction makes the behavioral signal misleading rather than transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences that front-load what is returned and then state the API-key/scope requirement. Every clause contributes useful information without unnecessary padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-style tool with no output schema, the description lists the returned hostname and management-mode information and states the required auth scope. It leaves some ambiguity around how to handle the listed fields and does not resolve the annotation conflict, but the call-relevant context is largely present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single orderNo parameter is fully documented in the schema, including pattern and examples. The description adds no parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate given 100% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: get the current service hostname, reserved automatic hostname, and management mode. It implicitly distinguishes this read operation from sibling mutators like change_hostname and reset_hostname, but it does not explicitly name or route away from those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful invocation conditions such as accepting read-only API keys and requiring services:read with an API key. However, it does not say when to use this tool versus change_hostname, reset_hostname, or other service-information tools, so guidance is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceGet invoiceARead-onlyInspect
Get a specific invoice by hash
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | Invoice hash from list_invoices |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only that the lookup is singular and hash-based; it does not disclose return format, permissions, or any other behavioral traits beyond what annotations and the schema already provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with zero waste. It says exactly what the tool does and nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool with rich annotations and a fully described single-parameter schema, the description is nearly complete. It could mention the list_invoices alternative or the returned object, but those are minor gaps for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter is fully documented in the schema as 'Invoice hash from list_invoices'. The description restates 'by hash' without adding format details, constraints, or examples, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('specific invoice') plus retrieval key ('by hash'). It implicitly distinguishes singular retrieval from list_invoices, but does not explicitly name the sibling or any exclusions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call this when you have an invoice hash and need the corresponding invoice. There is no explicit when-to-use guidance, no when-not-to-use guidance, and no mention of the list_invoices alternative in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_login_historyGet login historyARead-onlyInspect
Get account login history (IPs, dates) with pagination; follow response pagination to read older records.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: results are paginated and older records are only reachable by following response pagination, which an agent could not infer from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single semicolon-joined sentence with no filler, and the core purpose ('account login history (IPs, dates)') is front-loaded before the pagination note. It is dense but every clause carries information; only the slight compression of two distinct ideas into one sentence costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema and annotations covering safety, the description is close to sufficient, but the interaction between the 'page' parameter and the instructed 'response pagination' is left unresolved — an agent cannot tell whether to pass page or follow the response link for older records. That ambiguity is the main missing piece.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter ('page') and schema description coverage is 0%, so the description carries the burden. It does mention pagination, which gives the 'page' param some meaning, but it never explains the param's semantics (page number vs offset, default value when omitted) and introduces mild ambiguity by implying pagination is response-driven rather than param-driven.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Get account login history') and even enumerates the payload ('IPs, dates'), so the agent knows exactly what it retrieves. It does not differentiate from the loosely adjacent audit-style siblings (get_management_history, get_api_key_activity), but there is no true competing login-history tool, so the lack of routing language is a minor gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: it says to 'follow response pagination to read older records', which tells the agent how to consume results but never says when to reach for this tool versus other history/activity tools. No exclusions or prerequisites are given, so this is minimum-viable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_management_historyGet management historyARead-onlyInspect
Get management/activity history with pagination and optional exact orderNo or subject_kind/subject_key filters. subject_kind accepts one kind or comma-separated kinds (network, load_balancer, vpn_gateway, nat_gateway, security_group, public_address); subject_key requires exactly one kind. Follow response pagination to read older records.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| orderNo | No | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| subject_key | No | ||
| subject_kind | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the pagination behavior ('follow response pagination to read older records'), which is genuinely useful context beyond the annotations, but says nothing about record ordering, retention, or result volume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose before filter details and ending with the pagination instruction. The parenthetical value list is long but each item earns its place as an enumeration of accepted kinds.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only history tool with no output schema, the description covers the essential call mechanics: filter modes, valid subject_kind values, the subject_key constraint, and pagination traversal. It omits what a record actually contains or how results are ordered, which are secondary for a listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (just orderNo), so the description carries real weight: it enumerates the accepted subject_kind values and, crucially, states that subject_key requires exactly one kind — a coupling constraint absent from the schema. It also clarifies that the two filter families are alternatives rather than combinable, which adds meaning beyond the raw types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (get management/activity history) and scopes it to tenant management operations, which separates it from siblings like get_service_history or get_login_history. It stops short of naming those alternatives explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clarifies that the two filter modes are optional and mutually exclusive in structure (exact orderNo, or subject_kind/subject_key), and instructs the agent to follow response pagination. There is no explicit guidance on when to prefer this tool over get_service_history, list_network_operations, or get_dns_zone_history, so routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_appliance_billingGet network appliance billingARead-onlyIdempotentInspect
Read current customer-visible recurring appliance lines and currency. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read profile (readOnly, idempotent, non-destructive). The description adds real value beyond them: explicit networking:read vs networking:manage scopes, the fact that full/read defaults do not grant networking, and backend enforcement of ownership, feature availability and service 2FA locks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with what is read, then the permission model. The 'or networking:manage for changes' clause is slightly confusing on a read-only tool but doesn't bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description characterizes the returned data (recurring appliance lines and currency). Combined with auth/enforcement notes and no parameters to document, an agent has enough to invoke it correctly, though the phrasing of the manage-scope caveat is a minor loose end.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema/description have nothing to disambiguate. Baseline 4 applies; the description correctly refrains from inventing inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('current customer-visible recurring appliance lines and currency'), which clearly separates it from billing-adjacent siblings like get_network_payment_methods, list_invoices and get_pricing. It does not name a specific sibling to route against, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance relative to alternatives such as get_network_appliance_capabilities or get_pricing. Usage is only implied by the resource described; the permission scoping hints at context but doesn't tell the agent when to reach for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_appliance_capabilitiesGet network appliance capabilitiesARead-onlyIdempotentInspect
Read available load balancer providers/tiers, public qualification, VPN capabilities and quota. Tier availability and prices are returned by the backend, never hardcoded. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnly/idempotent annotations by disclosing that tier availability and prices come from the backend and are never hardcoded (implying live, non-cacheable data), and that backend enforces ownership, feature availability, and service 2FA locks. The explicit networking:read vs networking:manage requirement is valuable auth context, though the 'changes' branch is confusing for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with what is read, then data-freshness, then auth requirements. Each sentence adds something, though the read/manage auth sentence is slightly ambiguous and could be tightened for a read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partially compensates by naming the returned categories (providers/tiers, prices, qualification, VPN capabilities, quota). That is adequate for a no-parameter capability query, though it does not describe response shape or pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the description introduces none, so there is nothing to mis-specify; baseline 4 applies for a 0-param schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) plus concrete resources: load balancer providers/tiers, public qualification, VPN capabilities and quota. It is far more specific than a tautology, but it does not differentiate itself from sibling capabilities tools such as get_networking_capabilities, get_networking_features, or get_security_group_capabilities, leaving the agent to guess which capability endpoint applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (query capability/quota data before provisioning networking resources), but no explicit when-to-use or when-not-to-use guidance is given, and no sibling alternative is named despite several overlapping 'capabilities' tools existing. The access-scope sentence is about authorization, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_appliance_operationGet network appliance operationARead-onlyIdempotentInspect
Poll an accepted appliance operation on in_progress (true until succeeded, failed or cancelled), waiting next_check_seconds between reads (a load balancer or VPN change settles in a few seconds). A fresh change is queued with appliance_dispatch_pending and then waiting_dependency while the control plane answers; reason_kind waiting marks every such reason as progress, not an error. Creation succeeds only when its actual resource state and health confirm readiness. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent profile, yet the description adds substantial context beyond them: poll cadence, the meaning of waiting reason_kind, the rule that creation only succeeds when resource state and health confirm readiness, and the permission model (networking:read vs networking:manage, defaults insufficient). It also notes backend enforcement of ownership, feature availability and 2FA locks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause and every sentence carries operational information about states, timing, or permissions. It is dense and semi-colon-heavy, but there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return-value burden, and it does: it names the status progression and the terminal states an agent should test against. It stops short of describing the full response shape or which fields confirm readiness, leaving a small gap for a polling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single operation_id parameter is fully documented in the schema (UUID pattern, length bounds, ownership note), giving 100% coverage, so the baseline is 3. The description adds only an implicit 'owned' qualifier and no additional syntax or sourcing detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: polling an accepted appliance operation, with the terminal states spelled out (succeeded, failed, cancelled). It is clearly a status-read tool rather than a mutator. However, it never distinguishes itself from the close sibling get_networking_operation, leaving the agent to infer the scope difference from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage context: poll while on in_progress, wait next_check_seconds between reads, and treat queued/waiting_dependency as progress rather than failure. What is missing is an explicit statement of when to choose this over get_networking_operation or list_networking_operations, so alternatives remain unaddressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_networking_capabilitiesGet networking capabilitiesARead-onlyIdempotentInspect
Read account networking availability, quota, creation options and new-server order eligibility. private_network.available/reason_code and order_availability describe selecting an already applied network during a NEW server order; when no such network exists they can be false without denying private-network creation or attachment of existing services. For existing servers, list or create a network and use list_network_attachment_candidates for each service. A refusal from the create, candidate or attach endpoint remains authoritative. Never infer support from tool presence. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read profile (readOnly, idempotent, non-destructive, openWorld), and the description goes well beyond them: it specifies the required scopes (networking:read vs networking:manage), warns that full/read defaults do not grant networking, states that backend refusals are authoritative, and cautions 'never infer support from tool presence'. These are substantive behavioral facts an agent could not derive from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the read scope, then the field-interpretation caveat, then alternatives, then permissions. Six dense sentences with little waste, though the permissions/enforcement sentence is somewhat tacked on and the whole block is longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry return-value meaning and it does explain the key fields (private_network.available/reason_code, order_availability) and their interpretation. It does not, however, describe the quota or creation-options portions of the payload it claims to return, leaving a modest gap for a zero-param capability read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies; there is no argument surface for the description to clarify, and the schema is trivially complete with additionalProperties: false.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reading account networking availability, quota, creation options and new-server order eligibility. That is more precise than the tautological title, but it never names or contrasts with the closely related siblings (get_networking_features, get_networking_overview, get_networking_topology), so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real routing context: explains that private_network.available/order_availability are about selecting an already-applied network in a NEW order, that false does not block creation/attachment, and that for existing servers one should list/create a network and use list_network_attachment_candidates per service. It stops short of an explicit 'use this instead of X' statement against the other networking get_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_networking_featuresGet networking featuresARead-onlyIdempotentInspect
Read current networking feature gates, DNS options and supported contract extensions. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint and non-destructive behavior, so the bar is lower. The description still adds real value beyond them: the required scopes, the warning that full/read defaults do not grant networking, and the note that the backend enforces ownership, feature availability and service 2FA locks. The phrase 'networking:manage for changes' is slightly confusing for a read-only tool but describes the permission model rather than contradicting the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what is read before the permission caveats. The permission clause is dense but earns its place since it prevents a failed call. Minor redundancy between the scope requirement and the full/read-default warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only inspection tool with no output schema, the description covers purpose and access prerequisites adequately. It does not describe the shape of the returned feature gates/options, but with no output schema declared that is a minor gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema baseline of 4 applies and there is no parameter semantics for the description to explain. Nothing here mischaracterizes invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource set: reading networking feature gates, DNS options and supported contract extensions. That is concrete enough to distinguish it from most siblings. It stops short of distinguishing it from adjacent read tools such as get_networking_capabilities, get_networking_overview or get_network_appliance_capabilities, which an agent would need help telling apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the permission requirements (networking:read vs networking:manage) suggest it is used to check capability/permission state before attempting changes. There is no explicit 'use this when / not when' guidance and no reference to the numerous sibling capability/overview tools that cover overlapping ground.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_networking_operationGet networking operationARead-onlyIdempotentInspect
Read an accepted network or port operation only. Poll on in_progress (true until succeeded, failed or cancelled) and wait next_check_seconds between reads; reason_kind says what reason_code is: waiting (progress, including queued, pending and control-plane-not-yet-answered reasons - not an error), failure or outcome. A port reserve (the operation an attach returns) names its activation_operation_id once the activation that finishes the attachment exists; the completed history line names both ids. A successful network_graph_created operation permits checking network.port_intent_ready for the first attachment; it does not prove guest connectivity. Security-policy, appliance and public-binding operation IDs belong to different stores. Poll security policies with get_network_security_policy, appliances with get_network_appliance_operation, public bindings with get_network_public_binding, and DNS changes through get_private_network.settings.dns_change. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it explains that in_progress stays true until succeeded/failed/cancelled, documents reason_kind semantics (waiting vs failure vs outcome, queued/pending not an error), describes the activation_operation_id relationship for port reserves, and states auth requirements plus backend enforcement of ownership, feature availability and 2FA locks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core read purpose and polling cadence, then routing and semantics. Every sentence carries information, though the density is high and the sibling enumeration in the middle is somewhat list-like; it is long but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and does so: it explains the returned in_progress/reason_kind/next_check_seconds fields, the semantics of a successful network_graph_created (and its limits re: guest connectivity), and the permission model. Nothing an agent needs to invoke and interpret this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the operation_id format is fully documented there, so baseline is 3. The description adds real meaning by constraining which operation IDs are valid here (network/port operations only, not security-policy/appliance/public-binding/DNS stores), clarifying the ID's provenance beyond the schema's generic phrasing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read an accepted network or port operation') and immediately scopes it with 'only'. It explicitly distinguishes its resource domain from sibling stores (security-policy, appliance, public-binding operation IDs), so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit polling guidance ('poll on in_progress... wait next_check_seconds between reads') and names the exact alternatives for other operation types: get_network_security_policy, get_network_appliance_operation, get_network_public_binding, and get_private_network for DNS. This is when/when-not plus alternatives, fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_networking_overviewGet networking overviewARead-onlyIdempotentInspect
Read owned networks, quota and operation snapshot. operations_has_more signals a bounded backend feed. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely non-obvious context beyond that: the explicit networking:read/networking:manage scope requirement, the fact that full/read defaults do not grant networking, and backend enforcement of ownership, feature availability and 2FA locks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose before the auth and enforcement caveats. Each sentence carries distinct information, though the auth/enforcement clauses are dense and could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey return content, and it does identify networks, quota and an operation snapshot plus the operations_has_more signal. It stops short of enumerating the snapshot's fields, but it is sufficient for a zero-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to document; baseline 4 applies. The mention of operations_has_more is a response-field note rather than a parameter, and it is not misleading here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Read) and concrete resources (owned networks, quota, operation snapshot), which is more than a tautology of the title. However, it never distinguishes itself from close siblings such as get_networking_topology, get_networking_capabilities, or get_networking_features, leaving the agent to guess which overview to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a real precondition ('Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking'), which helps the agent decide whether it is even permitted to call this. It does not, however, state when to prefer this tool over the other networking read tools, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_networking_topologyGet networking topologyARead-onlyIdempotentInspect
Read the account topology with network-scoped identities. Optional metrics=current requests measured traffic. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds real value beyond them: the required networking:read/networking:manage scopes that defaults do not grant, plus backend-enforced ownership, feature availability and service 2FA locks. These are auth/authorization behaviors the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose followed by the optional parameter and then the permission/enforcement caveats. Dense but every clause adds information; no filler. Slightly packed, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only topology endpoint with an output schema absent, the description covers purpose, the lone parameter and the permission model an agent must satisfy before calling. What is missing is any indication of the shape of the returned topology, but safety annotations and the low complexity keep this adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents the single 'metrics' parameter only via its const value with 0% description coverage. The description compensates by explaining that metrics=current requests measured traffic, giving the agent the semantic meaning of the lone parameter that the schema alone does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read the account topology with network-scoped identities.' An agent can tell it is a read of the networking topology, but the description does not distinguish it from close siblings like get_networking_overview or get_networking_features, which share the same get_*networking* naming space.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a hard prerequisite (explicit networking:read for reads, networking:manage for changes, and that full/read defaults do not grant networking), which is genuinely useful. However, it never says when to choose this tool over get_networking_overview or the other networking readers, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_load_balancerGet network load balancerARead-onlyIdempotentInspect
Read one owned load balancer, listeners, members, generation and health. A pending or unqualified public endpoint is not ready. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| load_balancer_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description earns credit for adding auth requirements (networking:read / networking:manage), ownership and feature-availability enforcement, service 2FA locks, and the readiness caveat about pending or unqualified endpoints. The aside about "networking:manage for changes" on a readOnly tool is slightly misleading but reads as permission-family boilerplate rather than a true contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no filler: scope, readiness caveat, then permissions. "A pending or unqualified public endpoint is not ready" is terse to the point of being slightly opaque, which keeps this from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden and does so by naming listeners, members, generation and health. Combined with the ownership, 2FA and permission gating, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter and 100% schema description coverage (UUID format, length, pattern all documented in the schema), the baseline of 3 applies. The description adds no format or sourcing detail beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read one owned load balancer") and enumerates what the read returns: listeners, members, generation and health. The word "one" plus the singular resource cleanly distinguishes it from the sibling list_network_load_balancers without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real context for use: explicit networking:read is required, full/read defaults do not grant networking, and the target must be an owned resource. It does not name the alternative (list_network_load_balancers) or state when-not to use it, so it stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_payment_methodsGet network payment methodsARead-onlyIdempotentInspect
Read payment-method metadata without starting payment. Choose the exact value of an item with system=balance for API-key network purchases; other methods are refused for API keys. This public catalog needs no networking scope.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds genuine behavioral context beyond them: this is a public catalog requiring no networking scope, and API keys are refused for non-balance methods.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with the read-only/no-payment constraint front-loaded, followed by selection guidance and scope notes. No filler, though the phrase 'needs no networking scope' is slightly tangential for a reader deciding whether to call it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only catalog with no output schema and no annotations gap, the description covers when and why to call it, but leaves the sole parameter undocumented and does not describe what fields the returned metadata contains beyond hinting at a system field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is exactly one parameter, country, with 0% schema description coverage and no enum, yet the description never mentions it at all. The agent gets no hint about the two-letter country code format or whether it is required, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read payment-method metadata') and immediately scopes it with 'without starting payment', which separates it from the quote/order payment siblings. It is clear what the tool returns, though it never names a nearest alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete selection guidance: pick the item whose system=balance for API-key network purchases, and warns that other methods are refused for API keys. That is actionable when-to-use context, but it stops short of naming which sibling to call for non-API-key payments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_product_orderGet network product orderARead-onlyIdempotentInspect
Read an owned common-checkout order's payment and fulfilment state. paid_pending with billing_state=captured and reason_code=network_product_ip_inventory_wait means this paid order awaits public IP inventory and resumes automatically when available; keep polling this order without another purchase, payment or manual retry. paid_pending is not ready. manual_review or network_product_stock_reconciliation_required needs operator review, not an automatic inventory retry. fulfilled may include a separate attachment status. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial value beyond them: required scopes (networking:read vs networking:manage), the note that full/read defaults do not grant networking, and backend enforcement of ownership, feature availability and 2FA locks. It also decodes status transitions, which is real behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every sentence carries useful state or auth information. The status-semantics sentences are dense but each earns its place; the brevity of 'paid_pending is not ready' is a minor stylistic jolt rather than waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers the return semantics (paid_pending, manual_review, fulfilled with attachment status), the polling contract, and the authorization model. Nothing an agent needs to call or interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single order_id parameter, so the schema already documents format and constraints. The description refers to 'this order' but adds no syntax, ownership or format detail beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb (Read) and resource (an owned common-checkout order) and states exactly what is retrieved: payment and fulfilment state. This implicitly separates it from sibling search/order tools like find_network_product_order and order_network_product without needing their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete operational guidance — keep polling a paid_pending order without re-purchasing or retrying, and route manual_review / network_product_stock_reconciliation_required to operator review. It does not, however, explicitly name alternatives (e.g., find_network_product_order or list_network_products) or state when this tool is the wrong choice, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_public_addressGet network public addressARead-onlyIdempotentInspect
Read one owned public address, attachment and paid-period state. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, but the description adds genuinely useful context: the required auth scopes, the warning that full/read defaults do not grant networking, and backend enforcement of ownership, feature availability and service 2FA locks. It stops short of describing error/not-found behavior or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler; the read scope is front-loaded and the permission/enforcement constraints follow. Every clause adds information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with a fully described schema and no output schema, the definition covers purpose, auth scopes and enforcement well. It does not address failure modes (missing address, 2FA lock errors) or what the returned attachment/paid-period state contains, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single address_id parameter is fully documented (UUID pattern, source of the value), so the schema carries the load. The description adds only the 'owned' ownership qualifier, which is marginal beyond what the schema already says. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with explicit scope: 'Read one owned public address, attachment and paid-period state.' The 'one owned' qualifier implicitly separates it from the sibling list_network_public_addresses, and it names the returned state fields, so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a prerequisite (explicit networking:read vs networking:manage scopes) but never states when to choose this tool over list_network_public_addresses or get_network_public_binding. Usage is implied by the 'one owned address' scope rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_public_bindingGet network public bindingARead-onlyIdempotentInspect
Read one existing owned public binding's generation, state and assigned address. Poll this resource after bind, move, forward or delete; public-binding operation IDs are not accepted by get_networking_operation or get_network_appliance_operation. Existing bindings are distinct from purchasing an account public address. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| binding_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, open-world), and the description goes well beyond them: required scopes (networking:read / networking:manage), the warning that full/read defaults do not grant networking, and backend enforcement of ownership, feature availability and 2FA locks. This is meaningful pre-call context for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and then the polling trigger, negatives, and auth constraints. Every sentence carries distinct information, though the auth sentence ('for reads or changes') is slightly dense and marginally redundant on a read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned fields, and it covers auth, ownership and operational routing. An agent has everything needed to invoke and interpret this call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and schema description coverage is 100%, so the schema already defines binding_id in full (UUID pattern, length). The description adds no syntax or constraint detail beyond implying ownership, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (one existing owned public binding), plus exactly what it returns: generation, state and assigned address. It also explicitly separates itself from get_network_public_address ('Existing bindings are distinct from purchasing an account public address') and from the operation-fetching siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use trigger ('Poll this resource after bind, move, forward or delete') and an explicit negative routing rule ('public-binding operation IDs are not accepted by get_networking_operation or get_network_appliance_operation'). An agent can pick this tool versus its nearest alternatives without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_routed_egressGet network routed egressARead-onlyIdempotentInspect
Read this network's NAT/internet access, public address and qualification state. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive and open-world. The description adds value beyond them: the exact permission scope required, the fact that default/read roles do NOT grant networking, and that the backend enforces ownership, feature availability and 2FA locks. These are meaningful operational constraints an agent cannot infer from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the read scope before the permission constraints. Tight overall; the only minor cost is the 'or networking:manage for changes' phrase, which is irrelevant noise on a read-only getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates what is returned (NAT/internet access, public address, qualification state) and covers the authorization/enforcement model. Complete enough to call correctly; only the missing explicit pointer to set_network_routed_egress keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single network_id parameter, so the schema already carries the format and provenance requirements (lowercase UUID from an owned resource). The description adds nothing further about the parameter, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (this network's routed egress) and enumerates the retrieved facets: NAT/internet access, public address, and qualification state. This distinguishes it from generic read siblings like get_networking_overview, though it never names the natural counterpart set_network_routed_egress, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real prerequisite (explicit networking:read, not covered by full/read defaults), which is genuine usage guidance. However it names no alternative and the clause 'networking:manage for changes' is odd for a read-only tool, leaving when-to-use vs set_network_routed_egress or get_network_vpn_egress_options to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_security_policyGet network security policyARead-onlyIdempotentInspect
Read default_policy, assigned group rules and desired/applied policy generations. Policy generation differs from network and port generations. effective_policy.default_ingress/default_egress describe implicit deny fallthrough after allow rules; they do not override default_policy=accept or mean every packet is denied. Custom group rules replace the network default on their assigned ports. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already declare readOnly/idempotent/non-destructive), it discloses the auth model (explicit networking:read, and that full/read defaults do NOT grant networking) and backend-enforced constraints (ownership, feature availability, service 2FA locks). Most valuably it pre-empts a real misreading: effective_policy.default_ingress/default_egress are implicit deny fallthrough and do not override default_policy=accept.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return shape, then the semantic caveats, then the permission model; each sentence carries real information. Slightly dense and the 'or networking:manage for changes' clause is boilerplate that does not apply to a read-only tool, costing it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain the returned fields, and it does cover default_policy, group rules, generations, and the effective_policy semantics plus the auth/ownership preconditions. It stops short of enumerating the full response structure or error behavior, which for a high-complexity networking read is a minor remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both params are fully documented as exact lowercase UUIDs by owned resources, so the schema carries the load. The description adds no syntax, format, or relational detail about project_id or network_id, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening verb+resource statement names exactly what is read: default_policy, assigned group rules, and desired/applied policy generations, and it distinguishes policy generations from network and port generations. It never names a sibling tool, so an agent must infer the boundary against get_security_group_capabilities, list_network_security_groups, or set_network_default_security_policy on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a permission precondition (networking:read for reads, networking:manage for changes) but gives no when-to-use/when-not guidance and never names an alternative tool or the condition that would select one. The agent is left to infer that this is the read path for a network's security policy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_vpn_egress_optionsGet network VPN egress optionsARead-onlyIdempotentInspect
Read supported VPN Internet exits and qualification. Ordinary VMs and remote connectors are not implied to be supported. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/destructive=false, and the description goes beyond them by disclosing the exact auth model (networking:read vs networking:manage, and that full/read defaults do NOT grant networking) plus backend enforcement of ownership, feature availability, and service 2FA locks. This is meaningful behavioral context not captured by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, purpose front-loaded, no padding. Minor noise: the 'or networking:manage for changes' clause is irrelevant to a read-only tool and slightly muddies the message, but overall it reads efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema, single-parameter read tool whose annotations cover the safety profile, the description supplies purpose, auth scope, and enforcement context. Nothing critical is missing, though it could note the return shape or pagination since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema coverage, so the schema already fully documents gateway_id (UUID format, length, pattern). The description adds only indirect meaning via 'the backend enforces ownership,' which hints the gateway must belong to the caller. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Read supported VPN Internet exits and qualification.' It also clarifies scope by stating ordinary VMs and remote connectors aren't implied to be supported. However, it never distinguishes this tool from close siblings like get_network_routed_egress, get_network_vpn_summary, or get_network_vpn_gateway.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicit usage is clear (discover supported VPN egress exits for a gateway), but there is no explicit when-to-use vs when-not guidance and no routing to alternative tools. The scoping note about VMs/connectors being unsupported is helpful but stops short of directing the agent to a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_vpn_gatewayGet network VPN gatewayARead-onlyIdempotentInspect
Read one owned VPN gateway, current generation, device peers, grant candidates and attachment capability. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. The description adds genuinely new context: explicit networking:read scope (with full/read defaults insufficient), plus backend enforcement of ownership, feature availability, and service 2FA locks. The 'or networking:manage for changes' clause is slightly off for a read-only tool but the permission surface is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, purpose and returned data front-loaded before the permission constraints. Efficient, though the trailing 'or networking:manage for changes' is mildly surplus for a read-only operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool with no output schema and full annotation coverage, the description supplies enough: what is read, what it returns, and the auth/enforcement context. Only minor gap is a lack of explicit disambiguation against sibling read tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the single gateway_id is fully documented as a lowercase UUID returned by an owned resource. The description adds no parameter-level detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one owned VPN gateway') and enumerates the returned facets (current generation, device peers, grant candidates, attachment capability). The singular 'one owned' distinguishes it from the sibling list_network_vpn_gateways without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scoping phrase 'one owned VPN gateway' implies usage for a known gateway_id, and the auth clause hints at required scope. However, there is no explicit when-to-use vs when-not, and no routing to alternatives such as list_network_vpn_gateways for enumeration, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_vpn_summaryGet network VPN summaryARead-onlyIdempotentInspect
Read the network's VPN summary, including truthful absence. Native site-to-site is not supported by this tool set. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the description goes further by disclosing the required authorization scopes, the fact that full/read defaults do not grant networking, and backend-enforced ownership, feature availability, and 2FA locks. That is meaningful added behavioral context beyond the structured annotations. The stray mention of 'changes' for a read-only tool is slightly confusing but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, purpose front-loaded, then scope exclusion, then permissions, then enforcement. Little waste, though 'including truthful absence' is idiosyncratic phrasing that a reader must parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should clarify what a 'VPN summary' contains; instead it only hints via 'truthful absence' at how absence is represented. Auth/enforcement context is solid, but the return shape remains underspecified for a tool shipping no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single parameter, so the schema fully documents network_id (format, UUID pattern, source). The description adds no syntax or format detail beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the network's VPN summary') and adds a scope exclusion ('Native site-to-site is not supported by this tool set'). It does not, however, explicitly differentiate itself from closely related reads like get_network_vpn_gateway or get_network_vpn_egress_options. Clear purpose but no direct sibling routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides prerequisites (explicit networking:read vs networking:manage) and a negative scope statement about site-to-site, which gives implied usage context. However, it never says when to choose this over the many other VPN/read siblings (e.g. get_network_vpn_gateway), so the alternative-selection guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_optionsGet order optionsBRead-onlyInspect
Get configurable options (OS, resources, periods) for a plan
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Plan ID from get_order_plans |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds no behavioral context beyond that (no mention of permissions, caching, or what the returned option set looks like), so it earns only the baseline credit for an annotated read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the verb and resource with zero filler. It is efficient, though the parenthetical enumeration is the only substantive content it carries.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full schema coverage and no output schema, the definition is close to sufficient, and naming the option categories partially compensates for the missing return documentation. It still leaves the ordering-workflow context and the distinction from sibling option tools implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the sole parameter 'plan' is documented in-schema as 'Plan ID from get_order_plans', including its integer/bounds constraints. The description adds only 'for a plan', which is redundant with the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get configurable options') and enumerates the option categories (OS, resources, periods), so the agent knows what comes back. However, it does not differentiate from closely-named siblings like get_plan_options, get_os_options, and get_period_options, which sound like overlapping or subset operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is a step in the order flow (the plan ID comes from get_order_plans) but gives no explicit when-to-use, no prerequisites, and no named alternatives. With several near-duplicate sibling tools available, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_plansGet order plansARead-onlyInspect
Get available plans for one explicitly selected service product. Product facts are unordered: 'firecracker' is VPS using Firecracker microVMs for Linux; 'vds' is Cloud VPS (KVM) with High Availability, replicated Ceph NVMe storage, and Linux/Windows/BSD support; 'vps' is Container VPS for Linux; 'ds' is a dedicated single-tenant server. Select from the user's requirements and constraints rather than list position. Firecracker Functions is a separate usage-billed product and is not an orderable service type here.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Required service product: firecracker (Linux VPS microVM), vds (Cloud VPS/KVM with Linux, Windows, or BSD), vps (Container VPS/Linux), or ds (dedicated server). Enum order is not a recommendation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds non-obvious behavioral context: the product facts are unordered, enum order is not a recommendation, and Firecracker Functions is deliberately out of scope as an orderable type. Return format and pagination are not addressed, keeping this below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads purpose and constraint, and the following sentences each carry distinct information rather than filler. It is slightly dense with product specs that partially duplicate the enum descriptions, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only lookup with no output schema, the description covers scope, product semantics, and the key exclusion. Minor gap: it does not clarify what a returned 'plan' comprises, so an agent knows how to call it but not exactly what it gets back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enum already documents all four values, so the baseline is 3. The description earns above baseline by warning that enum order carries no ranking and by expanding what each product actually is (KVM/HA/Ceph for vds, microVM for firecracker), which reduces the chance of an agent picking the wrong type by list position.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get available plans') scoped to 'one explicitly selected service product', with concrete product definitions. It is distinguishable from unrelated siblings, though it never names the closest-looking alternatives such as get_order_options or get_plan_options, so the boundary is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real selection guidance ('Select from the user's requirements and constraints rather than list position') and excludes a lookalike ('Firecracker Functions is a separate usage-billed product and is not an orderable service type here'). However, it never says when to call this versus the sibling tools get_order_options, get_plan_options, or order_service, so tool-level routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_os_optionsGet OS optionsBRead-onlyInspect
Get available OS templates for reinstall Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false, destructiveHint=false). The description adds a real behavioral detail not in annotations: the services:read permission requirement when using an API key. That's useful context beyond the annotations, but nothing about rate limits, pagination, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses, front-loaded with purpose then the qualifier. Slightly terse/run-on ('reinstall Requires') but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, the description covers purpose, context, and auth. No output schema exists, so it could say more about what the returned OS templates look like (e.g., identifiers to feed into reinstall_os), which an agent would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents orderNo with pattern, length, and examples. The description adds no parameter detail, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get available OS templates') plus the context in which it applies ('for reinstall'). Clear enough to distinguish from siblings like get_plan_options, though it doesn't reference those siblings by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'for reinstall' implies the usage context, and the sibling reinstall_os makes the pairing inferable. However, there's no explicit statement of when to call this versus alternatives or that it should be called before reinstall_os.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_period_optionsGet period optionsBRead-onlyInspect
Get billing period and auto-renewal options Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description does add real value beyond annotations by disclosing the 'services:read' scope requirement for API-key calls, but says nothing about result shape, pagination, or ambiguity when an order number is unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the purpose is front-loaded. The missing sentence boundary between 'options' and 'Requires' makes it read as a run-on, a minor structural blemish.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool with safety annotations, this is close to adequate, but with no output schema the description could have said what the options payload contains. The auth note is the only extra detail supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single orderNo parameter is fully documented there (pattern, length, examples). The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Get billing period and auto-renewal options'), which is specific enough that an agent can distinguish it from quote/renew tools. It does not, however, name or contrast itself with the closest siblings such as get_plan_options, get_order_options, or list_network_product_periods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to call this versus the many adjacent option/period/quote tools, nor any prerequisites beyond a bare auth note. An agent must infer the usage context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_plan_optionsGet plan optionsARead-onlyInspect
Get available plans for upgrade/downgrade. Plan changes are FREE. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real context beyond them: that plan changes carry no cost and that an API-key call requires the services:read scope, which is actionable auth information an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the core purpose is front-loaded before the cost and auth notes. Every sentence conveys distinct, useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with one fully documented parameter and no output schema, the description covers purpose, cost, and auth scope adequately. It could have noted what the options contain (plan names/prices) to help the agent route correctly, but no essential calling information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: orderNo is fully documented with pattern, length bounds, and examples (VP12345, VP12345-1). The description adds nothing about the parameter, so the baseline 3 applies when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get available plans') and scopes it to upgrade/downgrade, which separates it from calculate_plan_change and change_plan. It does not explicitly name those siblings or clarify the ordering vs get_plan_resources / get_order_plans, so the differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for upgrade/downgrade' frames the context of use, and 'Plan changes are FREE' signals this is a no-cost exploration step. However, it gives no explicit when-not guidance and never names the natural companions (calculate_plan_change to preview cost, change_plan to execute), leaving the agent to infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_plan_resourcesGet plan resourcesARead-onlyInspect
Get configurable resources for a specific plan Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Plan ID from get_plan_options | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond them by disclosing the required scope ('services:read') and noting it is keyed to API-key calls, which the annotations do not state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the purpose is front-loaded. It reads as a single run-on without punctuation between the two clauses, which slightly hurts parseability but wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only lookup with no output schema, the description covers what the tool returns conceptually plus the auth prerequisite. The main omission is how the result relates to sibling plan-resource tools, which is a minor gap given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: orderNo's format and constraints and plan's provenance ('Plan ID from get_plan_options') are fully documented in the schema. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get configurable resources for a specific plan'), so the agent knows the object of the call. It does not distinguish itself from near siblings like get_plan_options, get_order_plans or get_period_options, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus get_plan_options, calculate_plan_change or change_plan, which are the obvious alternatives in this plan/order cluster. The only conditional ('when called with an API key') is about auth mode, not selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricingGet pricingBRead-onlyInspect
Get public pricing for a service type
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Service type: vps, vds, ds, or firecracker |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds only that pricing is public and keyed by service type; it does not disclose rate limits, authentication needs, or response format beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It immediately states the action and resource, then qualifies the required input.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with 100% schema coverage and annotations, the description is minimally adequate. However, with no output schema, it still does not indicate the shape or scope of returned pricing data, and it omits sibling differentiation in a crowded pricing/quote namespace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single enum parameter is already documented with all allowed values. The description says 'for a service type' but adds no syntax, default, or meaning beyond what the schema already provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: get public pricing for a service type. It is more specific than a tautology, but it does not name or distinguish itself from any of the many sibling quote/estimate/order pricing tools, so the agent must infer when this public-pricing lookup applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus alternatives such as quote_network_product, estimate_network_load_balancer, or get_order_plans. The phrase 'public pricing' hints at a scope, but the description leaves the agent to infer when a public list price is appropriate rather than a quote.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_private_networkGet private networkARead-onlyIdempotentInspect
Read one owned network including DHCP reservations, DNS change progress, generation and project_id. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them by disclosing the required scopes (networking:read vs networking:manage), that default full/read grants do not cover networking, and that the backend enforces ownership, feature availability, and service 2FA locks. That is exactly the kind of auth and constraint context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the resource and scope front-loaded, followed by the authorization conditions. No filler, no restatement of the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the key returned fields, and it covers permissions and backend enforcement. For a single-parameter read tool with rich annotations, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single UUID parameter is fully documented in the schema (pattern, length, 'exact lowercase UUID returned by an owned networking resource'). The description adds no further detail about the identifier, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read one owned network') and enumerates what the response carries (DHCP reservations, DNS change progress, generation, project_id). The words 'one owned' distinguish it from the sibling list_private_networks without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: you read a single owned network, and it states the auth scopes needed plus the exclusion that 'full/read defaults do not grant networking'. It does not, however, name an alternative (e.g., list_private_networks for discovery) or say when not to call it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileGet profileBRead-onlyInspect
Get user profile details (name, address, company info)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds field-level content (name, address, company info), which is useful given no output schema, but says nothing about whose profile is returned, whether it is scoped to the authenticated caller, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource front-loaded and no wasted words. It is efficient, though the parenthetical could have been replaced by more decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param read tool with annotations covering safety, the description is minimally adequate. The key gap is disambiguation from 'get_account' and any indication of whose profile is fetched, which an agent operating across this large sibling set would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no schema semantics for the description to compensate for. Baseline 4 applies; the parenthetical field list is incidental rather than parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get user profile details') and enumerates the fields involved (name, address, company info), so the agent knows what it retrieves. However, it does nothing to distinguish itself from the sibling 'get_account', leaving ambiguity about which of the two returns the caller's profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, no prerequisites, and no exclusion of the closely related 'get_account' sibling. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rdnsGet rDNSARead-onlyInspect
Get effective PTR records for every assigned IPv4 and enabled IPv6 address. The response identifies the automatic default and whether each value is a customer override. Read-only API keys are accepted. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: read-only API keys are accepted and the call requires the services:read scope, which is exactly the auth detail an agent needs to invoke it successfully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the operation and scope, then the response shape, then the auth requirements. No filler and nothing that a reader would skim past or need to reread.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description compensates by describing what the response contains (default vs. customer override per address). Combined with the auth/scopes note and a fully documented single parameter, the picture is nearly complete; only record-count or pagination behavior is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter (orderNo) with 100% schema description coverage, including a format pattern and examples. The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies for a fully documented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Get effective PTR records') plus a precise scope ('every assigned IPv4 and enabled IPv6 address'), which distinguishes it from the mutation siblings change_rdns and clear_rdns. It stops short of naming those siblings explicitly, so the routing is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the read-side counterpart to change_rdns/clear_rdns because it retrieves records rather than modifying them. There is no explicit when-to-use statement, no exclusions, and no prerequisites tying it to a workflow step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_registrar_lockGet registrar lockARead-onlyInspect
Get the registrar transfer-lock status for an owned domain (locked / unlocked / unsupported). A locked domain cannot be transferred away until unlocked. Changing the lock is intentionally not available via API key (use the control panel). Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | Owned domain ID from list_domains |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond annotations: the three possible status values, the consequence of a locked domain, the domains:read permission requirement, and the fact that lock changes are intentionally unavailable via API key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences that front-load the core purpose before moving to semantics, limitations, and permissions. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one well-documented parameter and no output schema, the description supplies the status values, the meaning of the lock, and the authorization scope. Nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the only parameter (domain_id) is documented as an owned domain ID from list_domains. The description reinforces 'owned domain' but adds no syntax, format, or constraint information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the registrar transfer-lock status for an owned domain') and enumerates the possible results (locked / unlocked / unsupported). An agent can distinguish this from sibling domain tools like get_domain without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that this is the read path and explicitly rules out changing the lock via API, directing users to the control panel. However, it does not name a direct sibling alternative for checking lock status, leaving the when-to-use implied rather than fully mapped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_restore_file_browseGet backup file listingARead-onlyIdempotentInspect
Poll one queued backup file listing. Free and read-only. Keep polling while state is queued, running, or awaiting_reply; entries are present only when state is succeeded. A failed state carries an errorCode and no listing — report that rather than presenting an empty or partial directory as the real contents. Requires services:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| browse_id | Yes | Browse UUID returned by browse_restore_files |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnly/idempotent/non-destructive, the description adds substantial behavior beyond them: the state machine (queued, running, awaiting_reply, succeeded, failed), the fact that entries appear only on success, that failure carries an errorCode with no listing, and the required services:read scope. This is exactly the extra context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, and every sentence carries operational meaning (polling states, success/failure semantics, error handling). 'Free and read-only' mildly duplicates the readOnlyHint annotation, a minor redundancy in an otherwise tight description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return semantics — and it does, covering when entries are present, what a failed state returns, and how to report it. Nothing an agent needs to call and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both orderNo and browse_id are fully documented in the schema, including the pattern for orderNo and the origin of browse_id. The description adds no parameter-specific syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Poll one queued backup file listing.' This is clearly a status/result retrieval operation, distinct from the many list_* siblings. It stops short of naming the initiating sibling (browse_restore_files) in the description body, relying on the schema's browse_id text for that linkage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-continue/when-to-stop guidance: 'Keep polling while state is queued, running, or awaiting_reply; entries are present only when state is succeeded.' It also tells the agent how to handle the failed branch. It does not explicitly name the alternative tool that initiates the browse, but the polling workflow itself is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_restore_statusGet restore statusARead-onlyInspect
Get the unified restore state for a service: retention days, restore price, and any restore request in progress. Cloud VPS and Firecracker VPS have automatic daily off-node backups restored through this flow. Requires services:read plus the services:restore paid scope when called with an API key (the response includes account balance).
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable context beyond annotations by disclosing required scopes (services:read, services:restore) and noting that the response includes the account balance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no waste; the purpose is front-loaded and the supporting scope details follow. It could be slightly more structured but is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers purpose, applicable services, required scopes, and an unexpected response field. With no output schema, it still leaves the full response shape unstated, which is acceptable but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single parameter is fully documented in the schema. The description does not add any parameter syntax or format details beyond what the schema provides, which is the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('unified restore state for a service'), and enumerates the returned fields (retention days, restore price, in-progress request). This clearly differentiates it from snapshot tools and point-in-time restore tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by specifying that Cloud VPS and Firecracker VPS backups are restored through this flow, but it doesn't explicitly name alternatives or state when-not-to-use this tool versus, for example, get_backup_status or get_firecracker_backup_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_security_group_capabilitiesGet security group capabilitiesARead-onlyIdempotentInspect
Read security-group availability and whether the network default policy can be changed. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, and the description goes further by disclosing the exact permission model (networking:read vs networking:manage), that read/full defaults do not grant networking, and that the backend enforces ownership, feature availability and 2FA locks. That is substantive governance context beyond what structured fields provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core capability statement front-loaded, followed by the permission/authorization constraints. No filler, though the second sentence is dense with policy detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and rich annotations, the description covers the important behavior: what is read and the permission/enforcement context. It stops short of describing the shape of the returned capability data, but little more is required for a zero-arg read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline a 4 applies. The description adds no parameter guidance, but none is needed since the schema is empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('security-group availability'), plus the concrete capability queried ('whether the network default policy can be changed'). It does not differentiate itself from close siblings like get_networking_capabilities or get_network_appliance_capabilities, which use the same 'capabilities' framing, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an important precondition (requires explicit networking:read; defaults do not grant networking), which is real usage context. However, it never states when to pick this tool over the similarly named networking capability siblings, leaving the choice largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_serviceGet serviceARead-onlyInspect
Get detailed info and follow_up readiness guidance for the original service order. Payment, VM provisioning, guest-agent availability and application health are separate. Pending activation, finalizing or active stateProcess means keep polling this same order; about 10 seconds is an interval, not an ETA. Check at most 6 times before a progress update, then retain the order for the next check. stateProcess.waitingReason=public_ip_inventory resumes automatically; never reorder, pay again or manually restart. stateProcess.attention=true requires operator attention. The legacy stateProccess alias carries the same process data. Unknown guest-agent status alone does not prove the VM is down. Resource-usage rows with available=false contain compatibility placeholders, not measurements. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| follow_up | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare a safe read (readOnlyHint=true); the description adds substantial behavior beyond that: polling cadence and retry ceiling, interpretation of waitingReason and attention flags, the legacy stateProccess alias, the fact that unknown guest-agent status does not prove the VM is down, that available=false resource rows are placeholders, and the services:read auth requirement. These are exactly the traits annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded, but the body is a chain of comma-spliced run-ons that mix field-path notation (stateProcess.waitingReason) into prose, and 'stateProccess' is misspelled. Most sentences carry real information, yet the lack of paragraphing or bullets makes the operational rules harder to extract than they need to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still supplies the state-machine semantics, polling discipline, and auth requirement an agent needs to call and re-call it correctly. It is nearly complete; what is missing is any cue about how this differs from adjacent reads like get_service_graphs or get_service_history.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single orderNo parameter is fully specified there with pattern, length, and examples. The description refers to 'the original service order' and 'retain the order' but adds no new syntax, format, or constraint meaning beyond the schema. Baseline 3 applies when the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause gives a specific verb and resource: get detailed info plus follow-up readiness for the original service order. It implicitly separates this from get_service_graphs, get_service_history, and list_services by scoping to a single order's process state, though it never names a sibling explicitly. The purpose is clear but is partly buried under a dense run of operational caveats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to keep polling this same order, that ~10 seconds is an interval rather than an ETA, and to check at most 6 times before a progress update. It also gives explicit prohibitions: never reorder, pay again, or manually restart when waitingReason=public_ip_inventory, and that stateProcess.attention=true needs operator attention. That is when/how/when-not guidance, not inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_container_discoveryGet service container discoveryARead-onlyIdempotentInspect
Poll the exact persisted service container discovery returned by discover_service_containers when it remains pending. This GET does not create another discovery and never returns environment values or mounts. Keep the service and discovery UUID until succeeded, failed or expired. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| discovery_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, closed-world and non-destructive safety traits, so the description only needs to add value beyond that. It does: it discloses the required scope (applications:read) and a non-obvious data limitation (never returns environment values or mounts), which an agent cannot infer from the schema. It does not describe pagination or the response payload, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the action and immediately followed by the negative constraint against re-creating a discovery. The auth scope is a terse trailing clause; no wasted sentences, though the opening phrasing is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden, and it partially does so by naming the terminal states (succeeded/failed/expired) and stating what is never returned. It still does not say what the payload actually contains, a minor gap for a polling GET, but nothing prevents correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: orderNo is fully documented, discovery_id is only typed as uuid with no description. The description adds the notion that the discovery UUID must be retained across polls until a terminal state, which gives discovery_id lifecycle meaning, but it adds nothing about orderNo. Baseline 3 for partial coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (poll a persisted service container discovery) and distinguishes itself from the sibling discover_service_containers by explicitly saying it does not create another discovery. An agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly frames the invocation context: poll the discovery previously returned by discover_service_containers while it remains pending, and keep the UUID until a terminal state. It does not explicitly spell out what to do instead once the discovery reaches succeeded/failed/expired, but the routing condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_graphsGet service graphsARead-onlyInspect
Get one performance graph series for a service: pick a metric and a period. fc_block, fc_net_native and fc_pressure exist only for Firecracker VPS. fields narrows io/net/fc_* metrics to some series. A wrong metric, period or field answers 422 with invalidParameter and allowedValues. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Only these series. io: ior, iow, iops. net: rx, tx, rxp, txp. fc_block: read_bytes, write_bytes, read_ops, write_ops, queue_events, throttle_events. fc_net_native: rx_bytes, tx_bytes, rx_packets, tx_packets, queue_events. fc_pressure: major_faults, minor_faults, swap_in, swap_out, oom_kills, alloc_stalls, async_scan, direct_scan, async_reclaim, direct_reclaim. | |
| metric | Yes | Metric: cpu, ram, ssd (disk use; storage is the same), swap, lavg (load average), io, inode, net, proc, or a Firecracker-only fc_* metric | |
| period | Yes | Time window ending now | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint/openWorldHint=false, the description discloses genuinely new behavioral facts: invalid metric/period/field produces a 422 with invalidParameter and allowedValues, fc_* metrics are Firecracker-only, and services:read is required with an API key. It stops short of describing the shape or volume of the returned series.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with the purpose front-loaded and no filler. 'pick a metric and a period' mildly restates the three required parameters, which is the only redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing returns and only says 'one performance graph series' — the agent learns nothing about timestamps, point counts, or units. Authorization, error semantics, and metric availability are well covered, but the return contract is a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself enumerates every allowed value, so the baseline is 3. The description still contributes one cross-parameter constraint not in the schema: fields only narrows the io/net/fc_* metric families, and it flags that invalid values are echoed back via allowedValues.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a precise verb+resource+scope: 'Get one performance graph series for a service'. The singular 'one ... series' plus 'pick a metric and a period' tells the agent exactly what unit of data comes back, which no sibling (get_service, get_service_history) offers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: metric/period selection and the note that fc_block, fc_net_native and fc_pressure exist only for Firecracker VPS are constraints, not when-to-use guidance. The permission prerequisite (services:read with an API key) is a useful gate, but there is no mention of alternatives or when NOT to call this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_historyGet service historyBRead-onlyInspect
Get action history for a service Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number; follow response pagination for older records. | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral detail beyond annotations: the required 'services:read' scope when called with an API key, implying session-auth otherwise. It does not mention pagination depth or result size, so it is good but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with purpose, with no filler. It loses a point only because the missing sentence break between the purpose and the permission clause makes it read as a run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool the safety story is covered by annotations and the two params are fully documented in the schema. However, with no output schema, the description should say something about what the action history entries contain or how far back they go; that burden is left entirely unmet.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: orderNo format and the page/pagination semantics are fully documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (action history for a service), so the agent knows it retrieves historical actions rather than current state. It does not distinguish itself from near-siblings like get_management_history or list_service_operations, so it falls short of the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is an auth requirement ('services:read when called with an API key'), which is a permission constraint rather than usage guidance. There is no statement of when to call this versus the many other history/operation-listing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_rescueGet service rescue statusARead-onlyIdempotentInspect
Get operator rescue capability and the current durable rescue session for one owned Firecracker VPS or Cloud VPS. Requires services:read. Provider identifiers, ISO paths, nonces, and rollback state are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds real context beyond that: the required permission scope ('services:read') and an explicit disclosure of what is never returned (provider identifiers, ISO paths, nonces, rollback state), which meaningfully sets expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and scope, followed by the permission requirement and the negative-return caveat. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by naming the data categories that are deliberately withheld, and annotations cover the read-only/idempotent profile. It is nearly complete, though it does not characterize the shape of the returned rescue-session data an agent should expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single orderNo parameter is fully documented with pattern, length, and an example, so the schema carries the weight. The description only reinforces that the identifier must be an owned service ('one owned ... VPS'), adding no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: reading 'operator rescue capability and the current durable rescue session' for one owned Firecracker/Cloud VPS. It clearly distinguishes a read of rescue state from the mutating siblings enter_service_rescue/exit_service_rescue by semantics, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the prerequisite 'Requires services:read' and scopes the target ('one owned Firecracker VPS or Cloud VPS'), which implies it is the check-before-mutate call. However, it never explicitly says when to use this versus enter_service_rescue/exit_service_rescue or other get_service* siblings, leaving the routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ssh_keyGet SSH keyBRead-onlyInspect
Get a specific SSH key by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | SSH key ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context beyond that, such as error behavior or authentication needs, making it redundant with the title.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero waste. It is appropriately sized for a simple read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with full schema coverage and safety annotations, the description is sufficient to select and invoke the tool. It does not need to explain return values given the lack of an output schema, though it could optionally note them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the single id parameter documented as 'SSH key ID'. The description's 'by ID' adds no meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('SSH key by ID'), which implicitly distinguishes it from list_ssh_keys and create/delete siblings. However, it does not explicitly differentiate or name alternatives, so it meets the bar for clear but not explicitly sibling-aware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance. It does not mention alternatives (e.g., list_ssh_keys for listing all keys) or any conditions or prerequisites for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_statusGet system statusCRead-onlyInspect
Get VPSnet.com system status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond the title: it does not say what 'status' encompasses, how fresh it is, or whether it is scoped to the host or the account.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, so it is not bloated. But its brevity comes from under-specification rather than economy — for a status tool with no output schema, one sentence is not enough to be useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description is the only place to explain what the status payload contains or what the agent should expect back, and it does not. For a diagnostic tool whose entire value is the returned state, this leaves a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter meaning to convey. Per the rubric, a 0-parameter tool gets a baseline of 4; the description neither helps nor harms here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Get') and a resource ('system status'), but 'system' is vague — it could mean the VPS host, the DNS service, the account, or the API platform. With siblings like get_profile, get_networking_overview, and get_dns_service_status in the catalog, the agent cannot tell what kind of status this returns or how it differs from those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus alternatives such as get_networking_overview or get_guest_agent_status. The only context is the parenthetical 'VPSnet.com', which identifies the product but not the use case or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_temp_vmGet on-demand server sessionARead-onlyIdempotentInspect
Get one tenant-owned on-demand server session. Credentials and internal host placement are never returned. Requires services:read.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | on-demand server session ID returned by list_temp_vms |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description still adds real context: credentials and internal host placement are never returned, and the call requires the services:read scope. It does not describe error behavior for a nonexistent/inaccessible ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste: the action, the redaction guarantee, and the auth requirement are each front-loaded and independently useful. Nothing is padded or restated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-param read with no output schema and rich annotations, the description covers the essentials: scope of retrieval, sensitive-data redaction, and required permission. Only the shape of a successful/error response is unstated, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema even states where the ID comes from (list_temp_vms), so the schema carries the parameter burden. The description adds no extra meaning about the id beyond what the schema provides, making baseline 3 correct for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one tenant-owned on-demand server session') and the singular 'one' implicitly contrasts with the list_temp_vms sibling. It stops short of naming that sibling explicitly the way a 5-level definition would.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: retrieve a single session by ID, presumably the one returned by list_temp_vms. There is no explicit when-to-use, when-not-to-use, or named alternative, which is the minimum viable level for a lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_temp_vm_optionsGet on-demand server optionsARead-onlyIdempotentInspect
Get the coming-soon on-demand server preview options and authoritative orderable/availability launch state. Host placement is never returned. Requires services:read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds two things beyond that: an output exclusion ('Host placement is never returned') and an auth requirement ('Requires services:read'), both genuinely useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the resource described first and the constraint/permission facts following. No filler or redundant restatement, though the 'coming-soon' phrasing is slightly loose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool with no output schema, the description does state the auth scope and one output exclusion, but it does not clarify what the returned 'options' or 'launch state' actually contain, leaving the payload shape ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There are no arguments whose semantics would need explaining in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (Get) and resource (on-demand server preview options / orderable-availability launch state). It is distinguishable from siblings like get_temp_vm and list_temp_vms, though the 'coming-soon preview' framing is slightly fuzzy and it never explicitly ties itself to the temp-VM family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus the surrounding temp-VM siblings (quote_temp_vm, get_temp_vm, create_temp_vm). The only conditional information is an auth prerequisite, not an alternative-routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_titleGet titleBRead-onlyInspect
Get the current customer-visible service display title Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description earns credit by adding the required scope ('Requires services:read when called with an API key') and the 'customer-visible' visibility nuance, both of which are absent from the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The missing punctuation between 'title' and 'Requires' makes it read as a slight run-on but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should hint at the return value; it only implies a title string via 'display title' without stating the return format or whether it can be empty. For a trivial single-param getter with annotations and full schema coverage this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and orderNo is documented thoroughly (pattern, length, examples), so the schema does the heavy lifting. The description adds no further meaning about the parameter, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reading the current customer-visible service display title. The 'get' vs 'change_title' sibling contrast is inferable from the verb, though the description never names the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this tool versus alternatives such as change_title, nor any prerequisites beyond the auth note. Usage is only implied by the word 'Get'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usage_statementsGet usage statementsARead-onlyInspect
Get itemized usage-billing statements for the account (per-period totals by family, e.g. Firecracker Functions usage, VDS snapshots, AI premium). This is where metered/usage-based charges show up, separate from invoices. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (default 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context — per-period family grouping and pagination — but does not describe auth requirements, rate limits, or return shape beyond the grouping hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the parenthetical examples and the invoice distinction, ending with pagination. Every sentence earns its place; only the trailing 'Paginated.' is slightly clipped but still informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-parameter listing tool with no output schema, the description gives enough: what it returns (itemized statements grouped by family per period), how it differs from invoices, and pagination. Missing only minor details like sort order or default page behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (page) with 100% schema coverage, so the schema already documents it. The description's 'Paginated' note signals the pagination model but adds no detail beyond what the schema's page description provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (itemized usage-billing statements for the account), and clarifies the granularity (per-period totals by family) with concrete examples like Firecracker Functions usage and VDS snapshots. It also explicitly separates itself from the invoice siblings by noting these are metered/usage-based charges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description routes the agent well: 'This is where metered/usage-based charges show up, separate from invoices' tells the caller when to pick this over list_invoices/get_invoice. It doesn't cover exclusions or failure/auth conditions, but the primary alternative is named implicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_dns_zoneImport DNS zoneADestructiveInspect
Import BIND-style forward DNS records into a native zone. These records can change public DNS answers after publication. Set replace=true to replace non-system desired-state records; false upserts imported records. PTR/reverse DNS, SOA, DNSSEC wire records, apex NS, and LUA are skipped or rejected by the API. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| replace | No | If true, delete existing non-system desired-state records before importing. Defaults to false. | |
| zone_id | Yes | DNS zone ID | |
| zonefile | Yes | BIND-style zone file contents to import |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true) by disclosing impact ('can change public DNS answers after publication'), the exact record types skipped or rejected (PTR/reverse, SOA, DNSSEC wire records, apex NS, LUA), and the required scope. This is exactly the extra context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then semantics, then exclusions, then auth. Information-dense with minimal waste, though it is a fairly dense multi-clause block rather than truly compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation tool, it covers impact, parameter semantics, unsupported inputs, and permissions — everything an agent needs to call it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: replace=true replaces non-system desired-state records while false upserts them — the 'upserts' behavior is not in the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Import) plus resource (BIND-style forward DNS records into a native zone), and it explicitly bounds scope to forward records rather than reverse. An agent can distinguish this from upsert_dns_record/update_dns_record at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the replace=true vs false behavior and the auth requirement (dns:write), and enumerates what is skipped/rejected by the API. It does not explicitly route to sibling tools (e.g. upsert_dns_record for single records), so it stops short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_applicationInstall managed applicationAIdempotentInspect
Queue installation of a catalog application using its version-pinned container blueprint. Call list_application_catalog first: target.install_requirements.runtime_restart_consent.required tells you whether this server still needs restart consent, and the entry's secret_delivery.one_time_secrets tells you whether the install generates a password shown only once. Confirm the service, application, release channel, access choice, and configuration variable NAMES with the user first; never repeat variable values in confirmation text. For the first managed application on an existing server, acknowledge_runtime_restart may be true only after explicit consent to a possible one-time server restart. This tool always requests portal secret delivery: a generated password is revealed once, to the user, in the VPSnet panel. It is never returned here, and this tool must never claim on the user's behalf to have received and stored it. When the result reports secret_delivery.pending_reveal or a portal handoff, tell the user a password is waiting and send them to the panel. An install left on private access is reachable only from inside the server, not from a browser: when the user wants to open a web-UI application, request an advertised public mode (usually platform_https) in this call, and after the installation reports healthy, read the resulting public endpoint URL from get_application_installation and relay it to the user together with the panel handoff. This is asynchronous and not a paid API-key operation. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| access | No | Exact access request using a mode and fields advertised by the selected catalog entry. Omitting it accepts the platform default: public platform_https when VPSnet platform hostnames are available, otherwise private. private keeps the application reachable only from inside the server, so for an application the user will open in a browser prefer an advertised public mode such as platform_https. | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirmed this installation | |
| variables | No | Configuration values keyed by the public variable names in the catalog. Values are submitted to VPSnet but never returned by this tool. | |
| application | Yes | Published application slug from list_application_catalog | |
| idempotencyKey | Yes | Client-global unique key. Reuse it only to replay this exact installation request; never reuse it for another service or request. | |
| release_channel | No | Published release channel. Omit it to install the application's own published channel; most catalog applications are not published on a channel named 'stable', so never guess one. | |
| acknowledge_runtime_restart | No | Explicit consent for a possible one-time server restart while the managed runtime is prepared |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotentHint, destructiveHint=false, openWorldHint), it discloses the asynchronous nature, the auth scope requirement, the one-time password delivery path, the rule that the secret is never returned here, and consent conditions for a runtime restart – rich behavioral context that annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the critical list_application_catalog prerequisite are front-loaded, and most sentences carry actionable instructions. It is long and the secret-delivery rule is restated a few times across sentences, costing some tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, async, 8-parameter tool with nested objects and no output schema, the description covers the full workflow: prerequisites, consent gating, secret handoff semantics, post-install endpoint retrieval, and success/failure signals like secret_delivery.pending_reveal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real value: it warns never to guess a release_channel name, explains that omitted access defaults to platform_https-or-private, and clarifies that variable NAMES (not values) are confirmed with the user.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource – 'Queue installation of a catalog application using its version-pinned container blueprint' – and the async framing plus the applications:manage requirement clearly distinguish it from siblings like install_application_recipe, reconcile_application, or update_application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit prerequisites (call list_application_catalog first, confirm details with the user), conditional guidance (acknowledge_runtime_restart only after explicit consent), and alternatives (request a public mode when the user wants a browser UI, then read the endpoint via get_application_installation). When-to-use is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_application_recipeInstall customer application recipeAIdempotentInspect
Queue installation of one exact validated customer-owned recipe revision. Confirm the service, project, revision, secret NAMES, and possible first-runtime restart first; never repeat secret values in confirmation text. The result omits secret values and hands status/reveal work to the VPSnet portal. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| secrets | No | Install-time secret values keyed by the exact declared names. Values are encrypted by VPSnet and omitted from tool results. | |
| revision | Yes | Exact immutable customer recipe revision | |
| confirmed | Yes | True only after the user confirmed this exact installation | |
| project_id | Yes | Customer-owned recipe project UUID returned by list_application_recipes | |
| idempotencyKey | Yes | Client-global unique key. Reuse it only to replay this exact recipe installation. | |
| acknowledge_recipe_risks | Yes | Explicit acknowledgement that this is a customer-owned recipe | |
| acknowledge_runtime_restart | No | Explicit consent for a possible one-time service restart while the application runtime is prepared |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety/idempotency hints; the description adds genuinely new behavior: the operation is queued asynchronously, results deliberately omit secret values, follow-up status work belongs to the portal, and a first-runtime restart is possible. It also states a required scope and a secret-handling rule, none of which the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each load-bearing: action, pre-call confirmation/secret rule, then result/ownership and permission. The verb is front-loaded and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains the return behavior (secrets omitted, portal handles status/reveal). Combined with the async/queue disclosure, permission requirement, and restart consent, an agent has everything needed to call this safely for an 8-parameter destructive-adjacent install.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema cannot: secrets are supplied by NAME at install time and their values must never be echoed back in confirmation text. That clarifies the practical semantics of the secrets object and the confirmation flags.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Queue installation'), an exact resource ('one exact validated customer-owned recipe revision'), and scope limits ('one exact', 'validated'). An agent can distinguish this from install_application (catalog apps), create_application_recipe_revision, and validate_application_recipe without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit pre-call confirmation checklist (service, project, revision, secret names, restart) and a hard prerequisite ('Requires applications:manage'), plus routing guidance that status/reveal belongs to the VPSnet portal. It does not name the sibling tools it complements (validate_application_recipe, install_application), so no explicit alternatives/exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoke_functionInvoke Firecracker FunctionADestructiveIdempotentInspect
Invoke a Firecracker Function. PAID per invocation (CPU/memory usage billed from account). Use wait=true when output/logs are needed; asynchronous invocations do not retain output. Poll get_function_invocation using the returned invocation_uuid for status and usage. One Idempotency-Key is generated per tool call unless idempotency_key is supplied; reuse an explicit key only for an exact retry so the same logical step is not double-run or double-billed (response may include replayed=true).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Wait synchronously for the result | |
| input | No | Input payload passed to the function (string; JSON text is fine) | |
| function_id | Yes | Function ID from list_functions | |
| idempotency_key | No | Optional stable key for this exact logical invoke (e.g. agent step id). Exact retries with the same key return the original invocation; changed input or wait semantics are refused. | |
| acknowledge_usage_billing | No | Confirm the customer requested this execution and understands that it uses their VPSnet balance. Required for OAuth connections. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/openWorld/idempotent, but the description adds context they cannot: per-invocation billing charged to the account, that async invocations do not retain output, that a key is auto-generated per call, and that replays may surface a replayed=true marker. These are operationally critical traits beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then cost, then execution mode, then idempotency. Four dense sentences with no filler; each one carries a distinct, decision-relevant fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A paid, asynchronous-by-default, idempotent invocation tool with no output schema needs exactly this: cost disclosure, sync/async tradeoff, polling path, and retry semantics. Nothing required to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds the rationale behind wait ('when output/logs are needed') and the auto-generation/reuse lifecycle of idempotency_key, which the schema only partially captures. acknowledge_usage_billing is left to the schema, so it is not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Invoke a Firecracker Function') and immediately differentiates itself from the sibling get_function_invocation by assigning that tool the polling role. An agent can tell what this does and how it relates to list_functions/get_function without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions: use wait=true when output/logs are needed, otherwise poll get_function_invocation with the returned invocation_uuid, and reuse an explicit idempotency_key only for an exact retry. This is the when/when-not/alternative pattern done well.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_api_keysList API keysARead-onlyInspect
Show the API key this request authenticated with: scope (read/full/ai), granular scopes, paid_scopes, paid_operations_enabled, daily_spend_limit_eur, monthly_spend_limit_eur, allowed IPs, expiry and rate_limit (requests per minute), plus permission_options listing every scope the panel can grant. The backend scopes this endpoint to the calling key itself (apiKeyScopedToSelf), so other keys on the account are never listed here. By design an API key can never create, change or revoke API keys (403 apiKeyForbidden, reason api_keys_cannot_manage_api_keys): that is done in the VPSnet panel while signed in. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds real value beyond them: self-scoping of results, the exact fields returned, and the 403 apiKeyForbidden/api_keys_cannot_manage_api_keys behavior that forecloses write attempts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the essential fact (returns only the calling key) before the field enumeration. The long comma-separated field list is dense but each entry carries information; the trailing read-only note is mildly redundant with the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned fields (scope, granular scopes, spend limits, IPs, expiry, rate_limit, permission_options) and the self-scoping constraint. Complete enough for an agent to call and interpret it without gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description doesn't need to explain inputs and correctly focuses on output contents instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and immediately corrects the misleading name: it returns only the key this request authenticated with, not all account keys. This distinguishes it clearly from the sibling get_api_key and from any expectation of an account-wide key listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the backend scoping rule (apiKeyScopedToSelf, other keys never listed) and that key management must be done in the VPSnet panel instead. It doesn't name a sibling alternative explicitly, but the scope constraint effectively tells the agent when this tool is and isn't the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_catalogList compatible managed applicationsARead-onlyIdempotentInspect
List catalog applications compatible with one owned VPSnet service. Use this before a generic SSH installation and before install_application. The response includes application details, container runtime, configuration fields, hard product/OS/architecture/runtime compatibility, and advisory CPU/RAM/disk sizing warnings. Resource guidance alone must not block installation. Two blocks state what an install needs before you attempt it: target.install_requirements.runtime_restart_consent says whether this server still needs explicit restart consent, and each entry's secret_delivery says whether that release generates a password revealed only once and lists those credential NAMES. Those credentials often do not appear in configuration, which lists only customer-editable fields. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: the response payload contents, that resource sizing guidance is advisory and 'must not block installation', that target.install_requirements.runtime_restart_consent signals pending restart consent, that secret_delivery marks one-time-revealed credentials whose NAMES do not appear in configuration, and the required applications:read scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the when-to-use routing, followed by response detail. It is dense and somewhat long with multiple clauses about secret_delivery, but each sentence conveys operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a read-only catalog tool: purpose, workflow placement, response contents, compatibility/preflight semantics, credential caveats, and auth scope are all covered despite no output schema. An agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single orderNo parameter is fully documented in the schema, so the description carries little additional parameter burden. It only implies the service-scoping via 'one owned VPSnet service'; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List catalog applications compatible with one owned VPSnet service'), scoping to a single service and clarifying it is a compatibility catalog rather than a listing of installed apps. This distinguishes it from siblings like list_service_applications, list_application_recipes, and install_application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes placement in the workflow: 'Use this before a generic SSH installation and before install_application.' It names the alternative actions it should precede, so the agent knows exactly when to select it over those siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_recipe_revisionsList customer recipe revisionsARead-onlyIdempotentInspect
List immutable revision metadata for one customer-owned application recipe. No Compose content or secret values are returned. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| project_id | Yes | Customer-owned recipe project UUID returned by list_application_recipes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value beyond them: revisions are immutable, no Compose content or secret values are returned, and applications:read is required. Lacks detail on pagination, ordering, or result size, which would matter for a list endpoint without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core action and scope front-loaded, then the return-content caveats, then the permission requirement. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description tells the agent what comes back (revision metadata) and what does not (Compose content, secrets) plus the auth scope. Not mentioning pagination or ordering is the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (orderNo pattern/example, project_id UUID provenance) are fully documented in the schema. The description only references 'one customer-owned application recipe' and adds no format or constraint detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) plus resource (immutable revision metadata) scoped to one customer-owned application recipe, which cleanly separates it from list_application_recipes (the parent recipes) and create_application_recipe_revision (mutation). An agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope (revisions of ONE recipe, requiring orderNo + project_id) makes the invocation context clear, and the 'Requires applications:read' note gives a permission precondition. It stops short of explicitly naming alternatives such as list_application_recipes or when-not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_recipesList customer application recipesARead-onlyIdempotentInspect
List immutable customer-owned application recipe projects for one supported service. These are separate from VPSnet catalog blueprints. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds two things annotations cannot: the immutability of the listed resources and the required applications:read scope. That auth context is genuinely useful for planning a call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, zero filler, with the core scope ('for one supported service') and the differentiating exclusion (catalog blueprints) front-loaded before the permission note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with rich annotations, the description covers purpose, scope, exclusion, and auth. Since there is no output schema, it could say slightly more about what a returned recipe project contains or whether results are paginated, but the gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already fully documents orderNo's format and constraints, so the baseline is 3. The phrase 'for one supported service' loosely confirms that orderNo identifies the service order, but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource (list application recipe projects), scopes it to one supported service, and explicitly contrasts it with the VPSnet catalog blueprints, which routes the agent away from list_application_catalog. The 'immutable customer-owned' qualifier further separates it from revision-oriented siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the selection condition ('for one supported service') and edges out the closest alternative (catalog blueprints), plus a permission prerequisite (applications:read). It stops short of naming sibling tools such as list_application_recipe_revisions or list_application_catalog outright, so the routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_registry_credentialsList application registry credentialsARead-onlyIdempotentInspect
List non-secret private registry credential metadata for one owned service, including Docker Hub, GHCR, and exact custom HTTPS registry hostnames. Token values, encrypted envelopes, fingerprints, and key versions are never returned. Registry token creation and rotation are intentionally unavailable through MCP; use the VPSnet panel or direct REST API so the token does not enter model context. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial context beyond them: what is never returned (token values, encrypted envelopes, fingerprints, key versions), the required permission (applications:read), and the deliberate unavailability of write operations so secrets don't enter model context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tightly packed sentences, all front-loaded and informative, with no filler. Slightly dense but every sentence contributes a distinct fact, so it is efficient rather than bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating exactly what fields are and are not returned, the required scope and permission, and where to go for the excluded write operations. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents orderNo in detail, including pattern and examples. The description only adds that it must be one 'owned' service, so the baseline of 3 applies when the schema carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List non-secret private registry credential metadata') plus scope ('for one owned service') and concrete examples (Docker Hub, GHCR, exact custom HTTPS hostnames). An agent can immediately tell this apart from the many other list_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use (one owned service) and explicitly routes the related-but-unavailable operations (creation/rotation) to the VPSnet panel or REST API, with a reason. However, it doesn't state when NOT to call this listing tool itself, so it falls just short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_restore_pointsList application restore pointsARead-onlyIdempotentInspect
Freely list opaque, unexpired nightly whole-VM backup points eligible to restore the exact current revision of one managed application, plus the current non-binding price and account-balance estimate. This does not create a backup, reserve funds, charge the account, or return PBS repository, archive, key, device, or filesystem-path details. It also returns the active restore after a client reload. Initially supported only on Firecracker services. API keys require applications:manage, paid operations enabled, applications:restore paid scope, and full access because account balance is included.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the provided read-only annotations by disclosing that the operation is free, returns a non-binding price and account-balance estimate, omits sensitive repository/archive/key/device/path details, returns the active restore after a client reload, and is initially Firecracker-only. It also details required auth scopes and emphasizes no funds are reserved or charged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and remains information-dense, but the long compound sentences and jargon like 'opaque' reduce readability slightly. Every sentence still carries useful information, so it earns better than average.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately explains what is returned (restore points, price estimate, active restore) and covers behavioral and auth constraints. It provides everything an agent needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds the scope ('one managed application') but no additional field-level meaning, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and a highly scoped resource ('opaque, unexpired nightly whole-VM backup points eligible to restore the exact current revision of one managed application'). This clearly distinguishes it from generic restore-point or snapshot siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context and exclusions: it is for listing eligible application restore points, not for creating backups or charging accounts. It also notes platform constraints and required API key scopes, though it never names a sibling alternative for when this tool is not the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_automatic_ssl_actionsList Automatic SSL actionsARead-onlyIdempotentInspect
List the latest customer-visible cancellation, domain addition, removal, and replacement actions for one owned Automatic SSL subscription. Certificate-authority payloads, credentials, commercial internals, and internal errors are omitted. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds genuinely new behavior: the response is redacted (CA payloads, credentials, commercial internals, internal errors omitted) and bounded to the 'latest' actions rather than full history. It also states an auth prerequisite (certificates:read) that no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences plus a short permission clause; the scope statement is front-loaded. The redaction list is slightly enumerative but each item carries information about what will be missing from results.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of telling the agent what is returned, and it does so by enumerating the action categories and the 'latest' window. Pagination, ordering, and result volume for this log-style list are not addressed, which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already explains that certificate_subscription_id is the UUID returned by list_automatic_ssl_subscriptions. The description only reinforces the 'one owned subscription' scoping, adding no new syntax, format, or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (List) and a precisely scoped resource (customer-visible cancellation/domain addition/removal/replacement actions for one owned Automatic SSL subscription), so the agent knows exactly what comes back. It does not explicitly name or contrast with near-neighbours such as list_automatic_ssl_subscriptions or list_certificate_actions, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: you must already hold a subscription UUID and the certificates:read permission. There is no statement of when to pick this over list_automatic_ssl_subscriptions or list_certificate_actions, and no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_automatic_ssl_subscriptionsList Automatic SSL subscriptionsARead-onlyIdempotentInspect
List customer-owned Automatic SSL subscriptions, subscribed DNS names, paid term, final EUR amount, public state, and whether portal-only setup credentials are ready. This never returns the private ACME server URL, account ID, EAB KID, or EAB HMAC key. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds real value beyond them: the required scope 'certificates:read' and an explicit negative disclosure that sensitive values (ACME server URL, account ID, EAB KID, EAB HMAC key) are never returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and returned fields, then the security exclusion and auth requirement. The dense field enumeration is informative rather than filler, though the sentence listing returned fields is long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description must carry the return-value burden, and it does list the returned fields plus the auth scope and sensitive-field exclusions. It stops short of mentioning ordering or result-size behavior, a minor gap for a zero-argument list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The description does not need to explain any parameter syntax and correctly focuses on scope and output instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (customer-owned Automatic SSL subscriptions) and enumerates exactly which fields are returned. An agent can distinguish it from the singular sibling get_automatic_ssl_subscription without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'customer-owned' scoping and field list imply a bulk-enumeration use case, and the conventional list-vs-get split with get_automatic_ssl_subscription is inferable. However, no sibling is named and there is no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_certificate_actionsList certificate actionsARead-onlyIdempotentInspect
List durable customer-visible management actions for one paid certificate. Raw certificate-authority responses, request bodies, internal errors, provider IDs, and credentials are never returned. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior, so the bar is lower. The description still adds genuinely non-obvious behavior: which fields are redacted (raw certificate-authority responses, request bodies, internal errors, provider IDs, credentials) and the read-permission requirement, both of which affect how an agent interprets the results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core scope front-loaded, followed by the redaction contract and the permission requirement. No filler and nothing that restates the name or annotations verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries return-value burden; it characterizes the returned records ('durable customer-visible management actions') and what will not appear, which is the most important caveat. It stops short of describing record fields, ordering, or pagination, but is otherwise adequate for a single-parameter read tool with rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage, baseline is 3. The description adds a meaningful qualifier by saying the certificate must be a 'paid' one, which distinguishes this parameter's domain from the free-certificate family present in the sibling list, going slightly beyond the schema's generic UUID wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List durable ... management actions for one paid certificate'), which tells the agent exactly what is enumerated. It is distinguishable from siblings such as get_certificate or download_certificate by the focus on the action/history log, but it never names or contrasts those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description scopes usage ('for one paid certificate') and states a required permission ('Requires certificates:read'), which is useful operational context. However, it gives no explicit when-to-use versus siblings like list_certificates or list_automatic_ssl_actions, and no exclusions, leaving the agent to infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_certificate_catalogList paid TLS certificate catalogARead-onlyIdempotentInspect
List published paid TLS certificate products and final customer offers in EUR. Products disclose validation level, public certificate-authority brand, supported names, SAN limits, management capabilities, term, and final retail prices. Only customer-visible catalog data is returned. Paid certificates are portable and are not limited to managed applications. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely useful context beyond that: the currency (EUR), the required 'certificates:read' scope, and the fact that only customer-visible catalog data is exposed. It stops short of describing pagination or result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, front-loaded with the core purpose, and no filler. The enumeration of disclosed fields is dense but justified given there is no output schema to carry that information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and rich read-only annotations, the description carries the necessary remaining load: it enumerates the returned fields (validation level, CA brand, SAN limits, term, retail prices), states the currency, and states the auth scope. An agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline for an empty input schema is 4. There is nothing for the description to clarify at the parameter level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (paid TLS certificate products and final customer offers in EUR). The 'paid' qualifier and the note that certificates are 'portable and not limited to managed applications' implicitly distinguish it from siblings like list_free_certificates and the automatic-SSL family, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is a browsing/catalog tool used before quoting or ordering, and clarifies that only customer-visible data is returned. However, it never states when to use this versus get_certificate_catalog_product for a single product or quote_certificate for pricing, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_certificatesList paid TLS certificatesARead-onlyIdempotentInspect
List customer-owned paid TLS certificate orders, final EUR amount, validation and issuance state, renewal dates, and whether the public certificate bundle is ready. attention_required is not success. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description earns credit for adding what they don't: an auth/scope requirement (certificates:read) and a genuine interpretation caveat ('attention_required is not success'). It still says nothing about pagination or result size, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, with no filler. The closing caveat 'attention_required is not success' is terse and slightly cryptic in isolation, but it is high-value and does not bloat the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the salient returned fields and by stating the required scope, which is sufficient for a zero-parameter read-only listing. The only real gap is pagination/result-size behavior, which is minor for this tool shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly introduces no parameter discussion, and the listed fields describe output rather than inputs, so there is nothing to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (List) plus a precisely scoped resource ('customer-owned paid TLS certificate orders'), which implicitly separates it from the sibling list_free_certificates and from the single-resource get_certificate. It also enumerates the returned fields (EUR amount, validation/issuance state, renewal dates, bundle readiness), so an agent knows exactly what this resource yields without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a prerequisite ('Requires certificates:read') but gives no when-to-use guidance and never routes the agent to alternatives such as get_certificate for a single cert or list_free_certificates for free ones. Usage is only implied by the verb 'List', which is the minimum viable level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ddns_tokensList DDNS tokensARead-onlyInspect
List DNS updater tokens for a DNS zone (DDNS A/AAAA and ACME DNS-01 TXT). Returned data never includes the full token value. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds valuable context beyond annotations: it discloses that returned data never includes the full token value (a security behavior) and that dns:read permission is required when using an API key (auth requirement). It does not describe pagination or output structure, but the additions are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each front-loaded with essential information: purpose, security/privacy note, and auth requirement. No filler or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one parameter, no output schema, and annotations already covering safety, the description is mostly complete. It covers purpose, privacy, and auth. It does not describe what fields are returned beyond the token omission, but given the simplicity and existing annotations, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter zone_id is fully documented in the schema. The description adds no additional parameter semantics, such as format or ID type. Baseline 3 is appropriate when the schema carries the full parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (List) and resource (DNS updater tokens for a DNS zone), and it clarifies the token types (DDNS A/AAAA and ACME DNS-01 TXT). This clearly distinguishes it from sibling write operations like create_ddns_token and revoke_ddns_token.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (to list tokens for a zone), but it does not explicitly state when to choose this tool over alternatives or mention any exclusions. No sibling tools are named as alternatives, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_templatesList DNS templatesARead-onlyInspect
List backend-defined DNS record templates for a native forward zone, such as web service, Google Workspace, Microsoft 365, mail security, Null MX and CAA lockdown. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the API-key permission requirement (dns:read) and that templates are backend-defined rather than user-authored.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and followed by a permission note; no filler. The template enumeration is slightly long but earns its place by helping an agent judge relevance. Structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only listing tool with annotations covering safety and no output schema, the description is nearly complete: it says what is listed, the qualifying zone type, and the auth requirement. Return format or pagination behavior is not addressed, but that gap is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single zone_id parameter, so the schema carries the parameter burden and the baseline is 3. The description's only added semantic is that the zone must be a 'native forward zone', which the schema does not convey, but nothing about syntax or constraints is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List backend-defined DNS record templates') and scopes it to 'a native forward zone', which distinguishes it from sibling tools like list_dns_zones, get_dns_zone, and apply_dns_template. The enumerated template families (web service, Google Workspace, M365, Null MX, CAA lockdown) further pin down what is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies applicability via 'for a native forward zone' and gives a prerequisite ('Requires dns:read when using an API key'), but never states when to choose this over the closely related apply_dns_template or how it relates to retrieving a zone's existing records. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_zonesList DNS zonesARead-onlyInspect
List forward DNS zones on the account. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number; follow the response pagination until all pages are read. | |
| snapshot | No | Reuse pagination.snapshot from page one; if membership changes, restart the list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds useful context beyond them: the required dns:read permission and that the listing is scoped to the account's forward zones rather than a single zone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose front-loaded and the permission caveat second. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a fully documented schema and clear annotations, the description covers purpose, scope, and the auth requirement; no output schema exists but return shape is a straightforward list. Only a note on pagination behavior (already in the schema) and an alternative-tool pointer are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both page and snapshot fully documented (including snapshot reuse and restart-on-membership-change semantics), so the schema does the heavy lifting. The description adds nothing about pagination parameters, matching the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List forward DNS zones') and narrows scope with 'forward' and 'on the account', which an agent can distinguish from get_dns_zone (single zone) and list_dns_templates (templates). It does not explicitly name a sibling or contrast itself, so it falls short of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb 'List', and the description adds a real prerequisite ('Requires dns:read when using an API key'), which helps an agent know the call may fail without that scope. There is no explicit when-to-use/when-not-to-use guidance or pointer to alternatives such as get_dns_zone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domain_contactsList domain contactsARead-onlyInspect
List all domain registrant/admin/tech/billing contacts owned by the account in one response. This endpoint has no pagination or snapshot parameters. Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely useful context beyond them: that there is no pagination or snapshot handling, and that domains:read is required with an API key. It does not describe return shape, but that is minor here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information (scope, pagination constraint, auth requirement), with the primary purpose front-loaded. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with annotations covering safety and no output schema, the description supplies what is needed: scope, the absence of pagination, and the auth scope. Slightly more on result shape or account scoping would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly signals there are no filtering/pagination inputs rather than leaving the agent to infer that from an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (domain contacts), and enumerates the contact types (registrant/admin/tech/billing) so the agent knows the scope of what comes back. It is clearly distinguishable from siblings like get_domain, list_domains, and create/update/delete_domain_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb 'list' and the account-level scope, but the description never says when to prefer this over alternatives such as get_domain or list_domains, nor does it name a sibling. No explicit when/when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domain_glue_recordsList domain glue recordsARead-onlyInspect
List same-domain nameserver IP records for an owned domain, e.g. ns1.example.com -> 203.0.113.10. Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | Owned domain ID from list_domains |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond annotations by disclosing the required authorization scope (domains:read with an API key) and clarifying the record shape returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the operation and followed by a clarifying example and the auth prerequisite. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema and a fully documented single parameter, the description covers purpose, scope, return shape example, and auth requirement. Only pagination or result-ordering behavior is unaddressed, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter (domain_id) is fully documented in the schema as an owned domain ID from list_domains. The description's phrase 'for an owned domain' restates this rather than adding new meaning, so the 3 baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (same-domain nameserver IP records / glue records) and disambiguates with a concrete example, 'ns1.example.com -> 203.0.113.10'. An agent can distinguish this from create_domain_glue_record / delete_domain_glue_record without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Scopes usage to 'an owned domain' and discloses the required scope ('domains:read when using an API key'), which is meaningful qualifying context. It does not, however, name alternatives or state when not to use it, so it falls short of explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domainsList domainsARead-onlyInspect
List domains owned by the account, including status, expiry, nameservers, DNS zone link, and renewal settings. Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number; follow the response pagination until all pages are read. | |
| snapshot | No | Reuse pagination.snapshot from page one; if membership changes, restart the list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context: the required API-key scope (domains:read), which an agent cannot derive from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the resource and scope, then the auth prerequisite. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by summarizing the returned fields, and pagination is handled in the schema. Auth scope is stated. A minor gap is that pagination behavior is not restated in prose, but the schema covers it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (page, snapshot) are documented in the schema itself, including pagination guidance. The description adds no parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List domains owned by the account') and enumerates the data returned (status, expiry, nameservers, DNS zone link, renewal settings). This clearly separates it by convention from get_domain and list_domain_tlds, though it does not explicitly name a sibling to contrast with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied by the verb 'List' and the permission note 'Requires domains:read when using an API key.' There is no explicit when-to-use, no exclusion, and no pointer to get_domain for single-domain retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domain_tldsList domain tldsARead-onlyInspect
List TLDs currently enabled for the VPSNet domain catalog. Requires domains:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new context: the scope is the enabled VPSNet catalog, and API-key calls require the domains:read scope. It does not mention pagination or result shape, but for a read-only catalog listing this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by the single prerequisite. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only listing tool with no output schema, the description covers scope and authorization adequately. It could be slightly more complete by indicating the general shape of the returned TLD list, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document; baseline 4 applies. Nothing in the description misrepresents the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (TLDs enabled in the VPSNet domain catalog), which is clearly distinct from sibling domain tools such as list_domains or check_domain_availability. It does not explicitly contrast itself with those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a prerequisite (domains:read when using an API key) but never states when to reach for this tool versus alternatives like list_domains or check_domain_availability. Usage is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firecracker_snapshotsList firecracker snapshotsARead-onlyInspect
List temporary snapshots for a Firecracker VPS service, including billing state (free window, then a per-GB keep rate) and expiry. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds beyond that: snapshots are temporary, they carry a billing state with a free window then a per-GB keep rate, they expire, and the call requires services:read with an API key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no waste; the purpose is front-loaded ahead of the billing and auth context. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully characterizes the returned content (billing state, expiry) and states the auth requirement. For a single-parameter read-only list against annotations that already carry the safety profile, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single orderNo parameter is fully documented in the schema (pattern, length, examples). The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List temporary snapshots for a Firecracker VPS service') and adds what is exposed (billing state, expiry). This distinguishes it from the generic 'list_snapshots' sibling by qualifier and content, though it never names that alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a read/list operation scoped to a Firecracker service order, and notes the auth scope needed. However, it gives no explicit when-to-use guidance versus list_snapshots or the create/rollback/delete_firecracker_snapshot siblings, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_free_certificatesList free TLS certificatesARead-onlyIdempotentInspect
List customer-owned no-cost public-certificate requests and their safe lifecycle state. These are separate from paid portable certificates, paid Automatic SSL subscriptions, and application Managed HTTPS. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional exact lifecycle-state filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, closed-world, and non-destructive, so the safety profile is covered. The description adds the access requirement ('Requires certificates:read'), which is not in the structured data and is genuinely useful for call planning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, front-loading the identification and scoping before the permission note. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter list tool with no output schema, the description conveys scope, exclusions, and the required permission. It could note pagination or return shape, but annotations and the enum schema carry most of the remaining load.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single enum parameter is fully documented in the schema. The description alludes to lifecycle state but adds no syntax or filter behavior beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List customer-owned no-cost public-certificate requests') and explicitly names the sibling categories it is not (paid portable certificates, Automatic SSL subscriptions, Managed HTTPS). An agent can distinguish it from list_certificates and list_automatic_ssl_subscriptions without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear negative discrimination tells the agent when NOT to use this tool by naming the adjacent certificate families. It stops short of explicitly routing to a specific alternative (e.g., use get_free_certificate for a single request), so it's strong but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_function_historyList function historyARead-onlyIdempotentInspect
Read paginated account-wide Firecracker Function invocation history. Filter by function, status or search and follow pagination.pages for older runs. Requires services:read for an API key; OAuth uses the Functions read permission.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number; default 1 | |
| limit | No | Page size; default 25 | |
| search | No | ||
| status | No | ||
| function_id | No | Optional Function ID from list_functions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, non-destructive), so the bar is lower; the description adds genuinely useful behavior the annotations don't carry: the exact auth requirements (services:read for API keys, Functions read permission for OAuth) and the pagination traversal rule. It omits return shape and rate limits, keeping it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences: scope and operation first, then filtering/pagination behavior, then the permission requirements. No filler, and every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly covers the operational essentials an agent needs — scope, filters, pagination, and auth. What's missing is how the returned history differs from list_function_invocations/get_function_invocation, which leaves a real routing ambiguity among close siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, with page/limit/function_id documented in the schema and search/status undocumented there. The description adds the filter vocabulary ('filter by function, status or search') but no syntax, format, or matching semantics beyond what the schema already provides, so it neither compensates for the gap nor detracts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read ... Firecracker Function invocation history') plus the account-wide scope, which is more than the name conveys. However, it does not differentiate itself from the near-identical sibling list_function_invocations, leaving the agent to guess which history/invocation listing to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives implied usage guidance through the filterable dimensions (function, status, search) and the instruction to follow pagination.pages for older runs, which tells the agent how to traverse results. It stops short of saying when to use this tool versus list_function_invocations or get_function_invocation, and gives no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_function_invocationsList function invocationsARead-onlyInspect
List the latest 50 invocations of a Firecracker Function with status, duration, and cost. Use list_function_history for older runs and pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| function_id | Yes | Function ID from list_functions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the safety profile is covered. The description adds genuinely new behavioral context: the result is capped at the latest 50 and returns status/duration/cost. It does not discuss pagination limits or rate limits, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the core scope ('latest 50 ... with status, duration, and cost') is front-loaded and the routing hint follows. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and clarifies the relationship to the history tool. It is nearly complete for a one-parameter read tool, though it could say more about whether the 50 cap is a hard limit or adjustable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single function_id parameter, which the schema already documents as coming from list_functions. The description adds no format, type, or sourcing detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('invocations of a Firecracker Function') and names the scope ('latest 50') and returned fields (status, duration, cost). It explicitly distinguishes itself from the sibling list_function_history, so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative tool (list_function_history) and the exact condition that selects it: 'older runs and pagination.' That is an explicit when-to-use-this-vs-alternative statement rather than an implied one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_functionsList functionsBInspect
List Firecracker Functions (serverless-style code execution in microVMs) with runtimes, webhook URLs, and usage. Usage-billed from the account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-destructive, closed-world behavior, so the safety profile is partly covered. The description adds real value by naming what is returned (runtimes, webhook URLs, usage) and the billing exposure of functions, but with no output schema it does not describe the shape of the result set, pagination, or why readOnlyHint is false for a listing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and resource, and the parenthetical definition of the resource is genuinely useful rather than padding. The second sentence is a terse fragment whose referent is slightly ambiguous (functions are billed, not the listing), which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return-value burden, and it only sketches three returned fields while leaving the rest of the function representation, ordering, and volume undisclosed. It is adequate to recognize the tool but not complete enough to predict the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters (empty object schema, 100% coverage), so there is nothing for the description to clarify and no parameter-level ambiguity. Baseline 4 applies for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (Firecracker Functions), and even explains what a Firecracker Function is (serverless-style code execution in microVMs) and what it returns (runtimes, webhook URLs, usage). It does not, however, differentiate itself from nearby siblings such as list_function_history or list_function_invocations, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: nothing says when to call this versus get_function, list_function_history, or list_function_invocations. The trailing note that functions are 'Usage-billed from the account' is billing context, not a usage rule, so the agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoicesList invoicesCRead-onlyInspect
List invoices with pagination
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that results are paginated, which is useful but thin; it says nothing about page size, total counts, ordering, or result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler or repetition. It is efficient, though its brevity reflects under-specification rather than disciplined trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage and safety annotations, this is minimally adequate. However, with no output schema, the description could reasonably tell the agent what a page of results contains or how pagination terminates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'page' parameter, so the schema already documents it. The word 'pagination' in the description merely echoes that parameter without adding format, default, or page-size semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb and resource ('List invoices'), which is more than a bare tautology, and adds a pagination trait. But it is essentially the tool title restated with no scope, filters, or differentiation from the sibling 'get_invoice' that retrieves a single invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this list tool versus 'get_invoice' or 'list_payments', and no mention of account scope or prerequisites. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_appliancesList network appliancesARead-onlyIdempotentInspect
Read owned load balancers and VPN gateways with one stream cursor. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations (readOnlyHint, idempotentHint, destructiveHint=false) by disclosing the required auth scopes, that default grants do not cover networking, and that the backend enforces ownership, feature availability and 2FA locks. The mention of 'networking:manage for changes' is slightly confusing on a read-only tool but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with what is read and the stream behavior, followed by permission constraints. Slightly compressed with semicolons but no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description covers the essential operational context an agent needs: what is returned (load balancers + VPN gateways), the streaming nature, and the auth requirements. An explicit pointer to the narrower list siblings would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is no per-parameter semantics to document; baseline 4 applies. The phrase 'one stream cursor' hints at a pagination/streaming model, though no cursor parameter is exposed in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('owned load balancers and VPN gateways'), which is more informative than the bare title. It implies aggregation of two appliance types into one stream, but does not explicitly distinguish itself from the sibling tools list_network_load_balancers and list_network_vpn_gateways.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides permission context (networking:read vs networking:manage) and notes that full/read defaults do not grant networking, which helps an agent decide whether it can call the tool. However, there is no explicit when-to-use/when-not guidance versus the per-type list siblings that cover the same resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_attachment_candidatesList network attachment candidatesARead-onlyIdempotentInspect
For a network with port_intent_ready=true, check each existing service's attachment eligibility and attachment_mode; service_id selects one owned service. Follow next_cursor using after while candidates_has_more is true. Use this per-service result and its reason_code for existing-VM attachment, not new-server order_availability. Do not attach a service the backend marks ineligible. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| service_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description adds substantial context: the port_intent_ready prerequisite, pagination mechanics (follow next_cursor via after while candidates_has_more), and backend-enforced ownership, feature availability and 2FA locks. The phrase 'networking:manage for changes' sits awkwardly against readOnlyHint=true, but it reads as permission boilerplate rather than a functional claim of mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense run-on paragraph packing prerequisites, pagination, routing, permissions and enforcement into stacked clauses. Nothing is clearly wasted, but the lack of front-loaded purpose and the packed structure make it harder to parse than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in to name return concepts (attachment_mode, reason_code, candidates_has_more, next_cursor) and explains prerequisites and enforcement. It never fully describes what a candidate record contains, so it is strong but not exhaustive for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (network_id alone), so the description must compensate, and it does: service_id 'selects one owned service' and after is tied to following next_cursor. This adds meaning for both undocumented parameters, though it omits format/syntax details the schema also lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific operation on a specific resource: checking each existing service's attachment eligibility and attachment_mode for a network where port_intent_ready=true. It is clear what the tool returns at a per-service level, though it opens with a precondition rather than a plain statement of purpose and provides no explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real routing guidance: use the per-service result and reason_code for existing-VM attachment, not new-server order_availability, and 'Do not attach a service the backend marks ineligible.' The scope condition (port_intent_ready=true) is stated. It stops short of naming a concrete alternative tool for the new-server case, keeping it below 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_networking_operationsList networking operationsARead-onlyIdempotentInspect
Read recent network operations and operations_has_more. This endpoint has no pagination parameter. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing the exact auth scopes required ('networking:read' vs 'networking:manage'), that full/read defaults do NOT grant networking, the absence of pagination, and that the backend enforces ownership, feature availability and 2FA locks. This is rich, actionable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the core read action front-loaded, followed by the auth/environment constraints. Dense but every clause (no pagination, scope requirements) carries real weight; only the semicolon-chained auth sentence is a touch heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, no-output-schema listing tool, the description covers the key unknowns: auth scope requirements, lack of pagination, the has_more signal, and backend enforcement. It lacks any hint of what an 'operation' record contains, but annotations and low complexity keep that a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to document; the baseline for a no-param tool is 4. The mention of operations_has_more refers to the response, not an input, so it neither helps nor hurts parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Read recent network operations') and even names the response field operations_has_more. It does not explicitly differentiate from the sibling get_networking_operation (singular), but the list scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage as a recent-operations listing and adds the important note that 'this endpoint has no pagination parameter', but it never says when to use this versus get_networking_operation or get_network_appliance_operation. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_load_balancersList network load balancersARead-onlyIdempotentInspect
List private and public load balancers and customer-safe health/qualification state. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered; the description adds genuinely non-obvious context: that the general full/read defaults do NOT grant networking access, and that ownership, feature availability and 2FA locks are enforced backend-side. The mention of 'networking:manage for changes' is slightly confusing on a read-only tool but signals family-level auth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all front-loaded: what it returns, then the auth prerequisite, then backend enforcement. Each sentence carries information, though the permission clause is denser than needed for a read-only list call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-shape burden, and it does hint at the payload ('customer-safe health/qualification state'). For a zero-parameter, read-only list tool with full annotation coverage, this is close to sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter syntax the description could usefully add. The description correctly avoids inventing filter arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List private and public load balancers') and adds the return scope ('customer-safe health/qualification state'), which is more than the title repeats. It does not explicitly distinguish itself from the singular get_network_load_balancer or list_network_appliances, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clarifies the permission needed ('networking:read for reads', 'networking:manage for changes') but never says when to choose this over get_network_load_balancer for a single item or list_network_appliances for a different resource. Usage is implied by the name rather than routed explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_product_periodsList network product periodsARead-onlyIdempotentInspect
Read owned product periods, renewal availability and lifecycle facts. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true, so safety is covered. The description adds valuable non-obvious context: explicit scope requirements (networking:read, not full/read), backend ownership enforcement, and service 2FA locks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the resource scope, then permissions, then backend enforcement. No wasted words, though the permission detail could be slightly tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what is read, required scope, and enforcement behavior. With no output schema, it could say more about the returned periods structure, but the annotations carry the safety profile and the description covers the authorization nuances an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. The description correctly implies no inputs beyond implicit scope, and the schema confirms an empty object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reading owned product periods, plus renewal availability and lifecycle facts. This is clear but does not explicitly differentiate itself from sibling tools like list_network_products or get_period_options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as list_network_products, get_period_options, or list_networking_operations. The permission note (networking:read vs networking:manage) is about authorization, not usage selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_productsList network productsARead-onlyIdempotentInspect
Read current paid products, live tier names, prices and purchase capability; public proxy load balancer 3/5-node offerings must come from this catalog. Pass an owned network_id to include that target's purchase eligibility and refusal reasons. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | No | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds non-obvious operational context: the exact scopes needed, the fact that full/read defaults do not grant networking, backend enforcement of ownership, feature availability and service 2FA locks, and possible refusal reasons. This is meaningful disclosure an agent could not derive from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, and each following sentence adds distinct information (parameter effect, auth scopes, backend enforcement) with no padding. It is dense and slightly run-on, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param, read-only catalog tool with no output schema, the description covers what is returned (products, tier names, prices, purchase capability) plus auth and refusal semantics. Pagination and exact response shape are unaddressed, which is the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single network_id parameter, so the baseline is 3. The description goes further by explaining the behavioral consequence of supplying it — purchase eligibility and refusal reasons are included for that target — which the regex/pattern in the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-plus-resource ('Read current paid products, live tier names, prices and purchase capability') and pins the tool's role as the catalog that 3/5-node public proxy load balancer offerings must come from. It never names the adjacent siblings (quote_network_product, order_network_product, list_network_product_periods), so the agent must infer the boundary, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the conditional use of the only parameter: pass an owned network_id to include that target's purchase eligibility and refusal reasons. It also states the required scopes and the caveat that full/read defaults do not grant networking access. No explicit when-not-to-use or named alternative is given, so it stops at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_public_addressesList network public addressesARead-onlyIdempotentInspect
Read owned paid public addresses, account limits, target support and purchase availability. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes further by disclosing the required scopes (networking:read), that full/read defaults do NOT grant networking, and that the backend enforces ownership, feature availability and service 2FA locks. That is genuine authorization and enforcement context beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and its payload, followed by the permission caveat. Slightly muddied by the clause 'or networking:manage for changes', which is odd for a read-only listing and marginally dilutes the front-loading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema and full annotation coverage, the description is nearly sufficient: it summarizes the returned content (addresses, account limits, target support, purchase availability) and the permission/enforcement model. Only the routing relative to sibling list/get tools is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema baseline of 4 applies. The description introduces no parameters and needs to add nothing here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read owned paid public addresses') and enumerates the extra payload (account limits, target support, purchase availability), which distinguishes it from the singular get_network_public_address. It does not, however, explicitly name which sibling to prefer, so the differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an access precondition ('Requires explicit networking:read for reads') but never says when to choose this list tool over get_network_public_address, list_network_attachment_candidates, or the binding/attach operations. Usage is implied by the word 'list' rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_security_groupsList network security groupsARead-onlyIdempotentInspect
List groups in the owned project. Copy project_id from the network; do not invent an account identifier. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely new behavior: explicit scope requirements ('full/read defaults do not grant networking') and backend enforcement of ownership, feature availability, and service 2FA locks. These are the kind of hidden preconditions an agent would otherwise trip over.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the operation and then the preconditions. The permission sentence mentions 'changes' for what is a read-only tool, which is slightly off-purpose, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
One required parameter, no output schema, annotated as a safe read; the description covers sourcing, permissions, and enforcement, which is most of what an agent needs. It does not mention pagination or list shape, a minor remaining gap for a list tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the UUID pattern, so baseline is 3. The description still adds sourcing guidance beyond the schema: where to obtain project_id ('copy from the network') and an explicit anti-pattern ('do not invent an account identifier'), which prevents a plausible failure mode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List groups in the owned project') and scopes it to the caller's owned project, which distinguishes it from get_network_security_policy or the clone/create/update siblings. The wording 'groups' is slightly loose for 'network security groups', but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides real preconditions (project_id must come from an owned networking resource, explicit networking:read scope required), but never says when to pick this tool over siblings such as get_network_security_policy or get_security_group_capabilities. Usage is implied by the precondition text rather than stated as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_vpn_gatewaysList network VPN gatewaysARead-onlyIdempotentInspect
List owned VPN gateways, their device peers and safe status. No private keys or one-time configurations are retrieved. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description must add more — and it does: no private keys or one-time configurations are returned, scopes are enforced explicitly, and the backend enforces ownership, feature availability and 2FA locks. Missing only operational details like pagination or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and returned scope, then data-safety, then authorization — a sensible priority order in three tight sentences. The permission sentence is slightly boilerplate-heavy but still earns its place for a scoped read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no parameters and simple annotations, the description carries the remaining burden: it names the returned entities and explicitly excludes sensitive material. It stops short of describing result shape or size, which would fully close the loop.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and schema coverage is 100%, so parameter semantics is a non-issue and the baseline is 4. The description adds nothing parameter-related because there is nothing to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('List owned VPN gateways') with added scope ('their device peers and safe status'), which distinguishes it from the singular get_network_vpn_gateway and from get_network_vpn_summary. An agent can tell what it enumerates without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the permission context needed to use it (explicit networking:read vs networking:manage, and that full/read defaults do not grant networking), which is useful pre-invocation guidance. However, it never says when to prefer this over siblings such as get_network_vpn_gateway or list_network_appliances, and the 'networking:manage for changes' clause is left ambiguous on a read-only listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_paymentsList paymentsBRead-onlyInspect
List payment history with pagination
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a safe, non-destructive, closed-world read (readOnlyHint=true, destructiveHint=false, openWorldHint=false). The description adds the pagination trait, which is modest value beyond that. It says nothing about result ordering, scope, or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the key trait (pagination) fronted and no filler. It is appropriately sized, though too terse to route between siblings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter list tool with annotations covering the safety profile and no output schema to explain, this is minimally viable. It omits what a payment record contains and how it relates to list_invoices, which the agent would need to choose correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'page' parameter is already documented as 'Page number'. The description's mention of pagination adds no syntax, size, or default detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List payment history'), which is clear on its own. However, it does not distinguish itself from the close sibling list_invoices or get_network_payment_methods, leaving the boundary between 'payments' and 'invoices' implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives despite list_invoices and get_network_payment_methods being obvious near-neighbors. The agent must infer the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_private_network_portsList private network portsARead-onlyIdempotentInspect
Read owned network ports, their fixed DHCP addresses, generations and attachment states. Reserved is not connected. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, so the bar is lower, yet the description still adds real value: the exact OAuth scopes needed, the warning that full/read defaults do NOT grant networking, backend ownership/feature/2FA enforcement, and the domain rule that 'Reserved is not connected'. It stops short of describing pagination or result ordering, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the returned data, then the state caveat, then the permission constraint — every sentence carries non-redundant information. The scope sentence is slightly dense (mixing read and manage permissions for a read-only tool), but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only list tool with annotations covering safety and a fully documented schema, the description is nearly sufficient: it discloses the returned fields, the auth requirement, and the enforcement model. The remaining gap is that no output schema exists to explain result shape, and the description only names the fields rather than their types or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required network_id parameter with 100% schema description coverage (UUID format, lowercase, exact match, 36 chars), so the schema carries the full semantic load. The description adds nothing about the parameter, which is the expected baseline 3 when coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb ('Read') and resource ('owned network ports') and enumerates the returned facets (fixed DHCP addresses, generations, attachment states), which tells the agent exactly what this call yields. It does not, however, name or contrast with the closest sibling, list_service_private_ports, so an agent must infer the distinction between 'owned' and 'service' ports on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gates usage by permission scope ('Requires explicit networking:read for reads'), which is a genuine prerequisite, but it never states when to prefer this tool over list_service_private_ports or list_network_attachment_candidates. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_private_networksList private networksARead-onlyIdempotentInspect
List owned private networks, including deletion awaiting verified cleanup. An empty list is a starting state for creating an approved network, not evidence that existing servers cannot use private networking. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, but the description adds real value beyond them: the list may contain networks mid-deletion, an empty result is not proof that servers lack private networking, and the backend enforces ownership, feature availability and service 2FA locks. The explicit auth scope requirement is also non-obvious context. The only soft spot is the 'or networking:manage for changes' phrasing on a tool that performs no changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the two non-obvious behavioral facts and the permission requirement. Three dense sentences, all carrying weight, though the permission sentence mixes a write-scope clause that is irrelevant to this read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, no output schema, and annotations covering the safety profile, the description covers the remaining agent-relevant gaps: what can appear in the list, how to read an empty result, and the required auth scope. Return item structure is left unstated, but that is a minor omission for a simple enumerator.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly avoids inventing filter or pagination parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List owned private networks') and even narrows the scope by noting it includes entries still awaiting verified cleanup. The scope is unambiguous relative to the port/security-group siblings, though no sibling tool is named explicitly for contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage is present through the empty-list guidance ('a starting state for creating an approved network'), which tells the agent how to interpret results. However, it never says when to use this instead of get_private_network, get_networking_overview, or list_network_attachment_candidates, and the 'networking:read for reads or networking:manage for changes' clause is boilerplate that doesn't map cleanly onto a read-only list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_restore_file_pointsList browsable backup pointsARead-onlyIdempotentInspect
List the nightly backup points whose contents can be browsed file by file for one owned service, and report whether folder search is available on that service's node. Browsing is free and never charges the account or changes the server. Always call this before browse_restore_files: its searchAvailable flag is the only reliable signal of whether the filter argument can be used. Initially supported on Firecracker VPS. Requires services:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds meaningfully: browsing is free and never charges the account or changes the server, it requires services:read, and it is initially limited to Firecracker VPS. It stops short of describing return shape or pagination, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with what it does, then the key ordering constraint, then cost/permission/platform caveats. Every sentence carries distinct information and none is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description supplies everything an agent needs: the workflow dependency on browse_restore_files, the semantics of the returned flag, cost implications, permission requirement, and platform availability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (orderNo) and schema description coverage is 100%, with an explicit pattern/format/example in the schema. The description's 'for one owned service' reinforces the tenant-ownership constraint but adds no syntax detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (nightly backup points whose contents can be browsed file by file) scoped to one owned service, and additionally declares a secondary output (the searchAvailable flag). This clearly separates it from siblings like list_restore_points and get_restore_file_browse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Always call this before browse_restore_files' and explains why: the searchAvailable flag is the only reliable signal of whether the filter argument can be used. It also names the prerequisite permission (services:read) and platform scope (Firecracker VPS), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_restore_pointsList restore pointsARead-onlyInspect
List available backup restore points for a service (automatic off-node backups). Use a point id with request_restore. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false and a closed world, so safety is covered. The description adds genuinely new context: the backup type is 'automatic off-node', the results feed request_restore, and it requires services:read when called with an API key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the purpose front-loaded and the routing and auth notes following in priority order. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only list tool with full annotation coverage and no output schema, the description covers purpose, prerequisites and downstream use. It does not describe the shape of the returned points (fields, ids, pagination), which is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single, fully documented orderNo parameter, so the schema carries the burden. The phrase 'for a service' loosely links the call to the service identifier but adds no format or naming detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List available backup restore points') and scopes it ('for a service (automatic off-node backups)'), which implicitly separates it from snapshot and application-level siblings. It stops short of naming the closest relatives such as list_restore_file_points or browse_restore_files, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use a point id with request_restore' gives clear downstream context, effectively telling the agent this tool is a read step that feeds a mutation. It also states the auth requirement, but offers no explicit exclusion (e.g. when to prefer file-level browsing instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_service_applicationsList service applicationsARead-onlyIdempotentInspect
List managed application installations and any pending checkout selection for one owned service. A queued state is not proof of health. Requires applications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), but the description adds the auth requirement ('applications:read') and an interpretive caveat ('a queued state is not proof of health') that an agent would not get from structured data. It adds value beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action, then auth requirement and a caveat. 'A queued state is not proof of health' is somewhat cryptic and would benefit from a hint at what it implies for the caller, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema and annotations already declaring the safety profile, the description covers scope, permission requirement, and a state-interpretation caveat. Adequate, though the pending-checkout/queued-state semantics remain slightly under-explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage on the single orderNo parameter, the schema already carries the format and pattern details. The description's 'one owned service' reinforces that orderNo identifies the service but adds no syntax beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('List') plus a precise resource ('managed application installations and any pending checkout selection') scoped to 'one owned service'. It distinguishes itself well from list_services and list_application_catalog, though it doesn't name a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'for one owned service' constraint and 'Requires applications:read' prerequisite imply the context in which this applies, but it never states when to use this versus get_application_installation, list_services, or list_application_recipes. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_service_dns_optionsList service DNS optionsARead-onlyInspect
List the DNS attach options for a service: its public IPv4/IPv6 addresses, the account's editable forward DNS zones, and DNS records already pointing at the service. Use before attach_service_dns_record. Requires dns:read when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false. The description adds a real behavioral detail the annotations do not carry: the required dns:read scope when using an API key. It does not describe pagination or return ordering, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses, one sentence: what it lists, when to use it, and the auth requirement. Nothing is redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, precondition, alternative and permission scope for a read-only, single-parameter tool with no output schema. Return values are partially enumerated; only pagination/shape details are absent, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single orderNo parameter is fully documented with pattern, length and examples in the schema. The description adds no parameter-level syntax beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (service DNS options) and enumerates the three concrete data categories returned (public IPs, editable forward zones, existing DNS records). The mention of attach_service_dns_record distinguishes it from sibling DNS tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('Use before attach_service_dns_record') and names the alternative workflow step, giving an agent a clear trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_service_private_portsList service private portsARead-onlyIdempotentInspect
Read private ports and order attachment recovery state for one owned service order number. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks.
| Name | Required | Description | Default |
|---|---|---|---|
| service_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), yet the description adds genuinely new behavioral context: explicit networking:read scope not granted by full/read defaults, backend ownership enforcement, feature-availability gating, and service 2FA locks. The phrase "or networking:manage for changes" sits slightly awkwardly against readOnlyHint and could momentarily confuse an agent, but the leading "Read" makes the actual mode unambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what is read and against what key, followed by permission and backend-enforcement constraints. Dense but every sentence carries usable information; only the "changes" clause is arguably wasted on a read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter at 0% schema coverage and no output schema, the description covers the two things an agent most needs: the semantics of the key and the authorization/enforcement conditions. It names the payload content (ports and order attachment recovery state) but says nothing about result size, ordering, or pagination, which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter meaning, and it does: it identifies the single argument as a service order number that must be owned by the caller, which is more than the pattern-only schema conveys. It does not give format or example values, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read private ports and order attachment recovery state") scoped to "one owned service order number". This distinguishes it from the network-scoped sibling list_private_network_ports, but it never names that sibling explicitly, so differentiation requires the agent to infer it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies a real precondition (networking:read scope, ownership, feature availability, 2FA locks) that tells the agent when the call will succeed. However it gives no guidance on when to prefer this tool over list_private_network_ports or list_network_attachment_candidates, leaving tool selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesList servicesARead-onlyInspect
List all active VPS services with state, plan, IPs, and expiry Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number; follow the response pagination until all pages are read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond that: results are filtered to active services only, and an API-key call requires the services:read scope, which is an auth requirement the annotations do not express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that front-loads the action and enumerates the returned fields efficiently. It loses a point because the auth clause runs into the prior clause without punctuation ('expiry Requires'), creating a slight readability stumble.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned fields (state, plan, IPs, expiry), and it covers the auth scope and active-only filter. Pagination behavior is left to the schema, which documents it, so the definition is nearly complete for a simple one-parameter list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'page' parameter is already fully documented, including the instruction to follow pagination. The description adds nothing about pagination or the page parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list VPS services) plus the scope (active only) and the fields returned (state, plan, IPs, expiry). The word 'all' implicitly contrasts with the singular get_service sibling, though it never names that alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description scopes the call to 'active' services and states the required services:read scope with an API key, which functions as a precondition. However, it gives no explicit when-to-use vs when-not guidance and never points to get_service for a single service or to related list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_snapshotsList snapshotsADestructiveInspect
List disk snapshots for a Cloud VPS (KVM/VDS) service, with the snapshot billing policy (free window, then billed per GB while kept) and a usage summary. Firecracker VPS uses list_firecracker_snapshots instead. Requires services:read when called with an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description frames this as a read-only listing that returns billing policy and a usage summary, but annotations declare readOnlyHint=false and destructiveHint=true. Those signals directly conflict, so an agent cannot tell whether calling this is safe or mutating. Per the rubric this mismatch is an annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct load: purpose/scope, sibling routing, and permission requirement. The core purpose is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully previews what comes back (billing policy, usage summary), which is exactly the kind of detail an agent needs here. It omits any pagination or ordering behavior, and the safety profile it implies conflicts with the annotations, keeping it short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single orderNo parameter is fully documented with pattern, length, and examples. The description adds only the service-type context, which does not meaningfully extend the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List disk snapshots') scoped to a specific product line (Cloud VPS KVM/VDS), and explicitly names the sibling it is not for Firecracker hosts. An agent can distinguish it from list_firecracker_snapshots without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool (list_firecracker_snapshots) together with the condition that selects it, and adds a prerequisite ('Requires services:read when called with an API key'). Routing and authorization context are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ssh_keysList SSH keysARead-onlyInspect
List account SSH public keys. Follow response pagination until all pages are read; perPage accepts 1-200 (default 50).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond the annotations: the response is paginated and callers should keep following pages until exhausted, plus the perPage bounds and default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the core purpose is front-loaded and the pagination caveat follows. Nothing repeats the title or annotations unnecessarily.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description covers purpose and pagination adequately. It is slightly thin on the page parameter and on what a key record contains, but annotations and the small schema carry the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents perPage's range (1-200) and adds the default (50), which the schema does not state, but it never mentions the page parameter at all. Partial compensation for a two-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("List account SSH public keys"), which immediately distinguishes it from the write siblings create_ssh_key and delete_ssh_key and the single-item get_ssh_key. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb (listing SSH keys is the read/all alternative to get_ssh_key), but there is no explicit when-to-use or when-not-to-use guidance, and no sibling is named as an alternative. The pagination instruction is the only procedural guidance offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_temp_vmsList on-demand server sessionsARead-onlyIdempotentInspect
List the account's on-demand server sessions and current options. Credentials and internal host placement are never returned. Requires services:read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered structurally. The description adds real value beyond that: it discloses that credentials and internal host placement are never returned, and it states the required services:read scope, which the annotations do not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is listed, followed by the data-exposure caveat and the required scope. Every sentence carries distinct information and none is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a read-only, zero-parameter tool and no output schema, the description covers the essentials: scope of the listing, what is omitted from results, and the auth requirement. It could be marginally stronger by noting there are no filter parameters or by pointing to get_temp_vm for individual sessions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. Nothing in the description misrepresents the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (the account's on-demand server sessions and current options), which is more than the bare name list_temp_vms conveys. It does not, however, distinguish itself from the closely related get_temp_vm, get_temp_vm_options, or create_temp_vm siblings that share the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer this is the enumerate-all-sessions call, and 'Requires services:read' narrows who may call it. There is no explicit when-to-use/when-not or routing to get_temp_vm for a single session or get_temp_vm_options for options only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_applicationManage application lifecycleADestructiveIdempotentInspect
Queue one supported lifecycle action for an owned managed application. Confirm the exact action with the user first. For update or rollback, first read get_application_installation and copy the exact advertised blueprint_version and upstream_version as execution preconditions. The backend still selects and freezes the eligible immutable release; callers cannot choose an arbitrary target. Stop interrupts service. Uninstall permanently deletes the managed containers, configuration, saved credentials, and application data; existing server backups are retained. Uninstall requires acknowledge_data_loss=true after explicit user confirmation. A queued response must be verified with get_application_installation and get_application_events. Selective data restore is a separate operation exposed by list_application_restore_points and restore_application_data. Requires applications:manage and is not a paid API-key operation.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Supported lifecycle action. Update and rollback apply the exact backend-advertised immutable release. Selective data restore is a separate revision-bound operation. | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirmed this lifecycle action | |
| idempotencyKey | Yes | Client-global unique key. Reuse it only to replay this exact lifecycle request; never reuse it for another service or request. | |
| installation_id | Yes | Managed application installation UUID | |
| acknowledge_data_loss | No | Required for uninstall only. Set true after the user explicitly confirms permanent deletion of managed configuration, credentials, and application data. | |
| expected_upstream_version | No | Required for update or rollback: exact upstream_version from the corresponding available_actions capability | |
| expected_blueprint_version | No | Required for update or rollback: exact blueprint_version from the corresponding available_actions capability |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply the coarse destructive/idempotent/openWorld flags; the description adds substantial specifics beyond them: stop interrupts service, uninstall permanently deletes containers, configuration, credentials and data while backups are retained, the backend freezes the eligible release, and the queued response must be verified via get_application_installation/get_application_events. It also notes the applications:manage requirement and that it is not a paid API-key operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then layered with confirmation, preconditions, destructive semantics, and verification in a logical order. It is dense and paragraph-form rather than bulleted, but nearly every sentence carries distinct information, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-action mutation tool with no output schema, the description covers preconditions, required confirmations, side effects, verification path, permissions, and the boundary to adjacent restore operations. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema for expected_blueprint_version/expected_upstream_version and acknowledge_data_loss by explaining the access-control intent (backend selects the immutable release; callers cannot pick an arbitrary target) and the confirmation gate. That is genuine semantic value on top of the field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Queue one supported lifecycle action for an owned managed application") and enumerates the action set. It is clearly distinguishable from siblings like install_application, cancel_application_action, and restore_application_data, which it names as separate operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use instructions: confirm the action with the user first, read get_application_installation before update/rollback, and use list_application_restore_points/restore_application_data for selective restore. It also states the precondition and the acknowledge_data_loss requirement, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_automatic_ssl_subscriptionManage Automatic SSL subscriptionADestructiveIdempotentInspect
Queue one exact idempotent Automatic SSL action: cancel the subscription, remove an eligible purchased DNS name, or replace an eligible purchased DNS name during its correction window. Read the subscription and its actions first, and call only after explicit approval. If the result becomes ambiguous, reuse the same key only for an unchanged retry or call refresh_automatic_ssl_subscription—never submit a new mutation key. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | ||
| idempotencyKey | Yes | Client-global key for one exact action. Reuse only for an unchanged retry. | |
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions | |
| acknowledge_automatic_ssl_action | Yes | True only after the user approves this exact Automatic SSL action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/idempotent/openWorld, and the description still adds substantial context: the correction-window constraint on replacement, eligibility of the purchased DNS name, the required certificates:manage permission, and detailed idempotency semantics ('reuse the same key only for an unchanged retry…never submit a new mutation key'). This is exactly the beyond-annotations value the dimension rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action set, then ordered as prerequisites (read first, approval), then failure-handling (ambiguity, key reuse). Three sentences, no filler, every clause carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, approval-gated mutation with no output schema, the description covers prerequisites, permissions, idempotency, and recovery, which is nearly everything an agent needs. The one real gap is the relationship to the parallel single-action SSL tools, which the description never addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 75%, but the description compensates by naming the three action values (cancel, remove, replace) and the conditions governing them ('eligible purchased DNS name', 'correction window'). It also reinforces the approval and idempotency semantics of two of the four parameters, going beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise verb and resource ('Queue one exact idempotent Automatic SSL action') and enumerates the three supported mutations: cancel subscription, remove an eligible purchased DNS name, replace one during its correction window. That scope is clear, but it never distinguishes this aggregated tool from the sibling single-action tools (cancel_automatic_ssl_subscription, remove_automatic_ssl_domain, replace_automatic_ssl_domain) that appear to overlap with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong procedural guidance: read the subscription and its actions first, call only after explicit approval, and it explicitly routes the agent to refresh_automatic_ssl_subscription when the result is ambiguous, plus rules for key reuse. What is missing is when to choose this tool over the dedicated cancel/remove/replace siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_certificateManage paid TLS certificateADestructiveIdempotentInspect
Queue one exact idempotent paid-certificate management action: cancel an eligible pending order, recheck or resend validation, change one validation method, or request a free same-name reissue with a new public CSR. Read the product capabilities, current order, validation, and actions first. Call only after explicit approval. A reissue must preserve the paid name set and never sends a private key. If the outcome becomes ambiguous, reuse the same key only for the exact retry or call refresh_certificate—never submit a new mutation key. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | ||
| idempotencyKey | Yes | Client-global key for one exact action. Reuse only for an unchanged retry. | |
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates | |
| acknowledge_certificate_action | Yes | True only after the user approves this exact certificate management action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true, openWorld=true, and readOnly=false. The description adds substantial context beyond annotations: required permission (certificates:manage), explicit user approval needed, private key never sent, idempotency key reuse rules, and refresh_certificate as a fallback for ambiguous outcomes. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then layers preconditions, approval, reissue constraint, retry guidance, and auth requirement in a tight sequence. Every sentence adds necessary information without redundancy; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers purpose, preconditions, approval, key handling, and retry behavior well for correct invocation. It does not explain what the tool returns (e.g., a queued action identifier) or how to track status generally, which is a minor gap for a complex mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, with descriptions for csr, idempotencyKey, certificate_order_id, and acknowledge_certificate_action. The description enriches the request union by enumerating allowed actions and adds idempotency key reuse semantics that go beyond the schema's field descriptions. It does not add detail on validation_method values, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Queue') and resource ('paid-certificate management action') and enumerates the four action types (cancel, recheck/resend validation, change validation, reissue). The qualifier 'paid-certificate' distinguishes it from free-certificate tools. An agent can tell what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides preconditions ('Read the product capabilities, current order, validation, and actions first'), an approval requirement ('Call only after explicit approval'), and a retry fallback ('reuse the same key only for the exact retry or call refresh_certificate'). However, it never addresses when to use this combined tool instead of the dedicated sibling tools (cancel_certificate, recheck_certificate_validation, resend_certificate_validation, change_certificate_validation, reissue_certificate) that perform the same individual actions, leaving ambiguous routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_free_certificateManage free TLS certificateADestructiveIdempotentInspect
Request one free-certificate lifecycle action after reading its current state: early renew, revoke, recheck validation, or cancel before issuance. A customer_csr renewal requires a new public CSR for the unchanged authorized names; managed-key renewal normally happens automatically. Call only after explicit user approval. If the response is ambiguous, read get_free_certificate before deciding whether another action is needed. This tool cannot export a private key. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | ||
| free_certificate_request_id | Yes | Customer-owned free-certificate request UUID returned by list_free_certificates | |
| acknowledge_free_certificate_action | Yes | True only after the user approves this exact lifecycle action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true and openWorld=true, but the description adds context the annotations cannot convey: managed-key renewal happens automatically, customer_csr renewal requires a fresh public CSR for the unchanged authorized names, the private key cannot be exported, and the call requires the certificates:manage permission. This is exactly the kind of prerequisite and side-effect disclosure a mutation tool needs, with no contradiction of the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each doing distinct work: purpose and action list first, then renewal semantics, then the approval gate, then the fallback read, then the private-key boundary and permission. Nothing is redundant and the most important constraint (user approval) is not buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description sensibly tells the agent how to interpret an ambiguous response by falling back to get_free_certificate. It covers prerequisites, permissions, and side effects well for a destructive dispatcher; the one gap is that it never resolves the overlap with the four single-action sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema documents the request id, the acknowledge flag, and the CSR field. The description still adds meaning by tying the CSR requirement to the customer_csr renewal path, noting the authorized names must be unchanged, and reinforcing that the private key must never be transmitted. It stops short of describing the request-action variants in prose, but the schema's const values carry that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Request one free-certificate lifecycle action') and enumerates the exact action set (early renew, revoke, recheck, cancel before issuance), which cleanly separates it from get_free_certificate. It does not, however, explain why an agent would use this dispatcher instead of the per-action siblings renew_free_certificate, revoke_free_certificate, recheck_free_certificate, and cancel_free_certificate, leaving a real selection ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit sequencing ('after reading its current state'), a hard prerequisite ('Call only after explicit user approval'), and an alternative path ('read get_free_certificate before deciding whether another action is needed'). It also names the tool it is not (get_free_certificate) in the read/act split, so the when-to-use guidance is unusually complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_network_public_ipMove network public IPADestructiveIdempotentInspect
Move a prepared floating public binding to another owned private port; confirm interruption to the old target. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| binding_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| private_port_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: required scopes (networking:read / networking:manage) with an explicit warning that full/read defaults do not grant networking, backend-enforced ownership/feature/2FA gates, the fact that acceptance is pending and not connectivity, and detailed in_progress/reason_code polling semantics with an explicit rule that in_progress=true is never an error. This is far richer than the destructiveHint/idempotentHint annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then prerequisites, then result semantics. Dense but nearly every sentence carries operational weight. Slight redundancy between 'never automatically retry' and 'reuse only the original key and unchanged request' keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-read-only mutation with no output schema, the definition covers auth requirements, ownership/feature gates, approval expectations, async operation polling, reason_code handling, and idempotent recovery. An agent has everything needed to call and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema documents most parameters. The description reinforces idempotencyKey use ('reuse only the original key and unchanged request') which the schema also covers, but adds no syntax or value detail for binding_id, private_port_id, or expected_generation beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Move a prepared floating public binding to another owned private port.' Distinguishable from sibling bind_network_public_ip / attach_public_address_to_network by the 'prepared binding' and 'move' framing, and the 'confirm interruption to the old target' clause signals it is a re-targeting operation. It does not explicitly contrast itself with the bind_* sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions: 'Read current capabilities and owned resource state first; obtain approval for the exact change.' This tells the agent what to do before invoking. It stops short of a 5 because it never names an alternative tool or states when NOT to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_automatic_ssl_domainOrder Automatic SSL domainADestructiveIdempotentInspect
Confirm and pay for the exact additional Automatic SSL DNS-name quote. Call only after the user approves the final EUR total, DNS name, and payment method. Use the unchanged name, same idempotencyKey, and exact quote token. Requires certificates:order and paid-operation spend controls.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | One canonical DNS name to add. A base name includes www; a wildcard includes its base name. | |
| payment | Yes | Payment object. For account balance use { payment: 1, successUrl: '', cancelUrl: '' } | |
| quote_token | Yes | Exact short-lived quote_token returned by the matching quote tool | |
| idempotencyKey | Yes | Same client-global idempotency key used for quote_automatic_ssl_domain | |
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions | |
| acknowledge_exact_quote_and_payment | Yes | True only after the user approves the exact EUR total, DNS name, and payment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations (which only flag destructive/idempotent/non-read-only) by disclosing the required scope certificates:order and that paid-operation spend controls apply. The emphasis on reusing the same idempotencyKey adds real dedup behavior. Missing detail on what happens post-charge, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action, then precondition, then input discipline, then authorization. No filler; every sentence carries an actionable instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid, destructive, idempotent mutation with full schema coverage and no output schema, the description covers the action, the approval gate, the credential/spend requirements, and the idempotency contract. Nothing an agent needs before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by tying the parameters to the quote flow ('unchanged name, same idempotencyKey, exact quote token'), which explains why each must match rather than just what it is.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (confirm and pay / order) and resource (additional Automatic SSL DNS-name), and clearly marks it as the terminal ordering step rather than the quote step. An agent can distinguish it from sibling quote_automatic_ssl_domain and order_automatic_ssl_subscription without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Call only after the user approves the final EUR total, DNS name, and payment method') and the correct input-reuse discipline (unchanged name, same idempotencyKey, exact quote token). It doesn't explicitly name the quote tool as the alternative it must follow, but the when-to-use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_automatic_ssl_renewalPrepay Automatic SSL renewalADestructiveIdempotentInspect
Prepay one exact next Automatic SSL term from account balance. Call only after the user approves the renewal date, DNS-name count, and final VAT-inclusive EUR total. Use the same idempotencyKey and exact quote token. A definitive provider failure is credited once to balance; an uncertain result remains under reconciliation and must not be submitted again with a new key. Requires certificates:order and paid-operation spend controls.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_token | Yes | Exact short-lived quote_token returned by the matching quote tool | |
| idempotencyKey | Yes | Same client-global idempotency key used for quote_automatic_ssl_renewal | |
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions | |
| acknowledge_exact_quote_and_balance_payment | Yes | True only after the user approves the exact renewal and balance charge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by explaining balance payment, required approvals, idempotency reuse, failure credit behavior, reconciliation state, and required certificates:order/spend controls. Annotations already cover destructive/idempotent/readOnly hints; the description adds operational and failure semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action in the first sentence, then layers only necessary prerequisites, idempotency rules, failure handling, and permission requirements. No sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a complex paid ordering tool: prerequisites, approval gate, idempotency contract, failure/reconciliation behavior, and authorization requirements are all stated. No output schema exists, so return-value explanation is unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage, establishing a baseline of 3. The description reinforces the quote_token/idempotencyKey linkage and approval conditions, but adds little syntactic or semantic detail beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: prepay the next Automatic SSL term from account balance. The scope and payment source distinguish it from sibling quote/order tools, and the gating sentence makes clear it is not a preview/quote operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call only after user approval of renewal date, DNS-name count, and VAT-inclusive EUR total, and to reuse the same idempotencyKey/quote token. Provides a when-not condition for uncertain results, but does not name the required preceding quote tool as an alternative workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_automatic_ssl_subscriptionOrder Automatic SSL subscriptionADestructiveIdempotentInspect
Confirm and pay for the exact Automatic SSL quote. Call only after the user approves the final EUR total, subscribed names, term, and payment method. Use the unchanged request, same idempotencyKey, and exact quote token. Setup credentials remain portal-only behind two-factor verification and are never returned to MCP. Requires certificates:order and paid-operation spend controls.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | Canonical subscribed DNS names. A base name includes its www alias; an apex and wildcard are separate names and may be ordered together. | |
| payment | Yes | Payment object. For account balance use { payment: 1, successUrl: '', cancelUrl: '' } | |
| offer_id | Yes | Published EUR offer ID returned by the selected catalog product | |
| auto_renew | Yes | Explicitly choose whether the subscription remains eligible for separately prepaid future terms | |
| product_id | Yes | Published product ID returned by list_certificate_catalog | |
| quote_token | Yes | Exact short-lived quote_token returned by quote_automatic_ssl_subscription | |
| idempotencyKey | Yes | Same client-global idempotency key used for quote_automatic_ssl_subscription | |
| offer_generation | Yes | Exact offer generation returned by the catalog; stale generations are rejected | |
| acknowledge_exact_quote_and_payment | Yes | True only after the user approves the exact EUR total, names, term, and payment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true, but the description adds meaningful context beyond them: the required certificates:order scope, paid-operation spend controls, the idempotencyKey reuse contract, and that setup credentials stay portal-only and are never returned to MCP. These auth/security disclosures are genuinely beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, front-loaded with the core action, and each sentence carries distinct information (precondition, idempotency contract, credential handling, authorization). Slightly dense but no wasted filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-stakes payment tool with 9 required parameters and no output schema, the description covers the approval precondition, idempotency requirement, permission scope, and spend controls. It omits any explanation of what a successful order returns or what to do on failure, a minor gap given the destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema itself documents all 9 parameters, including quote_token, idempotencyKey, and the payment object. The description reinforces the idempotency and quote-token semantics but adds no syntax or format detail the schema lacks, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Confirm and pay for the exact Automatic SSL quote.' An agent can tell this is the ordering/payment step, distinct from the quoting lifecycle. It never names the sibling (quote_automatic_ssl_subscription) to differentiate explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition: 'Call only after the user approves the final EUR total, subscribed names, term, and payment method.' This is an explicit when-to-use gate with the required approval signal. It stops short of naming alternative tools or when-not-to-call scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_certificateOrder paid TLS certificateADestructiveIdempotentInspect
Confirm and pay for the exact quote returned by quote_certificate. Call only after the user explicitly approves the exact final EUR total, certificate names, term, validation level, and payment method. Use the unchanged request, same idempotencyKey, and exact short-lived quote token. The private key remains customer-controlled. Paid certificate orders may become non-refundable once submitted or issued under the certificate authority's policy. Requires certificates:order and paid-operation spend controls.
| Name | Required | Description | Default |
|---|---|---|---|
| csr | Yes | Customer-generated PEM PKCS#10 CSR. The private key must remain with the customer and must never be sent to VPSnet or an AI assistant. | |
| payment | Yes | Payment object. For account balance use { payment: 1, successUrl: '', cancelUrl: '' } | |
| offer_id | Yes | Published EUR offer ID returned by the selected catalog product | |
| product_id | Yes | Published product ID returned by list_certificate_catalog | |
| renewal_of | No | Existing eligible certificate order UUID when quoting a renewal | |
| common_name | Yes | Primary certificate name and its validation method | |
| quote_token | Yes | Exact short-lived quote_token returned by quote_certificate | |
| idempotencyKey | Yes | Same client-global idempotency key used for quote_certificate | |
| offer_generation | Yes | Exact offer generation returned by the catalog; stale generations are rejected | |
| alternative_names | No | Optional unique subject alternative names; pricing is returned by quote_certificate | |
| technical_contact_id | Yes | Owned technical contact ID selected in the VPSnet certificate order form | |
| organization_contact_id | No | Owned organization contact ID when required for OV or EV validation | |
| administrator_contact_id | Yes | Owned administrator contact ID selected in the VPSnet certificate order form | |
| acknowledge_exact_quote_and_payment | Yes | True only after the user approves the exact quoted EUR total, names, term, and payment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds context the annotations cannot: the order may become non-refundable once submitted/issued, it requires certificates:order plus paid-operation spend controls, the request must be unchanged with the same idempotencyKey and short-lived quote token, and the private key never leaves the customer. These are exactly the extra behavioral facts an agent needs before spending money.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the user-approval gate are front-loaded across five tight sentences, each carrying a distinct obligation (prerequisite, approval, unchanged request, key custody, refundability, permissions). It is dense but nothing is filler; only the permissions sentence could be seen as stacked-on detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, monetary, 14-parameter tool with no output schema, the description covers preconditions, permissions, idempotency, and irreversibility well. The one gap is what the call returns (e.g., a new order UUID) and any follow-up step for validation or download, which the agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds cross-call semantics the schema cannot: the request must be byte-identical to the quote, the idempotencyKey must be the same one used for quote_certificate, and the quote_token is exact and short-lived. It does not, however, walk through the acknowledge_exact_quote_and_payment or contact-ID fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair: confirm and pay for the exact quote from quote_certificate. It distinguishes itself cleanly from the sibling quote_certificate (which only quotes) and from order_automatic_ssl_subscription/order_automatic_ssl_domain by being the paid, quote-backed TLS order path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the exact precondition ('Call only after the user explicitly approves the exact final EUR total, certificate names, term, validation level, and payment method') and names the prerequisite tool (quote_certificate), so the agent knows when this tool is appropriate versus when to go back and quote first. Exclusion and ordering are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_network_productOrder network productAInspect
Confirm a common-checkout purchase from an approved exact quote. Use its quote_id, quote_token and ORIGINAL idempotency key. payment.payment is the account-balance method ID from get_network_payment_methods; do not guess it. Optional target attaches an address to a network after settlement. After any uncertain result call find_network_product_order with the quote ID, then poll get_network_product_order; never buy a second copy. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| payment | Yes | ||
| quote_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| quoteToken | Yes | Exact quote_token returned by the quote; sent only as X-Quote-Token | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result | |
| acknowledge_charge | Yes | Set only after the user approves the exact quoted EUR total and intended purchase/renewal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true; the description adds a great deal beyond that: permission scoping (networking:manage vs networking:read, full/read defaults not granting networking), spend caps and enabled-paid-operations gates, ownership/2FA enforcement, async pending semantics with reason_code/reason_kind/in_progress handling, and 'never automatically retry' recovery rules. Minor tension: the annotation says idempotentHint=false while the description leans heavily on idempotency-key deduplication, though this is arguably consistent (key reuse is mandated, not safe repetition) and not flagged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action well, but the body is a dense wall that repeats itself: the permission model is stated twice ('Requires explicit networking:read ... full/read defaults do not grant networking' and later 'Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps'), and 'An accepted operation is pending, not proof of connectivity' restates 'Payment acceptance is not resource readiness.' Useful content, but it would benefit from trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, high-risk, non-idempotent order-confirmation mutation with no output schema and no enums, the description covers the needed ground: prerequisites, quote/provenance requirements, approval and disclosure obligations, async polling semantics, failure vs pending discrimination, and recovery paths.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description compensates for gaps: it identifies payment.payment as the account-balance method ID sourced from get_network_payment_methods ('do not guess it'), explains quote_id/quote_token provenance, and ties acknowledge_charge to disclosure of gross_amount in EUR before approval. It does not explain the secondary payment.paymentid field or the target.expected_generation semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Confirm a common-checkout purchase from an approved exact quote.' This cleanly separates it from the sibling quote_network_product (which produces the quote) and renew_network_product (renewal path), so an agent can pick the right tool without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes inputs (quote_id, quote_token, ORIGINAL idempotency key), names the alternative recovery path (find_network_product_order then poll get_network_product_order), and states a hard exclusion ('never buy a second copy'). It also names get_network_payment_methods as the source for the payment ID and warns against guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_serviceOrder serviceADestructiveInspect
Order a new VPS. Requires sufficient account balance for balance payment. Payment object for balance: { payment: 1, successUrl: '', cancelUrl: '' }. First call returns confirmationRequired and an exact gross EUR quote without charging. Show the amount and billing period, obtain explicit approval, then call again with the unchanged order configuration and idempotencyKey, returned quoteToken, expected_total_eur and acknowledge_charge=true. The API key must have paid scope/caps enabled. Never replace the key after an uncertain payment; inspect that original attempt in the VPSnet panel. Quotes are retained in this MCP process; after a restart inspect the original attempt in the panel rather than submitting another order. Payment acceptance is not server readiness. Poll get_service for the returned order number. stateProcess.waitingReason=public_ip_inventory resumes the same paid CREATE automatically when inventory returns; do not place or pay for another order. stateProcess.attention=true needs operator attention. Follow follow_up for the same service. Poll about every 10 seconds, never treating that interval as a boot ETA; after at most 6 checks report pending progress and retain the original key/order. Do not automatically restart or promise a completion callback. Running VM, usable guest access and application health are separate checks. Resources: array of numeric resource value IDs from get_order_options, e.g. [901, 907]. rootPassword: 6-40 chars, alphanumeric, must contain uppercase + lowercase + digit. Example: 'MyPass123'. sshKey and rootPassword are mutually exclusive — provide one or the other. privateNetworkId (optional): the UUID of one of your private networks to attach the new server to at order time, the same choice the order form offers; the server checks the network in the quote and refuses the order with a reason when it cannot be attached. Omit it for an order without a private network.
| Name | Required | Description | Default |
|---|---|---|---|
| os | No | OS version ID from get_order_options | |
| plan | Yes | Plan ID from get_order_plans | |
| period | Yes | Explicit billing period ID from get_order_options; disclose its term together with the exact gross quote before approval. | |
| sshKey | No | SSH key ID from list_ssh_keys to deploy. Mutually exclusive with rootPassword | |
| payment | Yes | Payment object. For balance: { payment: 1, successUrl: '', cancelUrl: '' } | |
| resources | No | Array of numeric resource value IDs from get_order_options, e.g. [901, 907, 902] | |
| quoteToken | No | Exact token returned by the first order_service call; required for confirmation. | |
| rootPassword | No | Root password. 6-40 chars, alphanumeric, must contain uppercase + lowercase + digit. Mutually exclusive with sshKey | |
| idempotencyKey | Yes | Required for paid API-key orders. Stable unique key for this exact order attempt, e.g. UUID. | |
| privateNetworkId | No | UUID of one of your private networks to attach the new server to (shown in the control panel under Networking). Sent to both the quote and the confirm; omit for no private network | |
| acknowledge_charge | No | Set only after explicit approval of the exact gross EUR total and billing period. | |
| expected_total_eur | No | Exact VAT-inclusive amount_eur disclosed to and approved by the customer; required for confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true and readOnlyHint=false; the description adds the crucial operational traits — the first call is non-charging, idempotency and key-retention rules, API-key scope requirements, quote lifetime tied to MCP process restarts, waitingReason/attention semantics, and the fact that payment acceptance is not server readiness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and justified in length for a paid two-phase order tool, but it restates schema text nearly verbatim for resources, rootPassword and privateNetworkId, and lines like "Follow follow_up for the same service." are opaque. The operational section earns its place; the schema echo does not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description explains the return surfaces an agent must handle: confirmationRequired and the gross EUR quote on the first call, the returned order number to poll, and stateProcess fields (waitingReason, attention). Polling cadence and the 6-check reporting ceiling are also specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already carries each parameter. The description still adds workflow-level meaning the schema cannot: which fields belong to the first (quote) call versus the second (confirm) call, and how quoteToken/expected_total_eur/acknowledge_charge must be carried over unchanged.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource statement, "Order a new VPS," which immediately separates it from the quote_/order_network_product and order_certificate siblings. The scope (new VPS provisioning with payment) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when/when-not guidance: first call returns a quote and charges nothing, then approval, then a second call with quoteToken/expected_total_eur/acknowledge_charge=true. It also names the alternatives and follow-up paths (poll get_service, follow follow_up, inspect the panel instead of retrying) and states conditions that must not trigger a re-order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preflight_free_certificatePlan a free TLS certificateARead-onlyIdempotentInspect
Plan a no-cost public DV certificate without issuing it or changing DNS. Returns the canonical names and every currently available validation, delivery, key-custody, and CA choice. Call this before create_free_certificate and follow only options marked available. Requires certificates:read.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Primary lowercase DNS name; wildcards begin with *. | |
| target_order_id | No | Optional owned VPS or Cloud VPS order ID returned by service tools | |
| alternative_names | No | Optional unique lowercase DNS subject alternative names | |
| certificate_authority | No | Optional CA choice; omit to let preflight recommend a currently ready authority |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), and the description adds genuinely new context: the certificates:read permission requirement, the explicit guarantee that no certificate is issued and no DNS is modified, and that only currently available choices are returned. It stops short of describing failure modes (e.g., ineligible hostname) or rate limits, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, and the ordering: purpose first, then return shape, then the call-this-before instruction. Every sentence carries distinct information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates what comes back (canonical names, validation, delivery, key-custody and CA options) and states the prerequisite permission. What is missing is behavior on ineligibility or unavailable options, and any pointer to eligibility-checking siblings, so it is nearly complete rather than fully so.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so hostname, alternative_names, target_order_id, and certificate_authority are already fully documented in the schema. The description only echoes the CA-choice and name concepts at a high level, adding no syntax or format detail beyond the structured fields — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Plan a no-cost public DV certificate') plus the critical scope boundary 'without issuing it or changing DNS.' An agent can immediately distinguish it from create_free_certificate, which is the adjacent write tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing ('Call this before create_free_certificate') and an operating instruction for the result ('follow only options marked available'), which names the alternative and the condition that routes to it. Nothing about when to reach for this versus the create tool is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_application_compose_adoptionPrepare Compose project adoptionAIdempotentInspect
Prepare and poll a short-lived, read-only takeover candidate for one exact unmanaged Compose project from a fresh discovery. The worker verifies container identity, immutable image identity, restart policy, Compose safety, and exclusive local named-volume ownership. Returns only a scrubbed Compose file, variable names, and bounded counts; never variable values, source paths, commands, or unrestricted labels. This tool does not stop or replace containers. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| discovery_id | Yes | Fresh discovery UUID returned by discover_service_containers | |
| compose_project | Yes | Exact unmanaged Compose project label returned by discovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-destructive, idempotent, closed-world. The description adds rich context beyond that: it verifies container identity, image identity, restart policy, Compose safety, and volume ownership; it returns only a scrubbed Compose file, variable names, and bounded counts while never returning variable values, source paths, commands, or unrestricted labels; it does not stop or replace containers; and it requires applications:manage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and packs verification, return, and permission details efficiently. It is slightly dense but every sentence earns its place; no wasted preamble.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a security-sensitive adoption-prep tool with no output schema, the description covers prerequisites, verification scope, return scrubbing, and safety profile. Together with annotations and the fully described schema, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and all three parameters already have detailed descriptions. The description adds only the qualifiers 'one exact unmanaged Compose project' and 'fresh discovery' which map to schema parameters but add no syntax or format detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific compound action (prepare and poll), the resource (takeover candidate for one exact unmanaged Compose project), and the required source (a fresh discovery). This clearly distinguishes it from siblings like confirm_application_compose_adoption and get_application_compose_adoption.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: it must be used on an exact unmanaged Compose project from a fresh discovery, and it signals a prerequisite via 'Requires applications:manage.' However, it does not explicitly name alternatives (e.g., confirm_application_compose_adoption) or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_account_vpnQuote account VPNAInspect
Create an account VPN quote for common checkout when vpn_account_order is advertised. Pass its owned attachment network when required; no provisioning or charge occurs before payment. Uses prepare_after_payment=true. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | Yes | ||
| network_id | No | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Richly exceeds the annotations: it states no provisioning or charge occurs before payment, that prepare_after_payment=true, the required networking:read/manage scopes and full-API/spend-cap prerequisites, backend ownership/2FA enforcement, and the exact polling contract (in_progress flag, reason_code/reason_kind semantics, next_check_seconds). It also covers idempotency-key reuse and 'payment acceptance is not resource readiness'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the remainder is a dense run-on mixing permissions, polling, retry, pricing and payment concerns with no formatting or paragraph breaks. Most sentences earn their place, yet the lack of structure makes it hard to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a complex lifecycle, the description takes on the burden and largely succeeds, documenting the pending-operation model, polling, failure detection and payment-vs-readiness distinction. Minor gaps remain around what the quote response carries beyond gross_amount in EUR.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and tier has no schema description, but the text adds real meaning: network must be an 'owned attachment network when required', tier must be a 'supported live catalog tier', and the same Idempotency-Key spans quote and confirmation. These enrich the schema rather than repeat it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Create an account VPN quote') plus the triggering condition ('when vpn_account_order is advertised'), which distinguishes it from renewal quotes like quote_vpn_period_renewal. It never explicitly names a sibling, so an agent must infer the boundary, but the scope is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear precondition for use ('when vpn_account_order is advertised') and a workflow ('Read current capabilities and owned resource state first; obtain approval for the exact change'). No alternatives or when-not-to-use are named, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_application_data_restoreQuote application data restoreAIdempotentInspect
Create a short-lived quote for one exact application restore selection. This does not charge or restore anything. Read get_application_installation and list_application_restore_points first, then disclose quote.total_charged and available balance to the user. For API keys this requires paid operations enabled, applications:restore, daily/monthly spend caps, and a fresh idempotencyKey that must also be used for restore_application_data.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| idempotencyKey | Yes | Client-global unique key used for both this quote and its exact restore confirmation. | |
| backup_point_id | Yes | Opaque eligible backup-point UUID returned by list_application_restore_points | |
| installation_id | Yes | Managed application installation UUID | |
| expected_revision | Yes | Current installation revision returned by get_application_installation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false (a non-destructive mutation), but the description goes well beyond by explaining it doesn't charge or restore, that for API keys it requires paid operations, applications:restore, spend caps, and a fresh idempotencyKey. These are exactly the behavioral constraints annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, all front-loaded with the core purpose first, then the negative scope, then prerequisites, then auth requirements. Dense but each sentence carries distinct value. Slightly crowded for a single paragraph but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description wisely names quote.total_charged and available balance as the fields to surface, compensating for the missing return schema. It covers prerequisites, auth gating, and idempotency flow. Minor gap: it doesn't state quote lifetime despite 'short-lived'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters including patterns, UUID formats, and revision semantics. The description adds the critical coupling that the same idempotencyKey must be used for the subsequent restore call, which is genuinely useful but limited beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (create a quote) and resource (application restore selection), and its scope is distinct from siblings like restore_application_data (which acts) and get_application_data_restore (which reads). The description immediately clarifies this does NOT charge or restore, sharply separating it from the action sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names prerequisites (read get_application_installation and list_application_restore_points first), the alternative flow (the idempotencyKey must be reused for restore_application_data), and the required disclosure step (quote.total_charged and available balance to the user). This is a full when/how-to-use contract.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_automatic_ssl_domainQuote Automatic SSL domainAIdempotentInspect
Quote one additional DNS name for an active Automatic SSL subscription without charging. A base name includes www and a wildcard includes its base name, so covered names cannot be purchased twice. Disclose the final VAT-inclusive EUR total before ordering. Requires paid operations, certificates:order, spend caps, and a client-global idempotencyKey reused for confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | One canonical DNS name to add. A base name includes www; a wildcard includes its base name. | |
| idempotencyKey | Yes | Client-global unique key used for this domain quote and its exact confirmation | |
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds critical context beyond annotations: the quote does not charge, requires paid operations, certificates:order, spend caps, and a client-global idempotencyKey reused for confirmation. It also states that covered names cannot be purchased twice. Annotations cover idempotency and safety, but this adds auth and business constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with purpose, then business rule, usage directive, and prerequisites. No fluff, though the third sentence is a directive to the caller and could be folded into usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains the key return value (VAT-inclusive EUR total) and all prerequisites. It does not describe the full quote response or its validity period, leaving minor gaps for a quoting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the domain and idempotencyKey semantics are already documented. The description largely repeats the schema's coverage rule for domain and key reuse, adding no new syntax or format details; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names the exact verb (Quote), the resource (one additional DNS name), and the scope (for an active Automatic SSL subscription, without charging). This scope distinguishes it from subscription-level quotes and from order_automatic_ssl_domain, even without naming siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the context: use it to quote a cost without charging and disclose the VAT-inclusive EUR total before ordering. It stops short of explicitly naming order_automatic_ssl_domain as the alternative or stating when not to use it, so it is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_automatic_ssl_renewalQuote Automatic SSL renewalAIdempotentInspect
Quote the next term of an owned renewable Automatic SSL subscription during its final 30 days without charging. The quote is bound to the exact current DNS-name set, renewal date, offer generation, and final VAT-inclusive EUR total. Requires paid operations, certificates:order, spend caps, and a client-global idempotencyKey reused for confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| idempotencyKey | Yes | Client-global unique key used for this renewal quote and its exact confirmation | |
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag idempotency and non-destructiveness; the description adds real behavior beyond that: 'without charging', the required paid operations / certificates:order scope / spend caps, and the fact that the quote is bound to the exact DNS-name set, renewal date, offer generation and VAT-inclusive total. That is precisely the non-obvious context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the scope and the 30-day window, with no filler. The second sentence is a dense comma-list of prerequisites, which is information-rich but slightly heavier reading than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the return-value burden and does so well, enumerating what the quote is bound to (DNS-name set, renewal date, offer generation, VAT-inclusive EUR total). Combined with the prerequisites, an agent has everything needed to call and then confirm.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds genuine meaning by explaining that the idempotencyKey is client-global and reused verbatim for the confirmation call, and by confirming the subscription id refers to a customer-owned subscription. It adds the cross-call semantics the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Quote) plus the precise resource and scope ('next term of an owned renewable Automatic SSL subscription'), which cleanly separates it from quote_automatic_ssl_subscription and quote_automatic_ssl_domain. An agent can distinguish it from its siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition and window: the subscription must be owned, renewable, and inside its final 30 days, and it notes the idempotencyKey is reused for confirmation, implying the quote->order_automatic_ssl_renewal workflow. It does not explicitly name a sibling alternative or a when-not-to-use case, so it stops just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_automatic_ssl_subscriptionQuote Automatic SSL subscriptionAIdempotentInspect
Create a short-lived exact quote for Automatic SSL without charging. Use an acme_subscription catalog product and its exact current EUR offer generation. The subscribed names may be used by compatible ACME clients on VPSnet or another provider. A base name includes its www alias; apex and wildcard are separate identifiers. Disclose the final VAT-inclusive EUR total before ordering. Requires paid operations, certificates:order, spend caps, and a client-global idempotencyKey reused for confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | Canonical subscribed DNS names. A base name includes its www alias; an apex and wildcard are separate names and may be ordered together. | |
| offer_id | Yes | Published EUR offer ID returned by the selected catalog product | |
| auto_renew | Yes | Explicitly choose whether the subscription remains eligible for separately prepaid future terms | |
| product_id | Yes | Published product ID returned by list_certificate_catalog | |
| idempotencyKey | Yes | Client-global unique key used for this quote and its exact order confirmation | |
| offer_generation | Yes | Exact offer generation returned by the catalog; stale generations are rejected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only say not-read-only, idempotent, non-destructive) by disclosing the quote is short-lived, that nothing is charged, the required 'certificates:order' scope, paid-operation/spend-cap dependence, and that the idempotencyKey is reused verbatim for confirmation. This is precisely the operational context an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the 'no charge' distinction are front-loaded, and the sentences are individually tight. It is somewhat long and mixes identity semantics (apex/wildcard), pricing advice, and permission requirements, but nothing is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and six required parameters, the description carries the burden well, covering the quote lifecycle, permission/idempotency prerequisites, and the pre-order pricing disclosure. The only gap is return-value specifics beyond 'short-lived', which is acceptable given no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds a constraint absent from the schema: the product must be an 'acme_subscription catalog product' with its 'exact current EUR offer generation'. The www-alias/apex/wildcard note duplicates the schema's own domains description, so the gain is incremental rather than comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a short-lived exact quote for Automatic SSL') and immediately distinguishes itself from the ordering sibling by noting 'without charging'. An agent can tell this apart from order_automatic_ssl_subscription without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: use an acme_subscription catalog product, exact current offer generation, and disclose the VAT-inclusive total 'before ordering', implying the quote-then-order workflow. It does not, however, name the alternative quote tools (quote_automatic_ssl_domain, quote_automatic_ssl_renewal) or state when-not to use this one, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_certificateQuote paid TLS certificateAIdempotentInspect
Create a short-lived quote for one exact paid TLS certificate or eligible renewal. This validates the current catalog generation, identifiers, customer contacts, and the public PKCS#10 CSR without charging or ordering. The response contains the final customer total in EUR including VAT. Disclose that exact total before order_certificate. The customer private key must never be supplied. Requires paid operations, certificates:order, spend caps, and a client-global idempotencyKey that must also be used for confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| csr | Yes | Customer-generated PEM PKCS#10 CSR. The private key must remain with the customer and must never be sent to VPSnet or an AI assistant. | |
| offer_id | Yes | Published EUR offer ID returned by the selected catalog product | |
| product_id | Yes | Published product ID returned by list_certificate_catalog | |
| renewal_of | No | Existing eligible certificate order UUID when quoting a renewal | |
| common_name | Yes | Primary certificate name and its validation method | |
| idempotencyKey | Yes | Client-global unique key used for this quote and its exact order confirmation | |
| offer_generation | Yes | Exact offer generation returned by the catalog; stale generations are rejected | |
| alternative_names | No | Optional unique subject alternative names; pricing is returned by quote_certificate | |
| technical_contact_id | Yes | Owned technical contact ID selected in the VPSnet certificate order form | |
| organization_contact_id | No | Owned organization contact ID when required for OV or EV validation | |
| administrator_contact_id | Yes | Owned administrator contact ID selected in the VPSnet certificate order form |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: it discloses that nothing is charged or ordered, that the catalog generation/identifiers/contacts/CSR are validated, the required permissions (paid operations, certificates:order, spend caps), and rules about the idempotencyKey and never supplying the private key. The readOnlyHint=false is consistent with quote creation rather than a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then validation behavior, cost disclosure, safety warning, and prerequisites in a logical order. Dense but nearly every sentence carries actionable information; it is only marginally longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, 11-parameter, no-output-schema tool, the description covers the key return value (EUR total incl. VAT), safety constraints, auth requirements, and the idempotency contract. It stops short of describing other return fields, but is otherwise sufficient to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already fully documents all 11 parameters, including the idempotencyKey's dual use for the quote and order confirmation. The description reinforces the CSR/private-key constraint but adds little parameter meaning beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create a short-lived quote') and resource ('one exact paid TLS certificate or eligible renewal'), and distinguishes the operation from ordering. An agent can tell it apart from order_certificate and list_certificates without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions this as the step preceding order_certificate ('Disclose that exact total before order_certificate'), naming the alternative and the condition that selects it. It also notes renewal eligibility, so the scope of valid inputs is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_domain_registerQuote domain registerAInspect
Create a VPSNet-priced domain registration quote. Returns quoteToken; does not submit the domain action. Requires domains:read plus paid domains:order scope/caps for API keys.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Registration period in years | |
| domain | Yes | Domain to register, e.g. example.lt | |
| nameservers | No | 2-13 nameserver hostnames; defaults to ns1/ns2.vpsnet.com. IP addresses are not accepted. | |
| whois_privacy | No | Hide public WHOIS contact details where supported. Defaults to the TLD setting. | |
| idempotencyKey | Yes | Unique key for this quote; sent as Idempotency-Key | |
| tech_contact_id | No | Technical contact ID | |
| admin_contact_id | No | Admin contact ID | |
| billing_contact_id | No | Billing contact ID | |
| registrant_contact_id | No | Registrant contact ID; defaults to account default contact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present, the description adds valuable context beyond them: it discloses the return value (quoteToken), clarifies that no domain action is submitted, and states the auth requirement (domains:read plus paid domains:order scope/caps for API keys). The readOnlyHint=false annotation is consistent with creating a persistent quoteToken resource, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler; the action, the key caveat (no submission), and the auth requirement are all front-loaded and each earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter quote tool with no output schema, the description covers the critical call-site facts: what it returns (quoteToken), what it does not do (submit), and the required scopes. Only the explicit next-step tool name and clearer guidance on when a quote is mandated are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters including defaults for nameservers, whois_privacy, and registrant_contact_id. The description adds no parameter-level detail, which is acceptable given the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a VPSNet-priced domain registration quote') with clear pricing scope. This cleanly separates it from the sibling quote_domain_transfer, quote_domain_renew, and confirm_domain_register without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'does not submit the domain action' implicitly defines the two-step quote-then-confirm flow and points the agent toward confirm_domain_register for actual submission. However, it does not explicitly name an alternative tool or state when a quote is required versus optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_domain_renewQuote domain renewAInspect
Create a VPSNet-priced renewal quote for an owned domain. Renewal pricing follows the existing domain record. Requires paid domains:renew scope/caps for API keys.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Renewal period in years | |
| domain | No | Owned domain name if domain_id is not used | |
| domain_id | No | Owned domain ID | |
| idempotencyKey | Yes | Unique key for this quote; sent as Idempotency-Key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-destructive and non-open-world, but the description adds real context beyond them: that this produces a quote (no charge), that pricing is inherited from the existing domain record, and that a specific paid scope is required. The remaining gap is what the quote yields or how long it remains valid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then pricing behavior, then the auth requirement. Every sentence carries information, though 'for an owned domain' and 'follows the existing domain record' slightly overlap.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say more about what a quote returns and how it is consumed (e.g. feeding confirm_domain_renew). It covers the essentials — action, pricing source, auth — but leaves the post-quote workflow unaddressed for a 4-parameter billing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so years, domain, domain_id and idempotencyKey are all documented in the schema itself. The description adds only the 'owned domain' constraint, which is helpful but marginal; baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Create a VPSNet-priced renewal quote') and scopes it to an 'owned domain', which distinguishes it from quote_domain_register and quote_domain_transfer. It does not explicitly name those siblings, but the resource is concrete enough for an agent to pick correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the renewal context and the stated auth prerequisite ('Requires paid domains:renew scope/caps for API keys'), which is genuine guidance. However, it never states when to prefer this over confirm_domain_renew or quote_domain_restore, nor that a quote precedes confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_domain_restoreQuote domain restoreAInspect
Create a restore quote for an owned domain in redemption. The final price is returned before payment. Requires paid domains:renew scope/caps for API keys.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Owned domain name if domain_id is not used | |
| domain_id | No | Owned domain ID | |
| idempotencyKey | Yes | Unique key for this quote; sent as Idempotency-Key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic safety profile (readOnlyHint false, destructiveHint false, openWorldHint false). The description adds meaningful context the annotations lack: that the quote returns a final price before any payment and that paid domains:renew scope/caps are required for API keys, which is a real auth prerequisite an agent must satisfy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information (purpose, return behavior, auth requirement) with the identifying scope front-loaded and zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully states that the final price is returned, and it covers the redemption pre-condition and scope requirement. It leaves the relationship to confirm_domain_restore implicit, but nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (domain, domain_id, idempotencyKey) are documented in the schema itself, so the baseline is 3. The description adds only the implicit notion of an 'owned' domain and no format or mutual-exclusion guidance beyond what the schema already gives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a restore quote') plus the precise pre-condition ('for an owned domain in redemption'), which cleanly separates it from quote_domain_register, quote_domain_transfer and quote_domain_renew without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the context in which it applies (a domain already in redemption) and places it in the payment flow ('the final price is returned before payment'), implying it precedes confirm_domain_restore. It does not state explicit exclusions or name the confirmation sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_domain_transferQuote domain transferAInspect
Create a VPSNet-priced domain transfer quote. Auth code is hashed into the quote payload and not returned. Returns quoteToken; does not submit the domain action. Requires domains:read plus paid domains:transfer scope/caps for API keys.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to transfer | |
| authCode | Yes | Transfer auth/EPP code | |
| nameservers | No | 2-13 nameserver hostnames; defaults to ns1/ns2.vpsnet.com. IP addresses are not accepted. | |
| whois_privacy | No | Hide public WHOIS contact details where supported. Defaults to the TLD setting. | |
| idempotencyKey | Yes | Unique key for this quote; sent as Idempotency-Key | |
| tech_contact_id | No | Technical contact ID | |
| admin_contact_id | No | Admin contact ID | |
| billing_contact_id | No | Billing contact ID | |
| registrant_contact_id | No | Registrant contact ID; defaults to account default contact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), it discloses non-obvious traits: the auth code is hashed into the payload and never returned, the call yields a quoteToken, it performs no domain mutation, and it requires domains:read plus paid domains:transfer scope/caps. This is exactly the security/scope context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the action and immediately followed by the critical side-effect and return-value facts. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a quote tool with no output schema, the description supplies the key facts: what it returns (quoteToken), what it does not do, the hashing behavior, and the auth/scopes. An agent can invoke it correctly without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning about authCode (hashed into the payload, not echoed back) and clarifies the quote/output contract via quoteToken. It does not touch the contact ID or nameserver parameters, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Create a VPSNet-priced domain transfer quote') and explicitly scopes it as quote-only ('does not submit the domain action'), which cleanly separates it from confirm_domain_transfer and quote_domain_register. No ambiguity about what is produced.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames this as the pre-submission step ('does not submit the domain action'), implying confirmation is a separate call, and states the required scopes. It stops short of naming the sibling to use next (confirm_domain_transfer), so it is strong context without an explicit alternative pointer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_network_productQuote network productAInspect
Create the network product's exact paid quote for COMMON CHECKOUT. No charge or stock preparation occurs here. prepare_after_payment=true is always sent. Catalog product load_balancer maps to request kind private_lb for tier nlb or proxy_lb for tiers alb_proxy_3/alb_proxy_5; vpn_gateway maps directly. Only use currently supported catalog tiers. Create with order_network_product after disclosure and approval. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| tier | Yes | ||
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare safety flags (readOnly=false, openWorld=true, idempotent=false, destructive=false). The description goes far beyond: it declares the fixed prepare_after_payment=true behavior, the auth scopes (networking:read / networking:manage) that defaults do not grant, backend-enforced ownership/feature/2FA locks, the required feature flags (networking:order, spend caps), and a full operational contract for polling (in_progress, reason_code, reason_kind waiting vs failure) plus idempotency-key reuse on transport uncertainty. None of this is available from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded correctly (what the tool does comes first), but the single dense paragraph carries some redundancy — 'Only use currently supported catalog tiers' is restated later as 'Choose a supported live catalog tier and its documented request kind' — and the error/polling contract is compressed into run-on sentences. For a tool of this complexity the length is defensible, but it is not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema, 4-required-param tool, the description covers authorization, feature gating, idempotency, approval workflow, and failure semantics thoroughly. The main gap is that it never states what the quote response actually contains beyond gross_amount in EUR (e.g. whether an operation/resource handle is returned and its key fields), leaving the polling instruction ('poll the returned operation/resource') without a described return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: network_id and idempotencyKey are documented in the schema, while kind and tier are not. The description compensates substantially by mapping catalog products to request kinds (load_balancer -> private_lb for tier nlb, proxy_lb for alb_proxy_3/alb_proxy_5; vpn_gateway directly) and constraining tiers to 'currently supported catalog tiers'. It doesn't fully enumerate the tier pattern or spell out the exact kind/tier pairing for every case, which keeps it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Create the network product's exact paid quote for COMMON CHECKOUT', and immediately bounds it ('No charge or stock preparation occurs here'). It explicitly distinguishes itself from the sibling order_network_product, and by implication from quote_network_product_renewal, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-to-hand-off: 'Create with order_network_product after disclosure and approval', plus prerequisites ('Read current capabilities and owned resource state first; obtain approval for the exact change'). It also states the constraint on inputs ('Only use currently supported catalog tiers'), which functions as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_network_product_renewalQuote network product renewalAInspect
Quote one next paid month for a network product; no charge. Preserve the returned quote and this idempotency key for renewal. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| resource_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds rich behavior beyond the annotations: permission requirements, ownership and 2FA enforcement, pending-operation semantics, polling and reason_code handling, transport-uncertainty recovery, spend caps, and payment-method limitations. These details are consistent with the annotations and greatly reduce ambiguity for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and is information-dense, but it is very long and contains repeated permission and preservation instructions. It would benefit from clearer structure or bullets despite covering important complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's operational complexity, the annotations carry only basic safety hints, and there is no output schema, the description is complete enough. It explains the quote lifecycle, required permissions, polling behavior, failure semantics, approval requirements, and payment constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds meaningful semantics for idempotencyKey by requiring the same key for quote and confirmation, preserving it for renewal, and forbidding automatic retries with a new key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, resource, and scope: 'Quote one next paid month for a network product; no charge.' It makes the renewal-quote purpose clear, but it does not explicitly contrast this tool with close siblings such as quote_network_product or renew_network_product.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives substantial when-to-use context, prerequisites, approval requirements, and catalog selection guidance. However, it does not explicitly name alternative sibling tools or state when this quote tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_network_public_addressQuote network public addressAInspect
Quote a new paid public address for common checkout; no charge. Optional network_id preflights attachment limits before payment. Always prepare_after_payment=true; confirm through order_network_product with matching target if attaching. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | No | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: permission scope (networking:read vs networking:manage, networking:order, spend caps), 2FA locks, idempotency-key reuse rules, never-auto-retry, and detailed polling semantics (poll on in_progress, reason_code/reason_kind, next_check_seconds). Annotations are not contradicted; 'no charge' plus openWorld/idempotent hints are consistent with the quoted/preflight behavior described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a dense run-on block that mixes purpose, auth, polling, idempotency, payment and catalog selection into long semicolon-chained sentences, with generic filler like 'Read current capabilities... first.' Only the first clause is front-loaded; the rest is hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, paid, permissioned, asynchronous quote operation with no output schema, the description supplies the full lifecycle: prerequisites, approval, idempotency, polling, failure interpretation and the pending-vs-ready distinction ('Payment acceptance is not resource readiness'). Nothing critical is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: network_id preflights attachment limits before payment, and the idempotency key must be identical across quote and confirmation. That extends the terse schema descriptions rather than merely restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Quote a new paid public address") and scopes it (common checkout, no charge), which distinguishes it from quote_public_address_renewal and order_network_product. It names order_network_product as the confirmation path, but does not explicitly contrast itself with the other quote_* siblings, so it stops just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete routing guidance: prepare_after_payment=true, confirm via order_network_product, read capabilities/owned state first, obtain approval before the change. It clearly establishes preconditions but never states when-not to use it (e.g., vs. a renewal or renewal-quote path).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_public_address_renewalQuote public address renewalAInspect
Quote the address's next month without charging; use the returned quote and this key for confirmation. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false) are non-contradictory and the description adds rich context beyond them: required scopes (networking:read/networking:manage, full/read defaults excluded), backend enforcement of ownership/feature/2FA locks, async semantics (in_progress, reason_code/reason_kind, waiting vs failure), transport-uncertainty handling, and no-charge behavior. This is far more than the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and nearly every following clause carries operational information (scopes, approval, polling, failure semantics). It is dense and somewhat repetitive around the idempotency key, but largely earns its length for a complex async mutation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and only two parameters, yet the description covers the full lifecycle an agent needs: permissions, approval, async polling with reason codes, failure vs waiting distinction, and non-retry guidance. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: the same Idempotency-Key binds quote and confirmation, it must be reused unchanged on recovery, and the address must be an owned resource. These cross-call semantics are not derivable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: quoting the address's next month without charging, plus the quote/confirm mechanic. It distinguishes the quote step from the confirmation step ('use the returned quote and this key for confirmation'), though it does not explicitly name the sibling renew/confirm tool. Clear enough that an agent can tell it apart from ordering a new public address.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides substantive workflow guidance: read capabilities/owned state first, obtain approval for the exact change, choose a supported live catalog tier, and poll the returned operation. It implies the quote-then-confirm sequence but does not explicitly name the confirm alternative, so the when-not boundary is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_temp_vmQuote on-demand server session (Coming soon)AInspect
Coming soon: customer ordering is disabled. The backend returns tempVmComingSoon before payment, host, IP, or service allocation.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | on-demand server profile returned by get_temp_vm_options | |
| ttl_minutes | No | Session duration from get_temp_vm_options.allowed_ttls | |
| idempotency_key | No | Optional new key for this quote. Omit it to generate one; the result returns the generated key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, destructiveHint=false, but the description adds the critical operational fact that the backend short-circuits with a 'tempVmComingSoon' response and that no payment, host, IP, or service allocation occurs. This is exactly the kind of behavioral context annotations cannot convey, though the description omits what a successful quote would eventually contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses, status front-loaded in the first words, with zero filler. Every sentence carries usable information for an agent deciding whether to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, all-optional, no-output-schema tool that is currently a stub, the description adequately covers what happens on invocation (tempVmComingSoon) and that side effects are absent. It is slightly incomplete in not describing the shape of a valid quote or availability timing, but given ordering is disabled this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents profile, ttl_minutes, and idempotency_key in detail (including enum, range, and pattern). The description adds nothing about any parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is dominated by availability status ('Coming soon: customer ordering is disabled') rather than stating what the tool does. A reader must infer from the name/title that this produces a price quote for an on-demand (temp) VM session; the phrase 'before payment, host, IP, or service allocation' only hints at its position in the ordering flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It effectively signals when NOT to rely on this tool ('customer ordering is disabled'), which is genuinely useful in context. However, it names no alternatives and gives no guidance on what an agent should do instead (e.g., get_temp_vm_options, list_temp_vms) or when the capability becomes available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_vpn_period_renewalQuote VPN period renewalAInspect
Quote the VPN's next month on its actual paid scope; no charge. Availability follows the owned gateway's current capability. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring the mutation/idempotency profile, the description carries the heavy lifting and does so well: no charge, required scopes (networking:read/manage, full/read defaults do not grant networking), backend enforcement of ownership, feature availability and service 2FA locks, approval-before-change, and the pending-operation polling contract. It also clarifies that an accepted operation is not proof of connectivity and that only in_progress=false with reason_kind=failure is a real failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is front-loaded and effective, but the remainder is a single dense run-on spanning permissions, backend enforcement, polling semantics, idempotency recovery, entitlement gating, catalog selection, currency disclosure and payment caveats. Given the volume of content, the lack of any structural grouping hurts scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation-style tool with no output schema, the description covers everything an agent needs: auth scopes, prerequisites, approval flow, idempotent recovery, the asynchronous operation contract and the reason_code/reason_kind vocabulary to poll on, plus spend-cap and payment caveats. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so gateway_id and idempotencyKey are already documented in the schema and the baseline is 3. The description adds lifecycle meaning to the key ('same Idempotency-Key is required for quote and confirmation', 'reuse only the original key and unchanged request'), but it largely restates the schema's own guidance rather than extending it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause names a specific verb and resource with scope: 'Quote the VPN's next month on its actual paid scope; no charge.' An agent immediately knows this is a non-charging price preview for a one-month VPN period. It does not, however, explicitly distinguish itself from the nearby sibling quote_network_product_renewal or renew_vpn_period.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational preconditions and sequencing: 'Read current capabilities and owned resource state first; obtain approval for the exact change', plus the required permissions (networking:read vs networking:manage) and the instruction to pick a supported live catalog tier. It stops short of stating when to prefer this quote over the sibling renewal/quote tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reapply_dns_zoneReapply DNS zoneADestructiveInspect
Retry publication of a published DNS zone whose apply_state is failed. Read get_dns_zone first: fix any apply_blocking_records before retrying. This queues the existing desired records for publication and can change public DNS answers; success with apply_state=queued does not mean publication completed. Poll get_dns_zone until apply_state is clean or failed, inspecting apply_error on failure. The API refuses zones that are not published, not failed, or still blocked by invalid records. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID from get_dns_zone with status=published and apply_state=failed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, but the description adds concrete operational context: it can change public DNS answers, apply_state=queued does not mean publication completed, and dns:write is required. The non-idempotent annotation is consistent with the 'retry queued publication' behavior described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six sentences, each carrying distinct information: precondition, prerequisite fix, async disclosure, polling guidance, refusal conditions, and auth scope. The purpose is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining the return/async semantics, which it does by clarifying that apply_state=queued does not mean completion and that apply_error should be inspected on failure. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already specifies zone_id as a published zone with apply_state=failed from get_dns_zone. The description reinforces this precondition and cross-references get_dns_zone, but adds no format or syntax detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb (retry publication), the resource (a published DNS zone), and the precise precondition (apply_state is failed). This clearly distinguishes it from siblings like apply_dns_template, verify_dns_zone, and get_dns_zone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs the agent to call get_dns_zone first, fix apply_blocking_records before retrying, and poll get_dns_zone afterward until apply_state is clean or failed. It also names the conditions under which the API refuses the call (not published, not failed, still blocked).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recheck_certificate_validationRecheck paid certificate validationAIdempotentInspect
Recheck validation for the specified DNS names in an owned paid TLS certificate order. Read current validation and list_certificate_actions first, then obtain explicit approval. Poll get_certificate_validation for the final result. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | ||
| idempotencyKey | Yes | Client-global key for this exact action; reuse only for an unchanged retry | |
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates | |
| acknowledge_certificate_action | Yes | The user approved this exact paid-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the bar is lower. The description adds real context beyond them: the certificates:manage permission requirement, the mandatory explicit-approval step, and the async nature resolved via get_certificate_validation polling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and then the operational workflow and permission requirement. Each sentence carries distinct value (scope, prerequisites, polling, auth), though the ordering is slightly list-like rather than flowing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden but resolves it by directing the agent to poll get_certificate_validation for the final result. Permission, approval, and prerequisite steps are covered, making it largely complete for this mutating, async operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and three of four parameters carry their own descriptions (idempotencyKey, certificate_order_id, acknowledge_certificate_action). The description only gestures at 'specified DNS names' for the undocumented domains param, so it neither needs to nor does compensate much beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Recheck validation) and resource (DNS names in an owned paid TLS certificate order), scoping to 'paid' which separates it from recheck_free_certificate. It does not, however, differentiate itself from close siblings like resend_certificate_validation or change_certificate_validation, so it falls just short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the correct sequence: read current validation and list_certificate_actions first, obtain explicit approval, then poll get_certificate_validation for the result. It names the sibling tools to consult and the follow-up tool, leaving little to inference about when and how to invoke this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recheck_free_certificateRecheck free TLS certificateAInspect
Recheck validation for an owned pending free TLS certificate after reading its current state. Approval is required; poll get_free_certificate for the final result. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| free_certificate_request_id | Yes | Customer-owned free-certificate request UUID returned by list_free_certificates | |
| acknowledge_free_certificate_action | Yes | The user approved this exact free-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=true, so the mutation profile is covered. The description adds value beyond them: approval is mandatory (matching the acknowledge parameter), the certificate must be owned and pending, the operation is asynchronous so results come from a separate poll, and certificates:manage is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, and the operation's premise (recheck validation) is front-loaded before the procedural details and permission note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description explains that the outcome must be retrieved by polling get_free_certificate, which resolves the natural ambiguity of an async recheck. Combined with annotations covering safety and the description covering permissions and approval, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are fully documented in the schema, including the const:true acknowledge flag. The description only reinforces that approval is required and that the request must be an owned pending certificate, adding little mechanism beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (recheck) plus resource and scope (validation for an owned pending free TLS certificate), which separates it from get_free_certificate (read) and recheck_certificate_validation (paid certificates). The 'owned pending' qualifier tells an agent exactly which resource state this applies to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear sequencing guidance ('after reading its current state') and names the follow-up tool for the outcome ('poll get_free_certificate for the final result'), plus the required permission (certificates:manage). It stops short of explicit when-not-to-use guidance (e.g. what to do if the certificate is not pending).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconcile_applicationReconcile applicationADestructiveIdempotentInspect
Reconcile an owned managed application with its declared configuration. Read the installation first; confirm the action, then poll installation and events until the queued operation completes. Requires applications:manage and a client-global idempotency key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirms this exact action | |
| idempotencyKey | Yes | Client-global unique key for this exact lifecycle request. Reuse only for an unchanged retry. | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it discloses the read-confirm-poll workflow, that the operation is queued and asynchronous, and that applications:manage plus a client-global idempotency key are required. Annotations already cover destructiveHint, idempotentHint, and openWorldHint, so the remaining gap is that it does not spell out exactly what reconciliation changes or risks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences and front-loads the purpose before moving to workflow and prerequisites. Every sentence contributes distinct information with no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four required parameters, no output schema, and rich annotations, the description is complete enough for correct invocation. It covers purpose, required scope, idempotency handling, confirmation, and the polling behavior needed after the queued operation completes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters in detail. The description only echoes the idempotency key requirement and does not add syntax or format guidance beyond the schema, which matches the baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Reconcile an owned managed application with its declared configuration.' This is clearer than a bare verb, but it does not explicitly distinguish the tool from related application lifecycle siblings such as repair_application, update_application, or rollback_application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear operational sequence: read the installation first, confirm the action, then poll installation and events until the queued operation completes. It also names required permission and idempotency key prerequisites. However, it does not name alternatives or state when this should be chosen over repair_application or update_application.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_automatic_ssl_subscriptionRefresh Automatic SSL statusAIdempotentInspect
Durably schedule an authoritative read-only certificate-authority refresh for one owned Automatic SSL subscription. Use it for stale or ambiguous state; it never repeats a provider mutation. Poll get_automatic_ssl_subscription and list_automatic_ssl_actions afterward. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover idempotency, non-destructiveness and open-world reach, and the description adds genuinely new context: the operation is durably scheduled (async), it does not re-issue a provider mutation, and it requires the certificates:manage permission. The 'read-only' phrasing sits in mild tension with readOnlyHint=false, but the description reconciles it by clarifying only the CA refresh itself is read-only while the scheduling is a persisted write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each earning its place: action and scope first, then the trigger condition, then post-call polling, then the permission prerequisite. No filler and the most important routing information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by telling the agent to poll get_automatic_ssl_subscription and list_automatic_ssl_actions for the outcome, and it covers the auth prerequisite. It stops short of describing what the immediate call returns (e.g. a job/action handle), which is the only remaining gap for an async scheduling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema already documents the UUID pattern and its source (list_automatic_ssl_subscriptions). The description adds the ownership constraint ('one owned ... subscription') but no format or lookup detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'schedule an authoritative read-only certificate-authority refresh for one owned Automatic SSL subscription.' The scope ('one owned Automatic SSL subscription') separates it from generic certificate siblings such as refresh_certificate or recheck_certificate_validation, and it names the read tools it is not (get_automatic_ssl_subscription, list_automatic_ssl_actions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger condition — 'Use it for stale or ambiguous state' — and directs the agent to the polling tools afterward. It also implies a when-not boundary ('it never repeats a provider mutation'), but does not explicitly route to cancel_automatic_ssl_subscription or other SSL siblings for non-refresh intents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_certificateRefresh certificate statusAIdempotentInspect
Durably schedule a read-only certificate-authority status reconciliation for one owned order. Use this for stale or ambiguous state; it never repeats an order or management mutation. Poll get_certificate and list_certificate_actions afterward. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=false, and openWorldHint=true, but the description adds information annotations cannot express: the operation is durably scheduled (asynchronous/deferred, hence the polling instruction), it does not touch the order or management layer, and it requires the certificates:manage scope. The 'read-only ... reconciliation' phrasing sits alongside readOnlyHint=false, but it is explained by 'Durably schedule' (scheduling is the write; the reconciliation itself is not), so this reads as clarification rather than contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences with no filler: the action and scope come first, then the trigger, then the required follow-up, then the auth requirement. Every sentence carries actionable information for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by telling the agent this is asynchronous and must be followed by polling get_certificate and list_certificate_actions, and it states the required permission. It does not say what the call itself returns (e.g., whether an action or job identifier comes back), which is the one remaining gap for a scheduling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented in the schema, including that the UUID comes from list_certificates. The description only adds the 'one owned order' ownership framing, which is already implied by the schema text, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Durably schedule a ... certificate-authority status reconciliation') scoped to 'one owned order'. This cleanly separates it from siblings such as recheck_certificate_validation, reissue_certificate, and get_certificate, which an agent could otherwise confuse with a status refresh.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Use this for stale or ambiguous state') and a follow-up workflow ('Poll get_certificate and list_certificate_actions afterward'), plus a scope boundary ('never repeats an order or management mutation'). It stops short of naming the alternative tool to use when the state is not stale or ambiguous, so it is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinstall_osReinstall OSADestructiveInspect
Reinstall OS on a VPS or qualified dedicated server. WARNING: destroys existing data; confirm with the user before reinstalling. Cloud VPS and Firecracker VPS: reinstall also deletes existing snapshots, so they cannot provide rollback after reinstall. Read get_os_options.snapshotDeletion first; when snapshots exist, set confirmSnapshotDelete to true only after the user explicitly confirms their deletion. A pending snapshot action blocks reinstall until it finishes. Container VPS has no snapshots. Dedicated servers erase every disk and have no snapshot rollback; get_os_options reports dedicated=true and confirmRequired=true. Pass confirmReinstall=true only after the user explicitly approves reinstalling that exact dedicated server and losing all disk data. Dedicated reinstall supports an optional sshKey from list_ssh_keys (otherwise the prior install key is reused), never rootPassword, and returns a reinstall job ID. VPS reinstall returns a noty UUID for acceptance; follow get_service_history for completion. Password rules: 6-40 chars, alphanumeric, must contain uppercase + lowercase + digit. OAuth requires services:reinstall; API keys require full access.
| Name | Required | Description | Default |
|---|---|---|---|
| sshKey | No | Dedicated only: account SSH key ID from list_ssh_keys; omitted reuses the installed key. | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| osVersion | Yes | OS version ID from get_os_options | |
| rootPassword | No | New root password (auto-generated if omitted). 6-40 chars, alphanumeric, must contain uppercase + lowercase + digit | |
| confirmReinstall | No | Dedicated only: true only after explicit user approval to reinstall this exact server and erase all its disks; never inferred or defaulted. | |
| confirmSnapshotDelete | No | Cloud VPS and Firecracker VPS only: set true only after the user explicitly confirms deletion of the existing snapshots shown by get_os_options.snapshotDeletion. They cannot provide rollback after reinstall. Never inferred or enabled automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, but the description goes well beyond them: it explains that data is destroyed, that snapshots are deleted with no rollback, that dedicated servers erase every disk, that pending snapshot actions block the call, the exact password constraints, and the differing return artifacts (reinstall job ID vs. noty UUID). This is exactly the extra context an agent needs for an irreversible operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WARNING and destruction consequence are front-loaded, which is the right priority ordering. The paragraph is dense and long, and the platform-specific rules (Cloud/Firecracker vs. Container vs. Dedicated) would scan faster as separated clauses, but nearly every sentence carries an operational constraint rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by describing what each variant returns (job ID for dedicated, noty UUID for VPS) and pointing to get_service_history for completion tracking. Combined with the destructive-action warnings and auth scopes, an agent has everything needed to call this correctly or correctly refuse to.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters, making 3 the baseline. The description adds genuine nuance beyond the schema, notably that dedicated reinstall supports an optional sshKey from list_ssh_keys but "never rootPassword," and restates the confirm flags' user-consent semantics. It does not add much on orderNo or osVersion beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Reinstall OS") plus the exact scope (VPS or qualified dedicated server), which immediately separates it from sibling tools like enter_service_rescue, rollback_snapshot, or restart_service. An agent can identify what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and preconditions: read get_os_options.snapshotDeletion first, pass confirmSnapshotDelete only after user confirmation, a pending snapshot action blocks reinstall, and confirmReinstall only after explicit approval. It also names the sibling tools to consult (get_os_options, list_ssh_keys, get_service_history) and states the auth requirements (services:reinstall scope or full-access API key).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reissue_certificateReissue paid TLS certificateADestructiveIdempotentInspect
Request a free same-name reissue of an owned paid TLS certificate using a new public CSR. Read the product, current order and list_certificate_actions; keep the paid DNS name set unchanged and obtain explicit approval. Never provide a private key. For an ambiguous outcome, refresh and read state instead of using a new key. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| csr | Yes | Customer-generated PEM PKCS#10 CSR. The private key must remain with the customer and must never be sent to VPSnet or an AI assistant. | |
| common_name | Yes | ||
| idempotencyKey | Yes | Client-global key for this exact action; reuse only for an unchanged retry | |
| alternative_names | No | ||
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates | |
| acknowledge_certificate_action | Yes | The user approved this exact paid-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true, and openWorld=true, so the description's contribution is additive: it names the required permission (certificates:manage), warns never to send a private key, and requires explicit approval. It stops short of describing rate limits or rollback semantics, but adds real context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, front-loaded with the core action before the constraints and warnings. Dense but every sentence carries operational value; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, permission-gated mutation with no output schema, the description covers permission requirements, approval, name constraints, and ambiguity handling. It is nearly complete, missing only details on failure modes or the shape of the resulting action record.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description meaningfully supplements it by tying 'new public CSR' to the csr parameter and 'keep the paid DNS name set unchanged' to common_name/alternative_names. It also implies the acknowledge_certificate_action flag via 'obtain explicit approval', though idempotencyKey and the exact order-id source are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('reissue of an owned paid TLS certificate') and scopes it as a 'free same-name reissue using a new public CSR'. This clearly separates it from siblings like create_free_certificate, renew_free_certificate, cancel_certificate, and refresh_certificate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites ('Read the product, current order and list_certificate_actions'), constraints ('keep the paid DNS name set unchanged'), and approval requirements. It also supplies an explicit when-not branch: on ambiguous outcome, refresh and read state rather than reissue with a new key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reissue_dns_zone_verificationReissue DNS zone verificationADestructiveInspect
Rotate the ownership TXT value for a DNS zone in pending_verification or verification_expired. First read get_dns_zone.zone.verification.record.value; reissue only when that value is null/unrecoverable or the customer requests rotation. Returns the new value in verificationRecord; the previous value stops being accepted, so update the TXT at the location indicated by zone.verification.next_step, then call verify_dns_zone. Reissuing does not itself verify the zone or reset its status. Rate limited to 5 per minute. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds crucial context: the previous value stops being accepted, existing TXT must be updated manually, reissuing does not itself verify or reset status, rate limit is 5/min, and dns:write scope is required. This goes well beyond the annotation hints and covers side effects, permissions, and limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause carries actionable information: preconditions, conditional logic, return value, side effect, rate limit, and scope requirement. It is front-loaded with the core action and follows a logical sequence of read → decide → reissue → update → verify.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explains what verificationRecord returns, the side effect on the old value, the required follow-up, and the authentication scope. Together with annotations covering safety, this provides a complete operational picture for correctly invoking and handling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is one parameter, so the schema already documents zone_id. The description references zone.verification.record.value and zone.verification.next_step, but these appear to be fields of get_dns_zone's output rather than parameters of this tool, so they add context for the workflow but not new semantics for zone_id. Baseline for low complexity with full coverage is 3; the workflow linkage to output fields justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (rotate/reissue) and resource (ownership TXT value for a DNS zone verification record), including a precondition state (pending_verification or verification_expired). It is clearly distinguishable from siblings like verify_dns_zone and get_dns_zone, which are explicitly referenced as related steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use conditions are given: reissue only when the existing TXT value is null/unrecoverable or the customer requests rotation. It also names the prerequisite read (get_dns_zone) and the required follow-up (verify_dns_zone), leaving no ambiguity about sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_automatic_ssl_domainRemove Automatic SSL domainADestructiveIdempotentInspect
Remove one eligible purchased DNS name from an owned Automatic SSL subscription. Read the subscription and list_automatic_ssl_actions to verify eligibility and the exact domain ID, then obtain explicit approval. For an ambiguous outcome, refresh and read state instead of using a new key. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | ||
| idempotencyKey | Yes | Client-global key for this exact action; reuse only for an unchanged retry | |
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions | |
| acknowledge_automatic_ssl_action | Yes | The user approved this exact Automatic SSL action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true, so the safety profile is known. The description adds genuinely new context: the required certificates:manage permission, the idempotency-key reuse rule, and the refresh-and-read recovery path on ambiguity. This goes meaningfully beyond the annotations, though it does not describe the resulting state of the subscription after removal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each front-loaded with the action, then prerequisites, then recovery behavior. No filler or restated annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, permission-gated mutation with no output schema, the description covers prerequisites, authorization, approval, and ambiguous-outcome handling. It could say more about the post-removal effect on the subscription, but the operational essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the description reinforces the meaning of domain_id (must be the exact, verified ID), certificate_subscription_id (read the subscription for it), and idempotencyKey (reuse only for an unchanged retry, not for ambiguity). This adds operational meaning beyond the raw type/pattern constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: removing one eligible purchased DNS name from an owned Automatic SSL subscription. That precision cleanly separates it from siblings like replace_automatic_ssl_domain, cancel_automatic_ssl_subscription, and the list/get Automatic SSL reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the prerequisite workflow: read the subscription and list_automatic_ssl_actions to confirm eligibility and the exact domain ID, then get explicit approval. It also tells the agent what to do on an ambiguous outcome. It stops short of naming the alternative sibling (replace_automatic_ssl_domain) for the swap-vs-remove decision, so it lands at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_network_load_balancer_listenerRemove network load balancer listenerADestructiveIdempotentInspect
Remove a listener and its members; deleting the last listener is refused. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| listener_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| load_balancer_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/idempotent/openWorld, but the description adds substantial behavioral context beyond them: the last-listener refusal, ownership/feature/2FA enforcement, the meaning of an accepted (pending, not live) operation, the polling contract on in_progress/reason_code, and explicit no-auto-retry recovery rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded with the action and the refusal rule first, then permissions, then the async/polling contract. Dense but each sentence carries real operational content; slightly long for a single destructive op.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and a destructive mutation, yet the description fully specifies the async result semantics (pending operation, in_progress flag, reason_kind waiting vs failure, preserve reason_code) and safe recovery, so an agent can call and follow up correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and listener_id, load_balancer_id, and idempotencyKey are already documented in the schema. The description reinforces idempotencyKey reuse semantics but never explains expected_generation (optimistic concurrency), which is the one undocumented parameter. Baseline 3 is appropriate given schema does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Remove a listener') and adds a scope constraint ('and its members; deleting the last listener is refused') that distinguishes it from add_network_load_balancer_listener and remove_network_load_balancer_member. An agent can tell exactly what this does and what it will refuse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions: needs explicit networking:read/networking:manage (defaults don't grant it), read current capabilities and owned resource state first, obtain approval for the exact change. It does not name sibling alternatives (e.g. when to remove the whole load balancer vs a listener), so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_network_load_balancer_memberRemove network load balancer memberADestructiveIdempotentInspect
Remove a member from rotation using the load balancer generation. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| load_balancer_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructive, idempotent, non-readonly): it specifies required scopes (networking:read vs networking:manage, with full/read defaults excluded), backend enforcement of ownership/feature availability/2FA locks, and the full async contract — accepted op is pending, poll next_check_seconds, interpret reason_kind and in_progress, preserve reason_code, reuse the original idempotency key on uncertainty. This is exactly the destructive/mutating context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every sentence carries operational content (permissions, enforcement, approval, async polling, retry policy). It is dense and run-on across several clauses, which taxes readability, but there is little true filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, async, no-output-schema mutation with 4 required params, the description supplies scopes, approval requirement, polling semantics, failure interpretation, and recovery rules. Nothing material an agent needs before invoking is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and already documents member_id, load_balancer_id, and idempotencyKey semantics. The description reinforces the idempotency-key preservation rule and references the generation, but adds little concrete syntax or format beyond the schema; a 3 baseline is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Remove a member from rotation using the load balancer generation.' This clearly distinguishes it from add_network_load_balancer_member and remove_network_load_balancer_listener. It does not explicitly name those siblings, keeping it just short of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operating context: read current capabilities and owned resource state first, obtain approval for the exact change, then poll the operation. It also says never to retry automatically, which is a real don't-do. It lacks an explicit when-to-use-this-vs-alternative routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renew_free_certificateRenew free TLS certificateAInspect
Request early renewal of an owned free TLS certificate after reading its current state. A customer_csr certificate requires a new public CSR for the same authorized names; managed-key certificates normally renew automatically. Approval is required. Issuance is asynchronous: poll get_free_certificate. An ambiguous response requires reading state before retrying. Requires certificates:manage; no private key is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| csr | No | Customer-generated PEM PKCS#10 CSR. The private key must remain with the customer and must never be sent to VPSnet or an AI assistant. | |
| free_certificate_request_id | Yes | Customer-owned free-certificate request UUID returned by list_free_certificates | |
| acknowledge_free_certificate_action | Yes | The user approved this exact free-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile, but the description adds substantial context beyond them: approval is required, issuance is asynchronous so the agent must poll get_free_certificate, an ambiguous response means re-read state before retrying (corroborating idempotentHint=false), and certificates:manage permission is required. This is exactly the extra behavioral detail annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and each clause (approval, async polling, retry rule, permission, key non-disclosure) earns its place. Dense but not padded; a reader can extract the operational rules in one pass.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent the operation is permission-gated, asynchronous, poll-based, and non-destructive to the private key. Nothing needed to invoke or follow up on this call correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real meaning beyond the schema by explaining that csr is only required for customer_csr certificates, that it must cover the same authorized names, and that no private key is ever returned, which the schema itself does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (renew) plus resource (owned free TLS certificate) and scope (early renewal). It cleanly distinguishes itself from get_free_certificate, create_free_certificate, cancel_free_certificate, and revoke_free_certificate siblings without the agent needing a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the trigger ('request early renewal ... after reading its current state'), the branch condition (customer_csr needs a new CSR; managed-key normally auto-renews, implying when not to use), and an explicit alternative/polling tool (get_free_certificate). Both when-to-use and when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renew_network_productRenew network productAInspect
Pay the exact previously disclosed renewal from account balance. The quote binds resource, paid term and price; use the same key and token. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| quoteToken | Yes | Exact quote_token returned by the quote; sent only as X-Quote-Token | |
| resource_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result | |
| acknowledge_charge | Yes | Set only after the user approves the exact quoted EUR total and intended purchase/renewal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Extremely rich beyond annotations: discloses required scopes (networking:read / networking:manage), that full/read defaults do not grant networking, ownership/feature/2FA enforcement, spend caps and enabled paid operations, the demolished ambiguity between pending and failure (in_progress vs reason_kind failure), polling via next_check_seconds, and that payment acceptance is not connectivity. This is far more than the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, but the body is a dense, run-on block mixing permissions, payment policy, polling semantics and error handling with little structural separation, and includes a fragment ('Preserve reason_code.'). It is information-rich but harder to parse than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden well: it explains the returned operation/resource, the in_progress flag, next_check_seconds polling cadence, and reason_code/reason_kind semantics. Combined with the auth and approval prerequisites, an agent has what it needs to call and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: the same Idempotency-Key is required for quote and confirmation, the acknowledge_charge gate follows explicit user approval of the quoted EUR total, and quoteToken must match the returned quote. These relationships are not visible in the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Pay the exact previously disclosed renewal from account balance.' It clearly concerns renewal/payment of a network product, distinguishing it from order_network_product and renew_network_public_address. It does not, however, explicitly name the sibling that produces the required quote (quote_network_product_renewal), leaving some routing inference to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear preconditions: read current capabilities and owned resource state first, obtain user approval for the exact change, preserve the exact quote, and select a supported live tier. It implies the quote must pre-exist but never names quote_network_product_renewal as the alternative step, so the workflow is well-scoped but not fully explicit about the sibling to call first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renew_network_public_addressRenew network public addressAInspect
Pay the approved address renewal from balance with its exact quote ID/token and original key. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| address_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| quoteToken | Yes | Exact quote_token returned by the quote; sent only as X-Quote-Token | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result | |
| acknowledge_charge | Yes | Set only after the user approves the exact quoted EUR total and intended purchase/renewal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false). It discloses scope requirements (networking:manage), 2FA locks, ownership enforcement, that acceptance is pending not connectivity, how to interpret in_progress/reason_code/reason_kind/next_check_seconds, and transport-uncertainty handling. This is essentially a full operational runbook.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, but it is a single dense paragraph mixing permissions, workflow, polling semantics, error interpretation, and retry policy, with repetition ('preserve the exact quote'/'Preserve reason_code', 'never automatically retry'/'never generate a new key'). Information-dense but unstructured and longer than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, no-output-schema mutation tool, it covers everything an agent needs: required scopes, prerequisites, idempotency, approval gate, and how to interpret the returned operation's in_progress/reason_code fields. Nothing material is left to the schema or inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds meaning: acknowledge_charge only after the user approves the exact quoted EUR gross_amount, the quoteToken must be the original issue, and the idempotencyKey must be reused unchanged on recovery. It links params to the approval workflow rather than restating types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Pay the approved address renewal from balance with its exact quote ID/token and original key.' It is clearly a paid renewal of a public address, distinct from quote_public_address_renewal or disable_public_address_auto_renew, though it stops short of explicitly naming the sibling quote tool it depends on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong preconditions and sequencing – 'Read current capabilities and owned resource state first', obtain approval, choose a supported catalog tier, preserve the quote, disclose gross_amount before approval. It never names the alternative tools (quote_public_address_renewal, order/disable auto-renew) to route the agent explicitly, so it is clear context rather than a full when/when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renew_serviceRenew serviceADestructiveInspect
Manually renew a service for a specific period. COST WARNING: this charges the account balance / creates an invoice immediately, and renewal payments are NON-REFUNDABLE once confirmed. Verify the service and period with the user before calling. Payment object: { payment: 1, successUrl: '', cancelUrl: '' } for balance payment. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| period | Yes | Period ID from get_period_options | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| payment | Yes | Payment object. For balance: { payment: 1, successUrl: '', cancelUrl: '' } |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that the call immediately charges the account balance or creates an invoice, that the payment is non-refundable, and that verification is required. It also specifies auth requirements (services:manage and a full-access API key). The destructiveHint=true annotation is fully consistent with this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical cost warning is front-loaded and every sentence contributes operationally relevant information. The payment-object sentence duplicates the schema slightly, keeping it from being maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, high-risk mutation with no output schema, the description covers cost, irreversibility, permissions, and pre-call verification well. It leaves minor gaps around return behavior and explicit routing to alternative renewal/auto-renew tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents period, orderNo, and the nested payment object in detail. The description repeats the balance-payment example and notes that period comes from get_period_options, but adds no meaningful syntax beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (renew), resource (service), scope (specific period), and mode (manually). This distinguishes it from automatic-renewal siblings, but it does not explicitly name alternative tools such as set_auto_renew or renewal-quote tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies manual-renewal use and instructs the agent to verify the service and period before calling. It also lists required permissions. However, it does not explicitly state when to use this versus alternatives like auto-renewal or quoting a renewal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renew_vpn_periodRenew VPN periodAInspect
Pay the VPN's approved next-month renewal from account balance using the exact quote and original key. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry. Requires full API access, networking:manage, enabled paid operations, networking:order and spend caps. Choose a supported live catalog tier and its documented request kind; preserve the exact quote; disclose its gross_amount in EUR before user approval. The same Idempotency-Key is required for quote and confirmation. API-key checkout supports the advertised account-balance payment method only. Payment acceptance is not resource readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| quoteToken | Yes | Exact quote_token returned by the quote; sent only as X-Quote-Token | |
| idempotencyKey | Yes | Stable Idempotency-Key for this exact intent; reuse unchanged on recovery, never generate a new key for an uncertain result | |
| acknowledge_charge | Yes | Set only after the user approves the exact quoted EUR total and intended purchase/renewal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, openWorld=true, idempotent=false, destructive=false. The description adds substantial non-obvious behavior: backend-enforced ownership/feature/2FA locks, spend caps, pending-vs-connectivity semantics, the in_progress/reason_code polling contract with next_check_seconds, and safe handling of transport uncertainty. This far exceeds what the annotations convey and is consistent with them (idempotent=false aligns with 'never automatically retry').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is correctly front-loaded, but the body is dense and repeats the in_progress/reason_code waiting concept across several sentences. It is information-rich rather than padded, yet a tighter edit could preserve the semantics with less bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema, 5-required-param mutation tool, the definition covers exactly what an agent needs: approval gating, idempotency discipline, polling semantics, permission requirements, and what 'accepted' does and does not mean. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so per-field documentation is already handled, but the description adds interaction meaning: quoteToken must be preserved exactly, the same Idempotency-Key must span quote and confirmation, acknowledge_charge is gated on disclosing gross_amount in EUR and user approval, and the request must be unchanged on recovery.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+mechanism: 'Pay the VPN's approved next-month renewal from account balance using the exact quote and original key.' An agent can distinguish this from quote_vpn_period_renewal, renew_network_product, and order_network_product without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong workflow context: read capabilities/owned state first, obtain approval for the exact change, execute only against an approved quote, and never auto-retry. It does not explicitly name the sibling that produces the quote or token, so the routing to alternatives is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repair_applicationRepair applicationADestructiveIdempotentInspect
Repair an owned managed application's runtime. Read current health and events first; confirm the action, then poll installation and events until the queued operation completes. Requires applications:manage and a client-global idempotency key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirms this exact action | |
| idempotencyKey | Yes | Client-global unique key for this exact lifecycle request. Reuse only for an unchanged retry. | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, idempotentHint, openWorldHint), the description discloses the required applications:manage scope, the need for a client-global idempotency key, the confirmation gate, and that the operation is asynchronous and must be polled to completion. That is meaningful behavioral context the structured fields do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose and the operational preconditions, with no filler. Every clause (health check, confirmation, polling, permission, idempotency) carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation with rich annotations, the description covers auth, idempotency, confirmation, and async completion. It could better state the blast radius (what repair actually changes on the runtime) or how it differs from restart/reconcile, but nothing essential to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already fully documented in the schema, including idempotencyKey reuse semantics and the confirmed gate. The description echoes the confirmation and idempotency-key concepts without adding new syntax or format detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Repair an owned managed application's runtime"), which is clear and concrete. It does not explicitly contrast itself with nearby siblings like restart_application, reconcile_application, or rollback_application, though the workflow framing implies a distinct remediation path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It prescribes a workflow: read health and events first, confirm the action, then poll installation and events until the queued operation completes. This tells the agent when to invoke it and what companions to use, but stops short of stating exclusions against the sibling repair-like tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_automatic_ssl_domainReplace Automatic SSL domainADestructiveIdempotentInspect
Replace one eligible purchased DNS name during its Automatic SSL correction window. Read the subscription and list_automatic_ssl_actions to verify the exact domain ID and allowed replacement type, then obtain explicit approval. For an ambiguous outcome, refresh and read state instead of using a new key. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | ||
| new_domain | Yes | ||
| idempotencyKey | Yes | Client-global key for this exact action; reuse only for an unchanged retry | |
| certificate_subscription_id | Yes | Customer-owned Automatic SSL subscription UUID returned by list_automatic_ssl_subscriptions | |
| acknowledge_automatic_ssl_action | Yes | The user approved this exact Automatic SSL action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true and openWorld=true, so the safety profile is covered. The description adds value beyond them: the required certificates:manage permission, the mandatory human-approved acknowledgement precondition, and explicit retry-key semantics for ambiguous outcomes. It does not describe the effect on the previously assigned domain or the response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose, then descending into preconditions, approval, and retry handling. Every sentence carries a distinct instruction, though the approval and retry clauses could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation this covers the essentials an agent needs: permission scope, eligibility precondition, approval requirement, and idempotent retry behavior. The main remaining gap is what happens to the replaced domain and confirming the replacement type options, but the description points the agent at list_automatic_ssl_actions for that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%; the three documented fields (idempotencyKey, certificate_subscription_id, acknowledge_automatic_ssl_action) are already explained in the schema. The description adds intent for the undocumented domain_id (verify the exact ID via list_automatic_ssl_actions) but says nothing substantive about new_domain beyond the requirement that it be an eligible purchased DNS name. Baseline 3 for partial coverage with marginal added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Replace one eligible purchased DNS name") plus the constrained context ("during its Automatic SSL correction window"), so an agent can tell it apart from generic DNS edits. It stops short of naming the obvious sibling alternative (remove_automatic_ssl_domain) or contrasting the two, so it does not reach a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It prescribes a concrete workflow before invocation: read the subscription, call list_automatic_ssl_actions to confirm the exact domain ID and allowed replacement type, then obtain explicit approval. It also gives recovery guidance (refresh and read state rather than minting a new key on an ambiguous outcome), though it never states an explicit when-not-to-use or names an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_restoreRestore service from backupADestructiveIdempotentInspect
PAID: restore a service from a backup point. Charges the restore price (+VAT) from the ACCOUNT BALANCE immediately and overwrites the WHOLE service disk with the backup content — everything written since that point is lost. DESTRUCTIVE and billed. This is a confirmation call, not a request for a price: read get_restore_status first, show the user the exact backup point and that status's exact total_charged, tell them the disk is replaced, and obtain explicit approval for BOTH the charge and the replacement. Only then set acknowledge_data_replacement and acknowledge_restore_charge, and pass the very figure you disclosed as expected_total_charged. The tool runs the backend's quote → confirm flow itself under one Idempotency-Key (generated per call unless idempotencyKey is given), so a single call is a single paid attempt. If the price has moved since you disclosed it, nothing is charged: the restore is refused as restoreQuoteChanged, and you must show the user the new total and get their approval again. Requires services:read, a full-access API key with paid operations enabled, the services:restore paid scope, and configured spend caps.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| idempotencyKey | No | Optional stable key to retry or replay ONE exact earlier restore attempt without paying twice. Omit it for a new restore — a fresh key is generated for the call. | |
| backup_point_id | Yes | Restore point ID from list_restore_points | |
| expected_total_charged | Yes | The exact VAT-inclusive total_charged you read from get_restore_status and disclosed to the user, passed back unchanged. Never re-read it just before this call: it is the customer's agreed price, and sending a freshly fetched number would defeat the fence that refuses a moved price instead of quietly charging it. | |
| acknowledge_restore_charge | Yes | True only after the user explicitly approves the exact total_charged returned by get_restore_status being taken from the account balance | |
| acknowledge_data_replacement | Yes | True only after the user explicitly confirms that the whole service disk is overwritten with this backup point and that everything written since it is lost |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, readOnlyHint=false and idempotentHint=true, but the description goes well beyond them: immediate balance charge, whole-disk overwrite with loss of everything written since the point, the internal quote→confirm flow under one Idempotency-Key, refusal on moved price, and the full auth/scope/spend-cap requirements. This is exactly the extra context a paid destructive tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical facts (paid, destructive, overwrites the whole disk) are front-loaded in the first sentence, followed by the required flow and then edge cases. It is a dense multi-clause block rather than short prose, but for a billed destructive operation nearly every clause earns its place; only minor phrasing could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers everything an agent needs: cost and billing timing, irreversibility, the approval protocol, idempotency/retry behavior, the price-change refusal and its recovery path, and all required permissions. Nothing material is missing for a 5-required-parameter paid mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema alone does not: it explains that expected_total_charged must be the disclosed figure rather than a freshly re-read one, that idempotencyKey turns a call into a replay of one exact attempt, and that the two acknowledge flags gate a specific user confirmation. These are intent semantics, not restatements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'PAID: restore a service from a backup point,' immediately distinguishing it from sibling restore paths (restore_application_data, rollback_snapshot) by naming the service-disk backup restore. The fail-fast refusal token 'restoreQuoteChanged' and the get_restore_status prerequisite further pin down exactly which operation this is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the required sequence: read get_restore_status first, show the user the exact backup point and its total_charged, obtain explicit approval for BOTH the charge and the disk replacement, and only then call with the acknowledgements set. It also states when NOT to proceed and what to do if the price moved. Nothing about when/how to use this is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resend_certificate_validationResend paid certificate validationAIdempotentInspect
Resend validation instructions for an owned paid TLS certificate order. Read current validation and list_certificate_actions first, then obtain explicit approval. Poll get_certificate_validation for the final result. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| idempotencyKey | Yes | Client-global key for this exact action; reuse only for an unchanged retry | |
| certificate_order_id | Yes | Customer-owned certificate order UUID returned by list_certificates | |
| acknowledge_certificate_action | Yes | The user approved this exact paid-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, idempotent=true, destructive=false, openWorld=true), and the description adds context beyond them: the required 'certificates:manage' scope, the approval gate, and the fact that the action is a resend-then-poll flow. It does not say what the resend physically does (e.g., emails the contact) or how long polling should continue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then prerequisites, then follow-up, then permission requirement in four tight sentences with no filler. Slightly fragmented into imperative fragments, but every sentence carries an instruction the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-read-only tool with no output schema, the description supplies the missing elements: prerequisites, approval requirement, polling follow-up, and the auth scope. What an agent needs to invoke it correctly is largely present, though the side effect of the resend and retry/idempotency behavior are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented (idempotency key semantics, certificate_order_id origin, acknowledge flag). The description's 'obtain explicit approval' loosely maps to acknowledge_certificate_action but adds no syntax or constraint detail beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resend validation instructions for an owned paid TLS certificate order'), and the word 'paid' implicitly separates it from the free-certificate tools. It does not explicitly differentiate itself from close siblings like recheck_certificate_validation or change_certificate_validation, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an ordered pre-flight workflow ('Read current validation and list_certificate_actions first, then obtain explicit approval') and a follow-up ('Poll get_certificate_validation for the final result'). It names sibling tools to consult, but never states when NOT to use this tool versus recheck/reissue/change validation, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_hostnameReset hostnameADestructiveInspect
Restore the immutable VPSnet-managed automatic hostname for a Container VPS, VPS, or Cloud VPS. Returns noty=null when no guest change is needed. Requires services:manage and a full-access API key; this route is not idempotency-keyed.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds real context beyond them: the required permission scope (services:manage), the full-access API key requirement, the non-idempotency-keyed nature, and the no-op signal (noty=null). These are meaningful behavioral disclosures for a mutation route.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences that front-load the purpose before prerequisites and side effects. No filler, though it is slightly dense with qualifications.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with annotations covering the safety profile and a fully documented single parameter, the description supplies enough operational context (auth, idempotency, no-op return). No output schema is needed since return behavior is noted inline.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single well-documented orderNo parameter (format, length, pattern). The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Restore the immutable VPSnet-managed automatic hostname' — with the scope restricted to Container VPS, VPS, or Cloud VPS. This implicitly distinguishes it from change_hostname (which sets a custom hostname), though it does not name that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides useful prerequisites ('Requires services:manage and a full-access API key'). However, it gives no explicit when-to-use guidance relative to change_hostname or get_hostname, so the agent must infer which hostname tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_applicationRestart applicationADestructiveIdempotentInspect
Restart an owned managed application. This interrupts service. Confirm the interruption, then poll installation and events until the queued operation completes. Requires applications:manage and a client-global idempotency key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirms this exact action | |
| idempotencyKey | Yes | Client-global unique key for this exact lifecycle request. Reuse only for an unchanged retry. | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: 'This interrupts service' conveys concrete destructive impact, plus the applications:manage permission requirement and the client-global idempotency key. It also discloses that the operation is queued/asynchronous and must be polled to completion, which the annotations alone do not express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences with no filler: identity, impact warning, and required workflow plus prerequisites. The action and its risk are front-loaded ahead of the procedural detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, annotation-covered mutation with no output schema, the description covers impact, permissions, idempotency, and the follow-up polling loop. It omits failure/recovery behavior (e.g. what happens if the queued restart fails), but is otherwise sufficient to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters thoroughly (orderNo format, idempotencyKey uniqueness, confirmed semantics). The description reinforces the idempotency key as client-global and the interruption confirmation but adds little the schema does not already carry, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Restart') and resource ('owned managed application'), which is enough to distinguish it from start_application/stop_application. However, it does not explicitly differentiate from the sibling restart_service, leaving a small ambiguity for an agent choosing between application- and service-level restarts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operational sequence: confirm the interruption, then poll installation and events until the queued operation completes. This tells the agent when and how to proceed, but it names no alternatives and no when-not-to-use condition (e.g. vs reinstall or repair).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_serviceRestart serviceADestructiveInspect
Restart a VPS. Returns a numeric event id; follow it with wait_for_event. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, so the safety profile is already covered. The description adds genuinely new context beyond annotations: it discloses the async event-id return, the required services:manage scope and full-access API key, and the wait_for_event follow-up.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the effect, then the return value, then the permission requirement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with no output schema, it covers the side effect, async handoff and auth prerequisites, which is enough to invoke it correctly. Only the return payload's pagination/format nuance is unstated, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the orderNo parameter is fully documented in the schema, so the baseline of 3 applies. The description adds no further meaning to the parameter itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Restart a VPS'), which is clearly distinguishable by name from start_service/stop_service siblings. It stops short of explicitly naming or contrasting those alternatives in the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds actionable context for what to do next ('follow it with wait_for_event') and states the required scopes. It implies but never spells out when a restart is preferable to start_service or stop_service.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_application_dataRestore managed application dataADestructiveIdempotentInspect
Pay for and queue replacement of only the selected managed application's declared data from one eligible nightly server backup. First call quote_application_data_restore, disclose its exact total charge, and obtain explicit approval for both that charge and replacement of current data. Use the exact quote token and same idempotency key. The worker derives every path, excludes secrets and unrelated Docker/server data, and requires rollback capacity. Requires applications:manage; API keys additionally require paid operations, applications:restore, and spend caps.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| quote_token | Yes | Exact short-lived quote token returned by quote_application_data_restore | |
| idempotencyKey | Yes | Client-global unique key. Reuse it only to replay this exact restore request. | |
| backup_point_id | Yes | Opaque eligible backup-point UUID returned by list_application_restore_points | |
| installation_id | Yes | Managed application installation UUID | |
| expected_revision | Yes | Current installation revision returned by get_application_installation | |
| acknowledge_restore_charge | Yes | True only after the user explicitly approves the exact total_charged returned by quote_application_data_restore | |
| acknowledge_data_replacement | Yes | True only after the user explicitly confirms replacement of the current declared application data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true, readOnly=false, but the description adds substantial non-obvious behavior: the worker derives paths, excludes secrets and unrelated Docker/server data, requires rollback capacity, and specifies the exact permission scopes (applications:manage plus paid operations, applications:restore, spend caps for API keys). This goes well beyond what the structured fields convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then the workflow prerequisites, then behavioral constraints and permissions. Dense but every sentence carries operational weight; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, billable mutation with no output schema and no annotations gap, the description covers the workflow, the safety guards (approval, exclusions, rollback), and auth requirements. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds value by tying quote_token and idempotencyKey to their originating quote and replay semantics, reinforcing correct usage. It does not add much for the remaining six parameters, so it lands just above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (restore / pay for and queue replacement) and the exact resource (only the selected managed application's declared data from one eligible nightly server backup). The scoping language ('only the selected', 'declared data') distinguishes it from generic restore siblings like request_restore and rollback_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the prerequisite call (quote_application_data_restore), the required approval steps, and the token/key reuse rule. The sequencing is fully specified with no inference left to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_serviceResume serviceAInspect
Resume a suspended Cloud VPS (KVM/VDS) service. Changes service state back to running. Returns a tracking event ID. VDS/Cloud VPS only; the service must be suspended. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it is a non-destructive mutation (readOnlyHint=false, destructiveHint=false), and the description adds genuinely new context: it requires services:manage, a full-access API key, and a suspended target. It also notes a tracking event ID is returned, useful since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and state change, then preconditions, then auth. Every sentence carries information; only the restatement of state change is mildly redundant with the opening.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with no output schema, the description covers action, resulting state, platform restriction, precondition, auth requirements, and return value. It omits only error/edge behavior (e.g., what happens if the service is not suspended), a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single orderNo parameter (with pattern, length, and example) is fully documented in the schema. The description adds only the implicit notion that the target must be a suspended VDS/Cloud VPS order, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Resume a suspended Cloud VPS (KVM/VDS) service') and the resulting state change ('back to running'), which distinguishes it from start_service/restart_service. It does not name a sibling alternative explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions and scope: 'the service must be suspended' and 'VDS/Cloud VPS only'. This tells the agent when the call is valid and when it is not, though it never names the alternative to use for a non-suspended service.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retire_network_security_policyRetire network security policyADestructiveIdempotentInspect
Retire the policy only after its server ports are gone. Removing firewall policy requires explicit user approval. Poll get_network_security_policy for each affected network (policies[].network_id); these receipts are not generic network operation IDs. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructive, idempotent, and open-world behavior, but the description adds substantial context beyond them: explicit user approval, backend enforcement of ownership/feature availability/2FA locks, pending-versus-failure semantics for accepted operations, polling on in_progress with reason_code/reason_kind, and idempotent recovery rules on transport uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and approval requirements, and almost every sentence conveys operational guidance needed for a destructive, asynchronous tool. It is dense but largely earns its length, though there is some redundancy around approval and idempotency key handling that keeps it from being maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex destructive tool with no output schema, the description covers the important return-state semantics: polling the operation/resource, interpreting in_progress and reason_kind, and preserving reason_code. It is missing an explanation of expected_generation and could clarify what 'server ports are gone' means, but overall it is substantially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, and the description reinforces idempotencyKey handling but mostly repeats what the schema already says about preserving the key on uncertain recovery. It does not explain expected_generation, which is the parameter lacking any schema description, so it does not fully compensate for the remaining coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Retire the policy only after its server ports are gone,' and clarifies that this is a firewall policy removal requiring approval. It also points to get_network_security_policy for related reads, giving enough context to distinguish this tool from generic network operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear precondition ('only after its server ports are gone') and required permissions ('networking:read' vs 'networking:manage'), and says to read capabilities and obtain approval first. However, it does not explicitly name sibling alternatives such as retry_network_security_policy or when to choose those over this operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_network_security_policyRetry network security policyADestructiveIdempotentInspect
Retry the failed network security policy using its current desired state. The pending policy may replace firewall rules and remove network access; inspect its desired state first. Poll get_network_security_policy for each affected network (policies[].network_id); these receipts are not generic network operation IDs. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that the pending policy may replace firewall rules and remove network access, the exact permission scopes required (networking:read vs networking:manage, and that full/read defaults do not grant networking), backend enforcement of ownership/feature/2FA, and the full polling contract (in_progress, reason_code/reason_kind, next_check_seconds). It also explains transport-uncertainty recovery with the original idempotency key, which is rich context the annotations alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by the destructive warning, then permissions and polling semantics in a logical order. It is dense and long for a retry operation, but nearly every sentence carries operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-semantics burden and does so well: an accepted operation is pending, not proof of connectivity, and the agent is told how to poll in_progress/reason_code and how to recover from transport uncertainty. For a destructive, open-world mutation with three parameters, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: it clarifies that policies[].network_id is the affected network to poll and that the idempotencyKey must be preserved with the unchanged body on uncertain recovery. It does not add format detail beyond the schema for project_id, but the added idempotency semantics push it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Retry the failed network security policy using its current desired state') and distinguishes the action from the read path by pointing to get_network_security_policy for polling. It does not explicitly contrast with the closest sibling, retire_network_security_policy, so sibling differentiation is partial rather than complete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear preconditions: inspect the desired state first, read current capabilities and owned resource state, obtain approval for the exact change, and poll the correct sibling (get_network_security_policy) rather than generic operation IDs. It does not name when this should be preferred over retire_network_security_policy or other remediation paths, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_private_networkRetry private networkADestructiveIdempotentInspect
Retry the failed current network operation only; preserve its current generation. It may resume a failed deletion or settings change, so inspect the failed operation before retrying. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Substantially exceeds the annotations. It discloses that a retry may resume a failed deletion or settings change (the destructive dimension), the required networking:read/networking:manage scopes and that defaults do not grant them, backend-enforced ownership/feature/2FA locks, and the idempotent-key preservation rule on uncertain recovery. The polling contract (in_progress semantics, reason_kind, next_check_seconds) is behavioral detail no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and scope, then layers permissions, polling, and failure semantics in a logical order. It is dense and long, but for a destructive, permission-gated, asynchronous retry most sentences carry operational weight rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema the description still explains what comes back (an operation/resource with in_progress and reason_code) and how to interpret it, plus failure vs. waiting semantics and transport-uncertainty handling. Nothing an agent needs to call this destructive, idempotent retry safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage the baseline is 3. The description does add meaning for two params — it says to preserve the current generation and the idempotency key on uncertain recovery — but expected_generation itself has no schema description and the description does not explain its format or what value to supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (retry) and object (the failed current network operation), plus the critical scope constraint 'only' and 'preserve its current generation.' This clearly separates it from siblings like retry_private_network_port and retry_network_security_policy without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions: inspect the failed operation first, read current capabilities and owned resource state, obtain approval for the exact change. It never names a competing sibling or an explicit 'do not use when,' but the context for invoking it is well specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_private_network_portRetry private network portADestructiveIdempotentInspect
Retry the failed current port operation with the PORT generation and any required restart approval. Inspect the failed operation: a detach retry can remove the server's private connectivity. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| port_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| restart | No | Only after the user authorizes a required restart from attachment-candidates; omit otherwise | |
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations with decisive behavior: a detach retry can remove private connectivity, required auth scopes (networking:read vs networking:manage, and that full/read defaults do NOT grant networking), backend-enforced ownership/feature/2FA locks, and the crucial 'accepted != connectivity' caveat. It also explains the in_progress/reason_kind/reason_code polling protocol and prohibits automatic retry — far richer than the destructive/idempotent hints alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It front-loads the core action and the riskiest fact (detach retry removes connectivity) early, which is good. However, it is a very dense, multi-clause paragraph heavily loaded with jargon (reason_kind waiting, next_check_seconds, in_progress) that reads as a concatenated spec rather than cleanly separated guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 5-parameter, destructive, open-world async operation with no output schema, the description covers the critical unknowns: safety, auth, idempotency, and result-polling semantics. It is nearly self-sufficient; only the return payload shape and any rate/pagination limits are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema already documents most parameters. The description adds meaning by tying the action to 'the PORT generation' and by warning that 'restart' is only for an approved restart and the idempotency key must be preserved unchanged. expected_generation remains undocumented in both places, so no extra credit beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (retry the failed current port operation) and the generation/approval mechanics involved. It distinguishes itself from attach_* by naming the 'failed current operation' scope, but it never explicitly names its closest siblings like retry_private_network, so the reader must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions: 'Inspect the failed operation first', 'Read current capabilities and owned resource state first; obtain approval for the exact change', and 'reuse only the original key and unchanged request' on transport uncertainty. It stops short of naming an alternative tool or spelling out when not to retry at all (e.g. abandon instead of retry).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_ddns_tokenRevoke DDNS tokenADestructiveInspect
Revoke a DNS updater token (DDNS or ACME). Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID | |
| token_id | Yes | DDNS token ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known, and the description adds a genuine behavioral detail beyond them: the auth requirement (dns:write) and the token scope (DDNS or ACME). It does not state irreversibility or what precisely happens to the credential, but it clears the lowered bar set by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler, and the core action is front-loaded ahead of the secondary auth note. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, two-parameter tool with full schema coverage and no output schema, the description covers what is destroyed, the token types affected, and the required permission. Minor omissions (irreversibility, how to obtain a token_id) keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so zone_id and token_id are already documented as 'DNS zone ID' and 'DDNS token ID'. The description adds no additional meaning about parameter format, sourcing, or constraints, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Revoke) and resource (DNS updater token), and the parenthetical '(DDNS or ACME)' scopes which token types are affected. It is clearly distinguishable from siblings like create_ddns_token and list_ddns_tokens without opening their schemas, though it does not explicitly name any alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The permission requirement ('Requires dns:write when using an API key') gives useful invocation context, but there is no explicit when-to-use guidance, prerequisites, or pointer to related operations such as list_ddns_tokens to find a token_id first. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_free_certificateRevoke free TLS certificateADestructiveInspect
Revoke an owned free TLS certificate after checking its state and obtaining explicit user approval. Revocation invalidates the certificate; read get_free_certificate for the final state. Requires certificates:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| free_certificate_request_id | Yes | Customer-owned free-certificate request UUID returned by list_free_certificates | |
| acknowledge_free_certificate_action | Yes | The user approved this exact free-certificate action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, readOnly=false, idempotent=false, openWorld=true, so the safety profile is covered. The description adds meaningful context beyond them: revocation permanently invalidates the certificate, requires certificates:manage, and the follow-up read tool for observing the final state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and its gating preconditions, then the consequence and the permission requirement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema and strong annotations, the description covers permission needs, irreversibility, approval gating, and where to observe the result. The missing piece is disambiguating from cancel_free_certificate and explaining the reason enum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the id and acknowledge parameters are partly documented by the schema. The description's phrase 'obtaining explicit user approval' implicitly maps to acknowledge_free_certificate_action, but it adds nothing about the reason enum or the required UUID format. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Revoke an owned free TLS certificate') and scopes it to owned certificates. It does not, however, distinguish itself from the very close sibling cancel_free_certificate, which an agent could easily confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions: check the certificate's state first and obtain explicit user approval before revoking. It also points to get_free_certificate for the resulting state. It stops short of naming when NOT to use it or the alternative tool (cancel_free_certificate).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_network_vpn_peerRevoke network VPN peerADestructiveIdempotentInspect
Revoke one device using the VPN GATEWAY generation. Its tunnel access ends after the next applied configuration. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| peer_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: tunnel access ends only after the next applied configuration, backend enforces ownership/feature availability/2FA locks, an accepted operation is pending not proof of connectivity, and it details polling semantics (in_progress flag, next_check_seconds, reason_kind waiting vs failure). It also covers idempotency-key preservation and a no-auto-retry rule, all of which annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and permission constraints are front-loaded in the first two sentences. The remainder is dense but each clause carries operational meaning (polling contract, reason_code handling, retry policy), so there is little pure filler despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, async mutation with no output schema, the description supplies everything an agent needs: permission model, ownership/2FA gates, pending-vs-success distinction, the polling loop contract, and recovery behavior on transport uncertainty. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% so the schema documents peer_id/gateway_id/idempotencyKey reasonably well, but the description adds real meaning: it explains the generation-based concurrency ('using the VPN GATEWAY generation' / 'ends after the next applied configuration') and how to reuse the idempotency key on uncertain recovery, which the schema only alludes to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (revoke) and resource (VPN peer) with precise scope: 'Revoke one device using the VPN GATEWAY generation.' It clearly distinguishes itself from create_network_vpn_peer, delete_network_vpn_gateway and detach_network_vpn_gateway by describing the single-peer revocation semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context and prerequisites: explicit networking:read/networking:manage permission requirements, 'Read current capabilities and owned resource state first; obtain approval for the exact change.' It tells the agent when to use it and what to do before calling, but does not name alternative sibling tools for related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_applicationRoll back applicationADestructiveIdempotentInspect
Queue the exact reverse transition advertised as type=rollback by get_application_installation. Read its release and backup, disclose replacement of current application data by that backup, and obtain explicit approval. Copy its blueprint_version and upstream_version as execution preconditions; arbitrary targets are refused. Poll installation and events for the final result. Reuse the same idempotency key and exact versions for an unchanged retry even after availability changes. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirms this exact action | |
| idempotencyKey | Yes | Client-global unique key for this exact lifecycle request. Reuse only for an unchanged retry. | |
| installation_id | Yes | Managed application installation UUID | |
| expected_upstream_version | Yes | Exact upstream_version from the advertised rollback release | |
| expected_blueprint_version | Yes | Exact blueprint_version from the advertised rollback release |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=true, openWorldHint=true, readOnlyHint=false), it discloses the specific destruction ('replacement of current application data by that backup'), the auth requirement ('applications:manage'), the preconditions that cause refusal ('arbitrary targets are refused'), and how to retry safely with the same idempotency key even after availability changes. This meaningfully extends what structured fields already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then a tight sequence of precondition, disclosure, polling, idempotency, and permission sentences, each carrying distinct operational information. Dense but justified by the destructive multi-parameter nature of the tool, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async destructive operation with no output schema, it tells the agent where the result surfaces ('poll installation and events'), what must be disclosed and approved, what the version preconditions are, and the retry contract. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: expected_blueprint_version and expected_upstream_version must be copied from the advertised rollback release and act as execution preconditions, and idempotencyKey must be reused only for an unchanged retry. This supplements the schema's field-level descriptions with cross-parameter rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rollback/queue the exact reverse transition) and resource (application), and pins the target to the transition 'advertised as type=rollback by get_application_installation', which clearly separates it from rollback_firecracker_snapshot and rollback_snapshot. An agent can identify scope and the source of truth without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit call sequence: query get_application_installation, read its release/backup, disclose the data replacement, and obtain explicit approval before invoking. Prerequisites and the required permission (applications:manage) are stated. It lacks an explicit when-not or direct alternative comparison, but the workflow context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_firecracker_snapshotRollback firecracker snapshotADestructiveInspect
Roll a Firecracker VPS back to a temporary snapshot. DESTRUCTIVE: disk state after the snapshot is lost. Confirm with the user before calling. Firecracker snapshots expire automatically but remain billed after the free window until deletion or expiry, so delete an unneeded snapshot to stop keep billing early. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| snapshot_id | Yes | Snapshot ID from list_firecracker_snapshots |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description goes much further than structured fields: it names exactly what is destroyed ('disk state after the snapshot is lost'), the required auth/scopes, and the snapshot billing/expiry behavior. That is material context an agent cannot get from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The destructive warning is correctly front-loaded in the first two sentences, and the auth requirement is tucked at the end appropriately. The mid-section billing/expiry sentence is tangentially about snapshot deletion rather than rollback and contains a garbled phrase ('to stop keep billing early'), which costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive mutation with no output schema, the description covers impact, prerequisites and auth, which is nearly everything an agent needs. It is silent on what state the service lands in after rollback completes (e.g., whether a restart or restore event must be awaited), which is the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both required params, so orderNo and snapshot_id are fully documented by the schema itself. The description adds no format or sourcing detail beyond 'temporary snapshot', so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Roll ... back') and a precisely scoped resource ('a Firecracker VPS ... temporary snapshot'), which distinguishes it from the sibling rollback_snapshot and from list/create/delete_firecracker_snapshot without needing either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives firm preconditions (confirm with the user, requires services:manage and a full-access API key) that tell an agent when it is permitted to call. It does not, however, explicitly contrast itself with the plain rollback_snapshot sibling, so the routing guidance is condition-based rather than alternative-based.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_snapshotRollback snapshotADestructiveInspect
Roll a Cloud VPS (KVM/VDS) service back to a disk snapshot. DESTRUCTIVE: disk state after the snapshot is lost. Confirm with the user before calling. Tip: take a snapshot before any risky or automated change — it's free for an initial window, so it's cheap insurance you can roll back to. DELETE the snapshot once the change succeeds and you no longer need it — after the free window it is billed per GB while kept (Cloud VPS snapshots do NOT auto-expire), so never leave snapshots lying around. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| snapname | Yes | Snapshot name from list_snapshots |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by specifying the exact consequence ('disk state after the snapshot is lost'), the confirmation requirement, the required authorization scope, and the billing/expiry behavior of snapshots. This is the kind of operational context an agent needs before invoking a destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the destructive warning, which is the right ordering. The trailing tips about taking snapshots before risky changes and deleting them to avoid billing, while genuinely useful, drift into the lifecycle of create_snapshot/delete_snapshot rather than this tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only two fully-documented required parameters, the description supplies the missing pieces an agent needs: irreversibility of the operation, confirmation, and auth scope. Nothing essential is absent, though it doesn't state what the call returns (e.g., an async operation/event handle).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: orderNo's format and snapname's origin ('from list_snapshots') are already fully documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Roll a Cloud VPS (KVM/VDS) service back to a disk snapshot') and qualifies the scope as KVM/VDS, which implicitly distinguishes it from the sibling rollback_firecracker_snapshot. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use, a confirmation prerequisite ('Confirm with the user before calling'), and a precondition (services:manage + full-access API key). It does not explicitly name alternatives such as rollback_firecracker_snapshot or point to list_snapshots for obtaining snapname, so routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_auto_renewSet auto renewADestructiveInspect
Enable or disable auto-renewal for a service. Note: enabling auto-renewal will automatically charge the account balance at each renewal (creating an invoice) without further confirmation. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | true to enable, false to disable | |
| period | No | Billing period ID (required when enabling) | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by spelling out the concrete consequence: enabling auto-renewal charges the account balance at each renewal, generates an invoice, and proceeds without further confirmation. It also discloses the required permission scope and API key type, which the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the core action first, then the high-impact billing caveat and prerequisites. No filler and no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, unauthenticated-visible mutation with no output schema, the description covers the key risk (silent charging), the auth requirement, and the target resource. It stops short of describing failure modes such as missing period on enable, though the schema already flags that requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – orderNo format, state semantics and the 'period required when enabling' condition are all documented in the schema. The description adds nothing about parameter values, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (enable/disable) and resource (auto-renewal for a service), clearly scoping it to service-level renewal. It does not, however, differentiate itself from specialized siblings like set_domain_auto_renew, disable_network_product_auto_renew, disable_vpn_auto_renew or disable_public_address_auto_renew, leaving the agent to infer that this is the generic service-level variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a precondition (requires services:manage and a full-access API key) which helps the agent judge whether a call can succeed. It never states when to prefer this tool over the resource-specific auto-renew siblings, so alternative routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_dnssecSet DNSSECADestructiveInspect
Enable or disable public DNSSEC signing for a native DNS zone. This changes the zone's DNSSEC chain and can affect validating resolvers. If parent DS records still exist outside VPSNet, remove them first and set parent_ds_removed=true before disabling signing. Secondary-zone DNSSEC is controlled on the primary server. Requires dnssec:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true to enable/sign the zone, false to disable/remove signing | |
| zone_id | Yes | DNS zone ID | |
| parent_ds_removed | No | When disabling DNSSEC for a zone whose parent DS is managed outside VPSNet, set true only after removing the parent DS records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true. The description goes beyond annotations by explaining the impact ('changes the zone's DNSSEC chain and can affect validating resolvers'), the ordering constraint with parent DS records, and the required permission scope (dnssec:manage). It stops short of describing reversibility or exact response behavior, but adds substantial safety and operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the primary action and impact, followed by the critical prerequisite and permission note. No wasted words, though it is dense and could be split for readability. Every sentence carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers impact, prerequisites, permission requirements, and secondary-zone handling. It is missing a note on what the response returns or whether the change is reversible, but given annotations already flag destructiveness, this is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds semantic meaning beyond the schema by explaining the parent_ds_removed flag in operational terms and clarifying that 'enabled' toggles signing on/off in the context of DNSSEC chain management. This is useful value-add over the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Enable or disable) and resource (public DNSSEC signing for a native DNS zone), and names the sibling concept get_dnssec implicitly by being the mutation counterpart. An agent can immediately distinguish this from get_dnssec or list_dns_zones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear prerequisites and conditions for use: remove parent DS records first and set parent_ds_removed=true before disabling, and secondary-zone DNSSEC is controlled on the primary server. It does not explicitly name an alternative tool, but the when-to-use context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_domain_auto_renewSet domain auto renewADestructiveInspect
Enable or disable automatic renewal for an owned domain. Auto-renew charges the VPSNet account; automatic domain renewal payments are non-refundable once confirmed.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | Whether automatic renewal should be enabled | |
| domain_id | Yes | Owned domain ID from list_domains | |
| renewal_period_years | No | Renewal period in years; defaults to the current domain setting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the bar is lower. The description adds valuable financial context—auto-renew charges the account and payments are non-refundable once confirmed—which is not present in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first front-loads the action, and the second adds the critical financial warning. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with financial consequences, the description covers purpose and the key non-refundable charge warning. It does not mention permissions or the optional renewal_period_years behavior, but the schema covers the latter and the annotations cover the safety profile, leaving only minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents enabled, domain_id, and renewal_period_years. The description adds no parameter-specific syntax or format details beyond implying the target is an owned domain, making the baseline of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Enable or disable) and resource (automatic renewal for an owned domain), clearly distinguishing it from sibling auto-renew tools like set_auto_renew or disable_vpn_auto_renew. An agent can identify the tool's scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose statement, but there is no explicit guidance on when to use this versus alternatives, nor any preconditions such as needing an owned domain or a payment method. The non-refundable warning hints at caution but does not function as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_domain_nameserversSet domain nameserversADestructiveInspect
Queue an asynchronous registrar nameserver change for an owned domain. When applied, the parent zone delegates the domain to the new public nameservers, replacing the prior delegation. Nameservers must be hostnames, not IP addresses; same-domain nameserver IP records are managed separately. This does not manage DNS records or PTR. Requires domains:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | Owned domain ID from list_domains | |
| nameservers | Yes | 2-13 nameserver hostnames, e.g. ns1.vpsnet.com, ns2.vpsnet.com. IP addresses are not accepted. | |
| idempotencyKey | No | Optional idempotency key for the queued domain action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, and the description meaningfully extends them: it discloses that the change is queued asynchronously, that applying it replaces the prior delegation in the parent zone, that inputs must be hostnames not IPs, and that a specific permission scope is required. This is exactly the extra behavioral context annotations cannot carry on their own.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action and consequences before the constraints and permission note. Every sentence contributes distinct information (async queueing, delegation replacement, input constraints, scope exclusions, auth) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation, the description covers the async execution model, the effect on the parent zone, input requirements, prerequisites, and what the tool deliberately does not touch. An agent has enough to invoke it correctly and safely without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so domain_id, nameservers, and idempotencyKey are already documented in the schema; the description largely restates the hostname-not-IP constraint and the 'owned domain' notion already implied by domain_id's schema text. Baseline 3 is appropriate since the schema does the heavy lifting and the description adds little parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a precise verb+resource+scope: queuing an asynchronous registrar nameserver change for an owned domain. It also distinguishes itself from adjacent tools by clarifying it replaces parent-zone delegation rather than managing DNS records, PTR, or same-domain glue/IP records. An agent can separate it from siblings like set_guest_nameservers or upsert_dns_record without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states clear context (owned domain, hostnames only) and an explicit exclusion ('This does not manage DNS records or PTR'), plus the required permission (domains:manage with an API key). It stops short of naming the specific alternative sibling tools an agent should reach for when DNS records or PTR are actually the target, so it is strong but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_guest_nameserversSet guest nameserversADestructiveInspect
Change DNS resolvers inside a supported Linux server. Read get_guest_nameservers first and confirm the exact service and resolver change; an unreachable resolver can interrupt guest internet connectivity. type=own restores the service's VPSnet defaults and clears saved custom addresses (omit ns1-ns4). type=custom requires ns1 and ns2, with optional ns3 and ns4; each is an IPv4 or IPv6 address, never a hostname. Returns unchanged=true when already configured, otherwise a noty UUID: follow wait_for_event, then verify the saved configuration and connectivity. This route is not idempotency-keyed; do not automatically replay an uncertain change. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| ns1 | No | First resolver IPv4 or IPv6 address; required for custom mode | |
| ns2 | No | Second resolver IPv4 or IPv6 address; required for custom mode | |
| ns3 | No | Optional third resolver IPv4 or IPv6 address | |
| ns4 | No | Optional fourth resolver IPv4 or IPv6 address | |
| type | Yes | own restores VPSnet default resolvers; custom replaces the saved resolver list | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive and non-idempotent, but the description adds substantial context beyond them: the connectivity risk of an unreachable resolver, that type=own clears saved custom addresses, that the route is not idempotency-keyed so an uncertain change must not be replayed, and the exact auth requirements (services:manage plus a full-access API key). This is genuinely additive rather than restating the hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its precondition, then mode semantics, then return behavior and auth. Roughly six dense sentences with little waste, though the return-value and verification guidance could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates fully: it documents the unchanged=true short-circuit, the noty UUID outcome, the follow-up wait_for_event and verification steps, plus auth and non-idempotency. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: it clarifies that ns1-ns4 must be omitted in own mode, that custom mode requires ns1/ns2 with ns3/ns4 optional, and that values are IPv4/IPv6 addresses and never a hostname. Only the orderNo parameter is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change DNS resolvers inside a supported Linux server') and scopes it to the guest OS, which cleanly separates it from sibling tools like set_domain_nameservers (registrar-side) and set_private_network_dns. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to call get_guest_nameservers first and confirm the exact service and resolver change before mutating. It also gives the selection rule between the two enum modes (own = restore defaults and clear custom addresses; custom = requires ns1/ns2) and warns that an unreachable resolver can interrupt guest connectivity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_network_default_security_policySet network default security policyADestructiveIdempotentInspect
Change accept/deny for servers without custom groups. Explicit custom groups remain restrictive. Use policy generation and default-group revision from get_network_security_policy. Poll get_network_security_policy for each affected network (policies[].network_id); these receipts are not generic network operation IDs. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| default_policy | Yes | ||
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes | ||
| expected_default_revision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations (destructive/openWorld/idempotent): explicit networking:manage vs networking:read permission requirements, backend ownership/feature/2FA enforcement, async 'accepted is pending, not proof of connectivity' semantics, the in_progress/reason_code polling contract, and idempotency-key reuse with no auto-retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the scoping rule and permission requirements, and most sentences carry operational weight for an async mutation. It is long and the two separate 'Poll ...' instructions risk reading as redundant, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full return/state burden and does so: it explains the per-network receipt lookup, the in_progress/next_check_seconds loop, and how to interpret reason_kind waiting vs failure. An agent has everything needed to invoke and interpret the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the description compensates by tying expected_generation and expected_default_revision to 'policy generation and default-group revision from get_network_security_policy' and by explaining idempotencyKey preservation. It adds meaning beyond the raw schema for the two undocumented integer params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Change accept/deny') and precisely scopes it to 'servers without custom groups' while noting explicit custom groups stay restrictive. That scope rule is genuinely clarifying, but it never distinguishes itself from adjacent siblings like update_network_security_group or retire_network_security_policy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real preconditions: 'Read current capabilities and owned resource state first; obtain approval for the exact change' and directs the caller to get_network_security_policy for the generation/revision inputs. Clear usage context, though it never states when to prefer a sibling tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_network_routed_egressSet network routed egressADestructiveInspect
Request the currently supported NAT transition for an owned network; the backend may refuse mode changes. This can replace the network's Internet route. public_address_id attaches an already-owned paid address and may remove it from a server. This never purchases an address. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| internet_access | Yes | ||
| public_address_id | No | Exact lowercase UUID returned by an owned networking resource | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it destructive/openWorld/non-idempotent, and the description adds substantial context beyond them: the backend may refuse, the Internet route can be replaced, public_address_id may remove an address from a server, it never purchases an address, ownership/feature/2FA-lock enforcement, and detailed async polling and reason_code semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded before the operational detail, and nearly every sentence carries weight for a destructive async operation with no output schema. The dense semicolon-chained polling/error block makes it harder to scan than ideal, but it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and half the parameters undocumented, the description supplies permissions, effect scope, async polling behavior, success-vs-pending distinction, and retry guidance. It stops short of stating reversibility/rollback behavior or the exact response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% and the description meaningfully elaborates public_address_id (attaches an owned paid address, may detach it, never purchases one). However internet_access's enum values (none/dedicated_single) and expected_generation (optimistic-concurrency token) are left unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (request a NAT transition on an owned network, replacing the Internet route) and clarifies the public_address_id side effect. It is fairly specific but somewhat winding and never names the sibling tools (get_network_routed_egress, set_network_vpn_peer_egress) that an agent should distinguish it from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit prerequisites are given: read capabilities/owned resource state first, obtain approval for the exact change, and networking:read vs networking:manage is required (full/read defaults do not grant it). No exclusions or named alternatives are provided, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_network_vpn_peer_egressSet network VPN peer egressADestructiveIdempotentInspect
Set a device's private-only, inherited NAT, or advertised chosen exit policy. Read egress options first; Internet routing requires explicit client-route opt-in and applied qualification. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | ||
| peer_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/idempotent/openWorld, and the description adds substantially beyond them: required scopes (networking:read vs networking:manage, with full/read defaults not applying), backend enforcement of ownership/feature/2FA, the fact that acceptance is pending rather than proof of connectivity, and precise polling semantics for in_progress/reason_kind. It also prescribes idempotency-key reuse and a no-auto-retry rule on transport uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and auth are front-loaded, which is good, but the polling paragraph is a dense run-on that mixes waiting behavior, reason_code interpretation, failure definition, and recovery guidance. The content is defensible but would read better split into shorter, clearly scoped sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-handling burden and does so by explaining that the returned operation/resource must be polled on in_progress with next_check_seconds, and how to classify failure versus waiting. Combined with scope and recovery guidance, an agent has enough to call and follow up correctly, though expected_generation remains unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description fleshes out policy intent (private-only vs inherited NAT vs advertised chosen exit, client-route opt-in) but never explains expected_generation's optimistic-concurrency role or the destinations/dns fields. The mode semantics are the main added value; the remainder leans on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb (Set) and resource (a VPN peer's egress policy) and enumerates the three modes, which cleanly separates it from siblings like set_network_vpn_peer_grants, set_network_routed_egress, and the read-only get_network_vpn_egress_options. It says 'a device's' rather than 'a peer's', a minor slippage, but the resource is otherwise unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real preconditions: read egress options first, Internet routing needs explicit client_route_opt_in plus applied qualification, and inspect current capabilities and owned state before changing. It stops short of naming the sibling read tool (get_network_vpn_egress_options) explicitly, so the agent must infer the lookup target.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_network_vpn_peer_grantsSet network VPN peer grantsADestructiveIdempotentInspect
Replace the device's complete reachable-server list when standalone VPN is available. Empty list removes server grants; use gateway generation. Check routes_update on the resulting peer for changes the customer must make to AllowedIPs. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| grants | Yes | ||
| peer_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it warns this replaces the entire list (matching destructiveHint), explains the empty-list deletion case, the routes_update consequence on AllowedIPs, backend ownership/feature/2FA enforcement, and that 'an accepted operation is pending, not proof of connectivity'. It then discloses the full asynchronous lifecycle (in_progress, reason_code/reason_kind, next_check_seconds) and the idempotency/recovery contract ('reuse only the original key and unchanged request; never automatically retry'), which annotations alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the mutation semantics, then layered prerequisites, then polling/recovery rules. Every sentence carries operational weight (permissions, approval, polling interpretation, retry policy), but the polling paragraph is long and the guidance about preserving reason_code and the idempotency key restates the same recovery idea more than once.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world, asynchronous mutation with no output schema and only 60% parameter coverage, the description supplies what the structured fields do not: auth scopes, approval workflow, post-change customer action (routes_update), and how to interpret the pending operation until in_progress is false. Nothing essential to calling this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%; peer_id, gateway_id and idempotencyKey are documented in-schema, while grants and expected_generation are not. The description compensates for grants ('Empty list removes server grants') and partially for the key ('preserve it and the unchanged body'), but expected_generation is only obliquely gestured at via 'use gateway generation' and never explained as an optimistic-concurrency token.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: 'Replace the device's complete reachable-server list when standalone VPN is available,' which tells the agent this is a full-list mutation of a VPN peer's grants, not an additive one. It also clarifies the semantics of the payload ('Empty list removes server grants'). It stops short of naming the neighboring *egress* operation, so the agent must infer the grants-vs-egress distinction itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions (standalone VPN must be available, 'Read current capabilities and owned resource state first', 'obtain approval for the exact change') and the exact permission scopes required (networking:read vs networking:manage, with the warning that 'full/read defaults do not grant networking'). It does not explicitly route the agent away from sibling tools such as set_network_vpn_peer_egress or create_network_vpn_peer, so there is no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_private_network_dnsSet private network DNSADestructiveIdempotentInspect
Replace the network's DHCP DNS mode and resolver addresses; changing or disabling them can interrupt name resolution for attached guests. Use dns_servers only for custom mode. Poll get_private_network.settings.dns_change; its DNS update UUID is not in the network operations feed. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dns_mode | Yes | ||
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| dns_servers | No | ||
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations: it discloses disruption risk to attached guests, the exact scope required (networking:read vs networking:manage, and that full/read defaults do not grant networking), backend ownership/feature/2FA enforcement, the fact that an accepted operation is pending rather than proven connectivity, and a full polling protocol for reason_code/reason_kind, plus idempotency-recovery rules. This is unusually rich disclosure for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the interruption warning are correctly front-loaded, but the back half is a long generic operation-polling/idempotency protocol that reads as boilerplate shared across many mutating tools. Much of it is operational guidance rather than tool-specific semantics, inflating the size without proportional per-sentence value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only 50% schema description coverage, the description compensates well on auth, safety, pending-vs-success semantics, and recovery. The remaining gap is the dns_mode mode values and the shape of the returned operation/resource the agent is told to poll.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, so the description must carry part of the burden; it meaningfully constrains dns_servers to custom mode. However, the three dns_mode enum values (provider/custom/none) are never explained, and the description does not clarify what each mode does to DHCP behavior, leaving the highest-impact parameter under-defined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause gives a precise verb+resource+scope: 'Replace the network's DHCP DNS mode and resolver addresses,' which clearly separates it from guest- or domain-level DNS siblings. It stops short of naming a specific alternative tool, so the differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete parameter-usage rule ('Use dns_servers only for custom mode'), a prerequisite sequence ('Read current capabilities and owned resource state first; obtain approval'), and a risk warning that changing/disabling interrupts guest name resolution. It never names a competing sibling tool to route the agent elsewhere, so it lands at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_private_network_namesSet private network namesADestructiveInspect
Replace the complete internal DNS zone label and alias list. Server names are automatic; these names resolve only inside this network. Omitted aliases are removed and may stop resolving. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| aliases | Yes | ||
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| zone_label | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations: it discloses that omitted aliases are removed and may stop resolving, that ownership/feature/2FA locks are enforced backend-side, that acceptance is pending rather than proof of connectivity, and it gives a full async lifecycle contract (in_progress flag, reason_code/reason_kind semantics, next_check_seconds polling, preserving reason_code). It also spells out the retry policy on transport uncertainty. This is exactly the kind of behavior annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and destructive semantics before permissions and the async protocol, so the critical information comes first. It is long and dense (the polling/reason_code passage is a wall of procedural text), but nearly every sentence carries operational meaning rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent async network mutation with no output schema, the description covers permissions, replacement semantics, backend enforcement, operation polling, failure interpretation, and retry safety. There is essentially nothing an agent needs in order to call and follow up on this tool correctly that is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only network_id is documented), so the description must compensate, and it does: it explains that the call is a full replacement of the zone label and alias list and that omitted aliases are dropped. It does not, however, clarify the relationship between zone_label and the alias names or the alias name format, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a precise verb and resource: 'Replace the complete internal DNS zone label and alias list,' and the second clarifies scope ('these names resolve only inside this network'), which implicitly separates it from public DNS tools like set_private_network_dns. It stops short of naming an alternative sibling, so it is clear but not sibling-routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states prerequisites and conditions well: explicit networking:read vs networking:manage scopes, that 'full/read defaults do not grant networking', and that the agent must read capabilities/owned state first and get approval. It gives clear context for when this tool is appropriate but never names an alternative tool or an explicit when-not-to-use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_private_port_security_groupsSet private port security groupsADestructiveIdempotentInspect
Replace the port's complete customer-group list. Empty list selects the network default; at most seven customer groups fit alongside platform DNS. Use policy and port generations separately. Poll get_network_security_policy for each affected network (policies[].network_id); these receipts are not generic network operation IDs. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| port_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| group_ids | Yes | ||
| network_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_generation | Yes | ||
| expected_port_generation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantial operational context: explicit networking:read or networking:manage permissions, backend ownership and 2FA enforcement, the fact that an accepted operation is pending rather than proof of connectivity, and a detailed polling protocol using in_progress and reason_code. It also explains transport-uncertainty recovery and warns against automatic retries, which is exactly the behavioral disclosure needed for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then proceeds through prerequisites, operation semantics, and recovery guidance in a logical order. It is long, but the complexity of polling and idempotency warrants most of the detail. A few sentences, especially around polling semantics, could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 7-parameter mutation tool with no output schema, the description covers everything an agent needs: required permissions, preconditions, the exact replacement semantics, operation lifecycle, polling with reason_code interpretation, and idempotency-key handling under uncertainty. It leaves no significant gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 57%, and the description compensates by explaining that group_ids is a complete replacement list, that an empty list selects the network default, and that at most seven groups are allowed. It also clarifies that policy and port generations must be used separately, adding meaning to expected_generation and expected_port_generation, which lack schema descriptions. The remaining parameters are either covered by the schema or reinforced by the idempotency discussion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource: "Replace the port's complete customer-group list." It immediately clarifies scope by noting that an empty list selects the network default and that at most seven customer groups fit, distinguishing port-level group assignment from network-level defaults. An agent can tell exactly what this tool mutates without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for use: replace the port's group list, use an empty list to reset to the network default, and read current capabilities and owned resource state before making changes. It also instructs obtaining approval for the exact change. However, it does not explicitly name alternative tools such as update_network_security_group or set_network_default_security_policy, so the agent must infer when this tool is preferable to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_vpn_server_accessSet VPN server accessADestructiveIdempotentInspect
Choose accept or groups_only for the VPN's access to attached servers when this capability is available. The setting operation can already be succeeded while security-policy application is pending. Read the gateway network with get_private_network, then get_network_security_policy using its project_id and network_id; do not treat the setting operation as proof of firewall delivery. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructive/idempotent/openWorld) by disclosing auth scopes (networking:read vs networking:manage), backend enforcement (ownership, feature availability, 2FA locks), and detailed async polling semantics including reason_kind/reason_code interpretation. It also states the critical caveat that an accepted operation is pending, not proof of firewall delivery or connectivity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the operational detail is dense but every block is substantive. There is mild redundancy – the point that an accepted operation is not proof of connectivity is made twice ('do not treat the setting operation as proof of firewall delivery' and 'An accepted operation is pending, not proof of connectivity').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world, asynchronous mutation with no output schema, the description covers the full lifecycle an agent needs: capability preconditions, required reads, auth scopes, async polling with next_check_seconds and reason codes, and idempotent recovery. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: gateway_id and idempotencyKey are documented in the schema, but the mode enum carries no schema description. The description names the two values and frames mode as controlling the VPN's access to attached servers, but does not explain what 'accept' vs 'groups_only' actually means, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set VPN server access', choosing 'accept or groups_only for the VPN's access to attached servers'), which is clearly distinct from neighboring tools like set_network_vpn_peer_grants or set_network_default_security_policy. It doesn't explicitly name a sibling it must not be confused with, but the resource scope is specific enough for correct selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: act only 'when this capability is available', read the gateway network and security policy first, and obtain approval for the exact change. It stops short of naming alternative tools or stating when-not to use this one, but the preconditions are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_applicationStart applicationAIdempotentInspect
Start a stopped owned managed application. Confirm the action, then poll installation and events until the queued operation completes. Requires applications:manage and a client-global idempotency key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirms this exact action | |
| idempotencyKey | Yes | Client-global unique key for this exact lifecycle request. Reuse only for an unchanged retry. | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), and the description adds real behavioral value: the applications:manage permission requirement, the client-global idempotency key requirement, and the fact that this is an async queued operation requiring follow-up polling. It stops short of saying what to do if the app is not stopped or how long the queue typically takes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its precondition, then the confirmation step and the follow-up polling. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async mutation with no output schema, the description supplies the essential missing context: required scope, idempotency key usage, the confirmation gate, and the need to poll installation/events afterwards. Error and failure-handling behavior is left unstated, keeping it just short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters including orderNo, installation_id, idempotencyKey and confirmed are fully documented in the schema. The description only reinforces confirmation and idempotency semantics, adding little beyond what the schema already states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Start a stopped owned managed application') and adds the precondition that the target must be stopped and owned, which separates it from siblings like start_service, restart_application and install_application without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: confirm first, then poll installation and events until the queued operation completes. It does not explicitly contrast with restart_application or start_service, so the agent must infer the stopped-vs-running distinction, but the usage intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_serviceStart serviceAInspect
Start a stopped VPS. Returns a numeric event id; follow it with wait_for_event. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it discloses that the operation is asynchronous by returning a numeric event id, tells the agent to follow up with wait_for_event, and specifies required authorization scopes and API key type. These are exactly the details an agent needs to call and track the action correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each front-loaded and purposeful: purpose, return/follow-up behavior, and prerequisites. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, non-destructive mutation operation, the definition covers purpose, async return behavior, follow-up tool, and authorization requirements. With annotations and a fully described input schema, nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the orderNo parameter is fully documented in the schema with format and examples. The description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Start a stopped VPS.' This clearly distinguishes it from sibling mutations like stop_service and restart_service, and it names the state transition from stopped to running.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'stopped VPS' gives a clear condition for when to use the tool, and the follow-up instruction to use wait_for_event is actionable. However, it does not explicitly name alternatives such as restart_service for a running VPS or stop_service for the opposite action, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_applicationStop applicationADestructiveIdempotentInspect
Stop an owned managed application. This interrupts service. Confirm the interruption, then poll installation and events until the queued operation completes. Requires applications:manage and a client-global idempotency key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirms this exact action | |
| idempotencyKey | Yes | Client-global unique key for this exact lifecycle request. Reuse only for an unchanged retry. | |
| installation_id | Yes | Managed application installation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already flag destructive/idempotent/open-world), the description discloses that stopping interrupts service, that the operation is queued/asynchronous and must be polled via installation and events, that it requires the applications:manage permission, and that a client-global idempotency key is needed. These are concrete behavioral facts an agent cannot infer from the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each doing distinct work: purpose, consequence, async workflow, prerequisites. The purpose leads, and nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema mutation tool, the description supplies the needed operational picture: permission requirement, idempotency, service interruption, and the polling loop to follow up. It omits any mention of alternatives or how the eventual result is surfaced, keeping it a step short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already fully documented, including the confirmed and idempotencyKey semantics. The description echoes the idempotency-key and confirmation requirements but adds no format, range, or constraint detail beyond the schema, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Stop an owned managed application") and adds an ownership scope qualifier. The intent is unambiguous relative to start/restart siblings by plain semantics, but the description never explicitly contrasts itself with restart_application, uninstall_application, or suspend, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to invoke it (you want to interrupt service) plus operational guidance: confirm the interruption, then poll installation and events until the queued operation completes. It stops short of naming exclusions or alternatives such as restart or suspend, so it is clear context without explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_serviceStop serviceADestructiveInspect
Stop a running VPS. Returns a numeric event id; follow it with wait_for_event. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description meaningfully adds to that: the operation is asynchronous (returns a numeric event id), the required scope and key type, and the required follow-up step. It does not say whether the stop is graceful or forced, or whether it is reversible, which would be the remaining useful detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler, front-loaded with the action, then the return/next-step contract, then the permission prerequisite. Every sentence contributes information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining the return value (a numeric event id) and the next tool to call. Combined with the prerequisite and the destructive annotation, an agent has everything needed to invoke and sequence this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single orderNo parameter is fully documented there with type, pattern, length and examples. The description adds nothing about the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (stop) and resource (a running VPS), which is unambiguous on its own and implicitly separates it from start_service and restart_service. It stops short of naming those siblings or their scoping criteria, so it is clear but not differentiated explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete operational context: the target must be a running VPS, the call needs services:manage plus a full-access API key, and the returned event id should be followed with wait_for_event. That is actionable guidance, though it never states when to prefer suspend_service over stop_service.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suspend_serviceSuspend serviceADestructiveInspect
Suspend a running Cloud VPS (KVM/VDS) service. Changes service state to suspended. Returns a tracking event ID. VDS/Cloud VPS only; the service must be running. Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint annotation by disclosing the state transition, the required auth scopes (services:manage, full-access API key), the running precondition, and the tracking event ID return value. These are exactly the operational facts an agent needs before invoking a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with the action and resulting state front-loaded, followed by return value and constraints. No filler; every sentence carries necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully names the return value (tracking event ID). Combined with auth requirements, platform restriction, and precondition, an agent has everything needed to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single orderNo parameter is fully documented in the schema (format, pattern, example). The description adds no parameter-level detail beyond this, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Suspend) and resource (running Cloud VPS/KVM/VDS service) and clarifies the resulting state change to 'suspended', which distinguishes it from stop_service and resume_service. Scope is narrowed to VDS/Cloud VPS, so an agent can tell what kind of service it applies to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear preconditions: VDS/Cloud VPS only and the service must be running. It does not explicitly name alternatives (e.g., resume_service or stop_service) or say when suspension is preferable, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_network_vpn_peer_configTake network VPN peer configADestructiveInspect
Consume the device's sealed configuration ONCE. This is a management mutation despite GET. The ciphertext is decryptable only by the customer's matching external reveal private key; this tool never creates, requests or decrypts private keys. Save the returned sealed payload externally; a second pickup is 410. Never retry automatically after an uncertain transport result. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| peer_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| gateway_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| acknowledge_one_time_pickup | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation/destructive/non-idempotent profile, but the description adds substantial context beyond them: one-time consumption with 410 on a second pickup, ciphertext decryptable only by the customer's key, no key creation or decryption, pending-vs-failure semantics via in_progress and reason_kind, and explicit no-auto-retry guidance on transport uncertainty. It also discloses the permission scopes (networking:read vs networking:manage) and backend 2FA/ownership enforcement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-time nature and mutation semantics are front-loaded in the first two sentences, and most of the length is load-bearing operational detail for an irreversible one-shot action. It repeats the no-auto-retry theme at both the start and the end of the passage, which is minor redundancy in an otherwise tight, dense block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers what comes back (a sealed payload to be saved externally), how to poll the returned operation/resource, which flag and reason_kind values indicate waiting versus failure, and the error code for a duplicate pickup. For a three-parameter destructive tool this is complete enough to act on without further reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with peer_id and gateway_id already documented in the schema. The description adds real meaning for acknowledge_one_time_pickup by stressing single consumption and the 410 consequence, which explains why that boolean is mandatory, but it does not restate the UUID format or the exact-ownership requirement in the body text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Consume the device's sealed configuration') with an emphatic scope qualifier ('ONCE') that immediately separates it from the many read-only get_network_vpn_* siblings. The opening line 'This is a management mutation despite GET' preempts the most likely misclassification by an agent scanning sibling names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete prerequisites and ordering ('Read current capabilities and owned resource state first; obtain approval for the exact change') plus the exact permission scopes required. It stops short of naming the specific sibling tools to call for the capability/state read, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_extra_settingsToggle extra settingsADestructiveInspect
Toggle extra VPS settings: ppp, fuse, tuntap, or nfs Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Setting name | |
| value | Yes | true to enable, false to disable | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false; the description adds the non-annotation detail that a privileged scope (services:manage) and a full-access key are required. It still doesn't say what the toggle actually disrupts (e.g., whether the VPS restarts or connections drop).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two very short sentences with the action front-loaded and no filler. The permission clause runs onto the preceding sentence without a separator, a minor readability flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the schema plus annotations cover parameters and the safety profile, so the description is close to sufficient. It omits the operational consequence of toggling (service restart, connectivity impact), which matters for a destructive-setting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents name, value, and orderNo. The description only repeats the enum values for 'name' (ppp, fuse, tuntap, nfs) and adds nothing about the boolean semantics or the order-number format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (toggle) and resource (extra VPS settings) and enumerates the four togglable settings, so the agent knows the scope precisely. It does not explicitly distinguish itself from the nearby sibling toggle_ipv6, which is the one plausible confusion source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete prerequisite — requires services:manage and a full-access API key — which tells the agent whether it can even call the tool. It gives no when-not-to-use guidance or alternatives for related network toggles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_ipv6Toggle IPv6ADestructiveInspect
Enable or disable IPv6 on VPS Requires services:manage and a full-access API key.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | true to enable, false to disable | |
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds genuinely new behavioral context beyond them: the required permission scope and the full-access API key constraint. It omits whether the toggle disrupts connectivity or restarts the service, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely compact and front-loaded: the action comes first, then the prerequisite. The missing sentence break between the action and the permission requirement slightly hurts readability, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter boolean toggle with full schema coverage, full annotations and no output schema, the description supplies the auth requirement an agent would otherwise have to guess. It could still note whether the change requires a service restart, but nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (value semantics plus an orderNo pattern, length bounds and examples), giving 100% coverage. The description adds nothing about parameter format or accepted values, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (enable/disable) and resource (IPv6) scoped to VPS, so an agent immediately knows the operation. No sibling tool handles IPv6, so it is unambiguously distinguishable from neighbours like toggle_extra_settings or get_networking_features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use (turning IPv6 on or off for a VPS) plus the prerequisites — services:manage scope and a full-access API key. It does not name an alternative or a when-not condition, but none plausibly exists for this operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uninstall_applicationUninstall applicationADestructiveIdempotentInspect
Permanently delete an owned managed application's containers, configuration, saved credentials, and application data; server backups remain. Read the installation and obtain explicit user confirmation of data loss before calling. Poll installation and events for the final result. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirms this exact action | |
| idempotencyKey | Yes | Client-global unique key for this exact lifecycle request. Reuse only for an unchanged retry. | |
| installation_id | Yes | Managed application installation UUID | |
| acknowledge_data_loss | Yes | The user explicitly confirmed permanent deletion of managed configuration, credentials, and application data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it enumerates exactly what is destroyed, notes that server backups remain, requires the applications:manage permission, and mandates a confirmation workflow. This is rich behavioral context an agent could not infer from the schema or annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The impact statement is front-loaded, followed by prerequisites and the permission requirement. Every clause earns its place; nothing is padded or restated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema tool, the description covers impact, what survives, ordering guidance, permission scope, confirmation requirement, and result polling. Everything needed to invoke it safely is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including the meaning of confirmed and acknowledge_data_loss. The description reinforces the confirmation semantics but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (uninstall a managed application) and precisely scopes what is removed (containers, configuration, saved credentials, application data) versus what survives (server backups). This distinguishes it from siblings like stop_application or rollback_application, which leave the installation intact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions (read the installation, obtain explicit user confirmation of data loss) and postconditions (poll installation and events for the final result). It does not explicitly contrast with alternatives like stop_application or reinstall_os, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_applicationUpdate applicationADestructiveIdempotentInspect
Queue the backend-selected newer immutable release for an owned managed application. First read get_application_installation and copy the exact advertised blueprint_version and upstream_version as execution preconditions; these are not caller-selected targets. Confirm the update, then poll installation and events for the final result. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| confirmed | Yes | True only after the user confirms this exact action | |
| idempotencyKey | Yes | Client-global unique key for this exact lifecycle request. Reuse only for an unchanged retry. | |
| installation_id | Yes | Managed application installation UUID | |
| expected_upstream_version | Yes | Exact upstream_version from the current available_actions update capability | |
| expected_blueprint_version | Yes | Exact blueprint_version from the current available_actions update capability |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true, and openWorld=true, so the safety profile is covered. The description adds valuable non-annotation context: the applications:manage authorization requirement and the confirmation/polling lifecycle. It stops short of describing what the update replaces or failure/reversibility behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then layers the required workflow and the permission requirement. Four tight sentences with little waste, though the opening sentence is somewhat dense and could be marginally trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and full annotation coverage, the description supplies exactly the missing pieces: precondition sourcing, confirmation gating, post-call polling, and the required permission. Nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining that expected_blueprint_version and expected_upstream_version are preconditions copied from get_application_installation rather than caller-selected targets, which disambiguates how those two required params must be sourced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Queue the backend-selected newer immutable release for an owned managed application") and clarifies that versions are backend-selected, not caller-chosen. This semantically distinguishes it from siblings like install_application, rollback_application, and repair_application without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow: first read get_application_installation, copy blueprint_version/upstream_version as preconditions, confirm, then poll installation and events. It names the prerequisite sibling tool and the follow-up tools, leaving no inference about how to sequence the call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dns_recordUpdate DNS recordADestructiveInspect
Update an existing forward DNS record by its ID (PUT), replacing its desired value, TTL or comment. A changed value can replace the public DNS answer after publication. System-managed records cannot be edited. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | TTL in seconds, allowed range 60-604800. Defaults to 120. | |
| name | Yes | Record name. Use @ for apex, or a relative name inside the zone. | |
| type | Yes | DNS record type. PTR is intentionally not supported here. | |
| comment | No | Optional note about this record, max 255 chars. | |
| content | Yes | DNS record value for the selected type | |
| zone_id | Yes | DNS zone ID | |
| record_id | Yes | DNS record ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, so the description adds genuine context beyond them: PUT full-replace semantics, the fact that a changed value can replace the live public DNS answer after publication, the prohibition on editing system-managed records, and the required dns:write scope. It does not clarify whether fields omitted from the request are cleared.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action and mechanism, then consequences, then constraints, then auth. Every sentence carries distinct, load-bearing information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers auth scope, record eligibility, replace semantics, and the externally visible consequence of changing a value. The only real gap is what happens to parameters not supplied in a PUT-style replace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters with formats, ranges, and the type enum. The description reinforces that value, TTL, and comment are the replaceable fields but adds no syntax or format detail beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update), resource (forward DNS record), identifier mechanism (by its ID), and HTTP semantics (PUT) that clarify it is a full replace rather than a patch. It distinguishes itself from upsert_dns_record by scoping to an existing record identified by ID, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides prerequisites and constraints (system-managed records cannot be edited; requires dns:write with an API key) but never states when to choose this tool over upsert_dns_record or delete_dns_record plus re-creation. Usage is implied by the 'existing record by ID' framing rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_domain_contactUpdate domain contactBDestructiveInspect
Update an existing domain contact. Requires domains:manage when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain contact ID | |
| city | No | City | |
| kind | Yes | Contact kind | |
| Yes | Contact email | ||
| phone | No | Phone number, preferably E.164 | |
| state | No | State/province | |
| address1 | No | Street address | |
| address2 | No | Street address line 2 | |
| vat_code | No | VAT code when relevant | |
| last_name | No | Required for individual contacts | |
| first_name | No | Required for individual contacts | |
| is_default | No | Make this the default domain contact | |
| postal_code | No | Postal code | |
| country_code | Yes | ISO-3166 alpha-2 country code | |
| organization | No | Required for business contacts | |
| organization_code | No | Company/legal entity code required for business contacts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description usefully adds the auth requirement (domains:manage with an API key). It does not disclose the mutation semantics that matter most for a 16-field update: whether omitted fields are preserved or cleared, and whether changing is_default affects other contacts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the permission constraint. Nothing is padded, though the brevity comes partly from under-specification rather than tight editing alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive multi-field mutation with no output schema, the definition covers the primary action and auth requirement but leaves the partial-update/field-replacement behavior and any side effects of is_default unstated. Adequate but with a clear gap an agent would care about.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents every one of the 16 fields, including the individual/business conditional requirements and the enum. The description adds no parameter-level meaning beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Update an existing domain contact") that cleanly separates it from create_domain_contact, delete_domain_contact and list_domain_contacts. It does not, however, explicitly name those siblings or scope what a contact covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only conditional guidance is the domains:manage permission requirement. There is no statement of when to use this versus create_domain_contact or delete_domain_contact, nor any prerequisite (e.g. contact must already exist and belong to the account).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_functionUpdate functionADestructiveInspect
Update a Firecracker Function's code or configuration. This replaces submitted fields and can change or disable a public webhook. Call get_function first. If integrity.unreadable_fields names code or environment, the backend refuses the update unless the user explicitly approves replacing every unavailable value from a trusted copy and acknowledge_unreadable_replacement=true is passed. Leave that flag false for ordinary updates.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Function source code | |
| name | No | Function name | |
| vcpus | No | 1-8 vCPUs, default 1 | |
| enabled | No | Whether the function can be invoked | |
| memory_mb | No | 64-8192 MB, default 256 | |
| entrypoint | No | Entrypoint command/handler | |
| description | No | Description (max 2000 chars) | |
| environment | No | Environment variables as JSON object string. Omit during unrelated edits to preserve existing values; never send back redacted placeholders. | |
| function_id | Yes | Function ID from list_functions | |
| runtime_os_id | No | Runtime OS ID (see list_functions response for available runtimes) | |
| timeout_seconds | No | 1-300 seconds, default 30 | |
| webhook_enabled | No | Expose a public webhook URL for this function | |
| private_network_id | No | Private network ID from list_functions privateNetworking discovery. Omit to preserve an existing binding during update; null detaches it. Backend validates ownership and availability. | |
| rotate_webhook_secret | No | Rotate the webhook secret | |
| acknowledge_unreadable_replacement | No | Explicit customer approval to replace code or environment named by integrity.unreadable_fields; default false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is known. The description adds significant operational context: it replaces submitted fields, can disable a public webhook, and describes the backend's refusal behavior around unreadable fields. It stops short of describing rate limits or return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences front-loading the core purpose, then prerequisites, then the conditional integrity workflow. Every sentence carries operational weight without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter destructive mutation tool with no output schema, the description covers the essential workflow (get_function first), the destructive side effect (webhook changes), and the critical conditional flag. Given the rich schema, this is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 15 parameters thoroughly. The description emphasizes the critical acknowledge_unreadable_replacement flag and webhook implications, but adds little syntax beyond what the schema provides for other params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update a Firecracker Function's code or configuration') and names the exact scope of changeable fields. It is clearly distinguishable from sibling tools like create_function or delete_function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Call get_function first' and routes the agent through the integrity.unreadable_fields workflow. It states when to set acknowledge_unreadable_replacement=true vs leaving it false, though it doesn't broadly compare to other update tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_network_security_groupUpdate network security groupADestructiveIdempotentInspect
Replace the complete group name and rule list at its expected revision. Bound servers may be affected; empty rules deny traffic allowed only by this group. Poll get_network_security_policy for each affected network (policies[].network_id); these receipts are not generic network operation IDs. Requires explicit networking:read for reads or networking:manage for changes; full/read defaults do not grant networking. The backend enforces ownership, feature availability and service 2FA locks. Read current capabilities and owned resource state first; obtain approval for the exact change. An accepted operation is pending, not proof of connectivity. Poll the returned operation/resource on its in_progress flag, waiting next_check_seconds between reads: while in_progress is true its reason_code is what is awaited (reason_kind waiting, e.g. a queued or pending reason, or a control plane that has not answered yet), never an error; only in_progress false with reason_kind failure is a failure. Preserve reason_code. On transport uncertainty inspect state and reuse only the original key and unchanged request; never automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| rules | Yes | ||
| group_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| project_id | Yes | Exact lowercase UUID returned by an owned networking resource | |
| idempotencyKey | Yes | Idempotency-Key for this exact change; preserve it and the unchanged body on uncertain recovery | |
| expected_revision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive, non-readOnly, idempotent, openWorld, but the description adds substantial context beyond them: full replacement semantics, that empty rules deny previously allowed traffic, that bound servers may be affected, backend enforcement of ownership/features/2FA, and that an accepted operation is pending rather than proof of connectivity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every sentence carries operational content, but the later polling/idempotency passage is a dense run-on that would benefit from structure. It is information-rich rather than padded, so it stays above the adequate line without being maximally tidy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex destructive replace with six required params and no output schema, the description covers the full lifecycle: preconditions, auth, side effects on bound servers, asynchronous polling semantics, reason_code handling, and idempotent recovery on transport uncertainty. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema coverage, the description compensates by giving meaning to expected_revision ('at its expected revision') as a concurrency token and to idempotencyKey ('reuse only the original key and unchanged request'). It also frames name/rules as a complete replacement set, though it leaves group_id and project_id unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Replace the complete group name and rule list at its expected revision.' The word 'Replace' and 'complete' distinguishes it from partial-update or clone siblings, and the revision framing signals optimistic concurrency. An agent can tell this apart from create/clone/delete security group tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use preconditions (read current capabilities and owned resource state first, obtain approval) and a follow-up action (poll get_network_security_policy per affected network and its policies[].network_id). It also states the auth requirement (networking:read for reads, networking:manage for changes) and that defaults do not grant networking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_dns_recordUpsert DNS recordADestructiveInspect
Add a forward DNS desired-state record to a native zone, identified by name, type and content together. Different content adds another record and keeps existing values; it does not replace them. An identical tuple updates its TTL/comment and re-enables it if disabled. To replace an existing record's content, read get_dns_zone and pass its exact record_id to update_dns_record. Changes affect public answers after publication. PTR and *.arpa are rejected; use change_rdns for reverse DNS. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | TTL in seconds, allowed range 60-604800. Defaults to 120. | |
| name | Yes | Record name. Use @ for apex, or a relative name inside the zone. | |
| type | Yes | DNS record type. PTR is intentionally not supported here. | |
| comment | No | Optional note about this record, max 255 chars. | |
| content | Yes | DNS record value for the selected type | |
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/openWorldHint annotations, the description discloses non-obvious semantics: additive rather than replacement behavior, re-enabling of disabled records on an identical tuple, the auth scope (dns:write), and the fact that changes only affect public answers after publication. These are meaningful behavioral traits an agent could not infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Business logic is front-loaded, followed by alternatives and constraints, in five dense sentences with no filler. Every sentence carries actionable information and none merely restates the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, the description covers identity semantics, mutation behavior, auth requirement, and routing to sibling tools, while annotations carry the safety profile. Nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds real meaning by explaining that name, type and content jointly identify a record and how ttl/comment behave on a matching tuple. It does not add per-parameter format detail (e.g., TTL ranges), which the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (add/upsert) and resource (forward DNS desired-state record in a native zone) and immediately clarifies the identity key as the name+type+content tuple. It explicitly names and distinguishes the sibling tools update_dns_record and change_rdns, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use behavior (different content appends, identical tuple updates TTL/comment) and states when NOT to use it (PTR and *.arpa are rejected; use change_rdns for reverse DNS) plus the alternative for replacement (get_dns_zone + update_dns_record). Preconditions and the required dns:write permission are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_application_recipeValidate customer application recipeAIdempotentInspect
Resolve image tags from their registries to immutable digests, then validate the resulting customer-owned Docker Compose document with the authoritative policy on the target Firecracker worker. The successful result includes the exact digest-pinned definition to store. This does not create, install, or modify a project or container. The queued validation is polled for about 30 seconds and may still return pending. Retain its ID and resolved_compose_yaml, poll get_application_recipe_validation, and resume recipe creation with the same pinned document and validation_id after valid=true. Requires applications:manage.
| Name | Required | Description | Default |
|---|---|---|---|
| orderNo | Yes | Tenant-owned service order number: 1-64 ASCII letters, digits or hyphens, e.g. VP12345 or VP12345-1 | |
| compose_yaml | Yes | Docker Compose YAML. Mutable image tags are resolved once and replaced with immutable sha256 digests before worker validation. | |
| registry_credential_ids | No | Owned registry credential UUIDs from list_application_registry_credentials |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that the validation is queued, polled for ~30 seconds, may still return pending, requires applications:manage, and that the digest-pinned document must be retained. These are exactly the operational traits (latency, permissions, persistence) an agent cannot infer from readOnlyHint/openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, and the workflow, exclusion, and permission notes all carry weight. It is slightly dense and run-on across six sentences, but nothing is throwaway.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining the return payload (validation ID and resolved_compose_yaml), the pending state, the polling loop, and the resume condition. An agent has everything needed to invoke and follow through correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so orderNo, compose_yaml, and registry_credential_ids are fully documented in the schema. The description reinforces tag-to-digest resolution but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a precise, multi-step verb chain on a specific resource: resolve image tags to digests, then validate the resulting Compose document on the Firecracker worker. It clearly differentiates from siblings like create_application_recipe and install_application_recipe by declaring it does not create, install, or modify a project or container.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-not ('does not create, install, or modify a project or container') and routes the agent to the follow-on tool (get_application_recipe_validation) with the exact condition to resume (valid=true). This is the pre-validation step in the recipe creation workflow, and it names the adjacent tools by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_dns_zoneVerify DNS zoneADestructiveInspect
Check the zone's ownership TXT value (_vpsnet-dns.) and publish the zone when it matches: publicly, or served authoritatively by the nameservers the parent zone delegated the name to when the zone was created (the previous DNS provider) - so a domain already pointed at ns1/ns2.vpsnet.com is verified by adding the TXT at the previous provider, never by moving the nameservers back. Delegation to VPSnet nameservers alone is never proof. A refusal (verificationMissing) returns verification.checks (every place checked and what was found) and verification.next_step: add_txt | add_txt_at_previous_provider | add_txt_in_parent_zone | contact_support (only VPSnet support can confirm the domain; the zone is kept, not deleted, while the domain points at VPSnet). lookupUnavailable (HTTP 503) means the platform could not run the DNS check - retry later; it is not a missing record. Requires dns:write when using an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | DNS zone ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds a great deal beyond the annotations: the dns:write scope requirement, the meaning of verificationMissing with its checks/next_step payload, the add_txt vs add_txt_at_previous_provider vs contact_support decision, and the explicit note that a 503 lookupUnavailable is a transient failure to retry rather than a missing record. It also clarifies the zone survives while pointed at VPSnet, tempering the raw destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content-rich and the goal (check TXT, publish on match) is front-loaded before the edge cases. It is dense with nested parentheses and em-dashes, which slightly hurts scannability, but almost every clause delivers distinct, actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the heavy lifting for returns and covers the refusal shape (verification.checks, verification.next_step) and the 503 case thoroughly. It is a bit thinner on the success return, but an agent knows how to invoke it and how to interpret the notable outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single well-documented zone_id parameter, so the schema already carries the semantics. The description references the zone but adds no new detail (syntax, format, constraints) about the parameter itself, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (verify/publish the DNS zone) and precisely what is checked: the ownership TXT value at _vpsnet-dns.<zone>. It also distinguishes the verification path from sibling operations like reapply_dns_zone or reissue_dns_zone_verification by explaining the check-then-publish behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong context for when to use it (ownership verification before the zone serves traffic, plus the key insight that a domain already delegated to ns1/ns2.vpsnet.com must be verified at the previous provider). However it never routes the agent explicitly against siblings such as reissue_dns_zone_verification, so the alternative-selection guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_eventWait for eventARead-onlyInspect
Poll an asynchronous action until it is completed or error, or until timeout_seconds pass (default 120, max 600), every 3 seconds. Same ids as get_event. Returns the last state and waited_seconds; timed_out=true means the action is still running, not that it failed. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric `event` id or `noty` UUID returned by the action | |
| timeout_seconds | No | How long to wait (default 120) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, closed-world. Beyond that the description adds real behavioral detail: a 3-second poll interval, timeout default/max, and the crucial nuance that timed_out=true means still-running rather than failed. It doesn't describe pagination or full return shape, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action, then timeout semantics, then the safety caveat. Every clause carries information an agent needs; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only poll with no output schema, the description supplies return semantics (last state, waited_seconds, timed_out meaning), timing behavior, and id provenance. Nothing required to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both id and timeout_seconds including the default. The description only adds the polling cadence and the 'same ids as get_event' linkage; useful but marginal over structured data, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it polls an asynchronous action until completion, error, or timeout. The phrase 'Same ids as get_event' pins its relationship to the sibling retrieval tool, so an agent can distinguish waiting from fetching without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is the tool to block on an in-flight async action and positions it against get_event, which shares the same ids. It gives no explicit when-not-to-use (e.g. use get_event for a single non-blocking check), stopping short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
311 tool updates
v2.3.16- First observed
add_domain_parent_ds - First observed
add_network_load_balancer_listener - First observed
add_network_load_balancer_member - First observed
apply_dns_template - First observed
attach_network_vpn_gateway - First observed
attach_private_network_port - First observed
attach_public_address_to_network - First observed
attach_public_address_to_server - First observed
attach_service_dns_record - First observed
bind_network_public_ip - First observed
browse_restore_files - First observed
calculate_plan_change - First observed
cancel_application_action - First observed
cancel_automatic_ssl_subscription - First observed
cancel_certificate - First observed
cancel_free_certificate - First observed
change_certificate_validation - First observed
change_hostname - First observed
change_plan - First observed
change_rdns - First observed
change_root_password - First observed
change_title - First observed
check_domain_availability - First observed
clear_rdns - First observed
clone_network_security_group - First observed
configure_application_access - First observed
configure_application_resource_thresholds - First observed
configure_network_public_forwarding - First observed
confirm_application_compose_adoption - First observed
confirm_domain_register - First observed
confirm_domain_renew - First observed
confirm_domain_restore - First observed
confirm_domain_transfer - First observed
console_service - First observed
create_application_recipe - First observed
create_application_recipe_revision - First observed
create_backup - First observed
create_ddns_token - First observed
create_dns_zone - First observed
create_domain_contact - First observed
create_domain_glue_record - First observed
create_firecracker_snapshot - First observed
create_free_certificate - First observed
create_function - First observed
create_network_security_group - First observed
create_network_vpn_peer - First observed
create_private_network - First observed
create_snapshot - First observed
create_ssh_key - First observed
create_temp_vm - First observed
delete_dns_record - First observed
delete_dns_zone - First observed
delete_domain_contact - First observed
delete_domain_glue_record - First observed
delete_domain_parent_ds - First observed
delete_firecracker_snapshot - First observed
delete_function - First observed
delete_network_load_balancer - First observed
delete_network_public_binding - First observed
delete_network_security_group - First observed
delete_network_vpn_gateway - First observed
delete_private_network - First observed
delete_snapshot - First observed
delete_ssh_key - First observed
delete_temp_vm - First observed
deploy_ssh_key - First observed
detach_network_public_address - First observed
detach_network_vpn_gateway - First observed
detach_private_network_port - First observed
disable_network_product_auto_renew - First observed
disable_public_address_auto_renew - First observed
disable_vpn_auto_renew - First observed
discover_service_containers - First observed
download_certificate - First observed
download_free_certificate - First observed
enter_service_rescue - First observed
estimate_network_load_balancer - First observed
exit_service_rescue - First observed
export_application_recipe - First observed
export_dns_zone - First observed
find_network_product_order - First observed
flush_iptables - First observed
get_account - First observed
get_api_key - First observed
get_api_key_activity - First observed
get_api_key_inference_usage - First observed
get_application_compose_adoption - First observed
get_application_data_restore - First observed
get_application_events - First observed
get_application_health - First observed
get_application_inspection - First observed
get_application_installation - First observed
get_application_logs - First observed
get_application_recipe_validation - First observed
get_automatic_ssl_subscription - First observed
get_backup_history - First observed
get_backup_status - First observed
get_certificate - First observed
get_certificate_catalog_product - First observed
get_certificate_validation - First observed
get_dns_service_status - First observed
get_dns_zone - First observed
get_dns_zone_diagnostics - First observed
get_dns_zone_history - First observed
get_dnssec - First observed
get_domain - First observed
get_domain_ordering_status - First observed
get_domain_parent_ds - First observed
get_event - First observed
get_faq - First observed
get_firecracker_backup_history - First observed
get_firecracker_backup_status - First observed
get_free_certificate - First observed
get_free_certificate_eligibility - First observed
get_free_certificate_instruction - First observed
get_function - First observed
get_function_invocation - First observed
get_guest_agent_status - First observed
get_guest_nameservers - First observed
get_hostname - First observed
get_invoice - First observed
get_login_history - First observed
get_management_history - First observed
get_network_appliance_billing - First observed
get_network_appliance_capabilities - First observed
get_network_appliance_operation - First observed
get_network_load_balancer - First observed
get_network_payment_methods - First observed
get_network_product_order - First observed
get_network_public_address - First observed
get_network_public_binding - First observed
get_network_routed_egress - First observed
get_network_security_policy - First observed
get_network_vpn_egress_options - First observed
get_network_vpn_gateway - First observed
get_network_vpn_summary - First observed
get_networking_capabilities - First observed
get_networking_features - First observed
get_networking_operation - First observed
get_networking_overview - First observed
get_networking_topology - First observed
get_order_options - First observed
get_order_plans - First observed
get_os_options - First observed
get_period_options - First observed
get_plan_options - First observed
get_plan_resources - First observed
get_pricing - First observed
get_private_network - First observed
get_profile - First observed
get_rdns - First observed
get_registrar_lock - First observed
get_restore_file_browse - First observed
get_restore_status - First observed
get_security_group_capabilities - First observed
get_service - First observed
get_service_container_discovery - First observed
get_service_graphs - First observed
get_service_history - First observed
get_service_rescue - First observed
get_ssh_key - First observed
get_system_status - First observed
get_temp_vm - First observed
get_temp_vm_options - First observed
get_title - First observed
get_usage_statements - First observed
import_dns_zone - First observed
install_application - First observed
install_application_recipe - First observed
invoke_function - First observed
list_api_keys - First observed
list_application_catalog - First observed
list_application_recipe_revisions - First observed
list_application_recipes - First observed
list_application_registry_credentials - First observed
list_application_restore_points - First observed
list_automatic_ssl_actions - First observed
list_automatic_ssl_subscriptions - First observed
list_certificate_actions - First observed
list_certificate_catalog - First observed
list_certificates - First observed
list_ddns_tokens - First observed
list_dns_templates - First observed
list_dns_zones - First observed
list_domain_contacts - First observed
list_domain_glue_records - First observed
list_domain_tlds - First observed
list_domains - First observed
list_firecracker_snapshots - First observed
list_free_certificates - First observed
list_function_history - First observed
list_function_invocations - First observed
list_functions - First observed
list_invoices - First observed
list_network_appliances - First observed
list_network_attachment_candidates - First observed
list_network_load_balancers - First observed
list_network_product_periods - First observed
list_network_products - First observed
list_network_public_addresses - First observed
list_network_security_groups - First observed
list_network_vpn_gateways - First observed
list_networking_operations - First observed
list_payments - First observed
list_private_network_ports - First observed
list_private_networks - First observed
list_restore_file_points - First observed
list_restore_points - First observed
list_service_applications - First observed
list_service_dns_options - First observed
list_service_private_ports - First observed
list_services - First observed
list_snapshots - First observed
list_ssh_keys - First observed
list_temp_vms - First observed
manage_application - First observed
manage_automatic_ssl_subscription - First observed
manage_certificate - First observed
manage_free_certificate - First observed
move_network_public_ip - First observed
order_automatic_ssl_domain - First observed
order_automatic_ssl_renewal - First observed
order_automatic_ssl_subscription - First observed
order_certificate - First observed
order_network_product - First observed
order_service - First observed
preflight_free_certificate - First observed
prepare_application_compose_adoption - First observed
quote_account_vpn - First observed
quote_application_data_restore - First observed
quote_automatic_ssl_domain - First observed
quote_automatic_ssl_renewal - First observed
quote_automatic_ssl_subscription - First observed
quote_certificate - First observed
quote_domain_register - First observed
quote_domain_renew - First observed
quote_domain_restore - First observed
quote_domain_transfer - First observed
quote_network_product - First observed
quote_network_product_renewal - First observed
quote_network_public_address - First observed
quote_public_address_renewal - First observed
quote_temp_vm - First observed
quote_vpn_period_renewal - First observed
reapply_dns_zone - First observed
recheck_certificate_validation - First observed
recheck_free_certificate - First observed
reconcile_application - First observed
refresh_automatic_ssl_subscription - First observed
refresh_certificate - First observed
reinstall_os - First observed
reissue_certificate - First observed
reissue_dns_zone_verification - First observed
remove_automatic_ssl_domain - First observed
remove_network_load_balancer_listener - First observed
remove_network_load_balancer_member - First observed
renew_free_certificate - First observed
renew_network_product - First observed
renew_network_public_address - First observed
renew_service - First observed
renew_vpn_period - First observed
repair_application - First observed
replace_automatic_ssl_domain - First observed
request_restore - First observed
resend_certificate_validation - First observed
reset_hostname - First observed
restart_application - First observed
restart_service - First observed
restore_application_data - First observed
resume_service - First observed
retire_network_security_policy - First observed
retry_network_security_policy - First observed
retry_private_network - First observed
retry_private_network_port - First observed
revoke_ddns_token - First observed
revoke_free_certificate - First observed
revoke_network_vpn_peer - First observed
rollback_application - First observed
rollback_firecracker_snapshot - First observed
rollback_snapshot - First observed
set_auto_renew - First observed
set_dnssec - First observed
set_domain_auto_renew - First observed
set_domain_nameservers - First observed
set_guest_nameservers - First observed
set_network_default_security_policy - First observed
set_network_routed_egress - First observed
set_network_vpn_peer_egress - First observed
set_network_vpn_peer_grants - First observed
set_private_network_dns - First observed
set_private_network_names - First observed
set_private_port_security_groups - First observed
set_vpn_server_access - First observed
start_application - First observed
start_service - First observed
stop_application - First observed
stop_service - First observed
suspend_service - First observed
take_network_vpn_peer_config - First observed
toggle_extra_settings - First observed
toggle_ipv6 - First observed
uninstall_application - First observed
update_application - First observed
update_dns_record - First observed
update_domain_contact - First observed
update_function - First observed
update_network_security_group - First observed
upsert_dns_record - First observed
validate_application_recipe - First observed
verify_dns_zone - First observed
wait_for_event
TDQS
Scored across 311 tools
Many tools overlap in purpose, especially manage_application versus start/stop/restart/uninstall_application, and the numerous get_network_* versus get_networking_* capabilities tools. Quote/order/confirm flows for products, addresses, VPNs, certificates, and domains are similarly named and easy to misselect. Verbose descriptions help somewhat, but the 311-tool surface still creates substantial ambiguity.
Tool names are mostly snake_case and follow a verb_noun pattern, but vocabulary is inconsistent: get_networking_* and get_network_* refer to closely related domains, while list_, get_, quote_, order_, confirm_, manage_, and renew_ are mixed across resource families. It remains readable, but the lack of a single predictable prefix scheme hurts consistency.
311 tools is far beyond any reasonable MCP server scope, even for a broad VPS hosting platform. The result is severe cognitive load, duplicated-looking operations, and a high chance of agent misselection. This is an extreme mismatch, not merely a slightly heavy surface.
The server covers account, VPS lifecycle, backups, snapshots, networking, DNS, domains, certificates, applications, functions, temporary VMs, and billing with broad CRUD-like coverage. There are some gaps and intentional portal-only dead ends, such as service cancellation/deletion and API-key management, but the core domain surface is extensive.
Maintenance
Related MCP Connectors
Manage Vozora VPS servers, SSH keys, firewalls, DNS and usage from an AI agent.
Manage your Servera hosting over MCP: VPS/VDS, DNS, firewall, backups, SSL, billing, tickets.
Manage your Servera hosting over MCP: VPS/VDS, DNS, firewall, backups, SSL, billing, tickets.
Manage FadeHost game servers, Discord bots and VPS: console, stats, backups, logs, lifecycle.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables remote command execution and file management over SSH and SFTP, supporting persistent connection storage and automated discovery for BinaryLane VPS servers.3,763 npm2MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage VPS servers, domains, DNS records, and SSH keys through the VPS.org API via natural language.262MIT

Hostodo MCPofficial
AlicenseBqualityDmaintenanceManage Hostodo VPS infrastructure from MCP clients and AI agents with scoped tokens and audit logs.47MIT- FlicenseNot gradedqualityCmaintenanceEnables ChatGPT, Claude, and Cursor to securely manage a VPS through filesystem operations, system monitoring, and long-horizon command execution, protected by OAuth 2.1 with PKCE.-